diff --git a/merlin b/merlin index 7d7f525..a0b096c 160000 --- a/merlin +++ b/merlin @@ -1 +1 @@ -Subproject commit 7d7f525180f5979516e10c05d0cd49823edb5ef1 +Subproject commit a0b096c243bbcea483bf8728a71c30eeafb18d11 diff --git a/mlx.opam b/mlx.opam index 94881d2..9109266 100644 --- a/mlx.opam +++ b/mlx.opam @@ -8,7 +8,7 @@ doc: "https://url/to/documentation" bug-reports: "https://github.com/ocaml-mlx/mlx/issues" depends: [ "ocaml" {>= "4.14.0"} - "ppxlib" {>= "0.34.0"} + "ppxlib" {>= "0.37.0"} "dune" {>= "3.16"} "menhir" {= "20201216" & with-dev-setup} "ocamlformat" {with-dev-setup} diff --git a/mlx/ast_helper.ml b/mlx/ast_helper.ml index e99def7..bcd5e5e 100644 --- a/mlx/ast_helper.ml +++ b/mlx/ast_helper.ml @@ -33,15 +33,20 @@ let with_default_loc l f = Misc.protect_refs [Misc.R (default_loc, l)] f module Const = struct - let integer ?suffix i = Pconst_integer (i, suffix) - let int ?suffix i = integer ?suffix (Int.to_string i) - let int32 ?(suffix='l') i = integer ~suffix (Int32.to_string i) - let int64 ?(suffix='L') i = integer ~suffix (Int64.to_string i) - let nativeint ?(suffix='n') i = integer ~suffix (Nativeint.to_string i) - let float ?suffix f = Pconst_float (f, suffix) - let char c = Pconst_char c + let mk ?(loc = !default_loc) d = + {pconst_desc = d; + pconst_loc = loc} + + let integer ?loc ?suffix i = mk ?loc (Pconst_integer (i, suffix)) + let int ?loc ?suffix i = integer ?loc ?suffix (Int.to_string i) + let int32 ?loc ?(suffix='l') i = integer ?loc ~suffix (Int32.to_string i) + let int64 ?loc ?(suffix='L') i = integer ?loc ~suffix (Int64.to_string i) + let nativeint ?loc ?(suffix='n') i = + integer ?loc ~suffix (Nativeint.to_string i) + let float ?loc ?suffix f = mk ?loc (Pconst_float (f, suffix)) + let char ?loc c = mk ?loc (Pconst_char c) let string ?quotation_delimiter ?(loc= !default_loc) s = - Pconst_string (s, loc, quotation_delimiter) + mk ~loc (Pconst_string (s, loc, quotation_delimiter)) end module Attr = struct @@ -70,8 +75,9 @@ module Typ = struct let alias ?loc ?attrs a b = mk ?loc ?attrs (Ptyp_alias (a, b)) let variant ?loc ?attrs a b c = mk ?loc ?attrs (Ptyp_variant (a, b, c)) let poly ?loc ?attrs a b = mk ?loc ?attrs (Ptyp_poly (a, b)) - let package ?loc ?attrs a b = mk ?loc ?attrs (Ptyp_package (a, b)) + let package ?loc ?attrs a = mk ?loc ?attrs (Ptyp_package a) let extension ?loc ?attrs a = mk ?loc ?attrs (Ptyp_extension a) + let open_ ?loc ?attrs mod_ident t = mk ?loc ?attrs (Ptyp_open (mod_ident, t)) let force_poly t = match t.ptyp_desc with @@ -92,7 +98,8 @@ module Typ = struct Ptyp_var x | Ptyp_arrow (label,core_type,core_type') -> Ptyp_arrow(label, loop core_type, loop core_type') - | Ptyp_tuple lst -> Ptyp_tuple (List.map loop lst) + | Ptyp_tuple lst -> + Ptyp_tuple (List.map (fun (l, t) -> l, loop t) lst) | Ptyp_constr( { txt = Longident.Lident s }, []) when List.mem s var_names -> Ptyp_var s @@ -102,9 +109,9 @@ module Typ = struct Ptyp_object (List.map loop_object_field lst, o) | Ptyp_class (longident, lst) -> Ptyp_class (longident, List.map loop lst) - | Ptyp_alias(core_type, string) -> - check_variable var_names t.ptyp_loc string; - Ptyp_alias(loop core_type, string) + | Ptyp_alias(core_type, alias) -> + check_variable var_names alias.loc alias.txt; + Ptyp_alias(loop core_type, alias) | Ptyp_variant(row_field_list, flag, lbl_lst_option) -> Ptyp_variant(List.map loop_row_field row_field_list, flag, lbl_lst_option) @@ -112,8 +119,10 @@ module Typ = struct List.iter (fun v -> check_variable var_names t.ptyp_loc v.txt) string_lst; Ptyp_poly(string_lst, loop core_type) - | Ptyp_package(longident,lst) -> - Ptyp_package(longident,List.map (fun (n,typ) -> (n,loop typ) ) lst) + | Ptyp_package ptyp -> + Ptyp_package (loop_package_type ptyp) + | Ptyp_open (mod_ident, core_type) -> + Ptyp_open (mod_ident, loop core_type) | Ptyp_extension (s, arg) -> Ptyp_extension (s, arg) in @@ -134,9 +143,17 @@ module Typ = struct Oinherit (loop t) in { field with pof_desc; } + and loop_package_type ptyp = + { ptyp with + ppt_cstrs = List.map (fun (n,typ) -> (n,loop typ) ) ptyp.ppt_cstrs } in loop t + let package_type ?(loc = !default_loc) ?(attrs = []) p c = + {ppt_loc = loc; + ppt_path = p; + ppt_cstrs = c; + ppt_attrs = attrs} end module Pat = struct @@ -152,7 +169,7 @@ module Pat = struct let alias ?loc ?attrs a b = mk ?loc ?attrs (Ppat_alias (a, b)) let constant ?loc ?attrs a = mk ?loc ?attrs (Ppat_constant a) let interval ?loc ?attrs a b = mk ?loc ?attrs (Ppat_interval (a, b)) - let tuple ?loc ?attrs a = mk ?loc ?attrs (Ppat_tuple a) + let tuple ?loc ?attrs a b = mk ?loc ?attrs (Ppat_tuple (a, b)) let construct ?loc ?attrs a b = mk ?loc ?attrs (Ppat_construct (a, b)) let variant ?loc ?attrs a b = mk ?loc ?attrs (Ppat_variant (a, b)) let record ?loc ?attrs a b = mk ?loc ?attrs (Ppat_record (a, b)) @@ -164,6 +181,7 @@ module Pat = struct let unpack ?loc ?attrs a = mk ?loc ?attrs (Ppat_unpack a) let open_ ?loc ?attrs a b = mk ?loc ?attrs (Ppat_open (a, b)) let exception_ ?loc ?attrs a = mk ?loc ?attrs (Ppat_exception a) + let effect_ ?loc ?attrs a b = mk ?loc ?attrs (Ppat_effect(a, b)) let extension ?loc ?attrs a = mk ?loc ?attrs (Ppat_extension a) end @@ -178,8 +196,7 @@ module Exp = struct let ident ?loc ?attrs a = mk ?loc ?attrs (Pexp_ident a) let constant ?loc ?attrs a = mk ?loc ?attrs (Pexp_constant a) let let_ ?loc ?attrs a b c = mk ?loc ?attrs (Pexp_let (a, b, c)) - let fun_ ?loc ?attrs a b c d = mk ?loc ?attrs (Pexp_fun (a, b, c, d)) - let function_ ?loc ?attrs a = mk ?loc ?attrs (Pexp_function a) + let function_ ?loc ?attrs a b c = mk ?loc ?attrs (Pexp_function (a, b, c)) let apply ?loc ?attrs a b = mk ?loc ?attrs (Pexp_apply (a, b)) let match_ ?loc ?attrs a b = mk ?loc ?attrs (Pexp_match (a, b)) let try_ ?loc ?attrs a b = mk ?loc ?attrs (Pexp_try (a, b)) @@ -207,7 +224,7 @@ module Exp = struct let poly ?loc ?attrs a b = mk ?loc ?attrs (Pexp_poly (a, b)) let object_ ?loc ?attrs a = mk ?loc ?attrs (Pexp_object a) let newtype ?loc ?attrs a b = mk ?loc ?attrs (Pexp_newtype (a, b)) - let pack ?loc ?attrs a = mk ?loc ?attrs (Pexp_pack a) + let pack ?loc ?attrs a b = mk ?loc ?attrs (Pexp_pack (a, b)) let open_ ?loc ?attrs a b = mk ?loc ?attrs (Pexp_open (a, b)) let letop ?loc ?attrs let_ ands body = mk ?loc ?attrs (Pexp_letop {let_; ands; body}) @@ -600,7 +617,6 @@ module Te = struct pext_loc = loc; pext_attributes = add_docs_attrs docs (add_info_attrs info attrs); } - end module Csig = struct diff --git a/mlx/ast_helper.mli b/mlx/ast_helper.mli index 07cb87c..f63b15e 100644 --- a/mlx/ast_helper.mli +++ b/mlx/ast_helper.mli @@ -44,15 +44,16 @@ val with_default_loc: loc -> (unit -> 'a) -> 'a (** {1 Constants} *) module Const : sig - val char : char -> constant + val mk : ?loc:loc -> constant_desc -> constant + val char : ?loc:loc -> char -> constant val string : ?quotation_delimiter:string -> ?loc:Location.t -> string -> constant - val integer : ?suffix:char -> string -> constant - val int : ?suffix:char -> int -> constant - val int32 : ?suffix:char -> int32 -> constant - val int64 : ?suffix:char -> int64 -> constant - val nativeint : ?suffix:char -> nativeint -> constant - val float : ?suffix:char -> string -> constant + val integer : ?loc:loc -> ?suffix:char -> string -> constant + val int : ?loc:loc -> ?suffix:char -> int -> constant + val int32 : ?loc:loc -> ?suffix:char -> int32 -> constant + val int64 : ?loc:loc -> ?suffix:char -> int64 -> constant + val nativeint : ?loc:loc -> ?suffix:char -> nativeint -> constant + val float : ?loc:loc -> ?suffix:char -> string -> constant end (** {1 Attributes} *) @@ -72,17 +73,19 @@ module Typ : val var: ?loc:loc -> ?attrs:attrs -> string -> core_type val arrow: ?loc:loc -> ?attrs:attrs -> arg_label -> core_type -> core_type -> core_type - val tuple: ?loc:loc -> ?attrs:attrs -> core_type list -> core_type + val tuple: ?loc:loc -> ?attrs:attrs -> (string option * core_type) list + -> core_type val constr: ?loc:loc -> ?attrs:attrs -> lid -> core_type list -> core_type val object_: ?loc:loc -> ?attrs:attrs -> object_field list -> closed_flag -> core_type val class_: ?loc:loc -> ?attrs:attrs -> lid -> core_type list -> core_type - val alias: ?loc:loc -> ?attrs:attrs -> core_type -> string -> core_type + val alias: ?loc:loc -> ?attrs:attrs -> core_type -> string with_loc + -> core_type val variant: ?loc:loc -> ?attrs:attrs -> row_field list -> closed_flag -> label list option -> core_type val poly: ?loc:loc -> ?attrs:attrs -> str list -> core_type -> core_type - val package: ?loc:loc -> ?attrs:attrs -> lid -> (lid * core_type) list - -> core_type + val package: ?loc:loc -> ?attrs:attrs -> package_type -> core_type + val open_ : ?loc:loc -> ?attrs:attrs -> lid -> core_type -> core_type val extension: ?loc:loc -> ?attrs:attrs -> extension -> core_type val force_poly: core_type -> core_type @@ -95,6 +98,10 @@ module Typ : appears in [newtypes]. @since 4.05 *) + + val package_type: ?loc:loc -> ?attrs:attrs -> lid -> (lid * core_type) list + -> package_type + (** @since 5.4 *) end (** Patterns *) @@ -108,7 +115,8 @@ module Pat: val alias: ?loc:loc -> ?attrs:attrs -> pattern -> str -> pattern val constant: ?loc:loc -> ?attrs:attrs -> constant -> pattern val interval: ?loc:loc -> ?attrs:attrs -> constant -> constant -> pattern - val tuple: ?loc:loc -> ?attrs:attrs -> pattern list -> pattern + val tuple: ?loc:loc -> ?attrs:attrs -> (string option * pattern) list + -> closed_flag -> pattern val construct: ?loc:loc -> ?attrs:attrs -> lid -> (str list * pattern) option -> pattern val variant: ?loc:loc -> ?attrs:attrs -> label -> pattern option -> pattern @@ -122,6 +130,7 @@ module Pat: val unpack: ?loc:loc -> ?attrs:attrs -> str_opt -> pattern val open_: ?loc:loc -> ?attrs:attrs -> lid -> pattern -> pattern val exception_: ?loc:loc -> ?attrs:attrs -> pattern -> pattern + val effect_: ?loc:loc -> ?attrs:attrs -> pattern -> pattern -> pattern val extension: ?loc:loc -> ?attrs:attrs -> extension -> pattern end @@ -135,15 +144,16 @@ module Exp: val constant: ?loc:loc -> ?attrs:attrs -> constant -> expression val let_: ?loc:loc -> ?attrs:attrs -> rec_flag -> value_binding list -> expression -> expression - val fun_: ?loc:loc -> ?attrs:attrs -> arg_label -> expression option - -> pattern -> expression -> expression - val function_: ?loc:loc -> ?attrs:attrs -> case list -> expression + val function_ : ?loc:loc -> ?attrs:attrs -> function_param list + -> type_constraint option -> function_body + -> expression val apply: ?loc:loc -> ?attrs:attrs -> expression -> (arg_label * expression) list -> expression val match_: ?loc:loc -> ?attrs:attrs -> expression -> case list -> expression val try_: ?loc:loc -> ?attrs:attrs -> expression -> case list -> expression - val tuple: ?loc:loc -> ?attrs:attrs -> expression list -> expression + val tuple: ?loc:loc -> ?attrs:attrs -> (string option * expression) list + -> expression val construct: ?loc:loc -> ?attrs:attrs -> lid -> expression option -> expression val variant: ?loc:loc -> ?attrs:attrs -> label -> expression option @@ -182,7 +192,8 @@ module Exp: -> expression val object_: ?loc:loc -> ?attrs:attrs -> class_structure -> expression val newtype: ?loc:loc -> ?attrs:attrs -> str -> expression -> expression - val pack: ?loc:loc -> ?attrs:attrs -> module_expr -> expression + val pack: ?loc:loc -> ?attrs:attrs -> module_expr -> package_type option + -> expression val open_: ?loc:loc -> ?attrs:attrs -> open_declaration -> expression -> expression val letop: ?loc:loc -> ?attrs:attrs -> binding_op diff --git a/mlx/clflags.ml b/mlx/clflags.ml new file mode 100644 index 0000000..bf79b30 --- /dev/null +++ b/mlx/clflags.ml @@ -0,0 +1,798 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) +(* *) +(* Copyright 1996 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(* Command-line parameters *) + +module Int_arg_helper = Arg_helper.Make (struct + module Key = struct + include Numbers.Int + let of_string = int_of_string + end + + module Value = struct + include Numbers.Int + let of_string = int_of_string + end +end) +module Float_arg_helper = Arg_helper.Make (struct + module Key = struct + include Numbers.Int + let of_string = int_of_string + end + + module Value = struct + include Numbers.Float + let of_string = float_of_string + end +end) + +let objfiles = ref ([] : string list) (* .cmo and .cma files *) +and ccobjs = ref ([] : string list) (* .o, .a, .so and -cclib -lxxx *) +and dllibs = ref ([] : string list) (* .so and -dllib -lxxx *) + +let cmi_file = ref None + +let compile_only = ref false (* -c *) +and output_name = ref (None : string option) (* -o *) +and include_dirs = ref ([] : string list) (* -I *) +and hidden_include_dirs = ref ([] : string list) (* -H *) +and no_std_include = ref false (* -nostdlib *) +and no_cwd = ref false (* -nocwd *) +and print_types = ref false (* -i *) +and print_variance = ref false (* -i-variance *) +and make_archive = ref false (* -a *) +and debug = ref false (* -g *) +and debug_full = ref false (* For full DWARF support *) +and unsafe = ref false (* -unsafe *) +and use_linscan = ref false (* -linscan *) +and link_everything = ref false (* -linkall *) +and custom_runtime = ref false (* -custom *) +and no_check_prims = ref false (* -no-check-prims *) +and bytecode_compatible_32 = ref false (* -compat-32 *) +and output_c_object = ref false (* -output-obj *) +and output_complete_object = ref false (* -output-complete-obj *) +and output_complete_executable = ref false (* -output-complete-exe *) +and all_ccopts = ref ([] : string list) (* -ccopt *) +and classic = ref false (* -nolabels *) +and nopervasives = ref false (* -nopervasives *) +and match_context_rows = ref 32 (* -match-context-rows *) +and safer_matching = ref false (* -safer-matching *) +and preprocessor = ref(None : string option) (* -pp *) +and all_ppx = ref ([] : string list) (* -ppx *) +let absname = ref false (* -absname *) +let annotations = ref false (* -annot *) +let binary_annotations = ref false (* -bin-annot *) +let store_occurrences = ref false (* -bin-annot-occurrences *) +and use_threads = ref false (* -thread *) +and noassert = ref false (* -noassert *) +and verbose = ref false (* -verbose *) +and noversion = ref false (* -no-version *) +and noprompt = ref false (* -noprompt *) +and nopromptcont = ref false (* -nopromptcont *) +and init_file = ref (None : string option) (* -init *) +and noinit = ref false (* -noinit *) +and open_modules = ref [] (* -open *) +and use_prims = ref "" (* -use-prims ... *) +and use_runtime = ref "" (* -use-runtime ... *) +and plugin = ref false (* -plugin ... *) +and principal = ref false (* -principal *) +and real_paths = ref true (* -short-paths *) +and recursive_types = ref false (* -rectypes *) +and strict_sequence = ref false (* -strict-sequence *) +and strict_formats = ref true (* -strict-formats *) +and applicative_functors = ref true (* -no-app-funct *) +and make_runtime = ref false (* -make-runtime *) +and c_compiler = ref (None: string option) (* -cc *) +and no_auto_link = ref false (* -noautolink *) +and dllpaths = ref ([] : string list) (* -dllpath *) +and make_package = ref false (* -pack *) +and for_package = ref (None: string option) (* -for-pack *) +and error_size = ref 500 (* -error-size *) +and float_const_prop = ref true (* -no-float-const-prop *) +and no_alias_deps = ref false (* -no-alias-deps *) +let unique_ids = ref true (* -d(no-)unique-ids *) +let canonical_ids = ref false (* -d(no-)canonical-ids *) +let locations = ref true (* -d(no-)locations *) +let dump_source = ref false (* -dsource *) +let dump_parsetree = ref false (* -dparsetree *) +and dump_typedtree = ref false (* -dtypedtree *) +and dump_shape = ref false (* -dshape *) +and dump_matchcomp = ref false (* -dmatchcomp *) +and dump_rawlambda = ref false (* -drawlambda *) +and dump_lambda = ref false (* -dlambda *) +and dump_rawclambda = ref false (* -drawclambda *) +and dump_clambda = ref false (* -dclambda *) +and dump_rawflambda = ref false (* -drawflambda *) +and dump_flambda = ref false (* -dflambda *) +and dump_flambda_let = ref (None : int option) (* -dflambda-let=... *) +and dump_flambda_verbose = ref false (* -dflambda-verbose *) +and dump_instr = ref false (* -dinstr *) +and keep_camlprimc_file = ref false (* -dcamlprimc *) + +let keyword_edition: string option ref = ref None + +let keep_asm_file = ref false (* -S *) +let optimize_for_speed = ref true (* -compact *) +and opaque = ref false (* -opaque *) + +and dump_cmm = ref false (* -dcmm *) +let dump_selection = ref false (* -dsel *) +let dump_combine = ref false (* -dcombine *) +let dump_cse = ref false (* -dcse *) +let dump_live = ref false (* -dlive *) +let dump_spill = ref false (* -dspill *) +let dump_split = ref false (* -dsplit *) +let dump_interf = ref false (* -dinterf *) +let dump_prefer = ref false (* -dprefer *) +let dump_interval = ref false (* -dinterval *) +let dump_regalloc = ref false (* -dalloc *) +let dump_reload = ref false (* -dreload *) +let dump_scheduling = ref false (* -dscheduling *) +let dump_linear = ref false (* -dlinear *) +let keep_startup_file = ref false (* -dstartup *) +let profile_columns : Profile.column list ref = ref [] (* -dprofile/-dtimings *) + +let native_code = ref false (* set to true under ocamlopt *) + +let force_slash = ref false (* for ocamldep *) +let clambda_checks = ref false (* -clambda-checks *) +let cmm_invariants = + ref Config.with_cmm_invariants (* -dcmm-invariants *) + +let parsetree_ghost_loc_invariant = ref false + (* -dparsetree-ghost-loc-invariant *) + +let flambda_invariant_checks = + ref Config.with_flambda_invariants (* -flambda-(no-)invariants *) + +let dont_write_files = ref false (* set to true under ocamldoc *) + +let insn_sched_default = true +let insn_sched = ref insn_sched_default (* -[no-]insn-sched *) + +let std_include_flag prefix = + if !no_std_include then "" + else (prefix ^ (Filename.quote Config.standard_library)) + +let std_include_dir () = + if !no_std_include then [] else [Config.standard_library] + +let shared = ref false (* -shared *) +let dlcode = ref true (* not -nodynlink *) + +let pic_code = ref (match Config.architecture with (* -fPIC *) + | "amd64" | "s390x" -> true + | _ -> false) + +let runtime_variant = ref "" + +let with_runtime = ref true (* -with-runtime *) + +let keep_docs = ref false (* -keep-docs *) +let keep_locs = ref true (* -keep-locs *) + +let classic_inlining = ref false (* -Oclassic *) +let inlining_report = ref false (* -inlining-report *) + +let afl_instrument = ref Config.afl_instrument (* -afl-instrument *) +let afl_inst_ratio = ref 100 (* -afl-inst-ratio *) + +let function_sections = ref false (* -function-sections *) + +let simplify_rounds = ref None (* -rounds *) +let default_simplify_rounds = ref 1 (* -rounds *) +let rounds () = + match !simplify_rounds with + | None -> !default_simplify_rounds + | Some r -> r + +let default_inline_threshold = if Config.flambda then 10. else 10. /. 8. +let inline_toplevel_multiplier = 16 +let default_inline_toplevel_threshold = + int_of_float ((float inline_toplevel_multiplier) *. default_inline_threshold) +let default_inline_call_cost = 5 +let default_inline_alloc_cost = 7 +let default_inline_prim_cost = 3 +let default_inline_branch_cost = 5 +let default_inline_indirect_cost = 4 +let default_inline_branch_factor = 0.1 +let default_inline_lifting_benefit = 1300 +let default_inline_max_unroll = 0 +let default_inline_max_depth = 1 + +let inline_threshold = ref (Float_arg_helper.default default_inline_threshold) +let inline_toplevel_threshold = + ref (Int_arg_helper.default default_inline_toplevel_threshold) +let inline_call_cost = ref (Int_arg_helper.default default_inline_call_cost) +let inline_alloc_cost = ref (Int_arg_helper.default default_inline_alloc_cost) +let inline_prim_cost = ref (Int_arg_helper.default default_inline_prim_cost) +let inline_branch_cost = + ref (Int_arg_helper.default default_inline_branch_cost) +let inline_indirect_cost = + ref (Int_arg_helper.default default_inline_indirect_cost) +let inline_branch_factor = + ref (Float_arg_helper.default default_inline_branch_factor) +let inline_lifting_benefit = + ref (Int_arg_helper.default default_inline_lifting_benefit) +let inline_max_unroll = + ref (Int_arg_helper.default default_inline_max_unroll) +let inline_max_depth = + ref (Int_arg_helper.default default_inline_max_depth) + + +let unbox_specialised_args = ref true (* -no-unbox-specialised-args *) +let unbox_free_vars_of_closures = ref true +let unbox_closures = ref false (* -unbox-closures *) +let default_unbox_closures_factor = 10 +let unbox_closures_factor = + ref default_unbox_closures_factor (* -unbox-closures-factor *) +let remove_unused_arguments = ref false (* -remove-unused-arguments *) + +type inlining_arguments = { + inline_call_cost : int option; + inline_alloc_cost : int option; + inline_prim_cost : int option; + inline_branch_cost : int option; + inline_indirect_cost : int option; + inline_lifting_benefit : int option; + inline_branch_factor : float option; + inline_max_depth : int option; + inline_max_unroll : int option; + inline_threshold : float option; + inline_toplevel_threshold : int option; +} + +let set_int_arg round (arg:Int_arg_helper.parsed ref) default value = + let value : int = + match value with + | None -> default + | Some value -> value + in + match round with + | None -> + arg := Int_arg_helper.set_base_default value + (Int_arg_helper.reset_base_overrides !arg) + | Some round -> + arg := Int_arg_helper.add_base_override round value !arg + +let set_float_arg round (arg:Float_arg_helper.parsed ref) default value = + let value = + match value with + | None -> default + | Some value -> value + in + match round with + | None -> + arg := Float_arg_helper.set_base_default value + (Float_arg_helper.reset_base_overrides !arg) + | Some round -> + arg := Float_arg_helper.add_base_override round value !arg + +let use_inlining_arguments_set ?round (arg:inlining_arguments) = + let set_int = set_int_arg round in + let set_float = set_float_arg round in + set_int inline_call_cost default_inline_call_cost arg.inline_call_cost; + set_int inline_alloc_cost default_inline_alloc_cost arg.inline_alloc_cost; + set_int inline_prim_cost default_inline_prim_cost arg.inline_prim_cost; + set_int inline_branch_cost + default_inline_branch_cost arg.inline_branch_cost; + set_int inline_indirect_cost + default_inline_indirect_cost arg.inline_indirect_cost; + set_int inline_lifting_benefit + default_inline_lifting_benefit arg.inline_lifting_benefit; + set_float inline_branch_factor + default_inline_branch_factor arg.inline_branch_factor; + set_int inline_max_depth + default_inline_max_depth arg.inline_max_depth; + set_int inline_max_unroll + default_inline_max_unroll arg.inline_max_unroll; + set_float inline_threshold + default_inline_threshold arg.inline_threshold; + set_int inline_toplevel_threshold + default_inline_toplevel_threshold arg.inline_toplevel_threshold + +(* o1 is the default *) +let o1_arguments = { + inline_call_cost = None; + inline_alloc_cost = None; + inline_prim_cost = None; + inline_branch_cost = None; + inline_indirect_cost = None; + inline_lifting_benefit = None; + inline_branch_factor = None; + inline_max_depth = None; + inline_max_unroll = None; + inline_threshold = None; + inline_toplevel_threshold = None; +} + +let classic_arguments = { + inline_call_cost = None; + inline_alloc_cost = None; + inline_prim_cost = None; + inline_branch_cost = None; + inline_indirect_cost = None; + inline_lifting_benefit = None; + inline_branch_factor = None; + inline_max_depth = None; + inline_max_unroll = None; + (* [inline_threshold] matches the current compiler's default. + Note that this particular fraction can be expressed exactly in + floating point. *) + inline_threshold = Some (10. /. 8.); + (* [inline_toplevel_threshold] is not used in classic mode. *) + inline_toplevel_threshold = Some 1; +} + +let o2_arguments = { + inline_call_cost = Some (2 * default_inline_call_cost); + inline_alloc_cost = Some (2 * default_inline_alloc_cost); + inline_prim_cost = Some (2 * default_inline_prim_cost); + inline_branch_cost = Some (2 * default_inline_branch_cost); + inline_indirect_cost = Some (2 * default_inline_indirect_cost); + inline_lifting_benefit = None; + inline_branch_factor = None; + inline_max_depth = Some 2; + inline_max_unroll = None; + inline_threshold = Some 25.; + inline_toplevel_threshold = Some (25 * inline_toplevel_multiplier); +} + +let o3_arguments = { + inline_call_cost = Some (3 * default_inline_call_cost); + inline_alloc_cost = Some (3 * default_inline_alloc_cost); + inline_prim_cost = Some (3 * default_inline_prim_cost); + inline_branch_cost = Some (3 * default_inline_branch_cost); + inline_indirect_cost = Some (3 * default_inline_indirect_cost); + inline_lifting_benefit = None; + inline_branch_factor = Some 0.; + inline_max_depth = Some 3; + inline_max_unroll = Some 1; + inline_threshold = Some 50.; + inline_toplevel_threshold = Some (50 * inline_toplevel_multiplier); +} + +let all_passes = ref [] +let dumped_passes_list = ref [] +let dumped_pass s = + assert(List.mem s !all_passes); + List.mem s !dumped_passes_list + +let set_dumped_pass s enabled = + if (List.mem s !all_passes) then begin + let passes_without_s = List.filter ((<>) s) !dumped_passes_list in + let dumped_passes = + if enabled then + s :: passes_without_s + else + passes_without_s + in + dumped_passes_list := dumped_passes + end + +let dump_into_file = ref false (* -dump-into-file *) +let dump_dir: string option ref = ref None (* -dump-dir *) + +type 'a env_reader = { + parse : string -> 'a option; + print : 'a -> string; + usage : string; + env_var : string; +} + +let color = ref None (* -color *) + +let color_reader = { + parse = (function + | "auto" -> Some Misc.Color.Auto + | "always" -> Some Misc.Color.Always + | "never" -> Some Misc.Color.Never + | _ -> None); + print = (function + | Misc.Color.Auto -> "auto" + | Misc.Color.Always -> "always" + | Misc.Color.Never -> "never"); + usage = "expected \"auto\", \"always\" or \"never\""; + env_var = "OCAML_COLOR"; +} + +let error_style = ref None (* -error-style *) + +let error_style_reader = { + parse = (function + | "contextual" -> Some Misc.Error_style.Contextual + | "short" -> Some Misc.Error_style.Short + | _ -> None); + print = (function + | Misc.Error_style.Contextual -> "contextual" + | Misc.Error_style.Short -> "short"); + usage = "expected \"contextual\" or \"short\""; + env_var = "OCAML_ERROR_STYLE"; +} + +let unboxed_types = ref false + +(* This is used by the -save-ir-after option. *) +module Compiler_ir = struct + type t = Linear + + let all = [ + Linear; + ] + + let extension t = + let ext = + match t with + | Linear -> "linear" + in + ".cmir-" ^ ext + + (** [extract_extension_with_pass filename] returns the IR whose extension + is a prefix of the extension of [filename], and the suffix, + which can be used to distinguish different passes on the same IR. + For example, [extract_extension_with_pass "foo.cmir-linear123"] + returns [Some (Linear, "123")]. *) + let extract_extension_with_pass filename = + let ext = Filename.extension filename in + let ext_len = String.length ext in + if ext_len <= 0 then None + else begin + let is_prefix ir = + let s = extension ir in + let s_len = String.length s in + s_len <= ext_len && s = String.sub ext 0 s_len + in + let drop_prefix ir = + let s = extension ir in + let s_len = String.length s in + String.sub ext s_len (ext_len - s_len) + in + let ir = List.find_opt is_prefix all in + match ir with + | None -> None + | Some ir -> Some (ir, drop_prefix ir) + end +end + +(* This is used by the -stop-after option. *) +module Compiler_pass = struct + (* If you add a new pass, the following must be updated: + - the variable `passes` below + - the manpages in man/ocaml{c,opt}.m + - the manual manual/src/cmds/unified-options.etex + *) + type t = Parsing | Typing | Lambda | Scheduling | Emit + + let to_string = function + | Parsing -> "parsing" + | Typing -> "typing" + | Lambda -> "lambda" + | Scheduling -> "scheduling" + | Emit -> "emit" + + let of_string = function + | "parsing" -> Some Parsing + | "typing" -> Some Typing + | "lambda" -> Some Lambda + | "scheduling" -> Some Scheduling + | "emit" -> Some Emit + | _ -> None + + let rank = function + | Parsing -> 0 + | Typing -> 1 + | Lambda -> 2 + | Scheduling -> 50 + | Emit -> 60 + + let passes = [ + Parsing; + Typing; + Lambda; + Scheduling; + Emit; + ] + let is_compilation_pass _ = true + let is_native_only = function + | Scheduling -> true + | Emit -> true + | _ -> false + + let enabled is_native t = not (is_native_only t) || is_native + let can_save_ir_after = function + | Scheduling -> true + | _ -> false + + let available_pass_names ~filter ~native = + passes + |> List.filter (enabled native) + |> List.filter filter + |> List.map to_string + + let compare a b = + compare (rank a) (rank b) + + let to_output_filename t ~prefix = + match t with + | Scheduling -> prefix ^ Compiler_ir.(extension Linear) + | _ -> Misc.fatal_error "Not supported" + + let of_input_filename name = + match Compiler_ir.extract_extension_with_pass name with + | Some (Linear, _) -> Some Emit + | None -> None +end + +let stop_after = ref None (* -stop-after *) + +let should_stop_after pass = + if Compiler_pass.(rank Typing <= rank pass) && !print_types then true + else + match !stop_after with + | None -> false + | Some stop -> Compiler_pass.rank stop <= Compiler_pass.rank pass + +let save_ir_after = ref [] + +let should_save_ir_after pass = + List.mem pass !save_ir_after + +let set_save_ir_after pass enabled = + let other_passes = List.filter ((<>) pass) !save_ir_after in + let new_passes = + if enabled then + pass :: other_passes + else + other_passes + in + save_ir_after := new_passes + +module Dump_option = struct + type t = + | Source + | Parsetree + | Typedtree + | Shape + | Match_comp + | Raw_lambda + | Lambda + | Instr + | Raw_clambda + | Clambda + | Raw_flambda + | Flambda + | Cmm + | Selection + | Combine + | CSE + | Live + | Spill + | Split + | Interf + | Prefer + | Regalloc + | Scheduling + | Linear + | Interval + + let compare (op1 : t) op2 = + Stdlib.compare op1 op2 + + let to_string = function + | Source -> "source" + | Parsetree -> "parsetree" + | Typedtree -> "typedtree" + | Shape -> "shape" + | Match_comp -> "matchcomp" + | Raw_lambda -> "rawlambda" + | Lambda -> "lambda" + | Instr -> "instr" + | Raw_clambda -> "rawclambda" + | Clambda -> "clambda" + | Raw_flambda -> "rawflambda" + | Flambda -> "flambda" + | Cmm -> "cmm" + | Selection -> "selection" + | Combine -> "combine" + | CSE -> "cse" + | Live -> "live" + | Spill -> "spill" + | Split -> "split" + | Interf -> "interf" + | Prefer -> "prefer" + | Regalloc -> "regalloc" + | Scheduling -> "scheduling" + | Linear -> "linear" + | Interval -> "interval" + + let of_string = function + | "source" -> Some Source + | "parsetree" -> Some Parsetree + | "typedtree" -> Some Typedtree + | "shape" -> Some Shape + | "matchcomp" -> Some Match_comp + | "rawlambda" -> Some Raw_lambda + | "lambda" -> Some Lambda + | "instr" -> Some Instr + | "rawclambda" -> Some Raw_clambda + | "clambda" -> Some Clambda + | "rawflambda" -> Some Raw_flambda + | "flambda" -> Some Flambda + | "cmm" -> Some Cmm + | "selection" -> Some Selection + | "combine" -> Some Combine + | "cse" -> Some CSE + | "live" -> Some Live + | "spill" -> Some Spill + | "split" -> Some Split + | "interf" -> Some Interf + | "prefer" -> Some Prefer + | "regalloc" -> Some Regalloc + | "scheduling" -> Some Scheduling + | "linear" -> Some Linear + | "interval" -> Some Interval + | _ -> None + + let flag = function + | Source -> dump_source + | Parsetree -> dump_parsetree + | Typedtree -> dump_typedtree + | Shape -> dump_shape + | Match_comp -> dump_matchcomp + | Raw_lambda -> dump_rawlambda + | Lambda -> dump_lambda + | Instr -> dump_instr + | Raw_clambda -> dump_rawclambda + | Clambda -> dump_clambda + | Raw_flambda -> dump_rawflambda + | Flambda -> dump_flambda + | Cmm -> dump_cmm + | Selection -> dump_selection + | Combine -> dump_combine + | CSE -> dump_cse + | Live -> dump_live + | Spill -> dump_spill + | Split -> dump_split + | Interf -> dump_interf + | Prefer -> dump_prefer + | Regalloc -> dump_regalloc + | Scheduling -> dump_scheduling + | Linear -> dump_linear + | Interval -> dump_interval + + type middle_end = + | Flambda + | Any + | Closure + + type class_ = + | Frontend + | Bytecode + | Middle of middle_end + | Backend + + let _ = + (* no Closure-specific dump option for now, silence a warning *) + Closure + + let classify : t -> class_ = function + | Source + | Parsetree + | Typedtree + | Shape + | Match_comp + | Raw_lambda + | Lambda + -> Frontend + | Instr + -> Bytecode + | Raw_clambda + | Clambda + -> Middle Any + | Raw_flambda + | Flambda + -> Middle Flambda + | Cmm + | Selection + | Combine + | CSE + | Live + | Spill + | Split + | Interf + | Prefer + | Regalloc + | Scheduling + | Linear + | Interval + -> Backend + + let available (option : t) : (unit, string) result = + let pass = Result.ok () in + let ( let* ) = Result.bind in + let fail descr = + Error ( + Printf.sprintf + "this compiler does not support %s-specific options" + descr + ) in + let guard descr cond = + if cond then pass + else fail descr in + let check_bytecode = guard "bytecode" (not !native_code) in + let check_native = guard "native" !native_code in + let check_middle_end = function + | Flambda -> guard "flambda" Config.flambda + | Closure -> guard "closure" (not Config.flambda) + | Any -> pass + in + match classify option with + | Frontend -> + pass + | Bytecode -> + check_bytecode + | Middle middle_end -> + let* () = check_native in + check_middle_end middle_end + | Backend -> + check_native +end + +let parse_keyword_edition s = + let parse_version s = + let bad_version () = + raise (Arg.Bad "Ill-formed version in keywords flag,\n\ + the supported format is ., for example 5.2 .") + in + if s = "" then None else match String.split_on_char '.' s with + | [] | [_] | _ :: _ :: _ :: _ -> bad_version () + | [major;minor] -> match int_of_string_opt major, int_of_string_opt minor with + | Some major, Some minor -> Some (major,minor) + | _ -> bad_version () + in + match String.split_on_char '+' s with + | [] -> None, [] + | [s] -> parse_version s, [] + | v :: rest -> parse_version v, rest + +module String = Misc.Stdlib.String + +let arg_spec = ref [] +let arg_names = ref String.Map.empty + +let reset_arguments () = + arg_spec := []; + arg_names := String.Map.empty + +let add_arguments loc args = + List.iter (function (arg_name, _, _) as arg -> + try + let loc2 = String.Map.find arg_name !arg_names in + Printf.eprintf + "Warning: compiler argument %s is already defined:\n" arg_name; + Printf.eprintf " First definition: %s\n" loc2; + Printf.eprintf " New definition: %s\n" loc; + with Not_found -> + arg_spec := !arg_spec @ [ arg ]; + arg_names := String.Map.add arg_name loc !arg_names + ) args + +let create_usage_msg program = + Printf.sprintf "Usage: %s \n\ + Try '%s --help' for more information." program program + + +let print_arguments program = + Arg.usage !arg_spec (create_usage_msg program) diff --git a/mlx/clflags.mli b/mlx/clflags.mli new file mode 100644 index 0000000..3e54d98 --- /dev/null +++ b/mlx/clflags.mli @@ -0,0 +1,323 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) +(* *) +(* Copyright 2005 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + + + +(** Command line flags *) + +(** Optimization parameters represented as ints indexed by round number. *) +module Int_arg_helper : sig + type parsed + + val parse : string -> string -> parsed ref -> unit + + type parse_result = + | Ok + | Parse_failed of exn + val parse_no_error : string -> parsed ref -> parse_result + + val get : key:int -> parsed -> int +end + +(** Optimization parameters represented as floats indexed by round number. *) +module Float_arg_helper : sig + type parsed + + val parse : string -> string -> parsed ref -> unit + + type parse_result = + | Ok + | Parse_failed of exn + val parse_no_error : string -> parsed ref -> parse_result + + val get : key:int -> parsed -> float +end + +type inlining_arguments = { + inline_call_cost : int option; + inline_alloc_cost : int option; + inline_prim_cost : int option; + inline_branch_cost : int option; + inline_indirect_cost : int option; + inline_lifting_benefit : int option; + inline_branch_factor : float option; + inline_max_depth : int option; + inline_max_unroll : int option; + inline_threshold : float option; + inline_toplevel_threshold : int option; +} + +val classic_arguments : inlining_arguments +val o1_arguments : inlining_arguments +val o2_arguments : inlining_arguments +val o3_arguments : inlining_arguments + +(** Set all the inlining arguments for a round. + The default is set if no round is provided. *) +val use_inlining_arguments_set : ?round:int -> inlining_arguments -> unit + +val objfiles : string list ref +val ccobjs : string list ref +val dllibs : string list ref +val cmi_file : string option ref +val compile_only : bool ref +val output_name : string option ref +val include_dirs : string list ref +val hidden_include_dirs : string list ref +val no_std_include : bool ref +val no_cwd : bool ref +val print_types : bool ref +val make_archive : bool ref +val debug : bool ref +val debug_full : bool ref +val unsafe : bool ref +val use_linscan : bool ref +val link_everything : bool ref +val custom_runtime : bool ref +val no_check_prims : bool ref +val bytecode_compatible_32 : bool ref +val output_c_object : bool ref +val output_complete_object : bool ref +val output_complete_executable : bool ref +val all_ccopts : string list ref +val classic : bool ref +val nopervasives : bool ref +val match_context_rows : int ref +val safer_matching : bool ref +val open_modules : string list ref +val preprocessor : string option ref +val all_ppx : string list ref +val absname : bool ref +val annotations : bool ref +val binary_annotations : bool ref +val store_occurrences : bool ref +val use_threads : bool ref +val noassert : bool ref +val verbose : bool ref +val noprompt : bool ref +val nopromptcont : bool ref +val init_file : string option ref +val noinit : bool ref +val noversion : bool ref +val use_prims : string ref +val use_runtime : string ref +val plugin : bool ref +val principal : bool ref +val print_variance : bool ref +val real_paths : bool ref +val recursive_types : bool ref +val strict_sequence : bool ref +val strict_formats : bool ref +val applicative_functors : bool ref +val make_runtime : bool ref +val c_compiler : string option ref +val no_auto_link : bool ref +val dllpaths : string list ref +val make_package : bool ref +val for_package : string option ref +val error_size : int ref +val float_const_prop : bool ref +val no_alias_deps : bool ref +val unique_ids : bool ref +val canonical_ids : bool ref +val locations : bool ref +val dump_source : bool ref +val dump_parsetree : bool ref +val dump_typedtree : bool ref +val dump_shape : bool ref +val dump_matchcomp : bool ref +val dump_rawlambda : bool ref +val dump_lambda : bool ref +val dump_rawclambda : bool ref +val dump_clambda : bool ref +val dump_rawflambda : bool ref +val dump_flambda : bool ref +val dump_flambda_let : int option ref +val dump_instr : bool ref +val keep_camlprimc_file : bool ref +val keep_asm_file : bool ref +val optimize_for_speed : bool ref +val dump_cmm : bool ref +val dump_selection : bool ref +val dump_cse : bool ref +val dump_live : bool ref +val dump_spill : bool ref +val dump_split : bool ref +val dump_interf : bool ref +val dump_prefer : bool ref +val dump_regalloc : bool ref +val dump_reload : bool ref +val dump_scheduling : bool ref +val dump_linear : bool ref +val dump_interval : bool ref +val keep_startup_file : bool ref +val dump_combine : bool ref +val native_code : bool ref +val default_inline_threshold : float +val inline_threshold : Float_arg_helper.parsed ref +val inlining_report : bool ref +val simplify_rounds : int option ref +val default_simplify_rounds : int ref +val rounds : unit -> int +val default_inline_max_unroll : int +val inline_max_unroll : Int_arg_helper.parsed ref +val default_inline_toplevel_threshold : int +val inline_toplevel_threshold : Int_arg_helper.parsed ref +val default_inline_call_cost : int +val default_inline_alloc_cost : int +val default_inline_prim_cost : int +val default_inline_branch_cost : int +val default_inline_indirect_cost : int +val default_inline_lifting_benefit : int +val inline_call_cost : Int_arg_helper.parsed ref +val inline_alloc_cost : Int_arg_helper.parsed ref +val inline_prim_cost : Int_arg_helper.parsed ref +val inline_branch_cost : Int_arg_helper.parsed ref +val inline_indirect_cost : Int_arg_helper.parsed ref +val inline_lifting_benefit : Int_arg_helper.parsed ref +val default_inline_branch_factor : float +val inline_branch_factor : Float_arg_helper.parsed ref +val dont_write_files : bool ref +val std_include_flag : string -> string +val std_include_dir : unit -> string list +val shared : bool ref +val dlcode : bool ref +val pic_code : bool ref +val runtime_variant : string ref +val with_runtime : bool ref +val force_slash : bool ref +val keep_docs : bool ref +val keep_locs : bool ref +val opaque : bool ref +val profile_columns : Profile.column list ref +val flambda_invariant_checks : bool ref +val unbox_closures : bool ref +val unbox_closures_factor : int ref +val default_unbox_closures_factor : int +val unbox_free_vars_of_closures : bool ref +val unbox_specialised_args : bool ref +val clambda_checks : bool ref +val cmm_invariants : bool ref +val parsetree_ghost_loc_invariant : bool ref +val default_inline_max_depth : int +val inline_max_depth : Int_arg_helper.parsed ref +val remove_unused_arguments : bool ref +val dump_flambda_verbose : bool ref +val classic_inlining : bool ref +val afl_instrument : bool ref +val afl_inst_ratio : int ref +val function_sections : bool ref + +val all_passes : string list ref +val dumped_pass : string -> bool +val set_dumped_pass : string -> bool -> unit + +val dump_into_file : bool ref +val dump_dir : string option ref + +val keyword_edition: string option ref +val parse_keyword_edition: string -> (int*int) option * string list + +(* Support for flags that can also be set from an environment variable *) +type 'a env_reader = { + parse : string -> 'a option; + print : 'a -> string; + usage : string; + env_var : string; +} + +val color : Misc.Color.setting option ref +val color_reader : Misc.Color.setting env_reader + +val error_style : Misc.Error_style.setting option ref +val error_style_reader : Misc.Error_style.setting env_reader + +val unboxed_types : bool ref + +val insn_sched : bool ref +val insn_sched_default : bool + +module Compiler_pass : sig + type t = Parsing | Typing | Lambda | Scheduling | Emit + val of_string : string -> t option + val to_string : t -> string + val is_compilation_pass : t -> bool + val available_pass_names : filter:(t -> bool) -> native:bool -> string list + val can_save_ir_after : t -> bool + val compare : t -> t -> int + val to_output_filename: t -> prefix:string -> string + val of_input_filename: string -> t option +end + +val stop_after : Compiler_pass.t option ref +val should_stop_after : Compiler_pass.t -> bool +val set_save_ir_after : Compiler_pass.t -> bool -> unit +val should_save_ir_after : Compiler_pass.t -> bool + +module Dump_option : sig + type t = + | Source + | Parsetree + | Typedtree + | Shape + | Match_comp + | Raw_lambda + | Lambda + | Instr + | Raw_clambda + | Clambda + | Raw_flambda + | Flambda + (* Note: no support for [-dflambda-let ] for now. *) + | Cmm + | Selection + | Combine + | CSE + | Live + | Spill + | Split + | Interf + | Prefer + | Regalloc + | Scheduling + | Linear + | Interval + + val compare : t -> t -> int + + val of_string : string -> t option + val to_string : t -> string + + val flag : t -> bool ref + + val available : t -> (unit, string) Result.t +end + +val arg_spec : (string * Arg.spec * string) list ref + +(* [add_arguments __LOC__ args] will add the arguments from [args] at + the end of [arg_spec], checking that they have not already been + added by [add_arguments] before. A warning is printed showing the + locations of the function from which the argument was previously + added. *) +val add_arguments : string -> (string * Arg.spec * string) list -> unit + +(* [create_usage_msg program] creates a usage message for [program] *) +val create_usage_msg: string -> string +(* [print_arguments usage] print the standard usage message *) +val print_arguments : string -> unit + +(* [reset_arguments ()] clear all declared arguments *) +val reset_arguments : unit -> unit diff --git a/mlx/config.mli b/mlx/config.mli new file mode 100644 index 0000000..3e61d6e --- /dev/null +++ b/mlx/config.mli @@ -0,0 +1,299 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) +(* *) +(* Copyright 1996 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(** System configuration + + {b Warning:} this module is unstable and part of + {{!Compiler_libs}compiler-libs}. + +*) + +val version: string +(** The current version number of the system *) + +val bindir: string +(** The directory containing the binary programs *) + +val standard_library: string +(** The directory containing the standard libraries *) + +val ccomp_type: string +(** The "kind" of the C compiler, assembler and linker used: one of + "cc" (for Unix-style C compilers) + "msvc" (for Microsoft Visual C++ and MASM) *) + +val c_compiler: string +(** The compiler to use for compiling C files *) + +val c_output_obj: string +(** Name of the option of the C compiler for specifying the output + file *) + +val c_has_debug_prefix_map : bool +(** Whether the C compiler supports -fdebug-prefix-map *) + +val as_has_debug_prefix_map : bool +(** Whether the assembler supports --debug-prefix-map *) + +val bytecode_cflags : string +(** The flags ocamlc should pass to the C compiler *) + +val bytecode_cppflags : string +(** The flags ocamlc should pass to the C preprocessor *) + +val native_cflags : string +(** The flags ocamlopt should pass to the C compiler *) + +val native_cppflags : string +(** The flags ocamlopt should pass to the C preprocessor *) + +val bytecomp_c_libraries: string +(** The C libraries to link with custom runtimes *) + +val native_c_libraries: string +(** The C libraries to link with native-code programs *) + +val compression_c_libraries: string +(** The C libraries needed with -lcomprmarsh (should appear before + {!native_c_libraries} in a call to the C compiler) + + @since 5.4 *) + +val native_ldflags : string +(* Flags to pass to the system linker *) + +val with_nonexecstack_note : bool +(** Whether an explicit ".note.GNU-stack" section is to be added to indicate + the stack should not be executable + + @since 5.4 *) + +val native_pack_linker: string +(** The linker to use for packaging (ocamlopt -pack) and for partial + links (ocamlopt -output-obj). *) + +val mkdll: string +(** The linker command line to build dynamic libraries. *) + +val mkexe: string +(** The linker command line to build executables. *) + +val mkmaindll: string +(** The linker command line to build main programs as dlls. *) + +val default_rpath: string +(** Option to add a directory to be searched for libraries at runtime + (used by ocamlmklib) *) + +val mksharedlibrpath: string +(** Option to add a directory to be searched for shared libraries at runtime + (used by ocamlmklib) *) + +val ar: string +(** Name of the ar command, or "" if not needed (MSVC) *) + +val interface_suffix: string ref +(** Suffix for interface file names *) + +val exec_magic_number: string +(** Magic number for bytecode executable files *) + +val cmi_magic_number: string +(** Magic number for compiled interface files *) + +val cmo_magic_number: string +(** Magic number for object bytecode files *) + +val cma_magic_number: string +(** Magic number for archive files *) + +val cmx_magic_number: string +(** Magic number for compilation unit descriptions *) + +val cmxa_magic_number: string +(** Magic number for libraries of compilation unit descriptions *) + +val ast_intf_magic_number: string +(** Magic number for file holding an interface syntax tree *) + +val ast_impl_magic_number: string +(** Magic number for file holding an implementation syntax tree *) + +val cmxs_magic_number: string +(** Magic number for dynamically-loadable plugins *) + +val cmt_magic_number: string +(** Magic number for compiled interface files *) + +val linear_magic_number: string +(** Magic number for Linear internal representation files *) + +val max_tag: int +(** Biggest tag that can be stored in the header of a regular block. *) + +val lazy_tag : int +(** Normally the same as Obj.lazy_tag. Separate definition because + of technical reasons for bootstrapping. *) + +val max_young_wosize: int +(** Maximal size of arrays that are directly allocated in the + minor heap *) + +val stack_threshold: int +(** Size in words of safe area at bottom of VM stack, + see runtime/caml/config.h *) + +val stack_safety_margin: int +(** Size in words of the safety margin between the bottom of + the stack and the stack pointer. This margin can be used by + intermediate computations of some instructions, or the event + handler. *) + +val native_compiler: bool +(** Whether the native compiler is available or not + + @since 5.1 *) + +val architecture: string +(** Name of processor type for the native-code compiler *) + +val model: string +(** Name of processor submodel for the native-code compiler *) + +val system: string +(** Name of operating system for the native-code compiler *) + +val target_os_type: string +(** Operating system targetted by the native-code compiler. One of +- ["Unix"] (for all Unix versions, including Linux and macOS), +- ["Win32"] (for MS-Windows, OCaml compiled with MSVC++ or MinGW-w64), +- ["Cygwin"] (for MS-Windows, OCaml compiled with Cygwin). *) + +val asm: string +(** The assembler (and flags) to use for assembling + ocamlopt-generated code. *) + +val asm_cfi_supported: bool +(** Whether assembler understands CFI directives *) + +val asm_size_type_directives: bool +(** Whether the [.size] and [.type] assembler directives can be used + + @since 5.4 *) + +val with_frame_pointers : bool +(** Whether assembler should maintain frame pointers *) + +val ext_obj: string +(** Extension for object files, e.g. [.o] under Unix. *) + +val ext_asm: string +(** Extension for assembler files, e.g. [.s] under Unix. *) + +val ext_lib: string +(** Extension for library files, e.g. [.a] under Unix. *) + +val ext_dll: string +(** Extension for dynamically-loaded libraries, e.g. [.so] under Unix.*) + +val ext_exe: string +(** Extension for executable programs, e.g. [.exe] under Windows. + + @since 4.12 *) + +val default_executable_name: string +(** Name of executable produced by linking if none is given with -o, + e.g. [a.out] under Unix. *) + +val systhread_supported : bool +(** Whether the system thread library is implemented *) + +val flexdll_dirs : string list +(** Directories needed for the FlexDLL objects *) + +val host : string +(** Whether the compiler is a cross-compiler *) + +val target : string +(** Whether the compiler is a cross-compiler *) + +val flambda : bool +(** Whether the compiler was configured for flambda *) + +val with_flambda_invariants : bool +(** Whether the invariants checks for flambda are enabled *) + +val with_cmm_invariants : bool +(** Whether the invariants checks for Cmm are enabled *) + +val with_codegen_invariants : bool +(** Whether the invariant checks for native code generation are enabled. *) + +val reserved_header_bits : int +(** How many bits of a block's header are reserved *) + +val flat_float_array : bool +(** Whether the compiler and runtime automagically flatten float + arrays *) + +val align_double : bool +(** Whether the compiler and runtime need to align double values. + If [false], a [floatarray] value can be cast to a C array of doubles. *) + +val align_int64 : bool +(** Whether the compiler and runtime need to align int64 values *) + +val function_sections : bool +(** Whether the compiler was configured to generate + each function in a separate section *) + +val windows_unicode: bool +(** Whether Windows Unicode runtime is enabled *) + +val naked_pointers : bool +(** Whether the runtime supports naked pointers + + @since 4.14 *) + +val supports_shared_libraries: bool +(** Whether shared libraries are supported + + @since 4.08 *) + +val native_dynlink: bool +(** Whether native shared libraries are supported + + @since 5.1 *) + +val afl_instrument : bool +(** Whether afl-fuzz instrumentation is generated by default *) + +val ar_supports_response_files: bool +(** Whether ar supports @FILE arguments. *) + +val tsan : bool +(** Whether ThreadSanitizer instrumentation is enabled *) + +(** Access to configuration values *) +val print_config : out_channel -> unit + +val config_var : string -> string option +(** the configuration value of a variable, if it exists *) + +(**/**) + +val merlin : bool + +(**/**) diff --git a/mlx/docstrings.ml b/mlx/docstrings.ml index a39f75d..32b8e8c 100644 --- a/mlx/docstrings.ml +++ b/mlx/docstrings.ml @@ -91,8 +91,9 @@ let docs_attr ds = let open Parsetree in let body = ds.ds_body in let loc = ds.ds_loc in + let const = { pconst_desc= Pconst_string(body,loc,None); pconst_loc= loc } in let exp = - { pexp_desc = Pexp_constant (Pconst_string(body, loc, None)); + { pexp_desc = Pexp_constant const; pexp_loc = loc; pexp_loc_stack = []; pexp_attributes = []; } @@ -143,8 +144,9 @@ let text_attr ds = let open Parsetree in let body = ds.ds_body in let loc = ds.ds_loc in + let const = { pconst_desc= Pconst_string(body,loc,None); pconst_loc= loc } in let exp = - { pexp_desc = Pexp_constant (Pconst_string(body, loc, None)); + { pexp_desc = Pexp_constant const; pexp_loc = loc; pexp_loc_stack = []; pexp_attributes = []; } diff --git a/mlx/dune b/mlx/dune index c495415..895f5ce 100644 --- a/mlx/dune +++ b/mlx/dune @@ -3,8 +3,9 @@ (package mlx) (public_name mlx-pp) (modules :standard \ mlx_shim) + (modules_without_implementation config) (flags - (:standard -w -9-67 -open Astlib -open Astlib.Ast_501 -open Mlx_shim)) + (:standard -w -9-67 -open Astlib -open Astlib.Ast_504 -open Mlx_shim)) (libraries ppxlib ocaml-compiler-libs.shadow mlx_shim)) (library @@ -12,7 +13,7 @@ (package mlx) (modules mlx_shim) (flags - (:standard -w -9-67 -open Astlib -open Astlib.Ast_501)) + (:standard -w -9-67 -open Astlib -open Astlib.Ast_504)) (libraries ppxlib ocaml-compiler-libs.shadow)) (ocamllex lexer) @@ -67,3 +68,27 @@ (copy_files (files ../menhirLib/menhirLib.{ml,mli})) + +(copy_files + (mode promote) + (enabled_if + (<> %{profile} "release")) + (files ../ocaml/utils/clflags.{ml,mli})) + +(copy_files + (mode promote) + (enabled_if + (<> %{profile} "release")) + (files ../ocaml/utils/config.mli)) + +; (copy_files +; (mode promote) +; (enabled_if +; (<> %{profile} "release")) +; (files ../ocaml/utils/misc.{ml,mli})) + +; (copy_files +; (mode promote) +; (enabled_if +; (<> %{profile} "release")) +; (files ../ocaml/utils/format_doc.{ml,mli})) diff --git a/mlx/jsx_helper.ml b/mlx/jsx_helper.ml index 674d61c..8a76fed 100644 --- a/mlx/jsx_helper.ml +++ b/mlx/jsx_helper.ml @@ -19,14 +19,6 @@ let mkjsxexp ~loc:loc' e = let pexp_attributes = [ Attr.mk ~loc { txt = "JSX"; loc } (PStr []) ] in { e with pexp_attributes } -let rec equal_longindent a b = - match a, b with - | Longident.Lident a, Longident.Lident b -> String.equal a b - | Ldot (pa, a), Ldot (pb, b) -> - String.equal a b && equal_longindent pa pb - | Lapply _, _ | _, Lapply _ -> assert false - | _ -> false - let make_jsx_element ~raise ~loc:_ ~tag ~end_tag ~props ~children () = let () = match end_tag with @@ -34,8 +26,8 @@ let make_jsx_element ~raise ~loc:_ ~tag ~end_tag ~props ~children () = | Some (end_tag, (_, end_loc_e)) -> let eq = match tag, end_tag with - | (`Module, _, s), (`Module, _, e) -> equal_longindent s e - | (`Value, _, s), (`Value, _, e) -> equal_longindent s e + | (`Module, _, s), (`Module, _, e) -> Longident.same s e + | (`Value, _, s), (`Value, _, e) -> Longident.same s e | _ -> false in if not eq then @@ -57,8 +49,12 @@ let make_jsx_element ~raise ~loc:_ ~tag ~end_tag ~props ~children () = | `Value, loc, txt -> mkexp ~loc (Pexp_ident { loc = make_loc loc; txt }) | `Module, loc, txt -> - let txt = Longident.Ldot (txt, "createElement") in - mkexp ~loc (Pexp_ident { loc = make_loc loc; txt }) + let loc' = make_loc loc in + let txt = + Longident.Ldot + ({ txt; loc = loc' }, { txt = "createElement"; loc = loc' }) + in + mkexp ~loc (Pexp_ident { loc = loc'; txt }) in let props = let prop_exp ~loc name = diff --git a/mlx/lexer.mli b/mlx/lexer.mli index b5d3a96..fc43eee 100644 --- a/mlx/lexer.mli +++ b/mlx/lexer.mli @@ -20,7 +20,7 @@ *) -val init : unit -> unit +val init : ?keyword_edition:((int*int) option * string list) -> unit -> unit val token: Lexing.lexbuf -> Parser.token val skip_hash_bang: Lexing.lexbuf -> unit @@ -33,14 +33,21 @@ type error = | Unterminated_string_in_comment of Location.t * Location.t | Empty_character_literal | Keyword_as_label of string + | Capitalized_label of string | Invalid_literal of string | Invalid_directive of string * string option + | Invalid_encoding of string + | Invalid_char_in_ident of Uchar.t + | Non_lowercase_delimiter of string + | Capitalized_raw_identifier of string + | Unknown_keyword of string exception Error of error * Location.t val in_comment : unit -> bool val in_string : unit -> bool +val is_keyword : string -> bool val print_warnings : bool ref val handle_docstrings: bool ref diff --git a/mlx/lexer.mll b/mlx/lexer.mll index 5f50394..dccb353 100644 --- a/mlx/lexer.mll +++ b/mlx/lexer.mll @@ -17,7 +17,6 @@ { open Lexing -open Misc open Parser type error = @@ -29,75 +28,109 @@ type error = | Unterminated_string_in_comment of Location.t * Location.t | Empty_character_literal | Keyword_as_label of string + | Capitalized_label of string | Invalid_literal of string | Invalid_directive of string * string option + | Invalid_encoding of string + | Invalid_char_in_ident of Uchar.t + | Non_lowercase_delimiter of string + | Capitalized_raw_identifier of string + | Unknown_keyword of string exception Error of error * Location.t (* The table of keywords *) -let keyword_table = - create_hashtable 149 [ - "and", AND; - "as", AS; - "assert", ASSERT; - "begin", BEGIN; - "class", CLASS; - "constraint", CONSTRAINT; - "do", DO; - "done", DONE; - "downto", DOWNTO; - "else", ELSE; - "end", END; - "exception", EXCEPTION; - "external", EXTERNAL; - "false", FALSE; - "for", FOR; - "fun", FUN; - "function", FUNCTION; - "functor", FUNCTOR; - "if", IF; - "in", IN; - "include", INCLUDE; - "inherit", INHERIT; - "initializer", INITIALIZER; - "lazy", LAZY; - "let", LET; - "match", MATCH; - "method", METHOD; - "module", MODULE; - "mutable", MUTABLE; - "new", NEW; - "nonrec", NONREC; - "object", OBJECT; - "of", OF; - "open", OPEN; - "or", OR; +let all_keywords = + let v5_3 = Some (5,3) in + let v1_0 = Some (1,0) in + let v1_6 = Some (1,6) in + let v4_2 = Some (4,2) in + let always = None in + [ + "and", AND, always; + "as", AS, always; + "assert", ASSERT, v1_6; + "begin", BEGIN, always; + "class", CLASS, v1_0; + "constraint", CONSTRAINT, v1_0; + "do", DO, always; + "done", DONE, always; + "downto", DOWNTO, always; + "effect", EFFECT, v5_3; + "else", ELSE, always; + "end", END, always; + "exception", EXCEPTION, always; + "external", EXTERNAL, always; + "false", FALSE, always; + "for", FOR, always; + "fun", FUN, always; + "function", FUNCTION, always; + "functor", FUNCTOR, always; + "if", IF, always; + "in", IN, always; + "include", INCLUDE, always; + "inherit", INHERIT, v1_0; + "initializer", INITIALIZER, v1_0; + "lazy", LAZY, v1_6; + "let", LET, always; + "match", MATCH, always; + "method", METHOD, v1_0; + "module", MODULE, always; + "mutable", MUTABLE, always; + "new", NEW, v1_0; + "nonrec", NONREC, v4_2; + "object", OBJECT, v1_0; + "of", OF, always; + "open", OPEN, always; + "or", OR, always; (* "parser", PARSER; *) - "private", PRIVATE; - "rec", REC; - "sig", SIG; - "struct", STRUCT; - "then", THEN; - "to", TO; - "true", TRUE; - "try", TRY; - "type", TYPE; - "val", VAL; - "virtual", VIRTUAL; - "when", WHEN; - "while", WHILE; - "with", WITH; - - "lor", INFIXOP3("lor"); (* Should be INFIXOP2 *) - "lxor", INFIXOP3("lxor"); (* Should be INFIXOP2 *) - "mod", INFIXOP3("mod"); - "land", INFIXOP3("land"); - "lsl", INFIXOP4("lsl"); - "lsr", INFIXOP4("lsr"); - "asr", INFIXOP4("asr") + "private", PRIVATE, v1_0; + "rec", REC, always; + "sig", SIG, always; + "struct", STRUCT, always; + "then", THEN, always; + "to", TO, always; + "true", TRUE, always; + "try", TRY, always; + "type", TYPE, always; + "val", VAL, always; + "virtual", VIRTUAL, v1_0; + "when", WHEN, always; + "while", WHILE, always; + "with", WITH, always; + + "lor", INFIXOP3("lor"), always; (* Should be INFIXOP2 *) + "lxor", INFIXOP3("lxor"), always; (* Should be INFIXOP2 *) + "mod", INFIXOP3("mod"), always; + "land", INFIXOP3("land"), always; + "lsl", INFIXOP4("lsl"), always; + "lsr", INFIXOP4("lsr"), always; + "asr", INFIXOP4("asr"), always ] + +let keyword_table = Hashtbl.create 149 + +let populate_keywords (version,keywords) = + let greater (x:(int*int) option) (y:(int*int) option) = + match x, y with + | None, _ | _, None -> true + | Some x, Some y -> x >= y + in + let tbl = keyword_table in + Hashtbl.clear tbl; + let add_keyword (name, token, since) = + if greater version since then Hashtbl.replace tbl name (Some token) + in + List.iter add_keyword all_keywords; + List.iter (fun name -> + match List.find (fun (n,_,_) -> n = name) all_keywords with + | (_,tok,_) -> Hashtbl.replace tbl name (Some tok) + | exception Not_found -> Hashtbl.replace tbl name None + ) keywords + + (* To buffer string literals *) let string_buffer = Buffer.create 256 @@ -107,7 +140,34 @@ let get_stored_string () = Buffer.contents string_buffer let store_string_char c = Buffer.add_char string_buffer c let store_string_utf_8_uchar u = Buffer.add_utf_8_uchar string_buffer u let store_string s = Buffer.add_string string_buffer s +let store_substring s ~pos ~len = Buffer.add_substring string_buffer s pos len + let store_lexeme lexbuf = store_string (Lexing.lexeme lexbuf) +let store_normalized_newline newline = + (* #12502: we normalize "\r\n" to "\n" at lexing time, + to avoid behavior difference due to OS-specific + newline characters in string literals. + + (For example, Git for Windows will translate \n in versioned + files into \r\n sequences when checking out files on Windows. If + your code contains multiline quoted string literals, the raw + content of the string literal would be different between Git for + Windows users and all other users. Thanks to newline + normalization, the value of the literal as a string constant will + be the same no matter which programming tools are used.) + + Many programming languages use the same approach, for example + Java, Javascript, Kotlin, Python, Swift and C++. + *) + (* Our 'newline' regexp accepts \r*\n, but we only wish + to normalize \r?\n into \n -- see the discussion in #12502. + All carriage returns except for the (optional) last one + are reproduced in the output. We implement this by skipping + the first carriage return, if any. *) + let len = String.length newline in + if len = 1 + then store_string_char '\n' + else store_substring newline ~pos:1 ~len:(len - 1) (* To store the position of the beginning of a string and comment *) let string_start_loc = ref Location.none @@ -228,10 +288,53 @@ let uchar_for_uchar_escape lexbuf = illegal_escape lexbuf (Printf.sprintf "%X is not a Unicode scalar value" cp) -let is_keyword name = Hashtbl.mem keyword_table name +let validate_encoding lexbuf raw_name = + match Utf8_lexeme.normalize raw_name with + | Error _ -> error lexbuf (Invalid_encoding raw_name) + | Ok name -> name + +let ident_for_extended lexbuf raw_name = + let name = validate_encoding lexbuf raw_name in + match Utf8_lexeme.validate_identifier name with + | Utf8_lexeme.Valid -> name + | Utf8_lexeme.Invalid_character u -> error lexbuf (Invalid_char_in_ident u) + | Utf8_lexeme.Invalid_beginning _ -> + assert false (* excluded by the regexps *) -let check_label_name lexbuf name = - if is_keyword name then error lexbuf (Keyword_as_label name) +let validate_delim lexbuf raw_name = + let name = validate_encoding lexbuf raw_name in + if Utf8_lexeme.is_lowercase name then name + else error lexbuf (Non_lowercase_delimiter name) + +let validate_ext lexbuf name = + let name = validate_encoding lexbuf name in + match Utf8_lexeme.validate_identifier ~with_dot:true name with + | Utf8_lexeme.Valid -> name + | Utf8_lexeme.Invalid_character u -> error lexbuf (Invalid_char_in_ident u) + | Utf8_lexeme.Invalid_beginning _ -> + assert false (* excluded by the regexps *) + +let lax_delim raw_name = + match Utf8_lexeme.normalize raw_name with + | Error _ -> None + | Ok name -> + if Utf8_lexeme.is_lowercase name then Some name + else None + +let is_keyword name = + Hashtbl.mem keyword_table name + +let find_keyword lexbuf name = + match Hashtbl.find keyword_table name with + | Some x -> x + | None -> error lexbuf (Unknown_keyword name) + | exception Not_found -> LIDENT name + +let check_label_name ?(raw_escape=false) lexbuf name = + if Utf8_lexeme.is_capitalized name then + error lexbuf (Capitalized_label name); + if not raw_escape && is_keyword name then + error lexbuf (Keyword_as_label name) (* Update the current location with file name and line number. *) @@ -251,13 +354,6 @@ let preprocessor = ref None let escaped_newlines = ref false -(* Warn about Latin-1 characters used in idents *) - -let warn_latin1 lexbuf = - Location.deprecated - (Location.curr lexbuf) - "ISO-Latin1 characters in identifiers" - let handle_docstrings = ref true let comment_list = ref [] @@ -274,8 +370,6 @@ let comments () = List.rev !comment_list (* Error report *) -open Format - let prepare_error loc = function | Illegal_character c -> Location.errorf ~loc "Illegal character (%s)" (Char.escaped c) @@ -284,13 +378,13 @@ let prepare_error loc = function "Illegal backslash escape in string or character (%s)%t" s (fun ppf -> match explanation with | None -> () - | Some expl -> fprintf ppf ": %s" expl) + | Some expl -> Format.fprintf ppf ": %s" expl) | Reserved_sequence (s, explanation) -> Location.errorf ~loc "Reserved character sequence: %s%t" s (fun ppf -> match explanation with | None -> () - | Some expl -> fprintf ppf " %s" expl) + | Some expl -> Format.fprintf ppf " %s" expl) | Unterminated_comment _ -> Location.errorf ~loc "Comment not terminated" | Unterminated_string -> @@ -303,18 +397,40 @@ let prepare_error loc = function let msg = "Illegal empty character literal ''" in let sub = [Location.msg - "@{Hint@}: Did you mean ' ' or a type variable 'a?"] in + "@{Hint@}: Did you mean ' ' or a type variable 'a?" + ] in Location.error ~loc ~sub msg | Keyword_as_label kwd -> Location.errorf ~loc - "`%s' is a keyword, it cannot be used as label name" kwd + "'%s' is a keyword, it cannot be used as label name" kwd + | Capitalized_label lbl -> + Location.errorf ~loc + "'%s' cannot be used as label name, \ + it must start with a lowercase letter" lbl | Invalid_literal s -> Location.errorf ~loc "Invalid literal %s" s | Invalid_directive (dir, explanation) -> Location.errorf ~loc "Invalid lexer directive %S%t" dir (fun ppf -> match explanation with | None -> () - | Some expl -> fprintf ppf ": %s" expl) + | Some expl -> Format.fprintf ppf ": %s" expl) + | Invalid_encoding s -> + Location.errorf ~loc "Invalid encoding of identifier %s." s + | Invalid_char_in_ident u -> + Location.errorf ~loc "Invalid character U+%04X in identifier" + (Uchar.to_int u) + | Capitalized_raw_identifier lbl -> + Location.errorf ~loc + "'%s' cannot be used as a raw identifier, \ + it must start with a lowercase letter" lbl + | Non_lowercase_delimiter name -> + Location.errorf ~loc + "'%s' cannot be used as a quoted string delimiter,@ \ + it must contain only lowercase letters." name + | Unknown_keyword name -> + Location.errorf ~loc + "'%s' has been defined as an additional keyword.@ \ + This version of OCaml does not support this keyword." name let () = Location.register_error_of_exn @@ -331,30 +447,33 @@ let newline = ('\013'* '\010') let blank = [' ' '\009' '\012'] let lowercase = ['a'-'z' '_'] let uppercase = ['A'-'Z'] +let identstart = lowercase | uppercase let identchar = ['A'-'Z' 'a'-'z' '_' '\'' '0'-'9'] -let lowercase_latin1 = ['a'-'z' '\223'-'\246' '\248'-'\255' '_'] -let uppercase_latin1 = ['A'-'Z' '\192'-'\214' '\216'-'\222'] -let identchar_latin1 = - ['A'-'Z' 'a'-'z' '_' '\192'-'\214' '\216'-'\246' '\248'-'\255' '\'' '0'-'9'] -(* This should be kept in sync with the [is_identchar] function in [env.ml] *) +let utf8 = ['\192'-'\255'] ['\128'-'\191']* +let identstart_ext = identstart | utf8 +let identchar_ext = identchar | utf8 +let delim_ext = (lowercase | uppercase | utf8)* +(* ascii uppercase letters in quoted string delimiters ({delim||delim}) are + rejected by the delimiter validation function, we accept them temporarily to + have the same error message for ascii and non-ascii uppercase letters *) let symbolchar = ['!' '$' '%' '&' '*' '+' '-' '.' '/' ':' '<' '=' '>' '?' '@' '^' '|' '~'] +let dotsymbolchar = + ['!' '$' '%' '&' '*' '+' '-' '/' ':' '=' '>' '?' '@' '^' '|'] +let symbolchar_or_hash = + symbolchar | '#' let symbolchar_no_prefix = ['$' '%' '&' '*' '+' '-' '.' '/' ':' '<' '=' '>' '?' '@' '^' '|' '~'] let symbolchar_no_greater = ['!' '$' '%' '&' '*' '+' '-' '.' '/' ':' '<' '=' '?' '@' '^' '|' '~'] let symbolchar_no_less = ['!' '$' '%' '&' '*' '+' '-' '.' '/' ':' '=' '>' '?' '@' '^' '|' '~'] -let dotsymbolchar = - ['!' '$' '%' '&' '*' '+' '-' '/' ':' '=' '>' '?' '@' '^' '|'] -let symbolchar_or_hash = - symbolchar | '#' let kwdopchar = ['$' '&' '*' '+' '-' '/' '<' '=' '>' '@' '^' '|'] -let ident = (lowercase | uppercase) identchar* -let extattrident = ident ('.' ident)* +let ident_ext = identstart_ext identchar_ext* +let extattrident = ident_ext ('.' ident_ext)* let decimal_literal = ['0'-'9'] ['0'-'9' '_']* @@ -378,6 +497,7 @@ let hex_float_literal = ('.' ['0'-'9' 'A'-'F' 'a'-'f' '_']* )? (['p' 'P'] ['+' '-']? ['0'-'9'] ['0'-'9' '_']* )? let literal_modifier = ['G'-'Z' 'g'-'z'] +let raw_ident_escape = "\\#" rule token = parse | ('\\' as bs) newline { @@ -396,37 +516,46 @@ rule token = parse | ".~" { error lexbuf (Reserved_sequence (".~", Some "is reserved for use in MetaOCaml")) } - | "~" (lowercase identchar * as name) ':' + | "~" (identstart identchar * as name) ':' { check_label_name lexbuf name; LABEL name } - | "~" (lowercase_latin1 identchar_latin1 * as name) ':' - { warn_latin1 lexbuf; + | "~" (raw_ident_escape? as escape) (ident_ext as raw_name) ':' + { let name = ident_for_extended lexbuf raw_name in + check_label_name ~raw_escape:(escape<>"") lexbuf name; LABEL name } | "?" { QUESTION } | "?" (lowercase identchar * as name) ':' { check_label_name lexbuf name; OPTLABEL name } - | "?" (lowercase_latin1 identchar_latin1 * as name) ':' - { warn_latin1 lexbuf; - OPTLABEL name } + | "?" (raw_ident_escape? as escape) (ident_ext as raw_name) ':' + { let name = ident_for_extended lexbuf raw_name in + check_label_name ~raw_escape:(escape<>"") lexbuf name; + OPTLABEL name + } | lowercase identchar * as name - { try Hashtbl.find keyword_table name - with Not_found -> LIDENT name } - | lowercase_latin1 identchar_latin1 * as name - { warn_latin1 lexbuf; LIDENT name } + { find_keyword lexbuf name } | "<" (lowercase identchar * as name) { JSX_LIDENT name } | "<" "/" (lowercase identchar * as name) { JSX_LIDENT_E name } | uppercase identchar * as name { UIDENT name } (* No capitalized keywords *) - | uppercase_latin1 identchar_latin1 * as name - { warn_latin1 lexbuf; UIDENT name } | "<" (uppercase identchar * as name) { JSX_UIDENT name } | "<" "/" (uppercase identchar * as name) { JSX_UIDENT_E name } + | (raw_ident_escape? as escape) (ident_ext as raw_name) + { let name = ident_for_extended lexbuf raw_name in + if Utf8_lexeme.is_capitalized name then begin + if escape="" then UIDENT name + else + (* we don't have capitalized keywords, and thus no needs for + capitalized raw identifiers. *) + error lexbuf (Capitalized_raw_identifier name) + end else + LIDENT name + } (* No non-ascii keywords *) | int_literal as lit { INT (lit, None) } | (int_literal as lit) (literal_modifier as modif) { INT (lit, Some modif) } @@ -439,26 +568,34 @@ rule token = parse | "\"" { let s, loc = wrap_string_lexer string lexbuf in STRING (s, loc, None) } - | "{" (lowercase* as delim) "|" - { let s, loc = wrap_string_lexer (quoted_string delim) lexbuf in - STRING (s, loc, Some delim) } - | "{%" (extattrident as id) "|" + | "{" (delim_ext as raw_name) '|' + { let delim = validate_delim lexbuf raw_name in + let s, loc = wrap_string_lexer (quoted_string delim) lexbuf in + STRING (s, loc, Some delim) + } + | "{%" (extattrident as raw_id) "|" { let orig_loc = Location.curr lexbuf in + let id = validate_ext lexbuf raw_id in let s, loc = wrap_string_lexer (quoted_string "") lexbuf in let idloc = compute_quoted_string_idloc orig_loc 2 id in QUOTED_STRING_EXPR (id, idloc, s, loc, Some "") } - | "{%" (extattrident as id) blank+ (lowercase* as delim) "|" + | "{%" (extattrident as raw_id) blank+ (delim_ext as raw_delim) "|" { let orig_loc = Location.curr lexbuf in + let id = validate_ext lexbuf raw_id in + let delim = validate_delim lexbuf raw_delim in let s, loc = wrap_string_lexer (quoted_string delim) lexbuf in let idloc = compute_quoted_string_idloc orig_loc 2 id in QUOTED_STRING_EXPR (id, idloc, s, loc, Some delim) } - | "{%%" (extattrident as id) "|" + | "{%%" (extattrident as raw_id) "|" { let orig_loc = Location.curr lexbuf in + let id = validate_ext lexbuf raw_id in let s, loc = wrap_string_lexer (quoted_string "") lexbuf in let idloc = compute_quoted_string_idloc orig_loc 3 id in QUOTED_STRING_ITEM (id, idloc, s, loc, Some "") } - | "{%%" (extattrident as id) blank+ (lowercase* as delim) "|" + | "{%%" (extattrident as raw_id) blank+ (delim_ext as raw_delim) "|" { let orig_loc = Location.curr lexbuf in + let id = validate_ext lexbuf raw_id in + let delim = validate_delim lexbuf raw_delim in let s, loc = wrap_string_lexer (quoted_string delim) lexbuf in let idloc = compute_quoted_string_idloc orig_loc 3 id in QUOTED_STRING_ITEM (id, idloc, s, loc, Some delim) } @@ -476,7 +613,7 @@ rule token = parse { CHAR(char_for_octal_code lexbuf 3) } | "\'\\" 'x' ['0'-'9' 'a'-'f' 'A'-'F'] ['0'-'9' 'a'-'f' 'A'-'F'] "\'" { CHAR(char_for_hexadecimal_code lexbuf 3) } - | "\'" ("\\" _ as esc) + | "\'" ("\\" [^ '#'] as esc) { error lexbuf (Illegal_escape (esc, None)) } | "\'\'" { error lexbuf Empty_character_literal } @@ -543,7 +680,6 @@ rule token = parse | ";" { SEMI } | ";;" { SEMISEMI } | "<" { LESS } - | "" { GREATER } | "/>" { SLASHGREATER } + | "}" { GREATERRBRACE } | "[@" { LBRACKETAT } @@ -652,8 +789,10 @@ and comment = parse is_in_string := false; store_string_char '\"'; comment lexbuf } - | "{" ('%' '%'? extattrident blank*)? (lowercase* as delim) "|" - { + | "{" ('%' '%'? extattrident blank*)? (delim_ext as raw_delim) "|" + { match lax_delim raw_delim with + | None -> store_lexeme lexbuf; comment lexbuf + | Some delim -> string_start_loc := Location.curr lexbuf; store_lexeme lexbuf; is_in_string := true; @@ -673,9 +812,11 @@ and comment = parse comment lexbuf } | "\'\'" { store_lexeme lexbuf; comment lexbuf } - | "\'" newline "\'" + | "\'" (newline as nl) "\'" { update_loc lexbuf None 1 false 1; - store_lexeme lexbuf; + store_string_char '\''; + store_normalized_newline nl; + store_string_char '\''; comment lexbuf } | "\'" [^ '\\' '\'' '\010' '\013' ] "\'" @@ -696,12 +837,12 @@ and comment = parse comment_start_loc := []; error_loc loc (Unterminated_comment start) } - | newline + | newline as nl { update_loc lexbuf None 1 false 0; - store_lexeme lexbuf; + store_normalized_newline nl; comment lexbuf } - | ident + | ident_ext { store_lexeme lexbuf; comment lexbuf } | _ { store_lexeme lexbuf; comment lexbuf } @@ -709,9 +850,13 @@ and comment = parse and string = parse '\"' { lexbuf.lex_start_p } - | '\\' newline ([' ' '\t'] * as space) + | '\\' (newline as nl) ([' ' '\t'] * as space) { update_loc lexbuf None 1 false (String.length space); - if in_comment () then store_lexeme lexbuf; + if in_comment () then begin + store_string_char '\\'; + store_normalized_newline nl; + store_string space; + end; string lexbuf } | '\\' (['\\' '\'' '\"' 'n' 't' 'b' 'r' ' '] as c) @@ -740,11 +885,9 @@ and string = parse store_lexeme lexbuf; string lexbuf } - | newline - { if not (in_comment ()) then - Location.prerr_warning (Location.curr lexbuf) Warnings.Eol_in_string; - update_loc lexbuf None 1 false 0; - store_lexeme lexbuf; + | newline as nl + { update_loc lexbuf None 1 false 0; + store_normalized_newline nl; string lexbuf } | eof @@ -755,16 +898,17 @@ and string = parse string lexbuf } and quoted_string delim = parse - | newline + | newline as nl { update_loc lexbuf None 1 false 0; - store_lexeme lexbuf; + store_normalized_newline nl; quoted_string delim lexbuf } | eof { is_in_string := false; error_loc !string_start_loc Unterminated_string } - | "|" (lowercase* as edelim) "}" + | "|" (ident_ext? as raw_edelim) "}" { + let edelim = validate_encoding lexbuf raw_edelim in if delim = edelim then lexbuf.lex_start_p else (store_lexeme lexbuf; quoted_string delim lexbuf) } @@ -786,29 +930,9 @@ and skip_hash_bang = parse | None -> token lexbuf | Some (_init, preprocess) -> preprocess token lexbuf - type newline_state = - | NoLine (* There have been no blank lines yet. *) - | NewLine - (* There have been no blank lines, and the previous - token was a newline. *) - | BlankLine (* There have been blank lines. *) - - type doc_state = - | Initial (* There have been no docstrings yet *) - | After of docstring list - (* There have been docstrings, none of which were - preceded by a blank line *) - | Before of docstring list * docstring list * docstring list - (* There have been docstrings, some of which were - preceded by a blank line *) - - and docstring = Docstrings.docstring - let token_with_comments lexbuf = match token_with_comments lexbuf with | LBRACKETLESS -> - (* Check if the next character (if any) could start an identifier. - UIDENT starts with A-Z, LIDENT starts with a-z or _ *) let should_split = lexbuf.Lexing.lex_curr_pos < lexbuf.Lexing.lex_buffer_len && begin @@ -817,7 +941,6 @@ and skip_hash_bang = parse end in if should_split then begin - (* Backtrack one character to before the "<" so it will be lexed separately *) lexbuf.Lexing.lex_curr_pos <- lexbuf.Lexing.lex_curr_pos - 1; let lex_curr_p = lexbuf.lex_curr_p in lexbuf.lex_curr_p <- { lex_curr_p with pos_cnum = lex_curr_p.pos_cnum - 1 }; @@ -826,6 +949,24 @@ and skip_hash_bang = parse LBRACKETLESS | tok -> tok + type newline_state = + | NoLine (* There have been no blank lines yet. *) + | NewLine + (* There have been no blank lines, and the previous + token was a newline. *) + | BlankLine (* There have been blank lines. *) + + type doc_state = + | Initial (* There have been no docstrings yet *) + | After of docstring list + (* There have been docstrings, none of which were + preceded by a blank line *) + | Before of docstring list * docstring list * docstring list + (* There have been docstrings, some of which were + preceded by a blank line *) + + and docstring = Docstrings.docstring + let token lexbuf = let post_pos = lexeme_end_p lexbuf in let attach lines docs pre_pos = @@ -897,7 +1038,8 @@ and skip_hash_bang = parse in loop NoLine Initial lexbuf - let init () = + let init ?(keyword_edition=None,[]) () = + populate_keywords keyword_edition; is_in_string := false; comment_start_loc := []; comment_list := []; diff --git a/mlx/mlx_shim.ml b/mlx/mlx_shim.ml index d83d8d4..2ecca63 100644 --- a/mlx/mlx_shim.ml +++ b/mlx/mlx_shim.ml @@ -33,6 +33,20 @@ module Longident = struct let last = function | Lident s -> s - | Ldot (_, s) -> s + | Ldot (_, { txt = s; _ }) -> s | Lapply (_, _) -> Misc.fatal_error "Longident.last" + + let rec flatten = function + | Lident s -> [ s ] + | Ldot ({ txt = lid; _ }, { txt = s; _ }) -> flatten lid @ [ s ] + | Lapply _ -> Misc.fatal_error "Longident.flatten" + + let rec same a b = + match a, b with + | Lident a, Lident b -> String.equal a b + | ( Ldot ({ txt = pa; _ }, { txt = a; _ }), + Ldot ({ txt = pb; _ }, { txt = b; _ }) ) -> + String.equal a b && same pa pb + | Lapply _, _ | _, Lapply _ -> false + | _ -> false end diff --git a/mlx/parse.ml b/mlx/parse.ml index a806197..2f1067a 100644 --- a/mlx/parse.ml +++ b/mlx/parse.ml @@ -46,7 +46,10 @@ type 'a parser = let wrap (parser : 'a parser) lexbuf : 'a = try Docstrings.init (); - Lexer.init (); + let keyword_edition = + Clflags.(Option.map parse_keyword_edition !keyword_edition) + in + Lexer.init ?keyword_edition (); let ast = parser token lexbuf in Parsing.clear_parser(); Docstrings.warn_bad_docstrings (); @@ -108,45 +111,74 @@ let type_ident = wrap Parser.parse_mty_longident (* Error reporting for Syntaxerr *) (* The code has been moved here so that one can reuse Pprintast.tyvar *) +module Style = Misc.Style + let prepare_error err = let open Syntaxerr in match err with | Unclosed(opening_loc, opening, closing_loc, closing) -> Location.errorf ~loc:closing_loc + "Syntax error: %a expected" Style.inline_code closing ~sub:[ Location.msg ~loc:opening_loc - "This '%s' might be unmatched" opening + "This %a might be unmatched" Style.inline_code opening ] - "Syntax error: '%s' expected" closing | Expecting (loc, nonterm) -> - Location.errorf ~loc "Syntax error: %s expected." nonterm + Location.errorf ~loc "Syntax error: %a expected." + Style.inline_code nonterm | Not_expecting (loc, nonterm) -> - Location.errorf ~loc "Syntax error: %s not expected." nonterm + Location.errorf ~loc "Syntax error: %a not expected." + Style.inline_code nonterm | Applicative_path loc -> Location.errorf ~loc - "Syntax error: applicative paths of the form F(X).t \ - are not supported when the option -no-app-func is set." + "Syntax error: applicative paths of the form %a \ + are not supported when the option %a is set." + Style.inline_code "F(X).t" + Style.inline_code "-no-app-func" | Variable_in_scope (loc, var) -> Location.errorf ~loc "In this scoped type, variable %a \ - is reserved for the local type %s." - Pprintast.tyvar var var + is reserved for the local type %a." + (Style.as_inline_code Pprintast.Doc.tyvar) var + Style.inline_code var | Other loc -> Location.errorf ~loc "Syntax error" | Ill_formed_ast (loc, s) -> Location.errorf ~loc "broken invariant in parsetree: %s" s - | Invalid_package_type (loc, s) -> - Location.errorf ~loc "invalid package type: %s" s + | Invalid_package_type (loc, ipt) -> + let invalid ppf ipt = match ipt with + | Syntaxerr.Parameterized_types -> + Format_doc.fprintf ppf "parametrized types are not supported" + | Constrained_types -> + Format_doc.fprintf ppf "constrained types are not supported" + | Private_types -> + Format_doc.fprintf ppf "private types are not supported" + | Not_with_type -> + Format_doc.fprintf ppf "only %a constraints are supported" + Style.inline_code "with type t =" + | Neither_identifier_nor_with_type -> + Format_doc.fprintf ppf + "only module type identifier and %a constraints are supported" + Style.inline_code "with type" + in + Location.errorf ~loc "Syntax error: invalid package type: %a" invalid ipt | Removed_string_set loc -> Location.errorf ~loc - "Syntax error: strings are immutable, there is no assignment \ - syntax for them.\n\ - @{Hint@}: Mutable sequences of bytes are available in \ - the Bytes module.\n\ - @{Hint@}: Did you mean to use 'Bytes.set'?" + "Syntax error: strings are immutable,@ there@ is@ no@ assignment@ \ + syntax@ for@ them." + ~sub:[ + Location.msg + "@{Hint@}: Mutable sequences of bytes are available in \ + the %a module." + Style.inline_code "Bytes"; + Location.msg + "@{Hint@}: Did you mean to use %a?" + Style.inline_code "Bytes.set" + ] + let () = Location.register_error_of_exn (function diff --git a/mlx/parser.ml b/mlx/parser.ml index 844c409..489e970 100644 --- a/mlx/parser.ml +++ b/mlx/parser.ml @@ -16,7 +16,7 @@ module MenhirBasics = struct | VAL | UNDERSCORE | UIDENT of ( -# 767 "mlx/parser.mly" +# 839 "mlx/parser.mly" (string) # 22 "mlx/parser.ml" ) @@ -28,7 +28,7 @@ module MenhirBasics = struct | THEN | STRUCT | STRING of ( -# 754 "mlx/parser.mly" +# 826 "mlx/parser.mly" (string * Location.t * string option) # 34 "mlx/parser.ml" ) @@ -42,12 +42,12 @@ module MenhirBasics = struct | RBRACKET | RBRACE | QUOTED_STRING_ITEM of ( -# 758 "mlx/parser.mly" +# 830 "mlx/parser.mly" (string * Location.t * string * Location.t * string option) # 48 "mlx/parser.ml" ) | QUOTED_STRING_EXPR of ( -# 756 "mlx/parser.mly" +# 828 "mlx/parser.mly" (string * Location.t * string * Location.t * string option) # 53 "mlx/parser.ml" ) @@ -55,7 +55,7 @@ module MenhirBasics = struct | QUESTION | PRIVATE | PREFIXOP of ( -# 740 "mlx/parser.mly" +# 812 "mlx/parser.mly" (string) # 61 "mlx/parser.ml" ) @@ -65,7 +65,7 @@ module MenhirBasics = struct | PERCENT | OR | OPTLABEL of ( -# 733 "mlx/parser.mly" +# 805 "mlx/parser.mly" (string) # 71 "mlx/parser.ml" ) @@ -80,17 +80,20 @@ module MenhirBasics = struct | MINUSDOT | MINUS | METHOD + | METAOCAML_ESCAPE + | METAOCAML_BRACKET_OPEN + | METAOCAML_BRACKET_CLOSE | MATCH | LPAREN | LIDENT of ( -# 714 "mlx/parser.mly" +# 786 "mlx/parser.mly" (string) -# 89 "mlx/parser.ml" +# 92 "mlx/parser.ml" ) | LETOP of ( -# 695 "mlx/parser.mly" +# 767 "mlx/parser.mly" (string) -# 94 "mlx/parser.ml" +# 97 "mlx/parser.ml" ) | LET | LESSSLASH @@ -109,69 +112,69 @@ module MenhirBasics = struct | LBRACE | LAZY | LABEL of ( -# 700 "mlx/parser.mly" +# 772 "mlx/parser.mly" (string) -# 115 "mlx/parser.ml" +# 118 "mlx/parser.ml" ) | JSX_UIDENT_E of ( -# 769 "mlx/parser.mly" +# 841 "mlx/parser.mly" (string) -# 120 "mlx/parser.ml" +# 123 "mlx/parser.ml" ) | JSX_UIDENT of ( -# 768 "mlx/parser.mly" +# 840 "mlx/parser.mly" (string) -# 125 "mlx/parser.ml" +# 128 "mlx/parser.ml" ) | JSX_LIDENT_E of ( -# 716 "mlx/parser.mly" +# 788 "mlx/parser.mly" (string) -# 130 "mlx/parser.ml" +# 133 "mlx/parser.ml" ) | JSX_LIDENT of ( -# 715 "mlx/parser.mly" +# 787 "mlx/parser.mly" (string) -# 135 "mlx/parser.ml" +# 138 "mlx/parser.ml" ) | INT of ( -# 699 "mlx/parser.mly" +# 771 "mlx/parser.mly" (string * char option) -# 140 "mlx/parser.ml" +# 143 "mlx/parser.ml" ) | INITIALIZER | INHERIT | INFIXOP4 of ( -# 693 "mlx/parser.mly" +# 765 "mlx/parser.mly" (string) -# 147 "mlx/parser.ml" +# 150 "mlx/parser.ml" ) | INFIXOP3 of ( -# 692 "mlx/parser.mly" +# 764 "mlx/parser.mly" (string) -# 152 "mlx/parser.ml" +# 155 "mlx/parser.ml" ) | INFIXOP2 of ( -# 691 "mlx/parser.mly" +# 763 "mlx/parser.mly" (string) -# 157 "mlx/parser.ml" +# 160 "mlx/parser.ml" ) | INFIXOP1 of ( -# 690 "mlx/parser.mly" +# 762 "mlx/parser.mly" (string) -# 162 "mlx/parser.ml" +# 165 "mlx/parser.ml" ) | INFIXOP0 of ( -# 689 "mlx/parser.mly" +# 761 "mlx/parser.mly" (string) -# 167 "mlx/parser.ml" +# 170 "mlx/parser.ml" ) | INCLUDE | IN | IF | HASHOP of ( -# 751 "mlx/parser.mly" +# 823 "mlx/parser.mly" (string) -# 175 "mlx/parser.ml" +# 178 "mlx/parser.ml" ) | HASH | GREATERRBRACKET @@ -182,9 +185,9 @@ module MenhirBasics = struct | FUN | FOR | FLOAT of ( -# 677 "mlx/parser.mly" +# 749 "mlx/parser.mly" (string * char option) -# 188 "mlx/parser.ml" +# 191 "mlx/parser.ml" ) | FALSE | EXTERNAL @@ -194,26 +197,27 @@ module MenhirBasics = struct | EOF | END | ELSE + | EFFECT | DOWNTO | DOTOP of ( -# 694 "mlx/parser.mly" +# 766 "mlx/parser.mly" (string) -# 202 "mlx/parser.ml" +# 206 "mlx/parser.ml" ) | DOTDOT | DOT | DONE | DOCSTRING of ( -# 777 "mlx/parser.mly" +# 849 "mlx/parser.mly" (Docstrings.docstring) -# 210 "mlx/parser.ml" +# 214 "mlx/parser.ml" ) | DO | CONSTRAINT | COMMENT of ( -# 776 "mlx/parser.mly" +# 848 "mlx/parser.mly" (string * Location.t) -# 217 "mlx/parser.ml" +# 221 "mlx/parser.ml" ) | COMMA | COLONGREATER @@ -222,9 +226,9 @@ module MenhirBasics = struct | COLON | CLASS | CHAR of ( -# 657 "mlx/parser.mly" +# 728 "mlx/parser.mly" (char) -# 228 "mlx/parser.ml" +# 232 "mlx/parser.ml" ) | BEGIN | BARRBRACKET @@ -235,9 +239,9 @@ module MenhirBasics = struct | ASSERT | AS | ANDOP of ( -# 696 "mlx/parser.mly" +# 768 "mlx/parser.mly" (string) -# 241 "mlx/parser.ml" +# 245 "mlx/parser.ml" ) | AND | AMPERSAND @@ -253,6 +257,9 @@ let _eRR = # 25 "mlx/parser.mly" +[@@@ocaml.warning "-60"] module Str = Ast_helper.Str (* For ocamldep *) +[@@@ocaml.warning "+60"] + open Asttypes open Longident open Parsetree @@ -276,14 +283,15 @@ let ghost_loc (startpos, endpos) = { } let mktyp ~loc ?attrs d = Typ.mk ~loc:(make_loc loc) ?attrs d -let mkpat ~loc d = Pat.mk ~loc:(make_loc loc) d -let mkexp ~loc d = Exp.mk ~loc:(make_loc loc) d +let mkpat ~loc ?attrs d = Pat.mk ~loc:(make_loc loc) ?attrs d +let mkexp ~loc ?attrs d = Exp.mk ~loc:(make_loc loc) ?attrs d let mkmty ~loc ?attrs d = Mty.mk ~loc:(make_loc loc) ?attrs d let mksig ~loc d = Sig.mk ~loc:(make_loc loc) d let mkmod ~loc ?attrs d = Mod.mk ~loc:(make_loc loc) ?attrs d let mkstr ~loc d = Str.mk ~loc:(make_loc loc) d let mkclass ~loc ?attrs d = Cl.mk ~loc:(make_loc loc) ?attrs d let mkcty ~loc ?attrs d = Cty.mk ~loc:(make_loc loc) ?attrs d +let mkconst ~loc c = Const.mk ~loc:(make_loc loc) c let pstr_typext (te, ext) = (Pstr_typext te, ext) @@ -320,6 +328,8 @@ let mkcf ~loc ?attrs ?docs d = let mkrhs rhs loc = mkloc rhs (make_loc loc) let ghrhs rhs loc = mkloc rhs (ghost_loc loc) +let ldot lid lid_loc name loc = Ldot (mkrhs lid lid_loc, mkrhs name loc) + let push_loc x acc = if x.Location.loc_ghost then acc @@ -331,7 +341,7 @@ let reloc_pat ~loc x = let reloc_exp ~loc x = { x with pexp_loc = make_loc loc; pexp_loc_stack = push_loc x.pexp_loc x.pexp_loc_stack } -let reloc_typ ~loc x = +let _reloc_typ ~loc x = { x with ptyp_loc = make_loc loc; ptyp_loc_stack = push_loc x.ptyp_loc x.ptyp_loc_stack } @@ -345,25 +355,14 @@ let mkpatvar ~loc name = mkpat ~loc (Ppat_var (mkrhs name loc)) (* - Ghost expressions and patterns: - expressions and patterns that do not appear explicitly in the - source file they have the loc_ghost flag set to true. - Then the profiler will not try to instrument them and the - -annot option will not try to display their type. + See ./location.mli for when to use a ghost location or not. Every grammar rule that generates an element with a location must make at most one non-ghost element, the topmost one. - - How to tell whether your location must be ghost: - A location corresponds to a range of characters in the source file. - If the location contains a piece of code that is syntactically - valid (according to the documentation), and corresponds to the - AST node, then the location must be real; in all other cases, - it must be ghost. *) -let ghexp ~loc d = Exp.mk ~loc:(ghost_loc loc) d -let ghpat ~loc d = Pat.mk ~loc:(ghost_loc loc) d -let ghtyp ~loc d = Typ.mk ~loc:(ghost_loc loc) d +let ghexp ~loc ?attrs d = Exp.mk ~loc:(ghost_loc loc) ?attrs d +let ghpat ~loc ?attrs d = Pat.mk ~loc:(ghost_loc loc) ?attrs d +let ghtyp ~loc ?attrs d = Typ.mk ~loc:(ghost_loc loc) ?attrs d let ghloc ~loc d = { txt = d; loc = ghost_loc loc } let ghstr ~loc d = Str.mk ~loc:(ghost_loc loc) d let ghsig ~loc d = Sig.mk ~loc:(ghost_loc loc) d @@ -376,23 +375,37 @@ let neg_string f = then String.sub f 1 (String.length f - 1) else "-" ^ f -let mkuminus ~oploc name arg = - match name, arg.pexp_desc with - | "-", Pexp_constant(Pconst_integer (n,m)) -> - Pexp_constant(Pconst_integer(neg_string n,m)) - | ("-" | "-."), Pexp_constant(Pconst_float (f, m)) -> - Pexp_constant(Pconst_float(neg_string f, m)) +(* Pre-apply the special [-], [-.], [+] and [+.] prefix operators into + constants if possible, otherwise turn them into the corresponding prefix + operators [~-], [~-.], etc.. *) +let mkuminus ~sloc ~oploc name arg = + match name, arg.pexp_desc, arg.pexp_attributes with + | "-", + Pexp_constant({pconst_desc = Pconst_integer (n,m); pconst_loc=_}), + [] -> + Pexp_constant(mkconst ~loc:sloc (Pconst_integer(neg_string n, m))) + | ("-" | "-."), + Pexp_constant({pconst_desc = Pconst_float (f, m); pconst_loc=_}), [] -> + Pexp_constant(mkconst ~loc:sloc (Pconst_float(neg_string f, m))) | _ -> Pexp_apply(mkoperator ~loc:oploc ("~" ^ name), [Nolabel, arg]) -let mkuplus ~oploc name arg = +let mkuplus ~sloc ~oploc name arg = let desc = arg.pexp_desc in - match name, desc with - | "+", Pexp_constant(Pconst_integer _) - | ("+" | "+."), Pexp_constant(Pconst_float _) -> desc + match name, desc, arg.pexp_attributes with + | "+", + Pexp_constant({pconst_desc = Pconst_integer _ as desc; pconst_loc=_}), + [] + | ("+" | "+."), + Pexp_constant({pconst_desc = Pconst_float _ as desc; pconst_loc=_}), + [] -> + Pexp_constant(mkconst ~loc:sloc desc) | _ -> Pexp_apply(mkoperator ~loc:oploc ("~" ^ name), [Nolabel, arg]) +let mk_attr ~loc name payload = + Attr.mk ~loc name payload + (* TODO define an abstraction boundary between locations-as-pairs and locations-as-Location.t; it should be clear when we move from one world to the other *) @@ -419,7 +432,9 @@ let rec mktailexp nilloc = let open Location in function | e1 :: el -> let exp_el, el_loc = mktailexp nilloc el in let loc = (e1.pexp_loc.loc_start, snd el_loc) in - let arg = ghexp ~loc (Pexp_tuple [e1; ghexp ~loc:el_loc exp_el]) in + let arg = + ghexp ~loc (Pexp_tuple [None, e1; None, ghexp ~loc:el_loc exp_el]) + in ghexp_cons_desc loc arg, loc let rec mktailpat nilloc = let open Location in function @@ -429,17 +444,22 @@ let rec mktailpat nilloc = let open Location in function | p1 :: pl -> let pat_pl, el_loc = mktailpat nilloc pl in let loc = (p1.ppat_loc.loc_start, snd el_loc) in - let arg = ghpat ~loc (Ppat_tuple [p1; ghpat ~loc:el_loc pat_pl]) in + let arg = + ghpat ~loc + (Ppat_tuple ([None, p1; None, ghpat ~loc:el_loc pat_pl], Closed)) + in ghpat_cons_desc loc arg, loc let mkstrexp e attrs = { pstr_desc = Pstr_eval (e, attrs); pstr_loc = e.pexp_loc } -let mkexp_constraint ~loc e (t1, t2) = - match t1, t2 with - | Some t, None -> mkexp ~loc (Pexp_constraint(e, t)) - | _, Some t -> mkexp ~loc (Pexp_coerce(e, t1, t)) - | None, None -> assert false +let mkexp_desc_constraint e t = + match t with + | Pconstraint t -> Pexp_constraint(e, t) + | Pcoerce(t1, t2) -> Pexp_coerce(e, t1, t2) + +let mkexp_constraint ~loc e t = + mkexp ~loc (mkexp_desc_constraint e t) let mkexp_opt_constraint ~loc e = function | None -> e @@ -527,9 +547,12 @@ type ('dot,'index) array_family = { } -let bigarray_untuplify = function - { pexp_desc = Pexp_tuple explist; pexp_loc = _ } -> explist - | exp -> [exp] +let bigarray_untuplify exp = + match exp.pexp_desc with + | Pexp_tuple explist + when List.for_all (fun (l, _) -> Option.is_none l) explist -> + List.map snd explist + | _ -> [exp] let builtin_arraylike_name loc _ ~assign paren_kind n = let opname = if assign then "set" else "get" in @@ -545,8 +568,8 @@ let builtin_arraylike_name loc _ ~assign paren_kind n = | Two -> "Array2" | Three -> "Array3" | Many -> "Genarray" in - Ldot(Lident "Bigarray", submodule_name) in - ghloc ~loc (Ldot(prefix,opname)) + Ldot(mknoloc (Lident "Bigarray"), mknoloc submodule_name) in + ghloc ~loc (Ldot(mknoloc prefix, mknoloc opname)) let builtin_arraylike_index loc paren_kind index = match paren_kind with | Paren | Bracket -> One, [Nolabel, index] @@ -576,7 +599,7 @@ let user_indexing_operator_name loc (prefix,ext) ~assign paren_kind n = String.concat "" ["."; ext; left; mid; right; assign] in let lid = match prefix with | None -> Lident name - | Some p -> Ldot(p,name) in + | Some p -> Ldot(mknoloc p,mknoloc name) in ghloc ~loc lid let user_index loc _ index = @@ -605,9 +628,9 @@ let indexop_unclosed_error loc_s s loc_e = let left, right = paren_to_strings s in unclosed left loc_s right loc_e -let lapply ~loc p1 p2 = +let lapply ~loc p1 loc_p1 p2 loc_p2 = if !Clflags.applicative_functors - then Lapply(p1, p2) + then Lapply(mkrhs p1 loc_p1, mkrhs p2 loc_p2) else raise (Syntaxerr.Error( Syntaxerr.Applicative_path (make_loc loc))) @@ -645,33 +668,28 @@ let wrap_type_annotation ~loc newtypes core_type body = let exp = mk_newtypes newtypes exp in (exp, ghtyp(Ptyp_poly(newtypes, Typ.varify_constructors newtypes core_type))) -let wrap_exp_attrs ~loc body (ext, attrs) = - let ghexp = ghexp ~loc in +let pexp_extension ~id e = Pexp_extension (id, PStr [mkstrexp e []]) + +let mkexp_attrs ~loc desc (ext, attrs) = (* todo: keep exact location for the entire attribute *) - let body = {body with pexp_attributes = attrs @ body.pexp_attributes} in match ext with - | None -> body - | Some id -> ghexp(Pexp_extension (id, PStr [mkstrexp body []])) - -let mkexp_attrs ~loc d attrs = - wrap_exp_attrs ~loc (mkexp ~loc d) attrs + | None -> mkexp ~loc ~attrs desc + | Some id -> + mkexp ~loc (pexp_extension ~id (ghexp ~loc ~attrs desc)) -let wrap_typ_attrs ~loc typ (ext, attrs) = +let mktyp_attrs ~loc desc (ext, attrs) = (* todo: keep exact location for the entire attribute *) - let typ = {typ with ptyp_attributes = attrs @ typ.ptyp_attributes} in match ext with - | None -> typ - | Some id -> ghtyp ~loc (Ptyp_extension (id, PTyp typ)) + | None -> mktyp ~loc ~attrs desc + | Some id -> + mktyp ~loc (Ptyp_extension (id, PTyp (ghtyp ~loc ~attrs desc))) -let wrap_pat_attrs ~loc pat (ext, attrs) = +let mkpat_attrs ~loc desc (ext, attrs) = (* todo: keep exact location for the entire attribute *) - let pat = {pat with ppat_attributes = attrs @ pat.ppat_attributes} in match ext with - | None -> pat - | Some id -> ghpat ~loc (Ppat_extension (id, PPat (pat, None))) - -let mkpat_attrs ~loc d attrs = - wrap_pat_attrs ~loc (mkpat ~loc d) attrs + | None -> mkpat ~loc ~attrs desc + | Some id -> + mkpat ~loc (Ppat_extension (id, PPat (ghpat ~loc ~attrs desc, None))) let wrap_class_attrs ~loc:_ body attrs = {body with pcl_attributes = attrs @ body.pcl_attributes} @@ -680,25 +698,20 @@ let wrap_mod_attrs ~loc:_ attrs body = let wrap_mty_attrs ~loc:_ attrs body = {body with pmty_attributes = attrs @ body.pmty_attributes} -let wrap_str_ext ~loc body ext = - match ext with - | None -> body - | Some id -> ghstr ~loc (Pstr_extension ((id, PStr [body]), [])) - let wrap_mkstr_ext ~loc (item, ext) = - wrap_str_ext ~loc (mkstr ~loc item) ext - -let wrap_sig_ext ~loc body ext = match ext with - | None -> body - | Some id -> ghsig ~loc (Psig_extension ((id, PSig [body]), [])) + | None -> mkstr ~loc item + | Some id -> mkstr ~loc (Pstr_extension ((id, PStr [ghstr ~loc item]), [])) let wrap_mksig_ext ~loc (item, ext) = - wrap_sig_ext ~loc (mksig ~loc item) ext + match ext with + | None -> mksig ~loc item + | Some id -> mksig ~loc (Psig_extension ((id, PSig [ghsig ~loc item]), [])) let mk_quotedext ~loc (id, idloc, str, strloc, delim) = let exp_id = mkloc id idloc in - let e = ghexp ~loc (Pexp_constant (Pconst_string (str, strloc, delim))) in + let const = Const.mk ~loc:strloc (Pconst_string (str, strloc, delim)) in + let e = ghexp ~loc (Pexp_constant const) in (exp_id, PStr [mkstrexp e []]) let text_str pos = Str.text (rhs_text pos) @@ -810,6 +823,69 @@ let class_of_let_bindings ~loc lbs body = assert (lbs.lbs_extension = None); mkclass ~loc (Pcl_let (lbs.lbs_rec, List.rev bindings, body)) +(* If all the parameters are [Pparam_newtype x], then return [Some xs] where + [xs] is the corresponding list of values [x]. This function is optimized for + the common case, where a list of parameters contains at least one value + parameter. +*) +let all_params_as_newtypes = + let is_newtype { pparam_desc; _ } = + match pparam_desc with + | Pparam_newtype _ -> true + | Pparam_val _ -> false + in + let as_newtype { pparam_desc; pparam_loc } = + match pparam_desc with + | Pparam_newtype x -> Some (x, pparam_loc) + | Pparam_val _ -> None + in + fun params -> + if List.for_all is_newtype params + then Some (List.filter_map as_newtype params) + else None + +(* Given a construct [fun (type a b c) : t -> e], we construct + [Pexp_newtype(a, Pexp_newtype(b, Pexp_newtype(c, Pexp_constraint(e, t))))] + rather than a [Pexp_function]. +*) +let mkghost_newtype_function_body newtypes body_constraint body = + let wrapped_body = + match body_constraint with + | None -> body + | Some body_constraint -> + let loc = { body.pexp_loc with loc_ghost = true } in + Exp.mk (mkexp_desc_constraint body body_constraint) ~loc + in + let expr = + List.fold_right + (fun (newtype, newtype_loc) e -> + (* Mints a ghost location that approximates the newtype's "extent" as + being from the start of the newtype param until the end of the + function body. + *) + let loc = (newtype_loc.Location.loc_start, body.pexp_loc.loc_end) in + ghexp (Pexp_newtype (newtype, e)) ~loc) + newtypes + wrapped_body + in + expr.pexp_desc + +let mkfunction params body_constraint body = + match body with + | Pfunction_cases _ -> Pexp_function (params, body_constraint, body) + | Pfunction_body body_exp -> + (* If all the params are newtypes, then we don't create a function node; + we create nested newtype nodes. *) + match all_params_as_newtypes params with + | None -> Pexp_function (params, body_constraint, body) + | Some newtypes -> + mkghost_newtype_function_body newtypes body_constraint body_exp + +let mk_functor_typ args mty = + List.fold_left (fun acc (startpos, arg) -> + mkmty ~loc:(startpos, mty.pmty_loc.loc_end) (Pmty_functor (arg, acc))) + mty args + (* Alternatively, we could keep the generic module type in the Parsetree and extract the package type during type-checking. In that case, the assertions below should be turned into explicit checks. *) @@ -821,11 +897,11 @@ let package_type_of_module_type pmty = | Pwith_type (lid, ptyp) -> let loc = ptyp.ptype_loc in if ptyp.ptype_params <> [] then - err loc "parametrized types are not supported"; + err loc Syntaxerr.Parameterized_types; if ptyp.ptype_cstrs <> [] then - err loc "constrained types are not supported"; + err loc Syntaxerr.Constrained_types; if ptyp.ptype_private <> Public then - err loc "private types are not supported"; + err loc Syntaxerr.Private_types; (* restrictions below are checked by the 'with_constraint' rule *) assert (ptyp.ptype_kind = Ptype_abstract); @@ -837,15 +913,14 @@ let package_type_of_module_type pmty = in (lid, ty) | _ -> - err pmty.pmty_loc "only 'with type t =' constraints are supported" + err pmty.pmty_loc Not_with_type in match pmty with | {pmty_desc = Pmty_ident lid} -> (lid, [], pmty.pmty_attributes) | {pmty_desc = Pmty_with({pmty_desc = Pmty_ident lid}, cstrs)} -> (lid, List.map map_cstr cstrs, pmty.pmty_attributes) | _ -> - err pmty.pmty_loc - "only module type identifier and 'with type' constraints are supported" + err pmty.pmty_loc Neither_identifier_nor_with_type let mk_directive_arg ~loc k = { pdira_desc = k; @@ -860,7 +935,7 @@ let mk_directive ~loc name arg = } -# 864 "mlx/parser.ml" +# 939 "mlx/parser.ml" module Tables = struct @@ -870,168 +945,176 @@ module Tables = struct fun _tok -> match _tok with | AMPERAMPER -> - 129 + 133 | AMPERSAND -> - 128 + 132 | AND -> - 127 + 131 | ANDOP _ -> - 126 + 130 | AS -> - 125 + 129 | ASSERT -> - 124 + 128 | BACKQUOTE -> - 123 + 127 | BANG -> - 122 + 126 | BAR -> - 121 + 125 | BARBAR -> - 120 + 124 | BARRBRACKET -> - 119 + 123 | BEGIN -> - 118 + 122 | CHAR _ -> - 117 + 121 | CLASS -> - 116 + 120 | COLON -> - 115 + 119 | COLONCOLON -> - 114 + 118 | COLONEQUAL -> - 113 + 117 | COLONGREATER -> - 112 + 116 | COMMA -> - 111 + 115 | COMMENT _ -> - 110 + 114 | CONSTRAINT -> - 109 + 113 | DO -> - 108 + 112 | DOCSTRING _ -> - 107 + 111 | DONE -> - 106 + 110 | DOT -> - 105 + 109 | DOTDOT -> - 104 + 108 | DOTOP _ -> - 103 + 107 | DOWNTO -> - 102 + 106 + | EFFECT -> + 105 | ELSE -> - 101 + 104 | END -> - 100 + 103 | EOF -> - 99 + 102 | EOL -> - 98 + 101 | EQUAL -> - 97 + 100 | EXCEPTION -> - 96 + 99 | EXTERNAL -> - 95 + 98 | FALSE -> - 94 + 97 | FLOAT _ -> - 93 + 96 | FOR -> - 92 + 95 | FUN -> - 91 + 94 | FUNCTION -> - 90 + 93 | FUNCTOR -> - 89 + 92 | GREATER -> - 88 + 91 | GREATERRBRACE -> - 87 + 90 | GREATERRBRACKET -> - 86 + 89 | HASH -> - 85 + 88 | HASHOP _ -> - 84 + 87 | IF -> - 83 + 86 | IN -> - 82 + 85 | INCLUDE -> - 81 + 84 | INFIXOP0 _ -> - 80 + 83 | INFIXOP1 _ -> - 79 + 82 | INFIXOP2 _ -> - 78 + 81 | INFIXOP3 _ -> - 77 + 80 | INFIXOP4 _ -> - 76 + 79 | INHERIT -> - 75 + 78 | INITIALIZER -> - 74 + 77 | INT _ -> - 73 + 76 | JSX_LIDENT _ -> - 72 + 75 | JSX_LIDENT_E _ -> - 71 + 74 | JSX_UIDENT _ -> - 70 + 73 | JSX_UIDENT_E _ -> - 69 + 72 | LABEL _ -> - 68 + 71 | LAZY -> - 67 + 70 | LBRACE -> - 66 + 69 | LBRACELESS -> - 65 + 68 | LBRACKET -> - 64 + 67 | LBRACKETAT -> - 63 + 66 | LBRACKETATAT -> - 62 + 65 | LBRACKETATATAT -> - 61 + 64 | LBRACKETBAR -> - 60 + 63 | LBRACKETGREATER -> - 59 + 62 | LBRACKETLESS -> - 58 + 61 | LBRACKETPERCENT -> - 57 + 60 | LBRACKETPERCENTPERCENT -> - 56 + 59 | LESS -> - 55 + 58 | LESSMINUS -> - 54 + 57 | LESSSLASH -> - 53 + 56 | LET -> - 52 + 55 | LETOP _ -> - 51 + 54 | LIDENT _ -> - 50 + 53 | LPAREN -> - 49 + 52 | MATCH -> + 51 + | METAOCAML_BRACKET_CLOSE -> + 50 + | METAOCAML_BRACKET_OPEN -> + 49 + | METAOCAML_ESCAPE -> 48 | METHOD -> 47 @@ -1190,6 +1273,8 @@ module Tables = struct Obj.repr _v | DOWNTO -> Obj.repr () + | EFFECT -> + Obj.repr () | ELSE -> Obj.repr () | END -> @@ -1298,6 +1383,12 @@ module Tables = struct Obj.repr () | MATCH -> Obj.repr () + | METAOCAML_BRACKET_CLOSE -> + Obj.repr () + | METAOCAML_BRACKET_OPEN -> + Obj.repr () + | METAOCAML_ESCAPE -> + Obj.repr () | METHOD -> Obj.repr () | MINUS -> @@ -1394,22 +1485,22 @@ module Tables = struct Obj.repr () and default_reduction = - (16, "\000\000\000\000\000\000\003\030\003\029\003\028\003\027\003\026\002\237\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\003\012\003\011\003\n\003\t\003\b\003\007\002\236\003\006\003\005\003\004\003\003\003\002\003\001\003\000\002\255\002\254\002\253\002\252\002\251\002\250\002\249\002\248\002\247\002\246\002\245\002\244\002\243\002\242\002\241\002\240\002\239\002\238\000\000\000\000\000,\000\188\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003c\001\196\001\175\001\193\001\192\001\191\001\197\001\201\000\000\003d\001\195\001\194\001\176\001\199\001\190\001\189\001\188\001\187\001\186\001\184\001\200\001\198\000\000\000\000\000\000\000\224\000\000\000\000\001\179\000\000\000\000\000\000\001\181\000\000\000\000\000\000\001\183\001\205\001\202\001\185\001\177\001\203\001\204\000\000\003b\003a\003e\000\000\000\000\000\026\001X\000\190\000\000\000\220\000\221\000\000\000\000\000\000\001\227\001\226\000\000\000\000\000\025\000\000\000\000\000\000\000\000\000\000\001\131\000\000\000\000\000\000\000\000\000\000\003^\000\000\003Y\000\000\000\000\003[\000\000\003]\000\000\003Z\003\\\000\000\003T\000\000\003S\003O\002U\000\000\003R\000\000\002V\000\000\000\000\000\000\000\000\000l\000\000\000\000\000j\000\000\000\000\001V\000\000\000\000\000\000\000\000\000\000\000\186\001d\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\000g\000\000\000\000\000\000\000\000\000\000\002\218\000\000\002\137\002\138\000\000\002\135\002\136\000\000\000\000\000\000\000\000\000\000\001~\001}\000\000\002\216\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\227\000\017\000\016\000\000\000\000\000\000\000\000\000\000\001u\000\000\000\000\000\000\000\000\000\000\000\000\001b\000\000\000\000\001e\001c\001k\000C\002\170\000\000\001(\0037\0036\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000i\000\000\000\249\000\000\002\140\002\139\000\000\000\000\000\000\001\209\000\000\000\000\000'\000\000\000\000\000\000\000\000\000\000\001j\000\000\001i\000\000\001Y\001h\000\000\001W\000d\000 \000\000\000\000\001\152\000\027\000\000\000\000\000\000\000\000\003N\000*\000\000\000\000\000!\000\028\000\000\000\000\000\000\000\203\000\000\000\000\000\000\000\205\002_\002Q\000\000\000$\000\000\002R\000\000\000\000\001\206\000\000\000\000\000\000\000\018\000\000\000\000\000\000\000\019\0038\000\000\0039\000\000\000{\000\000\000\000\000#\000\000\000\000\000\000\000%\000\000\000&\000\000\000(\000\000\000\000\000)\002G\002F\000\000\000\000\000\000\000\000\000\000\000\000\000e\000\000\002\223\000h\000k\000f\002\212\003f\002\213\002\014\002\215\000\000\000\000\002\220\002\134\002\222\000\000\000\000\000\000\002\229\002\226\000\000\000\000\000\000\002\n\001\252\000\000\000\000\000\000\000\000\002\000\000\000\001\251\000\000\002\r\002\235\000\000\000\000\000\000\000\000\001\154\000\000\000\000\002\012\002\221\000s\000\000\000\000\000r\000\000\002\230\002\214\000\000\002\006\000\000\000\000\002\233\000\000\002\232\002\231\000\000\002\002\000\000\000\000\001\254\001\253\002\011\002\003\000\000\000q\000\000\002\228\002\227\000\000\002\225\000\000\002\142\002\141\000\000\000\000\002i\002\224\000\000\000\000\000\000\000\000\001\211\001C\001D\002\144\000\000\002\145\002\143\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\004\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\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\137\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\003Q\000\000\000\000\000\000\000\000\000\000\001\136\000\000\000\000\000\000\001a\001\144\001`\001\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002O\000\000\000\000\002P\002C\002B\000\000\000\000\001\135\001\134\000\000\000\207\000\000\000\000\001w\000\000\000\000\001{\000\000\001\231\001\230\000\000\000\000\001\229\001\228\001z\001x\000\000\001|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\233\001f\000\000\000\000\001g\003g\000\231\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\177\002\182\002\180\000\000\000\000\000\000\002\193\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\211\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\025\000\000\000\000\000\000\000\000\000\000\000\000\001\002\002\024\001\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003K\000\000\000\000\003J\000\000\000\000\000\000\000\000\000\253\000\252\000\000\000\254\000\000\000\000\000\000\002\190\000\000\000\000\000\000\002\158\002\149\000\000\000\000\000\000\000\000\002<\000\000\000\228\000\000\000\000\000\000\000\000\002\176\002\192\002\179\002\178\000\000\000\000\000\000\002@\000\000\000\000\000\000\000\237\000\000\000\235\000\000\000\000\000\229\002=\000\000\000\000\000\171\000\000\000\000\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\170\000\000\000\000\000\000\002p\002o\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\006\000\000\003!\000\000\000\000\000\197\000\196\001\007\000\000\003\"\003#\000\000\000\000\000\000\000\000\000\000\000\000\001\r\000\000\000\000\002I\000\000\000\000\000\000\001\012\000\000\000\000\001\011\001\n\000\000\000\000\000\000\000\000\001\015\000\000\000\000\001\014\000\000\002\t\000\000\000\000\002\021\000\000\000\000\002\023\000\000\000\000\002\019\002\018\002\016\002\017\000\000\000\000\000\000\001\b\000\000\000\000\001.\000\020\001\017\000\000\000\000\000\000\002\160\002\151\000\000\000\000\002\159\002\150\000\000\000\000\000\000\000\000\002\162\002\153\000\000\000\000\002c\000\000\000\000\002\166\002\157\000\000\000\000\002\164\002\155\002\186\000\000\000\000\000\000\000\000\000\000\002\161\000\000\000\000\000\000\000\000\000\000\002\165\000\000\000\000\000\000\000\000\000\000\002\163\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002E\002D\000\169\000\000\002\152\000\000\000\000\002\156\000\000\000\000\002\154\000\000\000|\000}\000\000\000\000\000\000\000\000\000\142\000\141\000\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\199\000\000\000\200\000\201\000\133\000\000\000\132\000\000\000\000\001F\000\000\001G\001E\002K\000\000\000\000\002L\002J\000\000\000\000\000\000\000\000\000\000\001\025\000\000\000\000\001\026\000\000\000\000\000\172\000\000\001\028\001\027\000\000\000\000\002\194\002\187\000\000\002\203\000\000\002\204\002\202\000\000\002\208\000\000\002\209\002\207\000\000\000\000\002\189\002\188\000\000\000\000\000\000\002/\000\000\001\225\000\000\000\000\000\000\002l\002.\000\000\002\198\002\197\000\000\000\000\000\000\000\000\002\168\000\000\002\169\002\167\000\000\002\196\002\195\000\000\000\000\000\000\002f\002\185\000\000\002\184\002\183\000\000\002\206\002\205\000\130\000\000\000\000\000\000\000\000\000\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001m\000\000\000\000\000\000\000\000\000\000\000\127\000\000\001o\000\000\000\000\000\000\000m\000\000\000\000\000n\000\000\000\000\000\000\000\000\001\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\243\000\000\000\000\000w\000\000\000\246\000\244\000\000\000\000\000\000\000\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000o\000\000\000\000\002-\000\000\000\000\001\016\001\223\000\000\001\000\001\001\001\023\000\000\002\201\000\000\002\200\002\199\002\181\000\000\000\000\000\000\000\000\002\171\000\000\002\173\000\000\002\172\000\000\002\147\002\146\000\000\002\148\000\000\000\000\000\000\000\000\001\238\001\232\000\000\001\237\000\000\001\235\000\000\001\236\000\000\001\233\000\000\000\000\001\234\000\000\001\172\000\000\000\000\000\000\001\171\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001$\0030\000\000\000\000\003/\000\000\000\000\000\000\000\000\000\000\002\030\000\000\000\000\000\000\000\000\000\000\000\000\0035\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\156\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\003 \000\000\000\000\002q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\174\000\000\000\000\000\000\001\173\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\143\000\000\000\000\000\000\000\000\001\128\000\000\001\127\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001&\002\127\000\000\000\000\001q\000\000\002}\000\000\000\000\000\000\002|\000\000\000\000\001r\000\000\000\000\000\000\000\000\002\131\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003o\000\000\000\000\000\000\000\195\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000G\000\000\000\000\000\000\000\000\001\151\000\000\001\150\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\0017\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\132\002u\000\000\002{\002v\002\130\002\129\002\128\002~\0011\000\000\002s\000\000\000\000\000\000\000\000\000\000\002>\000\000\000\000\001*\002w\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\167\001\163\000\000\000\000\000\000\000\214\000\000\000\000\0022\002>\000\000\000\000\001,\0020\0021\000\000\000\000\000\000\000\000\000\000\001\170\001\166\001\162\000\000\000\000\000\215\000\000\000\000\001\169\001\165\001\161\001\159\002x\002t\002\133\0010\002\027\002r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003j\000\000\000\000\003l\000\000\0008\000\000\000\000\003r\000\000\003q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003i\000\000\000\000\003k\000\000\000\000\000\000\002&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001U\000\000\000\000\001S\001Q\000\000\0009\000\000\000\000\003u\000\000\003t\000\000\000\000\000\000\001O\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001T\000\000\000\000\001R\001P\000\000\000\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\019\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\020\000\000\000B\000/\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\018\000\000\000X\000W\000\000\000\000\000]\000\\\000\000\000\000\001\213\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\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\000\000\000\000\000\001\030\0033\003*\000\000\000\000\003.\003\031\003)\0032\0031\0015\000\000\000\000\003'\000\000\003+\003(\0034\002\026\000\000\000\000\003%\000\000\000\193\003$\000\000\000\000\000\226\000\000\000\000\0014\0013\000\000\001t\001s\000\000\000\000\002\234\002\217\000\000\000D\000\000\000\000\000E\000\000\000\000\002\175\002\174\000\000\000\000\000\136\000\000\000\000\002#\000\219\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\191\000\000\003-\0027\0028\0023\0025\0024\0026\000\000\000\000\000\000\000\192\000\000\000\000\002>\000\000\000\218\000\000\000\000\000\000\000\000\003,\000\000\000\189\000\000\000\000\000\000\000\000\001N\001H\000\000\000\000\001I\000\031\000\000\000\030\000\000\000\000\000\204\000\000\000\000\000\000\000\"\000\029\000\000\000\000\000\000\000\023\000\000\000\000\000\000\000\000\001\168\001\164\000\000\001\160\003M\000\000\002>\000\000\000\217\000\000\000\000\000\000\000\000\002z\002;\0029\002:\000\000\000\000\000\000\002>\000\000\000\216\000\000\000\000\000\000\000\000\002y\000\000\001\130\001\129\000\000\000\024\000\000\003m\000\000\000-\000\000\000\000\000\000\000\000\000\140\000\139\000\000\000\222\000\001\000\000\000\000\000\225\000\002\000\000\000\000\000\000\001[\001\\\000\003\000\000\000\000\000\000\000\000\001^\001_\001]\000\021\001Z\000\022\000\000\001\239\000\000\000\004\000\000\001\240\000\000\000\005\000\000\001\241\000\000\000\000\001\242\000\006\000\000\000\007\000\000\001\243\000\000\000\b\000\000\001\244\000\000\000\t\000\000\001\245\000\000\000\n\000\000\001\246\000\000\000\011\000\000\001\247\000\000\000\000\001\248\000\012\000\000\000\000\001\249\000\r\000\000\000\000\000\000\000\000\003@\003;\003<\003?\003=\000\000\003D\000\014\000\000\003C\000\000\001;\000\000\000\000\003A\000\000\003B\000\000\000\000\000\000\000\000\001?\001@\000\000\000\000\001>\001=\000\015\000\000\000\000\000\000\003`\000\000\003_") + (16, "\000\000\000\000\000\000\003\174\003\173\003\172\003\171\003\170\003|\003\169\003\168\003\167\003\166\003\165\003\164\003\163\003\162\003\161\003\160\003\159\003\158\003\157\003\156\003\155\003\154\003\153\003\152\003\151\003{\003\150\003\149\003\148\003\147\003\146\003\145\003\144\003\143\003\142\003\141\003\140\003\139\003\138\003\137\003\136\003\135\003\134\003\133\003\132\003\131\003\130\003\129\003\128\003\127\003~\003}\000\000\000\000\000\"\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\242\002\031\002\n\002\028\002\027\002\026\002 \002$\000\000\003\243\002\030\002\029\002\011\002\"\002\025\002\024\002\023\002\022\002\021\002\019\002#\002!\000\000\000\000\000\000\001\r\000\000\000\000\002\014\000\000\000\000\000\000\002\016\000\000\000\000\000\000\002\018\002(\002%\002\020\002\012\002&\002'\000\000\003\241\003\240\003\244\000\000\000\000\000 \001\177\000\132\000\000\001\t\001\n\000\000\000\000\000\000\002A\002@\000\000\000\000\000\031\000\000\000\000\000\000\000\000\000\000\001\220\000\000\000\000\000\000\000\000\000\000\003\237\000\000\003\232\000\000\000\000\003\234\000\000\003\236\000\000\003\233\003\235\000\000\003\227\000\000\003\226\003\222\002\225\000\000\003\225\000\000\002\226\000\000\000\000\000\000\000\000\000c\000\000\000\000\000a\000\000\000\000\001\175\000\000\000\000\000\000\000\000\000\000\000\237\001\189\000\000\000\000\000\000\000\000\000\000\000\000\002\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\218\000\000\002,\000\000\000\000\000|\000\000\000\000\000\000\000\000\000\000\001\195\000\000\001\194\000\000\001\178\001\193\000\000\001\176\000[\000\027\000\000\000\000\001\241\000\024\000\000\000\000\000\000\000\000\000\000\000s\000\000\000\000\000\000\003\221\000\018\000t\000\135\000u\000\023\000\000\000v\000r\000\000\000\000\000\000\000\000\000\000\000\000\000\028\000\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\019\000\030\000\246\000\248\002\235\002\221\000\000\000y\000\000\002\222\000\000\000\000\002)\000\000\000\000\000\000\000\000\003\199\000\000\001\129\000\000\003\200\000\000\000\000\000x\000\000\000\000\000\000\000z\000\000\000{\000\000\000}\000\000\000\000\000~\002\211\002\210\000\000\000\000\003\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\185\002\184\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\000\000\000\000\001H\001G\000\000\003\022\003\023\000\000\003\020\003\021\000\000\000\000\000\000\000\000\000\000\001\215\001\214\000\000\003g\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\000\017\000\016\000\000\000\000\000\000\000\000\000\000\001\206\000\000\000\000\000\000\000\000\000\000\000\000\001\187\000\000\000\000\001\190\001\188\001\196\000:\0039\003\198\003\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\\\000\000\000\000\000`\000\000\001&\000\000\003\025\003\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\\\000\000\003n\000_\000b\000]\003c\003\245\003d\002n\003f\000\000\000\000\003k\003\019\003m\000\000\000\000\000\000\003t\003q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001@\001?\000\000\001>\003z\003l\000j\000\000\000\000\000\000\000\000\002j\000\000\000\000\002i\000\000\001_\002a\002m\002`\002d\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0018\0017\000\000\0016\002\187\000\000\000\000\002e\000\000\000\000\000\000\000\000\000\000\001\243\000\000\000\000\002l\000\000\000\000\000i\000\000\003u\003e\000\000\001I\000\000\000\000\000\000\000\000\000\000\001<\001;\000\000\001:\002\188\000\000\000\000\003x\000\000\003w\003v\000\000\002g\000\000\000\000\002c\002b\002k\002h\002\189\000\000\000\000\000h\000\000\003s\003r\000\000\003p\000\000\003\027\003\026\000\000\000\000\002\248\003o\000\000\000\000\000\000\000\000\002.\001\156\001\157\003\029\000\000\003\030\003\028\000\000\001[\002\197\001`\000\000\000\000\002u\000\000\002p\002q\002t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001M\001L\000\000\001K\002\193\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001Y\001X\000\000\001W\002\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001U\001T\000\000\001S\002\195\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0011\0012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\251\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\227\000\000\000\000\000\000\000\000\000\000\000\000\004\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\224\000\000\000\000\000\000\000\000\000\000\001\226\000\000\000\000\000\000\001\186\001\233\001\185\002\206\001\230\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\219\000\000\000\000\002\220\002\207\000\000\000\000\001\225\001\224\000\000\000\252\000\000\000\000\001\208\000\000\000\000\001\212\000\000\002E\002D\000\000\000\000\002C\002B\001\211\001\209\000\000\001\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\022\001\191\000\000\000\000\001\192\003\246\001\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003@\003E\003C\000\000\000\000\000\000\003P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003b\000\000\003a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\000\000\000\000\000\000\001/\002x\0010\000\000\000\000\000\000\000\238\000\000\0013\0014\000\000\000\239\002\205\000\000\000\000\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\170\002\169\000\000\000\000\000\000\003M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\198\000\000\001\017\000\000\000\000\000\000\000\000\003?\003O\003B\003A\000\000\000\000\000\000\002\202\000\000\000\000\000\000\001\026\000\000\001\024\000\000\000\000\001\018\002\199\000\000\000\000\000\000\000\000\000\207\002\214\000\000\000\000\000\000\000\000\000\000\001*\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\002\242\000\000\000\000\000\000\000\000\000\000\000\000\002\160\002\159\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\216\000\000\000\000\000\000\000\000\000\210\002\252\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\236\000\000\000\000\000\000\000\000\000\000\000\000\000\209\000\208\000\000\000\000\000\000\000\244\000\243\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\165\002\164\000\000\000\000\000\000\000\000\000\000\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\177\000\000\000\000\000\000\000\000\000\000\000\000\001f\000\000\000\000\002\213\000\000\000\000\000\000\001e\000\000\000\000\001d\001c\000\000\002?\000\000\000\000\000\140\003\178\002\204\000\000\000\000\000\000\000\000\001h\000\000\000\000\001g\000\000\001^\000\000\000\000\000\000\000\000\000\000\001Q\001P\000\000\001O\002\194\000\000\000\000\002w\000\000\000\000\002s\002r\001a\000\000\000\000\001\135\000\020\001j\000\000\000\000\000\000\002\241\000\000\003.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0030\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\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\003,\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\000\000\000\000\000\000\000\000\0033\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0031\000\000\000\000\000\000\000\000\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\209\002\208\000\206\000\000\000\127\000\128\000\000\000\000\000\000\000\000\000\159\000\158\000\000\003\"\000\000\000\000\003$\000\000\000\000\003#\000\000\000\000\000\000\000\000\003&\000\000\000\000\003*\000\000\000\000\003(\003I\000\000\000\000\000\000\000\000\000\000\000\146\000\000\000\000\001\159\000\000\001\160\001\158\002\215\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\003)\000\000\000\000\003'\000\000\000\000\000\000\000\000\000\000\002\175\002\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001r\000\000\000\000\001s\000\000\000\000\000\211\000\000\001u\001t\000\000\000\000\003Q\003J\000\000\003Z\000\000\003[\003Y\000\000\003_\000\000\003`\003^\000\000\000\000\003L\003K\000\000\000\000\000\000\002\143\000\000\000\000\000\000\000\000\002\251\002\142\000\000\003U\003T\000\000\000\000\000\000\000\000\0037\000\000\0038\0036\000\000\003S\003R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\245\003H\000\000\003G\003F\000\000\003]\003\\\000\145\000\000\000\000\000\000\000\000\000\144\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\142\000\000\001\200\000\000\000\000\000\000\000d\000\000\000\000\000e\000\000\000\000\000\000\000\000\001\235\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\000\000\000\000n\000\000\001#\001!\000\000\000\000\000\000\000\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\143\000f\000\000\000\000\002\141\000\000\000\000\001i\002=\000\000\001-\001.\001p\000\000\000\000\000\000\000\000\000\000\003X\000\000\003W\003V\003D\000\000\000\000\000\000\000\000\003:\000\000\003<\000\000\003;\000\000\003 \003\031\000\000\003!\000\000\000\000\000\000\000\000\0035\0034\000\000\000\000\000\000\000\000\002S\002G\000\000\002Q\000\000\002M\000\000\002O\000\000\002I\000\000\000\000\002K\000\000\002R\002F\000\000\002P\000\000\002L\000\000\002N\000\000\002H\000\000\000\000\002J\000\000\002\007\000\000\000\000\000\000\002\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\231\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001}\003\191\000\000\000\000\003\190\000\000\000\000\000\000\000\000\000\000\002~\000\000\000\000\000\000\000\000\000\000\000\000\003\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\245\000\000\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\003\176\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\t\000\000\000\000\000\000\002\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\232\000\000\000\000\000\000\000\000\001\217\000\000\001\216\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\127\003\012\000\000\000\000\001\202\000\000\003\n\000\000\000\000\000\000\003\t\000\000\000\000\001\203\000\000\000\000\000\000\000\000\003\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\254\000\000\000\000\000\000\000\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000>\000\000\000\000\000\000\000\000\001\240\000\000\001\239\000\000\000\000\000\000\000\000\000A\000\000\000\000\000\000\002\139\000\000\002\138\000\000\000\000\000\000\000\000\000B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000G\000\000\000\000\000\000\000H\000F\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\000\000C\000\000\000J\000I\000\000\000D\000E\000\000\001\144\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001{\000Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000W\000\000\000Y\000X\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001y\003\017\003\002\000\000\003\b\003\003\003\015\003\014\003\r\003\011\001\138\000\000\003\000\000\000\000\000\000\000\000\000\000\000\002\200\000\000\000\000\001\131\003\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\001\252\000\000\000\000\000\000\001\003\000\000\000\000\002\146\002\200\000\000\000\000\001\133\002\144\002\145\000\000\000\000\000\000\000\000\000\000\002\003\001\255\001\251\000\000\000\000\001\004\000\000\000\000\002\002\001\254\001\250\001\248\003\005\003\001\003\018\001\137\002{\002\255\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\249\000\000\000\000\003\251\000\000\000/\000\000\000\000\004\001\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\248\000\000\000\000\003\250\000\000\000\000\000\000\002\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\174\000\000\000\000\001\172\001\170\000\000\0000\000\000\000\000\004\004\000\000\004\003\000\000\000\000\000\000\001\168\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\173\000\000\000\000\001\171\001\169\000\000\000\000\000\000\0002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001l\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Q\000\000\000\000\000\000\000\000\000\000\000\000\000,\000\000\000\000\000P\000\000\000*\001m\000\000\0009\000&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001k\000\000\000O\000N\000\000\000\000\000T\000S\000\000\000\000\0020\000\000\000.\000\000\000\000\000\000\000-\000\000\000\000\000\000\0001\000\000\000R\000U\000\000\0003\0004\000\000\001\146\000\000\000\000\000\000\000\000\000\000\000\000\0007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001w\003\194\003\185\000\000\000\000\003\189\003\175\003\184\003\193\003\192\001\142\000\000\000\000\003\182\000\000\003\186\003\183\003\195\002z\000\000\000\000\003\180\000#\003\179\000\000\000\000\000\136\000\000\001\015\000\000\000\000\001\141\001\140\000\000\001\205\001\204\000\000\000\000\003y\003h\000\000\001F\002\191\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001D\001C\000\000\001B\002\190\000\000\000\000\000;\000\000\000\000\000<\000\000\000\000\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\002\180\002\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\149\000\000\000\000\002\131\001\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\000\000\003\188\002\151\002\152\002\147\002\149\002\148\002\150\000\000\000\000\000\000\000\134\000\000\000\000\002\200\000\000\001\007\000\000\000\000\000\000\000\000\003\187\000\000\000\131\000\000\000\000\000\000\000\000\001\167\001\161\000\000\000\000\001\162\002\005\000\000\002\004\000\000\000\000\000\247\000\000\000\000\000\000\000\000\000\249\000\000\000\000\000\000\000\029\000\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\001\001\253\000\000\001\249\003\220\000\000\002\200\000\000\001\006\000\000\000\000\000\000\000\000\003\007\002\155\002\153\002\154\000\000\000\000\000\000\002\200\000\000\001\005\000\000\000\000\000\000\000\000\003\006\000\000\001\219\001\218\000\000\000w\000\000\003\252\000\000\000$\000\000\000\000\000\000\000\000\000\157\000\156\000\000\001\011\000\001\000\000\000\000\001\014\000\002\000\000\000\000\000\000\001\180\001\181\000\003\000\000\000\000\000\000\000\000\001\183\001\184\001\182\000\021\001\179\000\022\000\000\002T\000\000\000\004\000\000\002U\000\000\000\005\000\000\002V\000\000\000\000\002W\000\006\000\000\000\007\000\000\002X\000\000\000\b\000\000\002Y\000\000\000\t\000\000\002Z\000\000\000\n\000\000\002[\000\000\000\011\000\000\002\\\000\000\000\000\002]\000\012\000\000\000\000\002^\000\r\000\000\000\000\000\000\000\000\003\207\003\202\003\203\003\206\003\204\000\000\003\211\000\014\000\000\003\210\000\000\001\148\000\000\000\000\003\208\000\000\003\209\000\000\000\000\000\000\000\000\001\152\001\153\000\000\000\000\001\151\001\150\000\015\000\000\000\000\000\000\003\239\000\000\003\238") and error = - (130, "'\225\016b\197V\248\204\242\192P?\144\000\0148\b\216@\b\184Q\190\018|\176\004\015\128\000\001\142\007\223b A\127\026\128\001\003\007\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\254\1797\172\221\127\140\223\175%G\248\132A\231\129\247\216\136\016_\198\160\000@\193\193\2388\176(4\000\000\000\000\000\000\000\000\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\002,\020o\132\159,\001\003\224\000\000c\129\247\216\136\016_\198\160\000@\193\193\2388\176(4'\225\017j\197V\248\204\242\192P?\128\000\0308\000\000\000\000\b\000\024\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\006\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\000\000\000\000\000\000\000\000\000\128\000\128\003\240\022\017\000\000\015\136\128A\000@\162\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\002\128\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\000\000\000\000\000\000\000\000\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\128\000\004\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\144\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\128\000\004\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\136\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\128\000\004\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\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\000\000\000\000\000\000\000\000\000\016\000\000\192\000\014\002\000\024\\ \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\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\133\128\153\208\004\025(\135\0000d\129\216D\136E\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\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\192\000\014\002\004\024\\ \000\001\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\001\002 \016`A\000\000\000@\000\000\000\000\000@\136\b\000\004\024\016@\000\000\016\000\000\000\000\000\016\"\002\000\001\006\004\000\000\000\004\000\000\000\000\003\018\000U\000\016a\"\028\000\001\016\007a\003 \004\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\bH\001\004\000A\000\bP\000\004\000\024\128\000\128\002\018\000A\000\016@\002\016\000\001\000\006 \000 \000\003\000\000\018`\130`\001\000\002\000\000\000\000\000 \000\192\000\004\144 \152\000@\000\128\000\000\000\000\b\0000\000\001$\b&\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\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\0000\000\001$\000&\000\000\000 \000\000\000\000\002\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\000\000\000\000\000\000\128\000\004\144\000\128\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\b\000\000A\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\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\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001\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\002\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! \004PA\004\000!\128\000\016\000v\001\018\000@2\000\003\192\128\006\023\n\000\000@ \b\000\004\002\018\000E\000\024A\"\028\000\001\016\006a\016a\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\200\000\014\002\000\024\\(\000\001\000\128 \000\016\0000\000C\128\129\006\023\b\000\000@\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\197\128\157\192\004\025(\135\0000D\129\216\005\152E\128\192\000\012\000\000\024\\ \000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\192\000\001\133\194\000\000\018\000\002\000\000\000\001\000\b\000\000\000 \000\000\000\004\128\000\000\016\000\000\192\000\014\002\000\024\\ \000\001\000\000\000\000\000\007\223b A\127\026\128\001\003\007\007\184\226\192\160\208\159\132E\171\021[\2273\203\001@\254\000\000x\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\0000\000\001&\b&\000\016\000 \000\000\000\000\002\000\012\000\000I\002\t\128\004\000\b\000\000\000\000\000\128\003\000\000\018@\130`\000\000\002\000\000\000\000\000 \000\192\000\004\144\000\152\000\000\000\128\000\000\000\000\b\000\016\000\000\000\000\002\000\000\000\000\000\000\000\000\000\002\018\000E\004\016@\"\024\000\001\016\007`\016 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000! \004P\001\004\002!\128\000\017\000f\001\002\000G\223b A\127\026\128\001\003\007\007\184\226\192\160\208\159\132E\171\021[\2273\203\001@\254\000\000x\224#a\000\"\225F\248I\242\192\016>\000\000\0068\b\216@\b\176Q\190\018|\176\004\015\128\000\001\142\0026\016\002,\020o\132\143,\001\003\224\000\000c\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001!\000\"\001@`H\226\192\000\006\000\000\0060!\000\000\016\b\000P!@\012\000\000\002\001\000\000\b@\000\004\000\000\020\bP\003\000\000\000\128@\000\002\016\000\001\000\000\005\002\016\000\192\000\000 \016\000\000\003!\000 @\002`H\176@\004\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\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\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\000\000\000\000\000\000\000\000\131!\132#\240\022qH\176O\140\134\193\000d\178\224\000\001\000\000\000\000\000\000\016\000\001\000\000\000\000\b0\000\000\002\000\000\000\016\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\004\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\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@\136\b\000\004\024\016\000\000\000\016\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\000\000\000\000\000\000\000\000\000\000\000\001\002 \000\000@A\000\000\000@\000\000\000\000\000@\136\b\000\000\016\016\000\000\000\016\000\000\000\000\n~\017\006,Uo\140\223,\005\003\248\128\000\227\130\159\132A\139\021[\2273\203\001@\254 \0008\224\167\225\017b\197V\248\204\242\192P?\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\000\001\002 \000@A\000\000\000@\000\000\000 \000@\136\b\b\000\016\016@\000\000\016\000\000\000\000\000\016\"\002\000\000\004\004\016\000\000\004\000\000\000\000\000\004\b\128\128\000\001\001\000\000\000\001\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\000P\"\002\000\000\004\004\000\000\000\004\000\000\000\000\000\141\132\000\139\005\027\225'\203\000@\248\000\000\024\224#a\000\"\193F\248H\242\192\016>\000\000\0068\000@\000\000\b\000\b\000@\000\000\000\000\000\000\000\000\016\000\000\000\000\002\000\016\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\016\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\235;\254\205\247\249\255\250\242t\255\152\132\014y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\"\225F\248I\242\192\016>\000\000\0068\b\216@\b\176Q\190\018|\176\004\015\128\000\001\142\0026\016\002,\020o\132\143,\001\003\224\000\000c\130\141\134\016\143\197[\229#\203>b\249\004\001\154\235\129!\004\"\001@`H\226\192\000\006\000\000\0060\b\216@\b\176Q\190\018<\176\004\015\128\000\001\206\012[\217\222\191\213\246\188\254\175\254\216}\246\223\255<\141\132\000\139\005\027\225#\203\000@\248\000\000\024\224\003!\000 @\002`H\176@\004\006\000\000\004\016\000\200@\b\016\000\152\018,\016\001\001\160\000\001D\0002\016\018\004\000&\004\139\004\000@h\000\000A\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\b\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\002 \000\000\000\000\000\000\000\000\016\000\004\000\0000\000\003\128\128\006\023\b\000\000@\000\000\000\000\000\012\000\000\224 \001\133\194\000\000\016\000\000\000\001@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\192\000\014\002\000\024\\ \000\001\000\000\000\000\004\0000\000\019\128\128\006\023\b\000\000@\000\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\0008\b\000ap\128\000\004\000\000\000\000\016\000\192\000\014\002\000\024\\ \000\001\000\000\000\000\020\000\016\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\001\000\000\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\004\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\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\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\224 \001\133\194\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\003\018\000w\000\016d\"\028\000\193\018\007`\022!\022\003\000\0008\b\000ap\128\000\004\000\000\000\000\0001 'p\001\006B!\192\012\017 v\001b\017`0\000\003\000\000\006\023\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\0001`'p\001\006J!\192\012\017 v\001b\017`\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\000\000\000\000\192\000\012\000\000\024\\ \000\001\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\012\000\000\224 \001\133\194\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001`'p\001\006J!\192\012\017 v\001b\017`0\000\003\000\000\006\023\b\000\000@\000\000\000\000\003\022\002w\000\016d\162\028\000\193\018\007`\022!\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\004\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\192\000\014\002\000\024\\ \000\001\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\b\000\000\004\000\000\002\000\000\000\001\000\003\000\0008\b\000ap\128\000\004\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\003\128\128\006\023\b\000\000@\000\000\000\000\000\000\000\004\000\000\000\000\004\000\000\002\000\000\000\001\002\003\000\0008\b\000ap\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\016\000\000\000\000\016\000\000\b\000\000\000\004H\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\004\000\000\002\000\000\000\001\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\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\018\000w\000\016d\"\028\000\193\018\007`\022!\020\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\004\000\012\000\000\224 \001\133\194\000\000\016\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\016\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\001\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\001\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\002\000\000\"\000\000\000\000\004\000\000\000\001\000\000\000\000\128\000\b\128\000\000\000\000\000\000\000\000@\000\000\000\000\200@\b\016\000\152\018,\016\001\001\160\000\001\004\0002\016\002\006\000&\004\154\004\000@`\000\000A\000\012\132\000\129\000\t\129&\129\000\016\024\000\000\016@\003!\000 @\002`H\160@\004\006\000\000\004\016\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\147)\r\168H\n`I\168@\004\006P\129\181T\000\000@\000\016\000\128\000\000\016\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$\202Cj\018\002\152\018n\016\001\001\180\016mU\000\016\000\000\000\000\004\000\138\000\000\000\000\000\000\000\002\012\132\016\129\000\t\129\"\193\000\016\026\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\0002\016\002\006\000&\004\155\004\000@h\000\000A\000\012\132\000\129\000\t\129&\193\000\016\026\000\000\016@\003!\000 @\002`H\176@\004\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\002@\0006\000\000 \000\004\000\000\000\001@\004\197\016\003!\000 @\002`H\176@\004\006\128\000\004\016$\000\003`\000\002\000\000@\000\000\000\020\000LQ\b2\016\002\004\000&\004\139\004\000@h\000\000A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\r\128\000\b\000\001\000\000\000\000P\0011D\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t2\016\218\004\000\166\004\155\004\000@m\000\019U@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\200Ch\016\002\152\018l\016\001\001\180\000MU\b:\024B?\001g\020\139\004\248\200l\016\006K,\000\000\000\000\000\000\128\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\012\132\000\129\000\t\129\"\129\000\016\024\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\002\000\000\016\000\000\000\000\000\001\000\000\016\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\b\000\000@\000\000\000\000\016\000\000\000\000\000\019\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 \200@\b\016\000\152\018,\016\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002@\0006\000\000 \000\004\000\000\000\001@\004\197\016\131\000\0008\b\000ap\128\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\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 \200@\b\016\000\152\018,\016\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002@\0006\000\000 \000\004\000\000\000\001@\004\197\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\002\000\000\016\000\000\000\000\004\000\000\000\000\000\004\129\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\018\004\000&\004\139\004\000@h\000\000A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\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\002\000\000$\000\000\000\000\004\000\000\000\000\000\004\133\016\131!\001 @\002`H\176@\004\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\002\000\000\"\000\000\000\000\004\000\000\000\000\000\004\129\016\128\000\b\128\000\000\000\000\000\000\000\000\000\000\000\000 \192\000 \000\000\b\000\000\000\000\000\000\000\000\000\b\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\000\002\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\0002\144\002\132\128&\004\154\132\002@d\000\019E`\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\001\000\000\000\000\000\000\000\000\000\016\000\004\000\0000\000\003\128\128\006\023\b\000\000@\000\000\000\000\000\000\000\016\000\000\000\000\004\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\000\000\000\000\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\000\000 \000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\016\000\000\000\0026\016\002,\020o\132\143,\001\003\224\000\000c\128\012\132\b\129\144I\129&\193\000\016\026\000\000\016@\001\002 \000@A\000\000\000@\000\000\000 \000@\136\b\b\000\016\016@\000\000\016\000\000\000\000\000\016\"\002\000\000\004\004\016\000\000\004\000\000\000\000\000\004\b\128\128\000\001\001\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\016\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\000\000\000\000\000\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@\136\b\000\004\024\016\000\000\000\016\000\000\000\000\000\016\"B\000\001\006\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\001\002 \000\016`@\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\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\001\002 \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\012H\001T\000A\128\136p\000\004@\029\128\b\128\016\002\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\003\000\000\018@\002`\000\000\002\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\004\000\004\000\000\012\000\000\240 \001\133\194\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\192\000\014\002\000\024\\ \000\001\000\000\000\000\000\012H\001T\000A\128\136p\000\004@\029\128\b\128P\012\000\000\224 \001\133\194\000\000\016\000\000\000\000\000\196\128\021@\004\024\b\135\000\000D\001\216\004\136\0051 \005P\001\006\002!\192\000\017\000v\001\"\000@0\000\003\128\128\006\023\b\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\001\000\000\000\000\003\000\0008\b\000ap\128\000\004\000\000\000\000\0001 \005P\001\006\002!\192\000\017\000v\001\"\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\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\016\000\016\000\000\016\"\002\000\001\006\004\000\000\000\004\000\000\000\000\003\018\000U\000\016`\"\028\000\001\016\007`\002 \004\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\016\000\000\000\016\000\000\000\000\002\000\000\000\000\000\000\000\000\000\003\018\000U\000\016a\"\028\000\001\016\007a\003 \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\001\002 \000\016`@\000\000\000@\000\000\000\0001 \005P\001\006\002!\192\000\017\000v\000\"\000@\016\"\002\000\001\006\004\000\000\000\004\000\000\000\000\003\018\000U\000\016`\"\028\000\001\016\007`\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\012H\001T\000A\132\136p\000\004@\029\132\b\128\016\004\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\0001 \005P\001\006\018!\192\000\017\000v\016\"\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\018\000U\000\016`\"\028\000\001\016\007`\002 \004\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\128\021@\004\024\b\135\000\000D\001\216\000\136\0010\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\004\000\000\b\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\132\000\000\000\000\000\000\000\000\000\000\004\b\128\128\000\001\001\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001 \005P\001\006\018!\192\000\025\000v\000&\000@P\"B\000\000\004\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\128\000\004\000\000\000@\001\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\004\b\128\128\000A\129\000\000\000\001\000\000\000\000\000\192\000\004\000\000\b\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\0001 \005P\001\006\018!\192\000\025\000v\016&\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\004\000\000\128\000\000\000\000\000#a\000\"\193F\248H\242\192\016>\000\000\0068\b\216@H\176Q\190\018<\176\004\015\128\000\001\142\000\000\000\000\000\000\002\000\000\000\000\016\000\000\000\000\002\000\000 \000\000\000\000\000\000\000\004\001\000\000\000\000#a\000\"\193F\248H\242\192\016>\000\000\0068\000H@\b\128P\024\0188\176\000\001\128\000\001\140\012\000\000\136\000\000\000\000\000\000\000\192\004\020\t\000\000\000\001\000 \000\000\128\000\000\000\002\000\001\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\001\000 \000\000\128\000\000\000\002\000\001\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#a\000\"\225F\248I\242\192\016>\b\000\0068\b\216@\b\176Q\190\018|\176\004\015\130\000\001\142\0026\016\002,\020o\132\143,\001\003\224\128\000c\128\004\132\000\136\133\001\129'\139\000\000\024\000\000\024\192\001!\000\"\001@`I\226\192\000\006\000\000\0060\000H@\b\128P\024\0188\176\000\001\128\000\001\140\000\018\016\002 \020\006\004\142,\000\000`\000\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\000\000\000\000\000\000\000\000\012[\221\222\191\213\246\156\254\255\254\216}\246\223\255|\004\000\000\000\000\001\128#\128\000\000\000\000\000\000\000\163a\132#\241V\249H\242\207\152\190A\000f\186\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n6\016B,\020o\132\143,\001\003\224\000\000c\130\141\132\016\139\005\027\225#\203\000@\248\000\000\024\224\129\002 \000@A\000\000\000@\000\000\000\000\000@\136\b\000\000\016\016@\000\000\016\000\000\000\000\000\016\"\002\000\000\004\004\000\000\000\004\000\000\000\000\000\000\000\000\000\000\001\000\004\000\000\000\000\000\000@\000\129\002 \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\000\000@\000\000\128\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\163a\004\"\193F\248H\242\192\016>\000\000\0068(\216A\b\176Q\190\018<\176\004\015\128\000\001\142\b2\016B\004\000&\004\139\004\000@`\000\000A\000\000\000\000\000\000\000\000\004\000\000\000\001\000\004\193\016\003\000\0008\b\000ap\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\016\000\000\000\0026\016\002,\020o\132\143,\001\003\224\000\000c\128\141\132\000\139\133\027\225'\203\000@\248\000\000\024\224#a\000\"\193F\248I\242\192\016>\000\000\0068\b\216@\b\176Q\190\018<\176\004\015\128\000\001\142\0002\016\002\006\000&\004\155\004\000@h\000\000E\000\012\132\000\129\000\t\129&\193\000\016\026\000\000\017@\003!\000 @\002`H\176@\004\006\128\000\004P\000\200@\b\016\000\152\018,\016\001\001\160\000\001\004\001\000\000\000\000\000\128\000\016\000\000\000\000\000\018\004@\141\132\000\139\005\027\225#\203\000@\248\000\000\024\224\003)\000(h\002`I\168@\004\006\000\000\004\016\000\202@\n\018\000\152\018j\016\001\001\128\000\001\004\0002\144\002\132\128&\004\138\132\000@`\000\000A\000\b\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\200@\b\016\000\152\018,\016\001\001\160\000\001\004\000\000\000@\000\000\000\000\016\000\000\000\004\000\019\004@\012\000\000\224 \001\133\194\000\000\016\000\000\000\000\000\000\000\004\000\000\000\000\001\000\000\000\000@\000\000\000\000\000\001\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\b:\024B?\001g\020\139\004\248\200l\016\006K,\000\000\000\000\000\000\128\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\202@\n\018\002\152\018*\016\001\001\128\000\005\004\0026\016\002,\020o\132\143,\001\003\224\000\000c\128\012\132\000\129\128\t\129&\193\000\016\026\000\000\016@\003!\000 @\002`I\176@\004\006\128\000\004\016\000\200@\b\016\000\152\018,\016\001\001\160\000\001\004\000\000\000\000\000\000\000\000\016\000\000\000\004\000\018\004@\141\132\000\139\005\027\225#\203\000@\248\000\000\024\224\001!\000\"!@`I\226\192\000\006\000\000\0060\000H@\b\128P\024\018x\176\000\001\128\000\001\140\000\018\016\002 \020\006\004\142,\000\000`\000\000c\003\018Rw\007\208|&\028\000\255\182\007}\183\231\015\001!\000\"\001@`H\226\192\000\006\000\000\00601owz\255W\218s\251\255\251a\247\219\127\253\240\000\000\000\000\000\004\000\n\000\000\000\000\000\000\000\000\141\132\000\139\005\027\225#\203\000@\248\000\000\024\224#a\000\"\193F\248H\242\192\016>\000\000\00681ogz\255W\218s\250\191\251a\247\219\127\252\240\000\000\000\000\000\006\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\144\000 \192\000\014\002\000\024\\ \000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\0002\000\000\000\000\004\000\000\000\001\000\000\000\000\131\000\0008\b\000ap\128\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\200\000\000\000\000\016\000\000\000\004\000\b\000\000\012\000\000\224 \001\133\194\000\000\016\000\000\000\000\000\128\000\012\128\000\000\000\001\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\016\002 \020\006\004\142,\000\000`\000\000c\003\022\246w\175\245}\167?\171\255\182\031}\183\255\223\000\000\000\000\000\000 \000\000\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\006\000\n\000\000\000\000\000\000\000\000\141\132\000\139\005\027\225#\203\000@\248\000\000\024\224\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\003\018Rw\007\208|&\028\000\255\150\007x\183\231\015#a\000\"\193F\248H\242\192\016>\000\000\00681ogz\255W\218s\250\191\251a\247\219\127\252\252II\220\031A\240\152p\003\254\216\029\246\223\156<\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\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\002\000\000\000\000\000\000\000\000\000\000\000\001\000 \000\000\128\000\000\000\002\001\000\000\000\000\001!\000\"\001@`H\226\192\000\006\000\000\0060\000\000\016\002\000\000\b\000\000\000\003 \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\004\000\128\000\002\000\000\000\000\b\004\000\000\000\000\004\132\000\136\005\001\129#\139\000\000\024\000\000\024\192\000\000@\b\000\000 \000\000\000\012\128\001@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\016\002 \020\006\004\142|\000\000`\000\000c\000\000\000\000\000\000\000\000\000\000\000\002\000\001\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\b\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001!\000\"\001@`H\231\192\012\006\001@\0060\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\216@\b\176Q\190\018<\176\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\018Rw\007\208|&\028\000\255\150\007x\183\231\015#a\000\"\193F\248H\242\192\016>\000\000\00681%'p}\007\194a\192\015\249`w\139~p\2426\016\002,\020o\132\143,\001\003\224\000\000c\131\018Rw\007\208|&\028\000\255\150\007x\183\231\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001ogz\255W\218s\250\191\251a\247\219\127\252\252II\220\031A\240\152p\003\254\216\029\246\223\156<\141\132\000\139\005\027\225#\203\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0009\253gx\253W\254s\252\191\253o\247\139\127\254\247\223b A\127\026\128\001\003\007\007\184\226\192\160\208\141\132\000\139\005\027\225#\203\000@\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\0026\016\002,\020o\132\143,\001\003\224\000\000c\131\018Rw\007\208|&\028\000\255\150\007x\183\231\015#a\000\"\193F\248H\242\192\016>\000\000\00681%'p}\007\194a\192\015\249`w\139~p\2426\016\002,\020o\132\143,\001\003\224\000\000c\131\018Rw\007\208|&\028\000\255\150\007x\183\231\015#a\000\"\193F\248H\242\192\016>\000\000\00681%'p}\007\194a\192\015\249`w\139~p\2426\016\002,\020o\132\143,\001\003\224\000\000c\131\018Rw\007\208|&\028\000\255\150\007x\183\231\015#a\000\"\193F\248H\242\192\016>\000\000\00681%'p}\007\194a\192\015\249`w\139~p\2426\016\002,\020o\132\143,\001\003\224\000\000c\131\018Rw\007\208|&\028\000\255\150\007x\183\231\015#a\000\"\193F\248H\242\192\016>\000\000\00681%'p}\007\194a\192\015\249`w\139~p\2426\016\002,\020o\132\143,\001\003\224\000\000c\131\018Rw\007\208|&\028\000\255\150\007x\183\231\015#a\000\"\193F\248H\242\192\016>\000\000\00681%'p}\007\194a\192\015\249`w\139~p\2426\016\002,\020o\132\143,\001\003\224\000\000c\131\018Rw\007\208|&\028\000\255\150\007x\183\231\015#a\000\"\193F\248H\242\192\016>\000\000\00681%'p}\007\194a\192\015\249`w\139~p\2426\016\002,\020o\132\143,\001\003\224\000\000c\131\018Rw\007\208|&\028\000\255\150\007x\183\231\015#a\000\"\193F\248H\242\192\016>\000\000\00681%'p}\007\194a\192\015\249`w\139~p\2426\016\002,\020o\132\143,\001\003\224\000\000c\131\018Rw\007\208|&\028\000\255\150\007x\183\231\015#a\000\"\193F\248H\242\192\016>\000\000\00681%'p}\007\194a\192\015\249`w\139~p\2426\016\002,\020o\132\143,\001\003\224\000\000c\131\018Rw\007\208|&\028\000\255\150\007x\183\231\015#a\000\"\193F\248H\242\192\016>\000\000\00681%'p}\007\194a\192\015\249`w\139~p\2426\016\002,\020o\132\143,\001\003\224\000\000c\131\018Rw\007\208|&\028\000\255\150\007x\183\231\015#a\000\"\193F\248H\242\192\016>\000\000\00681%'p}\007\194a\192\015\249`w\139~p\2402\016\002\004\000&\004\155\004\000@`\000\000A\000\012\132\000\129\000\t\129\"\193\000\016\024\000\000\016@\135\169\017hL\018h\207\168@d\007\216\001\188U \232a\b\252\005\156R,\019\227!\176@\025,\176\000\000\000\000\000\002\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\003)\000(H\002`H\168@\004\006@\000\148\016\000\200@\b\016\000\152\018(\016\001\001\128\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\141\132\000\139\005\027\225#\203\000@\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\016\000\000\000\0026\016\002,\020o\132\143,\001\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\144\002\132\128&\004\138\132\000@d\000\tA\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \224\000\014\002\000\024\\ \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\000\000\000\000\000\001\000\000\000\003\000\0008\b\000ap\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\016\000\000\000\0026\016\002,\020o\132\143,\001\003\224\000\000c\128\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\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\012\000\000\224 \001\133\194\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000@\000\000\000\b\216@\b\176Q\190\018<\176\004\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\001\000\000\000\000#a\000\"\193F\248H\242\192\016>\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\004\000\000\000\001\000\004\193\016\003\000\0008\b\000ap\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\016\000\000\000\0026\016\002,\020o\132\143,\001\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\001\000\000\000\000@\001 D\b\216@\b\176Q\190\018<\176\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\012\132\000\129\000\t\129\"\193\000\016\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\000@\000\000\000\016\000H\017\b2\016\002\004\000&\004\139\004\000@h\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\000@\001 D \200@\b\016\000\152\018,\016\001\001\160\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\001\000\004\129\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000H\017\0002\016\002\004\000&\004\139\004\000@h\000\000A\000\000\000\000\000\000\000\000\004\000\000\000\001\000\004\129\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000! \004P\001\004\002!\128\000\025\000f\000\002\000HH\001\020\000A\016\136`\003\006@\025\128@\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\012II\220\031A\240\152p\003\254X\029\226\223\156<\141\132\000\139\005\027\225#\203\000@\248\000\000\024\224\128\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\141\132\000\139\005\027\225#\203\000@\248\000\000\024\224\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\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\000\b\216@\b\176Q\190\018<\176\004\015\128\000\001\142\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#`|\001\128@@\003\224 \016\000X`:6\016Z,\020o\132\143,\001\003\224\000\000s\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000\"\193F\248H\242\192\016>\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#a\000\"\193F\248H\242\192\016>\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\000H@\b\128P\024\0188\176\000\001\128\000\001\140\012[\217\222\191\213\246\156\254\175\254\216}\246\223\255|\000\000\000\000\000\001\000\002\128\000\000\000\000\000\000\000#a\000\"\193F\248H\242\192\016>\000\000\0068 \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\003\022\246w\175\245}\175?\171\255\182\031}\183\255\207#a\000\"\193F\248H\242\192\016>\000\000\00681%'p}\007\194a\192\015\249`w\139~p\2426\016\002,\020o\132\143,\001\003\224\000\000c\130\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\0001ogz\255W\218\243\250\191\251a\247\219\127\252\2426\016\002,\020o\132\143,\001\003\224\000\000c\131\018Rw\007\208|&\028\000\255\150\007x\183\231\015#a\000\"\193F\248H\242\192\016>\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\003\022\246w\175\245}\175?\171\255\182\031}\183\255\207#a\000\"\193F\248H\242\192\016>\000\000\00681%'p}\007\194a\192\015\249`w\139~p\240\016\000\000\000\000\006\000\n\000\000\000\000\000\000\000\000\141\132\000\139\005\027\225#\203\000@\248\000\000\024\224\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\0001ogz\255W\218\243\250\191\251a\247\219\127\252\2426\016\002,\020o\132\143,\001\003\224\000\000c\131\018Rw\007\208|&\028\000\255\150\007x\183\231\015#a\000\"\193F\248H\242\192\016>\000\000\0068 \000\000@\000\000\000\000\000\000\000\000\000\000\000\000\012[\217\222\191\213\246\188\254\175\254\216}\246\223\255<\141\132\000\139\005\027\225#\203\000@\248\000\000\024\224\196\148\157\193\244\031\t\135\000?\229\129\222-\249\195\200\216@\b\176Q\190\018<\176\004\015\128\000\001\142\b\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\003\022\246w\175\245}\175?\171\255\182\031}\183\255\207#a\000\"\193F\248H\242\192\016>\000\000\00681%'p}\007\194a\192\015\249`w\139~p\240\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\001\000\002\128\000\000\000\000\000\000\000#a\000\"\193F\248H\242\192\016>\000\000\0068 \000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\012[\217\222\191\213\246\188\254\175\254\216}\246\223\255<\141\132\000\139\005\027\225#\203\000@\248\000\000\024\224\196\148\157\193\244\031\t\135\000?\229\129\222-\249\195\200\216@\b\176Q\190\018<\176\004\015\128\000\001\142\b\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\003\022\246w\175\245}\175?\171\255\182\031}\183\255\207#a\000\"\193F\248H\242\192\016>\000\000\00681%'p}\007\194a\192\015\249`w\139~p\2426\016\002,\020o\132\143,\001\003\224\000\000c\130\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\197\189\157\235\253_k\207\234\255\237\135\223m\255\243\200\216@\b\176Q\190\018<\176\004\015\128\000\001\142\012II\220\031A\240\152p\003\254X\029\226\223\156?\022\246w\175\245}\175?\171\255\182\031}\183\255\207#a\000\"\193F\248H\242\192\016>\000\000\00681%'p}\007\194a\192\015\249`w\139~p\252[\217\222\191\213\246\156\254\175\254\216}\246\223\255\127\022\246w\175\245}\167?\171\255\150\031x\183\255\207\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\b\216@\b\176Q\190\018<\176\004\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#a\000\"\193F\248H\242\192\016>\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\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\0026\016\002,\020o\132\143,\001\003\224\000\000c\128\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000#a\000\"\193F\248H\242\192\016>\000\000\0068 \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 \232a\b\252\005\156R,\019\227!\176@\025,\176\000\000\000\000\000\002\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\003)\000(H\n`H\168@\004\006\000\000\020\016\000\192\000\012\000\000\024\\ \000\001\000\000\000\000\000\000\016\000\000\000\000\130\000\000\000\000@\000\000\000\000\000\141\132\000\139\005\027\225#\203\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\202@\n\018\002\152\018*\016\001\001\128\000\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\000\000\000\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@\n\018\002\152\018*\016\001\001\128\000\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\000\000\000\000\000\000\000\000\000#a\000\"\193F\248H\242\192\016>\000\000\0068\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\002,\020o\132\143,\001\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\000\012II\220\031A\240\152p\003\254X\029\226\223\156<\012\132\000\129\000\t\129\"\193\000\016\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\000\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\000\139\005\027\225#\203\000@\248\000\000\024\224\196\148\157\193\244\031\t\135\000?\229\129\222-\249\195\200\216@\b\176Q\190\018<\176\004\015\128\000\001\142\012II\220\031A\240\152p\003\254X\029\226\223\156<\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@\001 D\b\216@\b\176Q\190\018<\176\004\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\128\000\000\000\000\b#a\000\"\193F\248H\242\192\016>\000\000\0068\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\016\002\004\000&\004\139\004\000@`\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\000\000\000\000\000\000\000\000\000 HA\b\128P\024\0188\176\000\001\128\000\001\140\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\b\216@\b\176Q\190\018<\176\004\015\128\000\001\206\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\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\0026\016\018,\020o\132\143,\001\003\224\000\000c\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\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\128\000\000\000\000\000\000\000\000\000\128\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\004\132\000\136\005\001\129#\139\000\000\024\000\000\024\192@\000\000\000\000\000\000\000\000\000\012\000\001@\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\002\000\000\"\000\000\000\000\000\000\000\000\001\000\002@\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\016\000\000\000\b\000\000\136\000\000\000\000\000\000\000\000\000\000\000\000\002\004\000\002\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\b\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\016\000\000\000\000\000\000\000\000\000\003\000\000P\000\000\000\016\000\000\000\000\006\000\142\000\000\000\000\000\000\000\003\000\000\"\000\000\000\000\000\000\0000\001\005\002@\000\196\148\157\193\244\031\t\135\000?\237\129\223m\249\195\192\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\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\128\000\136\129\240\006\001\001\000\015\129\128@\001`\128\224\000\002\000\000\000\000\000\000\000\000@\000\000\000\000\b\000\000\000\000\000\002\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\128\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\001\002 \000\000@A\000\000\000@\000\000\000\000\000@\136\b\000\000\016\016\000\000\000\016\000\000\000\000\000\000\000\000\000\000\004\000\016\000\002\000\000\000\000\000\000\141\132\000\139\005\027\225#\203\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\192\000\000\b\000\000\000@\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\016\000\000\000\000\000\000\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\016\000\000@\136\b\000\000\016\016\000\000\000\016\000\000\000\000\bH\001\020\000A\004\136p\000\006@\025\128\000\128\018\004\b\128\128\000A\129\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\016\000\000\000\000\002\000\000@\000\000\000\016\000\000\000\000\016\"\002\000\000\004\004\000\000\000\004\000\000\000\000\002\018\000E\000\016A\"\028\000\001\144\006`\000 \004\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\b\216@\b\176Q\190\018<\176\004\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\001\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\000H\000\000\b\000\016\000`\000\000\000\128\000\000\000\000\018\000\000\000\000\004\000\024\000\000\000 \000\000\000\000\004\128\000\000\000\001\000\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\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\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000@\000\b\000\000\000\004\000\0000\000\003\000\000\006\023\n\000\000@\000\000\000\000\000\000\000\000\000\000\128\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\b\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\012\000\000\224 \001\133\194\000\000\016\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000@\000\000\000\192\000\014\002\000\024\\ \000\001\000\000\000\000\000\000\000\000\136\000\000\000\000\016\000\000\b\000\000\000\000@\000\000\"\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\b\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\b\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\004\000\000\002\000\000\000\000\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\000\000\000\000\000\000\000\000\b\000\002\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\0000\000\003\000\000\006\023\b\000\000@\000\000\000\000\002\022\002E\000\016`\162\028\000\001\144\006`\016!\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!`$P\001\004\n!\192\000\025\000f\001\002\016@0\000\003\000\000\006\023\n\000\000@\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\001\000\000\000\003\000\0000\000\000ap\160\000\004\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\0000\000\003\000\000\006\023\b\000\000@\000\000\000\000\002\022\000E\000\016@\162\028\000\001\144\006`\016!\004\133\128\145@\004\024(\135\000\000d\001\152\004\bA\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\0000\000\003\000\000\006\023\b\000\000@\000\000\000\000\002\022\000E\000\016@\162\028\000\001\144\006`\016!\004\133\128\145@\004\024(\135\000\000d\001\152\004\bA\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\002\000\000\000\000\000\000\141\132\000\139\005\027\225#\203\000@\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\0002\016\"\004\000&\004\155\004\000@`\000\000A\000\012\132\b\129\000\t\129\"\193\000\016\024\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\200@\b\016\000\152\018,\016\001\001\128\000\001\004\bH\001\020\000A\000\136`\000\006@\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\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\0001%'p}\007\194a\192\015\249`w\139~p\240\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\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\004\b\128\128\128\001\001\004\000\000\001\000\000\000\000\000\001\002 \000\000@A\000\000\000@\000\000\000\000\000@\136\b\000\000\016\016\000\000\000\016\000\000\000\000\000\000\000@\000\000\004\000\016\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\002 \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\000\000@\000\000\128\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\128\000\004\000\000\000\000\000\000\000\000\000\000\000\144\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\016\002\004\000&\004\139\004\000@h\000\000E\003\018Rw\007\208|&\028\000\255\150\007x\183\231\015\128\000\132\001\240\006\001\001\000\015\128\128@\001\240\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\002\004\b\128\128\000A\129\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\016\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\002\004\b\128\128\000A\129\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\016\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\004\b\128\128\000A\129\000\000\000\001\000\000\000\000\000@\000\004\000\000\b\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\bH\001\020\000A\004\136p\000\004@\025\128\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\002 \000\000@A\000\000\000@\000\000\000\000\000@\136\b\000\000\016\016\000\000\000\016\000\000\000\000\bH\001\020\000A\004\136p\000\004@\025\128\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\128\002\000 \000\000\001\000\000\000\000\000\000\000\000\000@\000\000\b\000\b\000@\000\000\000\000\000\000\000\000\016\000\000\000\000\002\000\016\000\000\000\000\000\000\000\000\004\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\132\128\017@\004\016\b\134\000\000D\001\216\000\b\000\000@\136\b\000\004\024\016\000\000\000\016\000\000\000\000\012H\001\020\000A\128\136p\000\004@\025\128\000\128\002\018\000E\000\016@\"\024\000\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\192\000\128\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\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\016\000! \004P\001\004\002!\128\000\017\000f\000\002\000HH\001\020\000A\000\136@\000\004@\025\128\000\128\016\012\000\000\000\000\000\000\004\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\016\000\000\000\000\000\016\000\004\000\bH\001\020\000A\000\136`\000\004@\025\128\000\128\018\018\000E\000\016@\"\016\000\001\016\006`\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\004\000\000\000\000\000\004\000\001\000\002\018\000E\000\016@\"\024\000\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031}\136\129\005\252j\000\004\012\028\030\227\139\002\131B~\017\022\172Uo\140\207,\005\003\248\000\001\227\128\012\132\000\129\000\t\129\"\193\000\016\026\000\000\016@\016\000\001\000\000\000\000\001\000\000\000\000\000\001 D\b\216@\b\176Q\190\018<\176\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\247\216\136\016_\198\160\000@\193\193\2388\176(4'\225\017j\197V\248\204\242\192P?\128\000\0308\000@\136\b\b\000\016\016@\000\000\016\000\000\000\000\000\016\"\002\000\000\004\004\016\000\000\004\000\000\000\000\000\004\b\128\128\000\001\001\000\000\000\001\000\000\000\000\000\132\128\017@\004\016H\135\000\000D\001\152\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\006\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\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\004\000\0000\000\003\128\128\006\023\b\000\000@\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\001\000\000\000\003\000\0008\b\000ap\128\000\004\000\000\000\000\000! \004P\001\004B!\192\012\017\000v\001\002\000\000\000\000\000\000\000\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\132\129\017@\004\016\b\134\000\000D\001\152\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\001\020\000A\000\136`\000\004@\025\128\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\017@\004\017\b\135\0000D\001\216\004\b\000\000H\000\000\b\000\016\000`\000\000\000\128\000\000\000\000\018\000\000\000\000\004\000\024\000\000\000 \000\000\000\000\004\128\000\000\000\001\000\002\000\000\000\b\000\000\000\000\132\128\017@\006\016\b\135\000\000D\001\216\000\024\000\000H\000\000\000\000\016\000 \000\000\000\128\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\002\000\002\018\000E\000\016@\"\028\000\001\016\006a\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\b\000\bH\001\020\000A\000\136p\000\004@\025\128\000\128\002\018\000E\000\016@\"\024\000\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000! \004P\001\004\002!\192\000\017\000f\000\002\000\bH\001\020\000A\000\136`\000\004@\025\128\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\128\017x\012\016a\244\128\000D\001\128\000\b\000! \004P\001\004\000!\000\000\016\000f\000\002\000\000\016\000\000\002\000\000\000\016\000\000\000\000\000\000\002\000\004\000\000\000\128\000\000\004\000\000\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\000\bH\001\020\000A\004\b`\000\004\000\025\132\000\128\000\000\000\000\000\000\000\000\000\000\000\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\000\bH\001\020\000A\004\b`\000\004\000\025\132\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\128\002\000 \000\000\001\000\000\000\000\000\000\000\000\000@\000\000\b\000\b\000@\000\000\000\000\000\000\000\000\016\000\000\000\000\002\000\016\000\000\000\000\000\000\000\000\004\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\132\128\017@\004\016\000\134\000\000@\001\216\000H\000\000@\136\b\000\004\024\016\000\000\000\016\000\000\000\000\012H\001\020\000A\128\bp\000\004\000\025\128\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\002\000\000\000\000\001\000\000\000\000\000\000\000\000\000\192\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\004\000\005\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! \004P\001\004\016!\128\000\016\000f\016\002\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000@\136\b\000\004\024\016\000\000\000\016\000\000\000\000\012H\001\020\000A\128\bp\000\004\000\025\128\000\128\018\018\000E\000\016@\002\016\000\001\000\006`\000 \004\003\000\000\000\000\000\000\001\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\001\000\000\004\b\128\128\000A\129\000\000\000\001\000\000\000\000\000\196\128\017@\004\024\000\135\000\000@\001\152\000\b\001! \004P\001\004\000!\000\000\016\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\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\002\018\000E\000\016@\002\024\000\001\000\006a\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\136\b\000\004\024\016\000\000\000\016\000\000\000\000\012H\001\020\000A\128\bp\000\004\000\025\128\000\128\002\018\000E\000\016@\002\024\000\001\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\016\000\000\000\000\000\016\000\004\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\002 \016`A\000\000\000@\000\000\000\000\000@\136\b\000\004\024\016@\000\000\016\000\000\000\000\000\016\"\002\000\001\006\004\000\000\000\004\000\000\000\000\003\018\000E\000\016`\002\028\000\001\000\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000\000\b\000\016\000`\000\000\000\128\000\000\000\000\018\000\000\000\000\004\000\024\000\000\000 \000\000\000\000\004\128\000\000\000\001\000\002\000\000\000\b\000\000\000\000\132\128\017@\006\016\000\135\000\000@\001\152\000\024\000\002 \000\000\b\000\b\000`\000\000\000\000\000\000\000\000\128\000\000\002\000\002\000\024\000\000\000\000\000\000\000\000 \000\000\000\000\000\128\006\000\000\000\000\000\000\000\000\b\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\002\000\b\000\000\000\000\000\000\000\000\b\000\000I\000\b\000\000\000\b\000\000\000\000\000\128\000\000\001\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\002\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\001\000\000 \001\000(@\128\000\000\000\000\000\000\000!\000\000\016\000\000P!@\004\000\000\002\001\000\000\b@\000\004\000\000\020\b@\001\000\000\000\128@\000\000\012\000\000\224 \001\133\194\000\000\016\000\000\000\000\000\000\000\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\000\000\000\000\b@\000\004\000\000\016\b@\001\000\000\000\128@\000\000 \000\000\000\000\128\128\004\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\b\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\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\b\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\012\000\000\224 \001\133\194\000\000\016\000\000\000\000\000\132\000\000@\000\001\000\135\000\016\000\000\b\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000@\000\002\000\016\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\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\128\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\004\000\0000\000\003\128\128\006\023\b\000\000@\000\000\000\000\002\016\000\001\000\000\004\002\024\000@\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\b\000@\n\016`\000\000\000\000\000\000\000\000\016\000\002\000\016\002\132\b\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\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\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\128\000\001\000\000\000\001\000\000 \001\000(@\128\000\000\000\000\000\000\000\000\192\000\014\002\000\024\\ \000\001\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\016\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\192\000\014\002\000\024\\ \000\001\000\000\000\000\000\000\000\000\016\000\000\000\000\016\000\000\000\000\000\016\000\000\000\000\004\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\000\000\bH\001T\000A\016\136p\001\004@\029\128@\128\016\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\b\000\000\016\000\000\000\016\000\002\000\016\002\132\b\000\000\000\000\000\000\000\002\018\000U\000\016D\"\028\000A\016\007`\016 \004\132\000\000@\000\001\000\135\000\016\000\000\b\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\003\128\128\006\023\024\000\000@\000\000\000\000\000\012\000\000\224 \001\133\194\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000@\000\000\000\000\192\000\014\002\000\024\\ \000\001\000\000\000\000\000\b@\000\004\000\000\016\bp\003\000\000\000\128@\000\002\016\000\001\000\000\004\002\024\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\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\000\000@\000\001\000\134\000\016\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\000\000\000\000\000\000\000\000\000\002\016\000\001\000\000\004\002\016\000@\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000! \004P\001\004\002!\192\000\017\000f\000\002\000HH\001\020\000A\000\136@\000\004@\025\128\000\128\016 \000\000\000\000\000\128\006\000\000\000\000\000\000\000\000\b\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\002\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\001\000\000 \001\000(@\128\000\000\000\000\000\000\000! \004P\001\004\002!\192\000\017\000f\000\002\000HH\001\020\000A\000\136@\000\004@\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\002\000\000\000\000\000\b\000`\000\000\000\000\000\000\000\000\128\000\000\000\000\002\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\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\003\128\144\006\151\b\000\000@\000\000\000\000\002\022\002U\000\016`\130\028\000\001\016\007`\000`\004\003\000\0000\000\000ap\128\000\004\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\0000\000\003\128\144\006\151\b\000\000@\000\000\000\000\000\012\000\000\224 \001\133\194\000\000\016\000\000\000\001@\000\000\001\000\000\000\000\001\000\000\000\000\000\001\000@\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\0000\000\003\128\144\006\151\b\000\000@\000\000\000\000\000\012\000\000\192\000\001\133\194\000\000\016\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\192\000\014\002@\026\\ \000\001\000\000\000\000\000\bX\tT\000A\130\bp\000\004@\029\128\000\128\018\022\002U\000\016`\130\028\000\001\016\007`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000! \005P\001\004\000!\192\000\016\000v\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\132\128\017@\004\016\000\134\000\000@\001\152\000\b\001! \004P\001\004\000!\000\000\016\000f\000\002\000@\128\000\000\000\000\002\000\024\000\000\000\000\000\000\000\000 \000\000\000\000\000\128\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\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\001\000\000\012\000\000\224$\001\165\194\000\000\016\000\000\000\000\000\132\128\017@\004\016\000\134\000\000@\001\152\000\b\001! \004P\001\004\000!\000\000\016\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\000\000\000\000\000\000\000\000\000\000\000! \004P\001\004\000!\000\000\016\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000! \004P\001\004\000!\128\000\016\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\018\000E\000\016@\002\016\000\001\000\006`\000 \004\002\000\000\018@\002`\001\000\002\000\000\000\000\000 \000\128\000\004\144\000\152\000\000\000\128\000\000\000\000\b\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\002\018\000E\000\016@\"\024\000\001\016\007`\016 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000! \004P\001\004\002!\128\000\017\000f\001\002\000HH\001\020\000A\000\136@\000\004@\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! \004P\001\004\000!\000\000\016\000f\000\002\000@ \000\001$\000&\000\016\000 \000\000\000\000\002\000\b\000\000I\000\t\128\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\016\000\0002\000\003\192\128\006\023\n\000\000@ \b\000\004\000\012\000\004\224 \001\133\194\000\000\016\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\133\160\017@\004\016H\134\128\000D\003\152\004\b\001! \004P\001\132\002!\192\000\017\000f\001\006\016HH\001\020\000A\000\136p\000\004@\025\128@\132\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\017@\004\016\b\134\000\000D\001\152\004\bA\000H\000\000\000\000\016\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\132\128\017@\004\016\000\134\000\000@\001\152\004\b\001! \004P\001\004\000!\000\000\016\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\000\000\000\000\000\000\000\000\000\000\000! \004P\001\004\002!\192\000\017\000v\001\002\000@\018\000\000@\000\004\000\n\000\000\000 \b\000\004\000\004\128\000\000\000\001\000\002\128\000\000\b\002\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! \004P\001\132\002!\192\000\017\000f\001\006\016HH\001\020\000A\000\136p\000\004@\025\128@\132\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\001\000\000\000\000\001\000\000\000\000\000\000\000\000\002 \000\000\b\000\b\000`\000\000\000\000\000\000\000\000\128\000\000\000\000\002\000\024\000\000\000\000\000\000\000\000 \000\000\000\000\000\128\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\0002\144\002\132\128&\004\138\132\000@d\000\001A\000\004\000\000\128\004\001\161\002\000\000\000@\000\000\000\000\132\000\000@\000\001@\133\0000\000\000\b\004\000\000!\000\000\016\000\000P!\000\012\000\000\002\001\000\000\b@\000\004\000\000\016\b@\003\000\000\000\128@\000\000 \000\000\000\000\128\128\004\000\000\000\000\000\000\000\128\000\000\000\000\000 \001\000\000\000\000\000\000\000\000\000\000\000\000\000\b\b\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\001\000\002@\000#a\000\"\193F\248H\242\192\016>\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\004\000\000\000\000\141\132\000\139\005\027\225#\203\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!\000\000\016\000\000@!\128\012\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\128\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\128\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\004\000\0000\000\003\128\128\006\023\b\000\000@\000\000\000\000\002\016\000\001\000\000\004\002\028\000\192\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\016\000$\000\0026\016\002,\020o\132\143,\001\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\b\216@\b\176Q\190\018<\176\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\016\000\000\128\004\000\000\000\000\000\000\000\128\000\000\000\004\000\000 \001\000\000\000\000\000\000\000\000\000\000\000\001\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\128\000\000\000\000\000\000\000\000\000\003)\000(H\002`H\168@\004\006@\000\020\016\000\224\000\014\002\000\024\\ \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\000\000\000\000\000\001\000\000\000\003\000\0008\b\000ap\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\016\000\000\000\0026\016\002,\020o\132\143,\001\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\b\216@\b\176Q\190\018<\176\004\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\132\000\000@\000\001\000\134\0000\000\000\b\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000@\000\002\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\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\128\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\014\002\000\024\\ \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\128\000\000\000\000\000\000\000\000\000\003)\000(H\002`H\168@\004\006@\000\020\016\000\224\000\014\002\000\024\\ \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\000\000\000\000\000\001\000\000\000\003\000\0008\b\000ap\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\016\000\000\000\0026\016\002,\020o\132\143,\001\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\b\216@\b\176Q\190\018<\176\004\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#a\000\"\193F\248I\242\192\016>\000\000\0068\b\216@\b\176Q\190\018<\176\004\015\128\000\001\142\b@\000\004\000\000\016\b`\003\000\000\000\128@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000 \001\000hA\128\000\000\016\000\000\000 \000@\000\b\000@\026\016`\000\000\004\000\000\000\000\000\016\000\002\000\016\006\132\b\000\000\001\000\000\000\000\000\004\000\000\128\004\001\161\002\000\000\000@\000\000\000\000\003!\002 d\002`I\176@\004\006\000\000\004\016\031}\136\129\005\252j\000\004\012\028\030\227\139\002\131@2\016\"\004\000&\004\155\004\000@`\000\000A\000\012\132\b\129\000\t\129\"\193\000\016\024\000\000\016@\003!\000 @\002`H\176@\004\006\000\000\004\016\000\000\000\000\000\000\000\000\128\000\b\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\000\000\128\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\000\000\000\000\000\000\000\000\000\000\000\002\000\000\004\000\000\000\004\000\000\128\004\001\161\002\000\000\000@\000\000\000\000\003\000\0008\b\000ap\128\000\004\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\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\003)\000(H\002`I\168@\004\006\000\000\004\016\000\202@\n\018\000\152\018*\016\001\001\128\000\001\004\0002\144\002\132\128\166\004\138\132\000@`\000\000A\000\004\000\000\128\004\001\161\002\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\001\000@\000\b\000@\026\016 \000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\022\164U\1685E\163?\171\193\016\030`\016x\212\133\169\021j\rQh\207\234\240D\007\152\004\0305\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\001T\000A\016\136p\003\004@\025\128A\128P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000! \005P\001\004B!\192\012\017\000f\001\006\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\132\128\021@\004\017\b\135\0000D\001\152\004\024\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\002\000\000\004\000\000\000\004\000\000\128\004\001\161\002\000\000\000@\000\000\000\000\132\128\021@\004\017\b\135\0000D\001\152\004\024\005\000\200@\136\016\000\152\018,\016\001\001\128\000\001\004\0002\016\002\004\000&\004\139\004\000@`\000\000A\000\000\000\000\000\000\000\000\b\000\000\128\000\000\000\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\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\003\000\0008\t\000ip\128\000\004\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\132\000\000@\000\001\000\135\0000\000\000\b\004\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\000\000\000\000\000\000\000\000\002\016\000\001\000\000\004\002\024\000\192\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\b\000@\026\016 \000\000\004\000\000\000\000\b@\000\004\000\000\016\bp\003\000\000\000\128@\000B\016\000\001\000\000\004\002\024\000\192\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\192\000\014\002\000\024\\`\000\001\000\000\000\000\000\0000\000\003\128\128\006\023\b\000\000@\000\000\000\000\002\016\000\001\000\000\004\002\024\000\192\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\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\000\000@\000\001\000\134\0000\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\000\000\000\000\000\000\000\000\000\002\016\000\001\000\000\004\002\016\000\192\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000! \004P\001\004\002!\192\000\017\000f\000\002\000@0\000\003\128\144\006\151\b\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\001\000\000 \001\000h@\128\000\000\016\000\000\000\000! \004P\001\004\002!\192\000\017\000f\000\002\000@2\144\002\132\128&\004\138\132\000@d\000\001A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\017@\004\016\b\134\000\000D\001\152\000\b\001! \004P\001\004\002!\000\000\017\000f\000\002\000@\128\000\000\000\000\002\000\024\000\000\000\000\000\000\000\000 \000\000\000\000\000\128\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\0002\144\002\132\128&\004\138\132\000@d\000\001A\002\018\000E\000\016@\"\024\000\001\016\006`\000 \004\132\128\017@\004\016\b\132\000\000D\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\017@\004\016\b\132\000\000@\001\152\000\b\000\000\200@\136\024\000\152\018l\016\001\001\128\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\017@\004\016\b\132\000\000D\001\152\000\b\001! \004P\001\004\002!\128\000\017\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\018\000E\000\016@\"\016\000\001\016\006`\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\132\128\017@\004\016\b\134\000\000@\001\152\000\b\000! \004P\001\004\002!\000\000\016\000f\000\002\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\bH\001\020\000A\000\136@\000\006@\025\128\000\128\016\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! \004P\001\004\002!\128\000\016\000f\000\002\000\bH\001\020\000A\000\136@\000\004\000\025\128\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\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\196\128\021@\004\024H\135\000\000D\001\216\000\136\0010\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\004\000\000\000\000\001\000\000\000\000\000\0010D\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\003\128\128\006\023\b\000\000@\000\000\000\000\000\000\000\016\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\016\000\000@!\000\012\000\000\002\001\000\000\b\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\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b2\016\002\004\000&\004\139\004\000@h\000\000E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\148\157\193\244\031\t\135\000?\229\129\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\000\000\000\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\000H\000\001\000\000\016\000 \000\000\000\128\000\000\016\000\018\000\000\000\000\004\000\b\000\000\000 \000\000\004\000\004\128\000\000\000\001\000\002\000\000\000\b\000\000\000\000\132\128\017@\006\016\b\135\000\000D\001\216\000\024@\000H\000\000\000\000\016\000 \000\000\000\128\000\000\000\bH\001\020\000A\000\136p\000\004@\025\128\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\017@\004\016\b\134\000\000D\001\152\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\132\128\017@\006\016\b\135\000\000D\001\216\000\024@\000H\000\000\000\000\016\000 \000\000\000\128\000\000\000\bH\001\020\000A\000\136p\000\004@\025\128\000\132\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! \004PA\004\002!\128\000\017\000v\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\018\000E\000\016@\"\024\000\001\016\006`\016 \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\018\000\000@\000\004\000\b\000\000\000 \000\000\004\000\004\128\000\000\000\001\000\002\000\000\000\b\000\000\001\000\132\128\017@\004\016\b\134\000\000D\001\152\000\b@\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\b\000\000\000\000\001\000\000\000\128\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000 \000\000\000\000\0000\000\003\000\000\006\023\024\000\000H\000\b\000\000\000\012\000\000\192\000\001\133\194\000\000\018\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\016\000\128\000\000\002\000\000\000\000H\000\000\000\000\000\012\000\000\192\000\001\133\194\000\000\018\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\000\000\b\000\000\000\000\000\000\000\000\000\000\000\192\000\014\002\000\024\\ \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\016\000\000\000\000\000\000\000\000\000\000\004\000\000\001\000\000\000\000\000 \000\000\000\004\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\003\000\0008\b\000ap\128\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\016\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\0008\b\000ap\128\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\002\002\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\bH\001\020\000A\000\136p\000\004@\025\128@\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\200\000\015\002\000\024\\(\000\001\000\128 \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\018\000E\000\016@\002\024\000\001\000\006`\016 \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\018\000\000@\000\004\000\b\000\000\000 \000\000\004\000\004\128\000\000\000\001\000\002\000\000\000\b\000\000\001\000\132\128\017@\004\016\000\134\000\000@\001\152\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\b\000\000\000\000\000\000\000\000\000\bH\001\020\016A\000\b`\000\004\000\029\128D\128\016\012\128\000\240 \001\133\194\128\000\016\b\002\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000! \004P\001\004\000!\128\000\016\000f\001\002\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\001 \000\004\000\000@\000\128\000\000\002\000\000\000@\000H\000\000\000\000\016\000 \000\000\000\128\000\000\016\bH\001\020\000A\000\b`\000\004\000\025\128\000\132\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\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\001\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! \004P\001\004\002!\128\000\017\000f\000\002\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\b\216@\b\176Q\190\018<\176\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\141\132\000\139\005\027\225#\203\000@\248\000\000\024\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\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\001\004\000A\000\b@\000\004\000\025\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\018\000\000\000\000\006\000\b\000\000\000 \000\000\000\002\000\002\016\015\192XD\000\000>\"\001\004\001\130\139\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\000\000\000\000@\000\000\000\000\000\000@\000\000\000@\000\000\000\000\024\000\000\000\000\000\000\000\000\000\b\000\b\000?\001a\016\000\000\248\136\004\016\006\n,\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\001\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\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\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\003\000\0008\b\000ap\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\016\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000\"\193F\248H\242\192\016>\000\000\0068\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\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\004\000\000\000\000\000\001\004\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\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\004\000\016\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\002 \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\000\000\000\000\000\128\000\016\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\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\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\003!\000 @\002`H\176@\004\006\128\000\004\016\000\000\000\000\000\000\000\000@\000\000\000\004\000H\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\248D\024\177U\1903<\176\021\015\228\000\003\142\000\016\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\022\132A\000\016A\162\016\001\001\016\014@\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\016\001\004\002!\000\000\017\000d\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\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\000H\001\004\000A\000\136@\000\004\000\024\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\002\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\t\248D\024\177U\1903<\176\021\015\228\000\003\142\002~\017\006,Uo\140\207,\005C\249\000\000\227\128\018\000A\000\016@\"\016\000\001\016\006@\000 \000\004\128\016@\004\016\b\132\000\000D\001\144\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\018\000A\000\016@\"\024\000\001\016\006@\000 \000\004\128\016@\004\016\b\132\000\000D\001\144\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\004\128\016@\004\016\b\134\000\000D\001\144\000\b\000\001 \004\016\001\004\002!\000\000\017\000d\000\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\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") + (134, "'\233\016b\197V\223\025\159X\n\007\242\000\000\227\128\141\164\000\139\133\027|$\253`\b\031\000\000\001\142\007\223b A\127\017P\000 `\224\247\030,\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000+\250\204\222\179u\247\198o\215\146\163\252Q\016y\224}\246\"\004\023\241\021\000\002\006\014\015q\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\000\000\b\218@\b\176Q\183\194O\214\000\129\240\000\000\024\224}\246\"\004\023\241\021\000\002\006\014\015q\226\192\160\208\159\164E\171\021[|f}`(\031\192\000\007\142\000\000\000\000\002\000\000\192\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\002\000\002\000\015\192X\b\128\000\007\196@ @\016(\176\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\020\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\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\004\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\016\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\002@\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\002\000\000\016\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\002 \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\002\000\000\016\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\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\003\128\128\000\194\225\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\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\002\022\002g@\016d\020C\128\0242@\236\017\"\017@\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\003\128\129\000\194\225\000\000\b\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\004\b\128\128\128@0 \128\000\000 \000\000\000\000\000\016\"\002\000\001\000\192\130\000\000\000\128\000\000\000\000\000@\136\b\000\004\003\002\000\000\000\002\000\000\000\000\000\196\128\021@\004\024\t\016\224\000\b\128;\004\012\128\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! \004\016\001\004\000\004(\000\002\000\012@\000 \000\132\128\016@\004\016\000\016\128\000\b\0001\000\000\128\000\012\000\000I\130\b0\000\128\001\000\000\000\000\000\b\0000\000\001$\b \192\002\000\004\000\000\000\000\000 \000\192\000\004\144 \131\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\b\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\192\000\004\144\000\131\000\000\000\016\000\000\000\000\000\128\002\000\000\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\001$\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\002\000\000\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\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\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\128\000\004\144\000\128\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\004\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\bH\001\020\016A\000\001\012\000\000\128\003\176\004H\001\000\200\000\015\002\000\003\011\133\000\000 \016\002\000\001\000\132\128\017@\006\016\t\016\224\000\b\1283\004A\132\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\000\003\128\128\000\194\225@\000\b\004\000\128\000@\000\192\001\014\002\004\003\011\132\000\000 \000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\022\002w\000\016d\020C\128\024\"@\236\001f\017`0\000\003\000\000\000\194\225\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\003\000\0000\000\000\012.\016\000\000\144\000\b\000\000\000\004\000 \000\000\000\016\000\000\000\002@\000\000\004\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\031}\136\129\005\252E@\000\129\131\131\220x\176(4'\233\017j\197V\223\025\159X\n\007\240\000\001\227\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\192\000\004\152 \131\000\b\000\016\000\000\000\000\000\128\003\000\000\018@\130\012\000 \000@\000\000\000\000\002\000\012\000\000I\002\b0\000\000\001\000\000\000\000\000\b\0000\000\001$\000 \192\000\000\004\000\000\000\000\000 \000@\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\132\128\017A\004\016\001\016\192\000\b\128;\000@\128\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\001\020\000A\000\017\012\000\000\136\0030\004\b\001\031}\136\129\005\252E@\000\129\131\131\220x\176(4'\233\017j\197V\223\025\159X\n\007\240\000\001\227\128\141\164\000\139\133\027|$\253`\b\031\000\000\001\142\0026\144\002,\020m\240\147\245\128 |\000\000\0068\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\000\000\000\000\000\000\012\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\144\000 \192\000\014\002\000\003\011\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\012\000\000\224 \0000\184@\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\192\000\014\002\000\003\011\132\000\000 \000\000\000\000@\003\000\0018\b\000\012.\016\000\000\128\000\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\016\000\192\000\014\002\000\003\011\132\000\000 \000\000\000\001@\001\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\016\000\000\b\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\004\000\000\000\b\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\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\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\224 \0000\184@\000\002\000\000\000\000\004\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\003\018\000w\000\016d\004C\128\024\"@\236\001b\017`0\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\192\000\012\000\000\003\011\132\000\000 \000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\012\000\000\224 \0000\184@\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\002\000\000\000\000\000\000\001\000\000\000\001\000\000\000\000\000\012\006\016\000\000\000\000\000\000\000\000\012\000\000\224 @0\184@\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\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\0001`'p\001\006AD8\001\130$\014\192\022!\022\003\000\0000\000\000\012.\016\000\000\128\000\000\000\000\003\022\002w\000\016d\020C\128\024\"@\236\001f\017`0\000\003\000\000\000\194\225\000\000\b\000\000\000\000\0001`'p\001\006AD8\001\130$\014\192\022!\022\001\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\0001 'p\001\006@D8\001\130$\014\192\022!\022\003\000\0000\000\000\012.\016\000\000\128\000\000\000\000\003\022\002w\000\016d\020C\128\024\"@\236\001f\017`0\000\003\000\000\000\194\225\000\000\b\000\000\000\000\0001`'p\001\006AD8\001\130$\014\192\022!\022\197\128\157\192\004\025\005\016\224\006\b\144;\000X\132[\022\002w\000\016d\020C\128\024\"@\236\001b\017lH\001\220\000A\144\017\014\000`\137\003\176\005\136E\000\000\000\004\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\012\000\000\224 \0000\184@\000\002\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\128\000\000\b\000\000\004\000\000\000\001\000\003\000\0008\b\000\012.\016\000\000\128\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\000\000@\000\000\000\000\b\000\000\004\000\000\000\001\002\003\000\0008\b\000\012.\016\000\000\128\000\000\000\000\000\000\000\004\000\000\000\000\000\128\000\000@\000\000\000\017 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000+\250\206\255\179}\247\207\255\215\147\167\252\210\0169\228\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\017 \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\004\000\000\000\001\000\000\000\001\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\192\000\014\002\000\003\011\132\000\000 \000\000\000\000@\000\000\001\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\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\001\000\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\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\003 \000\000\000\000\b\000\000\000\002\000\000\000\000\131\000\0008\b\000\012.\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\b\000\000\200\000\000\000\000\002\000\000\000\000\128\000\128\000\000\192\000\014\002\000\003\011\132\000\000 \000\000\000\000\000\128\000\012\128\000\000\000\000 \000\000\000\b\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\001\000\000\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\000\000\000\000\000\000\012\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\144\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\000H@\b\128P3\002G\022\000\0000\000\000\024\192\132\000\000@ \001\b\016\160\006\000\000\001\000@\000\002\016\000\001\000\000\004 B\128\024\000\000\004\001\000\000\b@\000\004\000\000\016\129\b\000`\000\000\016\004\000\000\000\202@\b\016\000\131\002E\194\000 4\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\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\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\0008\b\000\012.\016\000\000\128\000\000\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\000\000\000\000\001\000\000\000\202@\b\016\000\131\002E\194\000 4\018\000\016@\000\000\000\000\000\000\012\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\016\000\000\192\000\014\002\000\003\011\132\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\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\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\002\012\166\016\143\192X8\164\\'\198Ca@\025,\184\000\000@\000\000\000\000\000\000\128\000\b\000\000\000\000 \192\000\000\b\000\000\000\b\000\000\000\000\000\000\000\000\003\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\000\000\000\000\000\000\000\000\000\000\000\000\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\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\"\002\000\001\000\192\128\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\002\000\000\000\000\000\000\000\000\000\000\000\000\004\b\128\128\000\000 \128\000\000 \000\000\000\000\000\016\"\002\000\000\000\128\128\000\000\000\128\000\000\000\000)\250D\024\177U\183\198o\214\002\129\252@\0008\224\167\233\016b\197V\223\025\159X\n\007\241\000\000\227\130\159\164E\139\021[|f}`(\031\204\000\003\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\b\128\128\128\000 \128\000\000 \000\000\000\b\000\016\"\002\002\000\000\128\130\000\000\000\128\000\000\000\000\000@\136\b\000\000\002\002\b\000\000\002\000\000\000\000\000\001\002 \000\000\b\b\000\000\000\b\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\001@\136\b\000\000\002\002\000\000\000\002\000\000\000\000\000#i\000\"\193F\223\t?X\002\007\192\000\000c\128\141\164\000\139\005\027|$}`\b\031\000\000\001\142\000\016\000\000\002\000\000@\002\000\000\000\000\000\000\000\000\000@\000\000\000\000\001\000\b\000\000\000\000\000\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\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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@\b\128P3\002G\022\000\0000\000\000\024\192#i\000\"\193F\223\t\031X\002\007\192\000\000c\128\141\164\000\139\133\027|$\253`\b\031\000\000\001\142\0026\144\002,\020m\240\147\245\128 |\000\000\0068\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\163i\132#\241V\223)\031Y\243\023\200\016\006k\174\004\132\016\136\005\0030$q`\000\003\000\000\001\140\0026\144\002,\020m\240\145\245\128 |\000\000\00781ogz\255W\251^\127W\255l>\237\183\255\207#i\000\"\193F\223\t\031X\002\007\192\000\000c\128\012\164\000\129\000\b0$\\ \002\003\000\000\001\004\000\000\000\000\000\000\000\192\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\001\000\000\012\000\000\224 \0000\184@\000\002\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\004\000\000\003)\000 @\002\012\t\023\b\000\128\192\b\000A\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\003\000\0008\b\000\012.\016\000\000\128\000\000\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\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 @\002\012\t\023\b\000\128\208@\000Q\000\012\164\004\129\000\b0$\\ \002\003A\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\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\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\128\000\b\128\000\000\000\000\000\000\000\000\b\000\001\000\000\012\000\000\224 \0000\184@\000\002\000\000\000\000\000\b\000\000\136\000\000\000\000\002\000\000\000\000\128\000\000\000 \000\002 \000\000\000\000\000\000\000\000\002\000\000\000\000\003)\000 @\002\012\t\023\b\000\128\208@\000A\000\012\132\000\129\128\b0$\208 \002\003\000\000\001\004\0002\016\002\004\000 \192\147@\128\b\012\000\000\004\016\000\200@\b\016\000\131\002E\002\000 0\000\000\016@\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\202Cj\018\002\131\002MB\000 2\130\006\213P\000\001\000\000@\002\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\147)\r\168H\n\012\t7\b\000\128\218D\027U@\004\000\000\000\000\000 \004P\000\000\000\000\000\000\000\b2\144B\004\000 \192\145p\128\b\r\004\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\012\132\000\129\000\b0$P \002\003\000\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\202@\b\016\000\131\002E\194\000 4\018\000\016@\000\000\000\000\000\000\012\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\016\000\000\192\000\014\002\000\003\011\132\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\200@\b\016\000\131\002E\002\000 0\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\003)\000 `\002\012\t7\b\000\128\208@\000A\000\012\164\000\129\000\b0$\220 \002\003A\000\001\004\0002\144\002\004\000 \192\145p\128\b\r\004\000\004\016\000\200@\b\016\000\131\002E\130\000 0\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\002\004\000 \192\145@\128\b\012\000\000\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\147)\r\160@\n\012\t7\b\000\128\218@\019U@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\216\000\000\128\000\002\000\000\000\000\160\0011D\000\202@\b\016\000\131\002E\194\000 4\018\000\016@\000\000\000\000\000\000\012\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\016\000\000\192\000\014\002\000\003\011\132\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\200@\b\016\000\131\002E\002\000 0\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\t\000\000\216\000\000\128\000\002\000\000\000\000\160\0011D \202@\b\016\000\131\002E\194\000 4\016\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002@\0006\000\000 \000\000\128\000\000\000(\000LQ\t2\144\218\004\000\160\192\147p\128\b\r\164\0015T \234a\b\252\005\131\138E\194|d6\020\001\146\203\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\016\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\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000 @\002\012\t\020\b\000\128\192\000\000A\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\128\000\b\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\016\000\000\000\000\000\128\000\000\000\000\000L\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\131)\000 @\002\012\t\023\b\000\128\208H\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\192\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\001\000\000\012\000\000\224 \0000\184@\000\002\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\012\132\000\129\000\b0$P \002\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\000\000\144\000\r\128\000\b\000\000 \000\000\000\n\000\019\020B\012\000\000\224 \0000\184@\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\001\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\b2\144\002\004\000 \192\145p\128\b\r\004\000\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\r\128\000\b\000\000 \000\000\000\n\000\019\020B\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\002\000\000\b\000\000\000\002\128\004\197\016\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\b\000\000@\000\000\000\000\002\000\000\000\000\000\001 D\000\000\000\000\000\000\000\000\000\000\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\004\129\000\b0$\\ \002\003A\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\000\000\000\000\000\000\000\000\000\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\144\000\000\000\000\002\000\000\000\000\000\001!D \202@H\016\000\131\002E\194\000 4\016\000\020@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\136\000\000\000\000\002\000\000\000\000\000\001 D \000\002 \000\000\000\000\000\000\000\000\000\000\000\000\000\131\000\000\128\000\000\004\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\b\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\012\132\000\129\000\b0$P \002\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\000\000\000\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 \000H\017\b2\144\002\004\000 \192\145p\128\b\r\004\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\b\000\018\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\b\000\018\004@\012\164\000\129\000\b0$\\ \002\003\000 \001\004\000\000\000\000\000\000\000\192\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\001\000\000\012\000\000\224 \0000\184@\000\002\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\012\132\000\129\000\b0$P \002\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\000\000\000\000\000\000\000\000\000\000 \000\000\000\b\000\018\004@\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\0002\144\002\004\000 \192\145p\128\b\012\000\128\004\016\000\000\000\000\000\000\003\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\004\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\000\001\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\0002\016\002\004\000 \192\145@\128\b\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\128\000\000\000 \000H\017\0002\016\002\004\000 \192\145@\128\b\012\000\000\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\003)\000 @\002\012\t\023\b\000\128\192\b\000A\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\003\000\0008\b\000\012.\016\000\000\128\000\000\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\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 @\002\012\t\020\b\000\128\192\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\002\000\004\129\016\003)\000(H\002\012\t5\b\004\128\200\000\019E`\000\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\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\002\000\000@\000\003\000\0008\b\000\012.\016\000\000\128\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\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\002\000\000\000\000#i\000\"\193F\223\t\031X\002\007\192\000\000c\128\012\164\b\129\144H0$\220 \002\003@\000\001\004\000\016\"\002\002\000\000\128\130\000\000\000\128\000\000\000 \000@\136\b\b\000\002\002\b\000\000\002\000\000\000\000\000\001\002 \000\000\b\b \000\000\b\000\000\000\000\000\004\b\128\128\000\000 \000\000\000 \000\000\000\000\000\000\000\000\000\000\000\128\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\003\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\016\000\000@\136\b\000\004\003\002\000\000\000\002\000\000\000\000\000\003\002$ \000\016\012\b\000\000\000\b\000\000\000\000\003\000\000\016\000\000 \000\128\000\000\000\000\016\004\000\000\000\000\000\000\000\000\128\002\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\b\b\000\000\000\000\000\000\000\000\000\000\004\b\128\128\000@0 \000\000\000 \000\000\000\000\000\000\000\000\000\000\128\128\000\000\000\000\000\000\000\000\000\000@\136\b\000\004\003\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\003\018\000U\000\016`\004C\128\000\"\000\236\000\"\000@\b\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\192\000\004\144\000\131\000\000\000\016\000\000\000\000\000\128\001\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\016\000\0000\000\003\192\128\000\194\225\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\003\000\0008\b\000\012.\016\000\000\128\000\000\000\000\003\018\000U\000\016`\004C\128\000\"\000\236\000\"\001@0\000\003\128\128\000\194\225\000\000\b\000\000\000\000\0001 \005P\001\006\000D8\000\002 \014\192\018 \020\196\128\021@\004\024\001\016\224\000\b\128;\000H\128\016\012\000\000\224 \0000\184@\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\128\000\000\000\000\192\000\014\002\000\003\011\132\000\000 \000\000\000\000\000\196\128\021@\004\024\001\016\224\000\b\128;\000H\128\016\000\000\000\000\000\000\000\000\000\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\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\004\000\000\004\b\128\128\000@0 \000\000\000 \000\000\000\000\012H\001T\000A\128\017\014\000\000\136\003\176\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\b\000\000\000\000\000\000\004\000\000\000\004\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\012H\001T\000A\128\145\014\000\000\136\003\176@\200\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\000\000\000\001\002 \000\016\012\b\000\000\000\b\000\000\000\000\003\018\000U\000\016`\004C\128\000\"\000\236\000\"\000@\016\"\002\000\001\000\192\128\000\000\000\128\000\000\000\0001 \005P\001\006\000D8\000\002 \014\192\002 \004\000\000\000\000\000\000\000\000\000\000\000\000\b\004\004\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012H\001T\000A\128\145\014\000\000\136\003\176@\136\001\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\003\018\000U\000\016`$C\128\000\"\000\236\016\"\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001 \005P\001\006\000D8\000\002 \014\192\002 \004\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\000\000\000\000\000\000\0001 \005P\001\006\000D8\000\002 \014\192\002 \004\192\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\000\000\000\016\000\001\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\016\"\002\000\000\000\128\128\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\196\128\021@\004\024\t\016\224\000\012\128;\000\t\128\016\020\b\144\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\001\000\000\000\002\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\016\"\002\000\001\000\192\128\000\000\000\128\000\000\000\0000\000\001\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\128\021@\004\024\t\016\224\000\012\128;\004\t\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\128\002\000\000@\000\000\000\000\000\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224#i\001\"\193F\223\t\031X\002\007\192\000\000c\128\000\000\000\000\000\000\016\000\000\000\000\128\000\000\000\000\b\000\000\128\000\000\000\000\000\000\000\002\000\128\000\000\000\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\001!\000\"\001@\204\t\028X\000\000\192\000\000c\003\000\000\"\000\000\000\000\000\000\000\006\000 P$\000\000\000\004\000\128\000\000@\000\000\000\001\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\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\128\000\000@\000\000\000\001\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\218@\b\184Q\183\194O\214\000\129\240@\000\024\224#i\000\"\193F\223\t?X\002\007\193\000\000c\128\141\164\000\139\005\027|$}`\b\031\004\000\001\142\000\018\016\002\"\020\012\192\147\197\128\000\012\000\000\0060\000H@\b\128P3\002O\022\000\0000\000\000\024\192\001!\000\"\001@\204\t\028X\000\000\192\000\000c\000\004\132\000\136\005\0030$q`\000\003\000\000\001\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\000\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\022\247w\175\245\127\180\231\247\255\246\195\238\219\127\253\240\016\000\000\000\000\000\192\017\192\000\000\000\000\000\000\000(\218a\b\252U\183\202G\214|\197\242\004\001\154\235\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\141\164\016\139\005\027|$}`\b\031\000\000\001\142\n6\144B,\020m\240\145\245\128 |\000\000\0068 @\136\b\b\000\002\002\b\000\000\002\000\000\000\000\000\001\002 \000\000\b\b \000\000\b\000\000\000\000\000\004\b\128\128\000\000 \000\000\000 \000\000\000\000\000\000\000\000\000\000\000\128\002\000\000\000\000\000\000\016\000 @\136\b\000\004\003\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\001\000\000\016\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(\218A\b\176Q\183\194G\214\000\129\240\000\000\024\224\163i\004\"\193F\223\t\031X\002\007\192\000\000c\130\012\164\016\129\000\b0$\\ \002\003\000\000\001\004\000\000\000\000\000\000\000\000\002\000\000\000\000\128\0010D\000\192\000\014\002\000\003\011\132\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\b\000\000\000\000\141\164\000\139\005\027|$}`\b\031\000\000\001\142\000\018\016\002 \020\012\192\145\197\128\000\012\000\000\0060\000\000\000\000\000\000\000\000\000\000\000`\000\005\004\000\000\001!\000\"\001@\204\t\028X\000\000\192\000\000c\003\022\247w\175\245\127\180\231\247\255\246\195\238\219\127\253\240\000\000\000\000\000\000\128\001@\000\000\000\000\000\000\000\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224#i\000\"\225F\223\t?X\002\007\192\000\000c\128\141\164\000\139\005\027|$\253`\b\031\000\000\001\142\0026\144\002,\020m\240\145\245\128 |\000\000\0068\000\202@\b\024\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\\ \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004\016\004\000\000\000\000\002\000\000\b\000\000\000\000\000\004\129\016#i\000\"\193F\223\t\031X\002\007\192\000\000c\128\012\164\000\161\160\b0$\212 \002\003\000\000\001\004\0002\144\002\132\128 \192\147P\128\b\012\000\000\004\016\000\202@\n\018\000\131\002EB\000 0\000\000\016@\002\000\000\000\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\0002\144\002\004\000 \192\145p\128\b\r\004\000\004\016\000\000\001\000\000\000\000\000\b\000\000\000\002\000\004\193\016\003\000\0008\b\000\012.\016\000\000\128\000\000\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\000\128\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 \234a\b\252\005\131\138E\194|d6\020\001\146\203\000\000\000\000\000\000\004\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\200@\b\016\000\131\002E\002\000 0\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\0002\144\002\132\128\160\192\145P\128\b\012\128\000\148\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\004\000\0000\000\003\000\000\000\194\225\000\000\b\000\000\000\000\000\000@\000\000\000\002\001\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\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\003\018Rw\007\208|\132\195\128\031\242\192\238\139~p\2426\144\002,\020m\240\145\245\128 |\000\000\0068\000\000\000\000\000\000\003\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\000\000\000\000\000\000\000\000\000\000\000\004\132\000\136\005\0030$q`\000\003\000\000\001\140\012II\220\031A\242\019\014\000\127\219\003\187m\249\195\192\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\004\000\000\000\000\0000\000P\000\000\000\000\000\000\000\0026\144\002,\020m\240\145\245\128 |\000\000\0068\000\202@\b\024\000\131\002M\194\000 4\016\000\016@\003)\000 @\002\012\t7\b\000\128\208@\000A\000\012\164\000\129\000\b0$\\ \002\003A\000\001\004\000\000\000\000\000\000\000\000\002\000\000\000\000\128\001 D\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\001!\000\"!@\204\t\000\0000\000\000\024\192\000\000\000\000\000\000\000\000\000\000\000\016\000\004\000\000\000\004\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\132\000\136\005\0030$s\224\006\003\000P\001\140\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\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001ogz\255W\251N\127W\255l>\237\183\255\207\000\000\000\000\000\000\012\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\144\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\001!\000\"\001@\204\t\028X\000\000\192\000\000c\003\022\246w\175\245\127\180\231\245\127\246\195\238\219\127\253\240\018\016\002 \020\012\192\145\197\128\000\012\000\000\00601ogz\255W\251N\127W\255l>\237\183\255\223\000\000\000\000\000\000\b\000\020\000\000\000\000\000\000\000\000\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\002\000\0006\000\000\000\000\000\000\000\000\000\000\000@P\n6\144Z,\020m\240\145\245\128 |\000\000\0078\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\000\000\000\000\000\000\000\192\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\t\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\001!\000\"\001@\204\t\028X\000\000\192\000\000c\003\018Rw\007\208|\132\195\128\031\246\192\238\219~p\2402\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\003\018Rw\007\208|\132\195\128\031\242\192\238\139~p\2402\144\002\004\000 \192\145p\128\b\r\004\000\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\197\189\157\235\253_\2379\253_\253\176\251\182\223\255?\018Rw\007\208|\132\195\128\031\246\192\238\219~p\240\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\001\b\218@\b\176Q\183\194G\214\000\129\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\012II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P1%'p}\007\200L8\001\255,\014\232\183\231\015\196\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\003\018Rw\007\208|\132\195\128\031\242\192\238\139~p\252II\220\031A\242\019\014\000\127\203\003\186-\249\195\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\197\189\157\235\253_\2379\253_\253\176\251\182\223\255?\018Rw\007\208|\132\195\128\031\246\192\238\219~p\2426\144\002,\020m\240\145\245\128 |\000\000\0068\000\202@\b\024\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\\ \002\003A\000\001\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\231\253\157\227\245_\2559\255_\254\183\251\162\223\255\189\247\216\136\016_\196T\000\b\0248=\199\139\002\131B6\144\002,\020m\240\145\245\128 |\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\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\003\018Rw\007\208|\132\195\128\031\242\192\238\139~p\252II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P1%'p}\007\200L8\001\255,\014\232\183\231\015\196\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\003\018Rw\007\208|\132\195\128\031\242\192\238\139~p\252II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P1%'p}\007\200L8\001\255,\014\232\183\231\015\196\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\003\018Rw\007\208|\132\195\128\031\242\192\238\139~p\252II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P1%'p}\007\200L8\001\255,\014\232\183\231\015\196\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\003\018Rw\007\208|\132\195\128\031\242\192\238\139~p\252II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P1%'p}\007\200L8\001\255,\014\232\183\231\015\196\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\003\018Rw\007\208|\132\195\128\031\242\192\238\139~p\252II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P1%'p}\007\200L8\001\255,\014\232\183\231\015\196\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\003\018Rw\007\208|\132\195\128\031\242\192\238\139~p\252II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P1%'p}\007\200L8\001\255,\014\232\183\231\015\196\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\003\018Rw\007\208|\132\195\128\031\242\192\238\139~p\252II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P1%'p}\007\200L8\001\255,\014\232\183\231\015\196\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\003\018Rw\007\208|\132\195\128\031\242\192\238\139~p\252II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P1%'p}\007\200L8\001\255,\014\232\183\231\015\196\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\003\018Rw\007\208|\132\195\128\031\242\192\238\139~p\252II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P1%'p}\007\200L8\001\255,\014\232\183\231\015\196\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\000\000\000\000\000\000\000\192\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\t\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\001!\000\"\001@\204\t\028X\000\000\192\000\000c\003\018Rw\007\208|\132\195\128\031\246\192\238\219~p\2402\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\003\018Rw\007\208|\132\195\128\031\242\192\238\139~p\252II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P1%'p}\007\200L8\001\255,\014\232\183\231\015\196\148\157\193\244\031!0\224\007\252\176;\162\223\156<\012\164\000\129\000\b0$\220 \002\003\000\000\001\004\0002\144\002\004\000 \192\145p\128\b\012\000\000\004\016!\234DZ\019\004\131F}B\003 >\192\006\241T#i\000\"\193F\223\t\031X\002\007\192\000\000c\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b8\000\003\128\128\000\194\225\000\000\b\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\004\000\000\000\012\000\000\224 \0000\184@\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\128\000\000\000\b\218@\b\176Q\183\194G\214\000\129\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\016\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\003\000\0008\b\000\012.\016\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000 \000\000\000\0026\144\002,\020m\240\145\245\128 |\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\b\000\000\000\000\141\164\000\139\005\027|$}`\b\031\000\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\000\000\000\000\000\000\000\000\000\000\b\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\128\000\000\000\b\218@\b\176Q\183\194G\214\000\129\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\000\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\002\000\004\193\016\003\000\0008\b\000\012.\016\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000 \000\000\000\0026\144\002,\020m\240\145\245\128 |\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\b\000\018\004@\141\164\000\139\005\027|$}`\b\031\000\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \202@\b\016\000\131\002E\194\000 0\002\000\016@\000\000\000\000\000\000\000\000\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\000@\000\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\0008\b\000\012.\016\000\000\128\000\000\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\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 @\002\012\t\020\b\000\128\192\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\002\000\004\129\016\131)\000 @\002\012\t\023\b\000\128\208@\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\002\000\000\000\000\128\001 D \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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000! \004P\001\004\000D0\000\003 \012\192\000 \004\132\128\017@\004\017\001\016\192\006\012\1283\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\000\000\000\196\148\157\193\244\031!0\224\007\252\176;\162\223\156>\000\0026\007\192\024\000\128\128\007\192@ \000X`:6\144Z,\020m\240\145\245\128 |\000\000\0078\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\012[\217\222\191\213\254\215\159\213\255\219\015\187m\255\243\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P1%'p}\007\200L8\001\255,\014\232\183\231\015\196\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\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\197\189\157\235\253_\237y\253_\253\176\251\182\223\255<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\003\018Rw\007\208|\132\195\128\031\242\192\238\139~p\252II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\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\012[\217\222\191\213\254\215\159\213\255\219\015\187m\255\243\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P1%'p}\007\200L8\001\255,\014\232\183\231\015\196\148\157\193\244\031!0\224\007\252\176;\162\223\156<\004\000\000\000\000\0000\000P\000\000\000\000\000\000\000\0026\144\002,\020m\240\145\245\128 |\000\000\0068 \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\003\022\246w\175\245\127\181\231\245\127\246\195\238\219\127\252\2426\144\002,\020m\240\145\245\128 |\000\000\0068\000\202@\b\024\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\\ \002\003A\000\001\020\012II\220\031A\242\019\014\000\127\203\003\186-\249\195\241%'p}\007\200L8\001\255,\014\232\183\231\015#i\000\"\193F\223\t\031X\002\007\192\000\000c\130\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\0001ogz\255W\251^\127W\255l>\237\183\255\207#i\000\"\193F\223\t\031X\002\007\192\000\000c\128\012\164\000\129\128\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002E\194\000 4\016\000\017@\196\148\157\193\244\031!0\224\007\252\176;\162\223\156?\018Rw\007\208|\132\195\128\031\242\192\238\139~p\2426\144\002,\020m\240\145\245\128 |\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\003\022\246w\175\245\127\181\231\245\127\246\195\238\219\127\252\2426\144\002,\020m\240\145\245\128 |\000\000\0068\000\202@\b\024\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\\ \002\003A\000\001\020\012II\220\031A\242\019\014\000\127\203\003\186-\249\195\241%'p}\007\200L8\001\255,\014\232\183\231\015\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000 \000P\000\000\000\000\000\000\000\0026\144\002,\020m\240\145\245\128 |\000\000\0068 \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\003\022\246w\175\245\127\181\231\245\127\246\195\238\219\127\252\2426\144\002,\020m\240\145\245\128 |\000\000\0068\000\202@\b\024\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\\ \002\003A\000\001\020\012II\220\031A\242\019\014\000\127\203\003\186-\249\195\241%'p}\007\200L8\001\255,\014\232\183\231\015#i\000\"\193F\223\t\031X\002\007\192\000\000c\130\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\0001ogz\255W\251^\127W\255l>\237\183\255\207#i\000\"\193F\223\t\031X\002\007\192\000\000c\128\012\164\000\129\128\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002E\194\000 4\016\000\017@\196\148\157\193\244\031!0\224\007\252\176;\162\223\156?\018Rw\007\208|\132\195\128\031\242\192\238\139~p\2426\144\002,\020m\240\145\245\128 |\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\003\022\246w\175\245\127\181\231\245\127\246\195\238\219\127\252\2426\144\002,\020m\240\145\245\128 |\000\000\0068\000\202@\b\024\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\\ \002\003A\000\001\020\012II\220\031A\242\019\014\000\127\203\003\186-\249\195\241%'p}\007\200L8\001\255,\014\232\183\231\015\197\189\157\235\253_\237y\253_\253\176\251\182\223\255<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\003\018Rw\007\208|\132\195\128\031\242\192\238\139~p\252II\220\031A\242\019\014\000\127\203\003\186-\249\195\241ogz\255W\251N\127W\255l>\237\183\255\223\197\189\157\235\253_\2379\253_\252\176\251\162\223\255<\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\141\164\000\139\005\027|$}`\b\031\000\000\001\142\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\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\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\128\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\0026\144\002,\020m\240\145\245\128 |\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\000P\000\000\000\000\000\000\000\000\000\128\001@\000\000\000\000\000\000\000\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\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\0026\144\002,\020m\240\145\245\128 |\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\141\164\000\139\005\027|$}`\b\031\000\000\001\142\b\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\012\164\000\129\128\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002E\194\000 4\016\000\017@\196\148\157\193\244\031!0\224\007\252\176;\162\223\156?\018Rw\007\208|\132\195\128\031\242\192\238\139~p\240\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#i\000\"\193F\223\t\031X\002\007\192\000\000c\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\144\002,\020m\240\145\245\128 |\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\012II\220\031A\242\019\014\000\127\203\003\186-\249\195\192\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#i\000\"\193F\223\t\031X\002\007\192\000\000c\128\012\164\000\129\128\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002E\194\000 4\016\000\017@\196\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\003\018Rw\007\208|\132\195\128\031\242\192\238\139~p\252II\220\031A\242\019\014\000\127\203\003\186-\249\195\241%'p}\007\200L8\001\255,\014\232\183\231\015#i\000\"\193F\223\t\031X\002\007\192\000\000c\128\012\164\000\129\128\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002E\194\000 4\016\000\017@\196\148\157\193\244\031!0\224\007\252\176;\162\223\156?\018Rw\007\208|\132\195\128\031\242\192\238\139~p\248\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#i\000\"\193F\223\t\031X\002\007\192\000\000c\130\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\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\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\0026\144\002,\020m\240\145\245\128 |\000\000\0068\000\000\000\000\000\000\003\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\000\000\000\000\000\000\000\000\000\000\000\004\132\000\136\005\0030$q`\000\003\000\000\001\140\012II\220\031A\242\019\014\000\127\219\003\187m\249\195\192\202@\b\024\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\\ \002\003A\000\001\020\012II\220\031A\242\019\014\000\127\203\003\186-\249\195\241%'p}\007\200L8\001\255,\014\232\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\128\000\000\000 \000H\017\0026\144\002,\020m\240\145\245\128 |\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\004\000\000\000\000\000 \141\164\000\139\005\027|$}`\b\031\000\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\202@\b\016\000\131\002E\194\000 0\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\b\018\016B \020\012\192\145\197\128\000\012\000\000\0060 \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\0026\144\002,\020m\240\145\245\128 |\000\000\0078\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\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\b\218@H\176Q\183\194G\214\000\129\240\000\000\024\224\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\002\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\001!\000\"\001@\204\t\028X\000\000\192\000\000c\001\000\000\000\000\000\000\000\000\000\000\006\000\000P\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\128\000\b\128\000\000\000\000\000\000\000\000\b\000\t\000\002\000\000\"\000\000\000\000\000\000\000\000\000 \000\000\000\b\000\000\136\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\b\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\000\000\000\000\000\000\000\000\000\000\006\000\000P\000\000\000\016\000\000\000\000\000\192\017\192\000\000\000\000\000\000\0000\000\002 \000\000\000\000\000\000\000`\002\005\002@\000\196\148\157\193\244\031!0\224\007\253\176;\182\223\156<\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\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\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\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P \000\002 \000\000\000\000\000\000\000\b\000\000\004\001\000\128\000\136\129\240\006\000 \001\2400\b\000\022\b\014\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\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\002\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\128\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\001\002 \000\000\b\b \000\000\b\000\000\000\000\000\004\b\128\128\000\000 \000\000\000 \000\000\000\000\000\000\000\000\000\000\000\128\002\000\000@\000\000\000\000\000\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\128\000\000\000\128\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\002\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\b\000\000\000\000\000\b\000\001\000\000\004\b\128\128\000\000 \000\000\000 \000\000\000\000\bH\001\020\000A\000\145\014\000\000\200\0030\000\b\001 @\136\b\000\004\003\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\001\000\000\000\000\000 \000\000\128\000\000\000 \000\000\000\000\016\"\002\000\000\000\128\128\000\000\000\128\000\000\000\000! \004P\001\004\002D8\000\003 \012\192\000 \004\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\141\164\000\139\005\027|$}`\b\031\000\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\002\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\004\128\000\000\128\000 \000\192\000\000\001\000\000\000\000\000\018\000\000\000\000\000\128\003\000\000\000\004\000\000\000\000\000H\000\000\000\000\002\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\016\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\000\000\000\000\b\000\000\000\128\000\016\000\000\000\004\000\0000\000\003\000\000\000\194\225@\000\b\000\000\000\000\000\000\000\000\000\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\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\016\000\000\192\000\014\002\000\003\011\132\000\000 \000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\004\000\000\000\012\000\000\224 \0000\184@\000\002\000\000\000\000\000\000\000\000\136\000\000\000\000\002\000\000\001\000\000\000\000\004\000\000\002 \000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\b\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\128\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\002 \000\000\000\000\b\000\000\004\000\000\000\000\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\000\000\000\000\000\000\000\000\000\b\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\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\003\000\000\000\194\225\000\000\b\000\000\000\000\000!`$P\001\006\001D8\000\003 \012\192\016!\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\022\002E\000\016@\020C\128\0002\000\204\001\002\016@0\000\003\000\000\000\194\225@\000\b\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\001\000\000\000\003\000\0000\000\000\012.\020\000\000\128\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\0000\000\003\000\000\000\194\225\000\000\b\000\000\000\000\000!`\004P\001\004\001D8\000\003 \012\192\016!\004\133\128\145@\004\024\005\016\224\000\012\1283\000@\132\016\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\0000\000\003\000\000\000\194\225\000\000\b\000\000\000\000\000!`\004P\001\004\001D8\000\003 \012\192\016!\004\133\128\145@\004\024\005\016\224\000\012\1283\000@\132\016\000\000\000\000\000\000\000\000\128\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\b\218@\b\176Q\183\194G\214\000\129\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\0002\144\"\004\000 \192\147p\128\b\012\000\000\004\016\000\202@\136\016\000\131\002E\194\000 0\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\164\000\129\000\b0$\\ \002\003\000\000\001\004\bH\001\020\000A\000\017\012\000\000\200\0030\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\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\012\164\000\129\128\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002E\194\000 4\016\000\017@\196\148\157\193\244\031!0\224\007\252\176;\162\223\156?\018Rw\007\208|\132\195\128\031\242\192\238\139~p\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\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 @\136\b\b\000\002\002\b\000\000\002\000\000\000\000\000\001\002 \000\000\b\b \000\000\b\000\000\000\000\000\004\b\128\128\000\000 \000\000\000 \000\000\000\000\000\000\000@\000\000\000\128\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\129\002 \000\016\012\b\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\004\000\000@\000\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\000\000\128\000\004\000\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\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\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P1%'p}\007\200L8\001\255,\014\232\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\202@\b\024\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\\ \002\003A\000\001\020\b\000\000@\000\000\000\000\000\000\000\000\000\000\001\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\000\002\004\b\128\128\000@0 \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\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\002\004\b\128\128\000@0 \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\002\000\000\b\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\004\b\128\128\000@0 \000\000\000 \000\000\000\000\004\000\000@\000\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\000\000\128\000\132\001\240\006\000 \001\240\016\b\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\000\000 @\136\b\000\004\003\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\001\000\000\016\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 @\136\b\000\004\003\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\001\000\000\016\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@\136\b\000\004\003\002\000\000\000\002\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\bH\001\020\000A\000\145\014\000\000\136\0030\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\002 \000\000\b\b \000\000\b\000\000\000\000\000\004\b\128\128\000\000 \000\000\000 \000\000\000\000\bH\001\020\000A\000\145\014\000\000\136\0030\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\128\002\000 \000\000\000 \000\000\000\000\000\000\000\000\004\000\000\000\128\000\016\000\128\000\000\000\000\000\000\000\000\016\000\000\000\000\000@\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\132\128\017@\004\016\001\016\192\000\b\128;\000\000\128\000\004\b\128\128\000@0 \000\000\000 \000\000\000\000\012H\001\020\000A\128\017\014\000\000\136\0030\000\b\000! \004P\001\004\000D0\000\002 \012\192\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\b\000\000\000\000\000\128\000\000\000\000\000\000\000\0000\000 \000\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\b\000\000\000\000\000\b\000\001\000\002\018\000E\000\016@\004C\000\000\"\000\204\000\002\000HH\001\020\000A\000\017\b\000\000\136\0030\000\b\001\000\192\000\000\000\000\000\000\b\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\000 \000\004\000\bH\001\020\000A\000\017\012\000\000\136\0030\000\b\001! \004P\001\004\000D \000\002 \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\000\000\000\000\000\000\128\000\000\000\000\000\128\000\016\000! \004P\001\004\000D0\000\002 \012\192\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\247\216\136\016_\196T\000\b\0248=\199\139\002\131B~\145\022\172Um\241\153\245\128\160\127\000\000\0308\000\202@\b\016\000\131\002E\194\000 4\016\000\016@\016\000\001\000\000\000\000\000 \000\000\000\000\000\018\004@\141\164\000\139\005\027|$}`\b\031\000\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031}\136\129\005\252E@\000\129\131\131\220x\176(4'\233\017j\197V\223\025\159X\n\007\240\000\001\227\128\004\b\128\128\128\000 \128\000\000 \000\000\000\000\000\016\"\002\000\000\000\128\130\000\000\000\128\000\000\000\000\000@\136\b\000\000\002\002\000\000\000\002\000\000\000\000\000\132\128\017@\004\016\t\016\224\000\b\1283\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\192\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\b\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\000\000\000\000\000\000\000\000\000\004\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\001\000\000\000\003\000\0008\b\000\012.\016\000\000\128\000\000\000\000\002\018\000E\000\016D\004C\128\024\"\000\236\001\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\132\129\017@\004\016\001\016\192\000\b\1283\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\001\020\000A\000\017\012\000\000\136\0030\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\017@\004\017\001\016\224\006\b\128;\000@\128\000\004\128\000\000\128\000 \000\192\000\000\001\000\000\000\000\000\018\000\000\000\000\000\128\003\000\000\000\004\000\000\000\000\000H\000\000\000\000\002\000\004\000\000\000\016\000\000\000\000\132\128\017@\006\016\001\016\224\000\b\128;\000\001\128\000\004\128\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! \004P\001\004\000D8\000\002 \012\193\000!\000\001\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\b\000\bH\001\020\000A\000\017\014\000\000\136\0030\000\b\000! \004P\001\004\000D0\000\002 \012\192\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\018\000E\000\016@\004C\128\000\"\000\204\000\002\000\bH\001\020\000A\000\017\012\000\000\136\0030\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\128\017x\012\016\012>\144\000\b\1280\000\000\128\002\018\000E\000\016@\000B\000\000 \000\204\000\002\000\000\016\000\000\002\000\000\000\002\000\000\000\000\000\000\000 \000@\000\000\b\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\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\001\020\000A\000\129\012\000\000\128\0030@\b\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\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\001\020\000A\000\129\012\000\000\128\0030@\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\128\002\000 \000\000\000 \000\000\000\000\000\000\000\000\004\000\000\000\128\000\016\000\128\000\000\000\000\000\000\000\000\016\000\000\000\000\000@\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\132\128\017@\004\016\000\016\192\000\b\000;\000\004\128\000\004\b\128\128\000@0 \000\000\000 \000\000\000\000\012H\001\020\000A\128\001\014\000\000\128\0030\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\002\000\000\000\000\000 \000\000\000\000\000\000\000\000\012\000\b\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\128\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\002\018\000E\000\016@ C\000\000 \000\204\016\002\000\000\000\000\000\000\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\001\000\000\004\b\128\128\000@0 \000\000\000 \000\000\000\000\012H\001\020\000A\128\001\014\000\000\128\0030\000\b\001! \004P\001\004\000\004 \000\002\000\012\192\000 \004\003\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000@\136\b\000\004\003\002\000\000\000\002\000\000\000\000\000\196\128\017@\004\024\000\016\224\000\b\0003\000\000\128\018\018\000E\000\016@\000B\000\000 \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\000\000\b\000\000\000\000\000\b\000\001\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! \004P\001\004\000\0040\000\002\000\012\193\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\b\128\128\000@0 \000\000\000 \000\000\000\000\012H\001\020\000A\128\001\014\000\000\128\0030\000\b\000! \004P\001\004\000\0040\000\002\000\012\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\004\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\001\002 \016\012\b \000\000\b\000\000\000\000\000\004\b\128\128\000@0 \128\000\000 \000\000\000\000\000\016\"\002\000\001\000\192\128\000\000\000\128\000\000\000\0001 \004P\001\006\000\0048\000\002\000\012\192\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\000\000\128\000 \000\192\000\000\001\000\000\000\000\000\018\000\000\000\000\000\128\003\000\000\000\004\000\000\000\000\000H\000\000\000\000\002\000\004\000\000\000\016\000\000\000\000\132\128\017@\006\016\000\016\224\000\b\0003\000\001\128\000\"\000\000\000\128\000\016\000\192\000\000\000\000\000\000\000\000\128\000\000\002\000\000@\003\000\000\000\000\000\000\000\000\002\000\000\000\000\000\001\000\012\000\000\000\000\000\000\000\000\b\000\000\000\000\000\004\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@\001\000\000\000\000\000\000\000\000\000\128\000\004\144\000\128\000\000\000\016\000\000\000\000\000\128\000\000\001\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\000\000\000\001\000\000 \001\000\005\b\016\000\000\000\000\000\000\000\002\016\000\001\000\000\004 B\128\b\000\000\004\001\000\000\b@\000\004\000\000\016\129\b\000 \000\000\016\004\000\000\000\192\000\014\002\000\003\011\132\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\b@\000\004\000\000\016\001\b\000 \000\000\016\004\000\000\002\000\000\000\000\b\001\000\b\000\000\000\000\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\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\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\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\016\000\000\192\000\014\002\000\003\011\132\000\000 \000\000\000\000\000\132\000\000@\000\001\000\016\224\002\000\000\001\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@\002\000\000\000\000\000\000\000\000\002\000\000\001\000\000\001\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\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\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\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000!\000\000\016\000\000@\0040\000\128\000\000@\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\128\004\000\020 \192\000\000\000\000\000\000\000\000\016\000\002\000\016\000P\129\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\001\000\000\000\000\000\000\000 \000\000\000\000\000\000\002\000\004\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\001\000\000\001\000\000\000\001\000\000 \001\000\005\b\016\000\000\000\000\000\000\000\000\012\000\000\224 \0000\184@\000\002\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\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\012\000\000\224 \0000\184@\000\002\000\000\000\000\000\000\000\000\016\000\000\000\000\002\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\001T\000A\016\017\014\000 \136\003\176\004\b\001\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\016\000\000\016\000\000\000\016\000\002\000\016\000P\129\000\000\000\000\000\000\000\000! \005P\001\004@D8\000\130 \014\192\016 \004\132\000\000@\000\001\000\016\224\002\000\000\001\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\003\128\128\000\194\227\000\000\b\000\000\000\000\000\000\192\000\014\002\000\003\011\132\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\b\000\000\000\000\012\000\000\224 \0000\184@\000\002\000\000\000\000\000\b@\000\004\000\000\016\001\014\000`\000\000\016\004\000\000!\000\000\016\000\000@\0040\000\128\000\000@\016\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\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\132\000\000@\000\001\000\016\192\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\016\000\000@\004 \000\128\000\000@\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\018\000E\000\016@\004C\128\000\"\000\204\000\002\000HH\001\020\000A\000\017\b\000\000\136\0030\000\b\001\002\000\000\000\000\000\001\000\012\000\000\000\000\000\000\000\000\b\000\000\000\000\000\004\000\016\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\002\000\000\000\000\001\000\000 \001\000\005\b\016\000\000\000\000\000\000\000\002\018\000E\000\016@\004C\128\000\"\000\204\000\002\000HH\001\020\000A\000\017\b\000\000\136\0030\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 \000\000\000\000\000\016\000\192\000\000\000\000\000\000\000\000\128\000\000\000\000\000@\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\004\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\004\000\0000\000\003\128\144\000\210\225\000\000\b\000\000\000\000\000!`%P\001\006\001\0048\000\002 \014\192\000`\004\003\000\0000\000\000\012.\016\000\000\128\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\0000\000\003\128\144\000\210\225\000\000\b\000\000\000\000\000\000\192\000\014\002\000\003\011\132\000\000 \000\000\000\001@\000\000\001\000\000\000\000\000 \000\000\000\000\000\016\004\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\0000\000\003\128\144\000\210\225\000\000\b\000\000\000\000\000\000\192\000\012\000\000\003\011\132\000\000 \000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\012\000\000\224$\0004\184@\000\002\000\000\000\000\000\bX\tT\000A\128A\014\000\000\136\003\176\000\b\001!`%P\001\006\001\0048\000\002 \014\192\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\018\000U\000\016@\000C\128\000 \000\236\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\132\128\017@\004\016\000\016\192\000\b\0003\000\000\128\018\018\000E\000\016@\000B\000\000 \000\204\000\002\000@\128\000\000\000\000\000@\003\000\000\000\000\000\000\000\000\002\000\000\000\000\000\001\000\004\000\000\000\000\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\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\016\000\000\192\000\014\002@\003K\132\000\000 \000\000\000\000\000\132\128\017@\004\016\000\016\192\000\b\0003\000\000\128\018\018\000E\000\016@\000B\000\000 \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\000\000\000\000\000\000\000\000\000\000\000\000\002\018\000E\000\016@\000B\000\000 \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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\018\000E\000\016@\000C\000\000 \000\204\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000! \004P\001\004\000\004 \000\002\000\012\192\000 \004\002\000\000\018@\002\012\000 \000@\000\000\000\000\002\000\b\000\000I\000\b0\000\000\001\000\000\000\000\000\b\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000! \004P\001\004\000D0\000\002 \014\192\016 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\018\000E\000\016@\004C\000\000\"\000\204\001\002\000HH\001\020\000A\000\017\b\000\000\136\0030\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\002\018\000E\000\016@\000B\000\000 \000\204\000\002\000@ \000\001$\000 \192\002\000\004\000\000\000\000\000 \000\128\000\004\144\000\131\000\000\000\016\000\000\000\000\000\128\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\016\000\0002\000\003\192\128\000\194\225@\000\b\004\000\128\000@\000\192\000N\002\000\003\011\132\000\000 \000\000\000\001@\000\000\000\000\000 \004\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\133\160\017@\004\016\t\016\208\000\b\128s\000@\128\018\018\000E\000\024@\004C\128\000\"\000\204\001\006\016HH\001\020\000A\000\017\014\000\000\136\0030\004\bA\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\017@\004\016\001\016\192\000\b\1283\000@\132\016\004\128\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\132\128\017@\004\016\000\016\192\000\b\0003\000@\128\018\018\000E\000\016@\000B\000\000 \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\000\000\000\000\000\000\000\000\000\000\000\000\002\018\000E\000\016@\004C\128\000\"\000\236\001\002\000@\018\000\000@\000\000\128\001@\000\000\004\000\128\000@\000H\000\000\000\000\002\000\005\000\000\000\016\002\000\001\000\000\000\000\000\000 \004\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\002\018\000E\000\024@\004C\128\000\"\000\204\001\006\016HH\001\020\000A\000\017\014\000\000\136\0030\004\bA\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\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\000\000\000\000\000\001\000\000\000\000\000 \000\000\000\000\000\000\000\000\"\000\000\000\128\000\016\000\192\000\000\000\000\000\000\000\000\128\000\000\000\000\000@\003\000\000\000\000\000\000\000\000\002\000\000\000\000\000\001\000\004\000\000\000\000\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\000\016\000\000\000\000\000\000\000\000\000\0002\144\002\132\128 \192\145P\128\b\012\128\000\020\016\000@\000\b\000@\003B\004\000\000\000\128\000\000\000\000\132\000\000@\000\001\b\016\160\006\000\000\001\000@\000\002\016\000\001\000\000\004 B\000\024\000\000\004\001\000\000\b@\000\004\000\000\016\001\b\000`\000\000\016\004\000\000\002\000\000\000\000\b\001\000\b\000\000\000\000\000\000\000\128\000\000\000\000\000 \004\000 \000\000\000\000\000\000\000\000\000\000\000\000\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\002\000\002@\000#i\000\"\193F\223\t\031X\002\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\128\000\000\000\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\016\000\001\000\000\004\000C\000\024\000\000\004\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\b\001\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\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\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\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000!\000\000\016\000\000@\0048\001\128\000\000@\016\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\0026\144\002,\020m\240\145\245\128 |\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\b\000\000\000\000\141\164\000\139\005\027|$}`\b\031\000\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\001\000\000\001\000\b\000\000\000\000\000\000\000\128\000\000\000\004\000\000\004\000 \000\000\000\000\000\000\000\000\000\000\000\016\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\001\000\000\000\000\000\000\000\000\000\000\003)\000(H\002\012\t\021\b\000\128\200\000\001A\000\014\000\000\224 \0000\184@\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\001\000\000\000\003\000\0008\b\000\012.\016\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000 \000\000\000\0026\144\002,\020m\240\145\245\128 |\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\b\000\000\000\000\141\164\000\139\005\027|$}`\b\031\000\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\132\000\000@\000\001\000\016\192\006\000\000\001\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\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\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\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\001\000\000\012\000\000\224 \0000\184@\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\001\000\000\000\000\000\000\000\000\000\000\003)\000(H\002\012\t\021\b\000\128\200\000\001A\000\014\000\000\224 \0000\184@\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\001\000\000\000\003\000\0008\b\000\012.\016\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000 \000\000\000\0026\144\002,\020m\240\145\245\128 |\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\b\000\000\000\000\141\164\000\139\005\027|$}`\b\031\000\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#i\000\"\193F\223\t?X\002\007\192\000\000c\128\141\164\000\139\005\027|$}`\b\031\000\000\001\142\b@\000\004\000\000\016\001\012\000`\000\000\016\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000 \001\000\r\b0\000\000\002\000\000\000\002\000\004\000\000\128\004\0004 \192\000\000\b\000\000\000\000\000\016\000\002\000\016\000\208\129\000\000\000 \000\000\000\000\000@\000\b\000@\003B\004\000\000\000\128\000\000\000\000\003)\002 d\002\012\t7\b\000\128\192\000\000A\001\247\216\136\016_\196T\000\b\0248=\199\139\002\131@2\144\"\004\000 \192\147p\128\b\012\000\000\004\016\000\202@\136\016\000\131\002E\194\000 0\000\000\016@\003)\000 @\002\012\t\023\b\000\128\192\000\000A\000\000\000\000\000\000\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\b\000\000\000\000\000\000\000\128\001\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\b\000@\003B\004\000\000\000\128\000\000\000\000\003\000\0008\b\000\012.\016\000\000\128\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\003)\000(H\002\012\t5\b\000\128\192\000\000A\000\012\164\000\161 \b0$T \002\003\000\000\001\004\0002\144\002\132\128\160\192\145P\128\b\012\000\000\004\016\000@\000\b\000@\003B\004\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\016\004\000\000\128\004\0004 @\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!jEZ\131TsF\127W\130 <\192\016x\212\133\169\021j\rQ\205\025\253^\b\128\243\000A\227P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\001T\000A\016\017\014\000`\136\0030\004\024\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\002\018\000U\000\016D\004C\128\024\"\000\204\001\006\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\132\128\021@\004\017\001\016\224\006\b\1283\000A\128P\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@\003B\004\000\000\000\128\000\000\000\000\132\128\021@\004\017\001\016\224\006\b\1283\000A\128P\012\164\b\129\000\b0$\\ \002\003\000\000\001\004\0002\144\002\004\000 \192\145p\128\b\012\000\000\004\016\000\000\000\000\000\000\000\000\016\000\001\000\000\000\000\000\004\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\128\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\003\000\0008\t\000\r.\016\000\000\128\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\000\000\000\132\000\000@\000\001\000\016\224\006\000\000\001\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\016\000\000@\0040\001\128\000\000@\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\128\004\0004 @\000\000\b\000\000\000\000\b@\000\004\000\000\016\001\014\000`\000\000\016\004\000\004!\000\000\016\000\000@\0040\001\128\000\000@\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\224 \0000\184\192\000\002\000\000\000\000\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000!\000\000\016\000\000@\0040\001\128\000\000@\016\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\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\132\000\000@\000\001\000\016\192\006\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\016\000\000@\004 \001\128\000\000@\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\018\000E\000\016@\004C\128\000\"\000\204\000\002\000@0\000\003\128\144\000\210\225\000\000\b\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 \001\000\r\b\016\000\000\002\000\000\000\000\002\018\000E\000\016@\004C\128\000\"\000\204\000\002\000@2\144\002\132\128 \192\145P\128\b\012\128\000\020\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\017@\004\016\001\016\192\000\b\1283\000\000\128\018\018\000E\000\016@\004B\000\000\"\000\204\000\002\000@\128\000\000\000\000\000@\003\000\000\000\000\000\000\000\000\002\000\000\000\000\000\001\000\004\000\000\000\000\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\000\016\000\000\000\000\000\000\000\000\000\0002\144\002\132\128 \192\145P\128\b\012\128\000\020\016! \004P\001\004\000D0\000\002 \012\192\000 \004\132\128\017@\004\016\001\016\128\000\b\1283\000\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\000\000\000\132\128\017@\004\016\001\016\128\000\b\0003\000\000\128\000\012\164\b\129\128\b0$\220 \002\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\017@\004\016\001\016\128\000\b\1283\000\000\128\018\018\000E\000\016@\004C\000\000\"\000\204\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000! \004P\001\004\000D \000\002 \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\000\000\000\000\000\000\000\000\000\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\017@\004\016\001\016\192\000\b\0003\000\000\128\002\018\000E\000\016@\004B\000\000 \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\000\000\000\000\000\000\000\000\000\000\000\000\000\002\018\000E\000\016@\004B\000\0002\000\204\000\002\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\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\bH\001\020\000A\000\017\012\000\000\128\0030\000\b\000! \004P\001\004\000D \000\002\000\012\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\b\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\003\018\000U\000\016`$C\128\000\"\000\236\000\"\000L\000\000@\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\132\000\129\000\b0$P \002\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\000\000\144\000\r\128\000\b\000\000 \000\000\000\n\000\019\020@\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\0002\144\002\004\000 \192\145p\128\b\r\004\128\004\016\000\000\000\000\000\000\003\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\004\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\000\001\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\0002\016\002\004\000 \192\145@\128\b\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\002@\0006\000\000 \000\000\128\000\000\000(\000LQ\000\000\000@\000\000\000\000\002\000\000\000\000\000\0010D\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\0008\b\000\012.\016\000\000\128\000\000\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\000\000\000\000\000\000\000!\000\000\016\000\000@\004 \001\128\000\000@\016\000\000\128\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\000H@\b\128P3\002G\022\000\0000\000\000\024\192\196\148\157\193\244\031!0\224\007\253\176;\182\223\156<\012\164\000\129\128\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002E\194\000 4\016\000\017@\196\148\157\193\244\031!0\224\007\252\176;\162\223\156?\018Rw\007\208|\132\195\128\031\242\192\238\139~p\240\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\000\000\000\000\000\000\012\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\144\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\018\016\002 \020\012\192\145\197\128\000\012\000\000\00601%'p}\007\200L8\001\255l\014\237\183\231\015\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P1%'p}\007\200L8\001\255,\014\232\183\231\015\196\148\157\193\244\031!0\224\007\252\176;\162\223\156=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b2\144\002\004\000 \192\145p\128\b\r\004\000\004P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\148\157\193\244\031!0\224\007\252\176;\162\223\156<\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\004\128\000\016\000\000 \000@\000\000\001\000\000\000\016\000\018\000\000\000\000\000\128\001\000\000\000\004\000\000\000@\000H\000\000\000\000\002\000\004\000\000\000\016\000\000\000\000\132\128\017@\006\016\001\016\224\000\b\128;\000\001\132\000\004\128\000\000\000\000 \000@\000\000\001\000\000\000\000\bH\001\020\000A\000\017\014\000\000\136\0030\000\b@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\017@\004\016\001\016\192\000\b\1283\000\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\017@\006\016\001\016\224\000\b\128;\000\001\132\000\004\128\000\000\000\000 \000@\000\000\001\000\000\000\000\bH\001\020\000A\000\017\014\000\000\136\0030\000\b@\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\000\000\000\000\002\018\000E\004\016@\004C\000\000\"\000\236\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000! \004P\001\004\000D0\000\002 \012\192\016 \004\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\018\000\000@\000\000\128\001\000\000\000\004\000\000\000@\000H\000\000\000\000\002\000\004\000\000\000\016\000\000\001\000\132\128\017@\004\016\001\016\192\000\b\1283\000\000\132\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\b\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\0000\000\003\000\000\000\194\227\000\000\t\000\000\128\000\000\000\192\000\012\000\000\003\011\132\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\016\000\128\000\000\000@\000\000\000\t\000\000\000\000\000\000\192\000\012\000\000\003\011\132\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\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\b\000\000\000\000\000\000\000\000\000\000\000\012\000\000\224 \0000\184@\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\002\001\000\000\000\000 \000\000\000\000\000\003\000\0000\000\000\012.\016\000\000\128\000\000\000\000\003\018\002w\000\016d\004C\128\024\"@\236\001b\017`0\000\003\128\128\000\194\225\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\004\000\000\000\000\000\000\000\000\000\000\000\016\000\000\004\000\000\000\000\000\016\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\012\000\000\224 \0000\184@\000\002\000\000\000\000\000\000\000\000@\000\000\000\000\002\000\000\000\000\000\001\000\000\000\000\001\000\000\000\000\000\b\000\000\000\000\000\004\000\000\003\000\0008\b\000\012.\016\000\000\128\000\000\000\000\000\000\000\016\000\000\000\000\000\128\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\bH\001\020\000A\000\017\014\000\000\136\0030\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\012\128\000\240 \0000\184P\000\002\001\000 \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000! \004P\001\004\000\0040\000\002\000\012\192\016 \004\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\018\000\000@\000\000\128\001\000\000\000\004\000\000\000@\000H\000\000\000\000\002\000\004\000\000\000\016\000\000\001\000\132\128\017@\004\016\000\016\192\000\b\0003\000\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\bH\001\020\016A\000\001\012\000\000\128\003\176\004H\001\000\200\000\015\002\000\003\011\133\000\000 \016\002\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\018\000E\000\016@\000C\000\000 \000\204\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\001 \000\004\000\000\b\000\016\000\000\000@\000\000\004\000\004\128\000\000\000\000 \000@\000\000\001\000\000\000\016\bH\001\020\000A\000\001\012\000\000\128\0030\000\b@\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\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\016\000\001\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\002\018\000E\000\016@\004C\000\000\"\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\000\000\000\000\000\000\000\000\000\000\000\000\000\141\164\000\139\005\027|$}`\b\031\000\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\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\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\000H\001\004\000A\000\001\b\000\000\128\003 \000\b\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\018\000\000\000\000\000\192\001\000\000\000\004\000\000\000\000 \000!\000\252\005\128\136\000\000|D\002\004\001\130\139\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\000\000\000\000\000\000\b\000\000\000\000\000\000\004\000\000\000\004\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\b\000\b\000?\001`\"\000\000\031\017\000\129\000`\162\192\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\b\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\003\000\0008\b\000\012.\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\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#i\000\"\193F\223\t\031X\002\007\192\000\000c\128\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\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\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\b\b\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\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\001\002 \000\016\012\b\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\004\000\000\000\000\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\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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 @\002\012\t\023\b\000\128\208@\000A\000\000\000\000\000\000\000\000\000\128\000\000\000\b\000H\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\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\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\004\000\000\000\159\164A\139\021[|f}`*\031\200\000\003\142\000\016\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\001hD\016\001\004\003D \002\002 \028\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\018\000A\000\016@\004B\000\000\"\000\200\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\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\000H\001\004\000A\000\017\b\000\000\128\003\000\000\b\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\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\159\164A\139\021[|f}`*\031\200\000\003\142\002~\145\006,Um\241\153\245\128\168\127 \000\0148\001 \004\016\001\004\000D \000\002 \012\128\000 \000\004\128\016@\004\016\001\016\128\000\b\1282\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\001 \004\016\001\004\000D0\000\002 \012\128\000 \000\004\128\016@\004\016\001\016\128\000\b\1282\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\004\128\016@\004\016\001\016\192\000\b\1282\000\000\128\000\018\000A\000\016@\004B\000\000\"\000\200\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\002\000\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, "F\242Q\014K\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022PK\130\000\000\000\000\021TK\130F\242\001\012\000\b\000Ta\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\026\002\234\000n\000\000\003X\004\\\000\000\000\232\004h\bB\000\000\004\240\005N\tF\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\184\000\000\000\000\000\000\006>\141.\000\000\000\000\000\000\004b\000\000\000\000[\170\007\216\bF\000\000\000\000Qv\004b\000\000Qb\021TH4b.\t\174\000\000\021TM\240O\142\021TE\204\000\000\004\170\000\000E\204\006\178\000\000\023\026\000\000\005>\000\000\000\000\005\180\000\000\004b\000\000\000\000\000\000\004\b\000\000\023\026\000\000\005V|\230V~jt\000\000[\026\138\144\000\000Q\254]|\000\000b\252\027\134\141.K\130F\242\000\000\000\000O\142\021TT\028E\204\b\196|\230\000\000v\186K\130F\242Q\014\021T\002\b\000\000\017DM\000\021TWP^`\000\000\002\140\000\000\000\000\005\152\000\000\000\000ML\0056\027\208\002f\000\007\000\000\000\000\0046\000\000H4\n*\n\000\021T\025R\021TF\242F\242\000\000\000\000\000\000P\238P\238\021T\025R\n\236\000\000UF\021T\002\b\002\244\003^\001\170\000\000\007\216\011n\000\000\000\000\000\000\000\000\000\000\021T\000\000\000\000\000\000Q\014\021T\002\bD\254u\194F\242\003\012\002\b^`\127&\127\198\000\000\001\170\000\000\001:\000\000\000\000\030&GR\138\180\000\000GR\138\180\000\000GR\138\144\011\208\005\186\011\146\000\000\002\174\000\000\012\024\000\000\000\000\012\024\000\000\000\000\000\000GR\004b\000\000\000\000]jGR\\\134]|\000\000\000\000W\014\011\208\000\000\000\000]|\011\224GR\000\000X\016]|Y\018\000\000\000\000\000\000\006\250\000\000GR\000\000\003\020\141\182\000\000GR\003\020GR\000\000 (\012\012\004b\000\000\000\000 \248\000\000\006 \000\000_\166\007\000\000\000\011\196GR\011t\000\000\012\014\000\000\004\218\000\000\001*\001*\000\000\000\000\000\000\022&\000\248^`Q\014\021T^`\000\000\011\208\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000R\244\026\136\000\000\000\000\000\000\000\004\025\234z\208\000\000\000\000{\190\021T^`\000\000\000\000s\006^`\139\186\127\198\000\000\139\240\000\000^`\000\000\000\000_\000ML\0032\0032\000\000\r\018^`\000\000\000\000\000\000\007>\rD\000\000\025\220\000\000\000\000\1284\000\000\140:S&\000\000\007\170\000\000\000\000\128\182\000\000\140\148\000T\000\000\000\000\000\000\000\000\r~\000\000\027\236\000\000\000\000\1284\000\000\006x\000\000\000\000\024\216{>\000\000\000\000\026\224\002,\001\170\t\024\000\000\000\000\000\000\000\000\004z\000\000\000\000`j\b2\r\148\002\180GR\002f\014\186\000\000\000\000\t\186\r\148\000J\002\bQ\014QXP\238\021T\025R\000\b\001N\000\007\000\000\014\170H4IP\015\144H4\000\b\001N\003\192H4\000\000n\158\b4E\204\001\170\003\162\141\250\000\000GRj\206GRd\226kTGR\007bGRk\218\000\000\r\026\012r\006\174H4o$\000\000\bd\rvbT\000\000\000\000\000\000\000\000H4o\170H4p0\b\200\005Ve\176\011n\005Vfz\000\000p\182\b4\000\000\000\000\000\000q<\000\178\000\000\000\000\001\210\000\000\004\206\025R\000\000c\030_B\000\000\029t\000\000\000\000H4\003\190\000\000\000\000\000\000\000\000a\024\000\000\006 \002\bY\234\rV\022f\002\b\024NU@\029\018\005\188\000\000\000\000\031\026\014\138\000\000\000\000\000\000Q\014\021TJ\138Q\014\021T\017D\017D\000\000\000\000\000\000\000\000\021\158E\248\000\000S\228T\162QT\021T\025R\015\228X\132\000\000\b\210\000\000U`V\030\129$\028\232GR\b\178\002\bQ\014\021T\002\b{\190\021T\127&^`\026\132\002\bQ\014\021T}Z\bt\000\000^`\024\216GR\t\178\000J\016(\000\000\000\000\000\000ND\0032\016jv\020\002\b{\190\021T^`\025\220\002\bQ\014\021T\017D\023J\017D\001\004\018R\002\b\002\b\017D\r\202\016b\001\212\138\144\000\000\026J\142\018\000\000\027fGR\029V\016\206\000\000\000\000\016\178\000\000\017D\004\016\017\004\000\000 n\002\b\b\204\000\000\000\000\027Z\002\b\018H\024N\000\000\007\030\000\000\0174\004\018\017DD\248\000\000\000\000\000\000\000\000\005\022\017DFl\000\000\017D\n\002\005\188\000\000\r\014\000\000\023J\016\254\000\000\000\000\005\128\002\b\000\000\028^\002\b\029b\002\b\030f\000\000\019L\025R\002\b\000\000\002\bK\130\002\b\000\000\000\000\002\b\031j\002\b n\002\b!r\002\b\"v\002\b#z\002\b$~\002\b%\130\002\b&\134\002\b'\138\002\b(\142\002\b)\146\002\b*\150\002\b+\154\002\b,\158\002\b-\162\002\b.\166\002\b/\170\002\b0\174\002\b1\178\002\b2\182\021T^`LXO<\0032\017\160q\176^`\000\000\002\b\000\000\017F\002\b\000\000\000\000\000\000q\176\000\000\000\000\141.\0032\017zGR\t\182\002\b\000\000\001\134\004b\000\000GR\t\204\002\b\000\000\017\162\002\b\000\000\000\000\030\240GR\n\164\002\b\000\000!\252\002\b\000\000\129\166\000\000#\000\130\020\000\000$\004\130\150\000\000%\b\002\204\000\000\000\000\000\000\000\000&\012^`'\016\000\000v\178v\178\000\000\000\000\000\0003\186\002\b\b,\000\000\000\000\002\b\t^\000\000\000\000\007\216\019V\002\b\012\144\000\000\000\000c\202I\204\000\000\002\b\n\136\000\000\000\000\002\b\nb\000\000\000\000\000\000\017D\005\020\020Z\002\b\r@\000\000\006\024\002\b4\190\002\b\r\148\000\000\007\028\002\b5\194\002\b\012$\000\000\b \002\b6\198!\196\002\b\014D\t$\002\b7\202\002\b\014Z\n(\002\b8\206\002\b\012j\011,\002\b9\210\nf\022\206\002\b\014\132\0120\002\b:\214\002\b\014\194\r4\002\b;\218\002\b\rP\0148\002\b<\222\015<\002\b=\226\016@\020P\000\000\000\000\000\000\014\222\000\000\002\b\0150\000\000\002\b\rX\000\000\011\128\000\000\000\000\002\b\017\156\002\b\r\158\000\000\000\000\000\000P4\0032\018Tv\020]|\029\218\002\b\000\000v\020\000\000\000\000\000\000v\020\000\000\018D\002\b\000\000\002\b\000\000\000\000\000\000>\230^`\000\000\000\000\018\148\002\b?\234\002\b@\238\000\000(\020\002\b\000\000\r\176\002\b\000\000^`\000\000\000\000wJ\015H\000\000\000\000J\138\000\000\011\182\000\000\000\000Z\186\000\000\015\156\000\000\000\000\007\194\r8\000\000\000\000\024N\021\236\001\170\000\000\029\236\000\000\006\012\011 \t\202\000\000\000\000\014\\\000\000\000\000\000\003\022\154Y\182\026V\000\000\001z\000\000\000\000\015X\000\000\000\000c\148\n,\007\194\000\000\000\000\014<\000\000\000\000\0166\000\000\000\000\000\000\021T\025R\007$\002\b\000\000\b\b\002f\000\007\001N\025R}\170]\236\000\000\t\130\025R~2\018\014\002\b\000\000\001N\000\000\024\230\021T\025\198\000\000\015x\018\146\000\000\018\206\0022e\194\nJ\000\000\018\154\018\026\141.\001\170GR\023\004\014\150\011\138\020\246\000\000#\002\018\220\000\000\014\222\000\000\000\000\018\254]|g\000\000\000l`x\244\015@e\194\018\232]|r\000g\134\018\234]|rRh\012\000\b\018\172\002\b\000\000\000\000\021T\133^\000\000^`v\178\000\000\000\000\019(\000\000\000\000\000\000A\242\000\000\014\158\000\000\000\000\000\000QT\021T\025R\022\180\000\000^\150\000\000\n\218\000\000\b\240\000\000\000\000\019*\000\000\019V\127&B\246l\210\000\000\000\000_\248\000\000\011\222\000\000i\190\000\000\004\194\000\000H4\012\226\000\000v\178\000\000\021T\025Rv\178\000\000\028V\002\244\003^\004b\134\234H4\131.v\178\000\000\002f\n\210\000\007\001Nv\178\136|\002f\000\007\001Nv\178\136|\000\000\000\000\001Nv\178\000\000K\130F\242^`\025\220\002\b\000\000K\130F\242P\238\021T\025Rv\178\000\000\001\012\000\b\000T\018x\141.\015zGRw\200\018\166\019P\135p\000\000v\178\000\000xJ\024\230\021T\025\198~\150 \226\015\136\131j\r\222\018\140\021Tv\178\000\000\021Tv\178\000\000m\150m\150\006^\002\244\002f\005V\136\214\000\000\002f\005V\136\214\000\000\030^\002\244\003^\004b\137\002H4\133\200\000\000\002f\011\214\005\130\015@\000\000\136\214\000\000\000\007\018\146H4\133\200\137\\\002f\000\007\018\156H4\133\200\137\\\000\000\000\000\007p\015\242\000\000v\178\000\000H4\135\202v\178\000\000\011\022\015\242\000\000Qb\021TH4\133\200\000\000\024\230\021T\025\198x\204\030\222\030\222\001\192\0170\000\000\014\224\023\026\015:\000\000\019\"\018\214\030\170\021T\\xGR\015\202\000\000\\\224\003\200\001\000\n\234\000\000\016,\000\000\0198\018\186GRYN\000\000\021\026\n\148\015\168\000\000\016\172\000\000\019H\018\204\141.S8\000\000\021\020\030\170\019l\bf\002f\001\170\015\252\030\170GR\016x\011\208\000\000GR\012h\rl\000\000\000\000r\248\000\000\001\170\016\168\030\170s\128YN\000\000\021TGR\015\202GRY\026S8\000\000\015\238\000\000\000\000S8\000\000\000\000\\\224\000\000v\178\137\136\001\192\0170\014\224\019\\\019\016\030\170v\178\137\136\000\000\000\000\001\192\0170\014\224\019\142\019\018\141rR\b]|\019\166\141r\138\144\025\176\019\168\141r]|\019\170\141rt$t\170\000\000\133\220\000\000\000\000v\178\139\n\001\192\0170\014\224\019\160\019*\141rv\178\139\n\000\000\000\000\000\000m\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000v\178\000\000\137\226\021TE\204\019\184|\230\000\000v\186\137\226\000\000\000\000\139>\021TE\204\019\190\019FV~\138\144\nJ\020\020\000\000\000\000u2x\204\021T\000\000j\250\025\198\000\000\000\000v\186\139>\000\000\000\000\000\000~\206\027\242\029\250\nJ\020\022\000\000\000\000\000\000x\204\021T\000\000\nJ\020$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tj\030\222\001\192\0170\014\224\019\242y\140\028\162\021TWPYT\003\200\003^\nJ\019\244\001\212\002\b\000\000\019\154\002\b\000\000S8\000\000\007\024\016\146\000\000\016\228\000\000\019\254\019\134GR\\\142\020\014\011\252\002\b\000\000\019\178\002\b\000\000\021B\000/\016\184\000\000\020\024y\222\142V\0032\019\180GR\016\232\002\b\000\000\019\200\002\b\000\000\000\000S8\000\000\011(\017\176\000\000\016\252\000\000\0208\019\186\141.\000\000\020@z~\142\154\0032\019\222GR\017:\002\b\000\000\019\244\002\b\000\000\000\000\021T\002\bS8\000\000\021v\021\020\028\162\028\162|@K\130\021T\133^^`\006\148\000\000\tj\002f\001\170\016\172\028\162GR\017B\001\170\000\000\021T^`y\140\028\162\r\254\028\162\000\000G\226H\212\000\000h\146\000\000\000\000h\236\000\000\000\000i\146\001\170\017\152\028\162i\236\133^^`\006\148\000\000\015\198\000\000\000\000\141r\017\240\000\000\000\000M\248\020V\000\000S8\000\000\028\162M\248S8\000\000\021TGRS8\000\000\017\186\000\000\000\000S8\000\000\000\000YT\000\000\134d\141r\020\002\028\162\134\190y\140\000\000v\178\138\014\001\192\0170\014\224\020by\140v\178\138\014\000\000\000\000\000\000\139\144Q\014\000\000\000\000\000\000\000\000\000\000\000\000\135\246v\178\000\000\137\226\000\000\000\000\000\000\000\000v\178\139\144\000\000\020\168\000\000\000\000\135\246\020\200\000\000v\178\139\144\000\000\000\000\017\246\000\000\000\000n\024\006\202\000\000\000\000\026\224\000\000GR\018*\000\000YT\018P\000\000\000\000\020\246\127&\000\000C\250\020\206\000\000\000\000\020\196 \002\025\198\025\198x\204 \226\021T\000\000v\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000|` \226\021T\000\000\0180|\230\000\000v\186\000\000\020\198 \002\025\198v\178\000\000\020\216\000\000\t\204\018D\021\020fX\000\000\000\000\022\028t\002\000\000\000\000\020X\000\000\020\188GR\000\000\015\152\016\230\011\208\000\000\000\000GR\006\016\012(\000\000GR\r,\nJ\020\238\000\000\000\000\132\016\000\000\000\000V~\000\000v\186\000\000\020\238 \002\026\202v\194\000\000\000\000\000\000\000\000\018\138\132bV~\000\000v\186\000\000\021\024 \002\026\202v\194\000\000\018\250\000\000\000\000\r\230\000\000v\178\000\000\021<\000\000\002\b\020\150\002\b\015\166\000\000\000\000\020\212\000\000\000\000O\240\020\218\000\000\000\000 \018a\140\021\184\000\000\000\000\000\000\011\030\017\150d\128\021\194\000\000\000\000\000\000\000\000\000\000\000\000\021,\000\000 \226\000\000\0216\000\000GR\000\000\004\194\000\000\002\b\021R\000\000\000\000\005V\000\000\012\"\000\000\001\170\000\000\017\136\000\000\025R\000\000\015\228\000\000H4\000\000\000\178\000\000\012r\000\000\021b\000\000^`\024\216\000\000\000\000\005\188\021j\000\000\000\000\r\014I\204\004b\132\236\000\000\000\000\000\000\000\000\000\000V\218\000\000\000\000\022\012\000\000T\n\000\000\018\168\022\014\000\000\022\018\000\000J\138J\138[v[v\000\000\000\000X\138[v\000\000\000\000\000\000X\138[v\021t\000\000\021|\000\000"), (16, "\001\189\001\189\001\189\003F\003J\001\189\004\153\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\007N\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\004\153\001\189\001*\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\000\238\001\189\006\134\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\004\153\004\153\001\189\001\189\001\189\007u\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\000\238\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\004\153\001\189\001\189\b:\007~\001\002\001\190\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\015\154\b\254\001\189\005\202\001\189\001\189\b>\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\001\189\007m\001\189\001\189\001\189\001\189\001\189\n\249\n\249\0206\007\250\007*\n\249\001f\n\249\n\249\003y\n\249\n\249\n\249\n\249\007m\n\249\n\249\n\249\007m\n\249\n\249\n\249\000\238\n\249\n\249\n\249\n\249\004\030\n\249\001j\n\249\n\249\n\249\n\249\n\249\n\249\n\249\n\249\000\n\n\249\020>\n\249\005b\n\249\n\249\n\249\n\249\n\249\006I\n\249\n\249\004\"\n\249\002\233\002\233\n\249\n\249\n\249\028\239\015\174\n\249\n\249\n\249\n\249\n\249\n\249\n\249\002\233\n\249\n\249\n\249\n\249\n\249\n\249\n\249\n\249\n\249\n\249\n\249\n\249\n\249\n\249\n\249\005\005\n\249\n\249\007J\n\249\n\249\006\218\002\198\005v\012&\n\249\n\249\n\249\n\249\n\249\004\153\n\249\n\249\n\249\n\249\t\234\007~\nJ\n\249\005\005\n\249\n\249\012&\n\249\n\249\n\249\n\249\n\249\n\249\n\249\n\249\n\249\n\249\n\249\n\249\n\249\bF\n\249\n\249\n\249\n\249\n\249\t\181\t\181\000\006\003\178\016\022\t\181\002\194\002\198\t\181\002\242\002\146\t\181\004\130\t\181\004\153\002\254\t\181\007\250\005\001\t\181\t\181\t\181\016\030\t\181\t\181\t\181\001\210\000\238\004\153\015\178\003\002\t\181\003z\003~\011\n\t\181\000\238\t\181\006\214\003\006\012.\003\166\005\001\t\181\t\181\003\218\003\222\t\181\003\226\003\238\003\250\004\002\007.\004\153\004\153\t\181\t\181\002\186\016\134\016j\003\246\t\181\t\181\t\181\b\150\b\154\b\166\b\222\003\221\004\153\b\174\0232\b\206\005\134\t\181\t\181\t\181\t\181\t\181\t\181\t\181\t\181\t\181\tN\003=\t\181\n\006\t\181\t\181\n\018\tZ\tr\t\190\005\146\005\150\t\181\t\181\t\181\012\150\t\181\t\181\t\181\t\181\003=\004^\014\190\t\181\003\217\t\181\t\181\000\238\t\181\t\181\t\181\t\181\t\181\t\181\005\154\b\210\t\181\t\181\t\181\b\234\004\130\t\210\002\233\t\181\t\181\t\181\t\181\r\145\r\145\004R\001f\003y\r\145\016\202\r\145\r\145\003\030\r\145\r\145\r\145\r\145\003\221\r\145\r\145\001\002\001\190\r\145\r\145\r\145\000\n\r\145\r\145\r\145\r\145\004\153\r\145\003\"\r\145\r\145\r\145\r\145\r\145\r\145\r\145\r\145\002\233\r\145\006a\r\145\004\242\r\145\r\145\r\145\r\145\r\145\004\153\r\145\r\145\002\233\r\145\003\217\003\254\r\145\r\145\r\145\004b\001r\r\145\r\145\r\145\r\145\r\145\r\145\r\145\000\238\r\145\006\"\r\145\007\n\r\145\r\145\r\145\r\145\r\145\r\145\r\145\r\145\r\145\r\145\r\145\004\153\r\145\r\145\001\182\r\145\r\145\bv\007~\004\153\004\153\r\145\r\145\r\145\r\145\r\145\004\153\r\145\r\145\r\145\r\145\r\145\000\238\r\145\r\145\001\186\r\145\r\145\bz\r\145\r\145\r\145\r\145\r\145\r\145\r\145\r\145\r\145\r\145\r\145\r\145\r\145\006a\004\153\r\145\r\145\r\145\r\145\003\249\003\249\005\002\007\250\007r\003\249\004\153\003\249\003\249\007J\003\249\003\249\003\249\003\249\004\153\003\249\003\249\002v\003\185\003\249\003\249\003\249\000\238\003\249\003\249\003\249\003\249\000\238\003\249\003\185\003\249\003\249\003\249\003\249\003\249\003\249\003\249\003\249\006\197\003\249\003R\003\249\007\142\003\249\003\249\003\249\003\249\003\249\001\218\003\249\003\249\003\185\003\249\006\242\001b\003\249\003\249\003\249\007\150\006\197\003\249\003\249\003\249\003\249\003\249\003\249\003\249\001\130\003\249\001z\003\249\001\138\003\249\003\249\003\249\003\249\003\249\003\249\003\249\003\249\003\249\003\249\003\249\rU\t\226\nB\023\"\003\249\003\249\003\185\007~\001\222\001v\003\249\003\249\003\249\003\249\003\249\n\130\003\249\003\249\003\249\003\249\t\234\rU\nJ\003\249\002z\003\249\003\249\017\186\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\005V\003\249\003\249\003\249\003\249\003\249\003\233\003\233\001f\007\250\003V\003\233\003y\003\233\003\233\bN\003\233\003\233\003\233\003\233\007J\003\233\003\233\006\249\003\181\003\233\003\233\003\233\000\238\003\233\003\233\003\233\003\233\r]\003\233\003\181\003\233\003\233\003\233\003\233\003\233\003\233\003\233\003\233\006\249\003\233\001\206\003\233\006\246\003\233\003\233\003\233\003\233\003\233\r]\003\233\003\233\003\181\003\233\001\146\002R\003\233\003\233\003\233\028\159\005Z\003\233\003\233\003\233\003\233\003\233\003\233\003\233\002V\003\233\0026\003\233\017\190\003\233\003\233\003\233\003\233\003\233\003\233\003\233\003\233\003\233\003\233\003\233\002\134\t\226\nB\002^\003\233\003\233\003\181\003\030\002\198\004\230\003\233\003\233\003\233\003\233\003\233\n\158\003\233\003\233\003\233\003\233\t\234\005\241\nJ\003\233\002b\003\233\003\233\003\"\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\007]\003\233\003\233\003\233\003\233\003\233\n]\n]\004R\001\002\001\190\n]\n\214\n]\n]\003*\n]\n]\n]\n]\007]\n]\n]\ta\007]\n]\n]\n]\005\241\n]\n]\n]\n]\t}\n]\003.\n]\n]\n]\n]\n]\n]\n]\n]\019N\n]\005\241\n]\002\233\n]\n]\n]\n]\n]\006\182\n]\n]\011\186\n]\bZ\rR\n]\n]\n]\004n\000\238\n]\n]\n]\n]\n]\n]\n]\000\238\n]\000\n\n]\006\186\n]\n]\n]\n]\n]\n]\n]\n]\n]\n]\n]\rY\n]\n]\b\146\n]\n]\026:\007~\b\162\t}\n]\n]\n]\n]\n]\002\233\n]\n]\n]\n]\n]\rY\n]\n]\ta\n]\n]\026>\n]\n]\n]\n]\n]\n]\n]\n]\n]\n]\n]\n]\n]\002\234\t}\n]\n]\n]\n]\nm\nm\023R\007\250\001\198\nm\004\226\nm\nm\0056\nm\nm\nm\nm\004\177\nm\nm\007\005\nv\nm\nm\nm\000\238\nm\nm\nm\nm\018\254\nm\nz\nm\nm\nm\nm\nm\nm\nm\nm\007\005\nm\023Z\nm\007\202\nm\nm\nm\nm\nm\006A\nm\nm\n\154\nm\bZ\rj\nm\nm\nm\007\242\004\177\nm\nm\nm\nm\nm\nm\nm\000\238\nm\002B\nm\006n\nm\nm\nm\nm\nm\nm\nm\nm\nm\nm\nm\t\145\nm\nm\015\254\nm\nm\n\166\003*\007J\006r\nm\nm\nm\nm\nm\000\238\nm\nm\nm\nm\nm\004\230\nm\nm\ty\nm\nm\003.\nm\nm\nm\nm\nm\nm\nm\nm\nm\nm\nm\nm\nm\002\233\002\233\nm\nm\nm\nm\ne\ne\007\178\b\158\000\238\ne\012\214\ne\ne\019\150\ne\ne\ne\ne\001\234\ne\ne\006\205\007\130\ne\ne\ne\000\n\ne\ne\ne\ne\019\166\ne\012\218\ne\ne\ne\ne\ne\ne\ne\ne\006\205\ne\t\145\ne\004\153\ne\ne\ne\ne\ne\t\130\ne\ne\002\233\ne\007\190\r\130\ne\ne\ne\007\002\007\026\ne\ne\ne\ne\ne\ne\ne\012\242\ne\003\186\ne\001\134\ne\ne\ne\ne\ne\ne\ne\ne\ne\ne\ne\004R\ne\ne\nV\ne\ne\001\206\007~\t\134\t\162\ne\ne\ne\ne\ne\000\238\ne\ne\ne\ne\ne\017v\ne\ne\nZ\ne\ne\t.\ne\ne\ne\ne\ne\ne\ne\ne\ne\ne\ne\ne\ne\007E\017z\ne\ne\ne\ne\nQ\nQ\002\222\007\250\001\238\nQ\000\238\nQ\nQ\007\218\nQ\nQ\nQ\nQ\006\222\nQ\nQ\006\213\007E\nQ\nQ\nQ\000\238\nQ\nQ\nQ\nQ\020\150\nQ\012\230\nQ\nQ\nQ\nQ\nQ\nQ\nQ\nQ\006\213\nQ\tJ\nQ\004\153\nQ\nQ\nQ\nQ\nQ\007~\nQ\nQ\b\006\nQ\012\234\r\154\nQ\nQ\nQ\bm\b\014\nQ\nQ\nQ\nQ\nQ\nQ\nQ\b\018\nQ\002\022\nQ\001\150\nQ\nQ\nQ\nQ\nQ\nQ\nQ\nQ\nQ\nQ\nQ\t\169\nQ\nQ\n\006\nQ\nQ\n\018\002\198\007\250\004U\nQ\nQ\nQ\nQ\nQ\000\238\nQ\nQ\nQ\nQ\nQ\004\153\nQ\nQ\t\169\nQ\nQ\000\238\nQ\nQ\nQ\nQ\nQ\nQ\nQ\nQ\nQ\nQ\nQ\nQ\nQ\007\"\017.\nQ\nQ\nQ\nQ\nY\nY\t\141\003\178\000\238\nY\000\238\nY\nY\003^\nY\nY\nY\nY\016*\nY\nY\000\238\003b\nY\nY\nY\015\202\nY\nY\nY\nY\024r\nY\r*\nY\nY\nY\nY\nY\nY\nY\nY\004U\nY\012\026\nY\004\153\nY\nY\nY\nY\nY\r\026\nY\nY\0126\nY\r.\r\174\nY\nY\nY\020b\016r\nY\nY\nY\nY\nY\nY\nY\006A\nY\003\165\nY\r\030\nY\nY\nY\nY\nY\nY\nY\nY\nY\nY\nY\020j\nY\nY\n\178\nY\nY\t\141\007~\003F\003J\nY\nY\nY\nY\nY\003\150\nY\nY\nY\nY\nY\b\153\nY\nY\018\014\nY\nY\017n\nY\nY\nY\nY\nY\nY\nY\nY\nY\nY\nY\nY\nY\t\165\000\238\nY\nY\nY\nY\nU\nU\023\222\007\250\r\206\nU\003\186\nU\nU\020:\nU\nU\nU\nU\015~\nU\nU\006Q\t\165\nU\nU\nU\000\238\nU\nU\nU\nU\023\230\nU\012Z\nU\nU\nU\nU\nU\nU\nU\nU\007J\nU\003\190\nU\004R\nU\nU\nU\nU\nU\b\145\nU\nU\004V\nU\014R\r\194\nU\nU\nU\001\206\005F\nU\nU\nU\nU\nU\nU\nU\016\150\nU\0152\nU\003\197\nU\nU\nU\nU\nU\nU\nU\nU\nU\nU\nU\003\194\nU\nU\019\186\nU\nU\001\206\007~\003F\019J\nU\nU\nU\nU\nU\028V\nU\nU\nU\nU\nU\019\166\nU\nU\019^\nU\nU\017\170\nU\nU\nU\nU\nU\nU\nU\nU\nU\nU\nU\nU\nU\rz\004f\nU\nU\nU\nU\na\na\002\170\007\250\004\190\na\005N\na\na\005\018\na\na\na\na\014V\na\na\027^\r~\na\na\na\000\238\na\na\na\na\004\230\na\012\230\na\na\na\na\na\na\na\na\004r\na\002\014\na\004R\na\na\na\na\na\012\254\na\na\tM\na\r\190\r\222\na\na\na\0156\000\238\na\na\na\na\na\na\na\005>\na\r\002\na\023z\na\na\na\na\na\na\na\na\na\na\na\001\222\na\na\n\006\na\na\n\018\007~\000\238\028\191\na\na\na\na\na\004b\na\na\na\na\na\004\230\na\na\027b\na\na\017\198\na\na\na\na\na\na\na\na\na\na\na\na\na\002\198\007\194\na\na\na\na\nq\nq\015V\007\250\006.\nq\rJ\nq\nq\tM\nq\nq\nq\nq\r*\nq\nq\te\rz\nq\nq\nq\000\238\nq\nq\nq\nq\rN\nq\006F\nq\nq\nq\nq\nq\nq\nq\nq\014\002\nq\007\222\nq\014J\nq\nq\nq\nq\nq\rb\nq\nq\tI\nq\014j\r\242\nq\nq\nq\006\154\000\238\nq\nq\nq\nq\nq\nq\nq\b\158\nq\003\173\nq\rf\nq\nq\nq\nq\nq\nq\nq\nq\nq\nq\nq\001\222\nq\nq\b\194\nq\nq\015Z\007~\000\238\003\190\nq\nq\nq\nq\nq\007\006\nq\nq\nq\nq\nq\015\210\nq\nq\te\nq\nq\027\242\nq\nq\nq\nq\nq\nq\nq\nq\nq\nq\nq\nq\nq\t\254\n.\nq\nq\nq\nq\ni\ni\015\218\007\250\018\214\ni\nV\ni\ni\tI\ni\ni\ni\ni\015\002\ni\ni\012\214\015\142\ni\ni\ni\000\238\ni\ni\ni\ni\r\150\ni\014n\ni\ni\ni\ni\ni\ni\ni\ni\012\254\ni\r\170\ni\015\146\ni\ni\ni\ni\ni\003\190\ni\ni\017B\ni\024\166\014\006\ni\ni\ni\015\n\r\218\ni\ni\ni\ni\ni\ni\ni\004\153\ni\r\026\ni\004\153\ni\ni\ni\ni\ni\ni\ni\ni\ni\ni\ni\rJ\ni\ni\007\022\ni\ni\015\222\001\002\001\190\r\238\ni\ni\ni\ni\ni\011\186\ni\ni\ni\ni\ni\0142\ni\ni\003\209\ni\ni\000\238\ni\ni\ni\ni\ni\ni\ni\ni\ni\ni\ni\ni\ni\rb\016r\ni\ni\ni\ni\n\229\n\229\019R\006A\003\005\n\229\015\030\n\229\n\229\001\206\n\229\n\229\n\229\n\229\015\186\n\229\n\229\014>\019\254\n\229\n\229\n\229\020\006\n\229\n\229\n\229\n\229\015\"\n\229\012&\n\229\n\229\n\229\n\229\n\229\n\229\n\229\n\229\015\190\n\229\017F\n\229\007V\n\229\n\229\n\229\n\229\n\229\015F\n\229\n\229\002\158\n\229\028\022\014\018\n\229\n\229\n\229\012&\002\158\n\229\n\229\n\229\n\229\n\229\n\229\n\229\027B\n\229\024\250\n\229\015J\n\229\n\229\n\229\n\229\n\229\n\229\n\229\n\229\n\229\n\229\n\229\020f\n\229\n\229\007b\n\229\n\229\021\n\024\254\019\154\020&\n\229\n\229\n\229\n\229\n\229\002\198\n\229\n\229\n\229\n\229\n\229\b\161\n\229\n\229\016\210\n\229\n\229\002z\n\229\n\229\n\229\n\229\n\229\n\229\n\229\n\229\n\229\n\229\n\229\n\229\n\229\020B\015\230\n\229\n\229\n\229\n\229\003\229\003\229\000\238\bZ\000\238\003\229\018\146\003\229\003\229\t\158\003\229\003\229\003\229\003\229\016Z\003\229\003\229\000\238\015\234\003\229\003\229\003\229\006B\003\229\003\229\003\229\003\229\027R\003\229\028\026\003\229\003\229\003\229\003\229\003\229\003\229\003\229\003\229\020\246\003\229\006M\003\229\t\182\003\229\003\229\003\229\003\229\003\229\020\162\003\229\003\229\020\174\003\229\028\223\025\002\003\229\003\229\003\229\020n\021\014\003\229\003\229\003\229\003\229\003\229\003\229\003\229\n\002\003\229\t\"\003\229\b\014\003\229\003\229\003\229\003\229\003\229\003\229\003\229\003\229\003\229\003\229\003\229\023V\t\226\nB\023^\003\229\003\229\023\154\001\206\r\189\n*\003\229\003\229\003\229\003\229\003\229\023\234\003\229\003\229\003\229\003\229\t\234\b\157\nJ\003\229\n6\003\229\003\229\b\145\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\019\246\003\229\003\229\003\229\003\229\003\229\001\245\001\245\006E\002\170\020\218\001\245\024~\002\198\001\245\020\182\002\146\001\245\t\250\001\245\b\149\002\254\001\245\000\238\nF\001\245\001\245\001\245\024\138\001\245\001\245\001\245\001\210\b\014\n2\b\014\003\002\001\245\001\245\001\245\001\245\001\245\n:\001\245\027F\003\006\r\181\003\166\n~\001\245\001\245\001\245\001\245\001\245\007\222\003\238\001\190\023\186\001\245\n\202\r\181\001\245\001\245\002\186\000\238\025J\003\246\001\245\001\245\001\245\b\150\b\154\b\166\011\210\r6\n\174\b\174\n\190\b\206\005\134\001\245\001\245\001\245\001\245\001\245\001\245\001\245\001\245\001\245\023\226\t\226\nB\025\n\001\245\001\245\026*\028Z\001\222\024\026\005\146\005\150\001\245\001\245\001\245\011\234\001\245\001\245\001\245\001\245\r>\r\201\r\138\001\245\025\014\001\245\001\245\020\182\001\245\001\245\001\245\001\245\001\245\001\245\005\154\b\210\001\245\001\245\001\245\b\234\004\130\024\222\001\206\001\245\001\245\001\245\001\245\n\205\n\205\012\018\028\207\026^\n\205\026R\002\198\n\205\b\014\002\146\n\205\n\205\n\205\012B\002\254\n\205\b\014\027\n\n\205\n\205\n\205\014b\n\205\n\205\n\205\001\210\014\130\n\205\025N\003\002\n\205\n\205\n\205\n\205\n\205\n\205\n\205\026\214\003\006\001\206\003\166\014\178\n\205\n\205\n\205\n\205\n\205\000\238\003\238\001\190\014\222\n\205\0166\t\238\n\205\n\205\002\186\016^\026.\003\246\n\205\n\205\n\205\b\150\b\154\b\166\004\177\n\205\0146\b\174\014B\b\206\005\134\n\205\n\205\n\205\n\205\n\205\n\205\n\205\n\205\n\205\027\186\n\205\n\205\005-\n\205\n\205\027\230\004\014\016z\016~\005\146\005\150\n\205\n\205\n\205\016\166\n\205\n\205\n\205\n\205\n\205\026b\n\205\n\205\016\186\n\205\n\205\002\234\n\205\n\205\n\205\n\205\n\205\n\205\005\154\b\210\n\205\n\205\n\205\b\234\004\130\016\218\016\234\n\205\n\205\n\205\n\205\n\201\n\201\016\254\017*\017\130\n\201\017\138\002\198\n\201\018\138\002\146\n\201\n\201\n\201\018\158\002\254\n\201\018\162\006\150\n\201\n\201\n\201\019f\n\201\n\201\n\201\001\210\019~\n\201\020\014\003\002\n\201\n\201\n\201\n\201\n\201\n\201\n\201\020\018\003\006\020J\003\166\020N\n\201\n\201\n\201\n\201\n\201\020v\003\238\001\190\020z\n\201\020\146\012\246\n\201\n\201\002\186\021>\027\234\003\246\n\201\n\201\n\201\b\150\b\154\b\166\021B\n\201\r\018\b\174\r\"\b\206\005\134\n\201\n\201\n\201\n\201\n\201\n\201\n\201\n\201\n\201\021f\n\201\n\201\021j\n\201\n\201\021z\021\138\021\150\021\202\005\146\005\150\n\201\n\201\n\201\021\206\n\201\n\201\n\201\n\201\n\201\022\030\n\201\n\201\022F\n\201\n\201\022J\n\201\n\201\n\201\n\201\n\201\n\201\005\154\b\210\n\201\n\201\n\201\b\234\004\130\022Z\022\170\n\201\n\201\n\201\n\201\002A\002A\022\202\023\n\023.\002A\023>\002\198\002A\023f\002\146\002A\t\250\002A\023j\002\254\002A\023v\023\134\002A\002A\002A\023\162\002A\002A\002A\001\210\023\178\n2\023\198\003\002\002A\002A\002A\002A\002A\n:\002A\023\242\003\006\023\246\003\166\024\002\002A\002A\002A\002A\002A\024\018\003\238\001\190\024&\002A\025\026\rB\002A\002A\002\186\025r\025\154\003\246\002A\002A\002A\b\150\b\154\b\166\026\002\r6\rZ\b\174\rr\b\206\005\134\002A\002A\002A\002A\002A\002A\002A\002A\002A\026\018\026j\002A\026z\002A\002A\026\134\026\234\026\254\027.\005\146\005\150\002A\002A\002A\0276\002A\002A\002A\002A\027r\004\153\004\153\002A\004\153\002A\002A\027\154\002A\002A\002A\002A\002A\002A\005\154\b\210\002A\002A\002A\b\234\004\130\004\153\004\153\002A\002A\002A\002A\004\153\027\210\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\028\002\004\153\028\014\004\153\004\153\000\238\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\000\238\004\153\004\153\000\238\028#\004\153\004\153\0283\004\153\004\153\004\153\004\153\004\153\003\190\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\000\238\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\000\238\004\153\004\153\004\153\004\153\004\153\004\153\004\153\028F\004\153\004\153\004\153\004\153\028b\015f\004\153\028\127\000\238\004\153\004\153\004\153\028\143\004\153\t\002\001\190\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\015&\028\171\004\153\004\153\015:\015N\015^\004\153\007Y\028\255\001\206\004\153\004\153\029\027\029W\029k\023\146\029s\029\175\004\153\004\153\004\153\029\183\027\030\004\153\004\153\004\153\004\153\007Y\000\169\004\153\000\169\007Y\000\169\000\169\000\169\000\169\000\169\000\169\000\169\007]\000\169\024F\000\169\000\169\000\000\000\000\000\169\000\169\000\000\000\000\000\169\000\169\002\170\000\169\000\169\000\169\000\169\000\000\000\169\007]\000\169\000\169\t\226\nB\000\169\000\169\000\000\000\169\000\169\000\169\000\238\000\169\003\190\000\169\000\169\000\169\000\169\000\169\000\169\000\169\000\169\t\234\000\000\nJ\000\169\000\169\000\000\004\170\000\169\000\169\0051\000\169\000\169\000\169\000\169\000\169\000\169\000\000\000\169\017^\000\169\000\169\000\169\000\169\007Y\000\000\000\169\000\000\000\000\000\169\000\000\000\169\000\000\000\169\t\002\015\158\000\000\000\169\000\169\000\169\000\169\000\169\000\169\000\169\000\169\015&\007]\bZ\000\169\015:\015N\015^\000\000\000\222\000\000\rQ\b\162\000\169\b\133\000\000\r\210\000\238\b\133\000\169\000\169\000\169\000\169\000\000\000\000\000\169\000\169\000\169\000\169\0029\0029\r\230\rQ\r\250\0029\002.\t\001\0029\0022\t\001\0029\000\000\0029\000\000\t\001\0029\000\000\000\000\0029\0029\0029\002>\0029\0029\0029\t\001\000\000\b\133\000\000\t\001\0029\0029\0029\0029\0029\000\000\0029\000\000\t\001\017b\t\001\000\000\0029\0029\0029\0029\0029\000\000\t\001\t\001\000\000\0029\b\133\002J\0029\0029\t\001\000\000\000\000\t\001\0029\0029\0029\t\001\t\001\t\001\000\000\000\000\t\001\t\001\t\001\t\001\t\001\0029\0029\0029\0029\0029\0029\0029\0029\0029\000\000\t\226\nB\000\000\0029\0029\000\000\005\014\000\000\000\000\t\001\t\001\0029\0029\0029\002N\0029\0029\0029\0029\t\234\000\000\nJ\0029\000\000\0029\0029\000\000\0029\0029\0029\0029\0029\0029\t\001\t\001\0029\0029\0029\t\001\t\001\000\000\000\000\0029\0029\0029\0029\002M\002M\000\000\000\000\000\000\002M\000\000\002\198\002M\000\000\002\146\002M\000\000\002M\000\000\002\254\002M\000\000\000\000\002M\002M\002M\000\000\002M\002M\002M\001\210\000\000\000\000\000\000\003\002\002M\002M\002M\002M\002M\000\000\002M\000\000\003\006\000\000\003\166\000\000\002M\002M\002M\002M\002M\000\000\003\238\b\170\000\000\002M\000\000\000\000\002M\002M\002\186\000\000\000\000\003\246\002M\002M\002M\b\150\b\154\b\166\000\000\000\000\t\153\b\174\000\000\b\206\005\134\002M\002M\002M\002M\002M\002M\002M\002M\002M\002\233\t\226\nB\002\233\002M\002M\006\194\004Q\000\000\t\153\005\146\005\150\002M\002M\002M\000\000\002M\002M\002M\002M\t\234\000\000\nJ\002M\000\000\002M\002M\000\n\002M\002M\002M\002M\002M\002M\005\154\b\210\002M\002M\002M\b\234\004\130\000\000\002\233\002M\002M\002M\002M\002I\002I\000\238\000\000\000\000\002I\000\000\002\198\002I\002\233\002\233\002I\000\000\002I\003j\000\000\002I\000\000\003\146\002I\002I\002I\000\000\002I\002I\002I\001\210\000\000\000\000\000\000\000\000\002I\002I\002I\002I\002I\004Q\002I\029\011\000\000\002\233\000\000\000\000\002I\002I\002I\002I\002I\000\000\003\154\006V\000\000\002I\005\250\t\142\002I\002I\002\186\t\153\000\000\006v\002I\002I\002I\006\130\016R\000\000\000\000\002\146\006N\tI\000\000\018V\000\000\002I\002I\002I\002I\002I\002I\002I\002I\002I\003\190\t\226\nB\000\000\002I\002I\007B\006R\000\000\bq\000\000\000\000\002I\002I\002I\000\000\002I\002I\002I\002I\t\234\000\000\nJ\002I\016V\002I\002I\000\238\002I\002I\002I\002I\002I\002I\000\000\000\000\002I\002I\002I\016b\000\000\r!\005\206\002I\002I\002I\002I\002=\002=\000\238\000\000\000\000\002=\004\006\000\000\002=\000\000\006\170\002=\004\018\002=\r!\r!\002=\000\000\r!\002=\002=\002=\005\150\002=\002=\002=\tn\000\000\tI\000\000\000\000\002=\002=\002=\002=\002=\t\206\002=\t}\000\000\002\254\000\000\000\000\002=\002=\002=\002=\002=\000\000\026\142\006V\000\000\002=\005\250\006b\002=\002=\000\238\003\026\000\000\006v\002=\002=\002=\006\130\016R\000\000\014\186\002\146\007q\000\000\003&\000\000\000\000\002=\002=\002=\002=\002=\002=\002=\002=\002=\000\000\t\226\nB\000\238\002=\002=\007q\026F\r!\000\000\007q\000\000\002=\002=\002=\005\134\002=\002=\002=\002=\t\234\000\000\nJ\002=\016V\002=\002=\000\000\002=\002=\002=\002=\002=\002=\000\000\005\146\002=\002=\002=\016b\000\000\000\000\000\000\002=\002=\002=\002=\002E\002E\000\238\000\000\006V\002E\r\025\005\250\002E\000\000\000\000\002E\005\154\002E\006v\000\000\002E\000\000\006\130\002E\002E\002E\005\150\002E\002E\002E\r\025\r\025\000\000\005U\r\025\002E\002E\002E\002E\002E\000\000\002E\000\000\000\000\000\000\000\000\005U\002E\002E\002E\002E\002E\000\000\022v\006V\000\000\002E\005\250\026J\002E\002E\000\000\000\000\001*\006v\002E\002E\002E\006\130\002\233\002\233\000\000\000\000\000\238\000\000\000\000\005U\006\162\002E\002E\002E\002E\002E\002E\002E\002E\002E\016R\000\000\002E\002\146\002E\002E\000\000\000\000\000\000\000\000\000\n\006\166\002E\002E\002E\000\000\002E\002E\002E\002E\r\025\000\000\022\158\002E\005U\002E\002E\005U\nb\002E\002E\002E\002E\002E\000\000\n\030\002E\002E\002E\002\233\000\000\000\000\016V\002E\002E\002E\002E\t\177\t\177\002\233\002\233\017\230\t\177\000\238\002\182\t\177\000\000\016b\t\177\022\194\t\177\000\000\000\000\n\226\000\000\002\233\t\177\011\006\t\177\000\000\t\177\t\177\t\177\000\000\000\000\000\000\000\000\000\n\011\026\0112\011:\011\"\011B\000\000\t\177\000\000\000\000\005\150\002\198\000\000\t\177\t\177\011J\011R\t\177\000\000\000\000\022\206\000\000\t\177\000\000\006V\011Z\t\177\005\250\000\000\002\233\001\210\t\177\t\177\000\238\006v\000\000\000\000\022b\006\130\000\000\000\000\000\000\000\000\023\018\t\177\t\177\n\234\011*\011b\011j\011z\t\177\t\177\024N\003\178\t\177\024R\t\177\011\130\000\000\000\000\002\186\000\000\000\000\000\000\t\177\t\177\011\138\024\130\t\177\t\177\t\177\t\177\000\000\000\000\000\000\t\177\003\149\t\177\t\177\000\000\011\170\t\177\011\178\011r\t\177\t\177\000\000\003\149\t\177\011\146\t\177\000\000\000\000\r\029\024\146\t\177\t\177\011\154\011\162\002y\002y\b%\000\000\000\000\002y\000\000\000\000\002y\bf\003\149\002y\000\000\002y\r\029\r\029\002y\000\000\r\029\002y\002y\002y\000\000\002y\002y\002y\000\000\000\000\000\000\000\000\bj\002y\002y\002y\002y\002y\b%\002y\000\000\000\000\000\000\000\000\000\000\002y\002y\002y\002y\002y\003\149\000\000\b%\000\000\002y\b%\tB\002y\002y\000\238\bZ\000\000\b%\002y\002y\002y\b%\b\178\000\000\001\206\000\000\007}\000\000\000\000\000\238\000\000\002y\002y\n\234\002y\002y\002y\002y\002y\002y\016R\000\000\002y\002\146\002y\002y\007}\000\000\r\029\000\000\007}\000\000\002y\002y\002y\007U\002y\002y\002y\002y\000\000\014\142\000\000\002y\000\000\002y\002y\002\170\002y\002y\002y\002y\002y\002y\000\000\007U\002y\002y\002y\007U\000\000\bn\016V\002y\002y\002y\002y\002a\002a\002\233\002\233\019&\002a\000\000\000\000\002a\000\000\016b\002a\022\162\002a\000\000\004\170\002a\000\000\002\233\002a\002a\002a\000\000\002a\002a\002a\000\000\000\000\000\000\000\000\000\n\002a\002a\002a\002a\002a\007}\002a\000\000\000\000\005\150\001\206\000\000\002a\002a\002a\002a\002a\000\000\000\000\022\174\n\006\002a\000\000\n\018\002a\002a\000\000\000\000\002\233\001\210\002a\002a\002a\002\233\007U\000\000\022b\019\234\000\000\000\000\000\000\000\000\020\022\002a\002a\n\234\002a\002a\002a\002a\002a\002a\004*\002\170\002a\020\142\002a\002a\000\000\000\000\002\186\000\000\000\000\000\n\002a\002a\002a\020\166\002a\002a\002a\002a\000\000\000\000\000\000\002a\003\157\002a\002a\002\233\002a\002a\002a\002a\002a\002a\000\000\003\157\002a\002a\002a\000\000\002\233\002\233\000\000\002a\002a\002a\002a\002m\002m\011Q\000\000\000\000\002m\000\000\000\000\002m\000\000\003\157\002m\000\000\002m\000\000\000\000\n\226\000\000\000\000\002m\002m\002m\000\000\002m\002m\002m\000\000\000\000\000\000\000\000\000\000\002m\002m\002m\011\"\002m\011Q\002m\000\000\000\000\000\000\000\000\000\000\002m\002m\002m\002m\002m\003\157\000\000\011Q\000\000\002m\011Q\012R\002m\002m\000\000\000\000\000\000\011Q\002m\002m\002m\011Q\b\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002m\002m\n\234\011*\002m\002m\002m\002m\002m\b\145\000\000\002m\b\145\002m\002m\000\000\000\000\002\014\000\000\000\000\002\146\002m\002m\002m\000\000\002m\002m\002m\002m\000\000\000\000\023\154\002m\000\000\002m\002m\000\000\002m\002m\002m\002m\002m\002m\000\000\t5\002m\002m\002m\000\000\000\000\000\000\b\145\002m\002m\002m\002m\002}\002}\000\000\028>\001\222\002}\000\000\002\198\002}\000\000\b\145\002}\000\000\002}\000\000\000\000\002}\000\000\016b\002}\002}\002}\000\000\002}\002}\002}\000\000\000\000\t5\000\000\000\000\002}\002}\002}\002}\002}\000\000\002}\000\000\000\000\b\145\000\000\000\000\002}\002}\002}\002}\002}\005\150\nN\003\178\000\000\002}\t5\000\000\002}\002}\000\000\000\000\000\000\000\000\002}\002}\002}\012\206\002\198\012\222\b\145\002\146\000\000\000\000\000\000\000\000\000\000\002}\002}\n\234\002}\002}\002}\002}\002}\002}\000\000\000\000\002}\t5\002}\002}\000\000\005\014\000\000\t1\t5\000\000\002}\002}\002}\000\000\002}\002}\002}\002}\000\000\000\000\000\000\002}\018\202\002}\002}\000\000\002}\002}\002}\002}\002}\002}\000\000\000\000\002}\002}\002}\016b\000\000\000\000\000\000\002}\002}\002}\002}\002]\002]\t1\000\000\000\000\002]\000\000\000\000\002]\000\000\000\000\002]\000\000\002]\000\000\000\000\002]\000\000\000\000\002]\002]\002]\005\150\002]\002]\002]\000\000\t1\000\000\000\000\000\000\002]\002]\002]\002]\002]\000\000\002]\000\000\000\000\000\000\000\000\000\000\002]\002]\002]\002]\002]\002\198\000\000\000\000\000\000\002]\000\000\000\000\002]\002]\000\000\000\000\000\000\t1\002]\002]\002]\005\014\000\000\000\000\t1\000\000\000\000\000\000\000\000\000\000\000\000\002]\002]\n\234\002]\002]\002]\002]\002]\002]\000\000\000\000\002]\000\000\002]\002]\000\000\r\142\003\178\000\000\000\000\000\000\002]\002]\002]\000\000\002]\002]\002]\002]\000\000\000\000\r\162\002]\r\182\002]\002]\000\000\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]\002i\002i\000\238\000\000\000\000\002i\000\000\000\000\002i\000\000\000\000\002i\000\000\002i\000\000\000\000\n\226\000\000\000\000\002i\002i\002i\000\000\002i\002i\002i\000\000\000\000\000\000\000\000\000\000\002i\002i\002i\011\"\002i\012f\002i\000\000\000\000\000\000\000\000\000\000\002i\002i\002i\002i\002i\000\000\000\000\012n\000\000\002i\012z\000\000\002i\002i\000\000\000\000\000\000\012\134\002i\002i\002i\012\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002i\002i\n\234\011*\002i\002i\002i\002i\002i\000\000\000\000\002i\000\000\002i\002i\000\000\b\129\000\000\000\000\000\000\b\129\002i\002i\002i\000\000\002i\002i\002i\002i\000\000\000\000\000\000\002i\000\000\002i\002i\000\000\002i\002i\002i\002i\002i\002i\000\000\000\000\002i\002i\002i\000\000\000\000\000\000\000\000\002i\002i\002i\002i\002e\002e\000\238\b\129\000\000\002e\000\000\000\000\002e\000\000\000\000\002e\000\000\002e\000\000\000\000\n\226\000\000\000\000\002e\002e\002e\000\000\002e\002e\002e\000\000\000\000\b\129\000\000\000\000\002e\002e\002e\011\"\002e\b\029\002e\000\000\000\000\000\000\000\000\000\000\002e\002e\002e\002e\002e\000\000\000\000\b\029\000\000\002e\005\250\000\000\002e\002e\000\000\000\000\000\000\b\029\002e\002e\002e\b\029\005\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002e\002e\n\234\011*\002e\002e\002e\002e\002e\000\000\000\000\002e\000\000\002e\002e\000\000\000\000\000\000\000\000\000\000\000\000\002e\002e\002e\000\000\002e\002e\002e\002e\000\000\000\000\000\000\002e\000\000\002e\002e\000\000\002e\002e\002e\002e\002e\002e\000\000\000\000\002e\002e\002e\000\000\000\000\000\000\000\000\002e\002e\002e\002e\002\141\002\141\b9\000\000\000\000\002\141\000\000\000\000\002\141\000\000\000\000\002\141\000\000\002\141\000\000\000\000\n\226\000\000\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\011\026\0112\011:\011\"\011B\b9\002\141\000\000\000\000\000\000\000\000\000\000\002\141\002\141\011J\011R\002\141\000\000\000\000\b9\000\000\002\141\005\250\000\000\011Z\002\141\000\000\000\000\000\000\b9\002\141\002\141\000\238\b9\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\141\002\141\n\234\011*\011b\011j\011z\002\141\002\141\000\000\000\000\002\141\000\000\002\141\011\130\000\000\000\000\000\000\000\000\000\000\000\000\002\141\002\141\011\138\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\011r\002\141\002\141\000\000\000\000\002\141\011\146\002\141\000\000\000\000\000\000\000\000\002\141\002\141\011\154\011\162\002u\002u\000\238\000\000\000\000\002u\000\000\000\000\002u\000\000\000\000\002u\000\000\002u\000\000\000\000\n\226\000\000\000\000\002u\002u\002u\000\000\002u\002u\002u\000\000\000\000\000\000\000\000\000\000\002u\002u\002u\011\"\002u\bU\002u\000\000\000\000\000\000\000\000\000\000\002u\002u\002u\002u\002u\000\000\000\000\006V\000\000\002u\005\250\000\000\002u\002u\000\000\000\000\000\000\bU\002u\002u\002u\bU\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002u\002u\n\234\011*\002u\002u\002u\002u\002u\000\000\000\000\002u\000\000\002u\002u\000\000\000\000\000\000\000\000\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\002u\002u\000\000\000\000\002u\002u\002u\000\000\000\000\000\000\000\000\002u\002u\002u\002u\002q\002q\bM\000\000\000\000\002q\000\000\000\000\002q\000\000\000\000\002q\000\000\002q\000\000\000\000\n\226\000\000\000\000\002q\002q\002q\000\000\002q\002q\002q\000\000\000\000\000\000\000\000\000\000\002q\002q\002q\011\"\002q\bM\002q\000\000\000\000\000\000\000\000\000\000\002q\002q\002q\002q\002q\000\000\000\000\012\170\000\000\002q\bM\000\000\002q\002q\000\000\000\000\000\000\bM\002q\002q\002q\bM\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002q\002q\n\234\011*\002q\002q\002q\002q\002q\000\000\000\000\002q\000\000\002q\002q\000\000\000\000\000\000\000\000\000\000\000\000\002q\002q\002q\000\000\002q\002q\002q\002q\000\000\000\000\000\000\002q\000\000\002q\002q\000\000\002q\002q\002q\002q\002q\002q\000\000\000\000\002q\002q\002q\000\000\000\000\000\000\000\000\002q\002q\002q\002q\002\133\002\133\000\238\000\000\000\000\002\133\000\000\000\000\002\133\000\000\000\000\002\133\000\000\002\133\000\000\000\000\n\226\000\000\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\026\0112\011:\011\"\002\133\b\025\002\133\000\000\000\000\000\000\000\000\000\000\002\133\002\133\011J\011R\002\133\000\000\000\000\b\025\000\000\002\133\005\250\000\000\002\133\002\133\000\000\000\000\000\000\b\025\002\133\002\133\000\238\b\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\133\002\133\n\234\011*\011b\011j\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\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\011r\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\002Y\002Y\000\238\000\000\000\000\002Y\000\000\000\000\002Y\000\000\000\000\002Y\000\000\002Y\000\000\000\000\n\226\000\000\000\000\002Y\002Y\002Y\000\000\002Y\002Y\002Y\000\000\000\000\000\000\000\000\000\000\002Y\002Y\002Y\011\"\002Y\014\246\002Y\000\000\000\000\000\000\000\000\000\000\002Y\002Y\002Y\002Y\002Y\000\000\000\000\012n\000\000\002Y\012z\000\000\002Y\002Y\000\000\000\000\000\000\012\134\002Y\002Y\002Y\012\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002Y\002Y\n\234\011*\002Y\002Y\002Y\002Y\002Y\000\000\000\000\002Y\000\000\002Y\002Y\000\000\000\000\000\000\000\000\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\002Y\002Y\000\000\000\000\002Y\002Y\002Y\000\000\000\000\000\000\000\000\002Y\002Y\002Y\002Y\002U\002U\000\000\000\000\000\000\002U\000\000\000\000\002U\000\000\000\000\002U\000\000\002U\000\000\000\000\n\226\000\000\000\000\002U\002U\002U\000\000\002U\002U\002U\000\000\000\000\000\000\000\000\000\000\011\026\0112\011:\011\"\002U\000\000\002U\000\000\000\000\000\000\000\000\000\000\002U\002U\011J\011R\002U\000\000\000\000\000\000\000\000\002U\000\000\000\000\002U\002U\000\000\000\000\000\000\000\000\002U\002U\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002U\002U\n\234\011*\011b\011j\002U\002U\002U\000\000\000\000\002U\000\000\002U\002U\000\000\000\000\000\000\000\000\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\011r\002U\002U\000\000\000\000\002U\002U\002U\000\000\000\000\000\000\000\000\002U\002U\002U\002U\002\177\002\177\000\000\000\000\000\000\002\177\000\000\000\000\002\177\000\000\000\000\002\177\000\000\002\177\000\000\000\000\n\226\000\000\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\026\0112\011:\011\"\002\177\000\000\002\177\000\000\000\000\000\000\000\000\000\000\002\177\002\177\011J\011R\002\177\000\000\000\000\000\000\000\000\002\177\000\000\000\000\002\177\002\177\000\000\000\000\000\000\000\000\002\177\002\177\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\177\002\177\n\234\011*\011b\002\177\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\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\011r\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\002Q\002Q\000\000\000\000\000\000\002Q\000\000\000\000\002Q\000\000\000\000\002Q\000\000\002Q\000\000\000\000\n\226\000\000\000\000\002Q\002Q\002Q\000\000\002Q\002Q\002Q\000\000\000\000\000\000\000\000\000\000\011\026\0112\011:\011\"\002Q\000\000\002Q\000\000\000\000\000\000\000\000\000\000\002Q\002Q\011J\011R\002Q\000\000\000\000\000\000\000\000\002Q\000\000\000\000\002Q\002Q\000\000\000\000\000\000\000\000\002Q\002Q\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002Q\002Q\n\234\011*\011b\011j\002Q\002Q\002Q\000\000\000\000\002Q\000\000\002Q\002Q\000\000\000\000\000\000\000\000\000\000\000\000\002Q\002Q\002Q\000\000\002Q\002Q\002Q\002Q\000\000\000\000\000\000\002Q\000\000\002Q\002Q\000\000\002Q\002Q\002Q\011r\002Q\002Q\000\000\000\000\002Q\002Q\002Q\000\000\000\000\000\000\000\000\002Q\002Q\002Q\002Q\002\137\002\137\000\000\000\000\000\000\002\137\000\000\000\000\002\137\000\000\000\000\002\137\000\000\002\137\000\000\000\000\n\226\000\000\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\011\026\0112\011:\011\"\002\137\000\000\002\137\000\000\000\000\000\000\000\000\000\000\002\137\002\137\011J\011R\002\137\000\000\000\000\000\000\000\000\002\137\000\000\000\000\002\137\002\137\000\000\000\000\000\000\000\000\002\137\002\137\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\137\002\137\n\234\011*\011b\011j\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\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\011r\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\129\002\129\000\000\000\000\000\000\002\129\000\000\000\000\002\129\000\000\000\000\002\129\000\000\002\129\000\000\000\000\n\226\000\000\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\026\0112\011:\011\"\002\129\000\000\002\129\000\000\000\000\000\000\000\000\000\000\002\129\002\129\011J\011R\002\129\000\000\000\000\000\000\000\000\002\129\000\000\000\000\002\129\002\129\000\000\000\000\000\000\000\000\002\129\002\129\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\129\002\129\n\234\011*\011b\011j\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\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\011r\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\145\002\145\000\000\000\000\000\000\002\145\000\000\000\000\002\145\000\000\000\000\002\145\000\000\002\145\000\000\000\000\n\226\000\000\000\000\002\145\002\145\002\145\000\000\002\145\002\145\002\145\000\000\000\000\000\000\000\000\000\000\011\026\0112\011:\011\"\011B\000\000\002\145\000\000\000\000\000\000\000\000\000\000\002\145\002\145\011J\011R\002\145\000\000\000\000\000\000\000\000\002\145\000\000\000\000\011Z\002\145\000\000\000\000\000\000\000\000\002\145\002\145\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\002\145\n\234\011*\011b\011j\011z\002\145\002\145\000\000\000\000\002\145\000\000\002\145\011\130\000\000\000\000\000\000\000\000\000\000\000\000\002\145\002\145\011\138\000\000\002\145\002\145\002\145\002\145\000\000\000\000\000\000\002\145\000\000\002\145\002\145\000\000\002\145\002\145\002\145\011r\002\145\002\145\000\000\000\000\002\145\011\146\002\145\000\000\000\000\000\000\000\000\002\145\002\145\011\154\011\162\002\149\002\149\000\000\000\000\000\000\002\149\000\000\000\000\002\149\000\000\000\000\002\149\000\000\002\149\000\000\000\000\n\226\000\000\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\011\026\0112\011:\011\"\002\149\000\000\002\149\000\000\000\000\000\000\000\000\000\000\002\149\002\149\011J\011R\002\149\000\000\000\000\000\000\000\000\002\149\000\000\000\000\011Z\002\149\000\000\000\000\000\000\000\000\002\149\002\149\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\149\002\149\n\234\011*\011b\011j\011z\002\149\002\149\000\000\000\000\002\149\000\000\002\149\011\130\000\000\000\000\000\000\000\000\000\000\000\000\002\149\002\149\011\138\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\011r\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\011\154\011\162\002\153\002\153\000\000\000\000\000\000\002\153\000\000\000\000\002\153\000\000\000\000\002\153\000\000\002\153\000\000\000\000\n\226\000\000\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\011\026\0112\011:\011\"\002\153\000\000\002\153\000\000\000\000\000\000\000\000\000\000\002\153\002\153\011J\011R\002\153\000\000\000\000\000\000\000\000\002\153\000\000\000\000\011Z\002\153\000\000\000\000\000\000\000\000\002\153\002\153\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\153\002\153\n\234\011*\011b\011j\011z\002\153\002\153\000\000\000\000\002\153\000\000\002\153\011\130\000\000\000\000\000\000\000\000\000\000\000\000\002\153\002\153\011\138\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\011r\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\011\154\011\162\tm\tm\000\000\000\000\000\000\tm\000\000\000\000\tm\000\000\000\000\tm\000\000\tm\000\000\000\000\n\226\000\000\000\000\tm\tm\tm\000\000\tm\tm\tm\000\000\000\000\000\000\000\000\000\000\011\026\0112\011:\011\"\011B\000\000\tm\000\000\000\000\000\000\000\000\000\000\tm\tm\011J\011R\tm\000\000\000\000\000\000\000\000\tm\000\000\000\000\011Z\tm\000\000\000\000\000\000\000\000\tm\tm\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tm\tm\n\234\011*\011b\011j\011z\tm\tm\000\000\000\000\tm\000\000\tm\011\130\000\000\000\000\000\000\000\000\000\000\000\000\tm\tm\011\138\000\000\tm\tm\tm\tm\000\000\000\000\000\000\tm\000\000\tm\tm\000\000\tm\tm\tm\011r\tm\tm\000\000\000\000\tm\011\146\tm\000\000\000\000\000\000\000\000\tm\tm\011\154\011\162\002\157\002\157\000\000\000\000\000\000\002\157\000\000\000\000\002\157\000\000\000\000\002\157\000\000\002\157\000\000\000\000\n\226\000\000\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\011\026\0112\011:\011\"\011B\000\000\002\157\000\000\000\000\000\000\000\000\000\000\002\157\002\157\011J\011R\002\157\000\000\000\000\000\000\000\000\002\157\000\000\000\000\011Z\002\157\000\000\000\000\000\000\000\000\002\157\002\157\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\002\157\n\234\011*\011b\011j\011z\002\157\002\157\000\000\000\000\002\157\000\000\002\157\011\130\000\000\000\000\000\000\000\000\000\000\000\000\002\157\002\157\011\138\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\011\170\002\157\011\178\011r\002\157\002\157\000\000\000\000\002\157\011\146\002\157\000\000\000\000\000\000\000\000\002\157\002\157\011\154\011\162\ti\ti\000\000\000\000\000\000\ti\000\000\000\000\ti\000\000\000\000\ti\000\000\ti\000\000\000\000\n\226\000\000\000\000\ti\ti\ti\000\000\ti\ti\ti\000\000\000\000\000\000\000\000\000\000\011\026\0112\011:\011\"\011B\000\000\ti\000\000\000\000\000\000\000\000\000\000\ti\ti\011J\011R\ti\000\000\000\000\000\000\000\000\ti\000\000\000\000\011Z\ti\000\000\000\000\000\000\000\000\ti\ti\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ti\ti\n\234\011*\011b\011j\011z\ti\ti\000\000\000\000\ti\000\000\ti\011\130\000\000\000\000\000\000\000\000\000\000\000\000\ti\ti\011\138\000\000\ti\ti\ti\ti\000\000\000\000\000\000\ti\000\000\ti\ti\000\000\ti\ti\ti\011r\ti\ti\000\000\000\000\ti\011\146\ti\000\000\000\000\000\000\000\000\ti\ti\011\154\011\162\002\201\002\201\000\000\000\000\000\000\002\201\000\000\000\000\002\201\000\000\000\000\002\201\000\000\002\201\000\000\000\000\n\226\000\000\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\026\0112\011:\011\"\011B\000\000\002\201\000\000\000\000\000\000\000\000\000\000\002\201\002\201\011J\011R\002\201\000\000\000\000\000\000\000\000\002\201\000\000\000\000\011Z\002\201\000\000\000\000\000\000\000\000\002\201\002\201\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\201\002\201\n\234\011*\011b\011j\011z\002\201\002\201\000\000\000\000\002\201\000\000\002\201\011\130\000\000\000\000\000\000\000\000\000\000\000\000\002\201\002\201\011\138\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\011\170\002\201\011\178\011r\002\201\002\201\000\000\000\000\002\201\011\146\002\201\000\000\000\000\000\000\000\000\002\201\002\201\011\154\011\162\002\217\002\217\000\000\000\000\000\000\002\217\000\000\000\000\002\217\000\000\000\000\002\217\000\000\002\217\000\000\000\000\n\226\000\000\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\026\0112\011:\011\"\011B\000\000\002\217\000\000\000\000\000\000\000\000\000\000\002\217\002\217\011J\011R\002\217\000\000\000\000\000\000\000\000\002\217\000\000\000\000\011Z\002\217\000\000\000\000\000\000\000\000\002\217\002\217\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\217\002\217\n\234\011*\011b\011j\011z\002\217\002\217\000\000\000\000\002\217\000\000\002\217\011\130\000\000\000\000\000\000\000\000\000\000\000\000\002\217\002\217\011\138\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\011\170\002\217\011\178\011r\002\217\002\217\000\000\000\000\002\217\011\146\002\217\000\000\000\000\000\000\000\000\002\217\002\217\011\154\011\162\002\209\002\209\000\000\000\000\000\000\002\209\000\000\000\000\002\209\000\000\000\000\002\209\000\000\002\209\000\000\000\000\n\226\000\000\000\000\002\209\002\209\002\209\000\000\002\209\002\209\002\209\000\000\000\000\000\000\000\000\000\000\011\026\0112\011:\011\"\011B\000\000\002\209\000\000\000\000\000\000\000\000\000\000\002\209\002\209\011J\011R\002\209\000\000\000\000\000\000\000\000\002\209\000\000\000\000\011Z\002\209\000\000\000\000\000\000\000\000\002\209\002\209\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\209\002\209\n\234\011*\011b\011j\011z\002\209\002\209\000\000\000\000\002\209\000\000\002\209\011\130\000\000\000\000\000\000\000\000\000\000\000\000\002\209\002\209\011\138\000\000\002\209\002\209\002\209\002\209\000\000\000\000\000\000\002\209\000\000\002\209\002\209\000\000\011\170\002\209\011\178\011r\002\209\002\209\000\000\000\000\002\209\011\146\002\209\000\000\000\000\000\000\000\000\002\209\002\209\011\154\011\162\002\189\002\189\000\000\000\000\000\000\002\189\000\000\000\000\002\189\000\000\000\000\002\189\000\000\002\189\000\000\000\000\n\226\000\000\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\026\0112\011:\011\"\011B\000\000\002\189\000\000\000\000\000\000\000\000\000\000\002\189\002\189\011J\011R\002\189\000\000\000\000\000\000\000\000\002\189\000\000\000\000\011Z\002\189\000\000\000\000\000\000\000\000\002\189\002\189\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\189\002\189\n\234\011*\011b\011j\011z\002\189\002\189\000\000\000\000\002\189\000\000\002\189\011\130\000\000\000\000\000\000\000\000\000\000\000\000\002\189\002\189\011\138\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\011\170\002\189\011\178\011r\002\189\002\189\000\000\000\000\002\189\011\146\002\189\000\000\000\000\000\000\000\000\002\189\002\189\011\154\011\162\002\197\002\197\000\000\000\000\000\000\002\197\000\000\000\000\002\197\000\000\000\000\002\197\000\000\002\197\000\000\000\000\n\226\000\000\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\026\0112\011:\011\"\011B\000\000\002\197\000\000\000\000\000\000\000\000\000\000\002\197\002\197\011J\011R\002\197\000\000\000\000\000\000\000\000\002\197\000\000\000\000\011Z\002\197\000\000\000\000\000\000\000\000\002\197\002\197\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\197\002\197\n\234\011*\011b\011j\011z\002\197\002\197\000\000\000\000\002\197\000\000\002\197\011\130\000\000\000\000\000\000\000\000\000\000\000\000\002\197\002\197\011\138\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\011\170\002\197\011\178\011r\002\197\002\197\000\000\000\000\002\197\011\146\002\197\000\000\000\000\000\000\000\000\002\197\002\197\011\154\011\162\002\193\002\193\000\000\000\000\000\000\002\193\000\000\000\000\002\193\000\000\000\000\002\193\000\000\002\193\000\000\000\000\n\226\000\000\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\026\0112\011:\011\"\011B\000\000\002\193\000\000\000\000\000\000\000\000\000\000\002\193\002\193\011J\011R\002\193\000\000\000\000\000\000\000\000\002\193\000\000\000\000\011Z\002\193\000\000\000\000\000\000\000\000\002\193\002\193\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\193\002\193\n\234\011*\011b\011j\011z\002\193\002\193\000\000\000\000\002\193\000\000\002\193\011\130\000\000\000\000\000\000\000\000\000\000\000\000\002\193\002\193\011\138\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\011\170\002\193\011\178\011r\002\193\002\193\000\000\000\000\002\193\011\146\002\193\000\000\000\000\000\000\000\000\002\193\002\193\011\154\011\162\002\205\002\205\000\000\000\000\000\000\002\205\000\000\000\000\002\205\000\000\000\000\002\205\000\000\002\205\000\000\000\000\n\226\000\000\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\026\0112\011:\011\"\011B\000\000\002\205\000\000\000\000\000\000\000\000\000\000\002\205\002\205\011J\011R\002\205\000\000\000\000\000\000\000\000\002\205\000\000\000\000\011Z\002\205\000\000\000\000\000\000\000\000\002\205\002\205\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\205\002\205\n\234\011*\011b\011j\011z\002\205\002\205\000\000\000\000\002\205\000\000\002\205\011\130\000\000\000\000\000\000\000\000\000\000\000\000\002\205\002\205\011\138\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\011\170\002\205\011\178\011r\002\205\002\205\000\000\000\000\002\205\011\146\002\205\000\000\000\000\000\000\000\000\002\205\002\205\011\154\011\162\002\221\002\221\000\000\000\000\000\000\002\221\000\000\000\000\002\221\000\000\000\000\002\221\000\000\002\221\000\000\000\000\n\226\000\000\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\026\0112\011:\011\"\011B\000\000\002\221\000\000\000\000\000\000\000\000\000\000\002\221\002\221\011J\011R\002\221\000\000\000\000\000\000\000\000\002\221\000\000\000\000\011Z\002\221\000\000\000\000\000\000\000\000\002\221\002\221\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\221\002\221\n\234\011*\011b\011j\011z\002\221\002\221\000\000\000\000\002\221\000\000\002\221\011\130\000\000\000\000\000\000\000\000\000\000\000\000\002\221\002\221\011\138\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\011\170\002\221\011\178\011r\002\221\002\221\000\000\000\000\002\221\011\146\002\221\000\000\000\000\000\000\000\000\002\221\002\221\011\154\011\162\002\213\002\213\000\000\000\000\000\000\002\213\000\000\000\000\002\213\000\000\000\000\002\213\000\000\002\213\000\000\000\000\n\226\000\000\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\026\0112\011:\011\"\011B\000\000\002\213\000\000\000\000\000\000\000\000\000\000\002\213\002\213\011J\011R\002\213\000\000\000\000\000\000\000\000\002\213\000\000\000\000\011Z\002\213\000\000\000\000\000\000\000\000\002\213\002\213\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\213\002\213\n\234\011*\011b\011j\011z\002\213\002\213\000\000\000\000\002\213\000\000\002\213\011\130\000\000\000\000\000\000\000\000\000\000\000\000\002\213\002\213\011\138\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\011\170\002\213\011\178\011r\002\213\002\213\000\000\000\000\002\213\011\146\002\213\000\000\000\000\000\000\000\000\002\213\002\213\011\154\011\162\002\185\002\185\000\000\000\000\000\000\002\185\000\000\000\000\002\185\000\000\000\000\002\185\000\000\002\185\000\000\000\000\n\226\000\000\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\026\0112\011:\011\"\011B\000\000\002\185\000\000\000\000\000\000\000\000\000\000\002\185\002\185\011J\011R\002\185\000\000\000\000\000\000\000\000\002\185\000\000\000\000\011Z\002\185\000\000\000\000\000\000\000\000\002\185\002\185\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\185\002\185\n\234\011*\011b\011j\011z\002\185\002\185\000\000\000\000\002\185\000\000\002\185\011\130\000\000\000\000\000\000\000\000\000\000\000\000\002\185\002\185\011\138\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\011\170\002\185\011\178\011r\002\185\002\185\000\000\000\000\002\185\011\146\002\185\000\000\000\000\000\000\000\000\002\185\002\185\011\154\011\162\002\t\002\t\000\000\000\000\000\000\002\t\000\000\000\000\002\t\000\000\000\000\002\t\000\000\002\t\000\000\000\000\002\t\000\000\000\000\002\t\002\t\002\t\000\000\002\t\002\t\002\t\000\000\000\000\000\000\000\000\000\000\002\t\002\t\002\t\002\t\002\t\000\000\002\t\000\000\000\000\000\000\000\000\000\000\002\t\002\t\002\t\002\t\002\t\000\000\000\000\000\000\000\000\002\t\000\000\000\000\002\t\002\t\000\000\000\000\000\000\000\000\002\t\002\t\002\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\t\002\t\002\t\002\t\002\t\002\t\002\t\002\t\002\t\000\000\000\000\002\t\000\000\002\t\002\t\000\000\000\000\000\000\000\000\000\000\000\000\002\t\002\t\002\t\000\000\002\t\002\t\002\t\002\t\000\000\000\000\000\000\002\t\000\000\002\t\002\t\000\000\002\t\002\t\002\t\002\t\002\t\002\t\000\000\000\000\002\t\002\t\014\206\000\000\000\000\000\000\000\000\002\t\002\t\002\t\002\t\002%\002%\000\000\000\000\000\000\002%\000\000\000\000\002%\000\000\000\000\002%\000\000\002%\000\000\000\000\n\226\000\000\000\000\002%\002%\002%\000\000\002%\002%\002%\000\000\000\000\000\000\000\000\000\000\011\026\0112\011:\011\"\011B\000\000\002%\000\000\000\000\000\000\000\000\000\000\002%\002%\011J\011R\002%\000\000\000\000\000\000\000\000\002%\000\000\000\000\011Z\002%\000\000\000\000\000\000\000\000\002%\002%\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002%\002%\n\234\011*\011b\011j\011z\002%\002%\000\000\000\000\002%\000\000\002%\011\130\000\000\000\000\000\000\000\000\000\000\000\000\002%\002%\011\138\000\000\002%\002%\014\230\002%\000\000\000\000\000\000\002%\000\000\002%\002%\000\000\011\170\002%\011\178\011r\002%\002%\000\000\000\000\002%\011\146\002%\000\000\000\000\000\000\000\000\002%\002%\011\154\011\162\002!\002!\000\000\000\000\000\000\002!\000\000\000\000\002!\000\000\000\000\002!\000\000\002!\000\000\000\000\n\226\000\000\000\000\002!\002!\002!\000\000\002!\002!\002!\000\000\000\000\000\000\000\000\000\000\011\026\0112\011:\011\"\011B\000\000\002!\000\000\000\000\000\000\000\000\000\000\002!\002!\011J\011R\002!\000\000\000\000\000\000\000\000\002!\000\000\000\000\011Z\002!\000\000\000\000\000\000\000\000\002!\002!\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002!\002!\n\234\011*\011b\011j\011z\002!\002!\000\000\000\000\002!\000\000\002!\011\130\000\000\000\000\000\000\000\000\000\000\000\000\002!\002!\011\138\000\000\002!\002!\002!\002!\000\000\000\000\000\000\002!\000\000\002!\002!\000\000\011\170\002!\011\178\011r\002!\002!\000\000\000\000\002!\011\146\002!\000\000\000\000\000\000\000\000\002!\002!\011\154\011\162\002\181\002\181\000\000\000\000\000\000\002\181\000\000\000\000\002\181\000\000\000\000\002\181\000\000\002\181\000\000\000\000\n\226\000\000\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\026\0112\011:\011\"\011B\000\000\002\181\000\000\000\000\000\000\000\000\000\000\002\181\002\181\011J\011R\002\181\000\000\000\000\000\000\000\000\002\181\000\000\000\000\011Z\002\181\000\000\000\000\000\000\000\000\002\181\002\181\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\181\002\181\n\234\011*\011b\011j\011z\002\181\002\181\000\000\000\000\002\181\000\000\002\181\011\130\000\000\000\000\000\000\000\000\000\000\000\000\002\181\002\181\011\138\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\011\170\002\181\011\178\011r\002\181\002\181\000\000\000\000\002\181\011\146\002\181\000\000\000\000\000\000\000\000\002\181\002\181\011\154\011\162\002\021\002\021\000\000\000\000\000\000\002\021\000\000\000\000\002\021\000\000\000\000\002\021\000\000\002\021\000\000\000\000\002\021\000\000\000\000\002\021\002\021\002\021\000\000\002\021\002\021\002\021\000\000\000\000\000\000\000\000\000\000\002\021\002\021\002\021\002\021\002\021\000\000\002\021\000\000\000\000\000\000\000\000\000\000\002\021\002\021\002\021\002\021\002\021\000\000\000\000\000\000\000\000\002\021\000\000\000\000\002\021\002\021\000\000\000\000\000\000\000\000\002\021\002\021\002\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\021\002\021\002\021\002\021\002\021\002\021\002\021\002\021\002\021\000\000\000\000\002\021\000\000\002\021\002\021\000\000\000\000\000\000\000\000\000\000\000\000\002\021\002\021\002\021\000\000\002\021\002\021\002\021\002\021\000\000\000\000\000\000\002\021\000\000\002\021\002\021\000\000\002\021\002\021\002\021\002\021\002\021\002\021\000\000\000\000\002\021\002\021\014\206\000\000\000\000\000\000\000\000\002\021\002\021\002\021\002\021\002\025\002\025\000\000\000\000\000\000\002\025\000\000\000\000\002\025\000\000\000\000\002\025\000\000\002\025\000\000\000\000\002\025\000\000\000\000\002\025\002\025\002\025\000\000\002\025\002\025\002\025\000\000\000\000\000\000\000\000\000\000\002\025\002\025\002\025\002\025\002\025\000\000\002\025\000\000\000\000\000\000\000\000\000\000\002\025\002\025\002\025\002\025\002\025\000\000\000\000\000\000\000\000\002\025\000\000\000\000\002\025\002\025\000\000\000\000\000\000\000\000\002\025\002\025\002\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\025\002\025\002\025\002\025\002\025\002\025\002\025\002\025\002\025\000\000\000\000\002\025\000\000\002\025\002\025\000\000\000\000\000\000\000\000\000\000\000\000\002\025\002\025\002\025\000\000\002\025\002\025\002\025\002\025\000\000\000\000\000\000\002\025\000\000\002\025\002\025\000\000\002\025\002\025\002\025\002\025\002\025\002\025\000\000\000\000\002\025\002\025\014\206\000\000\000\000\000\000\000\000\002\025\002\025\002\025\002\025\001\006\000\000\000\006\000\000\000\000\000\000\002\194\002\198\000\000\002\242\002\146\000\000\000\000\000\000\003\193\002\254\001\n\000\000\000\000\000\000\000\000\002\158\000\000\000\000\000\000\003\193\001\210\000\000\000\000\000\000\003\242\001\018\t\n\t\014\001\030\001\"\000\000\000\000\000\000\003\006\000\000\003\166\000\000\017N\000\000\t2\t6\003\193\003\226\003\238\003\250\t:\007.\000\000\000\000\001:\000\000\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\150\b\154\b\166\b\222\000\000\000\000\b\174\000\000\b\206\005\134\000\000\000\000\001>\001B\001F\001J\001N\t\226\nB\tN\001R\003\193\000\000\000\000\001V\000\000\tZ\tr\t\190\005\146\005\150\000\000\000\000\001Z\000\000\000\000\t\234\000\000\nJ\001^\000\000\000\000\000\000\000\000\000\000\rQ\r=\000\000\000\000\001\154\006B\000\000\000\000\005\154\b\210\000\000\001\158\000\000\015\022\004\130\t\210\001\006\001\166\000\006\001\170\001\174\rQ\002\194\002\198\002.\002\242\002\146\0022\000\000\000\000\000\000\002\254\001\n\000\000\002:\000\000\000\000\t\006\000\000\000\000\002>\000\000\001\210\002F\r=\000\000\003\242\001\018\t\n\t\014\001\030\001\"\000\000\000\000\000\000\003\006\000\000\003\166\000\000\t\018\000\000\t2\t6\000\000\003\226\003\238\003\250\t:\007.\000\000\000\000\001:\002J\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\150\b\154\b\166\b\222\000\000\000\000\b\174\000\000\b\206\005\134\000\000\003\189\001>\001B\001F\001J\001N\000\000\000\000\tN\001R\000\000\003\189\000\000\001V\000\000\tZ\tr\t\190\005\146\005\150\000\000\000\000\001Z\000\000\000\000\002N\000\000\000\000\001^\000\000\000\000\000\000\000\000\003\189\000\000\000\000\000\000\000\000\001\154\006\150\000\000\000\000\005\154\b\210\000\000\001\158\000\000\015\022\004\130\t\210\004\197\001\166\000\006\001\170\001\174\000\246\002\194\002\198\002\202\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\t\226\nB\003r\000\000\003\189\000\000\004\197\000\000\003v\001\210\000\000\018N\000\000\003\002\000\000\003z\003~\000\000\000\000\t\234\003\130\nJ\003\006\000\000\003\166\000\000\017\226\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007.\000\000\001\202\001\206\018F\002\186\000\000\000\000\003\246\018^\000\000\000\000\b\150\b\154\b\166\b\222\000\000\000\000\b\174\000\000\b\206\005\134\001\210\001\250\001\230\000\000\000\000\000\000\000\000\018f\000\000\tN\001\242\000\000\000\000\000\000\000\000\000\000\tZ\tr\t\190\005\146\005\150\018z\018\182\001\246\002\162\004\197\004\197\000\000\000\000\002\174\000\000\002\186\004.\004:\000\000\000\000\000\000\000\000\004F\000\000\000\000\018\242\022\246\005\154\b\210\017:\000\181\000\000\b\234\004\130\t\210\000\181\000\000\002\198\000\181\000\000\002\146\000\000\t\250\004J\000\000\002\254\000\000\000\000\000\000\000\181\000\000\000\181\000\000\000\181\000\000\000\181\001\210\000\000\n2\000\000\003\002\000\000\000\000\000\000\000\000\000\000\n:\000\181\000\000\003\006\000\000\003\166\000\000\000\181\000\000\000\000\000\000\000\181\002\014\003\238\001\190\004\130\000\181\000\000\000\000\002\018\000\181\002\186\000\000\002\026\003\246\000\181\000\181\000\181\b\150\b\154\b\166\001\210\r6\000\000\b\174\000\000\b\206\005\134\000\181\000\181\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\003Z\000\181\000\000\000\000\000\000\000\000\007Z\001\222\000\000\005\146\005\150\000\181\000\181\000\000\002\186\000\181\000\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\181\000\181\005\154\b\210\000\000\000\000\000\205\b\234\004\130\000\000\000\181\000\205\000\181\002\198\000\205\007f\002\146\000\000\t\250\000\000\000\000\002\254\000\000\000\000\000\000\000\205\000\000\000\205\000\000\000\205\000\000\000\205\001\210\000\000\n2\000\000\003\002\000\000\000\000\000\000\000\000\000\000\n:\000\205\000\000\003\006\000\000\003\166\000\000\000\205\000\000\000\000\000\000\000\205\000\000\003\238\001\190\000\000\000\205\000\000\000\000\000\000\000\205\002\186\000\000\000\000\003\246\000\205\000\205\000\205\b\150\b\154\b\166\000\000\r6\002\014\b\174\000\000\b\206\005\134\000\205\000\205\002\018\000\000\000\000\000\000\002\026\000\205\000\000\007^\000\000\000\205\000\000\000\000\001\210\000\000\000\000\000\000\000\000\005\146\005\150\000\205\000\205\000\000\000\000\000\205\000\205\000\000\000\000\000\000\000\000\003Z\000\000\000\000\000\000\000\205\000\000\007Z\001\222\000\000\000\000\000\205\000\205\005\154\b\210\002\186\000\000\000\000\b\234\004\130\t\133\000\205\000\006\000\205\000\000\000\246\002\194\002\198\002\202\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\004\229\000\000\t\133\000\000\t\133\t\133\003v\001\210\007f\000\000\000\000\003\002\000\000\003z\003~\000\000\000\000\000\000\003\130\000\000\003\006\000\000\003\166\000\000\017\226\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007.\000\000\000\000\000\000\018F\002\186\000\000\000\000\003\246\018^\000\000\000\000\b\150\b\154\b\166\b\222\000\000\000\000\b\174\000\000\b\206\005\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018f\000\000\tN\000\000\029*\000\000\000\000\000\000\000\000\tZ\tr\t\190\005\146\005\150\018z\018\182\000\006\000\000\029K\000\246\002\194\002\198\002\202\002\242\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\029z\000\000\022\246\005\154\b\210\t\133\003v\001\210\b\234\004\130\t\210\003\002\000\000\003z\003~\000\000\000\000\000\000\003\130\000\000\003\006\000\000\003\166\000\000\017\226\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007.\000\000\000\000\000\000\018F\002\186\000\000\000\000\003\246\018^\000\000\000\000\b\150\b\154\b\166\b\222\000\000\000\000\b\174\000\000\b\206\005\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018f\000\000\tN\000\000\029*\000\000\000\000\000\000\000\000\tZ\tr\t\190\005\146\005\150\018z\018\182\000\000\000\000\004\237\015\166\000\000\000\000\000\000\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\246\005\154\b\210\015*\000\000\000\000\b\234\004\130\t\210\000\014\000\018\000\022\000\026\000\030\000\000\000\"\000&\000*\000.\0002\000\000\0006\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\000\000\000F\000\000\000\000\000\000\000\000\000\000\000J\000\000\000N\000R\000V\000Z\000^\000b\000f\000\000\000\000\000\000\000j\000n\000\000\000r\000\000\000v\000\000\000\000\000\000\000\000\000\000\000\000\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\000~\000\130\000\000\000\000\000\000\000\000\000\000\000\134\000\138\000\142\000\000\000\000\000\000\000\000\000\000\000\146\000\150\000\154\000\158\000\000\000\162\000\166\000\170\000\000\000\000\000\000\000\174\000\178\000\182\000\000\000\000\000\000\000\186\004!\000\190\000\194\000\000\000\000\004!\003\022\002\198\004!\000\198\002\146\000\202\006\254\000\000\000\000\002\254\000\000\000\206\000\210\004!\000\214\000\000\000\000\004!\000\000\004!\001\210\000\000\007\030\000\000\000\000\000\000\000\000\003\026\000\000\000\000\t~\004!\000\000\000\000\000\000\000\000\000\000\004!\000\000\000\000\003&\000\000\000\000\011\198\001\190\000\000\004!\000\000\000\000\000\000\004!\002\186\000\000\000\000\004\006\004!\004!\011M\004\n\000\000\004\018\000\000\011\214\000\000\000\000\000\000\000\000\005\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004!\004!\000\000\002\233\005\138\000\000\000\000\000\000\002\233\000\000\000\000\000\000\005\146\005\150\004!\004!\011\222\000\000\004!\004!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\233\000\000\011M\n\006\000\000\011M\012\006\004!\005\154\000\n\000\000\000\000\011M\001\006\004\130\000\000\011M\000\000\004!\003\022\002\198\006\030\002\233\002\146\002\233\000\000\000\000\000\000\002\254\001\n\000\000\002\233\000\000\000\000\002\158\000\000\002\233\000\000\002\233\001\210\000\000\000\000\000\000\001\014\001\018\001\022\0036\001\030\001\"\002\233\002\233\000\000\000\000\000\000\000\000\000\000\003:\000\000\001.\006>\000\000\000\000\0032\001\190\0016\000\000\000\000\000\000\001:\000\000\002\186\000\000\000\000\004\006\000\000\002\233\000\000\004\n\000\000\004\018\005z\000\000\000\000\000\000\002\233\000\000\005\134\000\000\000\000\001>\001B\001F\001J\001N\000\000\004\185\000\000\001R\005\138\007M\000\246\001V\000\000\002\"\007M\000\000\005\146\005\150\000\000\005\218\001Z\000\000\000\000\000\000\018\246\000\000\001^\000\000\000\000\000\000\003v\000\000\000\000\000\000\007M\000\000\001\154\006B\000\000\000\000\005\154\000\000\018\250\001\158\000\000\001\162\004\130\001\006\019\"\001\166\000\000\001\170\001\174\003\022\002\198\t\174\007M\002\146\000\000\000\000\000\000\018F\002\254\001\n\000\000\007M\018^\000\000\002\158\000\000\007M\007M\000\238\001\210\000\000\000\000\000\000\001\014\001\018\001\022\0036\001\030\001\"\007M\007M\000\000\019\194\000\000\000\000\000\000\003:\000\000\001.\006>\000\000\000\000\0032\001\190\0016\000\000\018z\019\214\001:\000\000\002\186\004\185\000\000\004\006\000\000\007M\000\000\004\n\000\000\004\018\005z\000\000\000\000\000\000\007M\000\000\005\134\019\230\000\000\001>\001B\001F\001J\001N\000\000\000\000\000\000\001R\005\138\000\000\025\022\001V\000\000\000\000\000\000\000\000\005\146\005\150\000\000\005\218\001Z\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\001\154\006B\000\000\000\000\005\154\000\000\000\000\001\158\000\000\001\162\004\130\001\006\000\000\001\166\000\000\001\170\001\174\003\022\002\198\011\202\000\000\002\146\000\000\000\000\000\000\000\000\002\254\001\n\000\000\000\000\000\000\000\000\002\158\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\001\014\001\018\001\022\0036\001\030\001\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003:\000\000\001.\006>\002\233\002\233\0032\001\190\0016\000\000\000\000\000\000\001:\000\000\002\186\000\000\000\000\004\006\000\000\000\000\000\000\004\n\000\000\004\018\005z\002\233\000\000\000\000\002\233\000\000\005\134\002\233\000\n\001>\001B\001F\001J\001N\002\233\000\000\000\000\001R\005\138\000\000\002\233\001V\000\000\002\233\002\233\000\000\005\146\005\150\000\246\005\218\001Z\002\"\000\000\000\000\000\000\000\000\001^\002\233\000\000\000\000\000\000\000\000\018\246\000\000\000\000\000\000\001\154\006B\003v\000\000\005\154\000\000\002\233\001\158\000\000\001\162\004\130\001\006\000\000\001\166\018\250\001\170\001\174\003\022\002\198\014z\019\"\002\146\000\000\000\000\000\000\000\000\002\254\001\n\000\000\000\000\000\000\000\000\002\158\018F\000\000\000\000\000\000\001\210\018^\000\000\000\000\001\014\001\018\001\022\0036\001\030\001\"\000\000\000\000\000\000\002\233\000\000\000\000\000\000\003:\000\000\001.\006>\019\194\000\000\0032\001\190\0016\000\000\000\000\000\000\001:\000\000\002\186\000\000\000\000\004\006\018z\019\214\000\000\004\n\004\185\004\018\005z\000\000\000\000\000\000\000\000\000\000\005\134\000\000\000\000\001>\001B\001F\001J\001N\000\000\019\230\000\000\001R\005\138\000\000\000\000\001V\000\000\000\000\000\000\000\000\005\146\005\150\000\000\005\218\001Z\000\000\000\000\002\233\000\000\000\000\001^\000\000\000\000\000\000\002\233\000\000\000\000\000\000\002\233\000\000\001\154\006B\002\233\002\233\005\154\002\233\002\233\001\158\002\233\001\162\004\130\002\233\000\000\001\166\000\n\001\170\001\174\000\000\002\233\000\000\000\000\000\000\002\233\000\000\002\233\000\000\002\233\000\000\002\233\002\233\000\n\001*\002\233\0072\000\000\002\233\000\000\002\233\002\233\016\006\002\233\002\233\002\233\002\233\002\233\002\233\002\233\002\233\002\233\002\233\000\000\002\233\002\233\002\233\001\202\001\206\002\233\002\233\000\000\002\233\002\233\002\233\002\233\002\233\002\233\000\n\002\233\000\n\002\233\002\233\000\000\000\000\000\n\000\000\001\210\001\250\001\230\000\000\000\000\002\233\002\233\002\233\002\233\000\000\001\242\000\000\002\233\002\233\002\233\002\233\002\233\002\002\016F\000\000\002\233\002\233\002\233\001\246\002\162\000\000\000\000\002\233\003\134\002\174\000\000\002\186\004.\004:\000\000\000\000\000\000\000\000\004F\002\233\002\233\000\000\005U\005U\002\233\002\233\002\233\005U\002\233\005U\005U\000\000\005U\002\233\005U\005U\000\000\000\000\005U\004J\000\000\005U\005U\005U\000\000\005U\005U\005U\005U\000\000\005U\000\000\005U\000\000\000\000\000\000\000\000\000\000\000\000\005U\000\000\0076\000\000\000\000\005U\005U\005U\000\000\000\000\005U\005U\005U\005U\000\000\005U\000\000\000\000\005U\005U\000\000\000\000\000\000\000\000\005U\005U\005U\000\000\000\000\005U\005U\005U\000\000\000\000\000\000\000\000\000\000\005U\005U\000\000\000\000\000\000\000\000\000\000\005U\000\000\000\000\000\000\005U\005U\000\000\005U\000\000\005U\000\000\000\000\000\000\000\000\005U\005U\005U\000\000\005U\005U\005U\005U\000\000\005U\005U\000\000\000\000\000\000\005U\000\000\005U\005U\000\000\000\000\002\166\005U\000\000\000\000\000\000\021r\005U\000\000\011i\000\000\005U\011i\005U\005U\011i\011i\000\000\005U\011i\000\000\011i\000\000\000\000\011i\000\000\000\000\000\000\000\000\011i\011i\000\000\011i\011i\006f\011i\000\000\011i\000\000\000\000\001\202\001\206\011i\004\177\000\000\011i\000\000\000\000\004\177\000\000\000\000\000\000\000\000\011i\000\000\011i\000\000\000\000\011i\011i\001\210\001\250\001\230\000\000\000\000\000\000\011i\000\000\004\177\011i\001\242\000\000\011i\011i\000\000\011i\000\000\011i\000\000\000\000\000\000\000\000\011i\001\246\002\162\000\000\000\000\000\000\000\000\002\174\004\177\002\186\004.\004:\011i\000\000\000\000\000\000\004F\004\177\000\000\000\000\011i\011i\004\177\002\234\011i\000\000\011i\000\000\000\000\000\000\000\000\005\182\000\000\000\000\000\000\004\177\004\177\004J\011i\011i\000\000\011i\011i\000\000\011i\000\000\011i\006\253\011i\000A\011i\000\000\011i\000A\000A\000\000\000A\000A\000\000\000\000\000\000\004\177\000A\000\000\000\000\000\000\000\000\000\000\006\253\000\000\004\177\000\246\000\000\000A\002\202\000\000\000\000\000A\000\000\000A\000A\rQ\r=\000\000\000\000\004\229\000A\000\000\000A\000\000\000\000\003v\000A\000A\000\000\000A\000A\000A\000A\000A\000\000\000\000\rQ\003\130\000A\002.\000\000\000A\0022\017\226\000\000\000A\000A\000A\000A\002\214\000\000\000A\025\182\000A\000A\002>\018F\000\000\002F\r=\000\000\018^\000\000\000\000\000A\000\000\000\000\000\000\000\000\000\000\000\000\000A\000A\000A\000A\000A\006\249\000\000\000=\000\000\000\000\018f\000=\000=\000\000\000=\000=\002J\000\000\000\000\000\000\000=\000\000\000\000\000\000\018z\018\182\006\249\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=\022\246\000=\000\000\000\000\000\000\000=\000=\000\000\000=\000=\000=\000=\000=\000\000\000\000\002N\000\000\000=\000\000\000\000\000=\000\000\000\000\000\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\133\r\145\000\000\000\000\000=\000\000\000\000\000\000\003\158\000\000\002\198\000=\000=\000=\000=\000=\007\t\003j\012\217\000\000\005\133\003\146\012\217\012\217\005\133\012\217\012\217\000\000\000\000\001\210\000\000\012\217\000\000\000\000\000\000\000\000\000\000\007\t\000=\000=\000\000\000\000\012\217\000=\000=\000=\012\217\000\000\012\217\012\217\000\000\000\000\003\154\000\000\000\000\012\217\000\000\012\217\000\000\000\000\002\186\012\217\012\217\000\000\012\217\012\217\012\217\012\217\012\217\000\000\000\000\000\000\000\000\012\217\000\000\000\000\012\217\000\000\000\000\000\000\012\217\012\217\012\217\012\217\r\145\r\145\012\217\000\000\012\217\012\217\000\000\000\000\007B\000\000\000\000\000\000\000\000\005\133\000\000\012\217\000\000\000\000\000\000\r\145\000\000\r\145\012\217\012\217\012\217\012\217\012\217\007\005\005\133\012\213\000\000\005\133\000\000\012\213\012\213\000\000\012\213\012\213\000\000\000\000\000\000\000\000\012\213\000\000\000\000\000\000\000\000\000\000\007\005\012\217\012\217\000\000\000\000\012\213\012\217\012\217\012\217\012\213\000\000\012\213\012\213\000\000\000\000\000\000\000\000\000\000\012\213\000\000\012\213\000\000\000\000\000\000\012\213\012\213\000\000\012\213\012\213\012\213\012\213\012\213\000\000\001\202\002\142\000\000\012\213\002\146\000\000\012\213\000\000\000\000\000\000\012\213\012\213\012\213\012\213\000\000\000\000\012\213\000\000\012\213\012\213\001\210\001\250\001\230\002\150\000\000\000\000\000\000\000\000\000\000\012\213\001\242\000\000\000\000\000\000\000\000\000\000\012\213\012\213\012\213\012\213\012\213\000\000\000\000\002\154\002\162\012\245\000\000\000\000\012\245\002\174\000\000\002\186\004.\004:\000\000\000\000\000\000\000\000\022N\012\245\022R\000\000\000\000\012\213\012\213\012\245\tq\tq\012\213\012\213\012\213\tq\000\000\001\206\tq\000\000\000\000\012\245\000\000\004J\000\000\000\000\tq\012\245\000\000\tq\tq\tq\005\150\tq\tq\tq\012\245\000\000\000\000\000\000\012\245\000\000\022^\001\021\000\000\012\245\000\000\tq\001\021\000\000\000\000\000\000\000\000\tq\tq\000\000\000\000\tq\000\000\022b\002\170\000\000\tq\000\000\000\000\012\245\tq\000\000\001\021\012\245\000\000\tq\tq\tq\000\000\000\000\000\000\000\000\000\000\012\245\012\245\000\000\000\000\012\245\tq\tq\000\000\000\000\000\000\b\194\001\021\tq\003\018\000\000\000\000\004\170\000\000\000\000\tq\001\021\012\245\000\000\000\000\000\000\001\021\tq\tq\tq\000\000\tq\tq\000\000\000\000\000\000\000\000\000\000\000\000\001\021\001\021\tq\000\000\tq\tq\000\000\000\000\000\000\tq\000\000\000\000\000\000\000\000\tq\000\000\000\000\000\000\tq\000\000\tq\tq\r\017\r\017\000\000\000\000\001\021\r\017\000\000\001\206\r\017\000\000\000\000\000\000\000\000\001\021\000\000\000\000\004\202\000\000\000\000\r\017\r\017\r\017\000\000\r\017\r\017\r\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\017\000\000\000\000\000\000\000\000\000\000\r\017\r\017\000\000\000\000\r\017\000\000\000\000\002\170\000\000\r\017\000\000\000\000\000\000\r\017\000\000\t&\000\000\000\000\r\017\r\017\r\017\000\000\002\014\004\177\000\000\000\000\004\177\000\000\000\000\002\018\000\000\r\017\r\017\002\026\000\000\000\000\000\000\004\177\r\017\000\000\000\000\001\210\004\170\004\177\000\000\r\017\000\000\000\000\000\000\000\000\000\000\000\000\r\017\r\017\r\017\004\177\r\017\r\017\003Z\000\000\000\000\004\177\000\000\000\000\007Z\001\222\r\017\000\000\r\017\r\017\004\177\000\000\002\186\r\017\004\177\000\000\000\000\000\000\r\017\004\177\002\234\000\000\r\017\000\000\r\017\r\017\tu\tu\000\000\000\000\001\205\tu\000\000\001\206\tu\001\205\000\000\000\000\000\000\004\177\000\000\000\000\tu\004\177\007f\tu\tu\tu\000\000\tu\tu\tu\000\000\004\177\004\177\001\205\004\177\004\177\000\000\004\221\000\000\004\177\000\000\tu\023\030\000\000\000\000\000\000\000\000\tu\tu\000\000\000\000\tu\004\177\000\000\002\170\001\205\tu\000\000\000\000\004\177\tu\000\000\003v\000\000\001\205\tu\tu\tu\000\000\001\205\001\205\000\238\000\000\000\000\000\000\000\000\000\000\000\000\tu\tu\000\000\004\177\001\205\001\205\023\142\tu\005\137\r\145\000\000\004\170\004\177\000\000\tu\018F\000\000\004\177\002\234\000\238\018^\tu\tu\tu\000\000\tu\tu\000\000\005\137\000\000\001\205\004\177\005\137\0242\024B\tu\000\006\tu\tu\001\205\002\194\002\198\tu\002\242\002\146\000\000\000\000\tu\000\000\002\254\000\000\tu\000\000\tu\tu\000\000\004\177\004\014\000\000\004\221\001\210\000\000\000\000\000\000\003\002\004\177\003z\003~\0256\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007.\000\000\000\000\000\000\000\000\002\186\r\145\r\145\003\246\000\000\000\000\000\000\b\150\b\154\b\166\b\222\000\000\000\000\b\174\005\137\b\206\005\134\000\000\000\000\000\000\r\145\000\000\r\145\000\000\000\000\000\000\tN\000\000\000\000\005\137\000\000\000\000\005\137\tZ\tr\t\190\005\146\005\150\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\002\194\002\198\000\000\002\242\002\146\000\000\000\000\005\154\b\210\002\254\000\000\000\000\b\234\004\130\t\210\000\000\000\000\015>\000\000\000\000\001\210\000\000\000\000\000\000\003\002\000\000\003z\003~\000\000\000\000\000\000\000\000\000\000\003\006\000\000\003\166\000\000\000\000\000\000\003\218\003\222\000\000\003\226\003\238\003\250\004\002\007.\000\000\001\202\002\142\000\000\002\186\002\146\000\000\003\246\000\000\000\000\000\000\b\150\b\154\b\166\b\222\000\000\000\000\b\174\000\000\b\206\005\134\001\210\001\250\001\230\000\000\000\000\000\000\000\000\000\000\000\000\tN\001\242\000\000\000\000\000\000\000\000\000\000\tZ\tr\t\190\005\146\005\150\000\000\000\000\002\154\002\162\000\246\000\000\000\000\002\202\002\174\000\000\002\186\004.\004:\000\000\000\000\000\000\000\000\022N\029z\027j\000\000\000\000\005\154\b\210\003v\000a\000\000\b\234\004\130\t\210\000a\000\000\000a\000a\000\000\000\000\003\130\000\000\004J\000\000\000\000\000a\017\226\000\000\000a\000a\000\000\005\150\000a\000a\000a\025\182\t\029\000\000\000\000\018F\000\000\027v\000\000\000\000\018^\000\000\000a\000\000\000\000\000\000\000\000\000\000\000a\000a\000\000\000\000\000a\000\000\022b\000a\000\000\000a\000\000\000\000\018f\000a\000\000\000\000\029*\000\000\000a\000a\000a\000\000\000\000\000\000\000\000\000\000\018z\018\182\000\000\000\000\004\237\000a\000a\000\000\000\000\000\000\000\000\000\000\000a\000a\000\000\000\000\000a\000\000\000\000\000a\000\000\022\246\000\000\000\000\000\000\000\000\000a\000a\000a\000\000\000a\000a\000\000\000\000\001\029\000\000\t\029\000\000\000\000\001\029\000a\r\021\r\021\000a\000\000\r\157\r\021\000a\000\000\r\021\r\157\000\000\000a\000\000\000\000\000\000\000a\004\154\000a\001\029\r\021\r\021\r\021\000\000\r\021\r\021\r\021\000\000\000\000\000\000\r\157\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\021\000\000\000\000\001\029\000\000\020\030\r\021\r\021\004\213\000\000\r\021\000\000\001\029\020.\r\157\r\021\000\000\001\029\000\000\r\021\000\000\000\000\000\000\r\157\r\021\r\021\r\021\000\000\r\157\r\157\000\238\001\029\000\000\003v\000\000\000\000\000\000\r\021\r\021\000\000\000\000\r\157\r\157\000\000\r\021\000\000\000\000\000\000\r\021\000\000\000\000\r\021\000\000\000\000\000\000\020Z\001\029\000\000\r\021\r\021\r\021\000\000\r\021\r\021\018F\001\029\000\000\r\157\000\000\018^\000\000\000\000\r\021\000\000\r\021\r\021\r\157\003%\003%\r\021\000\000\000\000\003%\020\134\r\021\003%\000\000\000\000\r\021\000\000\r\021\r\021\001\202\001\206\000\000\000\000\003%\003%\003%\000\000\003%\003%\003%\000\000\000\000\000\000\000\000\000\000\004\213\000\000\000\000\000\000\001\210\001\250\003%\000\000\000\000\020\234\000\000\000\000\003%\004\146\000\000\000\000\003%\000\000\000\000\000\000\000\000\003%\000\000\000\000\000\000\003%\000\000\001\246\002\170\000\000\003%\003%\003%\002\174\016\"\002\186\004.\004:\000\000\000\000\000\000\002\014\004F\003%\003%\000\000\000\000\000\000\002\018\000\000\003%\000\000\002\026\000\000\003%\000\000\000\000\003%\000\000\000\000\001\210\000\000\000\000\004J\003%\003%\003%\000\000\003%\003%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003Z\003%\000\000\003%\003%\000\000\007Z\001\222\003%\000\000\000\000\000\000\000\000\003%\002\186\011u\000\000\003%\011u\003%\003%\003\022\002\198\000\000\000\000\002\146\000\000\006\254\000\000\000\000\002\254\000\000\000\000\000\000\000\000\011u\011u\000\000\011u\011u\000\000\001\210\017f\007\030\000\000\000\000\007f\000\000\003\026\002\014\000\000\t~\000\000\000\000\000\000\000\000\002\018\000\000\000\000\011u\002\026\003&\000\000\000\000\0032\001\190\000\000\000\000\001\210\000\000\000\000\000\000\002\186\000\000\000\000\004\006\000\000\000\000\011u\004\n\000\000\004\018\005z\011\214\000\000\003Z\000\000\000\000\005\134\000\000\000\000\007Z\001\222\000\000\000\000\011q\000\000\000\000\011q\002\186\005\138\003\022\002\198\000\000\000\000\002\146\000\000\000\000\005\146\005\150\002\254\005\218\011u\000\000\011u\011q\011q\000\000\011q\011q\000\000\001\210\000\000\000\000\000\000\000\000\011u\000\000\003\026\011u\011u\007f\005\154\003\158\011u\002\198\011u\000\000\004\130\011q\011u\003&\003j\000\000\006\026\001\190\003\146\000\000\000\000\b^\000\000\000\000\002\186\000\000\001\210\004\006\000\000\000\000\011q\004\n\000\000\004\018\005z\000\000\000\000\000\000\000\000\000\000\005\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\154\001\229\001\229\005\138\000\000\000\000\001\229\000\000\002\186\001\229\000\000\005\146\005\150\000\000\005\218\011q\000\000\011q\000\000\000\000\001\229\001\229\001\229\000\000\001\229\001\229\001\229\000\000\000\000\011q\000\000\000\000\011q\011q\000\000\005\154\000\000\011q\001\229\011q\007B\004\130\017\162\011q\001\229\001\229\000\000\000\000\001\229\002\014\000\000\000\000\000\000\001\229\000\000\000\000\002\018\001\229\000\000\000\000\002\026\000\000\001\229\001\229\001\229\000\000\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\001\229\001\229\000\000\000\000\000\000\000\000\000\000\001\229\000\000\000\000\003Z\001\229\000\000\000\000\001\229\000\000\007Z\001\222\000\000\000\000\000\000\001\229\001\229\001\229\002\186\001\229\001\229\000\000\000\000\000\000\003\022\002\198\000\000\000\000\002\146\001\229\006\254\001\229\001\229\002\254\000\000\000\000\001\229\000\000\000\000\000\000\000\000\001\229\000\000\000\000\001\210\005\014\007\030\001\229\000\000\000\000\007f\003\026\000\000\000\000\t~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003&\000\000\000\000\011\198\001\190\000\000\000\000\000\000\000\000\000\000\000\000\002\186\000\000\000\000\004\006\000\000\000\000\011M\004\n\000\000\004\018\000\000\011\214\000\000\000\000\000\000\000\000\005\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004]\000\000\000\000\005\138\000\000\005\225\005\225\000\000\000\000\000\000\005\225\005\146\005\150\005\225\000\000\011\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\225\000\000\005\225\000\000\005\225\011M\005\225\000\000\011M\011M\000\000\005\154\000\000\000\000\000\000\011M\000\000\004\130\005\225\011M\004]\000\000\000\000\000\000\005\225\005\225\000\000\000\000\000\000\000\000\005\225\000\000\000\000\005\225\000\000\000\000\000\000\005\225\000\000\001\006\000\000\000\000\005\225\005\225\005\225\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\000\000\000\000\002\158\000\000\005\225\005\225\000\000\000\000\005\225\000\000\000\000\001\014\001\018\001\022\001\026\001\030\001\"\000\000\005\225\005\225\005\225\000\000\005\225\005\225\001&\000\000\001.\0012\b\014\000\000\000\000\000\000\0016\000\000\000\000\005\225\001:\000\000\005\225\005\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\225\000\000\000\000\000\000\000\000\000\000\000\000\001>\001B\001F\001J\001N\003m\003m\000\000\001R\000\000\003m\000\000\001V\003m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001Z\000\000\000\000\003m\003m\003m\001^\003m\003m\003m\000\000\003m\000\000\000\000\000\000\000\000\001\154\028B\000\000\000\000\000\000\003m\003m\001\158\003m\001\162\003m\003m\003m\001\166\000\000\001\170\001\174\005]\000\000\000\000\003m\000\000\000\000\000\000\003m\000\000\000\000\000\000\000\000\003m\003m\003m\000\000\000\000\000\000\000\000\005a\000\000\000\000\003m\000\000\000\000\000\000\003m\000\000\000\000\000\000\000\000\003m\003m\003m\000\000\000\000\003m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003m\003m\003m\000\000\003m\003m\000\000\000\000\000\000\003m\005]\000\000\000\000\000\000\001\202\001\206\000\000\003m\003m\003m\003m\003m\000\000\003m\003m\005\213\005\213\000\000\000\000\005a\005\213\000\000\003m\005\213\001\210\001\250\003m\003m\000\000\000\000\003m\000\000\000\000\000\000\005\213\000\000\005\213\000\000\005\213\000\000\005\213\003m\000\000\000\000\000\000\000\000\000\000\001\246\002\178\000\000\000\000\000\000\005\213\002\174\000\000\002\186\004.\004:\005\213\005\213\000\000\000\000\004F\000\000\bZ\000\000\000\000\005\213\000\000\000\000\000\000\005\213\000\000\000\000\007a\000\000\005\213\005\213\000\238\000\000\000\000\000\000\000\000\004J\000\000\000\000\027&\000\000\000\000\000\000\n\226\000\000\000\000\000\000\007a\000\000\005\213\005\213\007a\000\000\005\213\t\129\027\018\000\000\000\000\011\026\0112\011:\011\"\011B\005\213\005\213\005\213\000\000\005\213\005\213\000\000\n\226\000\000\011J\011R\r\n\t\129\000\000\t\129\t\129\000\000\005\213\000\000\011Z\005\213\005\213\011\026\0112\011:\011\"\011B\000\238\000\000\000\000\000\000\000\000\005\213\000\000\000\000\000\000\011J\011R\000\000\000\000\n\234\011*\011b\011j\011z\000\000\011Z\000\000\000\000\000\000\000\000\007a\011\130\000\000\000\238\000\000\000\000\000\000\000\000\000\000\000\000\011\138\000\000\000\000\000\000\000\000\000\000\n\234\011*\011b\011j\011z\000\000\000\000\000\000\011\170\000\000\011\178\011r\011\130\000\000\000\000\001\006\000\000\011\146\000\000\000\000\000\000\011\138\000\000\000\000\000\000\011\154\011\162\000\000\000\000\000\000\000\000\001\n\000\000\000\000\000\000\011\170\000\000\011\178\011r\000\000\000\000\000\000\000\000\t\129\011\146\001\014\001\018\001\022\001\026\001\030\001\"\000\000\011\154\011\162\000\000\000\000\000\000\000\000\001&\000\000\001.\0012\000\000\000\000\b\245\b\245\0016\000\000\000\000\b\245\001:\000\000\b\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\245\000\000\b\245\000\000\b\245\000\000\b\245\000\000\001>\001B\001F\001J\001N\000\000\000\000\000\000\001R\000\000\b\245\000\000\001V\000\000\000\000\000\000\b\245\b\245\000\000\000\000\000\000\001Z\000\000\000\000\000\000\b\245\000\000\001^\000\000\b\245\000\000\000\000\000\000\000\000\b\245\b\245\b\245\001\154\028^\000\000\000\000\000\000\000\000\000\000\001\158\000\000\001\162\000\000\000\000\000\000\001\166\000\000\001\170\001\174\b\245\000\000\000\000\000\000\b\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\245\b\245\b\245\000\000\b\245\b\245\000\000\000\000\r\221\r\221\000\000\000\000\000\000\r\221\b\245\000\000\r\221\b\245\000\000\000\000\000\000\b\245\000\000\001\202\001\206\000\000\000\000\r\221\000\000\r\221\005\014\r\221\b\245\r\221\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\210\001\250\r\221\000\000\000\000\000\000\000\000\000\000\r\221\r\221\000\000\000\000\000\000\000\000\004R\000\000\000\000\r\221\000\000\000\000\000\000\r\221\000\000\001\246\002\170\000\000\r\221\r\221\r\221\002\174\000\000\002\186\004.\004:\000\000\000\000\000\000\000\000\004F\000\000\016n\000\000\000\000\000\000\000\000\000\000\r\221\000\000\000\000\000\000\r\221\000\000\000\000\000\000\000\000\001\202\001\206\000\000\000\000\004J\r\221\r\221\r\221\000\000\r\221\r\221\r\225\r\225\000\000\000\000\004b\r\225\000\000\000\000\r\225\001\210\001\250\r\221\000\000\000\000\000\000\r\221\000\000\000\000\000\000\r\225\000\000\r\225\000\000\r\225\000\000\r\225\r\221\000\000\000\000\000\000\000\000\000\000\001\246\002\178\000\000\000\000\000\000\r\225\002\174\000\000\002\186\004.\004:\r\225\r\225\000\000\000\000\004F\000\000\004R\000\000\000\000\r\225\000\000\000\000\000\000\r\225\000\000\000\000\000\000\000\000\r\225\r\225\r\225\000\000\000\000\000\000\001\213\004J\000\000\000\000\005%\001\213\000\000\001\206\001\213\000\000\000\000\000\000\000\000\000\000\r\225\000\000\t]\000\000\r\225\001\213\027\018\000\000\000\000\001\213\000\000\001\213\000\000\000\000\r\225\r\225\r\225\000\000\r\225\r\225\000\000\000\000\000\000\001\213\004b\000\000\000\000\000\000\000\000\001\213\001\213\r\225\000\000\000\000\000\000\r\225\002\170\000\000\001\213\000\000\000\000\000\000\001\213\000\000\000\000\000\000\r\225\001\213\001\213\001\213\000\000\000\000\000\000\003Q\000\000\000\000\000\000\000\000\003Q\000\000\001\206\003Q\000\000\000\000\000\000\000\000\000\000\001\213\001\213\tY\000\000\004\170\003Q\000\000\000\000\000\000\003Q\000\000\003Q\000\000\000\000\001\213\001\213\000\000\000\000\001\213\001\213\000\000\000\000\000\000\003Q\000\000\000\000\000\000\000\000\001\213\003Q\001\209\000\000\000\000\000\000\000\000\001\213\002\170\000\000\003Q\000\000\001\213\000\000\003Q\000\000\000\000\000\000\001\213\003Q\003Q\003Q\000\000\000\000\000\000\003M\000\000\000\000\000\000\000\000\003M\000\000\001\206\003M\000\000\000\000\000\000\000\000\000\000\003Q\003Q\tY\000\000\004\170\003M\000\000\000\000\000\000\003M\000\000\003M\000\000\000\000\003Q\003Q\000\000\000\000\003Q\003Q\000\000\000\000\000\000\003M\000\000\000\000\000\000\000\000\003Q\003M\001\209\000\000\000\000\000\000\000\000\003Q\002\170\000\000\003M\000\000\003Q\000\000\003M\000\000\000\000\000\000\003Q\003M\003M\003M\000\000\000\000\000\000\000\189\000\000\000\000\000\000\000\000\000\189\000\000\000\000\000\189\000\000\000\000\000\000\000\000\000\000\003M\003M\000\000\000\000\004\170\000\189\000\000\000\189\000\000\000\189\000\000\000\189\000\000\000\000\003M\003M\000\000\000\000\003M\003M\000\000\000\000\000\000\000\189\000\000\000\000\000\000\000\000\003M\000\189\000\000\001\001\000\000\000\189\000\000\003M\001\001\000\000\000\189\001\001\003M\000\000\000\189\000\000\000\000\000\000\003M\000\189\000\189\000\238\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\000\000\000\000\000\000\189\001\001\000\000\000\000\000\189\000\000\000\000\001\001\000\000\000\000\000\000\001\001\000\000\000\000\000\189\000\189\001\001\000\000\000\189\000\189\001\001\000\000\000\000\000\000\000\000\001\001\001\001\000\238\000\189\000\000\000\000\000\000\000\000\000\000\000\189\000\189\000\000\000\000\001\001\001\001\000\000\000\000\000\000\000\000\000\189\001\001\000\189\000\197\000\000\001\001\000\000\000\000\000\197\000\000\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\197\000\000\000\197\017\178\000\197\000\000\000\197\001\001\000\000\000\000\002\014\000\000\000\000\001\001\001\001\000\000\000\000\002\018\000\197\000\000\000\000\002\026\000\000\001\001\000\197\001\001\000\193\000\000\000\197\001\210\000\000\000\193\000\000\000\197\000\193\000\000\000\000\000\197\000\000\000\000\000\000\000\000\000\197\000\197\000\238\000\193\003Z\000\193\000\000\000\193\000\000\000\193\007Z\001\222\000\000\000\197\000\197\000\000\000\000\000\000\002\186\000\000\000\197\000\193\000\000\000\000\000\197\000\000\000\000\000\193\000\000\000\000\000\000\000\193\000\000\000\000\000\197\000\197\000\193\000\000\000\197\000\197\000\193\000\000\000\000\000\000\000\000\000\193\000\193\000\238\000\197\000\000\007f\000\000\001\177\000\000\000\197\000\197\000\000\001\177\000\193\000\193\001\177\000\000\000\000\000\000\000\197\000\193\000\197\000\000\000\000\000\193\000\000\001\177\000\000\000\000\000\000\001\177\000\000\001\177\000\000\000\193\000\193\000\000\000\000\000\193\000\193\000\000\000\000\000\000\000\000\001\177\001\177\000\000\000\000\000\193\000\000\001\177\000\000\r\217\r\217\000\193\000\193\005]\r\217\000\000\001\177\r\217\000\000\000\000\001\177\000\193\000\000\000\193\000\000\001\177\001\177\001\177\r\217\000\000\r\217\001\225\r\217\000\000\r\217\000\000\001\225\000\000\000\000\001\225\000\000\000\000\000\000\000\000\000\000\001\177\r\217\000\000\000\000\001\177\001\225\000\000\r\217\r\217\001\225\000\000\001\225\000\000\000\000\001\177\001\177\r\217\000\000\001\177\001\177\r\217\000\000\000\000\001\225\005]\r\217\r\217\r\217\001\177\001\225\000\000\r\213\r\213\000\000\001\177\001\177\r\213\000\000\001\225\r\213\001\177\000\000\001\225\000\000\000\000\r\217\001\177\001\225\001\225\r\217\r\213\000\000\r\213\000\000\r\213\000\000\r\213\000\000\000\000\r\217\r\217\r\217\000\000\r\217\r\217\000\000\000\000\001\225\r\213\000\000\000\000\001\225\000\000\000\000\r\213\r\213\r\217\000\000\000\000\000\000\r\217\001\225\001\225\r\213\000\000\001\225\001\225\r\213\000\000\005\014\000\000\r\217\r\213\r\213\r\213\001\225\000\000\000\000\b\249\b\249\000\000\000\000\001\225\b\249\000\000\000\000\b\249\022v\000\000\000\000\000\000\000\000\r\213\001\225\000\000\000\000\r\213\b\249\000\000\b\249\000\000\b\249\000\000\b\249\000\000\000\000\r\213\r\213\r\213\000\000\r\213\r\213\000\000\000\000\000\000\b\249\000\000\000\000\000\000\000\000\007\170\b\249\b\249\r\213\000\000\000\000\000\000\r\213\000\000\000\000\b\249\000\000\000\000\000\000\b\249\000\000\000\000\000\000\r\213\b\249\b\249\000\238\000\000\000\000\000\000\001\209\000\000\000\000\000\000\000\000\001\209\000\000\001\206\001\209\000\000\000\000\000\000\000\000\000\000\b\249\000\000\tY\000\000\b\249\001\209\000\000\000\000\000\000\001\209\000\000\001\209\000\000\000\000\b\249\b\249\b\249\000\000\b\249\b\249\000\000\000\000\000\000\001\209\000\000\000\000\000\000\000\000\b\249\001\209\000\000\b\249\000\000\000\000\000\000\b\249\002\170\000\000\001\209\000\000\000\000\000\000\001\209\017\150\000\000\000\000\b\249\001\209\001\209\001\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\226\000\000\000\000\000\000\000\000\017\154\000\000\000\000\001\209\001\209\000\000\000\000\004\170\000\000\000\000\011\026\0112\011:\011\"\011B\000\000\000\000\001\209\001\209\000\000\000\000\001\209\001\209\000\000\011J\011R\000\000\000\000\000\000\000\000\000\000\001\209\000\000\000\000\011Z\000\000\000\000\000\000\001\209\000\000\000\000\000\000\000\238\001\209\000\000\000\000\000\000\000\000\000\000\001\209\000\000\000\000\000\000\000\000\000\000\n\234\011*\011b\011j\011z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\138\004\185\000\000\000\000\000\000\000\000\000\246\001\202\001\206\002\"\000\000\000\000\000\000\000\000\011\170\017\158\011\178\011r\017\174\000\000\018\246\000\000\000\000\011\146\004\185\000\000\003v\001\210\001\250\001\230\000\000\011\154\011\162\000\000\000\000\000\000\000\000\001\242\018\250\000\000\000\000\000\000\000\000\000\000\019\"\000\000\000\000\000\000\000\000\000\000\001\246\002\162\000\000\000\000\000\000\000\000\002\174\018F\002\186\004.\004:\000\000\018^\000\000\000\000\004F\006\017\006\017\000\000\000\000\000\000\006\017\000\000\000\000\006\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\019\194\000\000\000\000\006\017\004J\006\017\000\000\006\017\000\000\006\017\000\000\000\000\000\000\000\000\018z\019\214\000\000\000\000\004\185\004\185\000\000\006\017\000\000\000\000\000\000\000\000\000\000\006\017\006\017\000\000\000\000\000\000\000\000\bZ\000\000\019\230\006\017\000\000\000\000\000\000\006\017\000\000\000\000\000\000\000\000\006\017\006\017\000\238\000\000\000\000\000\000\006\r\007~\000\000\000\000\000\000\006\r\000\000\000\000\006\r\000\000\000\000\000\000\000\000\000\000\006\017\000\000\000\000\000\000\006\017\006\r\000\000\006\r\000\000\006\r\000\000\006\r\000\000\000\000\006\017\006\017\006\017\000\000\006\017\006\017\000\000\000\000\000\000\006\r\000\000\000\000\000\000\000\000\000\000\006\r\007\250\006\017\000\000\000\000\000\000\006\017\000\000\000\000\006\r\000\000\000\000\000\000\006\r\000\000\000\000\000\000\006\017\006\r\006\r\000\238\000\000\000\000\000\000\r\229\r\229\000\000\000\000\000\000\r\229\000\000\000\000\r\229\000\000\000\000\000\000\000\000\000\000\006\r\000\000\000\000\000\000\006\r\r\229\000\000\r\229\000\000\r\229\000\000\r\229\000\000\000\000\006\r\006\r\006\r\000\000\006\r\006\r\000\000\000\000\000\000\r\229\000\000\000\000\000\000\000\000\000\000\r\229\r\229\006\r\000\000\000\000\000\000\006\r\000\000\000\000\r\229\000\000\000\000\000\000\r\229\000\000\000\000\000\000\006\r\r\229\r\229\000\238\000\000\000\000\000\000\r\233\r\233\000\000\000\000\000\000\r\233\000\000\000\000\r\233\000\000\000\000\000\000\000\000\000\000\r\229\000\000\000\000\000\000\r\229\r\233\000\000\r\233\000\000\r\233\000\000\r\233\000\000\000\000\r\229\r\229\r\229\000\000\r\229\r\229\000\000\000\000\000\000\r\233\000\000\000\000\000\000\000\000\000\000\r\233\007\250\r\229\000\000\000\000\000\000\r\229\000\000\000\000\r\233\000\000\000\000\000\000\r\233\000\000\000\000\000\000\r\229\r\233\r\233\000\238\000\000\000\000\000\000\006)\007~\000\000\000\000\000\000\006)\000\000\000\000\006)\000\000\000\000\000\000\000\000\000\000\r\233\000\000\000\000\000\000\r\233\006)\000\000\006)\000\000\006)\000\000\006)\000\000\000\000\r\233\r\233\r\233\000\000\r\233\r\233\000\000\000\000\000\000\006)\000\000\000\000\000\000\000\000\000\000\006)\007\250\r\233\000\000\000\000\000\000\r\233\000\000\000\000\006)\000\000\000\000\000\000\006)\000\000\000\000\000\000\r\233\006)\006)\000\238\000\000\000\000\000\000\006-\006-\000\000\000\000\000\000\006-\000\000\000\000\006-\000\000\000\000\000\000\000\000\000\000\006)\000\000\000\000\000\000\006)\006-\000\000\006-\000\000\006-\000\000\006-\000\000\000\000\006)\006)\006)\000\000\006)\006)\000\000\000\000\000\000\006-\000\000\000\000\000\000\000\000\000\000\006-\006-\006)\000\000\000\000\000\000\006)\000\000\000\000\006-\000\000\000\000\000\000\006-\000\000\000\000\000\000\006)\006-\006-\006-\000\000\000\000\000\000\006%\006%\000\000\000\000\000\000\006%\000\000\000\000\006%\000\000\000\000\000\000\000\000\000\000\006-\000\000\000\000\000\000\006-\006%\000\000\006%\000\000\006%\000\000\006%\000\000\000\000\006-\006-\006-\000\000\006-\006-\000\000\000\000\000\000\006%\000\000\000\000\000\000\000\000\000\000\006%\007\250\006-\000\000\000\000\000\000\006-\000\000\000\000\006%\000\000\000\000\000\000\006%\000\000\000\000\000\000\b\"\006%\006%\000\238\003\022\002\198\000\000\000\000\002\146\000\000\006\254\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006%\000\000\000\000\001\210\006%\007\030\000\000\000\000\000\000\000\000\003\026\000\000\000\000\t~\006%\006%\006%\003I\006%\006%\000\000\000\000\003I\003&\001\206\003I\011\198\001\190\000\000\000\000\000\000\006%\000\000\000\000\002\186\006%\003I\004\006\000\000\000\000\003I\004\n\003I\004\018\000\000\011\214\006%\000\000\000\000\000\000\005\134\000\000\000\000\000\000\003I\000\000\000\000\000\000\003E\000\000\003I\000\000\005\138\003E\000\000\001\206\003E\002\170\000\000\003I\005\146\005\150\000\000\003I\011\222\000\000\000\000\003E\003I\003I\003I\003E\000\000\003E\000\000\000\000\000\000\000\000\000\000\n\006\000\000\000\000\n\018\000\000\005\154\003E\000\000\000\000\003I\003I\004\130\003E\004\170\000\000\000\000\000\000\000\000\000\000\002\170\000\000\003E\000\000\003I\003I\003E\000\000\003I\003I\000\000\003E\003E\003E\000\000\000\000\000\000\000\000\003I\000\000\000\000\000\000\000\000\000\000\000\000\003I\000\000\000\000\000\000\000\000\003I\003E\003E\001U\000\000\004\170\003I\000\000\001U\000\000\007\249\001U\000\000\007\249\000\000\003E\003E\000\000\000\000\003E\003E\000\000\001U\000\000\001U\000\000\001U\000\000\001U\003E\007\249\007\249\000\000\007\249\007\249\000\000\003E\000\000\000\000\000\000\001U\003E\000\000\000\000\000\000\000\000\001U\003E\000\000\000\000\001U\000\000\000\000\000\000\007\249\001U\000\000\000\000\000\000\001U\000\000\000\000\000\000\000\000\001U\001U\000\238\000\000\000\000\000\000\000\000\001Q\000\000\007\249\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\000\000\001Q\000\000\001Q\000\000\001Q\000\000\001Q\000\000\001U\001U\001U\000\000\001U\001U\000\000\000\000\000\000\007\249\001Q\007\249\000\000\000\000\001U\000\000\001Q\000\000\000\000\000\000\001Q\001U\000\000\005\242\000\000\001Q\007\249\007\249\000\000\001Q\000\000\007\249\001U\007\249\001Q\001Q\000\238\007\249\000\000\000\000\000\000\000\000\000\000\000\000\001\202\001\206\000\000\000\000\001Q\000\000\000\000\000\000\000\000\000\000\001Q\001\141\000\000\000\000\001Q\000\000\001\141\000\000\r5\001\141\001\210\001\250\000\000\000\000\001Q\001Q\001Q\r5\001Q\001Q\001\141\000\000\001\141\000\000\001\141\000\000\001\141\000\000\001Q\000\000\000\000\000\000\000\000\001\246\002\178\001Q\000\000\000\000\001\141\002\174\000\000\002\186\004.\004:\001\141\r5\001Q\000\000\004F\000\000\000\000\r5\000\000\000\000\000\000\000\000\000\000\001\141\000\000\000\000\000\000\000\000\001\141\001\141\001\141\000\000\000\000\000\000\001A\004J\000\000\000\000\005)\001A\000\000\000\165\001A\000\000\000\000\000\000\000\000\000\000\001\141\000\000\000\165\000\000\r5\001A\027\018\001A\000\000\001A\000\000\001A\000\000\000\000\001\141\001\141\001\141\000\000\001\141\001\141\000\000\000\000\000\000\001A\000\000\000\000\000\000\000\000\000\000\001A\000\165\000\000\000\000\000\000\000\000\001\141\000\165\000\000\000\000\000\000\000\000\000\000\001A\000\000\000\000\000\000\001\141\001A\001A\001A\000\000\000\000\000\000\000\000\001\221\000\000\000\000\000\000\000\000\001\221\000\000\016R\001\221\000\000\002\146\000\000\000\000\001A\000\000\000\000\000\000\000\165\000\000\001\221\000\000\000\000\000\000\001\221\000\000\001\221\000\000\001A\001A\001A\000\000\001A\001A\000\000\000\000\000\000\000\000\001\221\000\000\000\000\000\000\000\000\000\000\001\221\000\000\000\000\000\000\000\000\001A\016V\000\000\000\000\001\221\000\000\000\000\000\000\001\221\000\000\000\000\001A\000\000\001\221\001\221\000\000\016b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\185\000\000\000\000\000\000\000\000\000\000\000\000\002\198\000\000\001\221\002\146\000\000\000\000\001\221\000\000\002\254\000\000\000\000\000\000\000\000\000\000\006\185\005\150\001\221\001\221\000\000\001\210\001\221\001\221\000\000\003\002\000\000\000\000\000\000\000\000\000\000\000\000\001\221\000\000\003\006\000\000\003\166\000\000\000\000\001\221\000\000\000\000\003\022\002\198\003\238\001\190\002\146\000\000\006\254\000\000\001\221\002\254\002\186\000\000\000\000\003\246\000\000\000\000\000\000\b\150\b\154\b\166\001\210\000\000\007\030\b\174\000\000\b\206\005\134\003\026\000\000\000\000\t~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\186\000\000\003&\000\000\000\000\014v\001\190\000\000\005\146\005\150\000\000\000\000\000\000\002\186\000\000\000\000\004\006\000\000\000\000\000\000\004\n\000\000\004\018\000\000\011\214\000\000\000\000\000\000\000\000\005\134\000\000\000\000\005\154\b\210\000\000\004\177\000\000\b\234\004\130\004\177\004\177\005\138\000\000\004\177\004\177\000\000\000\000\004\177\004\177\005\146\005\150\004\177\000\000\000\000\004\177\000\000\000\000\000\000\004\177\000\000\004\177\000\000\004\177\000\000\004\177\000\000\004\177\000\000\004\177\000\000\000\000\014\134\004\177\005\154\000\000\000\000\004\177\000\000\004\177\004\130\004\177\000\000\004\177\000\000\bZ\000\000\004\177\004\177\000\000\000\000\000\000\004\177\000\000\000\000\000\000\004\177\004\177\002\234\000\238\004\177\004\177\002\234\000\000\000\000\004\177\002\234\000\000\000\000\000\000\004\177\004\177\006\225\000\000\000\000\000\000\000\000\004\177\004\177\002\198\000\000\004\177\002\146\000\000\000\000\004\177\000\000\002\254\000\000\000\000\000\000\004\177\004\177\006\225\000\000\004\177\004\177\000\000\001\210\004\177\004\177\b\014\003\002\004\177\004\177\004\177\000\000\000\000\000\000\007\170\000\000\003\006\004\177\003\166\000\000\000\000\004\177\026\142\000\000\000\000\004\177\003\238\001\190\004\177\000\000\022v\000\000\004\177\000\000\002\186\000\000\000\000\003\246\000\000\000\000\b}\b\150\b\154\b\166\000\000\b}\000\000\b\174\b}\b\206\005\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b}\000\000\000\000\000\000\b}\000\000\b}\000\000\000\000\000\000\000\000\005\146\005\150\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\b}\000\000\000\000\000\000\000\000\b}\000\000\005\154\b\210\b}\000\000\000\000\b\234\004\130\b}\b}\000\238\000\000\by\000\000\000\000\000\000\000\000\by\000\000\000\000\by\b}\b}\000\000\000\000\000\000\000\000\000\000\b}\000\000\000\000\by\b}\000\000\000\000\by\000\000\by\000\000\000\000\000\000\000\000\b}\b}\b}\000\000\b}\b}\000\000\by\000\000\000\000\000\000\000\000\000\000\by\b}\000\000\000\000\by\000\000\000\000\000\000\b}\by\000\000\000\000\000\000\by\000\000\000\000\000\000\000\000\by\by\000\238\000\000\003=\000\000\000\000\000\000\000\000\003=\000\000\000\000\003=\by\by\000\000\000\000\000\000\000\000\000\000\by\000\000\000\000\003=\by\000\000\000\000\003=\000\000\003=\001\202\001\206\000\000\000\000\by\by\by\000\000\by\by\000\000\003=\016j\000\000\000\000\000\000\000\000\003=\by\000\000\001\210\001\214\000\000\000\000\000\000\by\003=\000\000\000\000\000\000\003=\000\000\000\000\000\000\000\000\003=\003=\003=\000\000\000\000\000\000\000\000\000\000\001\246\002\170\000\000\000\000\000\000\000\000\002\174\000\000\002\186\004.\004:\000\000\003=\000\000\000\000\004F\003=\016n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003=\003=\026\150\000\000\003=\003=\000\000\003\022\002\198\000\000\004J\002\146\000\000\006\254\003=\000\000\002\254\000\000\000\000\000\000\016\202\003=\000\000\000\000\000\000\000\000\003=\001\210\000\000\007\030\000\000\000\000\003=\000\000\003\026\000\000\000\000\t~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\158\000\000\003&\003\022\002\198\0032\001\190\002\146\000\000\006\254\000\000\000\000\002\254\002\186\000\000\000\000\004\006\000\000\000\000\000\000\004\n\000\000\004\018\001\210\011\214\007\030\000\000\000\000\000\000\005\134\003\026\000\000\000\000\t~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\138\000\000\003&\000\000\000\000\011\198\001\190\000\000\005\146\005\150\000\000\000\000\023\014\002\186\000\000\000\000\004\006\000\000\000\000\000\000\004\n\000\000\004\018\000\000\011\214\000\000\000\000\000\000\000\000\005\134\025j\000\000\005\154\000\000\000\000\000\000\000\000\000\000\004\130\000\000\000\000\005\138\003\022\002\198\000\000\000\000\002\146\000\000\006\254\005\146\005\150\002\254\000\000\011\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\210\000\000\007\030\000\000\000\000\000\000\000\000\003\026\000\000\023\166\t~\005\154\000\000\000\000\000\000\005\210\000\000\004\130\000\000\000\000\003&\003\022\002\198\011\198\001\190\002\146\000\000\000\000\000\000\000\000\002\254\002\186\000\000\000\000\004\006\000\000\005\214\000\000\004\n\000\000\004\018\001\210\011\214\000\000\000\000\000\000\000\000\005\134\003\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\138\000\000\003&\000\000\000\000\0032\001\190\000\000\005\146\005\150\000\000\t\157\011\222\002\186\000\000\000\000\004\006\003\022\002\198\000\000\004\n\002\146\004\018\005z\000\000\000\000\002\254\000\000\000\000\005\134\024\006\000\000\005\154\000\000\t\157\000\000\000\000\001\210\004\130\000\000\000\000\005\138\000\000\000\000\003\026\000\000\000\000\000\000\000\000\005\146\005\150\000\000\005\218\000\000\000\000\000\000\000\000\003&\000\000\000\000\0032\001\190\000\000\000\000\000\000\000\000\000\000\000\000\002\186\000\000\006\150\004\006\000\000\005\154\000\000\004\n\000\000\004\018\005z\004\130\000\000\002\233\002\233\000\000\005\134\002\233\000\000\000\000\000\000\000\000\002\233\000\000\000\000\000\000\000\000\000\000\005\138\000\000\000\000\000\000\000\000\002\233\000\000\000\000\005\146\005\150\000\000\005\218\002\233\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\233\000\000\000\000\002\233\002\233\000\000\000\000\005\154\000\000\t\157\000\000\002\233\000\000\004\130\002\233\000\000\000\000\002\233\002\233\000\000\002\233\002\233\000\000\000\000\000\000\004\153\004\153\002\233\000\000\004\153\000\000\000\000\000\000\000\000\004\153\003=\000\000\000\000\000\000\002\233\003=\004\153\000\000\003=\000\000\004\153\000\000\002\233\002\233\000\000\002\233\000\000\004\153\024V\003=\000\000\024n\000\000\003=\000\000\003=\000\000\000\000\000\000\000\000\004\153\000\000\000\000\004\153\004\153\000\000\002\233\003=\016j\000\000\002\233\004\153\002\233\003=\004\153\000\000\000\000\000\238\004\153\000\000\004\153\004\153\003=\000\000\000\000\000\000\003=\004\153\000\000\000\000\000\000\003=\003=\003=\000\000\000\000\000\000\r-\000\000\004\153\000\000\000\000\r-\000\000\000\000\r-\000\000\004\153\004\153\000\000\000\000\003=\000\000\000\000\000\000\003=\r-\000\000\000\000\000\000\r-\000\000\r-\000\000\000\000\003=\003=\026\198\005U\003=\003=\004\153\000\000\000\000\r-\000\000\000\000\004\153\000\000\000\000\r-\000\000\000\000\000\000\000\000\016\202\003=\000\000\000\000\r-\000\000\003=\000\000\r-\000\000\000\000\000\000\000\000\r-\r-\000\000\003\022\002\198\000\000\000\000\002\146\000\000\006\254\000\000\000\000\002\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r-\000\000\000\000\001\210\r-\007\030\000\000\000\000\000\000\000\000\003\026\000\000\000\000\t~\r-\r-\002\138\005\173\r-\r-\000\000\000\000\005\173\003&\000\000\005\173\t\170\001\190\r-\000\000\000\000\000\000\027\134\000\000\002\186\r-\005\173\004\006\000\000\000\000\005\173\004\n\005\173\004\018\000\000\011\214\r-\000\000\000\000\000\000\005\134\000\000\000\000\000\000\005\173\000\000\000\000\000\000\000\000\000\000\005\173\000\000\005\138\000\000\000\000\000\000\bZ\000\000\000\000\005\173\005\146\005\150\000\000\005\173\000\000\000\000\000\000\000\000\005\173\005\173\000\238\000\000\000\000\000\000\000\000\005\181\000\000\000\000\000\000\000\000\005\181\000\000\000\000\005\181\005\154\000\000\000\000\000\000\005\173\005\173\004\130\000\000\005\173\000\000\005\181\000\000\000\000\000\000\005\181\000\000\005\181\000\000\005\173\005\173\000\000\000\000\005\173\005\173\000\000\000\000\000\000\000\000\005\181\000\000\000\000\000\000\000\000\000\000\005\181\000\000\000\000\000\000\000\000\005\173\bZ\003=\000\000\005\181\000\000\000\000\003=\005\181\000\000\003=\005\173\000\000\005\181\005\181\000\238\000\000\000\000\000\000\000\000\000\000\003=\000\000\000\000\000\000\003=\000\000\003=\000\000\000\000\006q\000\000\000\000\005\181\005\181\006q\000\000\005\181\006q\003=\016j\000\000\000\000\000\000\000\000\003=\000\000\005\181\005\181\006q\000\000\005\181\005\181\006q\003=\006q\000\000\000\000\003=\000\000\000\000\000\000\000\000\003=\003=\003=\000\000\006q\005\181\000\000\000\000\000\000\000\000\006q\026n\000\000\000\000\000\000\000\000\005\181\003\022\002\198\006q\003=\002\146\000\000\006q\003=\000\000\002\254\000\000\006q\006q\000\238\000\000\000\000\000\000\003=\003=\018\198\001\210\003=\003=\000\000\000\000\000\000\000\000\003\026\000\000\000\000\000\000\006q\000\000\000\000\000\000\006q\000\000\016\202\003=\000\000\003&\000\000\000\000\0032\001\190\006q\006q\022\154\000\000\006q\006q\002\186\000\000\000\000\004\006\000\000\000\000\000\000\004\n\006q\004\018\005z\000\000\000\000\000\000\000\000\006q\005\134\000\000\000\000\000\000\000\000\000\000\000\000\005\254\000\000\000\000\006q\000\000\005\138\003\022\002\198\000\000\000\000\002\146\000\000\000\000\005\146\005\150\002\254\005\218\000\000\000\000\000\000\000\000\000\000\000\000\004\014\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003\026\000\000\000\000\000\000\005\154\000\000\006\234\000\000\tf\000\000\004\130\000\000\000\000\003&\000\000\000\000\0032\001\190\000\000\000\000\000\000\000\000\006Z\000\000\002\186\000\000\000\000\004\006\003\022\002\198\000\000\004\n\002\146\004\018\005z\000\000\000\000\002\254\000\000\000\000\005\134\000\000\000\000\000\000\000\000\006\174\000\000\000\000\001\210\000\000\000\000\000\000\005\138\000\000\000\000\003\026\000\000\000\000\000\000\000\000\005\146\005\150\000\000\005\218\000\000\000\000\000\000\000\000\003&\000\000\000\000\0032\001\190\000\000\000\000\000\000\000\000\000\000\000\000\002\186\000\000\000\000\004\006\000\000\005\154\000\000\004\n\006z\004\018\005z\004\130\000\000\000\000\003\022\002\198\005\134\000\000\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\005\138\000\000\000\000\000\000\000\000\000\000\001\210\000\000\005\146\005\150\000\000\005\218\000\000\003\026\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\0032\001\190\000\000\005\154\000\000\000\000\006\189\000\000\002\186\004\130\000\000\004\006\003\022\002\198\000\000\004\n\002\146\004\018\005z\000\000\000\000\002\254\000\000\000\000\005\134\000\000\000\000\006\189\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\005\138\000\000\000\000\003\026\000\000\000\000\000\000\000\000\005\146\005\150\000\000\005\218\000\000\000\000\000\000\000\000\003&\000\000\000\000\0032\001\190\000\000\000\000\000\000\000\000\000\000\000\000\002\186\000\000\000\000\004\006\000\000\005\154\000\000\004\n\012r\004\018\005z\004\130\000\000\000\000\003\022\002\198\005\134\000\000\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\005\138\000\000\000\000\000\000\000\000\000\000\001\210\000\000\005\146\005\150\000\000\000\000\000\000\003\026\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\0032\001\190\000\000\005\154\000\000\000\000\012~\000\000\002\186\004\130\000\000\004\006\003\022\002\198\000\000\004\n\002\146\004\018\005z\000\000\000\000\002\254\000\000\000\000\005\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\005\138\000\000\000\000\003\026\000\000\000\000\000\000\000\000\005\146\005\150\000\000\005\218\000\000\000\000\000\000\000\000\003&\000\000\000\000\0032\001\190\000\000\000\000\000\000\000\000\000\000\000\000\002\186\000\000\000\000\004\006\000\000\005\154\000\000\004\n\012\138\004\018\005z\004\130\000\000\000\000\003\022\002\198\005\134\000\000\002\146\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\000\000\005\138\000\000\000\000\000\000\000\000\000\000\001\210\000\000\005\146\005\150\000\000\005\218\000\000\003\026\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\0032\001\190\000\000\005\154\000\000\000\000\000\000\000\000\002\186\004\130\000\000\004\006\000\000\000\000\000\000\004\n\000\000\004\018\005z\000\000\000\000\000\000\000\000\000\000\005\134\000\000\000\000\007i\007~\000\000\000\000\000\000\007i\000\000\000\000\007i\005\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\146\005\150\007i\005\218\000\000\000\000\007i\000\000\007i\000\000\000\000\000\000\000\000\001\189\000\000\000\000\000\000\000\000\001\189\000\000\007i\001\189\000\000\000\000\005\154\000\000\007i\007\250\000\000\000\000\004\130\000\000\001\189\000\000\000\000\007i\001\189\000\000\001\189\007i\000\000\000\000\000\000\000\000\007i\007i\000\238\000\000\000\000\000\000\001\189\000\000\000\000\000\000\000\000\000\000\001\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007i\001\189\000\000\000\000\007i\001\189\000\000\000\000\000\000\000\000\001\189\001\189\001\189\000\000\007i\007i\000\000\000\000\007i\007i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\189\000\000\006u\000\000\001\189\007i\000\000\006u\000\000\000\000\006u\000\000\000\000\000\000\001\189\001\189\000\000\000\000\001\189\001\189\000\000\006u\000\000\000\000\018\210\006u\000\000\006u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\189\000\000\000\000\000\000\006u\001\189\000\000\000\000\r-\000\000\006u\000\000\000\000\r-\000\000\000\000\r-\000\000\000\000\006u\000\000\000\000\000\000\006u\000\000\000\000\000\000\r-\006u\006u\000\238\r-\000\000\r-\000\000\000\000\000\000\000\000\000\000\005U\000\000\000\000\000\000\000\000\000\000\r-\000\000\000\000\006u\000\000\000\000\r-\006u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006u\006u\r-\000\000\006u\006u\000\000\r-\r-\000\000\000\000\000\000\000\000\000\000\006u\000\000\000\000\000\000\000\000\000\000\012\229\006u\002\198\012\229\000\000\0292\000\000\r-\000\000\000\000\0296\000\000\006u\000\000\012\229\000\000\000\000\000\000\000\000\000\000\012\229\r-\r-\002\138\000\000\r-\r-\000\000\000\000\000\000\000\000\000\000\012\229\000\000\000\000\r-\000\000\000\000\012\229\027\190\000\000\000\000\r-\000\000\001\002\001\190\000\000\012\229\000\000\000\000\000\000\012\229\000\000\r-\000\000\000\000\012\229\000\000\b\173\b\173\000\000\000\000\b\173\000\000\000\000\000\000\000\000\b\173\029:\000\000\000\000\000\000\000\000\000\000\017\018\000\000\012\229\000\000\b\173\000\000\012\229\000\000\000\000\000\000\000\000\b\173\000\000\000\000\000\000\029>\012\229\012\229\000\000\000\000\012\229\000\000\000\000\000\000\b\173\000\000\000\000\b\173\b\173\000\000\000\000\004\177\007~\000\000\000\000\b\173\004\177\012\229\b\173\004\177\000\000\001y\b\173\000\000\b\173\b\173\001y\000\000\000\000\001y\004\177\b\173\000\000\000\000\004\177\000\000\004\177\000\000\000\000\000\000\001y\000\000\001y\b\173\001y\000\000\001y\000\000\004\177\000\000\000\000\b\173\b\173\000\000\004\177\007\250\000\000\000\000\001y\000\000\000\000\000\000\000\000\000\000\001y\000\000\000\000\004\177\000\000\000\000\000\000\000\000\004\177\002\234\000\238\b\173\000\000\001y\000\000\000\000\000\000\b\173\001y\001y\000\238\000\000\000\000\000\000\000\000\000\245\000\000\000\000\004\177\000\000\000\245\000\000\000\000\000\245\000\000\000\000\000\000\000\000\001y\000\000\000\000\000\000\004\177\004\177\000\245\000\000\004\177\004\177\000\245\000\000\000\245\000\000\001y\001y\001y\000\000\001y\001y\000\000\000\000\000\000\000\000\000\245\004\177\000\000\000\000\000\000\000\000\000\245\000\000\000\249\000\000\000\000\001y\004\177\000\249\000\000\000\245\000\249\000\000\000\000\000\245\000\000\000\000\001y\000\000\000\245\000\245\000\238\000\249\000\000\000\000\007e\000\249\000\000\000\249\000\000\007e\000\000\000\000\007e\000\000\000\000\000\000\000\000\000\000\000\245\000\249\000\000\000\000\000\245\007e\000\000\000\249\000\000\007e\000\000\007e\000\000\000\000\000\245\000\245\000\249\000\000\000\245\000\245\000\249\000\000\000\000\007e\000\000\000\249\000\249\000\238\000\000\007e\000\000\000\000\000\000\000\000\000\000\000\245\000\000\000\000\007e\000\000\000\000\000\000\007e\000\000\000\000\000\249\000\245\007e\007e\000\249\000\000\000\000\000\000\006i\000\000\000\000\000\000\000\000\006i\000\249\000\249\006i\000\000\000\249\000\249\000\000\000\000\007e\018\162\000\000\000\000\007e\006i\000\000\000\000\000\000\006i\000\000\006i\000\000\000\249\007e\007e\017\246\000\000\007e\007e\000\000\000\000\000\000\006i\000\249\000\000\000\000\000\000\000\000\006i\000\000\005\189\007~\000\000\000\000\007e\005\189\000\000\006i\005\189\000\000\000\000\006i\000\000\000\000\000\000\000\000\006i\006i\000\000\005\189\000\000\000\000\012\149\005\189\000\000\005\189\000\000\012\149\000\000\000\000\012\149\000\000\000\000\000\000\000\000\000\000\006i\005\189\000\000\000\000\006i\012\149\000\000\005\189\007\250\012\149\000\000\012\149\000\000\000\000\006i\006i\000\000\000\000\006i\006i\005\189\000\000\000\000\012\149\000\000\005\189\005\189\000\238\000\000\012\149\000\000\000\000\000\000\000\000\000\000\006i\000\000\000\000\012\149\000\000\000\000\000\000\012\149\000\000\000\000\005\189\000\000\012\149\000\000\000\000\000\000\000\000\000\000\004\137\000\000\000\000\000\000\000\000\004\137\005\189\005\189\004\137\000\000\005\189\005\189\000\000\000\000\012\149\n\214\000\000\000\000\012\149\004\137\000\000\000\000\000\000\004\137\000\000\004\137\000\000\005\189\012\149\012\149\000\000\000\000\012\149\012\149\000\000\000\000\000\000\004\137\000\000\000\000\000\000\000\000\000\000\004\137\000\000\004\177\000\000\000\000\000\000\012\149\004\177\000\000\004\137\004\177\000\000\000\000\004\137\000\000\000\000\000\000\011\186\004\137\000\000\000\000\004\177\000\000\000\000\007e\004\177\000\000\004\177\000\000\007e\000\000\000\000\007e\000\000\000\000\000\000\000\000\000\000\004\137\004\177\000\000\000\000\004\137\007e\000\000\004\177\000\000\007e\000\000\007e\000\000\004R\004\137\004\137\000\000\000\000\004\137\004\137\004\177\000\000\000\000\007e\000\000\004\177\002\234\000\000\000\000\007e\000\000\004\145\000\000\000\000\000\000\004\137\004\145\000\000\000\000\004\145\000\000\000\000\007e\000\000\000\000\004\177\018\030\007e\007e\000\000\004\145\000\000\000\000\004\129\004\145\000\000\004\145\000\000\004\129\004\177\004\177\004\129\000\000\004\177\004\177\000\000\000\000\007e\004\145\004b\000\000\000\000\004\129\000\000\004\145\000\000\004\129\000\000\004\129\000\000\004\177\007e\007e\017\246\000\000\007e\007e\004\145\000\000\000\000\004\129\000\000\004\145\000\000\000\000\000\000\004\129\000\000\004\161\0196\000\000\000\000\007e\004\161\000\000\004\129\004\161\000\000\000\000\004\129\000\000\000\000\004\145\000\000\004\129\000\000\000\000\004\161\000\000\000\000\004q\004\161\000\000\004\161\000\000\004q\004\145\004\145\004q\000\000\004\145\004\145\000\000\000\000\004\129\004\161\000\000\000\000\004\129\004q\000\000\004\161\000\000\004q\000\000\004q\000\000\004\145\004\129\004\129\004\161\000\000\004\129\004\129\004\161\000\000\000\000\004q\019r\004\161\000\000\000\000\000\000\004q\000\000\000\000\000\000\000\000\000\000\004\129\000\000\000\000\004q\000\000\000\000\000\000\004q\000\000\000\000\004\161\021.\004q\000\000\004\161\000\000\n\n\000\000\000\000\000\000\000\000\000\000\001\202\001\206\004\161\004\161\000\000\000\000\004\161\004\161\000\000\000\000\004q\000\000\000\000\000\000\004q\002\158\000\000\004\014\007=\007=\001\210\001\250\001\230\004\161\004q\004q\000\000\000\000\004q\004q\001\242\000\000\000\000\000\000\022\018\004>\000\000\002\002\007=\007=\007=\000\000\000\000\001\246\002\162\004q\000\000\000\000\007=\002\174\000\000\002\186\004.\004:\000\000\004y\025\138\000\000\004F\000\000\004y\007=\007=\004y\000\000\000\000\000\000\007=\000\000\007=\007=\007=\000\000\000\000\004y\000\000\007=\000\000\004y\004J\004y\004\169\000\000\000\000\000\000\000\000\004\169\000\000\000\000\004\169\000\000\000\000\004y\000\000\000\000\000\000\000\000\007=\004y\000\000\004\169\000\000\000\000\000\000\004\169\000\000\004\169\000\000\016Z\000\000\000\000\004y\000\000\000\000\000\000\004~\004y\004\130\004\169\000\000\000\000\000\000\004\197\000\000\004\169\000\000\000\000\000\246\000\000\000\000\002\202\000\000\000\000\0042\000\000\007=\004y\004\169\000\000\000\000\000\000\003r\004\169\b\r\000\000\004\197\b\r\003v\000\000\000\000\004y\004y\000\000\000\000\004y\004y\000\000\000\000\000\000\003\130\000\000\000\000\004\169\b\r\b\r\017\226\b\r\b\r\000\000\000\000\007\229\004y\000\000\007\229\025\182\000\000\004\169\004\169\018F\000\000\004\169\004\169\021\186\018^\000\000\000\000\000\000\b\r\000\000\000\000\007\229\007\229\000\000\007\229\007\229\000\000\000\000\004\169\000\000\000\000\000\000\000\000\000\000\018f\000\000\000\000\000\238\b\017\022:\000\000\b\017\000\000\000\000\000\000\007\229\000\000\000\000\018z\018\182\000\000\000\000\004\197\004\197\000\000\000\000\000\000\000\000\b\017\b\017\000\000\b\017\b\017\000\000\007\229\000\000\000\000\000\000\000\000\022\246\000\000\b\r\000\000\b\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\017\b\001\000\000\b\r\b\001\000\000\005\250\b\r\000\000\000\000\000\000\b\r\000\000\b\r\000\000\000\000\007\229\b\r\007\229\000\238\000\000\b\001\b\001\000\000\b\001\b\001\000\000\000\000\000\000\000\000\007\229\000\000\000\000\005\250\007\229\000\000\000\000\000\000\007\229\000\000\007\229\000\000\000\000\000\000\007\229\b\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\017\000\000\b\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\238\000\000\000\000\b\017\000\000\000\000\005\250\b\017\000\000\000\000\000\000\b\017\000\000\b\017\n\022\000\000\000\000\b\017\000\000\000\000\001\202\001\206\012\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\001\000\000\b\001\000\000\000\000\000\000\001\210\001\214\001\230\000\000\000\000\000\000\000\000\000\000\006V\000\000\001\242\005\250\b\001\000\000\001\202\001\206\b\001\000\000\b\001\000\000\000\000\000\000\b\001\001\246\002\162\000\000\000\000\000\000\000\000\002\174\000\000\002\186\004.\004:\001\210\001\250\001\230\000\000\004F\000\000\000\000\000\000\000\000\000\000\001\242\000\000\000\000\020\022\0079\0079\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\246\021n\004J\020\142\000\000\000\000\002\174\000\000\002\186\004.\004:\0079\0079\0079\000\000\021~\000\000\000\000\000\000\000\000\000\000\0079\000\000\000\000\000\000\r\237\r\237\000\000\000\000\000\000\000\000\n\022\000\000\000\000\0079\0079\004J\001\202\001\206\000\000\0079\000\000\0079\0079\0079\r\237\r\237\r\237\007\146\0079\000\000\000\000\000\000\000\000\000\000\r\237\000\000\001\210\001\250\001\230\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\242\r\237\r\237\0079\001\202\001\206\023\170\r\237\000\000\r\237\r\237\r\237\000\000\001\246\002\162\000\000\r\237\000\000\000\000\002\174\000\000\002\186\004.\004:\001\210\001\214\001\230\000\000\004F\000\000\000\000\000\000\000\000\000\000\001\242\000\000\000\000\r\237\001\202\001\206\024\n\000\000\000\000\000\000\000\000\000\000\004\246\001\246\002\162\004J\000\000\000\000\000\000\002\174\000\000\002\186\004.\004:\001\210\001\214\001\230\000\000\004F\000\000\000\000\000\000\000\000\000\000\001\242\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\246\002\162\004J\000\000\000\000\000\000\002\174\000\000\002\186\004.\004:\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004J")) + ((16, "\128\168\138\218\1358\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\000\1358\000\000\000\000\021\252\1358\128\168\002 \000c\0001\195\188\000\000\000\000\000\000\000\000\000\000\000\000\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\n\000R\001\006\000\000\002\026\004\150\000\000\000\234\002 \005^\000\000\000\162\003\016\005\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\164\000\000\000\000\000\000\002\226'\240\000\000\000\000\000\000\001\182\000\000\000\000\190 \004x\004`\000\000\000\000\188\158\001\182\000\000\133\164\021\252#6\196f\006\180\000\000\021\252\1460\134n\021\252\135n\000\000\000\204\000\000\135n\004F\000\000\026\150\000\000\004\184\000\000\000\000\007\220\000\000\001\182\000\000\000\000\000\000\005\142\000\000\026\150\000\000\003\n\235@\240\018\204\246\000\000\241\214\243\148\000\000\1810*\b\000\000\144\020\028\220'\240\1358\128\168\000\000\000\000\134n\021\252\182L\135n\003\210\230\208\000\000\224\222\1358\128\168\138\218\021\252\000\000\003\206\007\188\003\180\184\154\000\000\183\144\000\000%\216\183\144\000\000%\216\184\154\004r\001P\b\000\000\000\021B\000\000\006\000\000\000\000\000\006\000\000\000\000\000\000\000%\216\001\182\000\000\000\000\192\220%\216*\b\b\218%\216\000\000\001\164\030Z\188\158\000\000\000\000\000\000\000\000\000\000\000\000\002\204\000\000\000\000\183L+\020\181:*\b\184V\004r\000\000\000\000\191\004, \181>*\b\185`\186j\187t\193\200\t\130\001\182\000\000\000\000\000\000\000\000\000\000\000\000\002\166\000\000%\216\000\000\002\164\186\174\000\000%\216\003,%\216\026X\000\000\021\252\000\000\028p\000\000\004\188\002\252\000\000\b\254%\216\bD\000\000\b\158\000\000\003\002\000\000\000\000\b\222\000\000\000\000\000\000\023\180\187\184\000\000\027^%\216\0292\n\020\tj\145j\005\230\n\204\003\180\0112\000\000\000\000\000\000\017\204\138\238\021\252$$\188r\000\000\n\202\011P\011\002%\216\004\228\011*\2214\011\016\012z\012\014%\216\005\130\000\000\000\000\005\194\000\000\000\000\006\004\000\000\000\000\133.\027\024\030\158\002\016\td\000\000\000\000\004Z\000\000#6\r\224\r\252\021\252\026^\021\252\128\168\128\168\000\000\000\000\000\000-.-.\021\252\026^\014n\000\000\026^\021\252\1460\026\018\006\242\tR\000\000\004\182\t\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\204\000\000\138\218\021\252\000\000\"z\205\140\142\184\003$\146\246\229\018\011\150\014\n\r\146%\216\007\154\014.\231\"\011\216\014\202\014x%\216\b\166\000\000\000\000\221\150\206\028\000\000\tR\000\000\001B\000\000\000\000\023L%\216\023\160\004$\188r\138\218\021\252\188r\000\000\004r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\182H\129\030\000\000\000\000\000\000\001\016\030T\206\028\000\000\000\000\188r\014\140\2226\012,\015\016\0152%\216\b\244\000\000\000\000\188r\000\000\000\000\000\000\000\000\208\216\021\252\188r\188r\000\000\015\128\188r\000\000\188r\000\000\000\000\000\000\000\000\000\000\137\194\222\152\012\228\016\170\016\132%\216\tx\000\000\000\000\188r\000\000\000\000\139N\221\150\000\000\140\218\189r\133.\bB\bB\000\000\017N\188r\000\000\027\190\017T\000\000\026\170\000\000\000\000\212\242\000\000\r8\017.\017\000%\216\n\000\000\000\000\000\188r\000\000\000\000\142f\188\158\000\000\006T\000\000\000\000\2232\000\000\145\024\001\020\000\000\000\000\000\000\000\000\000\000\146\164\017\206\000\000\029\206\000\000\000\000\220\154\000\000\n\196\000\000\000\000\025\158\206\182\000\000\000\000\027\182\000$\029D\nl\000\000\000\000\000\000\000\000\n\154\000\000\000\000\188r\000\000\000\000\000\000 \242\223\148\000\000!\164\000\000\000\000\000\000#h\231N\r\174\017\206\017\138%\216\n \000\000\000\000\188r\000\000\000\000%\024\017\152\231\232\r\238\018:\018$%\216\n\136\000\000\000\000\188r\000\000\000\000'0\188r\018^\232J\0144\018\250\018\156%\216\n\190\000\000\000\000\188r\000\000\000\000(<\194\148\014b\019,\t8%\216\001\160\019\134\000\000\000\000\014\186\019,\011,\000\000\198\236.:-.\021\252\026^\000c\006,\td\000\000\018\200#6\189\156\128\152\000c\006,\007\b#6\011H#6\000\000\213\148\007\002\135n\tR\b(&\228\000\000%\216\207X%\216\199\138\207\186%\216\006\020%\216\208B\000\000\015T\012\210\014p#6\213\246\000\000\011V\rT\196\140\000\000\000\000\000\000\000\000\000\000#6\214~#6\214\224\022\n\003\n\199\244\t\218\003\n\200\158\000\000\215h\007\002\000\000\000\000\215\202\028h\000\000\000\000\030.\000\000\rP\026^\000\000\197\024/F\000\000\031h\000\000\000\000#6!\166\000\000\000\000\000\000\000\000\195^\000\000\003,\000\000\143\174\011\174\026\128\147\188\025\014\136\136\"t\n\022\000\000\000\000%\144\011\"\000\000\000\000\000\000\138\218\021\252\131\154\138\218\021\252\017\204\017\204\000\000\000\000\000\000\001\012\023b#|\000\000\139\160\140f\129\200\021\252\026^\000=\129*\000\000 F\000\000\141,\141\242\229\018\030\218%\216\011L\000\000\017\204\027j\017\204\002\024\016\202\137\018\138\218\021\252\000\000\208\216\021\252\206\028\188r\029\152\000\000\2244\021\252\136\022\011>\000\000\188r\025\158%\216\003\216\011,\019\176\000\000\000\000\000\000\134.\bB\019\192\000\000\188r\000\000\000\000\209x\000\000\000\000\t0*\b\027\252\019\148\148\130\208\216\021\252\206\028$\136\149H\015@\019\140\003\180\019\214\000\000\000\000\017\204\024\002\019\176\000\000&\160\000\000\208\216\021\252\188r\026\170\000\000\138\218\021\252\017\204\025\014\000\000\005>\000\000\019\198\002\026\017\204\130P\000\000\000\000\000\000\000\000\003&\017\204\130\160\000\000\017\204\n.\n\022\000\000\011\236\000\000\024\002\019\130\000\000\000\000\150\014\208\216\021\252\206\028\000\000\000\000\017\204\015P\019\224\003\180\020&\000\000\000\000\019\234\000\000\017\204\0040\017\204\005<\018\226\137\018\208\216\021\252\206\028\028\148\137\018\000\000%\148\150\212\015n\019\246\003\180\020F\000\000\000\000\017\204\026\026\208\216\021\252\206\028&\160\188r\000\000\018\216\027&\014N\000\000\000\000\000\000'\172\151\154\208\216\021\252\206\028(\184)\196\152`\208\216\021\252\206\028*\208+\220\000\000\019\228\0282\153&\208\216\021\252\206\028\000\000\000\000\000\000\1358\000\000\000\000\000\000\153\236\208\216\021\252\206\028,\232-\244\154\178\208\216\021\252\206\028/\0000\012\155x\208\216\021\252\206\0281\0242$\156>\208\216\021\252\206\028304<\157\004\208\216\021\252\206\0285H6T\157\202\208\216\021\252\206\0287`8l\158\144\208\216\021\252\206\0289x:\132\159V\208\216\021\252\206\028;\144<\156\160\028\208\216\021\252\206\028=\168>\180\160\226\208\216\021\252\206\028?\192@\204\161\168\208\216\021\252\206\028A\216B\228\162n\208\216\021\252\206\028C\240D\252\1634\208\216\021\252\206\028F\bG\020\163\250\208\216\021\252\206\028H I,\164\192\208\216\021\252\206\028J8KD\165\134\208\216\021\252\206\028LPM\\\166L\208\216\021\252\206\028NhOt\167\018\208\216\021\252\206\028P\128Q\140\167\216\015\198\020&\003\180\020l\000\000\000\000\017\204\029>\208\216\021\252\206\028R\152S\164\168\158\208\216\021\252\206\028T\176U\188\021\252\229\018\136\022\000\000\000\000\185\164\bB\019\194%\216\012\002\000\000\000\000\b\164\001\182\000\000%\216\0128\000\000\000\000\019\214\000\000\000\000\000\000\005\000\000\000\019\216\148\130\000\000\000\000\000\000\031\230%\216\012X\000\000\000\000)H\000\000\000\000\229\218\000\000\016\004\0208\019\192%\216\012r\000\000\000\000\188r\000\000\000\000*T\224\150\000\000+`\004B\000\000\000\000\000\000\225,\225,\000\000\000\000\000\000V\200\197\204\138\020\000\000\014\002\000\000\006H\169d\208\216\021\252\206\028W\212X\224\137\018\014\180\000\000\007T\170*\208\216\021\252\206\028Y\236Z\248\137\018\014\196\000\000\b`\170\240\208\216\021\252\206\028\\\004]\016,\206\000\000\0140\000\000\tl\171\182\208\216\021\252\206\028^\028_(\000\000\015\014\000\000\nx\172|\208\216\021\252\206\028`4a@\000\000\015\140\000\000\011\132\173B\208\216\021\252\206\028bLcX\004\182\019\238\137\018\015\192\000\000\012\144\174\b\208\216\021\252\206\028ddep\137\018\016\026\000\000\r\156\174\206\208\216\021\252\206\028f|g\136\137\018\015\208\000\000\014\168\175\148\208\216\021\252\206\028h\148i\160\015\180\176Z\208\216\021\252\206\028j\172k\184\016\192\020\240\000\000\000\000\000\000\012\244\000\000\000\000\000\000\019\220\000\000\016\b\000\000\000\000\016\140\000\000\000\000\016D\000\000\000\000\016@\000\000\012\252\020\250\137\018\016\204\000\000\137\018\016\134\000\000\137\018\016\152\000\000\000\000\208\216\021\252\206\028l\196m\208\000\000\020j\000\000\000\000\000\000\000\000\000\000\000\000n\220\020\174\177 \208\216\021\252\206\028o\232\177\230\208\216\021\252\206\028p\244r\000s\012\178\172\208\216\021\252\206\028t\024u$\016\226\000\000\137\018\017L\000\000\137\018\017<\000\000\179r\016\\\020z\003\180\020\188\000\000\000\000\017\204\030J\208\216\021\252\206\028v0w<\000\000/\144\000\000\000\000\r\004\000\000\000\000\229\018\000\000\000\000\209\250\017\016\000\000\000\000\143\174\000\000\r\232\000\000\000\000\144\164\000\000\017\146\000\000\000\000\005D\n\024\000\000\000\000\025\014\025x\tR\000\000-x\006<\012\132\031>\000\000\000\000\017\164\000\000\000\000\000\172\029>\1808\031V\000\000\n6\000\000\000\000\017\210\000\000\000\000\208\216\021\252\206\028%\244\210n\bd\005D\000\000\000\000\011$\000\000\000\000\017\216\000\000\000\000\000\000\021\252\026^\006P\000\000\000\000\007<\002\016\td\006,\026^\232\232\188\164\000\000\007\140\026^\233&\020J\000\000\000\000\006,\000\000\0276\021\154\022\210\000\000\016\178\020\204\000\000\020\202\001\232\182\136\0076\000\000\020\146\020\030'\240\015J%\216!J\021\146\000\174\003\006\000\000\"T\020\226\000\000\0076\000\000\000\000\020\244*\b\201\b\000\000\210\250\200v\015\184\182\136\020\206*\b\216R\201\186\020\210*\b\216\218\202H\002@\020\146\000\000\000\000\000\000\021\252\233\236\000\000\229\018\225,\000\000\000\000\021\026\000\000\000\000\000\000\208\216\021\252\206\028xHyT\000\000\016\004\000\000\000\000\000\000\129\200\021\252\026^\020\216\000\000\206H\000\000 \154\000\000\003\180\000\000\000\000\021,\000\000\021^\206\028z`\021\006\000\000\000\000\208\216\021\252\206\0280\154\000\000\000\000\206\232\000\000!8\000\000\208`\000\000\030\020\000\000#6!R\000\000\211r\000\000\000\000\209\004\000\000#n\000\000\211\024\000\000\031\142\000\000#6$j\000\000\238:\000\000\021\252\026^\238:\000\000\031~\026\018\006\242\001\182\240\154#6\235\164\224\222\000\000\006\244\0120\td\006,\224\222\242n\002\016\td\006,\224\222\242n\000\000\000\000\006,\224\222\000\000\1358\128\168\188r\029\206\000\000\000\000\1358\128\168-.\021\252\026^\238:\000\000\002 \000c\0001\020\174'\240\016\246%\216\225\180\020\228\021\176\240\168\000\000\224\222\000\000\226:\0276\021\154\022\210\2344!~\016\252\001\022\r\254\020\232\021\252\224\222\000\000\021\252\224\222\000\000\212>\193\138\007<\007<\002\016\003\n\225\198\000\000\002\016\003\n\225\198\000\000 \138\026\018\006\242\001\182\191\178#6\238R\000\000\006\244\r<\020\180\014\172\000\000\225\198\000\000\td\021\016#6\238R\237$\002\016\td\021$#6\238R\237$\000\000\000\000\006\242\017|\000\000\224\222\000\000#6\241L\192\158\000\000\007\254\017|\000\000\133\164\021\252#6\238R\000\000\0276\021\154\022\210\226\192#\188\0276\007\254\r:\000\000\r\n\026\150\015\152\000\000\021\208\021\1281\\\021\252\183T%\216\014P\000\000\155x\t<\000\220\017\200\000\000\004\000\000\000\021\234\021r%\216\153\236\000\000\002\194\nt\017\182\000\000\007\200\000\000\022\004\021\172'\240\153\236\000\000\021\1881\\\022R\007\154\002\016\000\000\017n1\\%\216\017\176\004r\000\000%\216\t\164\005\200\000\000\000\000\217b\000\000\000\000\017\1741\\\217\234\153\236\000\000\021\252%\216\016h%\216\152`\153\236\000\000\012N\000\000\000\000\153\236\000\000\000\000\155x\000\000\224\222\242\172\007\254\r:\r\n\0226\021\2301\\\224\222\242\172\000\000\000\000\007\254\r:\r\n\022Z\021\226$\204\181L*\b\022~$\204\184\154\005\200\022\128$\204*\b\022\132$\204\218\148\218\200\000\000\239\n\000\000\000\000\224\222\243\212\007\254\r:\r\n\022x\021\250$\204\224\222\243\212\000\000\000\000\000\000\193\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\192\158\000\000\242\224\021\252\"\186\022\128\230\208\000\000\224\222\242\224\000\000\000\000\244<\021\252\"\186\022\148\022\028\240\018\184\154\0076\022\230\000\000\000\000\219r\226\192\021\252\000\000\236,\022\210\000\000\000\000\224\222\244<\000\000\000\000\000\000\234\150#\030\133$\0076\022\250\000\000\000\000\000\000\226\192\021\252\000\000\0076\023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\212#\188\007\254\r:\r\n\022\218\227\1360P\021\252$$\154\178\022&\000O\0076\022\220\0052\000\000\000\000\022\140\000\000\000\000\153\236\000\000\011\128\018z\000\000\0184\000\000\022\250\022\132%\216\153&\023\024\006>\000\000\000\000\022\200\000\000\000\000\022,\002\194\018v\000\000\0234\227\234'\240\bB\022\202%\216\017\194\000\000\000\000\022\222\000\000\000\000\000\000\153\236\000\000\012.\018\146\000\000\018\212\000\000\023@\022\192'\240\000\000\023L\228L(\252\bB\022\250%\216\018\128\000\000\000\000\023\014\000\000\000\000\000\000\021\252\000\000\153\236\000\000\022\030\021\1880P0P\2208\1358\021\252\233\236\229\018\b2\000\000\007\248\002\016\000\000\01840P%\216\018\188\tR\000\000\021\252\227\136\227\1360P\018~0P\000\000\129\160\130\154\000\000\202\208\000\000\000\000\203X\000\000\000\000\203\224\000\000\018J0P\204h\233\236\229\018\b2\000\000\b,\000\000\000\000$\204\019\146\000\000\000\000\199\228\023n\000\000\153\236\000\0000P\199\228\153\236\000\000\021\252%\216\153\236\000\000\012V\000\000\000\000\153\236\000\000\000\000\154\178\000\000\239>$\204\023\0300P\239r\227\136\000\000\224\222\243l\007\254\r:\r\n\023\140\227\136\224\222\243l\000\000\000\000\000\000\244x\198\236\000\000\000\000\000\000\000\000\000\000\000\000\241\174\224\222\000\000\242\224\000\000\000\000\000\000\000\000\224\222\244x\000\000\000\000\000\000\241\174\023\202\000\000\023\216\000\000\224\222\244x\000\000\000\000\rZ\000\000\000\000\212\160%^\000\000\000\000\188r\000\000\000\000\1480\023\"\228\230\018\028\023\160\023 %\216\015\\\000\000\000\000\188r\000\000\000\000\149\188\027\182\000\000%\216\018\128\000\000\154\178\019\144\000\000\000\000\017\204 b\208\216\021\252\206\028{l|x\0234\1808\018\234\023\180\003\180\023\252\000\000\000\000\017\204!n\208\216\021\252\206\028}\132~\144\024,\220\154\000\000\127\156\024\014\000\000\000\000\024\012\022\184\030\244\022\210\226\192!~\021\252\000\000\224\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\230\"!~\021\252\000\000\019\134\230\208\000\000\224\222\000\000\024\016\022\184\030\244\224\222\000\000\024$\000\000\002\194\007\228\021\188\205\b\000\000\000\000\027N\2194\000\000\000\000\023\160\000\000\024\022%\216\000\000\028\022+\020\191\240%\216\000\000\018\020\n\230\004r\000\000\000\000%\216\nD\012\136%\216\rh\0076\024B\000\000\000\000\236\150\000\000\000\000\240\018\000\000\224\222\000\000\0246\022\184 \000\192\158\000\000\000\000\000\000\000\000\019\156\2378\240\018\000\000\224\222\000\000\024@\022\184 \000\192\158\000\000\019\232\000\000\000\000%x\000\000\224\222\000\000\024`\000\000\000\000\023\176\000\000\019,\000\000\000\000\023\226\000\000\000\000\150\212\023\232\000\000\000\000\030\162\195\188\024\144\000\000\000\000\000\000\015\248\014F\198H\024\146\000\000\000\000\000\000\000\000\000\000\000\000\023\242\000\000!~\000\000\023\244\000\000%\216\000\000\000\021\000\000\000\000\024\000\000\000\000\000\003\n\000\000\t\012\000\000\000\000\000\000\019D\000\000\026^\000\000\014\148\000\000#6\000\000\004d\000\000\012\210\000\000\024\b\000\000\188r\025\158\000\000\000\000\n\022\024\014\000\000\000\000\011\236\131\154\001\182\237\198\000\000\000\000\000\000\000\000\000\000\190\168\000\000\000\000\024\186\000\000\201\212\000\000\019\178\024\192\000\000\024\220\000\000\132`\132`\209\250\209\250\000\000\000\000\194P\209\250\000\000\000\000\000\000\194P\209\250\0248\000\000\024F\000\000"), (16, "\003\197\003\197\000\006\005\253\005\253\003\197\002\198\002\202\003\197\002\246\002\150\003\197\003\002\003\197\005\253\004\218\003\197\000\242\006e\003\197\003\197\003\197\n\214\003\197\003\197\003\197\001\214\000\242\001\006\001\194\004\222\003\197\005\142\005\146\014f\003\197\000\242\003\197\b\130\004\226\001.\005\186\006e\003\197\003\197\005\230\005\234\003\197\005\238\005\242\003\197\005\246\006\002\006\014\006\022\t\166\000\242\001f\003\197\003\197\002\190\001j\004-\006\n\003\197\003\197\003\197\011\018\011\022\011\"\011Z\011\202\001~\011*\001\142\011J\006\146\003\197\003\197\003\197\003\197\003\197\003\197\003\197\003\197\003\197\011\226\001\153\003\197\011\158\003\197\003\197#?\011\238\012\006\012\190\006\158\006\162\003\197\003\197\003\197\001j\003\197\003\197\003\197\004-\003\197\022&\015\145\019\190\003\197\004y\003\197\003\197\026&\003\197\003\197\003\197\003\197\003\197\003\197\006\166\011N\003\197\003\197\003\197\011f\003j\012\210\015\145\003\197\003\197\003\197\003\197\001\153\001\153\001\153\001j\b*\001\153\004-\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\026.\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\006j\001\153\007\173\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\006n\001\153\001\153\001\153\001\153\001\006\001\194\001\153\001\153\001\153\021\026\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\003:\001\153\001\153\001\153\001\153\001\153\001\222\001\153\002:\004\145\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001n\001\153\001\153\001\153\011z\001\153\006\214\001\153\001\153\024\194\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\001\153\003:\001\153\001\153\001\153\001\153\001\153\r5\r5\005\253\005\253\001\226\r5\000\242\r5\r5\003V\r5\r5\r5\r5\021\250\r5\r5\r5\004m\r5\r5\r5\001v\r5\r5\r5\r5\001\134\r5\004m\r5\r5\r5\r5\r5\r5\r5\r5\000\n\r5\004\145\r5\003\241\r5\r5\r5\r5\r5\r5\r5\r5\003\146\r5\r5\004m\r5\002\001\002\001\r5\r5\r5\003\241\000\242\r5\r5\r5\r5\r5\r5\r5\002\001\r5\r5\r5\r5\r5\r5\r5\r5\r5\r5\r5\r5\r5\r5\r5\000\242\r5\r5\005\253\r5\r5\004m\005\253\004\"\022Z\r5\r5\r5\r5\r5\012\246\r5\r5\r5\005\253\r5\011\218\0042\012\182\r5\003\182\r5\r5\005\253\r5\r5\r5\r5\r5\r5\r5\r5\r5\r5\r5\r5\r5\001\210\r5\r5\r5\r5\r5\015\205\015\205\000\242\004f\005\253\015\205\004\134\015\205\015\205\005\253\015\205\015\205\015\205\015\205\001\150\015\205\015\205\000\242\004i\015\205\015\205\015\205\000\242\015\205\015\205\015\205\015\205\005\253\015\205\004i\015\205\015\205\015\205\015\205\015\205\015\205\015\205\015\205\005\253\015\205\002\138\015\205\005\253\015\205\015\205\015\205\015\205\015\205\015\205\015\205\015\205\000\242\015\205\015\205\004i\015\205\n\214\006\018\015\205\015\205\015\205\005\253\004&\015\205\015\205\015\205\015\205\015\205\015\205\015\205\000\242\015\205\023\022\015\205\004\138\015\205\015\205\015\205\015\205\015\205\015\205\015\205\015\205\015\205\015\205\015\205\001\202\015\205\015\205\011\014\015\205\015\205\004i\023\026\001\210\005\253\015\205\015\205\015\205\015\205\015\205\r\018\015\205\015\205\015\205\011\169\015\205\015\205\004&\015\205\015\205\005\185\015\205\015\205\0262\015\205\015\205\015\205\015\205\015\205\015\205\015\205\015\205\015\205\015\205\015\205\015\205\015\205\b\229\005\253\015\205\015\205\015\205\015\205\004\173\004\173\004B\003\006 \186\004\173\002\226\004\173\004\173\017R\004\173\004\173\004\173\004\173\b\229\004\173\004\173\015\149\b\229\004\173\004\173\004\173\000\242\004\173\004\173\004\173\004\173\t\250\004\173\007\177\004\173\004\173\004\173\004\173\004\173\004\173\004\173\004\173\015\149\004\173\001\210\004\173\005f\004\173\004\173\004\173\004\173\004\173\004\173\004\173\004\173\b1\004\173\004\173\003\014\004\173\005\185\004\162\004\173\004\173\004\173\001\006\001\194\004\173\004\173\004\173\004\173\004\173\004\173\004\173\nz\004\173\b1\004\173\015\153\004\173\004\173\004\173\004\173\004\173\004\173\004\173\004\173\004\173\004\173\004\173\002\174\011\210\012\174\001\238\004\173\004\173\000\242\011\173\006\130\015\153\004\173\004\173\004\173\004\173\004\173\002V\004\173\004\173\004\173\t\237\004\173\011\218\001z\012\182\004\173\005\n\004\173\004\173\002Z\004\173\004\173\004\173\004\173\004\173\004\173\004\173\004\173\004\173\004\173\004\173\004\173\004\173#\143\004\173\004\173\004\173\004\173\004\173\004\157\004\157\000\242\002F\011\205\004\157\005j\004\157\004\157\001\242\004\157\004\157\004\157\004\157\000\242\004\157\004\157\b9\012\234\004\157\004\157\004\157\000\242\004\157\004\157\004\157\004\157\011\173\004\157\012\238\004\157\004\157\004\157\004\157\004\157\004\157\004\157\004\157\b9\004\157\018v\004\157\005\206\004\157\004\157\004\157\004\157\004\157\004\157\004\157\004\157\bA\004\157\004\157\r\014\004\157\005&\011\026\004\157\004\157\004\157\011\173\002z\004\157\004\157\004\157\004\157\004\157\004\157\004\157\b\245\004\157\bA\004\157\001\138\004\157\004\157\004\157\004\157\004\157\004\157\004\157\004\157\004\157\004\157\004\157\003\014\011\210\012\174\004\162\004\157\004\157\r\026\011y\011\205\029\"\004\157\004\157\004\157\004\157\004\157\000\242\004\157\004\157\004\157\003N\004\157\011\218\001\154\012\182\004\157\003\014\004\157\004\157\004\162\004\157\004\157\004\157\004\157\004\157\004\157\004\157\004\157\004\157\004\157\004\157\004\157\004\157\b\209\004\157\004\157\004\157\004\157\004\157\012\145\012\145\000\242\004\198\004\214\012\145\b\018\012\145\012\145\0052\012\145\012\145\012\145\012\145\b\209\012\145\012\145\003Z\b\209\012\145\012\145\012\145\002~\012\145\012\145\012\145\012\145\b\022\012\145\0056\012\145\012\145\012\145\012\145\012\145\012\145\012\145\012\145\t\194\012\145\000\242\012\145\005>\012\145\012\145\012\145\012\145\012\145\012\145\012\145\012\145\011y\012\145\012\145\002\026\012\145\n\214\017\142\012\145\012\145\012\145\011\173\005B\012\145\012\145\012\145\012\145\012\145\012\145\012\145\000\242\012\145\000\242\012\145\n.\012\145\012\145\012\145\012\145\012\145\012\145\012\145\012\145\012\145\012\145\012\145\021\166\012\145\012\145\021\142\012\145\012\145\005\253\005\253\011\030\029j\012\145\012\145\012\145\012\145\012\145\t\254\012\145\012\145\012\145\021\174\012\145\012\145\005\253\012\145\012\145\003\014\012\145\012\145\004\162\012\145\012\145\012\145\012\145\012\145\012\145\012\145\012\145\012\145\012\145\012\145\012\145\012\145\002\001\002\001\012\145\012\145\012\145\012\145\012\161\012\161\n:\t\194\005\253\012\161\t\230\012\161\012\161\004\133\012\161\012\161\012\161\012\161\t\194\012\161\012\161\000\242\000\242\012\161\012\161\012\161\000\n\012\161\012\161\012\161\012\161\022\002\012\161\t\250\012\161\012\161\012\161\012\161\012\161\012\161\012\161\012\161\007\165\012\161\001\186\012\161\005\253\012\161\012\161\012\161\012\161\012\161\012\161\012\161\012\161\025\134\012\161\012\161\002\001\012\161\006.\017\182\012\161\012\161\012\161\001\190\026^\012\161\012\161\012\161\012\161\012\161\012\161\012\161\025\150\012\161\nz\012\161\002b\012\161\012\161\012\161\012\161\012\161\012\161\012\161\012\161\012\161\012\161\012\161\003>\012\161\012\161\005\253\012\161\012\161!\154\001\210\000\242\002f\012\161\012\161\012\161\012\161\012\161\000\242\012\161\012\161\012\161\003\n\012\161\012\161\030\234\012\161\012\161\n\029\012\161\012\161\024\238\012\161\012\161\012\161\012\161\012\161\012\161\012\161\012\161\012\161\012\161\012\161\012\161\012\161\021\186\030\238\012\161\012\161\012\161\012\161\012\153\012\153\011\201\t\194\005\253\012\153\007\197\012\153\012\153\004v\012\153\012\153\012\153\012\153\000\242\012\153\012\153\000\242\005\253\012\153\012\153\012\153\021Z\012\153\012\153\012\153\012\153\026\134\012\153\006\145\012\153\012\153\012\153\012\153\012\153\012\153\012\153\012\153\007\166\012\153\000\242\012\153\002\238\012\153\012\153\012\153\012\153\012\153\012\153\012\153\012\153\025\170\012\153\012\153\004~\012\153\006J\017\222\012\153\012\153\012\153\016\170\006\021\012\153\012\153\012\153\012\153\012\153\012\153\012\153\025\150\012\153\n\n\012\153\030b\012\153\012\153\012\153\012\153\012\153\012\153\012\153\012\153\012\153\012\153\012\153\004\146\012\153\012\153\n\018\012\153\012\153\011\201\030\242\007\197\007\006\012\153\012\153\012\153\012\153\012\153\000\242\012\153\012\153\012\153\003\134\012\153\012\153\006\021\012\153\012\153\004&\012\153\012\153\005\253\012\153\012\153\012\153\012\153\012\153\012\153\012\153\012\153\012\153\012\153\012\153\012\153\012\153\002\202\004\141\012\153\012\153\012\153\012\153\012\133\012\133\005Z\005^\003:\012\133\000\242\012\133\012\133\016\178\012\133\012\133\012\133\012\133\b\193\012\133\012\133\t\198\005\253\012\133\012\133\012\133\004&\012\133\012\133\012\133\012\133\007v\012\133\005\253\012\133\012\133\012\133\012\133\012\133\012\133\012\133\012\133\004\002\012\133\005\198\012\133\000\242\012\133\012\133\012\133\012\133\012\133\012\133\012\133\012\133\011}\012\133\012\133#_\012\133\003j\018\n\012\133\012\133\012\133\003J\005\210\012\133\012\133\012\133\012\133\012\133\012\133\012\133\004n\012\133\000\242\012\133\004\141\012\133\012\133\012\133\012\133\012\133\012\133\012\133\012\133\012\133\012\133\012\133\020\218\012\133\012\133\012j\012\133\012\133\002\202\t\130\000\242\007\238\012\133\012\133\012\133\012\133\012\133\021.\012\133\012\133\012\133\004\186\012\133\012\133\005\214\012\133\012\133\b\238\012\133\012\133\004\190\012\133\012\133\012\133\012\133\012\133\012\133\012\133\012\133\012\133\012\133\012\133\012\133\012\133\b\177\011\161\012\133\012\133\012\133\012\133\012\141\012\141\026R\001\006\001\194\012\141\000\242\012\141\012\141\011}\012\141\012\141\012\141\012\141\b\138\012\141\012\141\b\158\b\177\012\141\012\141\012\141\000\242\012\141\012\141\012\141\012\141\026Z\012\141\t\"\012\141\012\141\012\141\012\141\012\141\012\141\012\141\012\141\bb\012\141\000\242\012\141\020\222\012\141\012\141\012\141\012\141\012\141\012\141\012\141\012\141\n\025\012\141\012\141\004Y\012\141\tZ\0182\012\141\012\141\012\141\bf\001\210\012\141\012\141\012\141\012\141\012\141\012\141\012\141\0212\012\141\r&\012\141\000\242\012\141\012\141\012\141\012\141\012\141\012\141\012\141\012\141\012\141\012\141\012\141\021j\012\141\012\141\011\161\012\141\012\141\005\210\004\250 F\004\202\012\141\012\141\012\141\012\141\012\141\000\242\012\141\012\141\012\141\012\022\012\141\012\141\002\174\012\141\012\141\b\237\012\141\012\141\004\210\012\141\012\141\012\141\012\141\012\141\012\141\012\141\012\141\012\141\012\141\012\141\012\141\012\141\005\022\005*\012\141\012\141\012\141\012\141\012\137\012\137\029B\001\006\001\194\012\137\b\162\012\137\012\137!\234\012\137\012\137\012\137\012\137\t\238\012\137\012\137\012\026\0126\012\137\012\137\012\137\t\194\012\137\012\137\012\137\012\137\004\254\012\137\003:\012\137\012\137\012\137\012\137\012\137\012\137\012\137\012\137\000\242\012\137\029J\012\137\021n\012\137\012\137\012\137\012\137\012\137\012\137\012\137\012\137\007\165\012\137\012\137\005\002\012\137\t\162\018Z\012\137\012\137\012\137\006\030\t\006\012\137\012\137\012\137\012\137\012\137\012\137\012\137\005\014\012\137\011\198\012\137\011\026\012\137\012\137\012\137\012\137\012\137\012\137\012\137\012\137\012\137\012\137\012\137\nV\012\137\012\137\029\206\012\137\012\137\005Z\005^\006:\006N\012\137\012\137\012\137\012\137\012\137\026\250\012\137\012\137\012\137\031:\012\137\012\137\023\254\012\137\012\137\021b\012\137\012\137\029\214\012\137\012\137\012\137\012\137\012\137\012\137\012\137\012\137\012\137\012\137\012\137\012\137\012\137\011\225\000\242\012\137\012\137\012\137\012\137\012\149\012\149\006\246\007\n\n\017\012\149\017*\012\149\012\149\004a\012\149\012\149\012\149\012\149\020\254\012\149\012\149\003\182\011\225\012\149\012\149\012\149\000\242\012\149\012\149\012\149\012\149\011>\012\149\016\158\012\149\012\149\012\149\012\149\012\149\012\149\012\149\012\149\000\242\012\149\002\018\012\149\005\026\012\149\012\149\012\149\012\149\012\149\012\149\012\149\012\149\000\242\012\149\012\149\005\030\012\149\016\186\018\138\012\149\012\149\012\149\019&\000\242\012\149\012\149\012\149\012\149\012\149\012\149\012\149\026\254\012\149\016\250\012\149\031>\012\149\012\149\012\149\012\149\012\149\012\149\012\149\012\149\012\149\012\149\012\149\001\226\012\149\012\149\025\230\012\149\012\149\005Z\025:\007f\007z\012\149\012\149\012\149\012\149\012\149 \030\012\149\012\149\012\149\nZ\012\149\012\149\025N\012\149\012\149\"\002\012\149\012\149\002!\012\149\012\149\012\149\012\149\012\149\012\149\012\149\012\149\012\149\012\149\012\149\012\149\012\149\025\238\011\165\012\149\012\149\012\149\012\149\012\165\012\165\007\222\007\242\015\241\012\165\n\202\012\165\012\165\020\134\012\165\012\165\012\165\012\165\t\194\012\165\012\165\001\226\015\241\012\165\012\165\012\165\019*\012\165\012\165\012\165\012\165\019j\012\165\005\206\012\165\012\165\012\165\012\165\012\165\012\165\012\165\012\165\020\182\012\165\000\242\012\165\005r\012\165\012\165\012\165\012\165\012\165\012\165\012\165\012\165\017\134\012\165\012\165\020\142\012\165\005\210\018\178\012\165\012\165\012\165\b\222\b\242\012\165\012\165\012\165\012\165\012\165\012\165\012\165 \"\012\165\017\138\012\165\018\002\012\165\012\165\012\165\012\165\012\165\012\165\012\165\012\165\012\165\012\165\012\165\005v\012\165\012\165\011\165\012\165\012\165\nZ\t\018\t&\018\006\012\165\012\165\012\165\012\165\012\165\024\198\012\165\012\165\012\165\005\170\012\165\012\165\006\"\012\165\012\165\026\022\012\165\012\165\006&\012\165\012\165\012\165\012\165\012\165\012\165\012\165\012\165\012\165\012\165\012\165\012\165\012\165\tJ\t^\012\165\012\165\012\165\012\165\012\157\012\157\025B\"\250\001\226\012\157\017\174\012\157\012\157\001\210\012\157\012\157\012\157\012\157\017\214\012\157\012\157\tz\t\146\012\157\012\157\012\157\000\242\012\157\012\157\012\157\012\157\020\186\012\157\017\178\012\157\012\157\012\157\012\157\012\157\012\157\012\157\012\157\017\218\012\157\r\254\012\157\n\214\012\157\012\157\012\157\012\157\012\157\012\157\012\157\012\157\018*\012\157\012\157\0062\012\157\000\242\018\218\012\157\012\157\012\157\t\154\022\190\012\157\012\157\012\157\012\157\012\157\012\157\012\157\006>\012\157\nF\012\157\018.\012\157\012\157\012\157\012\157\012\157\012\157\012\157\012\157\012\157\012\157\012\157\016v\012\157\012\157\nr\012\157\012\157#\127\002\202\n>\006B\012\157\012\157\012\157\012\157\012\157\006\238\012\157\012\157\012\157\006\250\012\157\012\157\016\170\012\157\012\157 b\012\157\012\157\018R\012\157\012\157\012\157\012\157\012\157\012\157\012\157\012\157\012\157\012\157\012\157\012\157\012\157\012\146\012\162\012\157\012\157\012\157\012\157\r!\r!\rf\rv\018V\r!\018\130\r!\r!\025\246\r!\r!\r!\r!\018\210\r!\r!\r\190\r\206\r!\r!\r!\000\242\r!\r!\r!\r!\018\134\r!\016\170\r!\r!\r!\r!\r!\r!\r!\r!\018\214\r!\022\226\r!\019>\r!\r!\r!\r!\r!\r!\r!\r!\018\170\r!\r!\006\254\r!\022\022\018\246\r!\r!\r!\016.\016>\r!\r!\r!\r!\r!\r!\r!\018R\r!\018*\r!\018\174\r!\r!\r!\r!\r!\r!\r!\r!\r!\r!\r!\003:\r!\r!\007:\r!\r!\017\026\017.\019b\019V\r!\r!\r!\r!\r!\002~\r!\r!\r!\018\170\r!\r!\018\002\r!\r!\022b\r!\r!\018\210\r!\r!\r!\r!\r!\r!\r!\r!\r!\r!\r!\r!\r!\019\130\019J\r!\r!\r!\r!\004\153\004\153\020B\020R\019\142\004\153\018\130\004\153\004\153\"\246\004\153\004\153\004\153\004\153\002\162\004\153\004\153\017\134\019B\004\153\004\153\004\153\000\242\004\153\004\153\004\153\004\153\019v\004\153\022\230\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\020\030\004\153\020\162\004\153\007j\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\002\162\004\153\004\153\016\170\004\153\026\230\011\222\004\153\004\153\004\153\020\166\017\214\004\153\004\153\004\153\004\153\004\153\004\153\004\153\017\174\004\153\020\"\004\153\020.\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\0206\011\210\012\174\007n\004\153\004\153\007\178\020*\025\138\007\194\004\153\004\153\004\153\004\153\004\153\002\202\004\153\004\153\004\153\020\202\004\153\011\218\007\226\012\182\004\153\021\234\004\153\004\153\021\014\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\004\153\020\206\004\153\004\153\004\153\004\153\004\153\0021\0021\024\130\021:\021\018\0021\021v\002\202\0021\026\158\002\150\0021\rb\0021\007\190\004\218\0021\007\230\026V\0021\0021\0021\bF\0021\0021\0021\001\214\021>\rz\021z\004\222\0021\0021\0021\0021\0021\r\130\0021\026\146\004\226\026*\005\186\n!\0021\0021\0021\0021\0021\005\238\005\242\0021\007\181\006\002\001\194\b\226\0021\029N!\230\0021\0021\002\190\000\242\n\142\006\n\0021\0021\0021\011\018\011\022\011\"\026\202\r\138\r\"\011*\r2\011J\006\146\0021\0021\0021\0021\0021\0021\0021\0021\0021\b\230\011\210\012\174\t\n\0021\0021 R f\n\142\029\170\006\158\006\162\0021\0021\0021\026\166\0021\0021\0021\007\169\0021\r\146\t\022\017\246\0021 \138\0021\0021\029\138\0021\0021\0021\0021\0021\0021\006\166\011N\0021\0021\0021\011f\003j\029\210\029F\0021\0021\0021\0021\r\t\r\t\029\218\030n\n\017\r\t\015\249\002\202\r\t\030z\002\150\r\t\r\t\r\t\030\206\004\218\r\t!\246\016\005\r\t\r\t\r\t\000\242\r\t\r\t\r\t\001\214\n\142\r\t\t\026\004\222\r\t\r\t\r\t\r\t\r\t\r\t\r\t\n\142\004\226\030\150\005\186\"\182\r\t\r\t\r\t\r\t\r\t\005\238\005\242\r\t\n\021\006\002\001\194\tB\r\t\030\n\r\150\r\t\r\t\002\190 \198 \214\006\n\r\t\r\t\r\t\011\018\011\022\011\"\tN\r\t\017\166\011*\017\206\011J\006\146\r\t\r\t\r\t\r\t\r\t\r\t\r\t\r\t\r\t\016v\r\t\r\t\tR\r\t\r\t \150\030\250\001\210\t~\006\158\006\162\r\t\r\t\r\t\026\166\r\t\r\t\r\t\001\210\r\t\r\t\t\142\r\t\r\t\t\206\r\t\r\t\030\254\r\t\r\t\r\t\r\t\r\t\r\t\006\166\011N\r\t\r\t\r\t\011f\003j\006\021\0122\r\t\r\t\r\t\r\t\r\005\r\005\"\134\012J\012v\r\005!f\002\202\r\005\012\150\002\150\r\005\r\005\r\005\012\158\004\218\r\005\"Z\"\186\r\005\r\005\r\005#o\r\005\r\005\r\005\001\214\012\178\r\005\n\142\004\222\r\005\r\005\r\005\r\005\r\005\r\005\r\005\012\242\004\226\002\238\005\186\r>\r\005\r\005\r\005\r\005\r\005\005\238\005\242\r\005\rj\006\002\001\194\rr\r\005\r~\018z\r\005\r\005\002\190 \154\r\194\006\n\r\005\r\005\r\005\011\018\011\022\011\"\r\202\r\005\018\162\011*\018\202\011J\006\146\r\005\r\005\r\005\r\005\r\005\r\005\r\005\r\005\r\005\0162\r\005\r\005\016:\r\005\r\005\016\150\016\198\016\222\017\030\006\158\006\162\r\005\r\005\r\005\017\"\r\005\r\005\r\005\"\138\r\005\r\005\0196\r\005\r\005\019\178\r\005\r\005\019\210\r\005\r\005\r\005\r\005\r\005\r\005\006\166\011N\r\005\r\005\r\005\011f\003j\020F\020N\r\005\r\005\r\005\r\005\002\133\002\133\021\198\021\238\006Z\002\133\022\n\002\202\002\133\022\254\002\150\002\133\rb\002\133\022\014\004\218\002\133\0226\022J\002\133\002\133\002\133\007U\002\133\002\133\002\133\001\214\022j\rz\022z\004\222\002\133\002\133\002\133\002\133\002\133\r\130\002\133\022\142\004\226\n\214\005\186\022\186\002\133\002\133\002\133\002\133\002\133\005\238\005\242\002\133\023\"\006\002\001\194\000\242\002\133\023*\019n\002\133\002\133\002\190\0236\003F\006\n\002\133\002\133\002\133\011\018\011\022\011\"\007U\r\138\019z\011*\019\134\011J\006\146\002\133\002\133\002\133\002\133\002\133\002\133\002\133\002\133\002\133\024z\025>\002\133\007U\002\133\002\133\005\253\003:\024\142\005\253\006\158\006\162\002\133\002\133\002\133\005\253\002\133\002\133\002\133\005\253\002\133\023\002\005\253\005\253\002\133\024\146\002\133\002\133\bB\002\133\002\133\002\133\002\133\002\133\002\133\006\166\011N\002\133\002\133\002\133\011f\003j\005\253\005\253\002\133\002\133\002\133\002\133\005\253\025V\005\253\005\253\005\253\005\253\005\253\005\253\005\253\005\253\005\253\025n\005\253\000\242\005\253\005\253\003J\000\242\005\253\005\253\005\253\005\253\005\253\005\253\005\253\005\253\005\253\005\253\005\253\005\253\005\253\025\254\005\253\005\253\000\242\005\253\005\253\005\253\026\002\005\253\005\253\005\253\005\253\005\253\026:\005\253\005\253\005\253\005\253\005\253\026>\005\253\005\253\005\253\005\253\005\253\005\253\026f\005\253\005\253\005\253\005\253\005\253\005\253\005\253\005\253\000\242\005\253\005\253\005\253\005\253\005\253\005\253\005\253\005\253\005\253\005\253\005\253\005\253\026j\026\130\005\253\027.\000\242\005\253\005\253\005\253\000\242\005\253\0272\000\242\005\253\005\253\005\253\005\253\005\253\005\253\005\253\005\253\005\253\027V\n\017\005\253\005\253\n\017\005\253\027Z\n\134\005\253\027j\027z\005\253\027\134\005\253\021\226\027\186\n\142\002\150\027\190\028\014\005\253\005\253\005\253\029\138\n\146\005\253\005\253\005\253\005\253\0286\000\129\005\253\000\129\028:\000\129\000\129\000\129\000\129\000\129\000\129\000\129\028J\000\129\0306\000\129\000\129\n\017\029\018\000\129\000\129\029\130\028\154\000\129\000\129\028\186\000\129\000\129\000\129\000\129\021\230\000\129\n\017\000\129\000\129\028\250\029\030\000\129\000\129\b\201\000\129\000\129\000\129\029.\000\129\021\242\000\129\000\129\000\129\000\129\000\129\029V\000\129\000\129\000\129\000\129\000\129\005\210\029Z\b\201\000\129\000\129\n\017\b\201\000\129\000\129\029f\000\129\000\129\000\129\000\129\000\129\000\129\029v\000\129\006\162\000\129\000\129\000\129\000\129\029\146\b\205\000\129\029\162\029\182\000\129\029\226\000\129\029\230\000\129\n\017\015]\029\242\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\b\205\011~\001\194\000\129\b\205\000\129\030\002\030\022\031\n\000\226\015]\015]\020\170\000\129\015]\031b\020\190\020\210\020\226\000\129\000\129\000\129\000\129\031\138\031\254\000\129\000\129\000\129\000\129\n\157\n\157 \006 J V\n\157 Z\011)\n\157\b\201\011)\n\157 \190\n\157 \202\011)\n\157\000\242 \210\n\157\n\157\n\157 \250\n\157\n\157\n\157\011)\000\242\006v!\n\011)\n\157\n\157\n\157\n\157\n\157!\022\n\157!z\011)!\142\011)!\190\n\157\n\157\n\157\n\157\n\157\011)\011)\n\157\b\205\011)\011)!\198\n\157\"\018\":\n\157\n\157\011)\015]\"r\011)\n\157\n\157\n\157\011)\011)\011)\"\162\"\174\011)\011)\011)\011)\011)\n\157\n\157\n\157\n\157\n\157\n\157\n\157\n\157\n\157\"\195\011\210\012\174\"\211\n\157\n\157\"\230#\002#\031#/\011)\011)\n\157\n\157\n\157#K\n\157\n\157\n\157#\159\n\157\011\218#\187\012\182\n\157#\247\n\157\n\157$\011\n\157\n\157\n\157\n\157\n\157\n\157\011)\011)\n\157\n\157\n\157\011)\011)$\019$O\n\157\n\157\n\157\n\157\002}\002}$W\000\000\000\000\002}\000\000\002\202\002}\000\000\002\150\002}\000\000\002}\000\000\004\218\002}\000\000\000\000\002}\002}\002}\000\000\002}\002}\002}\001\214\000\000\000\000\000\000\004\222\002}\002}\002}\002}\002}\000\000\002}\000\000\004\226\000\000\005\186\000\000\002}\002}\002}\002}\002}\005\238\005\242\002}\000\000\006\002\011&\020\234\002}\000\000\000\000\002}\002}\002\190\000\000\000\000\006\n\002}\002}\002}\011\018\011\022\011\"\000\000\000\000\011\213\011*\000\000\011J\006\146\002}\002}\002}\002}\002}\002}\002}\002}\002}\000\000\011\210\012\174\000\000\002}\002}\bn\005\181\000\000\011\213\006\158\006\162\002}\002}\002}\000\000\002}\002}\002}\000\000\002}\011\218\000\000\012\182\002}\000\000\002}\002}\000\000\002}\002}\002}\002}\002}\002}\006\166\011N\002}\002}\002}\011f\003j\000\000\000\000\002}\002}\002}\002}\nu\nu\000\000\002\001\000\242\nu\011\210\012\174\nu\000\000\000\000\nu\000\000\nu\000\000\000\000\nu\000\000\000\000\nu\nu\nu\000\000\nu\nu\nu\011\218\000\000\012\182\000\000\000\n\nu\nu\nu\nu\nu\000\000\nu\005\181\005\178#\171\002\202\000\000\nu\nu\nu\nu\nu\005~\002\001\nu\b\209\005\166\007\210\011e\nu\007\142\012\"\nu\nu\001\214\011\213\002\001\b\026\nu\nu\nu\b&\015\141\000\000\000\000\b\209\007\202\000\000\000\000\000\000\000\000\nu\nu\nu\nu\nu\nu\nu\nu\nu\005\174\011\210\012\174\015\141\nu\nu\0022\007\206\002\190\0026\000\000\011e\nu\nu\nu\000\000\nu\nu\nu\000\000\nu\011\218\002B\012\182\nu\000\000\nu\nu\000\000\nu\nu\nu\nu\nu\nu\000\000\011e\nu\nu\nu\t\186\be\000\000\000\000\nu\nu\nu\nu\002\145\002\145\000\000\000\000\000\242\002\145\000\000\b\209\002\145\002N\000\000\002\145\002\001\002\145\be\002\001\002\145\011\030\002\001\002\145\002\145\002\145\011e\002\145\002\145\002\145\003\254\001\210\015U\011e\000\000\002\145\002\145\002\145\002\145\002\145\000\000\002\145\012\206\000\000!\174\000\000\000\n\002\145\002\145\002\145\002\145\002\145\015U\015U\002\145\000\000\015U\007\210\002R\002\145\007\142\b\006\002\145\002\145\002\001\002\001\000\000\b\026\002\145\002\145\002\145\b&\000\000\0052\000\000\000\000\b\233\002\174\002\001\002\001\bq\002\145\002\145\002\145\002\145\002\145\002\145\002\145\002\145\002\145\000\000\011\210\012\174\0056\002\145\002\145\b\233 ~\000\242\000\000\b\233\bq\002\145\002\145\002\145\000\000\002\145\002\145\002\145\002\001\002\145\011\218\003\210\012\182\002\145\006\149\002\145\002\145\001\210\002\145\002\145\002\145\002\145\002\145\002\145\011\210\012\174\002\145\002\145\002\145\000\000\001\210\015U\000\000\002\145\002\145\002\145\002\145\002\141\002\141!\210\000\000\000\242\002\141\000\000\011\218\002\141\012\182\004\174\002\141\000\000\002\141\000\000\020:\002\141\b\197\005>\002\141\002\141\002\141\000\000\002\141\002\141\002\141\002\174\n\182\t\250\000\000\015M\002\141\002\141\002\141\002\141\002\141\000\000\002\141\005B\002\174\000\000\000\000\000\000\002\141\002\141\002\141\002\141\002\141\n\186\011\185\002\141\000\000\000\000\007\210\011a\002\141\007\142 \130\002\141\002\141\000\000\003\210\000\000\b\026\002\141\002\141\002\141\b&\000\000\r\170\011\185\nz\011\185\011\185\003\210\000\000\000\000\002\141\002\141\002\141\002\141\002\141\002\141\002\141\002\141\002\141\000\000\011\210\012\174\000\000\002\141\002\141\006\185\000\242\000\000\000\000\000\000\011a\002\141\002\141\002\141\000\000\002\141\002\141\002\141\006\185\002\141\011\218\000\000\012\182\002\141\000\000\002\141\002\141\000\000\002\141\002\141\002\141\002\141\002\141\002\141\000\000\011a\002\141\002\141\002\141\000\000\000\000\015Y\000\000\002\141\002\141\002\141\002\141\n\137\n\137\000\000\006i\006\185\n\137\000\000\005\210\n\137\b\134\002\202\n\137\000\000\n\137\015Y\015Y\n\137\000\000\015Y\n\137\n\137\n\137\011a\n\137\n\137\n\137\003\254\006i\000\000\011a\012\138\n\137\n\137\n\137\n\137\n\137\000\000\n\137\011\185\006\185\r\234\000\000\006\185\n\137\n\137\n\137\n\137\n\137\012\002\000\000\n\137\000\000\011~\021\030\000\000\n\137\005\198\000\000\n\137\n\137\000\242\000\000\000\000\020\170\n\137\n\137\n\137\020\190\020\210\020\226\002\186\000\000\bN\000\000\000\000\024F\000\000\n\137\n\137\n\137\n\137\n\137\n\137\n\137\n\137\n\137\000\000\011\210\012\174\019\186\n\137\n\137\000\000\bR\015Y\t\241\000\000\000\000\n\137\n\137\n\137\000\000\n\137\n\137\n\137\000\000\n\137\011\218\t\250\012\182\n\137\000\242\n\137\n\137\000\000\n\137\n\137\n\137\n\137\n\137\n\137\t\250\000\000\n\137\n\137\n\137\000\000\000\000\023r\000\000\n\137\n\137\n\137\n\137\n\177\n\177\000\000\000\000\000\242\n\177\000\000\n\194\n\177\000\000\000\000\n\177\005\210\n\177\000\000\003N\n\177\nz\000\000\n\177\n\177\n\177\000\000\n\177\n\177\n\177\007\210\000\000\000\000\007\142\nz\n\177\n\177\n\177\n\177\n\177\b\026\n\177\000\000\000\242\b&\000\000\001.\n\177\n\177\n\177\n\177\n\177\002\001\002\001\n\177\002\018\000\242\007\210\002\150\n\177\007\142\006\218\n\177\n\177\003\150\003Z\000\000\b\026\n\177\n\177\n\177\b&\006R\003\022\003\"\000\000\bV\000\000\006^\003.\000\n\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\n\177\000\000\011\210\012\174\023v\n\177\n\177\021\226\000\000\000\000\002\150\"\222\001\226\n\177\n\177\n\177\000\000\n\177\n\177\n\177\000\000\n\177\011\218\002\001\012\182\n\177\021\242\n\177\n\177\000\000\n\177\n\177\n\177\n\177\n\177\n\177\000\000\011\229\n\177\n\177\n\177\000\000\000\000\000\000\002\202\n\177\n\177\n\177\n\177\002\129\002\129\000\000\021\230\t\165\002\129\000\000\006\162\002\129\n\226\000\000\002\129\011\229\002\129\000\000\000\000\002\129\000\000\021\242\002\129\002\129\002\129\000\000\002\129\002\129\002\129\002\001\002\001\023\214\t\250\n\230\002\129\002\129\002\129\002\129\002\129\000\000\002\129\t\165\000\000\000\000\005\198\002\001\002\129\002\129\002\129\002\129\002\129\006\162\023\170\002\129\000\000\000\000\t\165\000\n\002\129\t\165\011\190\002\129\002\129\000\000\n\214\000\000\t\165\002\129\002\129\002\129\t\165\000\000\000\000\000\000\000\000\nz\000\000\000\000\000\242!\030\002\129\002\129\002\129\002\129\002\129\002\129\002\129\002\129\002\129\002\001\011\210\012\174\000\000\002\129\002\129\021\226\000\000\000\242\002\150\000\000\000\000\002\129\002\129\002\129\000\000\002\129\002\129\002\129\000\000\002\129\011\218\000\000\012\182\002\129\000\000\002\129\002\129\000\000\002\129\002\129\002\129\002\129\002\129\002\129\t\250\000\000\002\129\002\129\002\129\000\000\000\000\n\234\000\000\002\129\002\129\002\129\002\129\n\217\n\217\000\000\021\230\r\141\n\217\000\000\011\170\n\217\000\000\023\174\n\217\000\000\n\217\000\000\000\000\n\217\000\000\021\242\n\217\n\217\n\217\000\000\n\217\n\217\n\217\002\001\002\001\025\022\t\250\nz\n\217\n\217\n\217\n\217\n\217\000\000\n\217\r\141\000\000\000\000\000\000\002\001\n\217\n\217\n\217\n\217\n\217\006\162\023\014\n\217\000\000\000\242\r\141\000\n\n\217\r\141\016\242\n\217\n\217\000\000\000\000\000\000\r\141\n\217\n\217\n\217\r\141\000\000\000\000\000\000\000\000\nz\000\000\000\000\000\000\028f\n\217\n\217\n\217\n\217\n\217\n\217\n\217\n\217\n\217\002\001\011\210\012\174\000\000\n\217\n\217\000\000\000\000\000\242\000\000\000\000\000\000\n\217\n\217\n\217\000\000\n\217\n\217\n\217\000\000\n\217\011\218\t\250\012\182\n\217\000\000\n\217\n\217\000\000\n\217\n\217\n\217\n\217\n\217\n\217\t\250\000\000\n\217\n\217\n\217\000\000\000\000\023b\000\000\n\217\n\217\n\217\n\217\n\197\n\197\n\005\000\000\000\242\n\197\n\005\023~\n\197\000\000\000\000\n\197\000\000\n\197\000\000\002\202\n\197\nz\002\150\n\197\n\197\n\197\000\000\n\197\n\197\n\197\000\000\000\000\n\242\t\250\nz\n\197\n\197\n\197\n\197\n\197\000\000\n\197\005e\000\242\000\000\000\000\000\000\n\197\n\197\n\197\n\197\n\197\n\005\n\246\n\197\000\000\000\242\005e\000\000\n\197\b\186\000\000\n\197\n\197\024\186\000\000\000\000\005e\n\197\n\197\n\197\005e\000\000\000\000\000\000\000\000\nz\n\005\000\000\021\242\000\000\n\197\n\197\n\197\n\197\n\197\n\197\n\197\n\197\n\197\000\000\011\210\012\174\000\000\n\197\n\197\000\000\t\185\000\242\000\000\000\000\000\000\n\197\n\197\n\197\000\000\n\197\n\197\n\197\006\162\n\197\011\218\000\000\012\182\n\197\003\254\n\197\n\197\000\000\n\197\n\197\n\197\n\197\n\197\n\197\000\000\000\000\n\197\n\197\n\197\000\000\t\185\000\000\000\000\n\197\n\197\n\197\n\197\001\n\n\001\000\006\000\000\000\000\n\001\002\198\002\202\t\185\002\246\002\150\007\142\003\002\000\000\004I\004\218\001\014\000\000\t\185\000\000\000\000\002\162\t\185\000\000\000\000\004I\001\214\000\000\000\000\000\000\006\006\001\022\011\134\011\138\001\"\001&\000\000\000\000\015\141\004\226\000\000\005\186\000\000\022\238\000\000\011\174\011\178\n\001\005\238\005\242\004I\005\246\006\002\006\014\011\182\t\166\000\000\000\000\001>\015\141\002\190\000\000\0022\006\n\000\000\0026\000\000\011\018\011\022\011\"\011Z\011\202\n\001\011*\000\000\011J\006\146\000\000\002B\001B\001F\001J\001N\001R\002J\015y\011\226\001V\004I\021\226\000\000\001Z\002\150\011\238\012\006\012\190\006\158\006\162\000\000\000\000\001^\002\018\000\000\000\000\000\000\000\000\011.\001b\002\022\000\000\003\254\028\142\002\030\002N\000\000\000\000\000\000\001\158\007\190\000\000\001\214\006\166\011N\t\250\001\162\000\000\020\154\003j\012\210\001\n\001\170\000\006\001\174\001\178\021\230\002\198\002\202\005n\002\246\002\150\000\000\003\002\000\000\023\154\004\218\001\014\t\210\001\226\000\000\021\242\011\130\028\178\000\000\000\000\002\190\001\214\000\000\000\000\002R\006\006\001\022\011\134\011\138\001\"\001&\002\001\nz\000\000\004\226\025\218\005\186\000\000\011\142\000\000\011\174\011\178\000\000\005\238\005\242\006\162\005\246\006\002\006\014\011\182\t\166\n\253\t\218\001>\000\242\002\190\028\190\000\000\006\n\000\000\000\000\000\n\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\028R\001B\001F\001J\001N\001R\000\241\002\001\011\226\001V\000\000\000\241\n\253\001Z\000\000\011\238\012\006\012\190\006\158\006\162\002\001\002\001\001^\000\000\000\000\000\000\000\000\b\214\000\000\001b\n\253\000\241\000\000\000\000\000\000\000\000\000\000\n\253\000\000\001\158\bB\n\253\t\250\006\166\011N\000\000\001\162\000\000\020\154\003j\012\210\000\000\001\170\000\241\001\174\001\178\002)\002)\004\238\000\000\000\000\002)\023\182\000\000\002)\000\241\000\000\002)\000\000\002)\000\241\000\000\002)\000\000\000\000\002)\002)\002)\000\000\002)\002)\002)\000\000\000\241\000\241\nz\000\000\002)\002)\002)\002)\002)\000\000\002)\000\000\000\000\001\206\001\210\000\000\002)\002)\002)\002)\002)\000\000\000\000\002)\000\242\000\000\000\241\000\000\002)\000\000\000\000\002)\002)\001\214\001\254\001\234\000\241\002)\002)\002)\000\000\000\000\000\000\001\246\000\000\000\000\026\006\000\000\000\000\000\000\002)\002)\002)\002)\002)\002)\002)\002)\002)\001\250\027^\002)\026~\002)\002)\002\178\000\000\002\190\003\022\003\"\000\000\002)\002)\002)\027n\002)\002)\002)\000\000\002) .\t\250\000\000\002)\000\000\002)\002)\000\000\012\138\002)\002)\002)\002)\002)\t\250\0032\002)\002)\r\234\000\000\000\000 2\000\000\002)\002)\002)\002)\002\137\002\137\000\000\000\000\000\242\002\137\000\000\"\146\002\137\000\000\000\000\002\137\000\000\002\137\000\000\004Q\002\137\nz\000\000\002\137\002\137\002\137\000\000\002\137\002\137\002\137\004Q\000\000\000\000\000\000\nz\002\137\002\137\002\137\002\137\002\137\000\000\002\137\005%\000\242\001\206\001\210\000\000\002\137\002\137\002\137\002\137\002\137\b\217\000\000\002\137\004Q\000\242\005%\000\000\002\137\b\186\000\000\002\137\002\137\001\214\001\254\001\234\005%\002\137\002\137\002\137\005%\b\217\000\000\001\246\000\000\b\217\000\000\000\000\000\000\000\000\002\137\002\137\002\137\002\137\002\137\002\137\002\137\002\137\002\137\001\250\002\166\002\137\004Q\002\137\002\137\002\178\000\000\002\190\003\022\003\"\000\000\002\137\002\137\002\137\003.\002\137\002\137\002\137\000\000\002\137\011>\000\000\000\000\002\137\000\000\002\137\002\137\000\000\r\182\002\137\002\137\002\137\002\137\002\137\000\000\0032\002\137\002\137\002\137\000\000\000\000\000\000\000\000\002\137\002\137\002\137\002\137\nq\nq\000\000\000\000\b\217\nq\000\000\002\202\nq\000\000\000\000\nq\000\000\nq\000\000\000\000\nq\000\000\000\000\nq\nq\nq\000\000\nq\nq\nq\000\000\003j\000\000\012\138\000\000\nq\nq\nq\nq\nq\000\000\nq\000\000\r\234\016)\016)\000\000\nq\nq\nq\nq\nq\000\000\000\000\nq\000\000\012\186\005\198\000\000\nq\000\000\000\000\nq\nq\016)\016)\016)\n\014\nq\nq\nq\019N\000\000\019Z\016)\000\000\000\000\000\000\000\000\000\000\000\000\nq\nq\nq\nq\nq\nq\nq\nq\nq\016)\016)\nq\000\000\nq\nq\016)\000\000\016)\016)\016)\000\000\nq\nq\nq\016)\nq\nq\nq\000\000\nq\000\000\000\000\000\000\nq\000\000\nq\nq\000\000\012\138\nq\nq\nq\nq\nq\000\000\016)\nq\nq\r\234\000\000\000\000\000\000\000\000\nq\nq\nq\nq\003\193\003\193\000\000\000\000\000\242\003\193\000\000\000\000\003\193\000\000\000\000\003\193\000\000\003\193\000\000\000\000\014\014\000\000\000\000\003\193\014b\003\193\000\000\003\193\003\193\003\193\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\003\193\005U\000\000\001\206\001\210\029\154\003\193\003\193\015\006\015\030\003\193\000\000\000\000\003\193\000\000\000\000\005U\000\000\003\193\b\186\000\000\0156\003\193\001\214\001\218\001\234\005U\003\193\003\193\000\242\005U\000\000\000\000\001\246\000\000\000\000\000\000\000\000\000\000\000\000\003\193\003\193\014&\014\166\015N\015f\015\150\003\193\003\193\001\250\002\166\003\193\000\000\003\193\015\174\002\178\000\000\002\190\003\022\003\"\000\000\003\193\003\193\015\198\003.\003\193\003\193\003\193\000\000\003\193\000\000\000\000\000\000\003\193\000\000\003\193\003\193\000\000\016&\003\193\016^\015~\003\193\003\193\000\000\0032\003\193\015\222\003\193\000\000\000\000\000\000\000\000\003\193\003\193\015\246\016\014\002\233\002\233\000\000\000\000\000\242\002\233\000\000\000\000\002\233\000\000\000\000\002\233\000\000\002\233\000\000\000\000\002\233\000\000\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\002\233\002\233\002\233\002\233\002\233\000\000\002\233\005E\000\000\001\206\001\210\029\250\002\233\002\233\002\233\002\233\002\233\000\000\000\000\002\233\000\000\000\000\005E\000\000\002\233\b\186\000\000\002\233\002\233\001\214\001\218\001\234\005E\002\233\002\233\002\233\005E\000\000\000\000\001\246\000\000\000\000\000\000\000\000\000\000\000\000\002\233\002\233\002\233\002\233\002\233\002\233\002\233\002\233\002\233\001\250\002\166\002\233\000\000\002\233\002\233\002\178\000\000\002\190\003\022\003\"\000\000\002\233\002\233\002\233\003.\002\233\002\233\002\233\000\000\002\233\000\000\000\000\000\000\002\233\000\000\002\233\002\233\000\000\012\138\002\233\002\233\002\233\002\233\002\233\000\000\0032\002\233\002\233\r\234\000\000\000\000\000\000\000\000\002\233\002\233\002\233\002\233\002\229\002\229\000\000\000\000\000\242\002\229\000\000\000\000\002\229\000\000\000\000\002\229\000\000\002\229\000\000\000\000\002\229\000\000\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\002\229\002\229\002\229\002\229\002\229\000\000\002\229\017\006\000\000\001\206\001\210\000\000\002\229\002\229\002\229\002\229\002\229\000\000\000\000\002\229\000\000\000\000\017\014\000\000\002\229\b\186\000\000\002\229\002\229\001\214\001\254\000\000\017B\002\229\002\229\002\229\017N\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\229\002\229\014&\002\229\002\229\002\229\002\229\002\229\002\229\001\250\002\174\002\229\000\000\002\229\002\229\002\178\000\000\002\190\003\022\003\"\000\000\002\229\002\229\002\229\003.\002\229\002\229\002\229\000\000\002\229\000\000\000\000\000\000\002\229\000\000\002\229\002\229\000\000\002\229\002\229\002\229\002\229\002\229\002\229\000\000\0032\002\229\002\229\002\229\000\000\000\000\000\000\000\000\002\229\002\229\002\229\002\229\002\185\002\185\000\000\000\000\000\242\002\185\000\000\000\000\002\185\000\000\000\000\002\185\000\000\002\185\000\000\000\000\002\185\000\000\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\002\185\002\185\002\185\002\185\002\185\000\000\002\185\0055\000\000\001\206\001\210\000\000\002\185\002\185\002\185\002\185\002\185\000\000\000\000\002\185\000\000\000\000\0055\000\000\002\185\b\186\000\000\002\185\002\185\001\214\001\254\000\000\0055\002\185\002\185\002\185\0055\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\185\002\185\002\185\002\185\002\185\002\185\002\185\002\185\002\185\001\250\003\198\002\185\000\000\002\185\002\185\002\178\000\000\002\190\003\022\003\"\000\000\002\185\002\185\002\185\003.\002\185\002\185\002\185\000\000\002\185\000\000\000\000\000\000\002\185\000\000\002\185\002\185\000\000\012\138\002\185\002\185\002\185\002\185\002\185\000\000\0032\002\185\002\185\r\234\000\000\000\000\000\000\000\000\002\185\002\185\002\185\002\185\002\181\002\181\000\000\000\000\000\242\002\181\000\000\000\000\002\181\000\000\000\000\002\181\000\000\002\181\000\000\000\000\002\181\000\000\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\002\181\002\181\002\181\002\181\002\181\000\000\002\181\t\213\000\000\001\206\001\210\000\000\002\181\002\181\002\181\002\181\002\181\000\000\000\000\002\181\000\000\000\000\007\210\000\000\002\181\007\142\000\000\002\181\002\181\001\214\001\254\000\000\t\213\002\181\002\181\002\181\t\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\181\002\181\014&\002\181\002\181\002\181\002\181\002\181\002\181\001\250\003\230\002\181\000\000\002\181\002\181\002\178\000\000\002\190\003\022\003\"\000\000\002\181\002\181\002\181\003.\002\181\002\181\002\181\000\000\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\002\181\002\181\000\000\0032\002\181\002\181\002\181\000\000\000\000\002\202\000\000\002\181\002\181\002\181\002\181\002\209\002\209\000\000\000\000\000\000\002\209\000\000\000\000\002\209\000\000\000\000\002\209\000\000\002\209\000\000\000\000\002\209\000\000\000\000\002\209\002\209\002\209\000\000\002\209\002\209\002\209\000\000\000\000\000\000\000\000\000\000\002\209\002\209\002\209\002\209\002\209\000\000\002\209\000\000\017\250\005\198\000\000\002\001\002\209\002\209\002\209\002\209\002\209\000\000\002\001\002\209\000\000\000\000\002\001\018\"\002\209\018J\000\000\002\209\002\209\000\000\002\001\000\000\000\000\002\209\002\209\002\209\000\000\000\000\000\n\000\000\000\000\b\245\000\000\000\000\000\000\000\000\002\209\002\209\002\209\002\209\002\209\002\209\002\209\002\209\002\209\000\000\002\001\002\209\000\000\002\209\002\209\b\245\000\000\000\000\002\001\b\245\000\000\002\209\002\209\002\209\002\001\002\209\002\209\002\209\000\000\002\209\000\000\000\000\000\000\002\209\000\000\002\209\002\209\000\000\012\138\002\209\002\209\002\209\002\209\002\209\000\000\000\000\002\209\002\209\r\234\000\000\002\001\000\000\000\000\002\209\002\209\002\209\002\209\002\205\002\205\000\000\000\000\000\000\002\205\000\000\000\000\002\205\000\000\000\000\002\205\000\000\002\205\000\000\000\000\014\014\000\000\000\000\002\205\002\205\002\205\000\000\002\205\002\205\002\205\000\000\005\154\000\000\000\000\000\000\002\205\002\205\002\205\014\142\002\205\000\000\002\205\b\245\000\000\000\000\000\000\002\001\002\205\002\205\002\205\002\205\002\205\000\000\002\001\002\205\000\000\000\000\002\001\003\014\002\205\000\000\004\162\002\205\002\205\000\000\002\001\000\000\000\000\002\205\002\205\002\205\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\205\002\205\014&\014\166\002\205\002\205\002\205\002\205\002\205\000\000\002\001\002\205\000\000\002\205\002\205\000\000\000\000\000\000\002\001\000\000\000\000\002\205\002\205\002\205\002\001\002\205\002\205\002\205\000\000\002\205\000\000\000\000\000\000\002\205\000\000\002\205\002\205\000\000\002\205\002\205\002\205\002\205\002\205\002\205\000\000\000\000\002\205\002\205\002\205\000\000\002\001\000\000\000\000\002\205\002\205\002\205\002\205\002\241\002\241\000\000\000\000\000\000\002\241\000\000\000\000\002\241\000\000\000\000\002\241\000\000\002\241\000\000\000\000\002\241\000\000\000\000\002\241\002\241\002\241\000\000\002\241\002\241\002\241\000\000\t\174\000\000\000\000\000\000\002\241\002\241\002\241\002\241\002\241\000\000\002\241\000\000\000\000\005\178\000\000\002\202\002\241\002\241\002\241\002\241\002\241\000\000\005~\002\241\000\000\000\000\005\166\000\000\002\241\n\218\000\000\002\241\002\241\000\000\001\214\000\000\000\000\002\241\002\241\002\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\241\002\241\002\241\002\241\002\241\002\241\002\241\002\241\002\241\000\000\005\174\002\241\000\000\002\241\002\241\000\000\000\000\000\000\002\190\000\000\000\000\002\241\002\241\002\241\000\000\002\241\002\241\002\241\000\000\002\241\000\000\000\000\000\000\002\241\000\000\002\241\002\241\000\000\012\138\002\241\002\241\002\241\002\241\002\241\000\000\000\000\002\241\002\241\r\234\000\000\t\186\000\000\000\000\002\241\002\241\002\241\002\241\002\237\002\237\000\000\000\000\000\242\002\237\000\000\000\000\002\237\000\000\000\000\002\237\000\000\002\237\000\000\000\000\002\237\000\000\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\002\237\002\237\002\237\002\237\002\237\000\000\002\237\020z\000\000\000\000\002\202\000\000\002\237\002\237\002\237\002\237\002\237\000\000\000\000\002\237\000\000\000\000\017\014\000\000\002\237\b\186\000\000\002\237\002\237\001\214\000\000\000\000\017B\002\237\002\237\002\237\017N\000\000\000\000\000\000\023N\000\000\029\002\000\000\000\000\000\000\002\237\002\237\014&\002\237\002\237\002\237\002\237\002\237\002\237\030>\005\198\002\237\030B\002\237\002\237\023R\000\000\002\190\000\000\000\000\000\000\002\237\002\237\002\237\030r\002\237\002\237\002\237\000\000\002\237\000\000\000\000\000\000\002\237\000\000\002\237\002\237\000\000\002\237\002\237\002\237\002\237\002\237\002\237\000\000\000\000\002\237\002\237\002\237\000\000\000\000\030\130\000\000\002\237\002\237\002\237\002\237\002\177\002\177\000\000\000\000\000\000\002\177\000\000\000\000\002\177\000\000\000\000\002\177\000\000\002\177\000\000\000\000\002\177\000\000\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\002\177\002\177\002\177\002\177\002\177\000\000\002\177\000\000\000\000\000\000\001\210\000\000\002\177\002\177\002\177\002\177\002\177\000\000\000\000\002\177\000\000\012\138\023V\000\000\002\177\023f\000\000\002\177\002\177\001\214\000\000\r\234\000\000\002\177\002\177\002\177\000\000\000\000\000\000\000\000\000\000\000\000\026\006\000\000\000\000\000\000\002\177\002\177\002\177\002\177\002\177\002\177\002\177\002\177\002\177\000\000\002\174\002\177\026~\002\177\002\177\000\000\000\000\002\190\000\000\000\000\000\000\002\177\002\177\002\177\026\150\002\177\002\177\002\177\000\000\002\177\000\000\000\000\000\000\002\177\000\000\002\177\002\177\000\000\012\138\002\177\002\177\002\177\002\177\002\177\000\000\000\000\002\177\002\177\r\234\000\000\000\000\000\000\000\000\002\177\002\177\002\177\002\177\002\173\002\173\000\000\000\000\000\000\002\173\000\000\000\000\002\173\000\000\000\000\002\173\000\000\002\173\000\000\000\000\002\173\000\000\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\000\000\000\000\002\173\002\173\002\173\002\173\002\173\000\000\000\000\002\173\000\000\000\000\000\000\000\000\002\173\000\000\000\000\002\173\002\173\000\000\000\000\000\000\000\000\002\173\002\173\002\173\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\173\002\173\014&\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\000\000\000\000\002\173\002\173\002\173\000\000\002\173\002\173\002\173\000\000\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\201\002\201\000\000\000\000\000\000\002\201\000\000\000\000\002\201\000\000\000\000\002\201\000\000\002\201\000\000\000\000\002\201\000\000\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\002\201\002\201\002\201\002\201\002\201\000\000\002\201\000\000\000\000\000\000\000\000\000\000\002\201\002\201\002\201\002\201\002\201\000\000\000\000\002\201\000\000\000\000\000\000\000\000\002\201\000\000\000\000\002\201\002\201\000\000\000\000\000\000\000\000\002\201\002\201\002\201\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\201\002\201\002\201\002\201\002\201\002\201\002\201\002\201\002\201\000\000\000\000\002\201\000\000\002\201\002\201\000\000\000\000\000\000\000\000\000\000\000\000\002\201\002\201\002\201\000\000\002\201\002\201\002\201\000\000\002\201\000\000\000\000\000\000\002\201\000\000\002\201\002\201\000\000\012\138\002\201\002\201\002\201\002\201\002\201\000\000\000\000\002\201\002\201\r\234\000\000\000\000\000\000\000\000\002\201\002\201\002\201\002\201\002\197\002\197\000\000\000\000\000\000\002\197\000\000\000\000\002\197\000\000\000\000\002\197\000\000\002\197\000\000\000\000\014\014\000\000\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\002\197\002\197\002\197\014\142\002\197\000\000\002\197\000\000\000\000\000\000\000\000\000\000\002\197\002\197\002\197\002\197\002\197\000\000\000\000\002\197\000\000\000\000\000\000\000\000\002\197\000\000\000\000\002\197\002\197\000\000\000\000\000\000\000\000\002\197\002\197\002\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\197\002\197\014&\014\166\002\197\002\197\002\197\002\197\002\197\000\000\000\000\002\197\000\000\002\197\002\197\000\000\000\000\000\000\000\000\000\000\000\000\002\197\002\197\002\197\000\000\002\197\002\197\002\197\000\000\002\197\000\000\000\000\000\000\002\197\000\000\002\197\002\197\000\000\002\197\002\197\002\197\002\197\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\002\197\002\197\002\193\002\193\000\000\000\000\000\000\002\193\000\000\000\000\002\193\000\000\000\000\002\193\000\000\002\193\000\000\000\000\002\193\000\000\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\002\193\002\193\002\193\002\193\002\193\000\000\002\193\000\000\000\000\000\000\000\000\000\000\002\193\002\193\002\193\002\193\002\193\000\000\000\000\002\193\000\000\000\000\000\000\000\000\002\193\000\000\000\000\002\193\002\193\000\000\000\000\000\000\000\000\002\193\002\193\002\193\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\193\002\193\002\193\002\193\002\193\002\193\002\193\002\193\002\193\000\000\000\000\002\193\000\000\002\193\002\193\000\000\000\000\000\000\000\000\000\000\000\000\002\193\002\193\002\193\000\000\002\193\002\193\002\193\000\000\002\193\000\000\000\000\000\000\002\193\000\000\002\193\002\193\000\000\012\138\002\193\002\193\002\193\002\193\002\193\000\000\000\000\002\193\002\193\r\234\000\000\000\000\000\000\000\000\002\193\002\193\002\193\002\193\002\189\002\189\000\000\000\000\000\000\002\189\000\000\000\000\002\189\000\000\000\000\002\189\000\000\002\189\000\000\000\000\014\014\000\000\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\002\189\002\189\002\189\014\142\002\189\000\000\002\189\000\000\000\000\000\000\000\000\000\000\002\189\002\189\002\189\002\189\002\189\000\000\000\000\002\189\000\000\000\000\000\000\000\000\002\189\000\000\000\000\002\189\002\189\000\000\000\000\000\000\000\000\002\189\002\189\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\189\002\189\014&\014\166\002\189\002\189\002\189\002\189\002\189\000\000\000\000\002\189\000\000\002\189\002\189\000\000\000\000\000\000\000\000\000\000\000\000\002\189\002\189\002\189\000\000\002\189\002\189\002\189\000\000\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\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\002\189\002\189\003\017\003\017\000\000\000\000\000\000\003\017\000\000\000\000\003\017\000\000\000\000\003\017\000\000\003\017\000\000\000\000\003\017\000\000\000\000\003\017\003\017\003\017\000\000\003\017\003\017\003\017\000\000\000\000\000\000\000\000\000\000\003\017\003\017\003\017\003\017\003\017\000\000\003\017\000\000\000\000\000\000\000\000\000\000\003\017\003\017\003\017\003\017\003\017\000\000\000\000\003\017\000\000\000\000\000\000\000\000\003\017\000\000\000\000\003\017\003\017\000\000\000\000\000\000\000\000\003\017\003\017\003\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\017\003\017\003\017\003\017\003\017\003\017\003\017\003\017\003\017\000\000\000\000\003\017\000\000\003\017\003\017\000\000\000\000\000\000\000\000\000\000\000\000\003\017\003\017\003\017\000\000\003\017\003\017\003\017\000\000\003\017\000\000\000\000\000\000\003\017\000\000\003\017\003\017\000\000\012\138\003\017\003\017\003\017\003\017\003\017\000\000\000\000\003\017\003\017\r\234\000\000\000\000\000\000\000\000\003\017\003\017\003\017\003\017\003\r\003\r\000\000\000\000\000\000\003\r\000\000\000\000\003\r\000\000\000\000\003\r\000\000\003\r\000\000\000\000\014\014\000\000\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\014v\014\190\014\214\014\142\014\238\000\000\003\r\000\000\000\000\000\000\000\000\000\000\003\r\003\r\015\006\015\030\003\r\000\000\000\000\003\r\000\000\000\000\000\000\000\000\003\r\000\000\000\000\0156\003\r\000\000\000\000\000\000\000\000\003\r\003\r\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\r\003\r\014&\014\166\015N\015f\015\150\003\r\003\r\000\000\000\000\003\r\000\000\003\r\015\174\000\000\000\000\000\000\000\000\000\000\000\000\003\r\003\r\015\198\000\000\003\r\003\r\003\r\000\000\003\r\000\000\000\000\000\000\003\r\000\000\003\r\003\r\000\000\003\r\003\r\003\r\015~\003\r\003\r\000\000\000\000\003\r\015\222\003\r\000\000\000\000\000\000\000\000\003\r\003\r\015\246\016\014\002\225\002\225\000\000\000\000\000\000\002\225\000\000\000\000\002\225\000\000\000\000\002\225\000\000\002\225\000\000\000\000\002\225\000\000\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\002\225\002\225\002\225\002\225\002\225\000\000\002\225\000\000\000\000\000\000\000\000\000\000\002\225\002\225\002\225\002\225\002\225\000\000\000\000\002\225\000\000\000\000\000\000\000\000\002\225\000\000\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\000\000\000\000\000\000\000\000\002\225\002\225\002\225\002\225\002\225\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\000\000\000\000\002\225\002\225\002\225\000\000\002\225\002\225\002\225\000\000\002\225\000\000\000\000\000\000\002\225\000\000\002\225\002\225\000\000\012\138\002\225\002\225\002\225\002\225\002\225\000\000\000\000\002\225\002\225\r\234\000\000\000\000\000\000\000\000\002\225\002\225\002\225\002\225\002\221\002\221\000\000\000\000\000\000\002\221\000\000\000\000\002\221\000\000\000\000\002\221\000\000\002\221\000\000\000\000\014\014\000\000\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\002\221\002\221\002\221\014\142\002\221\000\000\002\221\000\000\000\000\000\000\000\000\000\000\002\221\002\221\002\221\002\221\002\221\000\000\000\000\002\221\000\000\000\000\000\000\000\000\002\221\000\000\000\000\002\221\002\221\000\000\000\000\000\000\000\000\002\221\002\221\002\221\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\221\002\221\014&\014\166\002\221\002\221\002\221\002\221\002\221\000\000\000\000\002\221\000\000\002\221\002\221\000\000\000\000\000\000\000\000\000\000\000\000\002\221\002\221\002\221\000\000\002\221\002\221\002\221\000\000\002\221\000\000\000\000\000\000\002\221\000\000\002\221\002\221\000\000\002\221\002\221\002\221\002\221\002\221\002\221\000\000\000\000\002\221\002\221\002\221\000\000\000\000\000\000\000\000\002\221\002\221\002\221\002\221\002\217\002\217\000\000\000\000\000\000\002\217\000\000\000\000\002\217\000\000\000\000\002\217\000\000\002\217\000\000\000\000\002\217\000\000\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\002\217\002\217\002\217\002\217\002\217\000\000\002\217\000\000\000\000\000\000\000\000\000\000\002\217\002\217\002\217\002\217\002\217\000\000\000\000\002\217\000\000\000\000\000\000\000\000\002\217\000\000\000\000\002\217\002\217\000\000\000\000\000\000\000\000\002\217\002\217\002\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\217\002\217\002\217\002\217\002\217\002\217\002\217\002\217\002\217\000\000\000\000\002\217\000\000\002\217\002\217\000\000\000\000\000\000\000\000\000\000\000\000\002\217\002\217\002\217\000\000\002\217\002\217\002\217\000\000\002\217\000\000\000\000\000\000\002\217\000\000\002\217\002\217\000\000\012\138\002\217\002\217\002\217\002\217\002\217\000\000\000\000\002\217\002\217\r\234\000\000\000\000\000\000\000\000\002\217\002\217\002\217\002\217\002\213\002\213\000\000\000\000\000\000\002\213\000\000\000\000\002\213\000\000\000\000\002\213\000\000\002\213\000\000\000\000\014\014\000\000\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\002\213\002\213\002\213\014\142\002\213\000\000\002\213\000\000\000\000\000\000\000\000\000\000\002\213\002\213\002\213\002\213\002\213\000\000\000\000\002\213\000\000\000\000\000\000\000\000\002\213\000\000\000\000\002\213\002\213\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\000\000\000\000\000\000\000\000\002\213\002\213\014&\014\166\002\213\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\000\000\000\000\002\213\002\213\002\213\000\000\002\213\002\213\002\213\000\000\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\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\003\001\003\001\000\000\000\000\000\000\003\001\000\000\000\000\003\001\000\000\000\000\003\001\000\000\003\001\000\000\000\000\003\001\000\000\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\003\001\003\001\003\001\003\001\003\001\000\000\003\001\000\000\000\000\000\000\000\000\000\000\003\001\003\001\003\001\003\001\003\001\000\000\000\000\003\001\000\000\000\000\000\000\000\000\003\001\000\000\000\000\003\001\003\001\000\000\000\000\000\000\000\000\003\001\003\001\003\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\001\003\001\003\001\003\001\003\001\003\001\003\001\003\001\003\001\000\000\000\000\003\001\000\000\003\001\003\001\000\000\000\000\000\000\000\000\000\000\000\000\003\001\003\001\003\001\000\000\003\001\003\001\003\001\000\000\003\001\000\000\000\000\000\000\003\001\000\000\003\001\003\001\000\000\012\138\003\001\003\001\003\001\003\001\003\001\000\000\000\000\003\001\003\001\r\234\000\000\000\000\000\000\000\000\003\001\003\001\003\001\003\001\002\253\002\253\000\000\000\000\000\000\002\253\000\000\000\000\002\253\000\000\000\000\002\253\000\000\002\253\000\000\000\000\014\014\000\000\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\014v\014\190\014\214\014\142\002\253\000\000\002\253\000\000\000\000\000\000\000\000\000\000\002\253\002\253\015\006\015\030\002\253\000\000\000\000\002\253\000\000\000\000\000\000\000\000\002\253\000\000\000\000\002\253\002\253\000\000\000\000\000\000\000\000\002\253\002\253\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\253\002\253\014&\014\166\015N\015f\002\253\002\253\002\253\000\000\000\000\002\253\000\000\002\253\002\253\000\000\000\000\000\000\000\000\000\000\000\000\002\253\002\253\002\253\000\000\002\253\002\253\002\253\000\000\002\253\000\000\000\000\000\000\002\253\000\000\002\253\002\253\000\000\002\253\002\253\002\253\015~\002\253\002\253\000\000\000\000\002\253\002\253\002\253\000\000\000\000\000\000\000\000\002\253\002\253\002\253\002\253\002\169\002\169\000\000\000\000\000\000\002\169\000\000\000\000\002\169\000\000\000\000\002\169\000\000\002\169\000\000\000\000\002\169\000\000\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\002\169\002\169\002\169\002\169\002\169\000\000\002\169\000\000\000\000\000\000\000\000\000\000\002\169\002\169\002\169\002\169\002\169\000\000\000\000\002\169\000\000\000\000\000\000\000\000\002\169\000\000\000\000\002\169\002\169\000\000\000\000\000\000\000\000\002\169\002\169\002\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\169\002\169\002\169\002\169\002\169\002\169\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\000\000\000\000\002\169\002\169\002\169\000\000\002\169\002\169\002\169\000\000\002\169\000\000\000\000\000\000\002\169\000\000\002\169\002\169\000\000\012\138\002\169\002\169\002\169\002\169\002\169\000\000\000\000\002\169\002\169\r\234\000\000\000\000\000\000\000\000\002\169\002\169\002\169\002\169\002\165\002\165\000\000\000\000\000\000\002\165\000\000\000\000\002\165\000\000\000\000\002\165\000\000\002\165\000\000\000\000\014\014\000\000\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\014\142\002\165\000\000\002\165\000\000\000\000\000\000\000\000\000\000\002\165\002\165\002\165\002\165\002\165\000\000\000\000\002\165\000\000\000\000\000\000\000\000\002\165\000\000\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\000\000\000\000\000\000\000\000\002\165\002\165\014&\014\166\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\000\000\000\000\002\165\002\165\002\165\000\000\002\165\002\165\002\165\000\000\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\000\000\000\000\002\161\000\000\000\000\002\161\000\000\000\000\002\161\000\000\002\161\000\000\000\000\002\161\000\000\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\002\161\002\161\000\000\002\161\000\000\000\000\000\000\000\000\000\000\002\161\002\161\002\161\002\161\002\161\000\000\000\000\002\161\000\000\000\000\000\000\000\000\002\161\000\000\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\000\000\000\000\000\000\000\000\002\161\002\161\002\161\002\161\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\000\000\000\000\002\161\002\161\002\161\000\000\002\161\002\161\002\161\000\000\002\161\000\000\000\000\000\000\002\161\000\000\002\161\002\161\000\000\012\138\002\161\002\161\002\161\002\161\002\161\000\000\000\000\002\161\002\161\r\234\000\000\000\000\000\000\000\000\002\161\002\161\002\161\002\161\002\157\002\157\000\000\000\000\000\000\002\157\000\000\000\000\002\157\000\000\000\000\002\157\000\000\002\157\000\000\000\000\014\014\000\000\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\014v\014\190\014\214\014\142\002\157\000\000\002\157\000\000\000\000\000\000\000\000\000\000\002\157\002\157\015\006\015\030\002\157\000\000\000\000\002\157\000\000\000\000\000\000\000\000\002\157\000\000\000\000\002\157\002\157\000\000\000\000\000\000\000\000\002\157\002\157\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\002\157\014&\014\166\015N\015f\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\000\000\000\000\002\157\002\157\002\157\000\000\002\157\002\157\002\157\000\000\002\157\000\000\000\000\000\000\002\157\000\000\002\157\002\157\000\000\002\157\002\157\002\157\015~\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\003Q\003Q\000\000\000\000\000\000\003Q\000\000\000\000\003Q\000\000\000\000\003Q\000\000\003Q\000\000\000\000\003Q\000\000\000\000\003Q\003Q\003Q\000\000\003Q\003Q\003Q\000\000\000\000\000\000\000\000\000\000\003Q\003Q\003Q\003Q\003Q\000\000\003Q\000\000\000\000\000\000\000\000\000\000\003Q\003Q\003Q\003Q\003Q\000\000\000\000\003Q\000\000\000\000\000\000\000\000\003Q\000\000\000\000\003Q\003Q\000\000\000\000\000\000\000\000\003Q\003Q\003Q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003Q\003Q\003Q\003Q\003Q\003Q\003Q\003Q\003Q\000\000\000\000\003Q\000\000\003Q\003Q\000\000\000\000\000\000\000\000\000\000\000\000\003Q\003Q\003Q\000\000\003Q\003Q\003Q\000\000\003Q\000\000\000\000\000\000\003Q\000\000\003Q\003Q\000\000\012\138\003Q\003Q\003Q\003Q\003Q\000\000\000\000\003Q\003Q\r\234\000\000\000\000\000\000\000\000\003Q\003Q\003Q\003Q\003M\003M\000\000\000\000\000\000\003M\000\000\000\000\003M\000\000\000\000\003M\000\000\003M\000\000\000\000\014\014\000\000\000\000\003M\003M\003M\000\000\003M\003M\003M\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\003M\000\000\003M\000\000\000\000\000\000\000\000\000\000\003M\003M\015\006\015\030\003M\000\000\000\000\003M\000\000\000\000\000\000\000\000\003M\000\000\000\000\003M\003M\000\000\000\000\000\000\000\000\003M\003M\003M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003M\003M\014&\014\166\015N\003M\003M\003M\003M\000\000\000\000\003M\000\000\003M\003M\000\000\000\000\000\000\000\000\000\000\000\000\003M\003M\003M\000\000\003M\003M\003M\000\000\003M\000\000\000\000\000\000\003M\000\000\003M\003M\000\000\003M\003M\003M\015~\003M\003M\000\000\000\000\003M\003M\003M\000\000\000\000\000\000\000\000\003M\003M\003M\003M\002\153\002\153\000\000\000\000\000\000\002\153\000\000\000\000\002\153\000\000\000\000\002\153\000\000\002\153\000\000\000\000\002\153\000\000\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\002\153\002\153\000\000\002\153\000\000\000\000\000\000\000\000\000\000\002\153\002\153\002\153\002\153\002\153\000\000\000\000\002\153\000\000\000\000\000\000\000\000\002\153\000\000\000\000\002\153\002\153\000\000\000\000\000\000\000\000\002\153\002\153\002\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\153\002\153\002\153\002\153\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\000\000\000\000\002\153\002\153\002\153\000\000\002\153\002\153\002\153\000\000\002\153\000\000\000\000\000\000\002\153\000\000\002\153\002\153\000\000\012\138\002\153\002\153\002\153\002\153\002\153\000\000\000\000\002\153\002\153\r\234\000\000\000\000\000\000\000\000\002\153\002\153\002\153\002\153\002\149\002\149\000\000\000\000\000\000\002\149\000\000\000\000\002\149\000\000\000\000\002\149\000\000\002\149\000\000\000\000\014\014\000\000\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\014v\014\190\014\214\014\142\002\149\000\000\002\149\000\000\000\000\000\000\000\000\000\000\002\149\002\149\015\006\015\030\002\149\000\000\000\000\002\149\000\000\000\000\000\000\000\000\002\149\000\000\000\000\002\149\002\149\000\000\000\000\000\000\000\000\002\149\002\149\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\149\002\149\014&\014\166\015N\015f\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\000\000\000\000\002\149\002\149\002\149\000\000\002\149\002\149\002\149\000\000\002\149\000\000\000\000\000\000\002\149\000\000\002\149\002\149\000\000\002\149\002\149\002\149\015~\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\003\t\003\t\000\000\000\000\000\000\003\t\000\000\000\000\003\t\000\000\000\000\003\t\000\000\003\t\000\000\000\000\003\t\000\000\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\003\t\003\t\003\t\003\t\003\t\000\000\003\t\000\000\000\000\000\000\000\000\000\000\003\t\003\t\003\t\003\t\003\t\000\000\000\000\003\t\000\000\000\000\000\000\000\000\003\t\000\000\000\000\003\t\003\t\000\000\000\000\000\000\000\000\003\t\003\t\003\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\t\003\t\003\t\003\t\003\t\003\t\003\t\003\t\003\t\000\000\000\000\003\t\000\000\003\t\003\t\000\000\000\000\000\000\000\000\000\000\000\000\003\t\003\t\003\t\000\000\003\t\003\t\003\t\000\000\003\t\000\000\000\000\000\000\003\t\000\000\003\t\003\t\000\000\012\138\003\t\003\t\003\t\003\t\003\t\000\000\000\000\003\t\003\t\r\234\000\000\000\000\000\000\000\000\003\t\003\t\003\t\003\t\003\005\003\005\000\000\000\000\000\000\003\005\000\000\000\000\003\005\000\000\000\000\003\005\000\000\003\005\000\000\000\000\014\014\000\000\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\014v\014\190\014\214\014\142\003\005\000\000\003\005\000\000\000\000\000\000\000\000\000\000\003\005\003\005\015\006\015\030\003\005\000\000\000\000\003\005\000\000\000\000\000\000\000\000\003\005\000\000\000\000\003\005\003\005\000\000\000\000\000\000\000\000\003\005\003\005\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\005\003\005\014&\014\166\015N\015f\003\005\003\005\003\005\000\000\000\000\003\005\000\000\003\005\003\005\000\000\000\000\000\000\000\000\000\000\000\000\003\005\003\005\003\005\000\000\003\005\003\005\003\005\000\000\003\005\000\000\000\000\000\000\003\005\000\000\003\005\003\005\000\000\003\005\003\005\003\005\015~\003\005\003\005\000\000\000\000\003\005\003\005\003\005\000\000\000\000\000\000\000\000\003\005\003\005\003\005\003\005\002\249\002\249\000\000\000\000\000\000\002\249\000\000\000\000\002\249\000\000\000\000\002\249\000\000\002\249\000\000\000\000\002\249\000\000\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\002\249\002\249\002\249\002\249\002\249\000\000\002\249\000\000\000\000\000\000\000\000\000\000\002\249\002\249\002\249\002\249\002\249\000\000\000\000\002\249\000\000\000\000\000\000\000\000\002\249\000\000\000\000\002\249\002\249\000\000\000\000\000\000\000\000\002\249\002\249\002\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\249\002\249\002\249\002\249\002\249\002\249\002\249\002\249\002\249\000\000\000\000\002\249\000\000\002\249\002\249\000\000\000\000\000\000\000\000\000\000\000\000\002\249\002\249\002\249\000\000\002\249\002\249\002\249\000\000\002\249\000\000\000\000\000\000\002\249\000\000\002\249\002\249\000\000\012\138\002\249\002\249\002\249\002\249\002\249\000\000\000\000\002\249\002\249\r\234\000\000\000\000\000\000\000\000\002\249\002\249\002\249\002\249\002\245\002\245\000\000\000\000\000\000\002\245\000\000\000\000\002\245\000\000\000\000\002\245\000\000\002\245\000\000\000\000\014\014\000\000\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\014v\014\190\014\214\014\142\002\245\000\000\002\245\000\000\000\000\000\000\000\000\000\000\002\245\002\245\015\006\015\030\002\245\000\000\000\000\002\245\000\000\000\000\000\000\000\000\002\245\000\000\000\000\002\245\002\245\000\000\000\000\000\000\000\000\002\245\002\245\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\245\002\245\014&\014\166\015N\015f\002\245\002\245\002\245\000\000\000\000\002\245\000\000\002\245\002\245\000\000\000\000\000\000\000\000\000\000\000\000\002\245\002\245\002\245\000\000\002\245\002\245\002\245\000\000\002\245\000\000\000\000\000\000\002\245\000\000\002\245\002\245\000\000\002\245\002\245\002\245\015~\002\245\002\245\000\000\000\000\002\245\002\245\002\245\000\000\000\000\000\000\000\000\002\245\002\245\002\245\002\245\003\025\003\025\000\000\000\000\000\000\003\025\000\000\000\000\003\025\000\000\000\000\003\025\000\000\003\025\000\000\000\000\003\025\000\000\000\000\003\025\003\025\003\025\000\000\003\025\003\025\003\025\000\000\000\000\000\000\000\000\000\000\003\025\003\025\003\025\003\025\003\025\000\000\003\025\000\000\000\000\000\000\000\000\000\000\003\025\003\025\003\025\003\025\003\025\000\000\000\000\003\025\000\000\000\000\000\000\000\000\003\025\000\000\000\000\003\025\003\025\000\000\000\000\000\000\000\000\003\025\003\025\003\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\025\003\025\003\025\003\025\003\025\003\025\003\025\003\025\003\025\000\000\000\000\003\025\000\000\003\025\003\025\000\000\000\000\000\000\000\000\000\000\000\000\003\025\003\025\003\025\000\000\003\025\003\025\003\025\000\000\003\025\000\000\000\000\000\000\003\025\000\000\003\025\003\025\000\000\012\138\003\025\003\025\003\025\003\025\003\025\000\000\000\000\003\025\003\025\r\234\000\000\000\000\000\000\000\000\003\025\003\025\003\025\003\025\003\021\003\021\000\000\000\000\000\000\003\021\000\000\000\000\003\021\000\000\000\000\003\021\000\000\003\021\000\000\000\000\014\014\000\000\000\000\003\021\003\021\003\021\000\000\003\021\003\021\003\021\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\003\021\000\000\000\000\000\000\000\000\000\000\003\021\003\021\015\006\015\030\003\021\000\000\000\000\003\021\000\000\000\000\000\000\000\000\003\021\000\000\000\000\0156\003\021\000\000\000\000\000\000\000\000\003\021\003\021\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\021\003\021\014&\014\166\015N\015f\015\150\003\021\003\021\000\000\000\000\003\021\000\000\003\021\015\174\000\000\000\000\000\000\000\000\000\000\000\000\003\021\003\021\015\198\000\000\003\021\003\021\003\021\000\000\003\021\000\000\000\000\000\000\003\021\000\000\003\021\003\021\000\000\003\021\003\021\003\021\015~\003\021\003\021\000\000\000\000\003\021\015\222\003\021\000\000\000\000\000\000\000\000\003\021\003\021\015\246\016\014\003!\003!\000\000\000\000\000\000\003!\000\000\000\000\003!\000\000\000\000\003!\000\000\003!\000\000\000\000\003!\000\000\000\000\003!\003!\003!\000\000\003!\003!\003!\000\000\000\000\000\000\000\000\000\000\003!\003!\003!\003!\003!\000\000\003!\000\000\000\000\000\000\000\000\000\000\003!\003!\003!\003!\003!\000\000\000\000\003!\000\000\000\000\000\000\000\000\003!\000\000\000\000\003!\003!\000\000\000\000\000\000\000\000\003!\003!\003!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\003!\003!\003!\003!\003!\003!\003!\003!\000\000\000\000\003!\000\000\003!\003!\000\000\000\000\000\000\000\000\000\000\000\000\003!\003!\003!\000\000\003!\003!\003!\000\000\003!\000\000\000\000\000\000\003!\000\000\003!\003!\000\000\012\138\003!\003!\003!\003!\003!\000\000\000\000\003!\003!\r\234\000\000\000\000\000\000\000\000\003!\003!\003!\003!\003\029\003\029\000\000\000\000\000\000\003\029\000\000\000\000\003\029\000\000\000\000\003\029\000\000\003\029\000\000\000\000\014\014\000\000\000\000\003\029\003\029\003\029\000\000\003\029\003\029\003\029\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\003\029\000\000\003\029\000\000\000\000\000\000\000\000\000\000\003\029\003\029\015\006\015\030\003\029\000\000\000\000\003\029\000\000\000\000\000\000\000\000\003\029\000\000\000\000\0156\003\029\000\000\000\000\000\000\000\000\003\029\003\029\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\029\003\029\014&\014\166\015N\015f\015\150\003\029\003\029\000\000\000\000\003\029\000\000\003\029\015\174\000\000\000\000\000\000\000\000\000\000\000\000\003\029\003\029\015\198\000\000\003\029\003\029\003\029\000\000\003\029\000\000\000\000\000\000\003\029\000\000\003\029\003\029\000\000\003\029\003\029\003\029\015~\003\029\003\029\000\000\000\000\003\029\003\029\003\029\000\000\000\000\000\000\000\000\003\029\003\029\015\246\016\014\003)\003)\000\000\000\000\000\000\003)\000\000\000\000\003)\000\000\000\000\003)\000\000\003)\000\000\000\000\003)\000\000\000\000\003)\003)\003)\000\000\003)\003)\003)\000\000\000\000\000\000\000\000\000\000\003)\003)\003)\003)\003)\000\000\003)\000\000\000\000\000\000\000\000\000\000\003)\003)\003)\003)\003)\000\000\000\000\003)\000\000\000\000\000\000\000\000\003)\000\000\000\000\003)\003)\000\000\000\000\000\000\000\000\003)\003)\003)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003)\003)\003)\003)\003)\003)\003)\003)\003)\000\000\000\000\003)\000\000\003)\003)\000\000\000\000\000\000\000\000\000\000\000\000\003)\003)\003)\000\000\003)\003)\003)\000\000\003)\000\000\000\000\000\000\003)\000\000\003)\003)\000\000\012\138\003)\003)\003)\003)\003)\000\000\000\000\003)\003)\r\234\000\000\000\000\000\000\000\000\003)\003)\003)\003)\003%\003%\000\000\000\000\000\000\003%\000\000\000\000\003%\000\000\000\000\003%\000\000\003%\000\000\000\000\014\014\000\000\000\000\003%\003%\003%\000\000\003%\003%\003%\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\003%\000\000\003%\000\000\000\000\000\000\000\000\000\000\003%\003%\015\006\015\030\003%\000\000\000\000\003%\000\000\000\000\000\000\000\000\003%\000\000\000\000\0156\003%\000\000\000\000\000\000\000\000\003%\003%\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003%\003%\014&\014\166\015N\015f\015\150\003%\003%\000\000\000\000\003%\000\000\003%\015\174\000\000\000\000\000\000\000\000\000\000\000\000\003%\003%\015\198\000\000\003%\003%\003%\000\000\003%\000\000\000\000\000\000\003%\000\000\003%\003%\000\000\003%\003%\003%\015~\003%\003%\000\000\000\000\003%\003%\003%\000\000\000\000\000\000\000\000\003%\003%\015\246\016\014\n\133\n\133\000\000\000\000\000\000\n\133\000\000\000\000\n\133\000\000\000\000\n\133\000\000\n\133\000\000\000\000\n\133\000\000\000\000\n\133\n\133\n\133\000\000\n\133\n\133\n\133\000\000\000\000\000\000\000\000\000\000\n\133\n\133\n\133\n\133\n\133\000\000\n\133\000\000\000\000\000\000\000\000\000\000\n\133\n\133\n\133\n\133\n\133\000\000\000\000\n\133\000\000\000\000\000\000\000\000\n\133\000\000\000\000\n\133\n\133\000\000\000\000\000\000\000\000\n\133\n\133\n\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\133\n\133\n\133\n\133\n\133\n\133\n\133\n\133\n\133\000\000\000\000\n\133\000\000\n\133\n\133\000\000\000\000\000\000\000\000\000\000\000\000\n\133\n\133\n\133\000\000\n\133\n\133\n\133\000\000\n\133\000\000\000\000\000\000\n\133\000\000\n\133\n\133\000\000\012\138\n\133\n\133\n\133\n\133\n\133\000\000\000\000\n\133\n\133\r\234\000\000\000\000\000\000\000\000\n\133\n\133\n\133\n\133\n\129\n\129\000\000\000\000\000\000\n\129\000\000\000\000\n\129\000\000\000\000\n\129\000\000\n\129\000\000\000\000\014\014\000\000\000\000\n\129\n\129\n\129\000\000\n\129\n\129\n\129\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\n\129\000\000\000\000\000\000\000\000\000\000\n\129\n\129\015\006\015\030\n\129\000\000\000\000\n\129\000\000\000\000\000\000\000\000\n\129\000\000\000\000\0156\n\129\000\000\000\000\000\000\000\000\n\129\n\129\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\129\n\129\014&\014\166\015N\015f\015\150\n\129\n\129\000\000\000\000\n\129\000\000\n\129\015\174\000\000\000\000\000\000\000\000\000\000\000\000\n\129\n\129\015\198\000\000\n\129\n\129\n\129\000\000\n\129\000\000\000\000\000\000\n\129\000\000\n\129\n\129\000\000\n\129\n\129\n\129\015~\n\129\n\129\000\000\000\000\n\129\015\222\n\129\000\000\000\000\000\000\000\000\n\129\n\129\015\246\016\014\0031\0031\000\000\000\000\000\000\0031\000\000\000\000\0031\000\000\000\000\0031\000\000\0031\000\000\000\000\0031\000\000\000\000\0031\0031\0031\000\000\0031\0031\0031\000\000\000\000\000\000\000\000\000\000\0031\0031\0031\0031\0031\000\000\0031\000\000\000\000\000\000\000\000\000\000\0031\0031\0031\0031\0031\000\000\000\000\0031\000\000\000\000\000\000\000\000\0031\000\000\000\000\0031\0031\000\000\000\000\000\000\000\000\0031\0031\0031\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0031\0031\0031\0031\0031\0031\0031\0031\0031\000\000\000\000\0031\000\000\0031\0031\000\000\000\000\000\000\000\000\000\000\000\000\0031\0031\0031\000\000\0031\0031\0031\000\000\0031\000\000\000\000\000\000\0031\000\000\0031\0031\000\000\012\138\0031\0031\0031\0031\0031\000\000\000\000\0031\0031\r\234\000\000\000\000\000\000\000\000\0031\0031\0031\0031\003-\003-\000\000\000\000\000\000\003-\000\000\000\000\003-\000\000\000\000\003-\000\000\003-\000\000\000\000\014\014\000\000\000\000\003-\003-\003-\000\000\003-\003-\003-\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\003-\000\000\000\000\000\000\000\000\000\000\003-\003-\015\006\015\030\003-\000\000\000\000\003-\000\000\000\000\000\000\000\000\003-\000\000\000\000\0156\003-\000\000\000\000\000\000\000\000\003-\003-\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003-\003-\014&\014\166\015N\015f\015\150\003-\003-\000\000\000\000\003-\000\000\003-\015\174\000\000\000\000\000\000\000\000\000\000\000\000\003-\003-\015\198\000\000\003-\003-\003-\000\000\003-\000\000\000\000\000\000\003-\000\000\003-\003-\000\000\016&\003-\016^\015~\003-\003-\000\000\000\000\003-\015\222\003-\000\000\000\000\000\000\000\000\003-\003-\015\246\016\014\nm\nm\000\000\000\000\000\000\nm\000\000\000\000\nm\000\000\000\000\nm\000\000\nm\000\000\000\000\014\014\000\000\000\000\nm\nm\nm\000\000\nm\nm\nm\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\nm\000\000\000\000\000\000\000\000\000\000\nm\nm\015\006\015\030\nm\000\000\000\000\nm\000\000\000\000\000\000\000\000\nm\000\000\000\000\0156\nm\000\000\000\000\000\000\000\000\nm\nm\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nm\nm\014&\014\166\015N\015f\015\150\nm\nm\000\000\000\000\nm\000\000\nm\015\174\000\000\000\000\000\000\000\000\000\000\000\000\nm\nm\015\198\000\000\nm\nm\nm\000\000\nm\000\000\000\000\000\000\nm\000\000\nm\nm\000\000\nm\nm\nm\015~\nm\nm\000\000\000\000\nm\015\222\nm\000\000\000\000\000\000\000\000\nm\nm\015\246\016\014\003\129\003\129\000\000\000\000\000\000\003\129\000\000\000\000\003\129\000\000\000\000\003\129\000\000\003\129\000\000\000\000\003\129\000\000\000\000\003\129\003\129\003\129\000\000\003\129\003\129\003\129\000\000\000\000\000\000\000\000\000\000\003\129\003\129\003\129\003\129\003\129\000\000\003\129\000\000\000\000\000\000\000\000\000\000\003\129\003\129\003\129\003\129\003\129\000\000\000\000\003\129\000\000\000\000\000\000\000\000\003\129\000\000\000\000\003\129\003\129\000\000\000\000\000\000\000\000\003\129\003\129\003\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\129\003\129\003\129\003\129\003\129\003\129\003\129\003\129\003\129\000\000\000\000\003\129\000\000\003\129\003\129\000\000\000\000\000\000\000\000\000\000\000\000\003\129\003\129\003\129\000\000\003\129\003\129\003\129\000\000\003\129\000\000\000\000\000\000\003\129\000\000\003\129\003\129\000\000\012\138\003\129\003\129\003\129\003\129\003\129\000\000\000\000\003\129\003\129\r\234\000\000\000\000\000\000\000\000\003\129\003\129\003\129\003\129\003}\003}\000\000\000\000\000\000\003}\000\000\000\000\003}\000\000\000\000\003}\000\000\003}\000\000\000\000\014\014\000\000\000\000\003}\003}\003}\000\000\003}\003}\003}\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\003}\000\000\000\000\000\000\000\000\000\000\003}\003}\015\006\015\030\003}\000\000\000\000\003}\000\000\000\000\000\000\000\000\003}\000\000\000\000\0156\003}\000\000\000\000\000\000\000\000\003}\003}\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003}\003}\014&\014\166\015N\015f\015\150\003}\003}\000\000\000\000\003}\000\000\003}\015\174\000\000\000\000\000\000\000\000\000\000\000\000\003}\003}\015\198\000\000\003}\003}\003}\000\000\003}\000\000\000\000\000\000\003}\000\000\003}\003}\000\000\016&\003}\016^\015~\003}\003}\000\000\000\000\003}\015\222\003}\000\000\000\000\000\000\000\000\003}\003}\015\246\016\014\003\161\003\161\000\000\000\000\000\000\003\161\000\000\000\000\003\161\000\000\000\000\003\161\000\000\003\161\000\000\000\000\003\161\000\000\000\000\003\161\003\161\003\161\000\000\003\161\003\161\003\161\000\000\000\000\000\000\000\000\000\000\003\161\003\161\003\161\003\161\003\161\000\000\003\161\000\000\000\000\000\000\000\000\000\000\003\161\003\161\003\161\003\161\003\161\000\000\000\000\003\161\000\000\000\000\000\000\000\000\003\161\000\000\000\000\003\161\003\161\000\000\000\000\000\000\000\000\003\161\003\161\003\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\000\000\000\000\003\161\000\000\003\161\003\161\000\000\000\000\000\000\000\000\000\000\000\000\003\161\003\161\003\161\000\000\003\161\003\161\003\161\000\000\003\161\000\000\000\000\000\000\003\161\000\000\003\161\003\161\000\000\012\138\003\161\003\161\003\161\003\161\003\161\000\000\000\000\003\161\003\161\r\234\000\000\000\000\000\000\000\000\003\161\003\161\003\161\003\161\003\157\003\157\000\000\000\000\000\000\003\157\000\000\000\000\003\157\000\000\000\000\003\157\000\000\003\157\000\000\000\000\014\014\000\000\000\000\003\157\003\157\003\157\000\000\003\157\003\157\003\157\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\003\157\000\000\000\000\000\000\000\000\000\000\003\157\003\157\015\006\015\030\003\157\000\000\000\000\003\157\000\000\000\000\000\000\000\000\003\157\000\000\000\000\0156\003\157\000\000\000\000\000\000\000\000\003\157\003\157\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\157\003\157\014&\014\166\015N\015f\015\150\003\157\003\157\000\000\000\000\003\157\000\000\003\157\015\174\000\000\000\000\000\000\000\000\000\000\000\000\003\157\003\157\015\198\000\000\003\157\003\157\003\157\000\000\003\157\000\000\000\000\000\000\003\157\000\000\003\157\003\157\000\000\016&\003\157\016^\015~\003\157\003\157\000\000\000\000\003\157\015\222\003\157\000\000\000\000\000\000\000\000\003\157\003\157\015\246\016\014\003\145\003\145\000\000\000\000\000\000\003\145\000\000\000\000\003\145\000\000\000\000\003\145\000\000\003\145\000\000\000\000\003\145\000\000\000\000\003\145\003\145\003\145\000\000\003\145\003\145\003\145\000\000\000\000\000\000\000\000\000\000\003\145\003\145\003\145\003\145\003\145\000\000\003\145\000\000\000\000\000\000\000\000\000\000\003\145\003\145\003\145\003\145\003\145\000\000\000\000\003\145\000\000\000\000\000\000\000\000\003\145\000\000\000\000\003\145\003\145\000\000\000\000\000\000\000\000\003\145\003\145\003\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\145\003\145\003\145\003\145\003\145\003\145\003\145\003\145\003\145\000\000\000\000\003\145\000\000\003\145\003\145\000\000\000\000\000\000\000\000\000\000\000\000\003\145\003\145\003\145\000\000\003\145\003\145\003\145\000\000\003\145\000\000\000\000\000\000\003\145\000\000\003\145\003\145\000\000\012\138\003\145\003\145\003\145\003\145\003\145\000\000\000\000\003\145\003\145\r\234\000\000\000\000\000\000\000\000\003\145\003\145\003\145\003\145\003\141\003\141\000\000\000\000\000\000\003\141\000\000\000\000\003\141\000\000\000\000\003\141\000\000\003\141\000\000\000\000\014\014\000\000\000\000\003\141\003\141\003\141\000\000\003\141\003\141\003\141\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\003\141\000\000\000\000\000\000\000\000\000\000\003\141\003\141\015\006\015\030\003\141\000\000\000\000\003\141\000\000\000\000\000\000\000\000\003\141\000\000\000\000\0156\003\141\000\000\000\000\000\000\000\000\003\141\003\141\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\141\003\141\014&\014\166\015N\015f\015\150\003\141\003\141\000\000\000\000\003\141\000\000\003\141\015\174\000\000\000\000\000\000\000\000\000\000\000\000\003\141\003\141\015\198\000\000\003\141\003\141\003\141\000\000\003\141\000\000\000\000\000\000\003\141\000\000\003\141\003\141\000\000\016&\003\141\016^\015~\003\141\003\141\000\000\000\000\003\141\015\222\003\141\000\000\000\000\000\000\000\000\003\141\003\141\015\246\016\014\003i\003i\000\000\000\000\000\000\003i\000\000\000\000\003i\000\000\000\000\003i\000\000\003i\000\000\000\000\003i\000\000\000\000\003i\003i\003i\000\000\003i\003i\003i\000\000\000\000\000\000\000\000\000\000\003i\003i\003i\003i\003i\000\000\003i\000\000\000\000\000\000\000\000\000\000\003i\003i\003i\003i\003i\000\000\000\000\003i\000\000\000\000\000\000\000\000\003i\000\000\000\000\003i\003i\000\000\000\000\000\000\000\000\003i\003i\003i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003i\003i\003i\003i\003i\003i\003i\003i\003i\000\000\000\000\003i\000\000\003i\003i\000\000\000\000\000\000\000\000\000\000\000\000\003i\003i\003i\000\000\003i\003i\003i\000\000\003i\000\000\000\000\000\000\003i\000\000\003i\003i\000\000\012\138\003i\003i\003i\003i\003i\000\000\000\000\003i\003i\r\234\000\000\000\000\000\000\000\000\003i\003i\003i\003i\003e\003e\000\000\000\000\000\000\003e\000\000\000\000\003e\000\000\000\000\003e\000\000\003e\000\000\000\000\014\014\000\000\000\000\003e\003e\003e\000\000\003e\003e\003e\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\003e\000\000\000\000\000\000\000\000\000\000\003e\003e\015\006\015\030\003e\000\000\000\000\003e\000\000\000\000\000\000\000\000\003e\000\000\000\000\0156\003e\000\000\000\000\000\000\000\000\003e\003e\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003e\003e\014&\014\166\015N\015f\015\150\003e\003e\000\000\000\000\003e\000\000\003e\015\174\000\000\000\000\000\000\000\000\000\000\000\000\003e\003e\015\198\000\000\003e\003e\003e\000\000\003e\000\000\000\000\000\000\003e\000\000\003e\003e\000\000\016&\003e\016^\015~\003e\003e\000\000\000\000\003e\015\222\003e\000\000\000\000\000\000\000\000\003e\003e\015\246\016\014\003y\003y\000\000\000\000\000\000\003y\000\000\000\000\003y\000\000\000\000\003y\000\000\003y\000\000\000\000\003y\000\000\000\000\003y\003y\003y\000\000\003y\003y\003y\000\000\000\000\000\000\000\000\000\000\003y\003y\003y\003y\003y\000\000\003y\000\000\000\000\000\000\000\000\000\000\003y\003y\003y\003y\003y\000\000\000\000\003y\000\000\000\000\000\000\000\000\003y\000\000\000\000\003y\003y\000\000\000\000\000\000\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\003y\003y\003y\003y\003y\003y\003y\003y\003y\000\000\000\000\003y\000\000\003y\003y\000\000\000\000\000\000\000\000\000\000\000\000\003y\003y\003y\000\000\003y\003y\003y\000\000\003y\000\000\000\000\000\000\003y\000\000\003y\003y\000\000\012\138\003y\003y\003y\003y\003y\000\000\000\000\003y\003y\r\234\000\000\000\000\000\000\000\000\003y\003y\003y\003y\003u\003u\000\000\000\000\000\000\003u\000\000\000\000\003u\000\000\000\000\003u\000\000\003u\000\000\000\000\014\014\000\000\000\000\003u\003u\003u\000\000\003u\003u\003u\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\003u\000\000\000\000\000\000\000\000\000\000\003u\003u\015\006\015\030\003u\000\000\000\000\003u\000\000\000\000\000\000\000\000\003u\000\000\000\000\0156\003u\000\000\000\000\000\000\000\000\003u\003u\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003u\003u\014&\014\166\015N\015f\015\150\003u\003u\000\000\000\000\003u\000\000\003u\015\174\000\000\000\000\000\000\000\000\000\000\000\000\003u\003u\015\198\000\000\003u\003u\003u\000\000\003u\000\000\000\000\000\000\003u\000\000\003u\003u\000\000\016&\003u\016^\015~\003u\003u\000\000\000\000\003u\015\222\003u\000\000\000\000\000\000\000\000\003u\003u\015\246\016\014\003q\003q\000\000\000\000\000\000\003q\000\000\000\000\003q\000\000\000\000\003q\000\000\003q\000\000\000\000\003q\000\000\000\000\003q\003q\003q\000\000\003q\003q\003q\000\000\000\000\000\000\000\000\000\000\003q\003q\003q\003q\003q\000\000\003q\000\000\000\000\000\000\000\000\000\000\003q\003q\003q\003q\003q\000\000\000\000\003q\000\000\000\000\000\000\000\000\003q\000\000\000\000\003q\003q\000\000\000\000\000\000\000\000\003q\003q\003q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003q\003q\003q\003q\003q\003q\003q\003q\003q\000\000\000\000\003q\000\000\003q\003q\000\000\000\000\000\000\000\000\000\000\000\000\003q\003q\003q\000\000\003q\003q\003q\000\000\003q\000\000\000\000\000\000\003q\000\000\003q\003q\000\000\012\138\003q\003q\003q\003q\003q\000\000\000\000\003q\003q\r\234\000\000\000\000\000\000\000\000\003q\003q\003q\003q\003m\003m\000\000\000\000\000\000\003m\000\000\000\000\003m\000\000\000\000\003m\000\000\003m\000\000\000\000\014\014\000\000\000\000\003m\003m\003m\000\000\003m\003m\003m\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\003m\000\000\000\000\000\000\000\000\000\000\003m\003m\015\006\015\030\003m\000\000\000\000\003m\000\000\000\000\000\000\000\000\003m\000\000\000\000\0156\003m\000\000\000\000\000\000\000\000\003m\003m\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003m\003m\014&\014\166\015N\015f\015\150\003m\003m\000\000\000\000\003m\000\000\003m\015\174\000\000\000\000\000\000\000\000\000\000\000\000\003m\003m\015\198\000\000\003m\003m\003m\000\000\003m\000\000\000\000\000\000\003m\000\000\003m\003m\000\000\016&\003m\016^\015~\003m\003m\000\000\000\000\003m\015\222\003m\000\000\000\000\000\000\000\000\003m\003m\015\246\016\014\003\137\003\137\000\000\000\000\000\000\003\137\000\000\000\000\003\137\000\000\000\000\003\137\000\000\003\137\000\000\000\000\003\137\000\000\000\000\003\137\003\137\003\137\000\000\003\137\003\137\003\137\000\000\000\000\000\000\000\000\000\000\003\137\003\137\003\137\003\137\003\137\000\000\003\137\000\000\000\000\000\000\000\000\000\000\003\137\003\137\003\137\003\137\003\137\000\000\000\000\003\137\000\000\000\000\000\000\000\000\003\137\000\000\000\000\003\137\003\137\000\000\000\000\000\000\000\000\003\137\003\137\003\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\137\003\137\003\137\003\137\003\137\003\137\003\137\003\137\003\137\000\000\000\000\003\137\000\000\003\137\003\137\000\000\000\000\000\000\000\000\000\000\000\000\003\137\003\137\003\137\000\000\003\137\003\137\003\137\000\000\003\137\000\000\000\000\000\000\003\137\000\000\003\137\003\137\000\000\012\138\003\137\003\137\003\137\003\137\003\137\000\000\000\000\003\137\003\137\r\234\000\000\000\000\000\000\000\000\003\137\003\137\003\137\003\137\003\133\003\133\000\000\000\000\000\000\003\133\000\000\000\000\003\133\000\000\000\000\003\133\000\000\003\133\000\000\000\000\014\014\000\000\000\000\003\133\003\133\003\133\000\000\003\133\003\133\003\133\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\003\133\000\000\000\000\000\000\000\000\000\000\003\133\003\133\015\006\015\030\003\133\000\000\000\000\003\133\000\000\000\000\000\000\000\000\003\133\000\000\000\000\0156\003\133\000\000\000\000\000\000\000\000\003\133\003\133\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\133\003\133\014&\014\166\015N\015f\015\150\003\133\003\133\000\000\000\000\003\133\000\000\003\133\015\174\000\000\000\000\000\000\000\000\000\000\000\000\003\133\003\133\015\198\000\000\003\133\003\133\003\133\000\000\003\133\000\000\000\000\000\000\003\133\000\000\003\133\003\133\000\000\016&\003\133\016^\015~\003\133\003\133\000\000\000\000\003\133\015\222\003\133\000\000\000\000\000\000\000\000\003\133\003\133\015\246\016\014\003\169\003\169\000\000\000\000\000\000\003\169\000\000\000\000\003\169\000\000\000\000\003\169\000\000\003\169\000\000\000\000\003\169\000\000\000\000\003\169\003\169\003\169\000\000\003\169\003\169\003\169\000\000\000\000\000\000\000\000\000\000\003\169\003\169\003\169\003\169\003\169\000\000\003\169\000\000\000\000\000\000\000\000\000\000\003\169\003\169\003\169\003\169\003\169\000\000\000\000\003\169\000\000\000\000\000\000\000\000\003\169\000\000\000\000\003\169\003\169\000\000\000\000\000\000\000\000\003\169\003\169\003\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\169\003\169\003\169\003\169\003\169\003\169\003\169\003\169\003\169\000\000\000\000\003\169\000\000\003\169\003\169\000\000\000\000\000\000\000\000\000\000\000\000\003\169\003\169\003\169\000\000\003\169\003\169\003\169\000\000\003\169\000\000\000\000\000\000\003\169\000\000\003\169\003\169\000\000\012\138\003\169\003\169\003\169\003\169\003\169\000\000\000\000\003\169\003\169\r\234\000\000\000\000\000\000\000\000\003\169\003\169\003\169\003\169\003\165\003\165\000\000\000\000\000\000\003\165\000\000\000\000\003\165\000\000\000\000\003\165\000\000\003\165\000\000\000\000\014\014\000\000\000\000\003\165\003\165\003\165\000\000\003\165\003\165\003\165\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\003\165\000\000\000\000\000\000\000\000\000\000\003\165\003\165\015\006\015\030\003\165\000\000\000\000\003\165\000\000\000\000\000\000\000\000\003\165\000\000\000\000\0156\003\165\000\000\000\000\000\000\000\000\003\165\003\165\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\165\003\165\014&\014\166\015N\015f\015\150\003\165\003\165\000\000\000\000\003\165\000\000\003\165\015\174\000\000\000\000\000\000\000\000\000\000\000\000\003\165\003\165\015\198\000\000\003\165\003\165\003\165\000\000\003\165\000\000\000\000\000\000\003\165\000\000\003\165\003\165\000\000\016&\003\165\016^\015~\003\165\003\165\000\000\000\000\003\165\015\222\003\165\000\000\000\000\000\000\000\000\003\165\003\165\015\246\016\014\003\153\003\153\000\000\000\000\000\000\003\153\000\000\000\000\003\153\000\000\000\000\003\153\000\000\003\153\000\000\000\000\003\153\000\000\000\000\003\153\003\153\003\153\000\000\003\153\003\153\003\153\000\000\000\000\000\000\000\000\000\000\003\153\003\153\003\153\003\153\003\153\000\000\003\153\000\000\000\000\000\000\000\000\000\000\003\153\003\153\003\153\003\153\003\153\000\000\000\000\003\153\000\000\000\000\000\000\000\000\003\153\000\000\000\000\003\153\003\153\000\000\000\000\000\000\000\000\003\153\003\153\003\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\153\003\153\003\153\003\153\003\153\003\153\003\153\003\153\003\153\000\000\000\000\003\153\000\000\003\153\003\153\000\000\000\000\000\000\000\000\000\000\000\000\003\153\003\153\003\153\000\000\003\153\003\153\003\153\000\000\003\153\000\000\000\000\000\000\003\153\000\000\003\153\003\153\000\000\012\138\003\153\003\153\003\153\003\153\003\153\000\000\000\000\003\153\003\153\r\234\000\000\000\000\000\000\000\000\003\153\003\153\003\153\003\153\003\149\003\149\000\000\000\000\000\000\003\149\000\000\000\000\003\149\000\000\000\000\003\149\000\000\003\149\000\000\000\000\014\014\000\000\000\000\003\149\003\149\003\149\000\000\003\149\003\149\003\149\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\003\149\000\000\000\000\000\000\000\000\000\000\003\149\003\149\015\006\015\030\003\149\000\000\000\000\003\149\000\000\000\000\000\000\000\000\003\149\000\000\000\000\0156\003\149\000\000\000\000\000\000\000\000\003\149\003\149\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\149\003\149\014&\014\166\015N\015f\015\150\003\149\003\149\000\000\000\000\003\149\000\000\003\149\015\174\000\000\000\000\000\000\000\000\000\000\000\000\003\149\003\149\015\198\000\000\003\149\003\149\003\149\000\000\003\149\000\000\000\000\000\000\003\149\000\000\003\149\003\149\000\000\016&\003\149\016^\015~\003\149\003\149\000\000\000\000\003\149\015\222\003\149\000\000\000\000\000\000\000\000\003\149\003\149\015\246\016\014\003a\003a\000\000\000\000\000\000\003a\000\000\000\000\003a\000\000\000\000\003a\000\000\003a\000\000\000\000\003a\000\000\000\000\003a\003a\003a\000\000\003a\003a\003a\000\000\000\000\000\000\000\000\000\000\003a\003a\003a\003a\003a\000\000\003a\000\000\000\000\000\000\000\000\000\000\003a\003a\003a\003a\003a\000\000\000\000\003a\000\000\000\000\000\000\000\000\003a\000\000\000\000\003a\003a\000\000\000\000\000\000\000\000\003a\003a\003a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003a\003a\003a\003a\003a\003a\003a\003a\003a\000\000\000\000\003a\000\000\003a\003a\000\000\000\000\000\000\000\000\000\000\000\000\003a\003a\003a\000\000\003a\003a\003a\000\000\003a\000\000\000\000\000\000\003a\000\000\003a\003a\000\000\012\138\003a\003a\003a\003a\003a\000\000\000\000\003a\003a\r\234\000\000\000\000\000\000\000\000\003a\003a\003a\003a\003]\003]\000\000\000\000\000\000\003]\000\000\000\000\003]\000\000\000\000\003]\000\000\003]\000\000\000\000\014\014\000\000\000\000\003]\003]\003]\000\000\003]\003]\003]\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\003]\000\000\000\000\000\000\000\000\000\000\003]\003]\015\006\015\030\003]\000\000\000\000\003]\000\000\000\000\000\000\000\000\003]\000\000\000\000\0156\003]\000\000\000\000\000\000\000\000\003]\003]\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003]\003]\014&\014\166\015N\015f\015\150\003]\003]\000\000\000\000\003]\000\000\003]\015\174\000\000\000\000\000\000\000\000\000\000\000\000\003]\003]\015\198\000\000\003]\003]\003]\000\000\003]\000\000\000\000\000\000\003]\000\000\003]\003]\000\000\016&\003]\016^\015~\003]\003]\000\000\000\000\003]\015\222\003]\000\000\000\000\000\000\000\000\003]\003]\015\246\016\014\n\153\n\153\000\000\000\000\000\000\n\153\000\000\000\000\n\153\000\000\000\000\n\153\000\000\n\153\000\000\000\000\n\153\000\000\000\000\n\153\n\153\n\153\000\000\n\153\n\153\n\153\000\000\000\000\000\000\000\000\000\000\n\153\n\153\n\153\n\153\n\153\000\000\n\153\000\000\000\000\000\000\000\000\000\000\n\153\n\153\n\153\n\153\n\153\000\000\000\000\n\153\000\000\000\000\000\000\000\000\n\153\000\000\000\000\n\153\n\153\000\000\000\000\000\000\000\000\n\153\n\153\n\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\153\n\153\n\153\n\153\n\153\n\153\n\153\n\153\n\153\000\000\000\000\n\153\000\000\n\153\n\153\000\000\000\000\000\000\000\000\000\000\000\000\n\153\n\153\n\153\000\000\n\153\n\153\n\153\000\000\n\153\000\000\000\000\000\000\n\153\000\000\n\153\n\153\000\000\012\138\n\153\n\153\n\153\n\153\n\153\000\000\000\000\n\153\n\153\r\234\000\000\000\000\000\000\000\000\n\153\n\153\n\153\n\153\n\149\n\149\000\000\000\000\000\000\n\149\000\000\000\000\n\149\000\000\000\000\n\149\000\000\n\149\000\000\000\000\014\014\000\000\000\000\n\149\n\149\n\149\000\000\n\149\n\149\n\149\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\n\149\000\000\000\000\000\000\000\000\000\000\n\149\n\149\015\006\015\030\n\149\000\000\000\000\n\149\000\000\000\000\000\000\000\000\n\149\000\000\000\000\0156\n\149\000\000\000\000\000\000\000\000\n\149\n\149\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\149\n\149\014&\014\166\015N\015f\015\150\n\149\n\149\000\000\000\000\n\149\000\000\n\149\015\174\000\000\000\000\000\000\000\000\000\000\000\000\n\149\n\149\015\198\000\000\n\149\n\149\n\149\000\000\n\149\000\000\000\000\000\000\n\149\000\000\n\149\n\149\000\000\n\149\n\149\n\149\015~\n\149\n\149\000\000\000\000\n\149\015\222\n\149\000\000\000\000\000\000\000\000\n\149\n\149\015\246\016\014\011\241\011\241\000\000\000\000\000\000\011\241\000\000\000\000\011\241\000\000\000\000\011\241\000\000\011\241\000\000\000\000\011\241\000\000\000\000\011\241\011\241\011\241\000\000\011\241\011\241\011\241\000\000\000\000\000\000\000\000\000\000\011\241\011\241\011\241\011\241\011\241\000\000\011\241\000\000\000\000\000\000\000\000\000\000\011\241\011\241\011\241\011\241\011\241\000\000\000\000\011\241\000\000\000\000\000\000\000\000\011\241\000\000\000\000\011\241\011\241\000\000\000\000\000\000\000\000\011\241\011\241\011\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\241\011\241\011\241\011\241\011\241\011\241\011\241\011\241\011\241\000\000\000\000\011\241\000\000\011\241\011\241\000\000\000\000\000\000\000\000\000\000\000\000\011\241\011\241\011\241\000\000\011\241\011\241\011\241\000\000\011\241\000\000\000\000\000\000\011\241\000\000\011\241\011\241\000\000\012\138\011\241\011\241\011\241\011\241\011\241\000\000\000\000\011\241\011\241\r\234\000\000\000\000\000\000\000\000\011\241\011\241\011\241\011\241\002i\002i\000\000\000\000\000\000\002i\000\000\000\000\002i\000\000\000\000\002i\000\000\002i\000\000\000\000\002i\000\000\000\000\002i\002i\002i\000\000\002i\002i\002i\000\000\000\000\000\000\000\000\000\000\002i\002i\002i\002i\002i\000\000\002i\000\000\000\000\000\000\000\000\000\000\002i\002i\002i\002i\002i\000\000\000\000\002i\000\000\000\000\000\000\000\000\002i\000\000\000\000\002i\002i\000\000\000\000\000\000\000\000\002i\002i\002i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002i\002i\002i\002i\002i\002i\002i\002i\002i\000\000\000\000\002i\000\000\002i\002i\000\000\000\000\000\000\000\000\000\000\000\000\002i\002i\002i\000\000\002i\002i\019\230\000\000\002i\000\000\000\000\000\000\002i\000\000\002i\002i\000\000\012\138\002i\002i\002i\002i\002i\000\000\000\000\002i\002i\r\234\000\000\000\000\000\000\000\000\002i\002i\002i\002i\002a\002a\000\000\000\000\000\000\002a\000\000\000\000\002a\000\000\000\000\002a\000\000\002a\000\000\000\000\002a\000\000\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\002a\002a\002a\002a\002a\000\000\000\000\002a\000\000\000\000\000\000\000\000\002a\000\000\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\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\000\000\000\000\002a\002a\002a\000\000\002a\002a\002a\000\000\002a\000\000\000\000\000\000\002a\000\000\002a\002a\000\000\012\138\002a\002a\002a\002a\002a\000\000\000\000\002a\002a\r\234\000\000\000\000\000\000\000\000\002a\002a\002a\002a\002]\002]\000\000\000\000\000\000\002]\000\000\000\000\002]\000\000\000\000\002]\000\000\002]\000\000\000\000\014\014\000\000\000\000\002]\002]\002]\000\000\002]\002]\002]\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\002]\000\000\000\000\000\000\000\000\000\000\002]\002]\015\006\015\030\002]\000\000\000\000\002]\000\000\000\000\000\000\000\000\002]\000\000\000\000\0156\002]\000\000\000\000\000\000\000\000\002]\002]\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002]\002]\014&\014\166\015N\015f\015\150\002]\002]\000\000\000\000\002]\000\000\002]\015\174\000\000\000\000\000\000\000\000\000\000\000\000\002]\002]\015\198\000\000\002]\002]\002]\000\000\002]\000\000\000\000\000\000\002]\000\000\002]\002]\000\000\016&\002]\016^\015~\002]\002]\000\000\000\000\002]\015\222\002]\000\000\000\000\000\000\000\000\002]\002]\015\246\016\014\002e\002e\000\000\000\000\000\000\002e\000\000\000\000\002e\000\000\000\000\002e\000\000\002e\000\000\000\000\014\014\000\000\000\000\002e\002e\002e\000\000\002e\002e\002e\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\002e\000\000\000\000\000\000\000\000\000\000\002e\002e\015\006\015\030\002e\000\000\000\000\002e\000\000\000\000\000\000\000\000\002e\000\000\000\000\0156\002e\000\000\000\000\000\000\000\000\002e\002e\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002e\002e\014&\014\166\015N\015f\015\150\002e\002e\000\000\000\000\002e\000\000\002e\015\174\000\000\000\000\000\000\000\000\000\000\000\000\002e\002e\015\198\000\000\002e\002e\020\002\000\000\002e\000\000\000\000\000\000\002e\000\000\002e\002e\000\000\016&\002e\016^\015~\002e\002e\000\000\000\000\002e\015\222\002e\000\000\000\000\000\000\000\000\002e\002e\015\246\016\014\002Y\002Y\000\000\000\000\000\000\002Y\000\000\000\000\002Y\000\000\000\000\002Y\000\000\002Y\000\000\000\000\002Y\000\000\000\000\002Y\002Y\002Y\000\000\002Y\002Y\002Y\000\000\000\000\000\000\000\000\000\000\002Y\002Y\002Y\002Y\002Y\000\000\002Y\000\000\000\000\000\000\000\000\000\000\002Y\002Y\002Y\002Y\002Y\000\000\000\000\002Y\000\000\000\000\000\000\000\000\002Y\000\000\000\000\002Y\002Y\000\000\000\000\000\000\000\000\002Y\002Y\002Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002Y\002Y\002Y\002Y\002Y\002Y\002Y\002Y\002Y\000\000\000\000\002Y\000\000\002Y\002Y\000\000\000\000\000\000\000\000\000\000\000\000\002Y\002Y\002Y\000\000\002Y\002Y\002Y\000\000\002Y\000\000\000\000\000\000\002Y\000\000\002Y\002Y\000\000\012\138\002Y\002Y\002Y\002Y\002Y\000\000\000\000\002Y\002Y\r\234\000\000\000\000\000\000\000\000\002Y\002Y\002Y\002Y\002U\002U\000\000\000\000\000\000\002U\000\000\000\000\002U\000\000\000\000\002U\000\000\002U\000\000\000\000\014\014\000\000\000\000\002U\002U\002U\000\000\002U\002U\002U\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\002U\000\000\000\000\000\000\000\000\000\000\002U\002U\015\006\015\030\002U\000\000\000\000\002U\000\000\000\000\000\000\000\000\002U\000\000\000\000\0156\002U\000\000\000\000\000\000\000\000\002U\002U\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002U\002U\014&\014\166\015N\015f\015\150\002U\002U\000\000\000\000\002U\000\000\002U\015\174\000\000\000\000\000\000\000\000\000\000\000\000\002U\002U\015\198\000\000\002U\002U\002U\000\000\002U\000\000\000\000\000\000\002U\000\000\002U\002U\000\000\016&\002U\016^\015~\002U\002U\000\000\000\000\002U\015\222\002U\000\000\000\000\000\000\000\000\002U\002U\015\246\016\014\n\173\n\173\000\000\000\000\000\000\n\173\000\000\000\000\n\173\000\000\000\000\n\173\000\000\n\173\000\000\000\000\n\173\000\000\000\000\n\173\n\173\n\173\000\000\n\173\n\173\n\173\000\000\000\000\000\000\000\000\000\000\n\173\n\173\n\173\n\173\n\173\000\000\n\173\000\000\000\000\000\000\000\000\000\000\n\173\n\173\n\173\n\173\n\173\000\000\000\000\n\173\000\000\000\000\000\000\000\000\n\173\000\000\000\000\n\173\n\173\000\000\000\000\000\000\000\000\n\173\n\173\n\173\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\n\173\000\000\000\000\n\173\000\000\n\173\n\173\000\000\000\000\000\000\000\000\000\000\000\000\n\173\n\173\n\173\000\000\n\173\n\173\n\173\000\000\n\173\000\000\000\000\000\000\n\173\000\000\n\173\n\173\000\000\012\138\n\173\n\173\n\173\n\173\n\173\000\000\000\000\n\173\n\173\r\234\000\000\000\000\000\000\000\000\n\173\n\173\n\173\n\173\n\169\n\169\000\000\000\000\000\000\n\169\000\000\000\000\n\169\000\000\000\000\n\169\000\000\n\169\000\000\000\000\014\014\000\000\000\000\n\169\n\169\n\169\000\000\n\169\n\169\n\169\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\n\169\000\000\000\000\000\000\000\000\000\000\n\169\n\169\015\006\015\030\n\169\000\000\000\000\n\169\000\000\000\000\000\000\000\000\n\169\000\000\000\000\0156\n\169\000\000\000\000\000\000\000\000\n\169\n\169\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\169\n\169\014&\014\166\015N\015f\015\150\n\169\n\169\000\000\000\000\n\169\000\000\n\169\015\174\000\000\000\000\000\000\000\000\000\000\000\000\n\169\n\169\015\198\000\000\n\169\n\169\n\169\000\000\n\169\000\000\000\000\000\000\n\169\000\000\n\169\n\169\000\000\n\169\n\169\n\169\015~\n\169\n\169\000\000\000\000\n\169\015\222\n\169\000\000\000\000\000\000\000\000\n\169\n\169\015\246\016\014\003Y\003Y\000\000\000\000\000\000\003Y\000\000\000\000\003Y\000\000\000\000\003Y\000\000\003Y\000\000\000\000\003Y\000\000\000\000\003Y\003Y\003Y\000\000\003Y\003Y\003Y\000\000\000\000\000\000\000\000\000\000\003Y\003Y\003Y\003Y\003Y\000\000\003Y\000\000\000\000\000\000\000\000\000\000\003Y\003Y\003Y\003Y\003Y\000\000\000\000\003Y\000\000\000\000\000\000\000\000\003Y\000\000\000\000\003Y\003Y\000\000\000\000\000\000\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\003Y\003Y\003Y\003Y\003Y\003Y\003Y\003Y\003Y\000\000\000\000\003Y\000\000\003Y\003Y\000\000\000\000\000\000\000\000\000\000\000\000\003Y\003Y\003Y\000\000\003Y\003Y\003Y\000\000\003Y\000\000\000\000\000\000\003Y\000\000\003Y\003Y\000\000\012\138\003Y\003Y\003Y\003Y\003Y\000\000\000\000\003Y\003Y\r\234\000\000\000\000\000\000\000\000\003Y\003Y\003Y\003Y\003U\003U\000\000\000\000\000\000\003U\000\000\000\000\003U\000\000\000\000\003U\000\000\003U\000\000\000\000\014\014\000\000\000\000\003U\003U\003U\000\000\003U\003U\003U\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\003U\000\000\000\000\000\000\000\000\000\000\003U\003U\015\006\015\030\003U\000\000\000\000\003U\000\000\000\000\000\000\000\000\003U\000\000\000\000\0156\003U\000\000\000\000\000\000\000\000\003U\003U\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003U\003U\014&\014\166\015N\015f\015\150\003U\003U\000\000\000\000\003U\000\000\003U\015\174\000\000\000\000\000\000\000\000\000\000\000\000\003U\003U\015\198\000\000\003U\003U\003U\000\000\003U\000\000\000\000\000\000\003U\000\000\003U\003U\000\000\016&\003U\016^\015~\003U\003U\000\000\000\000\003U\015\222\003U\000\000\000\000\000\000\000\000\003U\003U\015\246\016\014\002I\002I\000\000\000\000\000\000\002I\000\000\000\000\002I\000\000\000\000\002I\000\000\002I\000\000\000\000\002I\000\000\000\000\002I\002I\002I\000\000\002I\002I\002I\000\000\000\000\000\000\000\000\000\000\002I\002I\002I\002I\002I\000\000\002I\000\000\000\000\000\000\000\000\000\000\002I\002I\002I\002I\002I\000\000\000\000\002I\000\000\000\000\000\000\000\000\002I\000\000\000\000\002I\002I\000\000\000\000\000\000\000\000\002I\002I\002I\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002I\002I\002I\002I\002I\002I\002I\002I\002I\000\000\000\000\002I\000\000\002I\002I\000\000\000\000\000\000\000\000\000\000\000\000\002I\002I\002I\000\000\002I\002I\002I\000\000\002I\000\000\000\000\000\000\002I\000\000\002I\002I\000\000\002I\002I\002I\002I\002I\002I\000\000\000\000\002I\002I\r\234\000\000\000\000\000\000\000\000\002I\002I\002I\002I\n\213\n\213\000\000\000\000\000\000\n\213\000\000\000\000\n\213\000\000\000\000\n\213\000\000\n\213\000\000\000\000\n\213\000\000\000\000\n\213\n\213\n\213\000\000\n\213\n\213\n\213\000\000\000\000\000\000\000\000\000\000\n\213\n\213\n\213\n\213\n\213\000\000\n\213\000\000\000\000\000\000\000\000\000\000\n\213\n\213\n\213\n\213\n\213\000\000\000\000\n\213\000\000\000\000\000\000\000\000\n\213\000\000\000\000\n\213\n\213\000\000\000\000\000\000\000\000\n\213\n\213\n\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\213\n\213\n\213\n\213\n\213\n\213\n\213\n\213\n\213\000\000\000\000\n\213\000\000\n\213\n\213\000\000\000\000\000\000\000\000\000\000\000\000\n\213\n\213\n\213\000\000\n\213\n\213\n\213\000\000\n\213\000\000\000\000\000\000\n\213\000\000\n\213\n\213\000\000\012\138\n\213\n\213\n\213\n\213\n\213\000\000\000\000\n\213\n\213\r\234\000\000\000\000\000\000\000\000\n\213\n\213\n\213\n\213\n\209\n\209\000\000\000\000\000\000\n\209\000\000\000\000\n\209\000\000\000\000\n\209\000\000\n\209\000\000\000\000\014\014\000\000\000\000\n\209\n\209\n\209\000\000\n\209\n\209\n\209\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\n\209\000\000\000\000\000\000\000\000\000\000\n\209\n\209\015\006\015\030\n\209\000\000\000\000\n\209\000\000\000\000\000\000\000\000\n\209\000\000\000\000\0156\n\209\000\000\000\000\000\000\000\000\n\209\n\209\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\209\n\209\014&\014\166\015N\015f\015\150\n\209\n\209\000\000\000\000\n\209\000\000\n\209\015\174\000\000\000\000\000\000\000\000\000\000\000\000\n\209\n\209\015\198\000\000\n\209\n\209\n\209\000\000\n\209\000\000\000\000\000\000\n\209\000\000\n\209\n\209\000\000\n\209\n\209\n\209\015~\n\209\n\209\000\000\000\000\n\209\015\222\n\209\000\000\000\000\000\000\000\000\n\209\n\209\015\246\016\014\n\193\n\193\000\000\000\000\000\000\n\193\000\000\000\000\n\193\000\000\000\000\n\193\000\000\n\193\000\000\000\000\n\193\000\000\000\000\n\193\n\193\n\193\000\000\n\193\n\193\n\193\000\000\000\000\000\000\000\000\000\000\n\193\n\193\n\193\n\193\n\193\000\000\n\193\000\000\000\000\000\000\000\000\000\000\n\193\n\193\n\193\n\193\n\193\000\000\000\000\n\193\000\000\000\000\000\000\000\000\n\193\000\000\000\000\n\193\n\193\000\000\000\000\000\000\000\000\n\193\n\193\n\193\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\193\n\193\n\193\n\193\n\193\n\193\n\193\n\193\n\193\000\000\000\000\n\193\000\000\n\193\n\193\000\000\000\000\000\000\000\000\000\000\000\000\n\193\n\193\n\193\000\000\n\193\n\193\n\193\000\000\n\193\000\000\000\000\000\000\n\193\000\000\n\193\n\193\000\000\012\138\n\193\n\193\n\193\n\193\n\193\000\000\000\000\n\193\n\193\r\234\000\000\000\000\000\000\000\000\n\193\n\193\n\193\n\193\n\189\n\189\000\000\000\000\000\000\n\189\000\000\000\000\n\189\000\000\000\000\n\189\000\000\n\189\000\000\000\000\014\014\000\000\000\000\n\189\n\189\n\189\000\000\n\189\n\189\n\189\000\000\000\000\000\000\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\n\189\000\000\000\000\000\000\000\000\000\000\n\189\n\189\015\006\015\030\n\189\000\000\000\000\n\189\000\000\000\000\000\000\000\000\n\189\000\000\000\000\0156\n\189\000\000\000\000\000\000\000\000\n\189\n\189\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\189\n\189\014&\014\166\015N\015f\015\150\n\189\n\189\000\000\000\000\n\189\000\000\n\189\015\174\000\000\000\000\000\000\000\000\000\000\000\000\n\189\n\189\015\198\000\000\n\189\n\189\n\189\000\000\n\189\000\000\000\000\000\000\n\189\000\000\n\189\n\189\000\000\n\189\n\189\n\189\015~\n\189\n\189\000\000\000\000\n\189\015\222\n\189\000\000\000\000\000\000\000\000\n\189\n\189\015\246\016\014\002M\002M\000\000\000\000\000\000\002M\000\000\000\000\002M\000\000\000\000\002M\000\000\002M\000\000\000\000\002M\000\000\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\002M\002M\002M\002M\002M\000\000\000\000\002M\000\000\000\000\000\000\000\000\002M\000\000\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\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\000\000\000\000\002M\002M\002M\000\000\002M\002M\002M\000\000\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\r\234\004!\004!\000\000\000\000\002M\002M\002M\002M\006)\000\000\000\006\000\000\000\000\000\250\002\198\002\202\002\206\002\246\002\150\000\000\003\002\004!\000\000\004\218\000\000\000\000\000\000\005\134\000\000\000\000\000\000\006)\000\000\005\138\001\214\000\000\024>\000\000\004\222\000\000\005\142\005\146\000\000\000\000\004!\005\150\000\000\004\226\000\000\005\186\000\000\023\210\006\193\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\004!\0246\002\190\000\000\000\000\006\n\024N\011\162\000\000\011\018\011\022\011\"\011Z\011\202\002\018\011*\004\218\011J\006\146\000\000\000\000\002\022\000\000\000\000\000\000\002\030\024V\000\000\011\226\000\000\000\000\000\000\000\000\001\214\005.\011\238\012\006\012\190\006\158\006\162\024j\024\166\000\000\006\193\006)\006)\000\000\005:\000\000\000\000\005n\000\000\000\000\007U\000\000\000\000\000\000\000\000\000\000\t\210\001\226\024\226\028\230\006\166\011N\000\000\000\145\002\190\011f\003j\012\210\000\145\000\000\002\202\000\145\000\000\002\150\006\146\rb\000\000\000\000\004\218\000\000\000\000\000\000\000\145\001.\000\145\000\000\000\145\000\000\000\145\001\214\002\001\rz\000\000\004\222\006\158\000\000\t\218\002\001\000\000\r\130\000\145\002\001\004\226\000\000\005\186\000\000\000\145\000\000\000\000\002\001\000\145\005\238\005\242\000\000\000\000\006\002\001\194\000\n\000\145\006\166\000\000\000\000\000\145\002\190\000\000\000\000\006\n\000\145\000\145\000\145\011\018\011\022\011\"\000\000\r\138\002\001\011*\000\000\011J\006\146\000\145\000\145\000\000\002\001\000\000\000\000\000\000\000\145\000\000\002\001\000\000\000\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\158\006\162\000\145\000\145\000\000\000\000\000\145\000\145\000\000\004u\000\000\000\000\000\000\000\000\000\000\000\000\002\001\000\145\000\000\000\000\004u\000\000\000\000\000\145\000\145\006\166\011N\000\000\000\000\000\169\011f\003j\000\000\000\145\000\169\000\145\002\202\000\169\000\000\002\150\000\000\rb\000\000\000\000\004\218\004u\000\000\000\000\000\169\004q\000\169\000\000\000\169\000\000\000\169\001\214\000\000\rz\000\000\004\222\004q\000\000\000\000\000\000\000\000\r\130\000\169\000\000\004\226\000\000\005\186\000\000\000\169\000\000\000\000\000\000\000\169\005\238\005\242\011\210\012\174\006\002\001\194\004u\000\169\004q\000\000\000\000\000\169\002\190\000\000\000\000\006\n\000\169\000\169\000\169\011\018\011\022\011\"\011\218\r\138\012\182\011*\000\000\011J\006\146\000\169\000\169\000\000\000\000\000\000\000\000\000\000\000\169\000\000\000\000\000\000\000\169\000\000\011\210\012\174\000\000\000\000\004q\000\000\006\158\006\162\000\169\000\169\000\000\000\000\000\169\000\169\000\000\000\000\000\000\000\000\000\000\000\000\011\218\000\000\012\182\000\169\000\000\000\000\000\000\000\000\000\000\000\169\000\169\006\166\011N\000\000\000\000\000\000\011f\003j\000\000\000\169\000\006\000\169\000\000\000\250\002\198\002\202\002\206\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\006I\000\000\000\000\000\000\000\000\000\000\005\138\001\214\000\000\000\000\000\000\004\222\000\000\005\142\005\146\000\000\000\000\000\000\005\150\000\000\004\226\000\000\005\186\000\000\023\210\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\0246\002\190\000\000\000\000\006\n\024N\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024V\000\000\011\226\000\000#\202\000\000\000\000\000\000\000\000\011\238\012\006\012\190\006\158\006\162\024j\024\166\000\000\000\006#\235\021&\000\250\002\198\002\202\002\206\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000$\026\000\000\028\230\006\166\011N\000\000\005\138\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\005\150\000\000\004\226\000\000\005\186\000\000\023\210\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\0246\002\190\000\000\000\000\006\n\024N\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024V\000\000\011\226\000\000#\202\000\000\000\000\000\000\000\000\011\238\012\006\012\190\006\158\006\162\024j\024\166\000\000\000\000\006Q\001\n\000\000\021\226\000\000\000\000\002\150\004\242\002\202\007\162\000\000\002\150\000\000\004\246\000\000\000\000\004\218\001\014\028\230\006\166\011N\000\000\002\162\000\000\011f\003j\012\210\001\214\000\000\000\000\000\000\001\018\001\022\001\026\005J\001\"\001&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005N\000\000\0012\007\186\021\230\000\000\000\000\000\000\000\000\005F\001\194\001:\000\000\000\000\000\000\001>\000\000\002\190\000\000\021\242\006R\028\146\000\000\002\001\006V\000\000\006^\006\134\006\230\000\000\002\001\000\000\000\000\006\146\002\001\000\000\001B\001F\001J\001N\001R\000\000\002\001\000\000\001V\006\150\000\000\000\000\001Z\006\162\000\n\000\000\000\000\006\158\006\162\000\000\007\"\001^\000\000\002\001\028\158\000\000\007.\000\000\001b\000\000\000\000\000\000\002\001\002\001\000\000\000\000\000\000\000\000\001\158\007\190\002\001\028R\006\166\000\000\000\000\001\162\002\001\001\166\003j\001\n\000\000\001\170\000\000\001\174\001\178\004\242\002\202\012B\000\000\002\150\000\000\004\246\000\000\000\000\004\218\001\014\000\000\000\000\000\000\000\000\002\162\000\000\002\001\000\000\000\000\001\214\000\000\000\000\000\000\001\018\001\022\001\026\005J\001\"\001&\000\000\000\000\002\001\002\001\000\000\000\000\000\000\005N\000\000\0012\007\186\000\000\000\000\000\000\000\000\000\000\005F\001\194\001:\000\000\000\000\000\000\001>\002\001\002\190\000\000\002\001\006R\000\000\002\001\000\n\006V\000\000\006^\006\134\006\230\002\001\000\000\000\000\000\000\006\146\000\000\002\001\001B\001F\001J\001N\001R\002\001\002\001\000\000\001V\006\150\000\000\000\000\001Z\000\000\000\000\000\000\000\000\006\158\006\162\002\001\007\"\001^\000\000\000\000\000\000\000\000\007.\000\000\001b\000\000\000\000\000\000\000\000\000\000\002\001\000\000\000\000\000\000\001\158\007\190\000\000\000\000\006\166\000\000\000\000\001\162\000\000\001\166\003j\000\000\000\000\001\170\000\000\001\174\001\178\000\014\000\018\000\022\000\026\000\030\000\000\000\"\000&\000*\000.\0002\000\000\0006\000:\000\000\000\000\000\000\000>\000\000\000\000\000\000\000B\000\000\000\000\002\001\000\000\000\000\000\000\000F\000\000\000\000\000\000\015\141\015y\000J\000\000\000N\000R\000V\000Z\000^\000b\000f\000\000\000\000\000\000\000j\000\000\000\000\000\000\000n\000\000\000r\015\141\000v\000\000\0022\000\000\000\000\0026\000\000\000\000\000\000\000\000\000\000\000\000\002>\000\000\000\000\000z\000\000\000\000\002B\000\000\000\000\000\000\000~\000\130\002J\015y\000\000\000\000\000\000\000\134\000\138\000\142\000\000\000\000\000\000\000\000\000\000\000\146\000\150\000\154\000\158\000\000\000\162\000\166\000\170\000\000\000\000\000\000\000\174\000\178\000\182\000\186\000\000\002N\000\000\000\190\005\133\000\194\000\198\000\000\000\000\005\133\004\242\002\202\005\133\000\202\002\150\000\206\tv\000\000\000\000\004\218\000\000\000\210\000\214\005\133\000\218\000\000\000\000\005\133\000\000\005\133\001\214\000\000\t\150\000\000\000\000\000\000\000\000\005.\000\000\000\000\012\018\005\133\000\000\000\000\000\000\000\000\002R\005\133\000\000\000\000\005:\000\000\000\000\000\000\000\000\000\000\012>\001\194\000\000\005\133\000\000\006\233\015\205\005\133\002\190\000\000\000\000\006R\005\133\005\133\r\137\006V\000\000\006^\000\000\012N\000\000\000\000\000\000\000\000\006\146\006\233\000\000\000\000\000\000\006\233\000\000\000\000\005\133\005\133\000\000\000\000\006\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\158\006\162\005\133\005\133\016\130\000\000\005\133\005\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\137\003\014\000\000\r\137\016\138\005\133\006\166\000\000\000\000\000\000\r\137\011\189\003j\000\006\r\137\000\000\005\133\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\015\205\015\205\000\000\011\189\000\000\011\189\011\189\000\000\001\214\000\000\000\000\000\000\004\222\006\233\005\142\005\146\000\000\000\000\000\000\000\000\015\205\004\226\015\205\005\186\000\000\000\000\000\000\005\230\005\234\006\233\005\238\005\242\006\233\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\n\229\000\000\000\000\n\229\000\000\r\154\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\229\n\229\000\000\n\229\n\229\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\011\189\000\000\000\000\011f\003j\012\210\011\181\000\000\000\006\n\229\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\011\181\000\000\011\181\011\181\n\229\001\214\000\000\000\000\000\000\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\n\229\002\190\n\229\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\007^\011J\006\146\n\229\n\229\000\000\000\000\000\000\n\229\000\000\n\229\000\000\011\226\000\000\n\229\000\000\000\000\000\000\000\000\r\154\012\006\012\190\006\158\006\162\000\000\000\000\000\000\002\001\000\000\000\000\000\000\002\001\002\001\000\000\002\001\002\001\000\000\002\001\000\000\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\011\181\000\000\002\001\011f\003j\012\210\002\001\000\000\002\001\002\001\000\n\002\001\000\000\000\000\000\000\002\001\000\000\002\001\000\000\000\000\000\n\002\001\002\001\000\000\002\001\002\001\000\000\002\001\002\001\002\001\002\001\002\001\000\000\002\001\004\209\000\000\002\001\004\209\002\001\002\001\000\000\000\000\002\001\002\001\002\001\002\001\002\001\002\001\000\000\002\001\002\001\002\001\002\001\000\000\004\209\004\209\000\000\004\209\004\209\000\000\000\000\000\000\002\001\002\001\002\001\000\000\000\000\000\000\000\000\002\001\002\001\002\001\002\001\002\001\000\000\bi\000\000\000A\004\209\002\001\000\000\000A\000A\000\000\000A\000A\000\000\000A\000\000\002\001\000A\000\000\000\000\000\000\000\000\000\000\bi\002\001\002\001\002\001\000\242\000A\002\001\002\001\002\001\000A\000\000\000A\000A\000\000\000\000\000\000\000\000\000\000\000A\000\000\000A\000\000\000\000\000\000\000A\000A\000\000\000A\000A\000\000\000A\000A\000A\000A\000A\000\000\000\000\000\000\004\209\000A\004\209\000\000\000A\000\000\000\000\000\000\000A\000A\000A\000A\000A\000\000\000A\004\209\000A\000A\007\142\004\209\000\000\000\000\000\000\004\209\000\000\004\209\000\000\000A\000\000\004\209\000\000\000\000\000\000\000\000\000A\000A\000A\000A\000A\000\000\be\000\000\000=\000\000\000\000\000\000\000=\000=\000\000\000=\000=\000\000\000=\000\000\000\000\000=\000\000\000\000\000\000\000\000\000\000\be\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\ty\000\000\000=\ty\000\000\000=\000\000\000\000\000\000\000=\000=\000=\000=\000=\000\000\000=\000\000\000=\000=\000\000\ty\ty\000\000\ty\ty\000\000\000\000\000\000\000=\000\000\000\000\000\000\000\000\000\000\000\000\000=\000=\000=\000=\000=\000\000\bu\000\000\015\021\ty\000\000\000\000\015\021\015\021\000\000\015\021\015\021\000\000\015\021\000\000\000\000\015\021\000\000\000\000\000\000\000\000\000\000\bu\000=\000=\000\000\ty\015\021\000=\000=\000=\015\021\000\000\015\021\015\021\000\000\000\000\000\000\000\000\000\000\015\021\000\000\015\021\000\000\000\000\000\000\015\021\015\021\000\000\015\021\015\021\000\000\015\021\015\021\015\021\015\021\015\021\000\000\000\000\000\000\ty\015\021\ty\000\000\015\021\000\000\000\000\000\000\015\021\015\021\015\021\015\021\015\021\000\000\015\021\ty\015\021\015\021\007\142\ty\000\000\000\000\000\000\ty\000\000\ty\000\000\015\021\000\000\ty\000\000\000\000\000\000\000\000\015\021\015\021\015\021\015\021\015\021\000\000\bq\000\000\015\017\000\000\000\000\000\000\015\017\015\017\000\000\015\017\015\017\000\000\015\017\000\000\000\000\015\017\000\000\000\000\000\000\000\000\000\000\bq\015\021\015\021\000\000\000\000\015\017\015\021\015\021\015\021\015\017\000\000\015\017\015\017\000\000\000\000\000\000\000\000\000\000\015\017\000\000\015\017\000\000\000\000\000\000\015\017\015\017\000\000\015\017\015\017\000\000\015\017\015\017\015\017\015\017\015\017\000\000\000\000\004\225\000\000\015\017\004\225\000\000\015\017\000\000\000\000\000\000\015\017\015\017\015\017\015\017\015\017\000\000\015\017\000\000\015\017\015\017\000\000\004\225\004\225\000\000\004\225\004\225\000\000\000\000\000\000\015\017\000\000\000\000\000\000\000\000\000\000\000\000\015\017\015\017\015\017\015\017\015\017\000\000\000\000\000\000\000\006\004\225\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\015\017\015\017\000\000\000\242\001\214\015\017\015\017\015\017\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\004\225\002\190\004\225\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\004\225\011J\006\146\007\142\004\225\000\000\000\000\000\000\004\225\000\000\004\225\000\000\011\226\000\000\004\225\000\000\000\000\000\000\000\000\r\154\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\022\218\000\000\000\006\011f\003j\012\210\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006Z\000\000\000\000\001\214\000\000\000\000\000\000\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\001\206\001\210\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\001\214\001\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\r\154\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\000\000\000\001\250\002\182\000\000\000\000\000\000\000\000\002\178\000\000\002\190\003\022\003\"\000\000\000\000\000\000\000\000\003.\000\000\000\000\006\166\011N\020\174\000\000\000\006\011f\003j\012\210\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\0032\000\000\000\000!\182\000\000\000\000\000\000\020\194\000\000\000\000\001\214\000\000\000\000\000\000\004\222\000\000\005\142\005\146\000\000\000\000!\162\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\t\149\000\000\002\190\t\149\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\t\149\t\149\000\000\t\149\t\149\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\r\154\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\t\149\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\004\194\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\242\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\t\149\002\190\t\149\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z \158\000\000\011*\007\210\011J\006\146\007\142\t\149\000\000\000\000\000\000\t\149\000\000\t\149\000\000\011\226\000\000\t\149\000\000\000\000\000\000\000\000 \166\012\006\012\190\006\158\006\162\000\000\006\029\000\000\000\006\000\000\000\000\000\250\002\198\002\202\002&\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\024\230\000\000\000\000\006\166\011N\000\000\005\138\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\024\234\000\000\004\226\000\000\005\186\000\000\025\018\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\004\241\0246\002\190\004\241\000\000\006\n\024N\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\004\241\004\241\000\000\004\241\004\241\000\000\025\178\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\023>\012\006\012\190\006\158\006\162\024j\025\198\000\000\000\006\004\241\006\029\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\025\214\006\166\011N\000\000\000\242\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\004\241\002\190\004\241\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\004\241\011J\006\146\007\142\004\241\000\000\000\000\000\000\004\241\000\000\004\241\000\000\011\226\000\000\004\241\000\000\000\000\000\000\000\000\022\198\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\005\017\000\000\002\190\005\017\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\005\017\005\017\000\000\005\017\005\017\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\021B\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\005\017\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\242\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\005\017\002\190\005\017\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\005\017\011J\006\146\007\142\005\017\000\000\000\000\000\000\005\017\000\000\005\017\000\000\011\226\000\000\005\017\000\000\000\000\000\000\000\000\012z\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\012\142\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\005\001\000\000\002\190\005\001\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\012\166\000\000\011*\000\000\011J\006\146\000\000\005\001\005\001\000\000\005\001\005\001\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\019\150\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\005\001\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\242\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\005\001\002\190\005\001\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\005\001\011J\006\146\007\142\005\001\000\000\000\000\000\000\005\001\000\000\005\001\000\000\011\226\000\000\005\001\000\000\000\000\000\000\000\000\rJ\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\250\002\198\002\202\002&\002\246\002\150\000\000\r\186\000\000\000\000\004\218\000\000\000\000\000\000\024\230\000\000\000\000\006\166\011N\000\000\005\138\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\024\234\000\000\004\226\000\000\005\186\000\000\025\018\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\0246\002\190\000\000\000\000\006\n\024N\000\000\000\000\011\018\011\022\011\"\011Z\r\210\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\025\178\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\r\218\012\006\012\190\006\158\006\162\024j\025\198\000\000\000\006\006\029\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\025\214\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\014\018\012\006\012\190\006\158\006\162\000\000\001\169\000\000\000\006\000\000\000\000\001\169\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\001\169\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\001\169\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\001\169\002\190\000\000\000\000\006\n\001\169\001\169\000\242\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\001\169\001\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\014*\012\006\012\190\006\158\006\162\000\000\015\217\000\000\000\006\000\000\001\169\015\217\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\001\169\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\015\217\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\015\217\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\015\217\002\190\000\000\000\000\006\n\015\217\015\217\000\242\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\015\217\015\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\014N\012\006\012\190\006\158\006\162\000\000\006\021\000\000\000\006\000\000\015\217\006\021\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\015\217\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\006\021\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\006\021\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\006\021\002\190\000\000\000\000\006\n\006\021\002\238\000\242\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\006\021\006\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\014z\012\006\012\190\006\158\006\162\000\000\006A\000\000\000\006\000\000\006\021\029\014\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\006\021\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\005\138\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\029~\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\0246\002\190\000\000\000\000\006\n\024N\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\030\"\0302\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\014\146\012\006\012\190\006\158\006\162\000\000\0069\000\000\000\006\000\000\006A\026\030\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\031&\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\005\138\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\026J\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\0246\002\190\000\000\000\000\006\n\024N\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\026v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\014\170\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\0069\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\026\218\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\014\194\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\014\218\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\014\242\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\015\n\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\015\"\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\015:\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\015R\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\015j\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\015\130\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\015\154\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\015\178\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\015\202\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\015\226\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\015\250\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\016\018\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\016*\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\016B\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\016J\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\016b\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\017\146\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\017\186\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\017\226\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\018\014\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\0186\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\018^\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\018\142\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\018\182\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\018\222\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\018\250\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\019\214\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\019\234\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\003\002\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\011\202\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\020\006\012\006\012\190\006\158\006\162\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000\020>\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\000\000\006\166\011N\000\000\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z\020V\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\000\000\000\000\000\000\000\000\000\000\000\000\020^\012\006\012\190\006\158\006\162\000\000\006\237\015\205\000\006\000\000\000\000\000\000\002\198\002\202\000\000\002\246\002\150\000\000 \194\000\000\000\000\004\218\000\000\000\000\000\000\000\000\006\237\000\000\006\166\011N\006\237\000\000\001\214\011f\003j\012\210\004\222\000\000\005\142\005\146\000\000\000\000\000\000\000\000\000\000\004\226\000\000\005\186\000\000\000\000\000\000\005\230\005\234\000\000\005\238\005\242\000\000\005\246\006\002\006\014\006\022\t\166\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\011Z \218\000\000\011*\000\000\011J\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\226\015\205\015\205\000\000\000\000\000\000\000\000 \226\012\006\012\190\006\158\006\162\000\000\000\000\006\237\000\000\000\000\000\000\000\000\000\000\000\000\015\205\000\000\015\205\000\000\000\000\000\000\000\000\000\000\000\000\006\237\000\000\000\000\006\237\000\000\006\166\011N\000\000\006\185\006\185\011f\003j\012\210\006\185\006\185\006\185\006\185\000\000\006\185\000\000\006\185\006\185\006\185\006\185\006\185\000\000\000\000\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\000\000\006\185\000\000\006\185\000\000\006\185\000\000\000\000\006\185\006\185\006\185\000\000\000\000\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\000\000\006\185\006\185\006\185\006\185\000\000\006\185\000\000\006\185\006\185\006\185\006\185\000\000\006\185\006\185\006\185\006\185\006\185\000\000\000\000\000\000\006\185\006\185\006\185\006\185\000\000\006\185\006\185\006\185\006\185\000\000\000\000\006\185\006\185\000\000\006\185\000\000\006\185\000\000\006\185\006\185\000\000\006\185\006\185\006\185\000\000\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\006\185\000\000\006\185\006\185\006\185\006\185\006\185\006\185\006\185\002\170\006\185\006\185\006\185\006\185\003\202\006\185\003\234\006\185\000\000\006\185\006\185\006\185\006\185\027b\006\185\000\000\006\185\006\185\006\185\006\185\r\165\000\000\000\000\r\165\000\000\006\185\r\165\r\165\015\141\015y\r\165\000\000\r\165\000\000\000\000\r\165\000\000\000\000\000\000\000\000\r\165\r\165\000\000\r\165\r\165\000\000\r\165\000\000\r\165\015\141\000\000\000\000\0022\r\165\000\000\0026\r\165\000\000\001\206\001\210\000\000\000\000\002\218\000\000\r\165\000\000\r\165\000\000\002B\000\000\000\000\000\000\r\165\r\165\002J\015y\000\000\000\000\001\214\001\254\r\165\000\000\000\000\r\165\000\000\000\000\r\165\r\165\000\000\r\165\000\000\r\165\000\000\000\000\000\000\000\000\r\165\000\000\000\000\000\000\000\000\000\000\000\000\002N\001\250\002\174\000\000\000\000\r\165\000\000\002\178\000\000\002\190\003\022\003\"\000\000\r\165\r\165\000\000\003.\r\165\021\254\r\165\000\000\000\000\000\000\000\000\000\000\006\194\000\000\000\000\000\000\000\000\000\000\000\000\r\165\r\165\000\000\r\165\r\165\0032\r\165\000\000\r\165\000\000\r\165\000\000\r\165\002R\r\165\015M\015M\000\000\000\000\000\249\015M\000\000\001\210\015M\000\249\000\000\000\000\000\000\000\000\000\000\000\000\003\194\000\000\000\000\015M\015M\015M\000\000\015M\015M\015M\000\000\000\000\000\000\000\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015M\000\000\000\000\b\169\b\169\000\000\015M\015M\000\000\000\000\015M\000\000\000\000\000\000\000\249\000\000\002\174\000\000\015M\026\014\003&\000\000\015M\b\169\b\169\b\169\000\249\015M\015M\015M\000\000\000\249\000\000\b\169\000\000\000\000\000\000\000\000\000\000\000\000\015M\015M\000\000\000\000\000\000\000\249\000\000\015M\000\000\b\169\b\169\003\210\000\000\000\000\015M\b\169\000\000\b\169\b\169\b\169\000\000\015M\015M\015M\b\169\015M\015M\000\000\000\000\000\000\000\249\000\000\000\000\000\000\000\000\000\000\015M\000\000\015M\015M\000\249\000\000\000\000\015M\000\000\b\169\000\000\000\000\015M\000\000\000\000\000\000\015M\000\000\015M\015M\011\149\011\149\000\000\000\000\000\000\011\149\000\000\001\210\011\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\149\000\000\000\000\011\149\011\149\011\149\000\000\011\149\011\149\011\149\003\026\000\000\b\169\000\000\000\000\000\000\000\000\000\000\003\018\000\000\000\000\011\149\000\000\000\000\001\206\001\210\000\000\011\149\011\149\000\000\000\000\011\149\000\000\000\000\000\000\000\000\000\000\002\174\000\000\011\149\000\000\006Z\000\000\011\149\001\214\001\254\001\234\000\000\011\149\011\149\011\149\000\000\000\000\000\000\001\246\000\000\000\000\000\000\000\000\000\000\000\000\011\149\011\149\000\000\000\000\000\000\000\000\000\000\011\149\000\000\001\250\002\166\003\210\000\000\000\000\011\149\002\178\000\000\002\190\003\022\003\"\000\000\011\149\011\149\011\149\003.\011\149\011\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\149\000\000\011\149\011\149\000\000\000\000\000\000\011\149\000\000\0032\000\000\000\000\011\149\000\000\000\000\000\000\011\149\000\000\011\149\011\149\011\157\011\157\000\000\000\000\000\000\011\157\000\000\001\210\011\157\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\157\000\000\000\000\011\157\011\157\011\157\000\000\011\157\011\157\011\157\003f\000\000\003j\000\000\000\000\000\000\000\000\000\000\004\166\000\000\000\000\011\157\000\000\000\000\001\206\001\210\016\142\011\157\011\157\000\000\000\000\011\157\000\000\000\000\000\000\000\000\000\000\002\174\000\000\011\157\000\000\000\000\000\000\011\157\001\214\001\218\001\234\000\000\011\157\011\157\011\157\000\000\000\000\000\000\001\246\000\000\000\000\000\000\000\000\000\000\000\000\011\157\011\157\000\000\000\000\000\000\000\000\000\000\011\157\000\000\001\250\002\166\003\210\000\000\000\000\011\157\002\178\000\000\002\190\003\022\003\"\000\000\011\157\011\157\011\157\003.\011\157\011\157\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\157\000\000\011\157\011\157\000\000\000\000\000\000\011\157\000\000\0032\000\000\000\000\011\157\000\000\000\000\000\000\011\157\000\000\011\157\011\157\011\153\011\153\000\000\000\000\000\000\011\153\000\000\001\210\011\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\153\000\000\000\000\011\153\011\153\011\153\000\000\011\153\011\153\011\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\153\000\000\000\000\b\165\b\165\000\000\011\153\011\153\000\000\000\000\011\153\000\000\000\000\000\000\000\000\000\000\002\174\000\000\011\153\000\000\000\000\000\000\011\153\b\165\b\165\b\165\000\000\011\153\011\153\011\153\000\000\000\000\000\000\b\165\000\000\000\000\000\000\000\000\000\000\000\000\011\153\011\153\000\000\000\000\000\000\000\000\000\000\011\153\000\000\b\165\b\165\003\210\000\000\000\000\011\153\b\165\000\000\b\165\b\165\b\165\000\000\011\153\011\153\011\153\b\165\011\153\011\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\153\000\000\011\153\011\153\000\000\000\000\000\000\011\153\000\000\b\165\000\000\000\000\011\153\000\000\000\000\000\000\011\153\000\000\011\153\011\153\011\145\011\145\000\000\000\000\000\000\011\145\000\000\001\210\011\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\145\000\000\000\000\011\145\011\145\011\145\000\000\011\145\011\145\011\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0046\004\166\000\000\000\000\011\145\000\000\000\000\001\206\001\210\000\000\011\145\011\145\000\000\000\000\011\145\000\000\000\000\000\000\000\000\000\000\002\174\000\000\011\145\000\000\000\000\000\000\011\145\001\214\001\254\001\234\000\000\011\145\011\145\011\145\000\000\000\000\000\000\001\246\000\000\000\000\000\000\000\000\000\000\000\000\011\145\011\145\000\000\000\000\000\000\000\000\000\000\011\145\000\000\001\250\002\166\003\210\000\000\000\000\011\145\002\178\000\000\002\190\003\022\003\"\000\000\011\145\011\145\011\145\003.\011\145\011\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\145\000\000\011\145\011\145\000\000\000\000\000\000\011\145\000\000\0032\000\000\000\000\011\145\000\000\r\177\000\000\011\145\r\177\011\145\011\145\004\242\002\202\000\000\000\000\002\150\000\000\004\246\000\000\000\000\004\218\000\000\000\000\000\000\000\000\r\177\r\177\b\n\r\177\r\177\021\178\001\214\000\000\001\206\001\210\000\000\000\000\002\018\005.\000\000\000\000\000\000\000\000\000\000\002\022\000\000\000\000\000\000\002\030\r\177\000\000\005:\000\000\001\214\001\254\001\234\001\214\005F\001\194\000\000\000\000\000\000\000\000\001\246\000\000\002\190\000\000\000\000\006R\000\000\002\006\r\177\006V\005n\006^\006\134\006\230\000\000\000\000\001\250\002\166\006\146\t\210\001\226\000\000\002\178\000\000\002\190\003\022\003\"\002\190\000\000\000\000\006\150\003.\000\000\000\000\000\000\000\000\000\000\000\000\006\158\006\162\000\000\007\"\r\177\000\000\r\177\000\000\000\000\007.\000\000\000\000\000\000\000\000\0032\000\000\000\000\000\000\000\000\r\177\000\000\t\218\r\177\r\177\000\000\006\166\000\000\r\177\000\000\r\177\000\000\003j\r\173\r\177\000\000\r\173\000\000\000\000\004\242\002\202\000\000\000\000\002\150\000\000\004\246\000\000\000\000\004\218\000\000\000\000\000\000\000\000\r\173\r\173\000\000\r\173\r\173\000\000\001\214\005Z\t\214\000\000\000\000\000\000\000\000\005.\000\000\002\022\000\000\000\000\000\000\002\030\000\000\000\000\t\198\000\000\r\173\000\000\005:\001\214\000\000\000\000\000\000\000\000\007\158\001\194\000\000\000\000\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006R\005n\000\000\r\173\006V\000\000\006^\006\134\006\230\000\000\t\210\001\226\000\000\006\146\000\000\000\000\000\000\000\000\002\190\000\000\000\000\000\000\000\000\000\000\000y\006\150\000\000\000\000\000\000\000y\000\000\000y\000y\006\158\006\162\000\000\007\"\r\173\000\000\r\173\000y\000\000\007.\000y\000y\000\000\000\000\000y\000y\000y\t\218\011M\r\173\000\000\000\000\r\173\r\173\000\000\006\166\000\000\r\173\000y\r\173\000\000\003j\000\000\r\173\000y\000y\000\000\000\000\000y\000\000\000\000\000\000\000\000\000\000\000y\000\000\000y\000\000\000\000\000\000\000y\000\000\000\000\000\000\000\000\000y\000y\000y\000\000\000\000\000\000\000\000\000\000\000\000\0151\000\000\000\000\0151\000y\000y\000\000\000\000\000\000\000\000\000\000\000y\000y\000\000\0151\000y\000\000\000\000\000y\000\000\0151\000\000\000\000\000\000\000\000\000y\000y\000y\000\000\000y\000y\000\000\0151\000\000\000\000\000\000\011M\000\000\0151\000\000\000y\015Q\015Q\000y\000\000\000\000\015Q\000y\000\000\015Q\0151\000\000\000y\000\000\0151\000\000\000y\003\226\000y\0151\015Q\015Q\015Q\000\000\015Q\015Q\015Q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015Q\0151\000\000\000\000\000\000\0151\015Q\015Q\000\000\000\000\015Q\000\000\000\000\000\000\000\000\0151\0151\000\000\015Q\0151\000\000\000\000\015Q\000\000\000\000\000\000\011>\015Q\015Q\015Q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0151\000\000\000\000\015Q\015Q\000\000\000\000\000\000\000\000\000\000\015Q\000\000\000\000\b\221\015Q\000\000\000\000\015Q\b\221\000\000\000\000\b\221\000\000\000\000\015Q\015Q\015Q\000\000\015Q\015Q\000\000\000\000\b\221\000\000\000\000\000\000\b\221\000\000\b\221\015Q\000\000\015Q\015Q\000\000\003\229\003\229\015Q\000\000\000\000\003\229\b\221\015Q\003\229\000\000\000\000\015Q\b\221\015Q\015Q\000\000\003\226\000\000\000\000\003\229\003\229\003\229\000\000\003\229\003\229\003\229\000\000\000\000\b\221\000\000\000\000\000\000\000\000\b\221\b\221\000\000\000\000\003\229\000\000\000\000\000\000\000\000\000\000\003\229!\218\000\000\000\000\003\229\000\000\000\000\000\000\000\000\000\000\b\221\000\000\003\229\000\000\000\000\000\000\003\229\000\000\000\000\000\000\000\000\003\229\003\229\003\229\b\221\b\221\023\230\000\000\b\221\b\221\000\000\000\000\000\000\000\000\003\229\003\229\000\000\000\000\000\000\000\000\000\000\003\229\000\000\025&\006\021\003\229\b\221\000\000\003\229\006\021\000\000\000\000\006\021\000\000\000\000\003\229\003\229\003\229\000\000\003\229\003\229\000\000\000\000\006\021\000\000\000\000\000\000\006\021\000\000\006\021\003\229\000\000\003\229\003\229\000\000\003\209\003\209\003\229\000\000\000\000\003\209\006\021\003\229\003\209\000\000\000\000\003\229\006\021\003\229\003\229\000\000\000\000\000\000\000\000\003\209\003\209\003\209\000\000\003\209\003\209\003\209\000\000\000\000\006\021\000\000\000\000\000\000\000\000\006\021\002\238\000\000\000\000\003\209\000\000\000\000\000\000\000\000\000\000\003\209\003z\000\000\000\000\003\209\000\000\000\000\000\000\000\000\000\000\006\021\000\000\003\209\000\000\000\000\000\000\003\209\000\000\000\000\000\000\000\000\003\209\003\209\003\209\006\021\006\021\000\000\000\000\006\021\006\021\000\000\000\000\000\000\000\000\003\209\003\209\000\000\000\000\000\000\000\000\000\000\003\209\000\000\000\000\006\029\003\209\006\021\000\000\003\209\000\250\000\000\028f\002&\000\000\000\000\003\209\003\209\003\209\000\000\003\209\003\209\000\000\000\000\024\230\000\000\000\000\000\000\006\029\000\000\005\138\003\209\000\000\003\209\003\209\000\000\001\193\001\193\003\209\000\000\000\000\001\193\024\234\003\209\001\193\000\000\000\000\003\209\025\018\003\209\003\209\000\000\000\000\000\000\000\000\001\193\001\193\001\193\000\000\001\193\001\193\001\193\000\000\000\000\0246\000\000\000\000\000\000\000\000\024N\000\000\000\000\000\000\001\193\000\000\000\000\000\000\000\000\000\000\001\193\001\193\000\000\000\000\001\193\000\000\000\000\000\000\000\000\000\000\025\178\000\000\001\193\000\000\000\000\000\000\001\193\000\000\000\000\000\000\000\000\001\193\001\193\001\193\024j\025\198\000\000\000\000\006\029\006\029\006\021\000\000\000\000\006\021\001\193\001\193\000\000\000\000\000\000\000\000\000\000\001\193\000\000\000\000\006\021\001\193\025\214\000\000\001\193\000\000\006\021\000\000\000\000\000\000\000\000\001\193\001\193\001\193\000\000\001\193\001\193\000\000\006\021\000\000\000\000\004\242\002\202\000\000\006\021\002\150\001\193\tv\001\193\001\193\004\218\000\000\000\000\001\193\000\000\000\000\006\021\000\000\001\193\000\000\006\021\001\214\003\254\t\150\001\193\006\021\002\238\000\000\005.\000\000\000\000\012\018\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\006\021\000\000\012>\001\194\006\021\000\000\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006R\006\021\006\021\r\137\006V\006\021\006^\000\000\012N\000\000\000\000\000\000\000\000\006\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\193\006\021\000\000\006\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\158\006\162\000\000\000\000\016\130\007E\007E\000\000\000\000\000\000\007E\000\000\000\000\007E\000\000\000\000\000\000\000\000\000\000\r\137\000\000\000\000\r\137\r\137\007E\006\166\007E\000\000\007E\r\137\007E\003j\000\000\r\137\005\193\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007E\000\000\000\000\000\000\000\000\000\000\007E\007E\000\000\000\000\001\n\000\000\000\000\000\000\000\000\007E\000\000\000\000\007E\000\000\000\000\000\000\007E\000\000\000\000\000\000\001\014\007E\007E\007E\000\000\002\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\018\001\022\001\026\001\030\001\"\001&\000\000\007E\007E\000\000\000\000\007E\000\000\001*\000\000\0012\0016\000\000\000\000\000\000\000\000\007E\007E\007E\001:\007E\007E\000\000\001>\000\000\000\000\000\000\n\142\000\000\000\000\000\000\000\000\000\000\000\000\007E\000\000\000\000\007E\007E\000\000\000\000\000\000\000\000\000\000\001B\001F\001J\001N\001R\007E\004!\004!\001V\000\000\000\000\004!\001Z\000\000\004!\000\000\000\000\000\000\000\000\000\000\000\000\001^\000\000\000\000\000\000\004!\004!\004!\001b\004!\004!\004!\000\000\004!\000\000\000\000\000\000\000\000\001\158\"\226\000\000\000\000\000\000\004!\004!\001\162\004!\001\166\004!\004!\004!\001\170\000\000\001\174\001\178\000\000\000\000\000\000\006\193\000\000\000\000\004!\004!\000\000\000\000\004!\000\000\000\000\004!\004!\004!\004!\004!\000\000\000\000\000\000\000\000\006\197\000\000\000\000\004!\000\000\000\000\000\000\004!\000\000\000\000\000\000\000\000\004!\004!\004!\000\000\000\000\004!\0079\0079\000\000\000\000\000\000\0079\000\000\000\000\0079\004!\004!\004!\000\000\004!\004!\000\000\000\000\000\000\004!\0079\006\193\0079\000\000\0079\000\000\0079\000\000\004!\004!\004!\004!\004!\004!\004!\000\000\000\000\000\000\0079\000\000\006\197\000\000\000\000\004!\0079\0079\000\000\004!\004!\000\000\000\000\004!\000\000\n\214\000\000\000\000\0079\000\000\000\000\000\000\0079\000\000\004!\000\000\000\000\0079\0079\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0079\0079\000\000\000\000\0079\000\000\011\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0079\0079\0079\000\000\0079\0079\000\000\000\000\014\014\000\000\000\000\000\000\017z\011\177\000\000\011\177\011\177\000\000\0079\000\000\000\000\0079\0079\014v\014\190\014\214\014\142\014\238\000\000\000\000\000\000\000\000\000\000\0079\000\000\000\000\000\000\015\006\015\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0156\000\000\000\000\000\000\001\n\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\000\001\014\014&\014\166\015N\015f\015\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\174\001\018\001\022\001\026\001\030\001\"\001&\000\000\000\000\015\198\000\000\000\000\000\000\000\000\001*\000\000\0012\0016\000\000\000\000\000\000\000\000\000\000\000\000\016&\001:\016^\015~\000\000\001>\000\000\000\000\011\177\015\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\246\016\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001B\001F\001J\001N\001R\000\000\000\000\000\000\001V\002\001\002\001\000\000\001Z\002\001\000\000\002\001\000\000\000\000\002\001\000\000\000\000\001^\000\000\000\000\000\000\002\001\000\000\000\000\001b\002\001\000\000\000\000\000\000\000\000\000\000\000\000\002\001\000\n\001\158\"\254\t\170\000\000\000\000\000\000\000\000\001\162\021\150\001\166\000\000\002\001\000\000\001\170\000\000\001\174\001\178\002\001\002\001\000\000\000\000\000\000\000\000\000\000\000\000\002\001\000\000\000\000\002\001\000\000\000\000\002\001\002\001\000\000\002\001\002\001\002\001\000\000\000\000\000\000\000\000\002\001\000\000\000\000\011\029\011\029\000\000\000\000\000\000\011\029\000\000\000\000\011\029\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\001\002\001\011\029\021\214\011\029\000\000\011\029\000\000\011\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\029\000\000\000\000\000\000\000\000\002\001\011\029\011\029\b\185\000\000\000\000\002\001\000\000\b\185\000\000\000\000\016\025\016\025\011\029\000\000\000\000\016\025\011\029\000\000\016\025\000\000\000\000\011\029\011\029\011\029\000\000\000\000\000\000\b\185\000\000\016\025\000\000\016\025\000\000\016\025\000\000\016\025\000\000\000\000\000\000\000\000\000\000\011\029\000\000\000\000\000\000\011\029\000\000\016\025\000\000\b\185\000\000\000\000\000\000\016\025\016\025\011\029\011\029\011\029\000\000\011\029\011\029\b\185\003:\000\000\000\000\016\025\b\185\b\185\000\242\016\025\011\029\000\000\000\000\011\029\016\025\016\025\016\025\011\029\000\000\b\185\b\185\001\206\001\210\000\000\000\000\000\000\003\254\000\000\011\029\000\000\000\000\000\000\000\000\000\000\016\025\016\029\016\029\000\000\016\025\000\000\016\029\001\214\001\218\016\029\000\000\b\185\000\000\000\000\016\025\016\025\016\025\000\000\016\025\016\025\016\029\b\185\016\029\000\000\016\029\003J\016\029\000\000\000\000\000\000\000\000\000\000\016\025\001\250\002\174\000\000\016\025\031\006\016\029\002\178\000\000\002\190\003\022\003\"\016\029\016\029\000\000\016\025\003.\000\000\021\254\000\000\000\000\003:\001\177\000\000\016\029\000\000\000\000\001\177\016\029\001\210\001\177\000\000\000\000\016\029\016\029\016\029\000\000\0032\011\141\000\000\000\000\001\177\000\000\000\000\000\000\001\177\000\000\001\177\000\000\000\000\000\000\000\000\000\000\016\029\000\000\000\000\000\000\016\029\000\000\001\177\000\000\000\000\000\000\000\000\000\000\001\177\001\177\016\029\016\029\016\029\000\000\016\029\016\029\000\000\000\000\002\174\000\000\001\177\003J\000\000\000\000\001\177\000\000\000\000\000\000\016\029\001\177\001\177\001\177\016\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\029\000\000\000\000\000\000\000\000\000\000\001\177\001\177\000\000\000\000\003\210\004\005\000\000\000\000\000\000\000\000\004\005\000\000\001\210\004\005\001\177\001\177\000\000\000\000\001\177\001\177\000\000\011\137\000\000\000\250\004\005\000\000\002\206\000\000\004\005\001\177\004\005\000\000\000\000\000\000\000\000\000\000\001\177\006I\000\000\000\000\000\000\001\177\004\005\005\138\000\000\000\000\000\000\001\177\004\005\001\173\000\000\000\000\000\000\000\000\000\000\005\150\000\000\000\000\002\174\000\000\004\005\023\210\000\000\000\000\004\005\000\000\000\000\000\000\000\000\004\005\004\005\004\005\000\000\031\166\000\000\000\000\004\001\0246\000\000\000\000\000\000\004\001\024N\001\210\004\001\000\000\000\000\000\000\000\000\004\005\004\005\000\000\011\137\003\210\000\000\004\001\000\000\000\000\000\000\004\001\000\000\004\001\024V\004\005\004\005\000\000\000\000\004\005\004\005\000\000\000\000\000\000\000\000\004\001\000\000\000\000\024j\024\166\004\005\004\001\001\173\000\000\000\000\000\000\000\000\004\005\000\000\000\000\000\000\002\174\004\005\004\001\000\000\000\000\000\000\004\001\004\005\000\000\028\230\000\000\004\001\004\001\004\001\000\000\000\153\000\000\000\000\000\000\000\000\000\153\000\000\000\000\000\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\001\004\001\000\000\000\153\003\210\000\153\000\000\000\153\000\000\000\153\000\000\000\000\000\000\000\000\004\001\004\001\000\000\000\000\004\001\004\001\000\000\000\153\000\000\000\000\000\000\000\000\000\000\000\153\000\000\004\001\000\000\000\153\000\000\000\000\000\000\000\000\004\001\000\000\000\000\000\153\000\000\004\001\000\000\000\153\000\000\000\000\000\000\004\001\000\153\000\153\000\242\000\000\000\221\000\000\000\000\000\000\000\000\000\221\000\000\000\000\000\221\000\153\000\153\000\000\000\000\000\000\000\000\000\000\000\153\000\000\000\000\000\221\000\153\000\221\000\000\000\221\000\000\000\221\000\000\000\000\000\000\000\000\000\153\000\153\000\000\000\000\000\153\000\153\000\000\000\221\000\000\000\000\000\000\000\000\000\000\000\221\000\000\000\153\000\000\000\221\000\000\000\000\000\000\000\153\000\153\000\000\000\000\000\221\000\000\000\000\000\000\000\221\000\000\000\153\000\000\000\153\000\221\000\221\000\242\000\000\000\161\000\000\000\000\000\000\000\000\000\161\000\000\000\000\000\161\000\221\000\221\000\000\000\000\000\000\000\000\000\000\000\221\000\000\000\000\000\161\000\221\000\161\000\000\000\161\000\000\000\161\000\000\000\000\000\000\000\000\000\221\000\221\000\000\000\000\000\221\000\221\000\000\000\161\000\000\000\000\000\000\000\000\000\000\000\161\000\000\000\221\000\000\000\161\000\000\000\000\000\000\000\221\000\221\000\000\000\000\000\161\000\000\000\000\000\000\000\161\000\000\000\221\000\000\000\221\000\161\000\161\000\242\000\000\000\157\000\000\000\000\000\000\000\000\000\157\000\000\000\000\000\157\000\161\000\161\000\000\000\000\000\000\000\000\000\000\000\161\000\000\000\000\000\157\000\161\000\157\000\000\000\157\000\000\000\157\000\000\000\000\000\000\000\000\000\161\000\161\000\000\000\000\000\161\000\161\000\000\000\157\000\000\000\000\000\000\000\000\000\000\000\157\000\000\000\161\000\000\000\157\000\000\000\000\000\000\000\161\000\161\000\000\000\000\000\157\000\000\000\000\000\000\000\157\000\000\000\161\000\000\000\161\000\157\000\157\000\242\000\000\000\000\000\000\000\000\001\141\000\000\000\000\000\000\000\000\001\141\000\157\000\157\001\141\000\000\000\000\000\000\000\000\000\157\000\000\001\206\001\210\000\157\000\000\001\141\000\000\000\000\000\000\001\141\000\000\001\141\000\000\000\157\000\157\000\000\000\000\000\157\000\157\000\000\000\000\001\214\001\254\001\141\001\141\000\000\000\000\000\000\000\157\001\141\000\000\000\000\000\000\000\000\000\157\000\157\000\000\000\000\006\193\000\000\000\000\001\141\000\000\000\000\000\157\001\141\000\157\001\250\002\182\000\000\001\141\001\141\001\141\002\178\000\000\002\190\003\022\003\"\000\000\000\000\000\000\b%\003.\000\000\000\000\000\000\000\000\000\000\002\202\000\000\001\141\002\150\000\000\000\000\001\141\000\000\004\218\000\000\000\000\000\000\000\000\000\000\b%\0032\001\141\001\141\006\137\001\214\001\141\001\141\000\000\004\222\000\000\000\000\000\000\006\193\000\000\000\000\000\000\001\141\004\226\000\000\005\186!\162\000\000\001\141\001\141\000\000\000\000\005\238\005\242\001\141\000\000\006\002\001\194\000\000\000\000\001\141\000\000\000\000\000\000\002\190\000\000\000\000\006\n\000\000\000\000\000\000\011\018\011\022\011\"\000\000\000\000\006\222\011*\000\000\011J\006\146\000\000\004\242\002\202\000\000\000\000\002\150\000\000\004\246\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\006\226\023\006\006Z\006\158\006\162\001\214\000\000\000\000\002\018\000\000\000\000\000\000\005.\000\000\000\000\002\022\000\000\000\000\000\000\002\030\000\000\000\000\000\000\000\000\000\000\005:\000\000\001\214\006\166\011N\000\000\005F\001\194\011f\003j\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006R\000\000\005n\000\000\006V\000\000\006^\006\134\006\230\000\000\000\000\t\210\001\226\006\146\011\217\000\000\000\000\000\000\000\000\002\190\004\242\002\202\000\000\000\000\002\150\006\150\004\246\000\000\000\000\004\218\000\000\000\000\000\000\006\158\006\162\000\000\007\"\011\217\000\000\023Z\001\214\000\000\007.\000\000\000\000\000\000\002\018\005.\000\000\000\000\000\000\t\218\000\000\002\022\000\000\bB\000\000\002\030\006\166\000\000\005:\000\000\011\250\000\000\003j\001\214\005F\001\194\000\000\000\000\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006R\000\000\000\000\000\000\006V\005n\006^\006\134\006\230\000\000\000\000\000\000\000\000\006\146\t\210\001\226\000\000\000\000\016\021\016\021\000\000\000\000\002\190\016\021\000\000\006\150\016\021\000\000\000\000\000\000\000\000\000\000\000\000\006\158\006\162\000\000\007\"\016\021\000\000\016\021\000\000\016\021\007.\016\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\218\016\021\000\000\000\000\006\166\000\000\011\217\016\021\016\021\000\000\003j\000\000\000\000\016\017\016\017\000\000\000\000\000\000\016\017\016\021\000\000\016\017\000\000\016\021\000\000\000\000\000\000\000\000\016\021\016\021\016\021\000\000\016\017\000\000\016\017\000\000\016\017\000\000\016\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\021\000\000\016\017\000\000\016\021\000\000\000\000\000\000\016\017\016\017\000\000\000\000\000\000\000\000\016\021\016\021\016\021\000\000\016\021\016\021\016\017\000\000\000\000\000\000\016\017\000\000\000\000\000\000\000\000\016\017\016\017\016\017\016\021\011!\011!\000\000\016\021\000\000\011!\000\000\000\000\011!\000\000\000\000\000\000\003\254\000\000\016\021\023j\016\017\000\000\000\000\011!\016\017\011!\002\018\011!\000\000\011!\000\000\000\000\000\000\002\022\016\017\016\017\016\017\002\030\016\017\016\017\000\000\011!\000\000\000\000\000\000\001\214\000\000\011!\011!\n&\000\000\000\000\016\017\000\000\000\000\000\000\016\017\000\000\000\000\011!\000\000\000\000\005n\011!\000\000\000\000\000\000\016\017\011!\011!\000\242\t\210\001\226\000\000\000\000\000\000\000\000\000\000\000\000\002\190\000\000\000\000\000\000\000\000\000\000\002\001\002\001\000\000\011!\002\001\000\000\002\001\011!\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\023\146\011!\011!\011!\002\001\011!\011!\002\018\000\000\000\000\t\218\002\001\000\n\000\000\002\022\000\000\011!\000\000\002\030\011!\000\000\000\000\000\000\011!\002\001\000\000\001\214\000\000\000\000\000\000\002\001\002\001\000\000\000\000\011!\000\000\000\000\000\000\002\001\000\000\000\000\002\001\000\000\005n\002\001\002\001\000\000\002\001\002\001\002\001\000\000\000\000\t\210\001\226\002\001\000\000\000\000\000\000\000\000\000\000\002\190\000\000\000\000\000\000\004\242\002\202\002\001\000\000\002\150\000\000\tv\000\000\000\000\004\218\002\001\002\001\000\000\002\001\000\000\000\000\000\000\000\000\000\000\002\001\001\214\000\000\t\150\000\000\000\000\000\000\000\000\005.\t\218\000\000\012\018\000\000\000\000\000\000\000\000\002\001\000\000\000\000\003\189\002\001\005:\002\001\000\000\000\000\000\000\000\000\012>\001\194\000\000\000\000\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006R\000\000\bM\000\000\006V\000\000\006^\000\250\012N\002\202\002\206\000\000\002\150\006\146\000\000\000\000\000\000\004\218\000\000\000\000\000\000$\026\000\000\bM\000\000\006\150\000\000\005\138\001\214\000\000\000\000\000\000\004\222\006\158\006\162\000\000\000\000\003\189\000\000\005\150\000\000\004\226\000\000\005\186\000\000\023\210\000\000\000\000\000\000\000\000\005\238\005\242\000\000\003\189\006\002\001\194\003\189\031\166\006\166\000\000\b\213\0246\002\190\000\000\003j\006\n\024N\000\000\000\000\011\018\011\022\011\"\000\000\000\000\000\000\011*\014\014\011J\006\146\000\000\b\213\000\000\000\000\000\000\b\213\000\000\024V\000\000\000\000\000\000#\202\014v\014\190\014\214\014\142\014\238\000\000\000\000\006\158\006\162\024j\024\166\000\000\000\000\006Q\015\006\015\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0156\000\000\000\000\000\000\028\230\006\166\011N\000\000\000\242\000\000\011f\003j\001\173\000\000\000\000\000\000\000\000\001\173\000\000\001\210\001\173\014&\014\166\015N\015f\015\150\000\000\023\162\011\137\000\000\000\000\001\173\b\213\015\174\002\018\001\173\000\000\001\173\000\000\000\000\000\000\002\022\015\198\000\000\000\000\002\030\000\000\000\000\000\000\001\173\000\000\000\000\000\000\001\214\000\000\001\173\000\000\016&\000\000\016^\015~\000\000\000\000\000\000\000\000\002\174\015\222\001\173\000\000\000\000\005n\001\173\023\134\000\000\015\246\016\014\001\173\001\173\001\173\t\210\001\226\000\000\000\000\000\000\000\000\000\000\000\000\002\190\014\014\000\000\000\000\000\000\000\000\023\138\000\000\000\000\001\173\001\173\000\000\000\000\003\210\000\000\000\000\014v\014\190\014\214\014\142\014\238\000\000\000\000\001\173\001\173\000\000\000\000\001\173\001\173\000\000\015\006\015\030\t\218\000\000\000\000\000\000\000\000\000\000\001\173\000\000\000\000\000\000\000\000\0156\000\000\001\173\000\000\000\000\000\000\000\000\001\173\000\242\000\000\000\000\000\000\000\000\001\173\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014&\014\166\015N\015f\015\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\198\000\000\000\000\000\000\000\000\000\000\000\000\000\250\001\206\001\210\002&\000\000\000\000\000\000\000\000\016&\023\142\016^\015~\023\158\000\000\024\230\000\000\000\000\015\222\006\029\000\000\005\138\001\214\001\254\001\234\000\000\015\246\016\014\000\000\000\000\000\000\000\000\001\246\024\234\000\000\000\000\000\000\000\000\000\000\025\018\000\000\000\000\000\000\000\000\000\000\007y\007y\000\000\001\250\002\166\007y\000\000\000\000\007y\002\178\0246\002\190\003\022\003\"\000\000\024N\000\000\000\000\003.\007y\000\000\007y\000\000\007y\000\000\007y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\025\178\000\000\007y\000\000\0032\000\000\007\214\000\000\007y\007y\000\000\000\000\004\242\002\202\024j\025\198\002\150\n\214\007\218\000\000\007y\004\218\000\000\000\000\007y\000\000\000\000\000\000\000\000\007y\007y\000\242\001\214\000\000\000\000\000\000\025\214\000\000\000\000\005.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007y\000\000\000\000\005:\007y\000\000\000\000\000\000\000\000\005F\001\194\000\000\000\000\000\000\007y\007y\007y\002\190\007y\007y\006R\000\000\000\000\000\000\006V\000\000\006^\006\134\007\246\000\000\000\000\000\000\007y\006\146\000\000\000\000\007y\000\000\007u\t\250\000\000\000\000\000\000\007u\000\000\006\150\007u\007y\000\000\000\000\000\000\000\000\000\000\006\158\006\162\000\000\007\"\007u\000\000\007u\000\000\007u\007.\007u\000\000\007\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007u\000\000\000\000\006\166\000\000\000\000\007u\nz\000\000\003j\000\000\000\000\016!\016!\000\000\000\000\000\000\016!\007u\000\000\016!\000\000\007u\000\000\000\000\000\000\000\000\007u\007u\000\242\000\000\016!\000\000\016!\000\000\016!\000\000\016!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007u\000\000\016!\000\000\007u\000\000\000\000\000\000\016!\016!\000\000\000\000\000\000\000\000\007u\007u\007u\000\000\007u\007u\016!\000\000\000\000\000\000\016!\000\000\000\000\000\000\000\000\016!\016!\000\242\007u\016%\016%\000\000\007u\000\000\016%\000\000\000\000\016%\000\000\000\000\000\000\000\000\000\000\007u\000\000\016!\000\000\000\000\016%\016!\016%\000\000\016%\000\000\016%\000\000\000\000\000\000\000\000\016!\016!\016!\000\000\016!\016!\000\000\016%\000\000\000\000\000\000\000\000\000\000\016%\nz\000\000\000\000\000\000\016!\007\141\t\250\000\000\016!\000\000\007\141\016%\000\000\007\141\000\000\016%\000\000\000\000\000\000\016!\016%\016%\000\242\000\000\007\141\000\000\007\141\000\000\007\141\000\000\007\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016%\000\000\007\141\000\000\016%\000\000\000\000\000\000\007\141\nz\000\000\000\000\000\000\000\000\016%\016%\016%\000\000\016%\016%\007\141\000\000\000\000\000\000\007\141\000\000\000\000\000\000\000\000\007\141\007\141\000\242\016%\007\145\007\145\000\000\016%\000\000\007\145\000\000\000\000\007\145\000\000\000\000\000\000\000\000\000\000\016%\000\000\007\141\000\000\000\000\007\145\007\141\007\145\000\000\007\145\000\000\007\145\000\000\000\000\000\000\000\000\007\141\007\141\007\141\000\000\007\141\007\141\000\000\007\145\000\000\000\000\000\000\000\000\000\000\007\145\007\145\000\000\000\000\000\000\007\141\007q\t\250\000\000\007\141\000\000\007q\007\145\000\000\007q\000\000\007\145\000\000\000\000\000\000\007\141\007\145\007\145\007\145\000\000\007q\000\000\007q\000\000\007q\000\000\007q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\145\000\000\007q\000\000\007\145\000\000\000\000\000\000\007q\nz\000\000\000\000\000\000\000\000\007\145\007\145\007\145\000\000\007\145\007\145\007q\000\000\000\000\000\000\007q\000\000\000\000\000\000\000\000\007q\007q\000\242\007\145\003\253\000\000\000\000\007\145\000\000\003\253\000\000\001\210\003\253\000\000\000\000\000\000\000\000\000\000\n\162\000\000\007q\000\000\000\000\003\253\007q\000\000\000\000\003\253\000\000\003\253\000\000\000\000\000\000\000\000\007q\007q\007q\000\000\007q\007q\000\000\003\253\000\000\000\000\000\000\000\000\000\000\003\253\000\000\000\000\000\000\000\000\007q\000\000\000\000\000\000\007q\002\174\000\000\003\253\000\000\000\000\000\000\003\253\000\000\000\000\000\000\007q\003\253\003\253\003\253\000\000\003\249\000\000\000\000\000\000\000\000\003\249\000\000\001\210\003\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\253\003\253\000\000\003\249\003\210\000\000\000\000\003\249\000\000\003\249\000\000\000\000\000\000\000\000\003\253\003\253\000\000\000\000\003\253\003\253\000\000\003\249\000\000\000\000\000\000\000\000\000\000\003\249\000\000\003\253\000\000\000\000\000\000\000\000\000\000\000\000\003\253\002\174\000\000\003\249\000\000\003\253\000\000\003\249\000\000\000\000\000\000\003\253\003\249\003\249\003\249\000\000\0011\000\000\000\000\000\000\000\000\0011\000\000\000\000\0011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\249\003\249\000\000\0011\003\210\0011\000\000\0011\000\000\0011\000\000\000\000\000\000\000\000\003\249\003\249\000\000\000\000\003\249\003\249\000\000\0011\000\000\000\000\000\000\000\000\000\000\0011\000\000\003\249\000\000\0011\000\000\000\000\000\000\000\000\003\249\000\000\000\000\0011\000\000\003\249\000\000\0011\000\000\000\000\000\000\003\249\0011\0011\000\242\000\000\001-\000\000\000\000\000\000\000\000\001-\000\000\000\000\001-\000\000\0011\000\000\000\000\000\000\000\000\000\000\0011\000\000\000\000\001-\0011\001-\000\000\001-\000\000\001-\000\000\000\000\000\000\000\000\0011\0011\0011\000\000\0011\0011\000\000\001-\000\000\000\000\000\000\000\000\000\000\001-\000\000\0011\000\000\001-\000\000\000\000\000\000\000\000\0011\000\000\000\000\001-\000\000\000\000\000\000\001-\000\000\000\000\000\000\0011\001-\001-\000\242\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\001-\001i\000\000\000\000\001-\000\000\001i\000\000\015q\001i\000\000\000\000\000\000\000\000\001-\001-\001-\015q\001-\001-\001i\000\000\001i\000\000\001i\000\000\001i\001\029\000\000\001-\000\000\000\000\001\029\000\000\002\025\001\029\001-\000\000\001i\000\000\000\000\000\000\000\000\002\025\001i\015q\001\029\001-\001\029\000\000\001\029\000\000\001\029\000\000\015q\000\000\000\000\000\000\000\000\000\000\001i\000\000\000\000\000\000\001\029\001i\001i\001i\000\000\000\000\001\029\002\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\025\000\000\000\000\000\000\000\000\001i\001\029\001\206\001\210\015q\000\000\001\029\001\029\001\029\000\000\000\000\000\000\000\000\000\000\001i\001i\001i\000\000\001i\001i\000\000\000\000\001\214\001\254\000\000\000\000\001\029\001\185\000\000\000\000\002\025\000\000\001\185\000\000\021\226\001\185\001i\002\150\000\000\000\000\001\029\001\029\001\029\000\000\001\029\001\029\001\185\001i\001\250\002\182\001\185\000\000\001\185\000\000\002\178\000\000\002\190\003\022\003\"\000\000\000\000\000\000\001\029\003.\001\185\000\000\000\000\000\000\000\000\000\000\001\185\000\000\000\000\001\029\000\000\000\000\000\000\000\000\000\000\021\230\000\000\000\000\001\185\000\000\0032\000\000\001\185\006\141\000\000\000\000\000\000\001\185\001\185\000\000\021\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000!\162\000\000\000\000\000\000\000\000\000\000\000\000\001\185\000\000\000\000\000\000\001\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\162\001\185\001\185\000\000\000\000\001\185\001\185\000\000\005\253\005\253\000\000\000\000\005\253\000\000\005\253\000\000\001\185\005\253\000\000\000\000\000\000\000\000\000\000\001\185\005\253\000\000\000\000\000\000\005\253\000\000\000\000\000\000\000\000\000\000\001\185\005\253\030F\000\000\000\000\030^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\253\000\000\000\000 \254\000\000\000\000\005\253\005\253\000\000\004\242\002\202\000\000\000\000\002\150\005\253\004\246\000\000\005\253\004\218\000\000\000\242\005\253\000\000\005\253\005\253\005\253\bZ\000\000\000\000\001\214\005\253\000\000\000\000\000\000\000\000\000\000\005.\000\000\000\000\000\000\000\000\000\000\005\253\000\000\000\000\000\000\000\000\000\000\000\000\005:\005\253\005\253\000\000\000\000\000\000\005F\001\194\000\000\000\000\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006R\000\000\000\000\000\000\006V\000\000\006^\006\134\006\230\005\253\000\000\000\000\000\000\006\146\000\000\005\253\000\000\000\000\000\000\000\000\004\242\002\202\000\000\000\000\002\150\006\150\005\018\000\000\000\000\004\218\000\000\000\000\000\000\006\158\006\162\000\000\007\"\000\000\000\000\000\000\001\214\000\000\007.\000\000\000\000\000\000\000\000\005.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\166\000\000\005:\000\000\011\250\007\146\003j\000\000\005F\001\194\000\000\004\242\002\202\000\000\000\000\002\150\002\190\004\246\000\000\006R\004\218\000\000\000\000\006V\000\000\006^\006\134 6\000\000\000\000\000\000\001\214\006\146\000\000\000\000\000\000\000\000\000\000\005.\000\000\000\000\000\000\000\000\000\000\006\150\000\000\000\000\000\000\000\000\000\000\000\000\005:\006\158\006\162\000\000\007\"\000\000\005F\001\194\000\000\000\000\007.\000\000\000\000 >\002\190\000\000\000\000\006R\000\000\000\000\000\000\006V\000\000\006^\006\134\006\230\006\166\000\000\000\000\000\000\006\146\000\000\003j\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\242\002\202\006\150\000\000\002\150\000\000\006\242\000\000\000\000\004\218\006\158\006\162\000\000\007\"\000\000\000\000\000\000\000\000\000\000\007.\001\214\000\000\000\000\000\000\000\000\000\000\000\000\005.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\166\000\000\b\150\000\000\000\000\005:\003j\000\000\000\000\000\000\000\000\005F\001\194\000\000\004\242\002\202\000\000\000\000\002\150\002\190\007b\000\000\006R\004\218\000\000\000\000\006V\000\000\006^\006\134\007\014\000\000\000\000\000\000\001\214\006\146\000\000\000\000\000\000\000\000\000\000\005.\000\000\000\000\000\000\000\000\000\000\006\150\000\000\000\000\000\000\000\000\000\000\000\000\005:\006\158\006\162\000\000\007\"\000\000\005F\001\194\000\000\000\000\007.\000\000\000\000\b:\002\190\000\000\000\000\006R\000\000\000\000\000\000\006V\000\000\006^\006\134\007~\006\166\000\000\000\000\000\000\006\146\b\030\003j\000\000\000\000\000\000\000\000\004\242\002\202\000\000\000\000\002\150\006\150\004\246\000\000\000\000\004\218\000\000\000\000\000\000\006\158\006\162\000\000\007\"\000\000\000\000\000\000\001\214\000\000\007.\000\000\000\000\007\134\000\000\005.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\166\000\000\005:\000\000\000\000\b\190\003j\000\000\005F\001\194\000\000\004\242\002\202\000\000\000\000\002\150\002\190\004\246\000\000\006R\004\218\000\000\000\000\006V\000\000\006^\006\134\006\230\000\000\000\000\000\000\001\214\006\146\000\000\000\000\000\000\000\000\000\000\005.\000\000\000\000\000\000\000\000\000\000\006\150\000\000\000\000\000\000\000\000\000\000\000\000\005:\006\158\006\162\000\000\007\"\000\000\005F\001\194\000\000\000\000\007.\000\000\000\000\000\000\002\190\000\000\000\000\006R\000\000\000\000\000\000\006V\000\000\006^\006\134\006\230\006\166\000\000\000\000\000\000\006\146\000\000\003j\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\001\002\001\006\150\000\000\002\001\000\000\002\001\000\000\000\000\002\001\006\158\006\162\000\000\007\"\000\000\000\000\000\000\000\000\000\000\007.\002\001\000\000\002\001\000\000\000\000\000\000\000\000\002\001\000\n\000\000\002\001\000\000\000\000\000\000\000\000\006\166\000\000\000\000\000\000\000\000\002\001\003j\000\000\017F\000\000\000\000\002\001\002\001\000\000\004\242\002\202\000\000\000\000\002\150\002\001\004\246\000\000\002\001\004\218\000\000\002\001\002\001\000\000\002\001\000\000\002\001\000\000\000\000\000\000\001\214\002\001\000\000\000\000\000\000\000\000\000\000\005.\000\000\000\000\006\021\000\000\000\000\002\001\000\000\006\021\000\000\000\000\006\021\000\000\005:\002\001\002\001\000\000\000\000\000\000\005F\001\194\000\000\006\021\000\000\000\000\000\000\006\021\002\190\006\021\000\000\006R\000\000\000\000\000\000\006V\000\000\006^\006\134\006\230\002\001\006\021\000\000\006\021\006\146\000\000\002\001\006\021\006\021\000\000\000\000\006\021\000\000\000\000\000\000\000\000\006\150\000\000\000\000\006\021\000\000\000\000\006\021\006\021\006\158\006\162\006\021\007\"\006\021\002\238\000\242\000\000\000\000\007.\000\000\000\000\000\000\000\000\000\000\000\000\006\021\000\000\000\000\000\000\000\000\000\000\006\021\000\000\006\021\006\166\006\021\000\000\006\021\000\000\000\000\003j\000\000\000\000\006\021\000\000\000\000\000\000\006\021\006\021\000\000\000\000\006\021\006\021\002\238\000\000\000\000\t\253\000\000\n\142\000\000\000\000\t\253\n&\000\000\t\253\006\021\006\021\000\000\000\000\006\021\006\021\000\000\006\021\006\021!\030\t\253\006\021\000\000\000\000\t\253\006\021\t\253\000\000\000\000\006\021\000\000\006\021\006\021\006\021\000\000\006\021\006\021\000\000\t\253\000\000\000\000\000\000\000\000\000\000\t\253\000\000\006\021\006\021\t\253\000\000\000\000\000\000\000\000\006\021\000\000\000\000\t\253\000\000\000\000\000\000\t\253\000\000\003:\000\000\006\021\t\253\t\253\000\242\t\249\006\021\000\000\000\000\000\000\t\249\006\021\002\238\t\249\000\000\t\253\t\253\000\000\000\000\000\000\000\000\000\000\t\253\000\000\t\249\000\000\t\253\000\000\t\249\000\000\t\249\006\021\000\000\000\000\000\000\000\000\t\253\t\253\t\253\000\000\t\253\t\253\t\249\000\000\000\000\006\021\006\021\000\000\t\249\006\021\006\021\t\253\t\249\000\000\000\000\000\000\003J\000\000\t\253\000\000\t\249\000\000\000\000\000\000\t\249\000\000\000\000\006\021\000\000\t\249\t\249\000\242\003\241\000\000\000\000\000\000\000\000\003\241\000\000\000\000\003\241\000\000\t\249\t\249\000\000\000\000\000\000\000\000\000\000\t\249\000\000\003\241\000\000\t\249\000\000\003\241\000\000\003\241\000\000\000\000\000\000\000\000\000\000\t\249\t\249\t\249\000\000\t\249\t\249\003\241\021\250\000\000\000\000\000\000\000\000\003\241\000\000\000\000\t\249\000\000\000\000\000\000\000\000\000\000\000\000\t\249\000\000\003\241\000\000\000\000\000\000\003\241\000\000\000\000\000\000\000\000\003\241\003\241\003\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\003\241\000\000\000\000\000\000\003\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\241\003\241!&\000\000\003\241\003\241\000\000\000\000\004\242\002\202\000\000\000\000\002\150\000\000\tv\003\241\000\000\004\218\000\000\000\000\000\000\022Z\003\241\000\000\000\000\000\000\000\000\003\241\001\214\000\000\t\150\000\000\000\000\003\241\000\000\005.\000\000\000\000\012\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\142\000\000\005:\000\000\000\000\000\000\000\000\000\000\005F\001\194\000\000\004\242\002\202\000\000\000\000\002\150\002\190\tv\000\000\006R\004\218\000\000\000\000\006V\000\000\006^\000\000\012N\000\000\000\000\000\000\001\214\006\146\t\150\000\000\000\000\000\000\000\000\005.\000\000\000\000\012\018\000\000\000\000\006\150\000\000\000\000\000\000\000\000\000\000\000\000\005:\006\158\006\162\000\000\000\000\028\254\012>\001\194\000\000\004\242\002\202\000\000\000\000\002\150\002\190\tv\000\000\006R\004\218\000\000\000\000\006V\000\000\006^\031Z\012N\006\166\000\000\000\000\001\214\006\146\t\150\003j\000\000\000\000\000\000\005.\000\000\000\000\012\018\000\000\000\000\006\150\000\000\000\000\000\000\000\000\000\000\000\000\005:\006\158\006\162\000\000\000\000\016\130\012>\001\194\000\000\000\000\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006R\000\000\000\000\000\000\006V\000\000\006^\029\150\012N\006\166\000\000\000\000\000\000\006\146\000\000\003j\000\000\000\000\000\000\000\000\004\242\002\202\000\000\000\000\002\150\006\150 N\000\000\000\000\004\218\000\000\000\000\000\000\006\158\006\162\000\000\b)\016\130\000\000\000\000\001\214\000\000\004\242\002\202\000\000\000\000\002\150\005.\006\026\000\000\000\000\004\218\000\000\000\000\000\000\000\000\029\246\b)\006\166\000\000\005:\000\000\001\214\000\000\003j\000\000\005F\001\194\000\000\005.\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006R\000\000\000\000\000\000\006V\005:\006^\006\134 j\000\000\000\000\005F\001\194\006\146\000\000\000\000\000\000\000\000\000\000\002\190\000\000\000\000\006R\000\000\000\000\006\150\006V\000\000\006^\006\134\t:\000\000\000\000\006\158\006\162\006\146\007\"\000\000\000\000\000\000\000\000\000\000\007.\000\000\000\000 r\000\000\006\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\158\006\162\000\000\006\166\017\018\000\000\000\000\000\000\000\000\003j\004\242\002\202\000\000\000\000\002\150\000\000\017\022\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\006\166\000\000\000\000\000\000\000\000\001\214\003j\000\000\000\000\000\000\000\000\000\000\005.\000\000\000\000\003\241\000\000\000\000\000\000\000\000\003\241\000\000\000\000\003\241\000\000\005:\000\000\000\000\000\000\000\000\000\000\005F\001\194\000\000\003\241\000\000\000\000\000\000\003\241\002\190\003\241\000\000\006R\000\000\000\000\000\000\006V\000\000\006^\006\134\0172\000\000\003\241\021\250\000\000\006\146\000\000\000\000\003\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\150\000\000\000\000\003\241\000\000\000\000\000\000\003\241\006\158\006\162\000\000\000\000\003\241\003\241\003\241\000\000\000\000\000\000\000\000\000\000\017:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\241\006\166\000\000\015i\003\241\000\000\000\000\003j\015i\000\000\000\000\015i\000\000\000\000\003\241\003\241!V\000\000\003\241\003\241\000\000\000\000\015i\000\000\000\000\000\000\015i\000\000\015i\000\000\000\000\000\000\000\000\000\000\006\185\022Z\003\241\000\000\000\000\000\000\015i\003\241\000\000\000\000\000\000\000\000\015i\000\000\000\000\000\000\004\242\002\202\000\000\000\000\002\150\000\000\0066\000\000\015i\004\218\000\000\000\000\015i\000\000\000\000\000\000\000\000\015i\015i\000\000\001\214\000\000\004\242\002\202\000\000\000\000\002\150\005.\b\218\000\000\000\000\004\218\000\000\000\000\000\000\000\000\000\000\015i\000\000\000\000\005:\015i\001\214\000\000\000\000\000\000\005F\001\194\000\000\005.\000\000\015i\015i\002\142\002\190\015i\015i\006R\000\000\000\000\000\000\006V\005:\006^\006\134\b\166\015i\000\000\005F\001\194\006\146\000\000\000\000\015i\000\000\000\000\002\190\000\000\000\000\006R\000\000\000\000\006\150\006V\015i\006^\006\134\b\246\000\000\000\000\006\158\006\162\006\146\000\000\000\000\000\000\000\000\000\000\000\000\004\242\002\202\000\000\b\174\002\150\006\150\t\014\000\000\000\000\004\218\000\000\000\000\000\000\006\158\006\162\000\000\006\166\000\000\000\000\000\000\001\214\000\000\003j\000\000\000\000\b\254\000\000\005.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\166\000\000\005:\000\000\000\000\000\000\003j\000\000\005F\001\194\000\000\004\242\002\202\000\000\000\000\002\150\002\190\tF\000\000\006R\004\218\000\000\000\000\006V\000\000\006^\006\134\t*\000\000\000\000\000\000\001\214\006\146\000\000\000\000\000\000\000\000\000\000\005.\000\000\000\000\000\000\000\000\000\000\006\150\000\000\000\000\000\000\000\000\000\000\000\000\005:\006\158\006\162\000\000\000\000\000\000\005F\001\194\000\000\000\000\000\000\000\000\000\000\t2\002\190\000\000\000\000\006R\000\000\000\000\000\000\006V\000\000\006^\006\134\tb\006\166\000\000\000\000\000\000\006\146\000\000\003j\007\017\000\000\000\000\000\000\000\000\007\017\000\000\000\000\007\017\006\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\158\006\162\007\017\000\000\000\000\000\000\007\017\000\000\007\017\000\000\000\000\000\000\tj\000\000\007\025\000\000\000\000\000\000\000\000\007\025\007\017\000\000\007\025\000\000\000\000\006\166\007\017\000\000\000\000\000\000\000\000\003j\000\000\007\025\000\000\n\214\000\000\007\025\007\017\007\025\000\000\000\000\007\017\000\000\000\000\000\000\000\000\007\017\007\017\000\242\000\000\007\025\000\000\000\000\000\000\000\000\000\000\007\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\214\007\017\007\017\007\025\000\000\007\017\000\000\007\025\000\000\000\000\000\000\000\000\007\025\007\025\000\242\007\017\007\017\000\000\000\000\007\017\007\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\025\007\025\000\000\000\000\007\025\007\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\025\007\025\007\017\000\000\007\025\007\025\000\000\n-\n-\000\000\000\000\n-\000\000\n-\000\000\000\000\n-\000\000\000\000\000\000\000\000\000\000\007\025\022\162\000\000\000\000\000\000\n-\000\000\000\000\000\000\000\000\000\000\007\025\n-\000\000\000\000\003\241\000\000\000\000\000\000\000\000\003\241\000\000\000\000\003\241\000\000\n-\000\000\000\000\000\000\000\000\000\000\n-\n-\000\000\003\241\000\000\000\000\000\000\003\241\n-\003\241\000\000\n-\000\000\000\000\000\000\n-\000\000\n-\n-\n-\000\000\003\241\021\250\000\000\n-\000\000\000\000\003\241\000\000\000\000\000\000\000\000\000\000\007\213\000\000\000\000\n-\000\000\007\213\003\241\000\000\007\213\000\000\003\241\n-\n-\000\000\000\000\003\241\003\241\003\241\000\000\007\213\000\000\000\000\000\000\007\213\000\000\007\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\241\n-\007\213\000\000\003\241\000\000\000\000\n-\007\213\000\000\000\000\000\000\000\000\000\000\003\241\003\241\024\182\000\000\003\241\003\241\007\213\000\000\000\000\000\000\007\213\000\000\000\000\000\000\000\000\007\213\007\213\000\242\000\000\000\000\000\000\022Z\003\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\007\213\015i\000\000\000\000\007\213\000\000\015i\000\000\000\000\015i\000\000\000\000\000\000\000\000\007\213\007\213\028\138\000\000\007\213\007\213\015i\000\000\000\000\000\000\015i\000\000\015i\000\000\000\000\007\213\000\000\000\000\006\185\000\000\000\000\000\000\007\213\000\000\015i\000\000\000\000\000\000\000\000\000\000\015i\000\000\000\000\007\213\000\000\000\000\000\000\b\225\t\250\000\000\000\000\000\000\b\225\000\000\000\000\b\225\015i\000\000\000\000\000\000\000\000\015i\015i\000\000\000\000\000\000\b\225\000\000\000\000\000\000\b\225\000\000\b\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015i\000\000\000\000\b\225\000\000\000\000\000\000\000\000\000\000\b\225\nz\000\000\000\000\000\000\015i\015i\002\142\000\000\015i\015i\000\000\b\225\000\000\000\000\000\000\b\225\000\000\000\000\000\000\015i\b\225\b\225\000\242\"&\001\189\000\000\015i\000\000\000\000\001\189\000\000\000\000\001\189\000\000\000\000\000\000\000\000\015i\000\000\000\000\b\225\000\000\000\000\001\189\b\225\000\000\000\000\001\189\000\000\001\189\000\000\000\000\000\000\000\000\b\225\b\225\000\000\000\000\b\225\b\225\000\000\001\189\000\000\000\000\000\000\000\000\000\000\001\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\225\007\217\000\000\001\189\000\000\000\000\007\217\001\189\000\000\007\217\000\000\000\000\001\189\001\189\000\000\000\000\000\000\000\000\000\000\000\000\007\217\000\000\000\000\000\000\007\217\000\000\007\217\000\000\000\000\000\000\000\000\000\000\001\189\000\000\000\000\000\000\001\189\000\000\007\217\000\000\000\000\000\000\000\000\000\000\007\217\000\000\001\189\001\189\000\000\000\000\001\189\001\189\000\000\000\000\000\000\000\000\007\217\000\000\000\000\000\000\007\217\001\189\000\000\000\000\000\000\007\217\007\217\000\242\001\189\000\000\000\000\000\000\005\245\028f\000\000\000\000\000\000\005\245\000\000\001\189\005\245\000\000\015i\000\000\000\000\007\217\000\000\015i\000\000\007\217\015i\005\245\000\000\000\000\000\000\005\245\000\000\005\245\000\000\007\217\007\217\015i\000\000\007\217\007\217\015i\000\000\015i\000\000\005\245\000\000\000\000\000\000\006\185\007\217\005\245\000\000\000\000\000\000\015i\000\000\007\217\000\000\000\000\000\000\015i\000\000\000\000\000\000\000\000\000\000\005\245\007\217\000\000\000\000\000\000\005\245\000\000\000\000\000\000\000\000\015i\000\000\000\000\000\000\000\000\015i\015i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\245\000\000\015!\000\000\002\202\015!\000\000#\210\000\000\000\000\015i\000\000#\214\000\000\005\245\005\245\015!\000\000\005\245\005\245\000\000\000\000\015!\000\000\015i\015i\002\142\000\000\015i\015i\000\000\000\000\000\000\000\000\015!\000\000\005\245\000\000\000\000\015i\015!\000\000\000\000\"^\000\000\000\000\015i\025b\000\000\001\006\001\194\000\000\015!\000\000\000\000\006\021\015!\015i\000\000\000\000\006\021\015!\000\000\006\021\000\000\000\000\000\000\006\021\t\250\000\000\000\000\000\000\006\021#\218\006\021\006\021\000\000\000\000\006\021\000\000\006\021\015!\000\000\000\000\000\000\015!\006\021\000\000\000\000\000\000\006\021\000\000\006\021\000\000#\222\015!\015!\000\000\006\021\015!\000\000\000\000\000\000\000\000\006\021\000\000\000\000\n\214\000\000\000\000\006\021\nz\000\000\000\000\006\021\000\000\000\000\015!\000\000\006\021\002\238\000\242\000\000\000\000\000\000\000\000\006\021\000\000\000\000\000\000\000\000\006\021\002\238\000\242\000\000\000\000\000\000\000\000\000\000\006\021\000\000\000\000\000\000\006\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\021\000\000\006\021\006\021\000\000\000\000\006\021\006\021\001U\000\000\000\000\000\000\000\000\001U\006\021\006\021\001U\000\000\006\021\006\021\000\000\000\000\000\000\000\000\006\021\000\000\000\000\001U\000\000\001U\000\000\001U\000\000\001U\000\209\000\000\006\021\000\000\000\000\000\209\000\000\000\000\000\209\000\000\000\000\001U\000\000\006\021\000\000\000\000\000\000\001U\000\000\000\209\000\000\000\000\000\000\000\209\000\000\000\209\000\213\000\000\000\000\000\000\000\000\000\213\000\000\001U\000\213\000\000\000\000\000\209\001U\001U\000\242\000\000\000\000\000\209\000\000\000\213\000\000\000\000\000\000\000\213\000\000\000\213\000\000\000\000\000\000\000\209\000\000\000\000\001U\000\209\000\000\000\000\000\000\000\213\000\209\000\209\000\242\000\000\000\000\000\213\000\000\000\000\001U\001U\001U\000\000\001U\001U\000\000\000\000\000\000\000\213\000\000\000\000\000\209\000\213\000\000\000\000\000\209\000\000\000\213\000\213\000\242\000\000\001U\000\000\000\000\000\000\000\209\000\209\000\000\000\000\000\209\000\209\000\000\001U\000\000\000\000\000\000\000\000\000\213\000\000\001\206\002\146\000\213\000\000\002\150\000\000\000\000\000\000\000\209\000\000\000\000\000\000\000\213\000\213\000\000\000\000\000\213\000\213\000\000\000\209\001\214\001\254\001\234\002\154\000\000\000\000\000\000\000\000\000\000\000\000\001\246\000\000\000\000\000\000\000\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\213\002\158\002\166\000\000\000\000\000\000\000\000\002\178\000\000\002\190\003\022\003\"\000\000\000\000\000\000\000\000\028>\b\221\028B\000\000\000\000\000\000\b\221\000\000\007\205\b\221\000\000\000\000\000\000\007\205\000\000\000\000\007\205\000\000\000\000\000\000\b\221\0032\000\000\024\146\b\221\000\000\b\221\007\205\000\000\000\000\006\162\007\205\000\000\007\205\000\000\000\000\000\000\000\000\b\221\000\000\000\000\028N\000\000\000\000\b\221\007\205\000\000\000\000\000\000\000\000\000\000\007\205\000\000\000\000\000\000\000\000\b\221\000\000\028R\000\000\b\221\000\000\000\000\007\205\000\000\b\221\b\221\007\205\000\000\000\000\000\000\000\000\007\205\007\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\221\000\000\000\000\000\000\b\221\007!\t\250\007\205\000\000\000\000\007!\007\205\000\000\007!\b\221\b\221\023\230\000\000\b\221\b\221\000\000\007\205\007\205\000\000\007!\007\205\007\205\000\000\007!\000\000\007!\000\000\000\000\000\000\000\000\000\000\b\221\000\000\000\000\000\000\000\000\000\000\007!\007\205\000\000\000\000\000\000\000\000\007!\nz\000\000\000\000\000\000\000\000\014\209\000\000\000\000\000\000\000\000\014\209\000\000\000\000\014\209\000\000\007!\000\000\000\000\000\000\000\000\007!\007!\000\242\000\000\014\209\000\000\000\000\000\000\014\209\000\000\014\209\001\206\002\146\000\000\000\000\002\150\000\000\000\000\000\000\000\000\007!\000\000\014\209\000\000\000\000\000\000\000\000\000\000\014\209\000\000\000\000\001\214\001\254\001\234\007!\007!\000\000\000\000\007!\007!\014\209\001\246\000\000\000\000\014\209\000\000\000\000\000\000\000\000\014\209\000\000\000\000\000\000\000\000\000\000\000\000\007!\002\158\002\166\000\000\000\000\000\000\000\000\002\178\000\000\002\190\003\022\003\"\000\000\014\209\r\254\000\000\028>\014\209\"\n\000\000\000\000\000\000\000\000\000\000\000\000\005\237\000\000\014\209\014\209\000\000\005\237\014\209\014\209\005\237\000\000\000\000\000\000\0032\000\000\000\000\000\000\000\000\000\000\000\000\005\237\000\000\006\162\000\000\005\237\014\209\005\237\000\000\000\000\000\000\000\000\000\000\005\229\"\022\000\000\000\000\016v\005\229\005\237\000\000\005\229\000\000\000\000\000\000\005\237\000\000\000\000\000\000\000\000\000\000\028R\005\229\000\000\000\000\000\000\005\229\005\237\005\229\006\005\000\000\005\237\000\000\000\000\006\005\000\000\005\237\006\005\000\000\000\000\005\229\000\000\000\000\000\000\000\000\000\000\005\229\000\000\006\005\000\000\000\000\000\000\006\005\000\000\006\005\000\000\005\237\000\000\005\229\000\000\005\237\000\000\005\229\000\000\000\000\000\000\006\005\005\229\000\000\000\000\005\237\005\237\006\005\000\000\005\237\005\237\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\005\000\000\000\000\005\229\006\005\000\000\000\000\005\229\005\237\006\005\000\000\000\000\000\000\000\000\000\000\005\213\000\000\005\229\005\229\024\014\005\213\005\229\005\229\005\213\000\000\000\000\000\000\000\000\000\000\006\005\000\000\000\000\000\000\006\005\005\213\000\000\000\000\000\000\005\213\005\229\005\213\001\206\001\210\006\005\006\005\000\000\000\000\006\005\006\005\000\000\027\030\000\000\005\213\000\000\000\000\000\000\002\162\000\000\005\213\000\000\000\000\001\214\001\254\001\234\000\000\006\005\000\000\005\221\000\000\000\000\005\213\001\246\005\221\000\000\005\213\005\221\028\002\000\000\002\006\005\213\000\000\000\000\000\000\000\000\000\000\000\000\005\221\001\250\002\166\000\000\005\221\000\000\005\221\002\178\000\000\002\190\003\022\003\"\000\000\005\213\000\000\000\000\003.\005\213\005\221\000\000\000\000\000\000\000\000\000\000\005\221\000\000\000\000\005\213\005\213\000\000\000\000\005\213\005\213\006\r\000\000\000\000\000\000\0032\006\r\000\000\005\221\006\r\000\000\000\000\000\000\005\221\000\000\000\000\000\000\005\213\000\000\000\000\006\r\000\000\000\000\000\000\006\r\000\000\006\r\000\000\031z\000\000\000\000\006)\000\000\005\221\000\000\021\234\000\250\000\000\006\r\002\206\000\000\000\000\000\000\000\000\006\r\000\000\000\000\005\221\005\221\000\000\005\134\005\221\005\221\000\000\006)\000\000\005\138\000\000\000\000\000\000\006\r\000\000\000\000\000\000\000\000\006\r\000\000\000\000\005\150\005\221\000\000\000\000\000\000\000\000\023\210\000\000\000\000\000\000\000\000\000\000\027\170\000\000\000\000\000\000\000\000\006\r\031\166\000\000\000\000\000\000\0246\000\000\000\000\000\000\000\000\024N\000\000\000\000\000\000\006\r\006\r\000\000\000\000\006\r\006\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024V\000\000\000\000\000\000\000\000\000\000\006\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024j\024\166\000\000\028*\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\000\000\000\000\000\000\028\230")) and lhs = - (8, "\014\r\012\011\n\t\b\007\006\005\004\003\002\001\000\228\228\227\227\226\225\225\224\224\224\224\224\224\224\224\224\224\224\224\224\224\224\224\224\224\224\224\223\223\222\221\221\221\221\221\221\221\221\220\220\220\220\220\220\220\220\219\219\219\218\218\217\216\216\216\215\215\214\214\214\214\214\214\213\213\213\213\213\213\213\213\212\212\212\212\212\212\212\212\211\211\211\211\210\209\208\208\208\208\207\207\207\207\206\206\206\205\205\205\205\204\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\199\198\198\197\197\196\195\194\193\193\192\192\191\191\191\191\190\190\190\190\189\189\188\188\188\188\188\188\187\186\185\185\184\184\183\183\182\181\181\180\179\179\178\178\177\177\177\177\176\176\176\176\175\175\175\175\174\173\172\172\172\171\171\170\169\169\169\169\169\169\168\168\168\168\168\168\168\168\167\167\166\166\166\166\166\166\165\165\164\164\164\163\163\162\162\162\162\161\161\160\160\159\159\158\158\157\157\156\156\155\155\154\154\153\153\152\152\151\151\151\150\150\150\150\149\149\148\148\147\147\146\146\146\146\146\145\145\145\145\144\144\144\143\143\143\143\143\143\143\142\142\142\142\142\142\142\141\141\140\140\139\139\139\139\139\139\138\138\137\137\136\136\135\135\134\134\134\133\132\132\132\132\131\131\131\130\130\130\130\130\130\130\130\130\130\129\129\128\128\127\127\127\127\127\127\127\127\127\127\127\127\127~}|{{zzzzzyxxwwvvvvvvvvvvvvvvuuttsssssssssssssssssssssssssssssssrrqqppoonnmmllkkjjiihhgggggggggggfedcba`_^]\\[[[[[[[[[[ZZZYYYXXXXXWWWWWWWWWVVUUUUUTTSSRQPPOOOOONNMMLLLKKKKKKJJJIIHHGGFFEEDDCCBBBAA@@??>>==<<;;::99887776665554443333210000000000000000000/////.......------------------------------------------------------------------,,++++++++++++++++++++++***************************************************))(((''&&&&&&&&&&&&&&&&%%$$#######\"\"\"\"!! \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\241\241\240\240\239\238\238\237\237\237\237\237\237\237\237\237\237\236\236\235\234\233\233\233\233\233\233\233\233\232\232\232\232\232\232\232\232\231\231\231\230\230\229\228\228\228\227\227\226\226\226\226\226\226\225\225\225\225\225\225\225\225\224\224\224\224\224\224\224\224\223\223\223\223\222\221\220\220\220\220\219\219\219\219\218\218\218\217\217\217\217\216\215\215\215\214\214\213\213\212\212\212\211\211\211\211\211\211\211\211\211\210\210\209\209\208\208\207\206\205\204\203\203\202\202\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\201\200\200\199\198\198\198\198\197\197\197\197\197\197\196\196\195\195\195\195\195\195\194\193\192\192\191\191\190\190\189\188\188\187\186\186\185\185\184\184\184\184\183\183\183\183\182\182\182\182\181\180\179\179\179\178\178\177\176\176\176\176\176\176\175\175\175\175\175\175\175\175\174\174\174\174\174\174\174\174\174\174\174\174\174\174\174\174\174\174\174\174\174\173\173\173\173\173\173\173\173\173\173\173\173\173\173\173\173\173\173\173\173\173\172\171\170\170\169\169\169\169\169\169\168\168\167\167\167\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\147\146\146\146\146\146\146\146\145\145\145\145\145\145\145\144\144\143\143\142\142\142\142\142\142\141\141\140\140\139\139\138\138\137\137\137\136\135\135\135\135\134\134\134\133\133\133\133\133\133\133\133\133\133\132\132\131\131\130\130\130\130\130\130\130\130\130\130\130\130\130\129\128\127~~}}}}}|{{zzyyyyyyyyyyyyyyxxwwvvuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuttssrrqqppoonnnmmllkkjjiihhhhhhhhhhhhhhhhhhgfedcba`_^]\\\\\\\\\\\\\\\\\\\\\\[[[[[ZZZZZZZZZYYXXXXXWWVVUTSSRRRRRQQPPOOONNNNNNMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKKKKKKJJJJJJIIHHGGFFEEDDCCBBAAA@@??>>==<<;;::::998877777766655544433210000000000000000000/////.......--------------------------------------------------------------------,,++++++++++++++++++++++****************************************************))((''&&&&&&&&&&&&&&&&%%$$#######\"\"\"\"!! \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)\001\011\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\001-\000\166\000\"\001\003\002 \000\021\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031\000\000\000\000\000\000\000\000\000\000\000\021\000\000\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000>2\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000C\150\000\200\000\000\000\210\002D\000\225\000\000\000\000\000\000\002\146\018\152\001B\004\000\002\b\000\000\000\000\000\000\002\144\000\000\000\000\002n\000\000\000\000\000\000\000\000\002\200\000\000\002^\000\000\000\000\000\000\000\000\000\000\002\028\000\000\000\030\003\196#\n\000\000\000\0001\188C\150\000\000\000\000\005\000\000\000\000:\000\000!t\001\142\001\138\000\000\000\000\002\212\004`\003\188\004\206\003*\003\196\004$\000\025\002~\001\212\003l\004\190\n:\000\000>\236\003\202\004\196\003\2226d\000\000\000\000\000\000\000\000\000\000\000\000\000\00044\000\000\004\022\005*\004\198\000\000\000\000\000\000\000\000\000]\000\000\000\000\005p\000q\005\132\006\160\bR\000\000\000\000\000\000\004\180\004\234\005\170\005:\000\000\000\000\007\136\005\236#\168\005V\006\028\000\255\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006@\000\000\000\000\000\000\005\214\006^\n|\b\156>\236\n\132\000\000$\004\n`4x4\222\000\000\001\160\000\000\000\000\000\000\000\000\006\1444\176\006\146\000\000\001`\006\184\000\000\003\018;,\000?\000\000\001\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\148\006\168\000\000\000\000\000\000\000\206\000\000\001\236\000\000\000\000\003\128\000\178\000\000\000\000\0062\000\000\005\228\000\000\003\128\b^\003\128\000\000\000\000\000\000\000\000\000\000;\242\000\000\007\002\007:\000\000\000-\007&*R\000\000\000\000\000\000\006\190\000\000\000\000\000\000\000\000\005\240\000\000\000\000\000\000\000\000\000\000\022\142\000\000\000\000\000\000\000\000\000\000\000\000\000~\007>\000\000\000\000\000\000\005\240\007\1447V\006\228\0074\025\140\000\000\004\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\000\000\000\000\000\000\000\000\b*7`\000\000\000\000\007\n\00767z\000\000\000\000\000\0007\198\006\2368\006\000\000\006\236\000\0008R\006\236\000\0008l44\b\\\bj\000\000\000\000%x\000\000\000\000\000\000\000\000\000\000\000\000\006\236\000\000\000\0008v\000\000\006\236E|\000\000\005\240\000\000\000\0008\222\000\000\006\236\000\144\000\000\000\000\006\236\006\236\000\000\000\000\006\236\000\000\000\0004\222\000\000\000\000\000\000\000\000\006\2365.\000\000\000\000\006\236\000\000\002\130\b\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000<\016\000\000\bJ\000\000E\154\005\240\000\000\000\000\000\000\000\000\bh\t0\011\136\b\164\b\226\b\230\007\216\bF\007\246\001\152\t\138\000\000\000\000\001N\003f\000\000\004\162\b8\002\006\t \007\168\000\000\000:\003\246\005\154\000\209\n\128\000\000\000\000?b\000\000I\214\nv\000\000F\026\005\240Fh\005\240\000\000\001\170\006P\000\000\t\204\000:\000\000\000\000\t\168\000\000\000\000\000\000\000\000\000\000\n@\000:\n\248\000:\000\000\002\n\000\000\000\000\002\252\000\000\000\000\000\000\011\014\000\000\000\000\000\000\000:\000:\000\000\000\000\000:\000\000\t \tp\000\000\002(\007\136\000\000\002(\000\000\000\000\0116\000:\000\000\000\000\000\000\000\000\000\000\000\000\002(\011\252\012\n\n\198\nl$\1661\240\000\000\000\000\003z\000\000\000\000\000\000\004\004\000\000\000\000\000\000\t\212\bV\012X\t\216\bZ?6?V\000\000\000\000\000\000\000\000\004\004\b\248\000\000\000\000\000\000\t\232\t\016\011\178\002(\011\146\000\000\000:\000\000\000\000\000\000\n`\000\000F\130\005\240\012\198\n4\t\022\r\154\nD\t:\012~5J\006\236\r\188\nl\tB?\172\011l\000\0005\148\006\236F\170\005\240\011L\000\000\000\000\000\000\000\00044\011p\000\000\n\228\022\"\000\000\000\000\000\000-\156\n\228\004d\022R\000\000\000\000-\192\n\228\022\244\000\000\000\000.B\n\228\023$\000\000\000\000.f\n\228\000\000\000\000\023\154\000\000\000\000.\196\n\228\023\246\000\000\000\000.\232\n\228\024l\000\000\000\000/j\n\228\000\000/\142\n\228\000\000\"\018\000\000\000\000\n\228\000\000\000\000\024\156\000\000\000\000\025\030\000\000\000\000\011X\000\000\000\000\025>\000\000\026\018\000\000\000\000\000\000\000\00044\012\024\000\000<\128\b\226\003\128\0262\000\000<\204\000\000\000\000\000\000<\230\000\000\000\000\026\180\000\000\026\228\000\000\000\000\000\000\000\0006D\000\000\000\000\000\000/\236\n\2280\016\n\228\000\000\011(\027\182\000\000\000\000\027\214\000\000\025\196\000\000\000\000?V\000\000\000\000\000\000\028\\\000\000\000\000\000\000\000\000\028\168\000\000\000\000\000\000\000\000\012\162\000\000\000\000\000\0002\252\000\000\001x\000\000\000\011\000\000\012D\000\000\001\140\000\000\000\000\000\000\000\000\000\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\228\000\000\012\184\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n0\012\156\002(\028\200\000\000\011\178\nL\012J\000\151\r6\002(\r\160\000\000\000:\014d\002(\000\000\029\154\000\000\000:\000\000\011\216\nt\005\140\000\000\000\000\000\000\000\000\000\000\012\002\000~\001\022\000\000\000\000\000\0001\192\000\000I\218\000\000\n\174\000\000\n\222\000\000\000\000\000\000\000\000\004\150\000\000\000\000\000\000\t\232\003\128\000\000\003\128\000\029\000\000\001P\000\000\011&\003\128\003\128\000\000\011D\003\128\003\128\011\028\000\000\030\016\000\000\000\000\011\"\012\226\000\0003d\003\220\000\000\000\000\000\000\000\000\000\000\000\000\n\228\000\000\000\000\000\000\000\000\000\000\012\004\011$\014\250\002(\000\000\r\248\000\000\000:\000\000\rR\000\000\000\000\000\000\000\000\000\000\016\212\000\000\n\228\000\000\000\000\015\014\000\000\000:\000\000\015\220\000\000\000:\000\000\017\n\000:\000\000\005\030\000\000\011<\014\254\005(\000\000\012\"\012&\011>\012F\012\232\017j\000:\005@\000\000\011\186\012\192\012\216\002\146\005\128\012\162\011\200\012\236\003R\005\200\012\218\000\000\000\000\003\158\005\244\000\000\005\186\003<;\026\006\236\030l\000\000\006\160\003\134\012\142\011\244\015\026\006:\000\000\012\162\011\250\007\138\000\000A\024\000\000G\226\005\240\000\000\rD\rh\000\000\006&\000\000\005\240\012\204\012\002\006v\012\230\006\186\000\000\000\000\000\000\000\000\012\028\007\240\000\000\012>\b\164\000\000\b\000\020\142\012\228\012\236\012F\004d\t \000\000\012V\007\236\n\030\000\000\012\250\012\252\012\186\r\028\012\232\020D\000:\000\000\012\198\r\148\000\000\t(\000\000\nh\000\000\r\204\000\000\020\202\001\220\r\158\012\212\014\024\000\000\021\004\002\184\014\006\000\000\000\000\b$\003\180\000\000\np\000\000\021\022\000:\n\172\000\000\bN\000\000\000\000\r\180\012\214\023h\005:\000\000\r\182\012\246\006\170\012\230\r\184\r\188\r\b\0152\000\000\r\220\004t\000\000\000\000\000\000\000\000\000\185\r\022\r\202H\n\005\240\000\000\000\029\r\024\014\136\000\000\000\000\000\000\000\000\000\000\000\000H2\005\240\000\000\r&\014\224\000\000\000\000\000\000\000\000\000\000\000\000A\152\011\024\000\000\r2\000h\000\000\rD\rp\004<\000\000\001\002\029\220\000\000\003<\000\000HJ\005\240\005\240\000\000\000\000\006\242\000\000\t\018\000\000\006\168\006\242\006\242\000\000\r\128D\148\005\240H^\005\240\011\152\000\000\000\000\000\000\000\000\012,\000\000\000\000\007\212\000\000\007\236\014J\r\182\015b\014\"\000\000\000\000\011\172\b\022\014\134\000\000\000\000\r\222\016\024\014\190\000\000\000\000\002d\000\000\b\150\000\000\004\140;@\005\240\000\000\006v\t\240\000\000\bn\000\000\000\000\000\000\006\242\000\000\000\000\012\156\015\006\r\248\0164\014\218\000\000\000\000\016\"\012\158\015*\000\000\000\000\000\000\030\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\206\000\000\015@\r\250\005\174\000\000\016:\016\030\r:\015\138\000\000\000\000\015\164\014\022\006.\000\000\000\0000R;,\006\176\000\000\000\000\000\000\b\194\015d\014\026\000\000\015\128\b\194\000\000\016l\r<\015\214\000\000\000\000\000\000\005\240\bF\011\228\b>\000\000\000\000\000\000\000\000\015\192\014.\000\000\br\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\240\015\182\014:\017&\015\204\000\000$\140\000\227\014@\015\162\007\188\0036\014D\016`\000\000\017\026\030\174\000\000\000\000\030\226\000\000\r\128\000\000\001\016\000\000\000\000\000\000\000\000\000\000\000\000Hr\005\240\000\000\017,\031\180\000\000\000\000\031\246\000\000\003\246\014\138\016\206\000\000\000\000=HB \016\134\000\000H\202\005\240 *\000\000\000\000 \200\000\000\000\000\r\152\000\000\000|\000\000\000\000\000\000\000\000\000\000\000\000B|\000\000\000\000=\156B\188\016\138\000\000H\238\005\240 \252\000\000\000\000!>\000\000\000\000\014\166\"\n\r\160\000\000\014\170\014\222\000\147\001\006\014\234\b\154\014\250\016\2263~\r\182\000\000\015\004\015\012\tl\000\000\002\176D\168\000\000\b&\000\000\015\020=\184=\212\002\180\015\194\003\b\000\000;~\"\018\000\000\000\151\000\000\000\000\000\151\000\000\000\000\000\151\n\162\000\000\004v\000\151\016\2463\200\r\218\000\000\000\151\000\000\000\000\022\134\000\000\000\000\000\000\000\151\000\000\000\000\014\130\000\000\006(\003\158\014\188\000\000\015\"D\184\014\230\000\000\000\000\000\000\000\000\015V\000\000\000\000\t\"\000\000\000\151\022\184\000\000\r8\000\151> \000\000\015\176\016V\015V\017t\016 \000\000>\156\015\242\016n\000\000\000\000\000\000 |\b\164\000\000\000\000\000\000\000\000\000\000\000\000\n\216\016\004\000\000\016\134\000\000\000\000\000\000\000\000\016\014E2\000\000\000\000\000\000\000\000\n\216\000\000\000\000\016\016Ed\000\000\000\000\000\000\000\000\000\000\002(\000:\000\000\000\000\006\236\000\000I\022\005\240\000\000\tb\000\000\000\000\000\000\000\000\029*\000\000\000\000\000\000\000\000\000\000\000\000\017\030\001\148\nV\015d\007l\015\\\000\000\000\188\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\192\011\170\015z\000\000\006n\017\130\0172\016\022\000\000\000\000\017*\007N\002\136\000\000\000\000\000\000\015\152\000\000\015\208\003\158\000\000\000\000\003\128\006f\000\000\000\000\000\000\000\000\000\000\n\012\000\000\000\000\006\198\004`\000\000\000\000I>\005\240\005\240\000\000IV\005\240\t\196\000\000\000\000\000\000\005\240\000\000\000\0001\n\017@\016.\000\000\000\000\0172\006*\n`\000\000\000\000\000\000\000\000\007\194\017\1301$\017H\016H\000\000\000\000\017:\t\192\n\246\000\000\000\000\000\000\000\000\000:\000\000\016h\000\000\000\000\000\000\"\128\000\000\"\220\000\000\000\000\000\000\000\000\000\000\000\000\026\240\000\000\000\000\000\000\0020\000\017\000\000\000\000\000\000\000\000\000\000\006`\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n \000\000\000\000\000\000Eh\000\000\005\240\000\000\t\222\000\000\000\000\000\000\000\025\000\000\000\000\000\000\002@\000\000\000\000\000\000\004@\000\000\002(\000\000\000g\000\000\000:\000\000\004\156\000\000\000\000\000\0006R\006\236\000\000\000\000\003\018\000\000\000\000\000\000\000\000\004\238\016\128\006\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0062\000\000\016x\000\000\000\000\000\000\000\000\0058\006\234C C.\000\000\000\000\016\128Cx\000\000\000\000\000\000\016\130C\220\000\000\000\000\000\000\000\000"), (16, "\006l\001\023\002<\002/\001i\007\002\000\238\001\027\001#\000\242\000\243\001$\001\222\000q\001i\006\252\001#\002}\006m\007\b\000\238\006o\001\246\000\242\000\243\002~\001\250\003\221\001\027\000\238\006p\006}\000\242\001\006\0007\001&\006H\006l\002\152\002<\002/\001i\001\020\001@\007:\006\230\004.\002\021\001\027\001\030\0007\006)\001o\0044\002}\006m\006|\004\r\006o\001#\000\238\006q\002~\000\242\000\243\000;\001\227\006p\006}\000?\003/\001\251\000\245\001\222\006\141\002\152\007;\002\"\001\222\005\252\000\242\006\142\001.\001\246\006+\001\252\007.\001\250\001\246\001\027\000\244\006)\001\250\001#\001\027\001\163\001i\006r\006q\006,\003\222\002\154\007\000\001\020\006.\0051\006s\000m\006Z\001\027\001\030\003/\001\020\002?\004\016\0023\000\242\0052\001\027\001(\001\020\005J\007/\004.\006+\0007\001\027\001(\001\027\003/\006\130\001X\001\251\001#\006r\005B\001$\001\251\002\154\006,\006\160\002#\006\000\006s\006.\006\131\001\252\0060\006E\001\020\002?\001\252\0023\000\242\005\217\001\027\001(\002\156\002\163\006v\001&\004\017\007\n\001\020\006x\005E\000\\\006\130\001B\001\027\001(\000`\006\203\000d\006z\001)\003/\002\164\001\031\002\184\005G\004\208\006\131\001)\001[\002\190\001\020\001\143\002\166\004:\006{\000y\001\027\001\030\002\156\002\163\006v\001\020\001#\0031\005H\006x\0012\001\027\001(\001H\001#\001.\002\192\001$\004=\006z\0016\001p\002\164\000:\002\184\006l\004\016\002<\002/\001i\002\190\001\020\001\143\002\166\001)\006{\004.\001\027\001\030\0009\0017\001&\002}\006m\006|\001\020\006o\001U\003\219\0007\002~\001\027\001(\002\192\006\170\006p\006}\0051\003\225\001\245\003/\006\199\006l\002\152\002<\002/\001i\005\221\001)\0052\004\030\001\020\000\238\0059\0041\000\242\000\243\001\027\001\030\002}\006m\006|\002\019\006o\001#\006\169\006q\002~\001.\006\171\006\191\000\128\006p\006}\000\151\0042\006\238\001\239\006\172\001\222\002\152\0015\002\017\006)\000\151\001<\001,\000\160\001)\001\246\001\020\000\130\007\019\001\250\000=\001\027\001\027\001(\001\020\004)\004+\004-\006r\006q\001\027\001(\002\154\006\158\003/\000\238\0030\006s\000\242\001\006\0051\0012\006+\001\220\002?\000\238\0023\000\242\000\242\001\006\001#\000\151\0052\005b\000\156\000\238\0053\006,\000\242\001\006\002\001\006\130\006.\000\242\001\251\006r\006>\001\007\000\151\002\154\000\161\001\239\003\220\000\138\006s\0007\006\131\001&\001\252\001)\001B\002?\003\220\0023\000\242\0046\000\157\001)\002\156\002\163\006v\001J\001\n\002 \001\020\006x\007\020\000\155\006\130\0072\001\027\001(\006\173\006\174\004\220\006z\0049\002\012\002\164\002\003\002\184\006\175\006\176\006\131\0012\001\027\002\190\001L\001\143\002\166\003/\006{\006\177\004B\005d\002\156\002\163\006v\007\021\007F\002/\001i\006x\007\028\001\027\0073\000\176\001#\000\242\002\192\001$\000@\006z\0016\003/\002\164\005\210\002\184\006l\006\161\002<\002/\001i\002\190\001\020\001\143\002\166\001)\006{\000\131\001\027\005g\002\012\0017\001&\002}\006m\006|\000\238\006o\001S\000\242\001\006\002~\001\245\004\134\002\192\007\029\006p\006}\001\186\002.\002/\001i\001*\006l\002\152\002<\002/\001i\006\190\000\238\001-\000\238\000\242\000\243\000\242\000\243\000\136\007H\000\154\007\030\002}\006m\006|\001\n\006o\001#\000\245\006q\002~\001.\002!\006\132\004\226\006p\006}\005h\000\151\007\031\006\181\001\239\006)\002\152\006)\006\171\000\245\000\185\001<\0052\002\006\005m\004\016\005j\006\172\000\238\001\027\002\007\000\242\000\243\007I\001\020\0023\000\242\0012\006r\006q\001\027\001(\002\154\006\128\0022\001i\001\020\006s\006+\000\188\006+\0007\001\027\001(\002?\001\020\0023\000\242\000\245\006)\001d\001\027\001\030\006,\004\139\006,\001\222\000\180\006.\002\014\006.\006\130\0065\005\212\0062\006r\001\246\001\245\002\b\002\154\001\250\006L\001\027\003/\006s\0020\006\131\0023\000\242\001\020\001B\002?\006+\0023\000\242\001\027\001(\001)\002\156\002\163\006v\001J\004\144\000\151\001\020\006x\000\156\006,\006\130\000\186\001\027\001(\006.\006\198\004\232\006z\006/\000\242\002\164\001#\002\184\004\016\005b\006\131\0012\001\251\002\190\001L\001\143\002\166\005-\006{\002\174\002/\001i\002\156\002\163\006v\005\001\001\252\000\245\003<\006x\000\190\000\242\001\006\001&\0076\000\151\002\192\000\183\001\239\006z\004H\002\021\002\164\005\245\002\184\006l\004\016\002<\002/\001i\002\190\001\020\001\143\002\166\001)\006{\005\247\001\027\001(\007T\007U\000\139\002}\007W\001#\003M\006o\006\205\0077\005(\002~\002\"\000\242\002\192\000\242\006p\007Y\000\195\007>\0060\005d\006\199\006l\002\152\002<\002/\001i\007h\001\020\003s\004\195\001&\000\242\001\006\001\027\001\030\001\027\007`\000\238\002}\007a\000\242\000\243\006o\004\030\006\150\006q\002~\007?\000\181\001\020\001\222\006p\007i\002\r\000\208\001\027\005g\001\246\002\196\002\152\001\246\001\250\000\245\001\027\001\250\003\132\001\027\000\245\006)\002\175\003/\0023\000\242\000\212\002#\003/\000\151\001#\001\226\001\239\001$\006r\006q\0016\003/\002\154\000\151\003/\005\135\001\239\006s\002 \004,\004+\004-\000\191\002 \002?\000\196\0023\000\242\006+\006\211\0017\001&\002\021\001\251\001\020\0007\001\251\0018\007\\\005h\001\027\001(\000\245\006,\001#\006r\003/\001$\006.\002\154\001\252\0052\0069\005l\006s\005j\006\131\003'\001i\004s\004u\002?\002\"\0023\000\242\000\242\0012\004t\002\156\002\163\006v\001&\004x\006l\007m\006x\000\209\000\151\001.\005\145\001\239\004\245\003/\001#\004\129\006z\001/\000\227\002\164\000\245\002\184\007W\000\245\006\131\006o\001<\002\190\001)\001\143\002\166\007\026\006{\003/\006p\003/\002\156\002\163\006v\001\020\001#\001&\000\218\006x\006\186\001\027\001(\004\135\001#\001.\002\192\005b\000\220\006z\006\233\0012\002\164\002#\002\184\006l\003/\002<\002/\001i\002\190\006q\001\143\002\166\002!\006{\003/\000\228\000\235\002!\000\245\001&\002}\006m\006\138\001\020\006o\0007\001\245\004\140\002~\001\027\001(\002\192\006\212\006p\006}\002 \007Q\002/\001i\001B\006l\002\152\002<\002/\001i\006r\001)\005\022\000\233\004\145\001J\004\026\004B\000\245\006s\007`\000\238\002}\007a\000\242\000\243\006o\001\020\000\245\006q\002~\005d\001\242\001\027\001(\006p\007d\000\236\0012\004\172\007X\001L\001\246\002\152\0011\000\250\001\250\000\245\001\027\004\158\001]\001)\006)\001\020\001\014\000\246\004\147\001\020\006u\001\027\001(\001\020\006\201\001\027\001(\006r\006q\001\027\005g\002\154\000\251\003/\006v\001\017\006s\006\236\006\237\006x\0012\004\030\000\245\002?\001K\0023\000\242\006+\001\020\006z\004\162\001i\001)\001\251\001\027\001\030\004\180\005\174\004B\000\242\006\130\007\027\006,\001\020\006r\006{\000\245\006.\002\154\001\027\001(\006K\006\189\006s\007R\006\131\0023\000\242\001)\0012\002?\002!\0023\000\242\000\245\006\244\005h\002\156\002\163\006v\005\150\004+\004-\007g\006x\004\177\004B\001\"\0052\000\245\005k\001?\005j\005:\006z\006\199\005y\002\164\001F\002\184\001Z\0051\006\131\0012\001I\002\190\001#\001\143\002\166\001$\006{\004\249\004B\0052\002\156\002\163\006v\0058\004\183\002\021\001\143\006x\001G\004\153\005z\005\187\005{\001\181\002\192\001a\001y\006z\001`\001&\002\164\004\180\002\184\006l\000\242\002<\002/\001i\002\190\001\179\001\143\002\166\002\025\006{\003/\002\"\003/\001x\000\242\001#\002}\006m\001\222\005|\006o\001\223\001\130\001#\002~\0054\005b\002\192\001\246\006p\006\134\003/\001\250\000\245\001\027\006\173\006\174\002\152\002<\002/\001i\001\020\001.\001#\006\175\006\176\005^\001\027\001(\005\157\001&\000\245\006R\002}\005}\006\177\004B\0007\000\245\000\245\006q\002~\004\199\005~\005\127\005I\005\128\004]\001\027\006\167\001&\001\143\001\020\001\208\002\152\002#\002\021\001\251\001\027\001(\005K\001#\004\185\006U\002<\002/\001i\004\236\001\210\005\188\000\238\001\252\004\030\000\242\000\243\005E\006r\005d\006W\002}\002\154\005S\003/\002$\001\139\006s\002\"\002~\004\240\000\242\005G\001\138\002?\003\199\0023\000\242\001\185\005\130\004\030\001\020\002\152\001\219\005\132\005\142\006X\001\027\001(\001\020\001B\006\137\005H\000m\005\184\001\027\005g\001)\0027\002\154\002:\005\189\000\245\005\170\004+\004-\006\131\004\238\001\197\001\020\005\185\002?\0054\0023\000\242\001\027\001(\000\245\002\156\002\163\006v\005\164\005\165\001\202\0012\006x\003/\001L\004\238\005\178\004+\004-\002#\0054\004\188\006z\006$\005\181\002\164\000m\002\184\005\174\004B\002\181\001)\002\154\002\190\001\020\001\143\002\166\000\245\006{\005h\001\027\001(\002\156\002\163\002?\004J\0023\000\242\002<\002/\001i\0052\000\245\005i\000\245\005j\002\192\0056\0014\001)\000\242\001#\002\164\002}\002\184\001#\0012\004C\005e\004\214\002\190\002~\001\143\002\166\002\021\001\027\002\181\007*\002G\001#\006Y\002V\001$\004\196\002\152\006\247\0012\006\023\002\156\002\163\005\154\004B\001&\002\192\002<\002/\001i\001)\003\253\002Y\001\207\002\022\006\031\002_\002\"\000\242\001&\000\242\002\164\002}\002\184\006U\006\151\001\213\001\191\001i\002\190\002~\001\143\002\166\002\011\002r\001\232\006\154\003\163\007,\006W\002<\002/\001i\002\152\002<\002/\001i\001j\002P\004\030\001l\001m\002\192\003/\001\222\002}\006U\001\244\000\245\002}\002\154\000\245\002w\002~\001\246\006X\001.\002~\001\250\004b\001\027\006W\002?\007\"\0023\000\242\002\152\004P\001\020\000\245\002\152\002#\001\020\000\245\001\027\001(\003/\001\234\001\027\001(\003/\003\189\003)\003*\003/\001\249\001\020\006X\006\220\004+\004-\000\245\001\027\001(\002\181\004\180\002\154\002\n\000\242\003\246\006\236\006\237\001\222\001\251\002\240\001\254\002\156\002\163\002?\003\242\0023\000\242\001\246\004\200\003/\001\131\001\250\001\252\001\027\000\245\005\174\004B\0026\001#\0029\003\254\002\164\001r\002\184\002\154\000\242\001)\002F\002\154\002\190\001)\001\143\002\166\001#\004\004\002\181\002?\006\207\0023\000\242\002?\006\234\0023\000\242\001)\004\215\003/\002\156\002\163\004\233\003\192\003\197\002\192\0040\004\020\0067\001\251\0012\000\242\002<\002/\001i\007#\003/\001\143\002U\000\245\002\164\002\181\002\184\001\252\0012\002\181\002X\002}\002\190\006\235\001\143\002\166\004\237\002\156\002\163\002~\004%\002\156\002\163\001\133\000\245\004I\001\222\006\165\004B\002\000\002^\001\134\002\152\001\143\001p\002\192\001\246\002\164\000\245\002\184\001\250\002\164\001\027\003B\004'\002\190\002j\001\143\002\166\002\190\002g\001\143\002\166\006\248\002<\002/\001i\001\222\000\245\001\020\002\029\002<\002/\001i\003/\001\027\001(\001\246\002\192\002}\005!\001\250\002\192\001\027\001\020\004?\002}\002~\004D\004V\001\027\001(\002m\003\252\002~\001\251\002q\000\245\006\235\002v\002\152\004v\004|\002\138\003\249\002\154\005\157\002\152\002\021\001\252\002<\002/\001i\001\222\002\157\002\180\002K\002?\002\171\0023\000\242\000\245\0032\001\246\002\189\002}\001\251\001\250\002\244\001\027\001h\001i\001)\002~\004\180\002H\001\020\000\242\002\"\003\235\001\252\000\242\001\027\001\030\005A\003\004\002\152\001)\003/\002\181\001j\001z\000\245\001l\001m\000\245\000\245\003\011\003(\0048\003\151\002\156\002\163\002\154\004\131\002<\002/\001i\000\245\000\245\002\154\004\137\001\251\003\179\004<\002?\003\160\0023\000\242\003\213\002}\002\164\002?\002\184\0023\000\242\001\252\003\223\002~\002\190\003\244\001\143\002\166\004\156\003\188\001{\004\161\001|\002[\0051\004\176\002\152\002#\004\003\003/\003/\006\179\002\181\001\143\002\154\004\005\0052\002\192\004\184\002\181\005R\005\164\005\165\005F\002\156\002\163\002?\004\019\0023\000\242\002\021\002\156\002\163\001\131\003/\004\187\000\245\005\173\004>\004\194\004F\005\174\004B\000\245\002\164\001r\002\184\004\198\000\242\004U\004`\002\164\002\190\003B\001\143\002\166\003\182\003\255\002\181\002\190\002\"\001\143\002\166\000\242\004\130\000\245\004{\004}\000\245\002\154\002\156\002\163\000\245\004\128\004\143\002\192\002<\002/\001i\005n\005v\002?\002\192\0023\000\242\000\245\004\133\004\142\003/\003/\002\164\002}\002\184\002<\002/\001i\004\138\004\204\002\190\002~\001\143\002\166\000\245\004\210\005\131\003\183\000\245\002\021\002}\001\133\004\222\004\243\002\152\002\181\000\245\004\141\002~\001\134\004\155\001\143\001p\002\192\003\172\003/\002#\002\156\002\163\004\248\004\160\002\152\004\171\002<\002/\001i\004\007\003/\004\253\002\"\000\238\003/\000\242\000\242\000\243\005\007\005\r\002\164\002}\002\184\004\170\004\175\003/\005\024\004\186\002\190\002~\001\143\002\166\005#\005\139\005\162\003\157\004\197\001h\001i\000\245\004\193\0055\002\152\003/\006)\000\245\002\250\004\209\004\203\004\205\002\154\002\192\000\245\000\245\002\253\004\229\001\222\001j\002\254\004\n\001l\001m\002?\005'\0023\000\242\001\246\002\154\005\211\000\245\001\250\005<\001\027\002<\002/\001i\002#\006+\000\245\002?\005\246\0023\000\242\004\217\006\016\000\245\000\245\004\228\002}\002<\002/\001i\006,\000\245\002\181\006\027\002~\006.\005M\000\245\001\222\006^\003\148\004[\002}\002\154\002\156\002\163\000\245\002\152\001\246\002\181\002~\006=\001\250\001\251\001\027\002?\005W\0023\000\242\004\223\003\140\002\156\002\163\002\152\002\164\003/\002\184\001\252\000\245\005p\005\134\002\021\002\190\001q\001\143\002\166\000\245\004\227\004\242\004\247\005V\002\164\004\252\002\184\005\144\001r\005\156\002\181\000\242\002\190\004\255\001\143\002\166\005\003\003/\002\192\005\176\001\251\004\012\002\156\002\163\002\"\005\192\000\245\000\242\005\198\005\011\005\202\005\018\005\029\002\154\001\252\002\192\005U\005N\003/\002<\002/\001i\002\164\002\255\002\184\002?\000\245\0023\000\242\002\154\002\190\005O\001\143\002\166\002}\002<\002/\001i\006I\000\245\000\245\002?\002~\0023\000\242\005\230\005T\003\001\002\149\002\021\002}\002\021\001\133\002\192\000\245\002\152\000\245\002\181\002~\006\014\001\142\006J\001\143\001p\002\183\002\021\000\245\006M\002#\002\156\002\163\002\152\000\245\002\181\003/\000\245\004W\000\245\004w\002\"\001\222\002\"\000\242\004j\000\242\002\156\002\163\006\019\006Q\002\164\001\246\002\184\004\157\006:\001\250\002\"\001\027\002\190\000\242\001\143\002\166\006\024\002<\002/\001i\002\164\0066\003B\005X\005Y\006\030\005x\000\245\002\190\006&\001\143\002\166\002}\002\154\003/\002\192\006O\005q\005r\001#\002~\000\245\005b\000\245\005w\002?\002\198\0023\000\242\002\154\005\141\002\192\005\137\002\152\001\251\002<\002/\001i\002#\006V\002#\002?\006d\0023\000\242\006\168\001&\003/\001\252\000\245\002}\002<\002/\001i\002#\000\245\003/\002\181\002~\005\138\006\180\003/\003/\000\245\002\197\003/\002}\005\140\000\245\002\156\002\163\002\152\000\245\002\181\002~\006\194\000\245\003/\001\222\005\183\002\249\004n\005\155\000\245\006b\002\156\002\163\002\152\001\246\002\164\003/\002\184\001\250\005d\001\027\005\159\002\154\002\190\005\161\001\143\002\166\001h\001i\006\196\005\163\002\164\003/\002\184\002?\000\245\0023\000\242\000\245\002\190\003/\001\143\002\166\006i\003/\003/\002\192\001j\001z\001\020\001l\001m\006w\000\245\005\175\001\027\005g\006~\006\135\005\191\002\154\006\185\002\192\001\251\005\193\005\194\002\181\005\199\000\245\005\203\004d\005\207\002?\006\229\0023\000\242\002\154\001\252\002\156\002\163\005\225\005\232\002<\002/\001i\005\236\006\243\006\004\002?\006\025\0023\000\242\001{\0061\001|\002[\000\245\002}\002\164\006;\002\184\006k\006\255\006e\002\181\002~\002\190\006f\001\143\002\166\007Z\002\252\005h\006j\007e\007j\002\156\002\163\002\152\006y\002\181\006\163\006\183\006\184\0052\001\131\005u\006\188\005j\002\192\006\228\006\232\002\156\002\163\006\242\006\246\002\164\001r\002\184\0012\000\242\002<\002/\001i\002\190\007L\001\143\002\166\003\182\000\000\000\000\000\000\002\164\000\000\002\184\001\222\002}\000\000\004q\000\000\002\190\000\000\001\143\002\166\002~\001\246\000\000\002\192\000\000\001\250\003\b\001\027\000\000\000\000\000\000\000\000\000\000\002\152\000\000\000\000\000\000\002\154\000\000\002\192\000\000\000\000\000\000\002<\002/\001i\000\000\000\000\000\000\002?\000\000\0023\000\242\000\000\000\000\000\000\000\000\001\133\002}\001\222\000\000\000\000\004\127\000\000\000\000\001\134\002~\001\143\001p\001\246\001\251\000\000\003\015\001\250\000\000\001\027\002<\002/\001i\002\152\000\000\002\181\000\000\000\000\001\252\000\000\000\000\000\000\000\000\000\000\000\000\002}\000\000\002\156\002\163\000\000\002\154\000\000\000\000\002~\000\000\000\000\002<\002/\001i\003\018\005y\000\000\002?\000\000\0023\000\242\002\152\002\164\000\000\002\184\000\000\002}\001\251\000\000\000\000\002\190\000\000\001\143\002\166\002~\000\000\000\000\000\000\000\000\000\000\003\024\001\252\000\000\005z\006\249\005{\000\000\002\152\000\000\002\181\000\000\002\154\000\000\002\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\156\002\163\002?\000\000\0023\000\242\000\000\000\000\000\000\002<\002/\001i\000\000\000\000\000\000\005|\000\000\000\000\000\000\000\000\002\164\000\000\002\184\002\154\002}\000\000\000\000\000\000\002\190\000\000\001\143\002\166\002~\000\000\002\181\002?\000\000\0023\000\242\000\000\000\000\000\000\003?\000\000\000\000\002\152\002\156\002\163\000\000\002\154\005}\002\192\000\000\000\000\000\000\002<\002/\001i\000\000\005~\005\127\002?\005\128\0023\000\242\000\000\002\164\002\181\002\184\000\000\002}\000\000\000\000\000\000\002\190\000\000\001\143\002\166\002~\002\156\002\163\000\000\000\000\000\000\003\027\005\188\000\000\000\000\002<\002/\001i\002\152\000\000\002\181\000\000\000\000\000\000\002\192\000\000\002\164\000\000\002\184\000\000\002}\000\000\002\156\002\163\002\190\002\154\001\143\002\166\002~\000\000\005\130\002<\002/\001i\0035\005\132\005\142\002?\000\000\0023\000\242\002\152\002\164\000\000\002\184\005\184\002}\002\192\000\000\000\000\002\190\000\000\001\143\002\166\002~\000\000\000\000\002<\002/\001i\0039\005\185\000\000\000\000\000\000\000\000\000\000\002\152\000\000\002\181\000\000\002\154\002}\002\192\000\000\000\000\000\000\000\000\000\000\000\000\002~\002\156\002\163\002?\000\000\0023\000\242\000\000\000\000\000\000\003D\000\000\000\000\002\152\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\164\000\000\003B\002\154\000\000\000\000\000\000\000\000\002\190\000\000\001\143\002\166\000\000\000\000\002\181\002?\000\000\0023\000\242\000\000\000\000\005y\000\000\000\000\000\000\000\000\002\156\002\163\000\000\002\154\000\000\002\192\000\000\000\000\000\000\002<\002/\001i\000\000\000\000\000\000\002?\000\000\0023\000\242\000\000\002\164\002\181\002\184\005z\002}\005{\000\000\000\000\002\190\002\154\001\143\002\166\002~\002\156\002\163\002<\002/\001i\000\000\000\000\000\000\002?\003F\0023\000\242\002\152\000\000\002\181\000\000\000\000\002}\002\192\000\000\002\164\000\000\002\184\005|\000\000\002~\002\156\002\163\002\190\001\222\001\143\002\166\004\207\000\000\000\000\003J\000\000\000\000\002\152\001\246\002\181\000\000\000\000\001\250\000\000\001\027\002\164\000\000\002\184\000\000\000\000\002\192\002\156\002\163\002\190\000\000\001\143\002\166\005}\000\000\000\000\002<\002/\001i\000\000\000\000\000\000\005~\005\127\000\000\005\128\000\000\002\164\000\000\003B\002\154\002}\002\192\000\000\000\000\002\190\000\000\001\143\002\166\002~\000\000\000\000\002?\001\251\0023\000\242\000\000\000\000\005\186\003R\000\000\001\222\002\152\000\000\004\219\000\000\002\154\001\252\002\192\000\000\000\000\001\246\002<\002/\001i\001\250\000\000\001\027\002?\000\000\0023\000\242\000\000\000\000\002\181\000\000\005\130\002}\000\000\000\000\001\222\005\132\005\142\004\225\000\000\002~\002\156\002\163\000\000\001\222\001\246\005\184\004\235\000\000\001\250\003X\001\027\000\000\002\152\001\246\002\181\000\000\000\000\001\250\000\000\001\027\002\164\005\185\003B\000\000\001\251\000\000\002\156\002\163\002\190\002\154\001\143\002\166\000\000\000\000\000\000\002<\002/\001i\001\252\000\000\000\000\002?\000\000\0023\000\242\000\000\002\164\000\000\003B\000\000\002}\002\192\000\000\001\251\002\190\000\000\001\143\002\166\002~\002<\002/\001i\001\251\000\000\000\000\000\000\000\000\001\252\003^\000\000\000\000\002\152\000\000\002\181\002}\002\154\001\252\002\192\000\000\000\000\000\000\000\000\002~\000\000\000\000\002\156\002\163\002?\003e\0023\000\242\000\000\000\000\001#\000\000\002\152\005b\001#\000\000\000\000\001$\000\000\000\000\0016\000\000\002\164\000\000\003B\000\000\000\000\000\000\000\000\000\000\002\190\000\000\001\143\002\166\000\000\001#\002\181\001&\005b\000\000\0017\001&\000\000\000\000\000\000\000\000\000\000\001Q\002\156\002\163\000\000\002\154\000\000\002\192\000\000\000\000\000\000\002<\002/\001i\000\000\000\000\001&\002?\000\000\0023\000\242\000\000\002\164\000\000\003B\000\000\002}\000\000\000\000\002\154\002\190\000\000\001\143\002\166\002~\002<\002/\001i\005d\000\000\003j\002?\001.\0023\000\242\000\000\000\000\002\152\000\000\002\181\002}\000\000\000\000\002\192\000\000\000\000\000\000\000\000\002~\001<\000\000\002\156\002\163\005d\003o\000\000\000\000\000\000\001\020\000\000\000\000\002\152\001\020\002\181\001\027\005g\000\000\000\000\001\027\001(\000\000\002\164\000\000\003B\000\000\002\156\002\163\000\000\000\000\002\190\000\000\001\143\002\166\001\020\002<\002/\001i\000\000\000\000\001\027\005g\000\000\000\000\000\000\000\000\002\164\000\000\002\184\000\000\002}\002\154\000\000\002\192\002\190\000\000\001\143\002\166\002~\000\000\000\000\000\000\000\000\002?\000\000\0023\000\242\000\000\003v\001B\000\000\002\152\005h\000\000\000\000\002\154\001)\002\192\000\000\000\000\001J\002<\002/\001i\0052\000\000\006B\002?\005j\0023\000\242\000\000\000\000\000\000\000\000\002\181\002}\005h\000\000\0012\000\000\000\000\000\000\0012\002~\000\000\001L\002\156\002\163\0052\000\000\006\\\001\222\005j\003{\004\244\000\000\002\152\000\000\002\181\000\000\000\000\001\246\000\000\0012\000\000\001\250\002\164\001\027\002\184\000\000\002\156\002\163\000\000\002\154\002\190\000\000\001\143\002\166\000\000\002<\002/\001i\000\000\000\000\000\000\002?\000\000\0023\000\242\000\000\002\164\000\000\002\184\000\000\002}\000\000\000\000\002\192\002\190\000\000\001\143\002\166\002~\002<\002/\001i\000\000\000\000\000\000\000\000\001\251\000\000\003\128\000\000\000\000\002\152\000\000\002\181\002}\002\154\000\000\002\192\000\000\000\000\001\252\000\000\002~\000\000\000\000\002\156\002\163\002?\000\000\0023\000\242\000\000\003\143\000\000\000\000\002\152\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\164\000\000\003B\000\000\000\000\000\000\000\000\000\000\002\190\000\000\001\143\002\166\000\000\000\000\002\181\000\000\000\000\000\000\000\000\002<\002/\001i\000\000\000\000\000\000\000\000\002\156\002\163\000\000\002\154\000\000\002\192\000\000\000\000\002}\002<\002/\001i\000\000\000\000\000\000\002?\002~\0023\000\242\000\000\002\164\000\000\003B\000\000\002}\000\000\003\146\002\154\002\190\002\152\001\143\002\166\002~\000\000\000\000\000\000\000\000\000\000\003\152\002?\000\000\0023\000\242\000\000\000\000\002\152\000\000\002\181\000\000\001h\001i\002\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\156\002\163\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001j\001k\002\181\001l\001m\000\000\000\000\000\000\001\191\001i\002\164\000\000\003B\000\000\002\156\002\163\000\000\000\000\002\190\000\000\001\143\002\166\000\000\002\154\000\000\000\000\000\000\000\000\001j\002P\000\000\001l\001m\000\000\002\164\002?\003B\0023\000\242\002\154\000\000\002\192\002\190\000\000\001\143\002\166\002<\002/\001i\000\000\000\000\002?\000\000\0023\000\242\000\000\000\000\000\000\000\000\000\000\000\000\002}\002<\002/\001i\002\192\000\000\002\181\000\000\002~\000\000\000\000\003\189\003)\003*\003\154\000\000\002}\001q\002\156\002\163\000\000\002\152\002\181\000\000\002~\000\000\000\000\000\000\000\000\001r\003\165\000\000\000\242\000\000\002\156\002\163\000\000\002\152\002\164\000\000\003B\000\000\000\000\000\000\000\000\001\131\002\190\000\000\001\143\002\166\000\000\000\000\000\000\000\000\002\164\000\000\002\184\001r\000\000\000\000\000\242\000\000\002\190\000\000\001\143\002\166\002<\002/\001i\002\192\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\002\154\002\192\003\196\000\000\000\000\002~\002<\002/\001i\001\133\005y\003\174\002?\000\000\0023\000\242\002\154\001\142\002\152\001\143\001p\002}\000\000\000\000\000\000\000\000\000\000\000\000\002?\002~\0023\000\242\000\000\000\000\000\000\003\177\000\000\001\133\005z\007\012\005{\000\000\002\152\000\000\002\181\001\134\000\000\001\143\001p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\156\002\163\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\005|\002\156\002\163\000\000\000\000\002\164\000\000\002\184\000\000\000\000\002\154\000\000\000\000\002\190\000\000\001\143\002\166\000\000\000\000\000\000\000\000\002\164\002?\002\184\0023\000\242\000\000\000\000\000\000\002\190\000\000\001\143\002\166\000\000\002\154\005}\002\192\000\000\000\000\000\000\002<\002/\001i\000\000\005~\005\127\002?\005\128\0023\000\242\000\000\000\000\002\192\000\000\002\181\002}\002<\002/\001i\000\000\000\000\000\000\000\000\002~\000\000\000\000\002\156\002\163\000\000\003\191\005\188\002}\000\000\000\000\000\000\000\000\002\152\000\000\002\181\002~\000\000\000\000\000\000\000\000\000\000\003\194\002\164\000\000\002\184\000\000\002\156\002\163\002\152\000\000\002\190\000\000\001\143\002\166\005\130\007\014\000\000\000\000\000\000\005\132\005\142\000\000\000\000\000\000\000\000\000\000\002\164\000\000\002\184\005\184\000\000\000\000\000\000\002\192\002\190\000\000\001\143\002\166\000\000\002<\002/\001i\000\000\000\000\000\000\005\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002}\002\154\000\000\002\192\000\000\000\000\000\000\000\000\002~\000\000\000\000\000\000\000\000\002?\000\000\0023\000\242\002\154\003\204\000\000\000\000\002\152\000\000\002<\002/\001i\000\000\000\000\000\000\002?\000\000\0023\000\242\000\000\000\000\000\000\000\000\000\000\002}\002<\002/\001i\000\000\000\000\000\000\002\181\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002}\000\000\003\209\002\156\002\163\002\152\000\000\002\181\002~\000\000\000\000\000\000\000\000\000\000\004\001\000\000\000\000\000\000\000\000\002\156\002\163\002\152\000\000\002\164\000\000\002\184\000\000\000\000\000\000\000\000\002\154\002\190\000\000\001\143\002\166\001h\001i\000\000\000\000\002\164\000\000\002\184\002?\000\000\0023\000\242\000\000\002\190\000\000\001\143\002\166\000\000\000\000\000\000\002\192\001j\001z\000\000\001l\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\154\000\000\002\192\000\000\000\000\000\000\002\181\000\000\000\000\000\000\006\157\000\000\002?\000\000\0023\000\242\002\154\000\000\002\156\002\163\000\000\000\000\002<\002/\001i\000\000\000\000\000\000\002?\000\000\0023\000\242\001{\000\000\001|\002[\000\000\002}\002\164\000\000\003B\000\000\000\000\000\000\002\181\002~\002\190\000\000\001\143\002\166\000\000\004\015\000\000\000\000\000\000\000\000\002\156\002\163\002\152\000\000\002\181\000\000\000\000\001#\000\000\001\131\001$\000\000\000\000\002\192\000\000\000\000\002\156\002\163\000\000\000\000\002\164\001r\003B\000\000\000\242\002<\002/\001i\002\190\000\000\001\143\002\166\003\182\000\000\001&\000\000\002\164\000\000\002\184\005+\002}\000\000\000\000\000\000\002\190\000\000\001\143\002\166\002~\000\000\000\000\002\192\000\000\000\000\004A\000\000\000\000\000\000\000\000\000\000\000\000\002\152\000\000\000\000\000\000\002\154\000\000\002\192\000\000\000\000\000\000\002<\002/\001i\000\000\000\000\000\000\002?\000\000\0023\000\242\001.\000\000\000\000\000\000\001\133\002}\000\000\000\000\000\000\000\000\000\000\000\000\001\134\002~\001\143\001p\000\000\000\000\000\000\004\151\000\000\000\000\000\000\002<\002/\001i\002\152\000\000\002\181\000\000\001\020\000\000\000\000\000\000\000\000\000\000\001\027\001(\002}\000\000\002\156\002\163\000\000\002\154\000\000\000\000\002~\000\000\000\000\002<\002/\001i\005\206\005y\000\000\002?\000\000\0023\000\242\002\152\002\164\000\000\002\184\000\000\002}\000\000\000\000\000\000\002\190\000\000\001\143\002\166\002~\000\000\000\000\000\000\000\000\000\000\005\209\000\000\000\000\005z\000\000\005{\000\000\002\152\001B\002\181\000\000\002\154\000\000\002\192\000\000\001)\000\000\000\000\000\000\0050\000\000\002\156\002\163\002?\000\000\0023\000\242\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\002\164\0012\002\184\002\154\001L\000\000\000\000\000\000\002\190\000\000\001\143\002\166\000\000\000\000\002\181\002?\000\000\0023\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\156\002\163\000\000\002\154\005}\002\192\000\000\000\000\000\000\002<\002/\001i\000\000\005~\005\127\002?\005\128\0023\000\242\000\000\002\164\002\181\002\184\000\000\002}\000\000\000\000\000\000\002\190\000\000\001\143\002\166\002~\002\156\002\163\000\000\000\000\000\000\005\224\005\129\000\000\000\000\002<\002/\001i\002\152\000\000\002\181\000\000\000\000\000\000\002\192\000\000\002\164\000\000\002\184\000\000\002}\000\000\002\156\002\163\002\190\000\000\001\143\002\166\002~\000\000\005\130\002<\002/\001i\005\227\005\132\005\142\000\000\000\000\000\000\000\000\002\152\002\164\000\000\002\184\005\184\002}\002\192\000\000\000\000\002\190\000\000\001\143\002\166\002~\000\000\000\000\000\000\000\000\000\000\005\240\005\185\000\000\000\000\000\000\000\000\000\000\002\152\000\000\000\000\006l\002\154\000\000\002\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002?\000\000\0023\000\242\000\000\006m\000\000\000\000\006o\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006p\000\000\000\000\000\000\002\154\000\000\000\000\000\000\000\000\000\000\002<\002/\001i\000\000\000\000\002\181\002?\000\000\0023\000\242\000\000\000\000\000\000\000\000\000\000\002}\000\000\002\156\002\163\000\000\002\154\006q\000\000\002~\000\000\000\000\002<\002/\001i\005\243\000\000\000\000\002?\000\000\0023\000\242\002\152\002\164\002\181\002\184\000\000\002}\000\000\000\000\000\000\002\190\000\000\001\143\002\166\002~\002\156\002\163\000\000\000\000\000\000\006\b\000\000\006r\000\000\002<\002/\001i\002\152\000\000\002\181\000\000\006s\000\000\002\192\000\000\002\164\000\000\002\184\000\000\002}\000\000\002\156\002\163\002\190\000\000\001\143\002\166\002~\000\000\000\000\000\000\000\000\000\000\006\011\000\000\006t\000\000\000\000\000\000\001#\002\152\002\164\001$\002\184\002\154\000\000\002\192\000\000\000\000\002\190\006u\001\143\002\166\000\000\000\000\000\000\002?\000\000\0023\000\242\000\000\000\000\000\000\000\000\006v\000\000\001&\000\000\000\000\006x\002\154\000\000\002\192\000\000\000\000\000\000\004!\000\000\000\000\006z\000\000\000\000\002?\000\000\0023\000\242\000\000\000\000\002\181\000\000\000\000\000\000\006\193\000\000\000\000\006{\000\000\000\000\000\000\000\000\002\156\002\163\000\000\002\154\000\000\000\000\002<\002/\001i\000\000\002<\002/\001i\001.\002\181\002?\000\000\0023\000\242\000\000\002\164\002}\002\184\000\000\000\000\000\000\002\156\002\163\002\190\002~\001\143\002\166\000\000\003\135\000\000\006\015\000\000\000\000\000\000\000\000\000\000\000\000\002\152\001\020\000\000\000\000\002\164\002\181\002\184\001\027\001(\002\192\000\000\000\000\002\190\000\000\001\143\002\166\000\000\002\156\002\163\000\000\000\000\000\000\000\000\002<\002/\001i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\192\000\000\002\164\002}\002\184\000\000\000\000\000\000\000\000\000\000\002\190\002~\001\143\002\166\000\000\000\000\000\000\007\003\000\000\000\000\000\000\000\000\001B\000\000\002\152\000\000\000\000\000\000\002\154\001)\000\000\000\000\002>\002\192\002<\002/\001i\000\000\000\000\000\000\002?\000\000\0023\000\242\002?\000\000\0023\000\242\000\000\002}\000\000\000\000\000\000\000\000\000\000\000\000\0012\002~\000\000\004(\000\000\000\000\000\000\007\005\000\000\001#\000\000\000\000\001$\000\000\002\152\000\000\002\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\137\000\000\000\000\000\000\002\156\002\163\000\000\002\154\002\156\002\163\000\000\000\000\001&\000\000\000\000\000\000\000\000\000\000\000\000\002?\000\000\0023\000\242\000\000\002\164\000\000\002\184\000\000\002\164\000\000\000\000\005\157\002\190\000\000\001\143\002\166\002\165\000\000\001\143\002\166\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\181\000\000\002\154\000\000\002\192\002<\002/\001i\001.\000\000\000\000\000\000\002\156\002\163\002?\000\000\0023\000\242\000\000\000\000\002}\000\000\006\225\000\000\000\000\000\000\000\000\000\000\002~\000\000\000\000\000\000\002\164\000\000\002\184\000\000\000\000\000\000\001\020\000\000\002\190\002\152\001\143\002\166\001\027\001(\002\181\000\000\000\000\000\000\000\000\002<\002/\001i\000\000\000\000\000\000\000\000\002\156\002\163\000\000\000\000\000\000\002\192\000\000\000\000\002}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002~\000\000\000\000\000\000\002\164\000\000\002\184\000\000\000\000\000\000\000\000\000\000\002\190\002\152\001\143\002\166\005\164\005\165\000\000\000\000\001B\000\000\000\000\000\000\000\000\000\000\000\000\001)\000\000\000\000\002\154\005\166\005\182\000\000\000\000\002\192\005\174\004B\000\000\000\000\000\000\000\000\002?\000\000\0023\000\242\001h\001i\000\000\000\000\000\000\000\000\000\000\000\000\0012\000\000\000\000\001L\002<\002/\001i\000\000\002<\002/\001i\000\000\001j\002\254\000\000\001l\001m\000\000\000\000\002}\002\181\000\000\002\154\002}\000\000\000\000\000\000\002~\000\000\000\000\000\000\002~\002\156\002\163\002?\000\000\0023\000\242\000\000\000\000\002\152\002<\002/\001i\002\152\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\164\000\000\004e\000\000\002}\002<\002/\001i\002\190\000\000\001\143\002\166\002~\000\000\002\181\000\000\000\000\000\000\000\000\000\000\002}\000\000\000\000\000\000\000\000\002\152\002\156\002\163\002~\000\000\000\000\002\192\000\000\000\000\000\000\000\000\000\000\000\000\001q\000\000\000\000\002\152\000\000\000\000\000\000\000\000\002\164\000\000\004N\000\000\001r\002\154\000\000\000\242\002\190\002\154\001\143\002\166\001h\001i\000\000\000\000\000\000\002?\000\000\0023\000\242\002?\000\000\0023\000\242\000\000\000\000\000\000\000\000\000\000\000\000\002\192\001j\001\141\000\000\001l\001m\000\000\000\000\006_\000\000\000\000\002\154\000\000\002<\002/\001i\000\000\000\000\002\181\000\000\000\000\000\000\002\181\002?\000\000\0023\000\242\002\154\002}\000\000\002\156\002\163\000\000\000\000\002\156\002\163\002~\001\133\000\000\002?\000\000\0023\000\242\000\000\000\000\001\142\000\000\001\143\001p\002\152\002\164\000\000\003\241\000\000\002\164\002\181\003\139\000\000\002\190\006a\001\143\002\166\002\190\000\000\001\143\002\166\000\000\002\156\002\163\000\000\000\000\002\181\000\000\002<\002/\001i\000\000\000\000\000\000\001q\000\000\002\192\000\000\002\156\002\163\002\192\000\000\002\164\002}\0033\000\000\001r\000\000\000\000\000\242\002\190\002~\001\143\002\166\000\000\000\000\000\000\000\000\002\164\000\000\002\186\000\000\000\000\000\000\002\152\000\000\002\190\002\154\001\143\002\166\000\000\000\000\000\000\002\192\000\000\000\000\002<\002/\001i\002?\000\000\0023\000\242\002<\002/\001i\000\000\000\000\000\000\002\192\000\000\002}\000\000\000\000\000\000\000\000\000\000\000\000\002}\002~\000\000\000\000\000\000\000\000\000\000\000\000\002~\000\000\000\000\000\000\001\133\002\181\002\152\000\000\000\000\000\000\000\000\000\000\001\142\002\152\001\143\001p\000\000\002\156\002\163\000\000\000\000\002\154\000\000\002<\002/\001i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002?\000\000\0023\000\242\002\164\002}\002\188\000\000\000\000\000\000\000\000\000\000\002\190\002~\001\143\002\166\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\152\000\000\000\000\000\000\000\000\000\000\002\181\000\000\000\000\002\192\002\154\000\000\000\000\000\000\000\000\000\000\000\000\002\154\002\156\002\163\000\000\000\000\002?\000\000\0023\000\242\000\000\000\000\000\000\002?\000\000\0023\000\242\000\000\000\000\000\000\000\000\000\000\002\164\000\000\002\193\000\000\000\000\000\000\000\000\000\000\002\190\000\000\001\143\002\166\000\000\000\000\000\000\000\000\002\181\000\000\000\000\000\000\000\000\000\000\000\000\002\181\000\000\002\154\000\000\000\000\002\156\002\163\000\000\002\192\000\000\000\000\000\000\002\156\002\163\002?\000\000\0023\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\164\000\000\002\200\000\000\002<\002/\001i\002\164\002\190\002\202\001\143\002\166\000\000\000\000\000\000\002\190\000\000\001\143\002\166\002}\000\000\002\181\002<\002/\001i\000\000\000\000\002~\000\000\000\000\000\000\002\192\000\000\002\156\002\163\000\000\000\000\002}\002\192\000\000\002\152\000\000\000\000\000\000\000\000\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\164\000\000\002\204\000\000\000\000\002\152\000\000\000\000\002\190\000\000\001\143\002\166\000\000\000\000\000\000\000\000\000\000\000\000\002<\002/\001i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\192\000\000\002}\002<\002/\001i\000\000\000\000\000\000\000\000\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002}\002\154\002<\002/\001i\002\152\000\000\000\000\002~\000\000\000\000\000\000\000\000\002?\000\000\0023\000\242\002}\000\000\002\154\000\000\002\152\000\000\000\000\000\000\002~\000\000\000\000\000\000\000\000\000\000\002?\000\000\0023\000\242\000\000\000\000\000\000\002\152\000\000\000\000\000\000\000\000\000\000\000\000\002\181\000\000\000\000\000\000\000\000\002<\002/\001i\000\000\000\000\000\000\000\000\002\156\002\163\000\000\000\000\000\000\000\000\002\181\000\000\002}\000\000\000\000\002\154\000\000\000\000\000\000\000\000\002~\000\000\002\156\002\163\002\164\000\000\002\206\002?\000\000\0023\000\242\002\154\002\190\002\152\001\143\002\166\000\000\000\000\000\000\000\000\000\000\000\000\002\164\002?\002\208\0023\000\242\000\000\002\154\000\000\002\190\000\000\001\143\002\166\000\000\002\192\000\000\000\000\000\000\002\181\002?\000\000\0023\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\156\002\163\002\192\000\000\002\181\000\000\000\000\000\000\000\000\002<\002/\001i\000\000\000\000\000\000\000\000\002\156\002\163\000\000\000\000\002\164\002\181\002\210\000\000\002}\002\154\000\000\000\000\002\190\000\000\001\143\002\166\002~\002\156\002\163\000\000\002\164\002?\002\212\0023\000\242\000\000\000\000\000\000\002\190\002\152\001\143\002\166\000\000\000\000\000\000\002\192\000\000\002\164\000\000\002\214\002<\002/\001i\000\000\000\000\002\190\000\000\001\143\002\166\000\000\000\000\002\192\000\000\002\181\000\000\002}\000\000\000\000\002<\002/\001i\000\000\000\000\002~\000\000\002\156\002\163\000\000\002\192\000\000\000\000\001#\000\000\002}\001$\000\000\002\152\000\000\000\000\000\000\000\000\002~\000\000\000\000\000\000\002\164\000\000\002\216\000\000\000\000\000\000\000\000\002\154\002\190\002\152\001\143\002\166\000\000\001&\000\000\000\000\000\000\000\000\000\000\002?\000\000\0023\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\192\000\000\000\000\000\000\000\000\000\000\000\000\002<\002/\001i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\181\000\000\002}\002\154\000\000\002<\002/\001i\000\000\001.\002~\000\000\002\156\002\163\000\000\002?\000\000\0023\000\242\000\000\002}\002\154\000\000\002\152\000\000\000\000\000\000\000\000\002~\000\000\000\000\000\000\002\164\002?\002\218\0023\000\242\000\000\000\000\001\020\002\190\002\152\001\143\002\166\000\000\001\027\001(\002\181\000\000\000\000\000\000\000\000\002<\002/\001i\000\000\000\000\000\000\000\000\002\156\002\163\000\000\000\000\002\192\000\000\002\181\000\000\002}\000\000\000\000\002<\002/\001i\000\000\000\000\002~\000\000\002\156\002\163\002\164\000\000\002\220\000\000\000\000\000\000\002}\002\154\002\190\002\152\001\143\002\166\000\000\000\000\002~\000\000\001B\000\000\002\164\002?\002\222\0023\000\242\001)\000\000\002\154\002\190\002\152\001\143\002\166\000\000\002\192\000\000\000\000\000\000\000\000\000\000\002?\000\000\0023\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\192\0012\002\181\000\000\001C\000\000\000\000\002<\002/\001i\000\000\000\000\000\000\000\000\002\156\002\163\000\000\000\000\000\000\000\000\002\181\000\000\002}\002\154\000\000\002<\002/\001i\000\000\000\000\002~\000\000\002\156\002\163\002\164\002?\002\224\0023\000\242\000\000\002}\002\154\002\190\002\152\001\143\002\166\000\000\000\000\002~\000\000\000\000\000\000\002\164\002?\002\226\0023\000\242\000\000\000\000\000\000\002\190\002\152\001\143\002\166\000\000\002\192\000\000\002\181\000\000\000\000\000\000\000\000\002<\002/\001i\000\000\000\000\000\000\000\000\002\156\002\163\000\000\000\000\002\192\000\000\002\181\000\000\002}\000\000\000\000\002<\002/\001i\000\000\000\000\002~\000\000\002\156\002\163\002\164\000\000\002\228\000\000\000\000\000\000\002}\002\154\002\190\002\152\001\143\002\166\000\000\000\000\002~\000\000\000\000\000\000\002\164\002?\002\230\0023\000\242\000\000\000\000\002\154\002\190\002\152\001\143\002\166\000\000\002\192\000\000\000\000\000\000\000\000\000\000\002?\000\000\0023\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\192\000\000\002\181\000\000\000\000\000\000\000\000\002<\002/\001i\000\000\000\000\000\000\000\000\002\156\002\163\000\000\000\000\000\000\000\000\002\181\000\000\002}\002\154\000\000\002<\002/\001i\000\000\000\000\002~\000\000\002\156\002\163\002\164\002?\002\232\0023\000\242\000\000\002}\002\154\002\190\002\152\001\143\002\166\000\000\000\000\002~\000\000\000\000\000\000\002\164\002?\002\234\0023\000\242\000\000\000\000\000\000\002\190\002\152\001\143\002\166\000\000\002\192\000\000\002\181\000\000\000\000\000\000\000\000\002<\002/\001i\000\000\000\000\000\000\000\000\002\156\002\163\000\000\000\000\002\192\000\000\002\181\000\000\002}\000\000\000\000\002<\002/\001i\000\000\000\000\002~\000\000\002\156\002\163\002\164\000\000\002\236\000\000\000\000\000\000\002}\002\154\002\190\002\152\001\143\002\166\000\000\000\000\002~\000\000\000\000\000\000\002\164\002?\002\238\0023\000\242\000\000\000\000\002\154\002\190\002\152\001\143\002\166\000\000\002\192\000\000\000\000\000\000\000\000\000\000\002?\000\000\0023\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\192\000\000\002\181\000\000\000\000\000\000\000\000\002<\002/\001i\000\000\000\000\000\000\000\000\002\156\002\163\000\000\000\000\000\000\000\000\002\181\000\000\002}\002\154\000\000\002<\002/\001i\000\000\000\000\002~\000\000\002\156\002\163\002\164\002?\003V\0023\000\242\000\000\002}\002\154\002\190\002\152\001\143\002\166\000\000\000\000\002~\000\000\000\000\000\000\002\164\002?\003\\\0023\000\242\000\000\000\000\000\000\002\190\002\152\001\143\002\166\000\000\002\192\000\000\002\181\000\000\000\000\000\000\000\000\002<\002/\001i\000\000\000\000\000\000\000\000\002\156\002\163\000\000\000\000\002\192\000\000\002\181\000\000\002}\000\000\000\000\002<\002/\001i\000\000\000\000\002~\000\000\002\156\002\163\002\164\000\000\003b\000\000\000\000\000\000\002}\002\154\002\190\002\152\001\143\002\166\000\000\000\000\002~\000\000\000\000\000\000\002\164\002?\003h\0023\000\242\000\000\000\000\002\154\002\190\002\152\001\143\002\166\000\000\002\192\000\000\000\000\000\000\000\000\000\000\002?\000\000\0023\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\192\000\000\002\181\000\000\000\000\000\000\000\000\002<\002/\001i\000\000\000\000\000\000\000\000\002\156\002\163\000\000\000\000\000\000\000\000\002\181\000\000\002}\002\154\000\000\002<\002/\001i\000\000\000\000\002~\000\000\002\156\002\163\002\164\002?\003m\0023\000\242\000\000\002}\002\154\002\190\002\152\001\143\002\166\000\000\000\000\002~\000\000\000\000\000\000\002\164\002?\003r\0023\000\242\000\000\000\000\000\000\002\190\002\152\001\143\002\166\000\000\002\192\000\000\002\181\000\000\000\000\000\000\000\000\002<\002/\001i\000\000\000\000\000\000\000\000\002\156\002\163\000\000\000\000\002\192\000\000\002\181\000\000\002}\000\000\000\000\002<\002/\001i\000\000\000\000\002~\000\000\002\156\002\163\002\164\000\000\003y\000\000\000\000\000\000\002}\002\154\002\190\002\152\001\143\002\166\000\000\000\000\002~\000\000\000\000\000\000\002\164\002?\003~\0023\000\242\000\000\000\000\002\154\002\190\002\152\001\143\002\166\000\000\002\192\001#\000\000\000\000\001$\000\000\002?\000\000\0023\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\192\000\000\002\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001&\000\000\000\000\000\000\002\156\002\163\000\000\000\000\000\000\000\000\002\181\000\000\000\000\002\154\000\000\000\000\000\000\000\000\000\000\005\157\000\000\000\000\002\156\002\163\002\164\002?\003\131\0023\000\242\000\000\000\000\002\154\002\190\000\000\001\143\002\166\000\000\000\000\000\000\000\000\000\000\000\000\002\164\002?\003\134\0023\000\242\001.\000\000\000\000\002\190\000\000\001\143\002\166\000\000\002\192\000\000\002\181\000\000\000\000\000\000\005\160\000\000\000\000\000\000\001#\000\000\000\000\001$\002\156\002\163\000\000\000\000\002\192\000\000\002\181\000\000\001\020\001#\000\000\000\000\001$\000\000\001\027\001(\000\000\000\000\002\156\002\163\002\164\000\000\003\185\001&\000\000\000\000\000\000\000\000\002\190\000\000\001\143\002\166\000\000\000\000\000\000\000\000\001&\000\000\002\164\000\000\003\187\000\000\005\157\000\000\000\000\000\000\002\190\000\000\001\143\002\166\000\000\002\192\000\000\000\000\000\000\005\157\000\000\000\000\000\000\000\000\005\164\005\165\000\000\000\000\001B\000\000\000\000\000\000\000\000\002\192\001.\001)\000\000\000\000\000\000\005\166\005\182\000\000\000\000\000\000\005\174\004B\000\000\001.\006\227\001#\000\000\001#\001$\000\000\001$\000\000\000\000\000\000\000\000\000\000\000\000\006\241\0012\000\000\001\020\001L\000\000\002<\002/\001i\001\027\001(\000\000\000\000\000\000\000\000\001&\001\020\001&\000\000\000\000\000\000\000\000\001\027\001(\000\000\000\000\000\000\004!\000\000\003\217\000\000\000\000\000\000\000\000\005\157\000\000\003\226\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\005\164\005\165\000\000\000\000\001B\000\000\003\238\001.\000\000\001.\000\000\001)\000\000\005\164\005\165\005\166\005\182\001B\000\000\000\000\005\174\004B\000\000\000\000\001)\000\000\000\000\000\000\005\166\005\182\000\000\000\000\000\000\005\174\004B\000\000\000\000\001\020\0012\001\020\000\000\001L\000\000\001\027\001(\001\027\001(\002\241\001i\000\000\002>\0012\000\000\000\000\001L\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\230\000\000\0023\000\242\001\006\003\020\001z\000\000\001l\001m\000\000\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<\002/\001i\000\000\005\164\005\165\000\000\000\000\001B\000\000\001B\000\000\000\000\000\000\003\220\001)\000\000\001)\000\000\006\223\006\224\002\156\002\163\003\217\005\174\004B\003\025\003)\003*\000\000\003\226\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\164\0012\000\000\0012\001L\000\000\004(\000\000\002\165\000\000\001\143\002\166\002\241\001i\003\227\000\000\000\000\000\000\000\000\001\131\000\000\000\000\000\000\000\000\000\000\002\241\001i\000\000\000\000\000\000\000\000\001r\003\020\001z\000\242\001l\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\020\001z\000\000\001l\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002>\000\000\000\000\000\000\002\241\001i\003-\003.\000\000\000\000\000\000\000\000\003\230\000\000\0023\000\242\001\006\000\000\003\025\003)\003*\000\000\000\000\000\000\003\020\001z\000\000\001l\001m\000\000\000\000\003\025\003)\003*\000\000\000\000\000\000\001\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\134\000\000\001\143\001p\003\220\000\000\000\000\001\131\000\000\000\000\000\000\002\156\002\163\001h\001i\000\000\000\000\000\000\000\000\001r\001\131\000\000\000\242\003\025\003)\003*\000\000\000\000\000\000\000\000\000\000\002\164\001r\001j\001z\000\242\001l\001m\000\000\002\165\000\000\001\143\002\166\000\000\000\000\000\000\000\000\001h\001i\000\000\000\000\000\000\003-\004G\000\000\000\000\000\000\001\131\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003-\006\026\001j\001z\001r\001l\001m\000\242\000\000\000\000\000\000\000\000\001\188\001{\000\000\001|\001\147\001#\001\133\000\000\001$\000\000\000\000\000\000\000\000\000\000\001\134\000\000\001\143\001p\000\000\001\133\000\000\001h\001i\000\000\000\000\003-\006<\001\134\000m\001\143\001p\000\000\001&\000\000\001\131\001{\000\000\001|\001\176\000\000\000\000\001j\001z\000\000\001l\001m\001r\000\000\000\000\000\242\000\000\001\173\000\000\000\000\000\000\000\000\001\133\000\000\000\000\000\000\000\000\001h\001i\000\000\001\134\000\000\001\143\001p\001\131\000\000\000\000\000\000\000\000\000\000\000\000\001h\001i\000\000\000\000\001.\001r\001j\001z\000\242\001l\001m\001{\000\000\001|\001\176\000\000\001\178\000\000\000\000\000\000\001j\001z\000\000\001l\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\020\001\133\000\000\001h\001i\000\000\001\027\001(\000\000\001\134\001\131\001\143\001p\000\000\000\000\000\000\000\000\001{\000\000\001|\001\176\000\000\001r\001j\001z\000\242\001l\001m\000\000\000\000\000\000\001{\000\000\001|\002[\001\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\134\000\000\001\143\001p\000\000\000\000\000\000\001\131\000\000\000\000\000\000\000\000\000\000\001B\001h\001i\000\000\000\000\000\000\001r\001)\001\131\000\242\002\250\001\\\001{\000\000\001|\002c\000\000\000\000\002\253\000\000\001r\001j\002\254\000\242\001l\001m\000\000\000\000\000\000\000\000\001\133\003\178\000\000\000\000\0012\001h\001i\001L\001\134\000\000\001\143\001p\001h\001i\000\000\001\131\000\000\000\000\000\000\000\000\000\000\001h\001i\000\000\000\000\001j\001z\001r\001l\001m\000\242\000\000\001j\001z\000\000\001l\001m\000\000\000\000\000\000\001\133\001j\001z\000\000\001l\001m\000\000\000\000\001\134\000\000\001\143\001p\000\000\000\000\001\133\000\000\000\000\002f\000\000\000\000\000\000\000\000\001\134\000\000\001\143\001p\000\000\000\000\000\000\001q\001{\000\000\001|\002[\000\000\000\000\000\000\001{\000\000\001|\007B\001r\007D\000\000\000\242\000\000\001{\000\000\001|\006\145\000\000\001\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\134\000\000\001\143\001p\001\131\000\000\000\000\000\000\000\000\000\000\000\000\001\131\000\000\000\000\000\000\000\000\001r\002\255\000\000\000\242\001\131\000\000\000\000\001r\000\000\000\000\000\242\003\181\000\000\000\000\000\000\000\000\001r\000\000\000\000\000\242\000\000\000\000\000\000\000\000\000\000\003\000\000\000\001h\001i\000\000\001\133\000\000\001h\001i\000\000\000\000\000\000\000\000\001\142\000\000\001\143\001p\000\000\000\000\000\000\001h\001i\001j\001z\000\000\001l\001m\001j\001z\000\000\001l\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\133\001j\001z\000\000\001l\001m\000\000\001\133\001\134\000\000\001\143\001p\000\000\000\000\000\000\001\134\001\133\001\143\001p\001h\001i\000\000\000\000\000\000\001\134\000\000\001\143\001p\001{\000\000\001|\001\180\000\000\001{\000\000\001|\001\168\000\000\000\000\001j\001z\000\000\001l\001m\000\000\000\000\001{\000\000\001|\001\165\000\000\001h\001i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\131\000\000\000\000\000\000\000\000\001\131\000\000\000\000\000\000\000\000\001j\001z\001r\001l\001m\000\242\000\000\001r\001\131\000\000\000\242\000\000\000\000\001{\000\000\001|\001~\000\000\001h\001i\001r\000\000\000\000\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001h\001i\000\000\000\000\000\000\001h\001i\001j\001z\000\000\001l\001m\000\000\000\000\001{\001\131\001|\001\129\000\000\000\000\001j\001z\000\000\001l\001m\001j\001z\001r\001l\001m\000\242\000\000\000\000\000\000\000\000\001\133\000\000\000\000\000\000\000\000\001\133\000\000\000\000\001\134\000\000\001\143\001p\001\131\001\134\000\000\001\143\001p\001{\001\133\001|\001\132\000\000\001h\001i\001r\000\000\001\134\000\242\001\143\001p\001{\000\000\001|\001\164\000\000\001{\000\000\001|\001\152\000\000\000\000\000\000\001j\001z\000\000\001l\001m\000\000\000\000\000\000\001\131\000\000\000\000\000\000\000\000\000\000\001\133\000\000\000\000\000\000\000\000\000\000\001r\001\131\001\134\000\242\001\143\001p\001\131\000\000\000\000\002<\002/\001i\000\000\001r\000\000\000\000\000\242\000\000\001r\000\000\000\000\000\242\000\000\000\000\000\000\001{\001\133\001|\001\160\000\000\001h\001i\003\135\000\000\001\134\000\000\001\143\001p\000\000\001h\001i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001j\001z\000\000\001l\001m\000\000\003\136\000\000\001\131\001j\001z\000\000\001l\001m\001\133\000\000\000\000\000\000\000\000\000\000\001r\000\000\001\134\000\242\001\143\001p\000\000\001\133\000\000\000\000\000\000\000\000\001\133\000\000\000\000\001\134\000\000\001\143\001p\000\000\001\134\000\000\001\143\001p\000\000\001{\000\000\001|\002s\000\000\000\000\000\000\000\000\000\000\001{\000\000\001|\003\030\002>\001h\001i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\016\000\000\002?\000\000\0023\000\242\000\000\000\000\003\019\000\000\001\131\001j\002\254\000\000\001l\001m\001\133\000\000\000\000\001\131\001h\001i\001r\000\000\001\134\000\242\001\143\001p\002<\002/\001i\001r\000\000\000\000\000\242\000\000\000\000\000\000\003\138\000\000\001j\001z\000\000\001l\001m\000\000\002\156\002\163\001h\001i\000\000\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\164\000\000\001j\001z\000\000\001l\001m\000\000\002\165\000\000\001\143\002\166\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001{\001\133\001|\003!\001q\000\000\000\000\000\000\000\000\001\134\001\133\001\143\001p\000\000\001h\001i\001r\000\000\001\134\000\242\001\143\001p\000\000\000\000\000\000\000\000\000\000\000\000\001{\000\000\001|\003$\000\000\001\131\001j\001z\000\000\001l\001m\000\000\000\000\000\000\002>\001h\001i\001r\000\000\000\000\000\242\000\000\000\000\002\255\000\000\000\000\002?\000\000\0023\000\242\000\000\001#\000\000\001\131\001$\001j\001z\001M\001l\001m\000\000\001#\000\000\000\000\001$\001r\000\000\001M\000\242\000\000\000\000\001{\001\133\001|\003,\000\000\000\000\001O\001&\000\000\001\142\000\000\001\143\001p\002<\002/\001i\001O\001&\002\178\002\156\002\163\000\000\005+\000\000\000\000\000\000\000\000\000\000\000\000\001{\001\133\001|\004\149\001\131\000\000\000\000\003\135\000\000\001\134\002\164\001\143\001p\000\000\000\000\000\000\001r\000\000\002\165\000\242\001\143\002\166\000\000\000\000\000\000\001.\000\000\000\000\000\000\001\133\000\000\006-\000\000\001\131\000\000\001.\000\000\001\134\000\000\001\143\001p\000\000\001<\000\000\000\000\001r\000\000\000\000\000\242\000\000\001#\000\000\001<\001$\000\000\001\020\0016\000\000\001h\001i\000\000\001\027\001(\000\000\000\000\001\020\000\000\000\000\000\000\000\000\000\000\001\027\001(\000\000\000\000\004M\001;\001&\001j\002\254\001\133\001l\001m\002>\001h\001i\000\000\000\000\001\134\000\000\001\143\001p\000\000\000\000\000\000\002?\000\000\0023\000\242\000\000\000\000\000\000\000\000\000\000\001j\002\254\000\000\001l\001m\001\133\000\000\001B\000\000\000\000\001h\001i\000\000\001\134\001)\001\143\001p\001B\001J\000\000\001.\000\000\000\000\000\000\001)\000\000\000\000\003\138\005a\000\000\001j\002\254\000\000\001l\001m\002\156\002\163\001<\000\000\000\000\000\000\0012\000\000\000\000\001L\000\000\000\000\000\000\001h\001i\001\020\0012\001q\000\000\001L\002\164\001\027\001(\000\000\000\000\000\000\001h\001i\002\165\001r\001\143\002\166\000\242\001j\002\254\000\000\001l\001m\000\000\000\000\000\000\000\000\000\000\001q\000\000\000\000\001j\002\254\000\000\001l\001m\000\000\000\000\000\000\000\000\001r\000\000\000\000\000\242\000\000\000\000\000\000\000\000\000\000\002\255\000\000\000\000\000\000\000\000\000\000\000\000\001B\000\000\001q\000\000\001h\001i\000\000\001)\000\000\000\000\000\000\001J\000\000\000\000\001r\000\000\000\000\000\242\000\000\003\166\000\000\005\244\001\133\000\000\001j\002\254\000\000\001l\001m\000\000\001\142\000\000\001\143\001p\0012\000\000\000\000\001L\000\000\000\000\001q\000\000\003\169\000\000\000\000\000\000\001h\001i\001\133\003\166\000\000\000\000\001r\001q\000\000\000\242\001\142\000\000\001\143\001p\001h\001i\000\000\006\012\000\000\001r\001j\002\254\000\242\001l\001m\000\000\003\168\000\000\001h\001i\000\000\000\000\001\133\000\000\001j\002\254\000\000\001l\001m\000\000\001\142\003\166\001\143\001p\000\000\000\000\000\000\000\000\001j\002\254\000\000\001l\001m\000\000\003\166\000\000\001q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\167\000\000\001h\001i\001r\000\000\001\133\000\242\000\000\000\000\000\000\000\000\000\000\003\171\001\142\000\000\001\143\001p\001#\001\133\000\000\001$\001j\002\254\000\000\001l\001m\001\142\000\000\001\143\001p\000\000\000\000\000\000\001q\000\000\000\000\000\000\000\000\002\255\000\000\000\000\000\000\000\000\000\000\001&\001r\000\000\001q\000\242\000\000\000\000\000\000\000\000\000\000\004\164\000\000\000\000\000\000\000\000\001r\000\000\001q\000\242\001h\001i\000\000\000\000\001\133\000\000\000\000\000\000\006\254\000\000\001r\000\000\001\142\000\242\001\143\001p\000\000\002\255\000\000\000\000\001j\002\254\000\000\001l\001m\000\000\000\000\000\000\001.\000\000\000\000\006'\000\000\000\000\000\000\000\000\001q\000\000\000\000\002<\002/\001i\000\000\000\000\000\000\006'\001\133\000\000\001r\000\000\000\000\000\242\000\000\000\000\001\142\000\000\001\143\001p\001\020\000\000\001\133\000\000\004S\000\000\001\027\001(\000\000\000\000\001\142\000\000\001\143\001p\000\000\000\000\001\133\000\000\002<\002/\001i\000\000\000\000\0064\001\142\006_\001\143\001p\000\000\000\000\000\000\000\000\000\000\000\000\002<\002/\001i\0063\000\000\000\000\001q\003\233\000\000\000\000\000\000\000\000\000\000\000\000\001#\000\000\000\000\001$\001r\000\000\001\133\000\242\001B\002=\002<\002/\001i\000\000\001\142\001)\001\143\001p\000\000\004\173\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001&\006`\000\000\001h\001i\002>\002x\000\000\002<\002/\001i\000\000\006_\000\000\000\000\0012\000\000\002?\001L\0023\000\242\000\000\000\000\001j\002\254\000\000\001l\001m\000\000\000\000\000\000\002z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\133\002>\000\000\000\000\000\000\000\000\001.\000\000\001\142\000\000\001\143\001p\000\000\002?\000\000\0023\000\242\002>\000\000\000\000\002\156\002\163\006h\000\000\000\000\000\000\000\000\000\000\000\000\002?\000\000\0023\000\242\000\000\000\000\000\000\001\020\000\000\000\000\000\000\002\164\002>\001\027\001(\002<\002/\001i\000\000\002\165\000\000\001\143\002\166\000\000\002?\000\000\0023\000\242\002\156\002\163\000\000\001q\002<\002/\001i\000\000\000\000\002>\002\144\002<\002/\001i\000\000\001r\002\156\002\163\000\242\000\000\002\164\002?\000\000\0023\000\242\000\000\000\000\002\155\002\165\000\000\001\143\002\166\000\000\000\000\002\162\001B\002\164\000\000\000\000\000\000\002\156\002\163\001)\000\000\002\165\000\000\001\143\002\166\000\000\000\000\003\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\164\000\000\000\000\000\000\000\000\002\156\002\163\000\000\002\165\0012\001\143\002\166\001\231\000\000\000\000\000\000\000\000\000\000\000\000\001\133\000\000\000\000\000\000\000\000\000\000\002\164\002>\001\142\000\000\001\143\001p\000\000\000\000\002\165\001#\001\143\002\166\001$\002?\000\000\0023\000\242\000\000\002>\002<\002/\001i\000\000\000\000\000\000\002>\002<\002/\001i\000\000\002?\000\000\0023\000\242\000\000\000\000\001&\002?\000\000\0023\000\242\000\000\002\169\002<\002/\001i\004\164\000\000\000\000\002\191\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\156\002\163\000\000\000\000\000\000\000\000\004\167\000\000\000\000\003O\000\000\000\000\000\000\000\000\000\000\000\000\001#\002\156\002\163\001$\002\164\000\000\000\000\000\000\002\156\002\163\001.\000\000\002\165\000\000\001\143\002\166\000\000\000\000\000\000\000\000\000\000\002\164\000\000\000\000\000\000\000\000\000\000\001&\002\164\002\165\000\000\001\143\002\166\000\000\000\000\000\000\002\165\004\164\001\143\002\166\001\020\000\000\000\000\000\000\000\000\002>\001\027\001(\000\000\000\000\000\000\000\000\002>\000\000\005 \000\000\000\000\002?\000\000\0023\000\242\000\000\000\000\000\000\002?\000\000\0023\000\242\001#\002>\000\000\001$\000\000\000\000\001.\000\000\000\000\000\000\000\000\000\000\000\000\002?\000\000\0023\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001&\001B\000\000\000\000\000\000\000\000\002\156\002\163\001)\001\020\004\164\000\000\004\173\002\156\002\163\001\027\001(\000\000\000\000\001#\000\000\000\000\001$\000\000\000\000\000\000\002\164\005\241\000\000\000\000\002\156\002\163\000\000\002\164\002\165\0012\001\143\002\166\001L\000\000\000\000\002\165\000\000\001\143\002\166\000\000\001&\001.\000\000\000\000\002\164\001#\000\000\000\000\001$\000\000\004\164\000\000\002\165\000\000\001\143\002\166\000\000\000\000\000\000\001B\000\000\000\000\000\000\000\000\000\000\000\000\001)\005\255\000\000\000\000\004\173\001\020\001&\000\000\000\000\000\000\000\000\001\027\001(\000\000\000\000\000\000\004\164\000\000\000\000\006l\000\000\001.\000\000\000\000\000\000\000\000\006l\0012\000\000\000\000\001L\000\000\000\000\006\t\007`\000\000\000\000\007a\000\000\000\000\006o\007`\000\000\000\000\007a\000\000\000\000\006o\000\000\006p\000\000\001\020\000\000\001.\000\000\000\000\006p\001\027\001(\000\000\000\000\001B\000\000\006l\000\000\000\000\000\000\000\000\001)\000\000\000\000\000\000\004\173\000\000\000\000\000\000\000\000\000\000\007`\000\000\006q\007a\000\000\001\020\006o\000\000\000\000\006q\001#\001\027\001(\001$\000\000\006p\000\000\0012\000\000\000\000\001L\000\000\000\000\000\000\000\000\001#\000\000\000\000\001$\001B\000\000\000\000\000\000\000\000\000\000\006l\001)\001&\006r\006\208\004\173\000\000\000\000\000\000\000\000\006r\006q\006s\000\000\000\000\007`\000\000\001&\007a\006s\000\000\006o\000\000\000\000\000\000\000\000\001B\003\t\0012\000\000\006p\001L\007c\001)\000\000\000\000\000\000\004\173\000\000\007b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006r\000\000\001.\000\000\006u\000\000\000\000\000\000\000\000\006s\000\000\006u\000\000\0012\006q\000\000\001L\001.\006v\000\000\000\000\001h\001i\006x\000\000\006v\000\000\000\000\000\000\007f\006x\000\000\001\020\006z\000\000\000\000\000\000\000\000\001\027\001(\006z\001j\002\247\000\000\001l\001m\000\000\001\020\006u\006{\006r\000\000\000\000\001\027\001(\001#\006{\000\000\001$\006s\000\000\000\000\006v\000\000\000\000\001#\000\000\006x\001$\000\000\000\000\000\000\000\000\001#\000\000\000\000\001$\006z\000\000\007k\000\000\000\000\001&\000\000\000\000\000\000\000\000\000\000\001B\000\000\000\000\000\000\001&\006{\000\000\001)\000\000\006\"\006u\006\215\001&\000\000\000\000\001B\000\000\000\000\000\000\000\000\000\000\000\000\001)\000\000\006v\000\000\002\135\000\000\000\000\006x\000\000\001q\000\000\000\000\0012\000\000\006l\001L\000\000\006z\000\000\001.\000\000\001r\000\000\000\000\000\242\000\000\000\000\0012\000\000\001.\001L\000\000\006m\006{\000\000\006o\000\000\001.\000\000\006l\000\000\000\000\000\000\000\000\006p\000\000\000\000\000\000\000\000\001\020\000\000\001#\000\000\000\000\001$\001\027\001(\006m\000\000\001\020\006o\001#\000\000\000\000\001$\001\027\001(\001\020\000\000\006p\000\000\000\000\000\000\001\027\001(\006q\001#\000\000\001&\001$\000\000\000\000\000\000\000\000\000\000\001\133\000\000\000\000\001&\000\000\000\000\000\000\000\000\001\142\000\000\001\143\001p\000\000\000\000\000\000\006q\000\000\000\000\001&\000\000\001B\000\000\000\000\000\000\000\000\000\000\006r\001)\000\000\000\000\001B\005=\000\000\000\000\005@\006s\007&\001)\001B\000\000\001.\0050\000\000\000\000\000\000\001)\000\000\000\000\000\000\005=\001.\006r\006P\000\000\0012\001#\000\000\001L\001$\006\127\006s\000\000\000\000\000\000\0012\001.\000\000\001L\000\000\000\000\001\020\000\000\0012\000\000\006u\001L\001\027\001(\000\000\000\000\001\020\000\000\001&\000\000\006\136\000\000\001\027\001(\006v\000\000\000\000\000\000\000\000\006x\001#\001\020\000\000\001$\000\000\006u\000\000\001\027\001(\006z\000\000\000\000\000\000\001#\000\000\000\000\001$\000\000\000\000\006v\000\000\000\000\000\000\000\000\006x\006{\000\000\001&\000\000\000\000\000\000\000\000\001B\001#\006z\001.\001$\000\000\000\000\001)\001&\000\000\001B\007'\000\000\000\000\000\000\000\000\000\000\001)\006{\000\000\000\000\001\155\000\000\001#\000\000\001B\001$\000\000\001&\000\000\000\000\000\000\001)\001\020\0012\000\000\001\196\001L\000\000\001\027\001(\000\000\001.\001#\0012\000\000\001$\001L\000\000\000\000\001&\000\000\000\000\000\000\000\000\001.\000\000\000\000\000\000\0012\000\000\000\000\001L\001#\000\000\000\000\001$\000\000\000\000\000\000\001&\000\000\001\020\000\000\000\000\001.\000\000\000\000\001\027\001(\000\000\001#\000\000\000\000\001$\001\020\000\000\000\000\000\000\001B\001&\001\027\001(\000\000\000\000\001#\001)\001.\001$\000\000\001\236\000\000\000\000\000\000\000\000\001\020\000\000\000\000\001&\000\000\000\000\001\027\001(\000\000\000\000\000\000\000\000\001.\000\000\000\000\000\000\000\000\001&\0012\000\000\000\000\001L\001\020\001B\000\000\000\000\000\000\000\000\001\027\001(\001)\000\000\001.\000\000\001\238\000\000\001B\000\000\000\000\000\000\000\000\000\000\001\020\001)\000\000\000\000\000\000\002R\001\027\001(\001.\000\000\001#\000\000\000\000\001$\001B\0012\000\000\000\000\001L\000\000\001\020\001)\001.\000\000\000\000\002e\001\027\001(\0012\000\000\001#\001L\000\000\001$\000\000\000\000\001B\001&\001\020\000\000\000\000\000\000\000\000\001)\001\027\001(\000\000\002\132\0012\000\000\001#\001L\001\020\001$\000\000\000\000\001B\001&\001\027\001(\000\000\000\000\001#\001)\000\000\001$\000\000\002\137\000\000\000\000\0012\000\000\001#\001L\000\000\001$\001B\001&\000\000\000\000\000\000\000\000\001#\001)\001.\001$\000\000\003\006\000\000\001&\0012\000\000\000\000\001L\001B\000\000\000\000\000\000\000\000\001&\000\000\001)\000\000\000\000\001.\003\r\000\000\000\000\001B\001&\0012\000\000\000\000\001L\001\020\001)\000\000\000\000\000\000\003\022\001\027\001(\000\000\000\000\001.\000\000\001#\000\000\0012\001$\000\000\001L\000\000\000\000\001\020\000\000\001.\000\000\000\000\000\000\001\027\001(\0012\000\000\001#\001L\001.\001$\000\000\000\000\000\000\000\000\000\000\001&\001\020\000\000\001.\000\000\000\000\000\000\001\027\001(\000\000\000\000\001#\000\000\001\020\001$\000\000\000\000\001B\001&\001\027\001(\000\000\000\000\001\020\001)\000\000\000\000\000\000\004\166\001\027\001(\001#\000\000\001\020\001$\000\000\000\000\001B\001&\001\027\001(\000\000\000\000\001#\001)\000\000\001$\001.\005\t\000\000\000\000\0012\000\000\000\000\001L\000\000\000\000\001B\001&\000\000\000\000\000\000\000\000\000\000\001)\001.\000\000\000\000\005\021\001B\001&\0012\000\000\000\000\001L\000\000\001)\001\020\000\000\001B\005/\000\000\000\000\001\027\001(\001.\001)\000\000\000\000\001B\005?\0012\000\000\000\000\001L\001\020\001)\000\000\000\000\000\000\005\220\001\027\001(\0012\000\000\001.\001L\001#\000\000\001#\001$\000\000\001$\0012\000\000\001\020\001L\001.\000\000\000\000\000\000\001\027\001(\0012\000\000\000\000\001L\000\000\000\000\000\000\000\000\000\000\000\000\001B\001&\001\020\001&\000\000\000\000\000\000\001)\001\027\001(\000\000\005\238\000\000\000\000\001\020\000\000\000\000\000\000\001B\000\000\001\027\001(\000\000\000\000\000\000\001)\000\000\000\000\000\000\006\006\000\000\000\000\000\000\000\000\0012\000\000\000\000\001L\001B\000\000\000\000\000\000\000\000\000\000\000\000\001)\000\000\000\000\001.\006\148\001.\000\000\0012\000\000\000\000\001L\000\000\000\000\001B\000\000\000\000\000\000\000\000\000\000\000\000\001)\000\000\000\000\000\000\006\214\001B\000\000\0012\000\000\000\000\001L\000\000\001)\001\020\000\000\001\020\006\218\000\000\000\000\001\027\001(\001\027\001(\000\000\000\000\000\000\000\000\0012\000\000\000\000\001L\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0012\000\000\000\000\001L\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001B\000\000\001B\000\000\000\000\000\000\000\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\0012\000\000\0012\001\233\000\000\004#")) + ((16, "\001\244\001\161\000\166\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\168\000\000\000\000\0011\002 \000)\001M\001/\000\019\000\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\247\000\000\000\000\000\000\000\000\000\000\000\177\000\000\000\000\000\000\000\163\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000.\026\000\000\000\000\000\000\000\151\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\238\000a\000\000\000;\001\t\001\012\000\000\000\000\000\000\000\221\012\188\000-\000\145\0000\000\000\000\000\000\000\000:\000\000\000\000\001\244\000\000\000\000\000\000\000\000\002X\000\000\001Z\000\000\000\000\000\000\000\000\000\000\000\006\000\000\000\146\002\218\b\212\000\000\000\000\011\166\002\238\000\000\000\000\n\166\000\000\003\002\000\000\021x\002\154\003N\000\000\000\000\001\148\001 \001\222\002v\001\222\002\218\002\198\000\153\004\138\000,\001\206\002\000\011\228\000\000\000\000\003\164\018\218\000\000\003^\000\000\004\006\003\152\000\000>ZT\198\000\219\000\000\000\221\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000>\200\0030\000\000\000\000\000\000$\238\011\204\000\000CV\000\000\000\000\003V\020.\000\000\000\000\000\000\000\000\000\000\000\000\0038\000\000\000\000\001\240\b\170\000\000>\158\001\240\001\162\000\000\000\000\000\000@\020\000\000J\220\001\240\001\240\001\240\000\000\000\000\003\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000T\240\000\000\002\220\004f\000\000\023\170\003VK\168\000\000\000\000\003r\000\000\000\000\000\000\0038\000\000\000\000\000\000?:\000\000\000\000\000\000\000\000\000\000\000\000\000?\004d\000\000\000\000\000\000\0038\024\254\000\000\0038\026R\0038\000\000\000\000?\150\000\000\000\000\0052\000\000\000\000\000\000\000\000F\234\003\232\003\246\003\238U6\000\000\000\000\000\000\000\000\027\166\0038\000\000U\200\000\000\000\000\000\000\028\250\0038\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000?\200\000\000\004\162\004\150\005D\000\000\000\000\000\000\000\000\004\252\000\000\000\000\005v\001\246\005\136\006\198\bj\000\000\000\000\000\000\005\030\0058\006\000\004\018\000\000\000\000\004\190\006\210@Z\005x\007&\003\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000I\230\r2\005\150\007T\r~\t\166F\234\016\210\000\000@\200\"j\000\000\000\000\000\000\030N\0038\000\000VF\000\000\000\000\000\000\031\162\0038\000\000\000\000A.Ax\000\000\000\199\000\000\000\000\000\000\000\000\006b \246\0038\006vVT\005\190\007\164'\180\000\000\002\168\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\019\000\000\000\000\000\000\000\000\007\bV\216\000\000\000\000f\198\000\000W\\\000\000\000\000\000\000B\246\0038\000\000\000\000n\156\000\000\000\000\000\000\000\000\005\202\007\168Wj\002r\000\000\000\000o\016\000\000W\224\000\000\000\000\005\170\000\000\000\000\000\000W\238\000\000\000\000\000\000`l\0038\000\000\000\000o\026\000\000\000\000\005\170Xr\000\000\005\170X\246?\200\006\204\006\208\000\000\000\000oL\000\000\000\000\000\000\000\000\005\170\000\000\000\000Y\004\000\000\000\000\000\000\000\000`\202\0038\000\000\000\000ol\000\000\000\000\005\170a\030\000\000\0038\000\000\000\000Yz\000\000\005\170\000\142\000\000\000\000\005\170\005\170\000\000\005\170\000\000\000\000\005\170\000\000\000\000Ax\000\000\000\000\000\000\000\000\005\170A\250\000\000\000\000\005\170\000\000\001\208\006\234\000\000\000\000\000\000\000\000\000\000\000\000\000\000o\234\000\000\000\000\000\000\006\020Y\136\000\000\005\170\000\000\000\000\000\000\000\000Z\012\000\000\000\000\000\000af\0038\000\000\000\000p\028\000\000\000\000\006\020\000\000Z\154\000\000\000\000\000\000a\142\0038\000\000\000\000p(\000\000\000\000\006\020p8\000\000[\020\000\000\000\000\000\000a\234\0038\000\000\000\000p~\000\000\000\000\006\020Z&\000\000\006\150\000\000bL\0038\000\000\000\000\000\000\000\000\006\218\007\128\r\134\006\208\007\016\0076\007\174\004\206\007\202\000\015\000q\000\000\000\000\004\254\000q\000\000\007\222\001\228\007|\0050\007|\005B\000\000\002x\006\182\005D\004\216\b\240\000\000\000\000i\012\000\000i`\b\148\000\000b`\0038b\168\0038\000\000\000\028\005\222\000\000\006 \002x\000\000\000\000\007\208\000\000\000\000\000\000\000\000\000\000\000\000\006\236\002x\006\238\002x\000\000\000<\000\000\000\000\000T\000\000\000\000\000\000\tV\000\000\000\000\002x\002x\000\000\000\000\002x\000\000\007|\006\186\000\000\001l\004\190\000\000\001l\000\000\000\000\007B\002x\000\000\000\000\000\000\000\000\000\000\000\000\001l\014\006\"\192\t\"\t\006Bj\007\140\000\000\000\000\002\142\000\000\000\000\000\000\004&\000\000\000\000\000\000\bL\b\012\014\254\b\154\b2i\168i\224\000\000\000\000\000\000\000\000\004&\n<\000\000\000\000\000\000\t$\b\146\007\016\001l\b8\000\000\002x\000\000\000\000\000\000\"j\000\000c\030\0038\015~j6\000\000jV\000\000\000\000#\020\t(\b\204\015\134\t4\b\240#\228BH\005\170\015\210\t~\t\0043\022\n\136\000\000B\146\005\170cF\0038\nh\000\000\000\000\000\000\000\000?\200\nT\000\000\000\000p\136\000\000\000\000(<\000\000\000\000\n\132M~\001\240\000\000\016~\t\212\t($b\000\000C\022\000\000\000\000\011:\000\000\000\000\000\000j\162\000\000\000\000\000\000\005\212\017R\t\220\t:[\138\005\170\017\210\t\228\t\nF*\022\000\000\n\158I \011\140\nH*f\000\000\n\158Ir\011\198\nT*\226\000\000\n\158J\028\011\252\nX+T\000\000\n\158J$\012\000\n^+\208\000\000\n\158Jn\012\002\nt, \000\000\n\158K\024\012\014\n\134,n\000\000\n\158K \012\022\n\148,\190\000\000\n\158L\012\0122\n\230-\012\000\000\n\158L\020\012<\n\234-\\\000\000\n\158L\190\012H\n\248-\216\000\000\n\158M\b\000\000\000\000\r\178\000\000\000\000\000\000l\130\000\000\012T\011..J\000\000\n\158M\016\012V\011>.\198\000\000\n\158\011B.\248M\180\019z\000\000_H\r\006\000\000cr\0038\019\250\000\000\000\000\012\130\000\000c\188\0038\020z\000\000\000\000\020\206\000\000\000\000\005h\000\000\000\000\021N\000\000\000\000\000\000\000\000c\226\0038\022\"\000\000\006\020\022\162\000\000[\216\000\000\000\000\000\000\000\000dX\0038\000\000\000\000p\186\000\000\000\000\006\020[\166\000\000\005\170\n\006\000\000\000\000\000\000\003\174\005\028\000\000\000\000\000\000\n\158\n\158/\164\000\000\000\000\000\000\000\000M\188\012b\011P/p\000\000\n\1580t\000\000\000\000\000\000N<\012n\011R/\220\000\000\n\1581\030\000\000\000\000\000\000N\176\012p\011^0\168\000\000\n\158\006\130\022\246\000\000\000\000\000\000O4\012z\011d1R\000\000\n\158\023v\000\000\000\000\000\000O\180\012\130\011f2$\000\000\n\158\023\246\000\000\000\000\000\000O\188\012\156\011h2\152\000\000\n\158\000\000\000\0002\206\000\000\000\000\000\000PB\012\170\011t3\002\000\000\n\1583\216\000\000\000\000\000\000P\176\012\180\011v4<\000\000\n\1584\172\000\000\000\000\000\000Q4\012\184\011\1505\000\000\000\n\158\000\000Q\128\012\206\011\1545P\000\000\n\158\000\000dD\000\000\000\000\n\158\012\216\000\000\000\000\024J\000\000\024\202\000\000\000\000\000\000\000\000\000\000\025J\000\000\000\000\025\158\000\000\000\000\000\000\000\0005\252\000\000\000\0006$\000\000\000\0006\146\000\000\000\000\000\000\r*\011\1667\002\000\000\n\158\000\000\000\000\026\030\000\000\026\158\000\000\000\000\000\000\000\000\000\000Q\228\r>\011\1807\152\000\000R0\rJ\011\1868\n\000\000\n\158\n\158R\148\r^\011\1928T\000\000\n\158\000\000\000\0008\162\000\000\000\0008\216\000\000\000\000R\224\000\000\000\000\014\206\000\000\000\000\000\000l\216\000\000\r\158\011\2309F\000\000\n\158\000\000\006\020\026\242\000\000\000\000\027r\000\000S\164\000\000\000\000i\224\000\000\000\000\000\0009\182\000\000\000\000\000\000\000\000:h\000\000\000\000\000\000\000\000\014\228\000\000\000\000\000\000\022J\000\000\003(\000\000\006\186\014\142\000\000\004\238\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\r\254\011\250:\186\000\000\n\158\000\000\015X\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\006\b\152\001l\027\242\000\000\0144\012T\014\214\005V\t\132\001l\011\140\000\000\002x\t\220\001l\000\000\028F\000\000\006f\000\000\014V\012\132\tx\000\000\000\000\000\000\000\000\000\000\014v\021\214\003\006\000\000\000\000\000\000>t\000\000l\150\000\000\012\136\000\000\012\144\000\000\000\000\000\000\000\000\004\240\000\000\000\000\000\000T\000\001\240\000\000\001\240\b\016\000\000= \000\000V\184\001\240\001\240\000\000W<\001\240\001\240\012\154\000\000\028\198\000\000\000\000\012\160\015b\000\000:N\006l\000\000\000\000\000\000\000\000\000\000\000\000\014\130\012\166;,\000\000\n\158\000\000\000\000\000\000\000\000\000\000\014\136\012\172\t\238\001l\000\000\r\b\000\000\002x\000\000\015\254\000\000\000\000\000\000\000\000\000\000;\248\000\000\000\000\000\000\000\000\014\164\012\178<4\000\000\000\000\000\000\014\200\000\000\002x\000\000\022h\000\000\002x\000\000\"x\002x\000\000\n\158\000\000\000\000$:\000\000\002x\000\000%\166\000\000\002x\000\000&\234\002x\000\000\002\232\000\000\012\184\t\252\005\210\000\000\014\168\014\170\012\204\014\218\015\138/\018\002x\bN\000\000\012\210\015j\015x\b\136\bv\015X\012\216\015\152\b\146\t\024\015d\000\000\000\000\b\234\tt\000\000\006\240\003\162\\(\005\170\029F\000\000\007\028\001\162\015\030\012\220\n \007R\000\000\015$\012\228\011<\000\000]\146\000\000d\200\0038\000\000\015\216\015\224\000\000\n\014\000\000\0038\015H\r\004\t\238\015n\000\146\000\000\000\000\000\000\000\000\r\b\n~\000\000\r\014\011:\000\000\t(`\018\015~\015\134\r\018\000\164\011v\000\000\r&\001x\011\188\000\000\015\136\015\140\rL\015\202\015\1380T\002x\000\000\rv\016T\000\000\005\024\000\000\011\202\000\000\016^\000\0003\254\002\224\0160\rz\016p\000\0006\238\006\"\016<\000\000\000\000\000|\004\252\000\000\012\212\000\0008n\002x\012\246\000\000\003\202\000\000\000\000\015\218\r\134;\182\006\230\000\000\015\244\r\138\n\006\015n\015\246\015\252\r\142\017z\000\000\016\012\003\130\000\000\000\000\000\000\000\000\000k\r\152\015\224e8\0038\000\000\003,\r\158\016\174\000\000\000\000\000\000\000\000\000\000\000\000ed\007\138\000\000\r\184\017\006\000\000\000\000\000\000\000\000\000\000\000\000]\186\r(\000\000\r\192\000\015\000\000\r\198\r\200\006r\000\000\002\186K:\000\000\003\240\000\000e\140\0038\0038\000\000\000\000\b*\000\000\b0\000\000\002\202\b*\b*\000\000\r\230_\174\0038e\202\0038\r<\000\000\000\000\000\000\000\000\r\168\000\000\000\000\004\242\000\000\b>\016l\r\236\017\138\0166\000\000\000\000\003\218\bn\016\142\000\000\000\000\r\246\017\176\016B\000\000\000\000\015\178\000\000\021\002\000\0005\168S\212\0038\000\000G\156!\202\000\000M\252\000\000\000\000\000\000\b*\000\000\000\000\r\238\016\152\014\b\017\184\016N\000\000\000\000]\020\014\016\016\168\000\000\000\000\000\000l\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\022\000\000\016\184\0142\006\210\000\000\017\182\017f\014\030\016\190\000\000\000\000\016\194\0144\007\246\000\000\000\000\nPT\198\005\234\000\000\000\000\000\000\n*\016v\0148\000\000\016\128\n*\000\000\017v\014&\016\208\000\000\000\000\000\000\0038\001\154\005\248\007\006\000\000\000\000\000\000\000\000\016\134\014D\000\000\007\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0038\016l\014F\017\238\016\128\000\000\016\004\001\001\014L\016P\006\170\003\184\014N\017\030\000\000\017\224\029\154\000\000\000\000\030\026\000\000\014\152\000\000\005v\000\000\000\000\000\000\000\000\000\000\000\000f*\0038\000\000\017\228\030\154\000\000\000\000\030\238\000\000\003\252\014R\017\128\000\000\000\000\\\188^>\0172\000\000f>\0038\031n\000\000\000\000\031\238\000\000\000\000\014\188\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000^\226\000\000\000\000\\\198_\n\0174\000\000f\136\0038 B\000\000\000\000 \194\000\000\000\000\014T!B\014\212\000\000\014f\014h\000\233\000\141\014l\007\\\014t\017\140\006}\003X\bc\000\228\005\130\007\233\007\236\007\249\007\235\000\213\000\231\b\195\001\198\000\228\006X\001\023\b\160\007\236\005\240\000\213\000\231\001\231\bo\001\200\001\179\b\250\001s\002\210\001w\001w\001x\001s\003m\007\238\001w\001\153\000\221\000\200\003}\000\222\007\237\002\148\001\006\007\239\b\001\002\209\001\172\004Y\006\173\006\190\002\222\007\237\002\210\001w\007\172\b\147\006\173\005\141\005\143\005\145\000\177\006\174\001\007\000\232\b\214\006\175\000\203\007\253\001!\006\174\b\202\000\233\005=\006\180\000\234\007\238\001\019\000\235\000\236\b\128\003}\000\233\007\254\006\193\000\234\007\239\007\238\000\235\000\236\000\220\001\021\001\020\002\222\002\148\002\210\001w\007\239\002\192\0039\003@\007\242\006\195\b\215\000\240\0060\007\244\000\255\001w\000\213\007\253\006l\000\224\003\130\bk\0008\003\131\002\180\004[\007\246\001y\007\240\000\206\003A\006\196\007\254\007P\000\227\000\213\000\216\001\003\001\012\003\145\000\206\001\200\003C\007\241\007\247\000\239\000\213\000\216\0039\003@\007\242\000\228\001\002\005\239\007q\007\244\002\193\000\213\000\231\001w\001\020\007\242\003\130\003\147\001;\003\131\007\244\007s\007\246\002\219\002\206\001\172\003A\007\232\001\020\002\219\002\206\001\172\001\015\007\246\006j\003\145\005A\001\200\003C\001&\007\247\b\252\b\253\0008\003R\b\255\004\196\b\203\007\235\001\200\0014\007\247\003X\000\152\006\173\002\129\002\142\007\236\t\001\003\147\002{\002{\001:\001\020\002\180\000\232\b^\006\174\000\206\004\197\007U\006\206\002\180\000\233\000\213\000\216\000\234\0046\006\169\000\235\000\236\001\024\002\194\003m\b$\007\232\002{\002\219\002\206\001\172\t\016\007\237\004Y\002\184\001\020\002{\002\193\001\020\001V\001w\t\b\002\195\003R\t\t\002\193\000\240\007\235\001w\000\255\001s\003X\005\130\001w\001\153\0060\007\236\t\017\001w\002}\002}\001s\b\011\002\176\001w\001\153\002\221\007\238\006d\002\149\002\149\001w\003}\002\153\002\153\000\213\000\213\007\239\002\222\006\197\002\210\001w\003m\006R\002\222\002}\002\210\001w\002\172\000\213\007\237\002\130\0047\b|\002}\002\149\001U\002~\t\004\002\153\001Y\000\213\005=\004Z\002\149\005\144\005\143\005\145\002\153\002\194\000\213\000\189\005q\006\193\000\206\001\020\007\254\002\194\004\199\007Y\000\213\000\231\002\154\002\154\004Y\007\238\0039\003@\002\155\002\155\003}\006\195\0039\003@\007\242\007\239\bW\007\025\001\200\007\244\002\156\002\156\002\222\002\191\002\210\001w\003\130\002{\002\154\003\131\003A\001_\007\246\006\196\002\155\t\021\003A\002\154\005\241\003B\001a\001\200\003C\002\155\004Y\003\145\002\156\001\200\003C\002\167\007\247\001h\002\145\005t\007\254\002\156\004\218\005\130\003\155\001w\001\153\007\232\002\149\002\219\002\206\001\172\002\153\0046\000\213\003\147\0039\003@\007\242\000\152\005\244\007\003\002\142\007\244\003R\007\233\b\007\004Y\007\235\001p\003\130\002}\003X\003\131\002\147\007\200\007\246\007\236\007\249\b}\003A\002\149\002\168\004\229\001\127\002\153\001i\000\213\001\160\003\145\0008\001\200\003C\001\020\007\247\002 \007\018\005\143\005\145\b\230\006^\002\154\001\020\003m\001\163\007\232\002\030\002\219\002\206\001\172\001\202\007\237\0008\003\147\005u\002{\002{\007 \007!\001\213\t\b\006\164\003R\t\t\001w\002\180\007\235\005>\004Y\004\157\003X\b\231\001w\001\153\002\154\007\236\t\012\005\172\007)\002\192\002\155\002\149\007*\005\166\0008\002\153\007\238\000\213\002\219\002\206\001\172\003}\002\156\001\236\002\181\001\235\007\239\002\193\002{\002$\001w\003m\001\020\002\222\007\206\002\210\001w\007\213\002\180\007\237\004\189\005:\0022\002}\002}\005t\002\158\002\160\005B\002\148\007\253\002c\004Y\002\149\002\149\005\130\000\206\002\153\002\153\000\213\000\213\001n\000\213\000\231\002\154\007\254\007\172\002\231\006q\007\209\002\193\002\191\007\209\001w\007\238\000\152\005N\007\r\002\142\003}\004Y\0039\003@\007\242\007\239\002h\002}\007\211\007\244\002\188\007\211\002\222\000\221\002\210\001w\003\130\002\149\005\174\003\131\002\194\002\153\007\246\000\213\001q\t\015\003A\002\154\002\154\007&\005\143\005\145\005\167\002\155\002\155\003\145\007\212\001\200\003C\007\212\007\247\002\221\005\146\006\026\007\254\002\156\002\156\001\128\007\232\005\152\002\219\002\206\001\172\005F\005\130\002\210\001w\001\153\001\020\003\147\0039\003@\007\242\002\194\005a\003R\007\233\007\244\002\148\007\235\002\154\006\146\002{\003X\003\130\006\015\002\155\003\131\007\236\b\003\007\246\004Y\001s\002m\003A\001w\001x\001\164\002\156\001\203\000\221\004Y\002n\003\145\005=\001\200\003C\006\021\007\247\004Y\001\020\0039\003@\000\227\003m\002\171\002p\007.\005\143\005\145\002\135\000\221\007\237\007\165\000\222\004Y\002x\003\147\000\248\004Y\000\228\002\137\002\192\001\020\b%\003A\000\213\000\231\001s\007\147\002}\001w\001x\002\234\003B\006\178\001\200\003C\001w\002\214\002\149\002\152\b\156\006\245\002\153\001s\000\213\007\238\001w\001x\000\239\006\182\003}\000\221\007\167\002\180\000\222\007\239\002\217\007\209\007\025\006\199\002\170\001\020\002\222\001\020\002\210\001w\001\020\005\253\007\168\006\246\0077\006\247\005Z\007\170\007\165\007\211\006\002\007\174\000\227\b\006\001\020\006\007\005c\006\207\000\224\002\193\000\233\006\003\001w\000\234\001\020\002\154\000\235\000\236\007\254\000\228\005\158\002\155\004Y\000\227\b\137\000\213\000\231\007\212\002\230\006\248\002\219\002\206\001\172\002\156\0039\003@\007\242\001\020\005V\007\167\000\228\007\244\005\161\007\160\002\213\003R\000\213\000\231\003\130\006\012\000\224\003\131\006\176\003X\007\246\007\168\001\020\002\251\003A\005\197\007\170\005t\006\176\006\249\007\171\000\227\005t\003\145\004Y\001\200\003C\000\206\007\247\006\250\006\251\002\254\006\252\000\213\000\231\004V\001\172\002\194\000\228\002\216\003m\003\004\006\176\000\233\000\213\000\231\000\234\003\147\006\b\000\235\000\236\002\180\007 \007!\001s\0078\000\232\001w\001x\003!\001\020\002\219\002\206\001\172\000\233\005\130\005t\000\234\0032\0037\000\235\000\236\007\"\0072\003U\000\254\003R\007*\005\166\000\221\005k\000n\000\222\002\193\003X\007\165\001w\006\254\003}\001\020\005(\003i\007\000\007\n\006\r\002\180\000\240\003y\000\232\000\255\002\222\004Y\002\210\001w\002\180\0074\000\233\001\020\002\229\000\234\002\250\002\180\000\235\000\236\0079\003m\002\253\001\020\b\132\005\143\005\145\003\135\000\221\0075\005p\bq\007\167\002\193\007\025\002\180\001w\000\221\003\127\005\191\000\222\001\020\002\193\003\141\000\240\001w\005\243\000\255\007\168\002\193\001\020\001\020\001w\007\170\0039\003@\001\020\007\181\003\150\003\003\000\224\002\194\000n\004Y\006\025\005~\005\166\002\193\003\130\003}\001w\003\131\003\015\001\020\003\012\000\227\007\028\006(\003A\001\020\003\018\002\222\003\161\002\210\001w\003\167\007\025\003\145\007\155\001\200\003C\001w\000\228\003\029\003\173\003\179\006\030\001\172\000\213\000\231\003\185\003\191\003 \001\020\003'\002\194\0031\003\197\003\203\003\209\0036\003\147\000\224\003\127\002\194\003\215\003:\003\221\000\227\001\020\003\227\002\194\003Q\000\221\006-\005\166\000\222\000\227\b\139\0039\003@\003\233\003H\0065\001\020\000\228\006u\005\166\003T\002\194\003\239\000\213\000\231\003\130\000\228\003\\\003\131\003\245\007 \007!\000\213\000\231\000\232\003A\007\022\005\166\000\221\004Y\001\020\000\222\000\233\001\020\003\145\000\234\001\200\003C\000\235\000\236\007\"\0072\001\020\001\020\007\025\007*\005\166\000\221\001\020\001\020\000\225\002\219\002\206\001\172\002{\001\020\001\020\001\020\003\147\004Y\003\251\003h\004\001\001\020\000\240\001\020\003R\000\255\001\020\004\007\000\224\003r\007 \007!\003X\000\233\000\232\007\025\000\234\001\020\b>\000\235\000\236\003x\000\233\000\227\b\153\000\234\001\020\004\\\000\235\000\236\007\"\0072\004Y\001\020\004\021\007*\005\166\0068\003\144\004Y\000\228\000\224\004\027\003m\004\031\bt\000\213\000\231\bI\005\166\002}\004g\004q\005n\000\240\003\134\000\227\000\255\004{\003\140\002\149\004\134\004\144\004\154\002\153\007\179\000\213\006@\001w\004\166\004\176\003\149\003\160\000\228\001\020\000\227\001\020\003\166\003\172\000\213\000\231\001s\003\178\001\020\001w\001x\004\186\003\184\004\193\003\190\003\196\003}\000\228\003\202\004\232\006\245\007 \007!\000\213\000\231\000\232\004\248\006D\002\222\004\253\002\210\001w\005\004\000\233\006S\001\020\000\234\007\165\002\154\000\235\000\236\007\"\0072\001\020\002\155\001\020\007*\005\166\006\246\b\161\006\247\005\026\001\020\001\020\007 \007!\002\156\003\208\000\232\001\020\003\127\005S\001\020\001\020\001\020\000\240\000\233\005b\000\255\000\234\001\020\001\020\000\235\000\236\b\135\b\136\0039\003@\007\167\007*\005\166\002\219\002\206\001\172\006\248\000\233\003\214\001\020\000\234\001\020\003\130\000\235\000\236\003\131\007\168\001\020\003R\004Y\000\240\007\170\003A\000\255\001\020\007\199\003X\001\020\005h\002{\001\020\003\145\005\205\001\200\003C\003\220\004Y\003\226\003\232\000\240\006\249\002\219\002\206\001\172\003\238\002\219\002\206\001\172\003\244\001\020\006\250\006\251\005x\006\252\005\137\003\147\003R\003m\005\139\001\020\003R\004Y\003\250\005\163\003X\001\020\005\168\004\000\003X\005\180\005\202\004Y\005\190\004\006\005\173\005\210\0078\004\014\005\242\004\020\004\026\001s\004%\004,\001w\001x\004f\002}\005\248\006e\005\195\005\255\004p\004z\006\005\003m\006\024\002\149\004\133\003m\006\029\002\153\004\143\000\213\001\020\003}\006i\006\245\006\254\002\219\002\206\001\172\007\165\007\000\007\n\004\153\006,\002\222\0064\002\210\001w\0067\004\165\006>\003R\004Y\0074\004\175\001\020\004\185\001\020\006\157\003X\006B\001\020\006\246\b\180\006\247\005`\001\020\004\192\006\189\001\020\003}\0075\001\020\004\204\003}\001\020\003\127\002\154\001\020\006H\007\167\001\020\002\222\002\155\002\210\001w\002\222\004Y\002\210\001w\003m\001\020\0039\003@\001\020\002\156\007\168\001\020\006\248\001\020\006N\007\170\006Z\001\020\004Y\007\218\003\130\004Y\006o\003\131\006t\004Y\006y\004\231\003\127\004Y\003A\006\131\003\127\001\020\006\137\001\020\006\194\004\247\001\020\003\145\001\020\001\200\003C\004\252\0039\003@\006\249\006\148\0039\003@\001\020\006\159\003}\005\003\006\177\006\163\006\250\006\251\003\130\006\252\005\019\003\131\003\130\003\147\002\222\003\131\002\210\001w\003A\001\020\006\184\006\234\003A\006\201\002\219\002\206\001\172\003\145\006\211\001\200\003C\003\145\0078\001\200\003C\005\025\004Y\006\236\006\242\003R\001\020\006\255\001\020\0056\002{\007\007\003\127\003X\001\020\007\030\001\020\003\147\001\020\005K\004Y\003\147\005?\001\020\007\002\007\012\001\020\007\024\0039\003@\006\254\b\182\004Y\007,\007<\007\000\007\n\007B\007F\001\020\007b\007\138\003\130\001\020\003m\003\131\001\020\001\020\0074\005R\007\198\007\143\003A\007\182\002\219\002\206\001\172\007\148\002\219\002\206\001\172\003\145\001\020\001\200\003C\001\020\0075\005X\002}\003R\001\020\005\216\007O\003R\004Y\007\178\005g\003X\002\149\001\020\005i\003X\002\153\005\029\000\213\003\147\007\154\004\244\000\221\007\162\007r\006\222\003}\005w\004Y\005\162\002\219\002\206\001\172\005\170\001\020\001\020\007\140\001\020\002\222\007\203\002\210\001w\003m\001\020\001\020\003R\003m\001\020\001\020\005\179\001\020\001\020\005\189\003X\004Y\004Y\001\171\001\172\004Y\004\236\001\020\001\020\005\200\001\020\007\224\002\154\005\209\001\020\005\254\005\247\003\127\002\155\004Y\b,\005\249\004Y\001\173\003\022\007\151\001\175\001\176\005\252\004Y\002\156\003m\001\020\0039\003@\006\011\b;\003}\004Y\004Y\004Y\003}\006\001\001\020\006\224\007\185\001\020\003\130\bL\002\222\003\131\002\210\001w\002\222\006\n\002\210\001w\003A\006\006\000\227\006\t\004Y\001\020\002\219\002\206\001\172\003\145\bX\001\200\003C\bf\007\197\007\201\bh\006\023\007\205\000\228\006\028\003R\003}\006'\003\127\000\213\006\227\006&\003\127\003X\001\020\000\221\007\210\003\147\002\222\007\222\002\210\001w\006+\001\020\0039\003@\007\229\0066\0039\003@\004Y\001\180\002\219\002\206\001\172\007\243\007\250\b\004\003\130\001\020\004Y\003\131\003\130\001\181\003m\003\131\001w\003R\003A\006A\003\127\001\020\003A\006=\006M\003X\006G\003\145\b]\001\200\003C\003\145\004Y\001\200\003C\005\184\0039\003@\006I\004Y\001\020\000\233\004Y\001\020\006\228\004Y\001\020\000\235\000\236\006a\003\130\003\147\007\219\003\131\006U\003\147\003m\006\174\006`\006\233\003A\006\230\003}\006[\006_\006n\002\219\002\206\001\172\003\145\b\141\001\200\003C\000\240\002\222\000\227\002\210\001w\006s\006\210\b\155\003R\006x\006{\006\127\001\198\006\135\006\142\006\153\003X\006\209\006\202\000\228\003\147\001\199\004\210\001\200\001\179\000\213\000\231\000\221\bj\b\167\000\222\003}\006\203\003\127\006\208\007\221\t\002\006\212\006\213\t\r\006\244\006\237\t\018\002\222\006\238\002\210\001w\003m\006\243\0039\003@\007\t\007\005\007\006\007\b\0073\007\023\002\219\002\206\001\172\007\027\007\029\007\031\0049\007+\007;\003\131\004\235\007=\007>\007C\007G\003R\003A\007K\003\127\007]\007d\007h\007\128\003X\007\149\003\145\007\173\001\200\003C\004\201\000\233\007\183\007\231\000\234\0039\003@\000\235\000\236\003}\007\225\007\226\b\206\002\219\002\206\001\172\000\224\007\230\007\245\b+\003\147\002\222\004^\002\210\001w\003m\b4\b:\003R\003A\bG\000\227\b[\bk\b\\\b`\003X\b\140\003\145\b\144\001\200\003C\003\129\b\154\b\158\b\244\000\000\000\000\000\228\000\000\000\000\000\000\000\000\003\127\000\213\000\231\000\000\000\000\000\000\000\000\000\000\000\000\003\147\000\000\000\000\000\000\000\000\003m\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\003\130\000\000\002\222\003\131\002\210\001w\000\000\000\000\000\000\003R\003A\000\000\000\000\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\003\157\000\000\000\232\000\000\000\000\000\221\000\000\000\000\000\222\003}\000\233\003\127\000\000\000\234\000\000\000\000\000\235\000\236\b\207\000\000\003\147\002\222\000\000\002\210\001w\003m\000\000\0039\003@\000\000\000\000\000\000\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\003\130\000\240\000\000\003\131\000\255\000\000\000\000\000\000\000\000\003R\003A\000\000\003\127\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\003\156\000\000\000\000\000\000\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\002\219\002\206\001\172\000\224\000\000\000\000\003\130\003\147\002\222\003\131\002\210\001w\003m\000\000\000\000\003R\003A\000\000\000\227\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\004\"\000\000\000\000\000\000\000\000\000\000\000\228\000\000\000\000\000\000\000\000\003\127\000\213\000\231\000\000\000\000\000\000\000\000\000\000\000\000\003\147\000\000\000\000\000\000\000\000\003m\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\003\130\000\000\002\222\003\131\002\210\001w\000\000\000\000\000\000\003R\003A\000\000\000\000\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\004)\000\000\000\232\000\000\000\000\000\221\000\000\000\000\000\222\003}\000\233\003\127\000\000\000\234\000\000\000\000\000\235\000\236\001(\000\000\003\147\002\222\000\000\002\210\001w\003m\000\000\0039\003@\000\000\000\000\000\000\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\003\130\000\240\000\000\003\131\000\255\000\000\000\000\000\000\000\000\003R\003A\000\000\003\127\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\0040\000\000\000\000\000\000\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\002\219\002\206\001\172\000\224\000\000\000\000\003\130\003\147\002\222\003\131\002\210\001w\003m\000\000\000\000\003R\003A\000\000\000\227\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\0043\000\000\000\000\000\000\000\000\000\221\000\228\000\000\006\218\000\000\000\000\003\127\000\213\000\231\000\000\000\000\000\000\000\000\000\000\000\000\003\147\000\000\000\000\000\000\000\000\003m\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\003\130\000\000\002\222\003\131\002\210\001w\000\000\000\000\000\000\003R\003A\000\000\000\000\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\000\221\000\000\000\232\000\222\000\000\000\000\000\000\000\000\000\000\003}\000\233\003\127\000\000\000\234\000\000\000\000\000\235\000\236\000\237\000\000\003\147\002\222\000\000\002\210\001w\003m\000\000\0039\003@\000\000\000\000\000\227\000\000\000\000\000\000\000\000\005\133\000\000\000\000\000\000\000\000\003\130\000\240\000\000\003\131\000\255\000\000\000\221\000\228\000\000\000\000\003A\000\000\003\127\000\213\000\231\be\000\000\000\000\000\000\003\145\000\000\001\200\003C\000\000\000\000\000\000\000\000\000\000\0039\003@\000\000\000\000\003}\000\000\000\224\005\146\002\219\002\206\001\172\000\000\000\000\000\000\003\130\003\147\002\222\003\131\002\210\001w\000\000\000\227\000\000\003R\003A\000\000\000\000\000\000\002\219\002\206\001\172\003X\000\000\003\145\000\000\001\200\003C\004@\000\228\000\000\000\000\000\000\000\000\000\000\000\213\000\231\000\000\000\233\003\127\000\000\000\234\005:\000\000\000\235\000\236\000\000\000\000\003\147\005B\000\000\000\000\000\000\003m\000\000\0039\003@\000\000\000\000\000\227\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\0049\000\240\000\000\003\131\004:\000\000\000\000\000\228\005C\003R\003A\000\000\002{\000\213\000\231\000\000\000\000\003X\000\000\003\145\000\232\001\200\003C\004C\000\000\000\000\000\000\000\000\000\233\000\000\000\000\000\234\003}\000\000\000\235\000\236\002\219\002\206\001\172\000\000\000\000\000\000\000\000\003\147\002\222\000\000\002\210\001w\003m\000\000\000\000\003R\002\221\000\000\000\000\000\000\000\000\000\000\000\000\003X\000\240\000\000\000\000\005\140\005F\004\128\002\210\001w\001\153\000\000\002}\000\000\000\000\005\220\000\000\000\233\003\127\000\000\000\234\000\000\002\149\000\235\000\236\000\000\002\153\005\149\000\213\000\000\000\000\000\000\003m\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\005=\003\130\005\150\002\222\003\131\002\210\001w\0039\003@\000\000\003R\003A\000\000\000\000\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\004\138\000\000\000\000\000\000\002\154\000\221\000\000\003A\000\222\003}\002\155\003\127\000\000\000\000\000\000\000\000\003B\000\000\001\200\003C\003\147\002\222\002\156\002\210\001w\003m\000\000\0039\003@\000\000\000\000\000\000\000\000\000\000\000\000\002\219\002\206\001\172\000\000\001\016\000\000\003\130\000\000\000\000\003\131\000\000\000\000\000\000\000\000\000\000\003R\003A\000\000\003\127\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\004\148\000\000\000\000\000\000\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\002\219\002\206\001\172\000\224\000\000\000\000\003\130\003\147\002\222\003\131\002\210\001w\003m\000\000\000\000\003R\003A\000\000\000\227\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\004\205\000\000\000\000\000\000\000\000\000\000\000\228\000\000\000\000\000\000\000\000\003\127\000\213\000\231\000\000\000\000\000\000\000\000\000\000\000\000\003\147\000\000\000\000\000\000\000\000\003m\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\003\130\000\000\002\222\003\131\002\210\001w\000\000\000\000\000\000\003R\003A\000\000\000\000\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\004\207\000\000\000\232\000\000\000\000\000\221\000\000\000\000\000\222\003}\000\233\003\127\000\000\000\234\000\000\000\000\000\235\000\236\000\000\000\000\003\147\002\222\000\000\002\210\001w\003m\000\000\0039\003@\000\000\000\000\000\000\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\003\130\000\240\000\000\003\131\001\022\000\000\000\000\000\000\000\000\003R\003A\000\000\003\127\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\004\213\000\000\000\000\000\000\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\002\219\002\206\001\172\000\224\000\000\000\000\003\130\003\147\002\222\003\131\002\210\001w\003m\000\000\000\000\003R\003A\000\000\000\227\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\004\216\000\000\000\000\000\000\000\000\000\000\000\228\000\000\000\000\000\000\000\000\003\127\000\213\000\231\000\000\000\000\000\000\000\000\000\000\000\000\003\147\000\000\000\000\000\000\000\000\003m\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\003\130\000\000\002\222\003\131\002\210\001w\000\000\000\000\000\000\003R\003A\000\000\000\000\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\004\238\000\000\000\232\000\000\000\000\000\221\000\000\000\000\000\222\003}\000\233\003\127\000\000\000\234\000\000\000\000\000\235\000\236\001+\000\000\003\147\002\222\000\000\002\210\001w\003m\000\000\0039\003@\000\000\000\000\000\000\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\003\130\000\240\000\000\003\131\000\255\000\000\000\000\000\000\000\000\003R\003A\000\000\003\127\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\004\241\000\000\000\000\000\000\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\002\219\002\206\001\172\000\224\000\000\000\000\003\130\003\147\002\222\003\131\002\210\001w\003m\000\000\000\000\003R\003A\000\000\000\227\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\005 \000\000\000\000\000\000\000\000\000\000\000\228\000\000\000\000\000\000\000\000\003\127\000\213\000\231\000\000\000\000\000\000\000\000\000\000\000\000\003\147\000\000\000\000\000\000\000\000\003m\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\003\130\000\000\002\222\003\131\002\210\001w\000\000\000\000\000\000\003R\003A\000\000\000\000\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\005#\000\000\000\232\000\000\000\000\000\221\000\000\000\000\000\222\003}\000\233\003\127\000\000\000\234\000\000\000\000\000\235\000\236\001-\000\000\003\147\002\222\000\000\002\210\001w\003m\000\000\0039\003@\000\000\000\000\000\000\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\003\130\000\240\000\000\003\131\000\255\000\000\000\000\000\000\000\000\003R\003A\000\000\003\127\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\005e\000\000\000\000\000\000\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\002\219\002\206\001\172\000\224\000\000\000\000\003\130\003\147\002\222\003\131\002\210\001w\003m\000\000\000\000\003R\003A\000\000\000\227\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\005s\000\000\000\000\000\000\000\000\000\000\000\228\000\000\000\000\000\000\000\000\003\127\000\213\000\231\000\000\000\000\000\000\000\000\000\000\000\000\003\147\000\000\000\000\000\000\000\000\003m\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\003\130\000\000\002\222\003\131\002\210\001w\000\000\000\000\000\000\003R\003A\000\000\000\000\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\005\165\000\000\000\232\000\000\000\000\000\221\000\000\000\000\000\222\003}\000\233\003\127\000\000\000\234\000\000\000\000\000\235\000\236\001B\000\000\003\147\002\222\000\000\002\210\001w\003m\000\000\0039\003@\000\000\000\000\000\000\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\003\130\000\240\000\000\003\131\000\255\000\000\000\000\000\000\000\000\003R\003A\000\000\003\127\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\006\019\000\000\000\000\000\000\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\002\219\002\206\001\172\000\224\000\000\000\000\003\130\003\147\002\222\003\131\002\210\001w\003m\000\000\000\000\003R\003A\000\000\000\227\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\007J\000\000\000\000\000\000\000\000\000\000\000\228\000\000\000\000\000\000\000\000\003\127\000\213\000\231\000\000\000\000\000\000\000\000\000\000\000\000\003\147\000\000\000\000\000\000\000\000\003m\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\003\130\000\000\002\222\003\131\002\210\001w\000\000\000\000\000\000\003R\003A\000\000\000\000\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\007M\000\000\000\232\000\000\000\000\000\221\000\000\000\000\000\222\003}\000\233\003\127\000\000\000\234\000\000\000\000\000\235\000\236\001I\000\000\003\147\002\222\000\000\002\210\001w\003m\000\000\0039\003@\000\000\000\000\000\000\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\003\130\000\240\000\000\003\131\000\255\000\000\000\000\000\000\000\000\003R\003A\000\000\003\127\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\007\\\000\000\000\000\000\000\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\002\219\002\206\001\172\000\224\000\000\000\000\003\130\003\147\002\222\003\131\002\210\001w\003m\000\000\000\000\003R\003A\000\000\000\227\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\007_\000\000\000\000\000\000\000\000\000\000\000\228\000\000\000\000\000\000\000\000\003\127\000\213\000\231\000\000\000\000\000\000\000\000\000\000\000\000\003\147\000\000\000\000\000\000\000\000\003m\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\003\130\000\000\002\222\003\131\002\210\001w\000\000\000\000\000\000\003R\003A\000\000\000\000\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\007l\000\000\000\232\000\000\000\000\000\221\000\000\000\000\000\222\003}\000\233\003\127\000\000\000\234\000\000\000\000\000\235\000\236\001\139\000\000\003\147\002\222\000\000\002\210\001w\003m\000\000\0039\003@\000\000\000\000\000\000\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\003\130\000\240\000\000\003\131\000\255\000\000\000\000\000\000\000\000\003R\003A\000\000\003\127\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\007o\000\000\000\000\000\000\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\002\219\002\206\001\172\000\224\000\000\000\000\003\130\003\147\002\222\003\131\002\210\001w\003m\000\000\000\000\003R\003A\000\000\000\227\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\007\132\000\000\000\000\000\000\000\000\000\000\000\228\000\000\000\000\000\000\000\000\003\127\000\213\000\231\000\000\000\000\000\000\000\000\000\000\000\000\003\147\000\000\000\000\000\000\000\000\003m\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\003\130\000\000\002\222\003\131\002\210\001w\000\000\000\000\000\000\003R\003A\000\000\000\000\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\007\135\000\000\000\232\000\000\000\000\000\221\000\000\000\000\000\222\003}\000\233\003\127\000\000\000\234\000\000\000\000\000\235\000\236\001\146\000\000\003\147\002\222\000\000\002\210\001w\003m\000\000\0039\003@\000\000\000\000\000\000\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\003\130\000\240\000\000\003\131\000\255\000\000\000\000\000\000\000\000\003R\003A\000\000\003\127\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\007\139\000\000\000\000\000\000\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\002\219\002\206\001\172\000\224\000\000\000\000\003\130\003\147\002\222\003\131\002\210\001w\003m\000\000\000\000\003R\003A\000\000\000\227\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\b\171\000\000\000\000\000\000\000\000\000\221\000\228\000\000\006\225\000\000\000\000\003\127\000\213\000\231\000\000\000\000\000\000\000\000\000\000\000\000\003\147\000\000\000\000\000\000\000\000\003m\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\003\130\000\000\002\222\003\131\002\210\001w\000\000\000\000\000\000\003R\003A\000\000\000\000\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\b\173\000\000\000\232\000\000\000\000\000\000\000\000\000\000\000\000\003}\000\233\003\127\000\000\000\234\002]\001\172\000\235\000\236\001\159\000\000\003\147\002\222\000\000\002\210\001w\003m\000\000\0039\003@\000\000\000\000\000\227\000\000\000\000\001\173\002\239\000\000\001\175\001\176\000\000\000\000\003\130\000\240\000\000\003\131\000\255\000\000\000\000\000\228\000\000\000\000\003A\000\000\003\127\000\213\000\231\002\219\002\206\001\172\000\000\003\145\000\000\001\200\003C\000\000\002-\000\000\002{\000\000\0039\003@\003R\000\000\003}\000\000\000\000\000\000\000\000\000\000\003X\000\000\005\030\0023\003\130\003\147\002\222\003\131\002\210\001w\005]\000\000\000\000\000\000\003A\000\000\000\000\000\000\000\000\002\219\002\206\001\172\000\000\003\145\000\000\001\200\003C\000\000\000\000\000\000\000\000\003m\000\000\000\000\003R\000\000\001\209\000\233\003\127\000\000\000\234\000\000\003X\000\235\000\236\000\000\002}\003\147\001\181\005\223\000\000\001w\005\007\000\000\0039\003@\002\149\000\000\000\000\000\000\002\153\000\000\000\213\000\000\000\000\000\000\000\000\000\000\003\130\000\240\000\000\003\131\000\000\003m\000\000\000\000\005!\005&\003A\003}\000\000\000\000\000\000\0024\000\000\0025\000\000\003\145\000\000\001\200\003C\002\222\000\000\002\210\001w\000\000\000\000\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\154\000\000\003\147\000\000\000\000\000\000\002\155\000\000\000\000\000\000\000\000\001\198\003}\000\000\003\127\001\171\001\172\000\000\002\156\000\000\001\231\000\000\001\200\001\179\002\222\000\000\002\210\001w\000\000\000\000\0039\003@\000\000\000\000\000\000\001\173\001\205\000\000\001\175\001\176\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\003A\000\000\003\127\004\243\000\000\000\000\000\000\000\000\000\000\003\145\000\000\001\200\003C\001\210\000\000\000\000\000\000\000\000\0039\003@\000\000\000\000\000\000\000\000\001\171\001\172\000\000\000\000\000\000\001\211\003\000\000\000\000\000\003\147\000\000\004^\000\000\001\171\001\172\000\000\000\000\000\000\003A\000\000\001\173\001\205\000\000\001\175\001\176\000\000\002{\003\145\000\000\001\200\003C\000\000\000\000\001\173\001\205\000\000\001\175\001\176\001\209\000\000\000\000\000\000\003\"\002\219\002\206\001\172\000\000\000\000\000\000\000\000\001\181\003\147\001\210\001w\000\000\003V\000\000\000\000\003R\000\000\000\000\003W\000\000\000\000\000\000\001\210\003X\000\000\001\211\003\000\000\000\000\000\000\000\000\000\000\000\000\000\004a\000\221\000\000\000\000\000\222\001\211\003\000\000\000\002}\000\000\001\214\005\230\001\215\000\000\000\000\000\000\000\000\000\000\002\149\000\000\000\000\003m\002\153\000\000\000\213\001\209\002\219\002\206\001\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\181\001\209\000\000\001w\003R\000\000\001\171\001\172\000\000\001\198\000\000\003W\003X\001\181\000\000\000\000\001w\000\000\001\231\000\000\001\200\001\179\003l\000\000\003W\000\000\001\173\001\205\000\000\001\175\001\176\000\000\003}\000\000\002\154\000\000\001\214\000\000\001\215\000\224\002\155\000\000\000\000\003m\002\222\000\000\002\210\001w\003j\001\214\000\000\001\215\002\156\000\000\000\227\000\000\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\228\001\198\000\000\001\211\003\000\003\127\000\213\000\231\000\000\000\000\001\231\000\000\001\200\001\179\001\198\000\000\000\000\000\000\000\000\000\000\003}\0039\003@\001\231\002{\001\200\001\179\000\000\000\000\000\000\000\000\000\000\002\222\000\000\002\210\001w\001\209\000\000\004^\000\000\000\000\000\000\000\000\000\000\000\000\003A\000\000\000\000\001\181\001\171\001\172\001w\000\000\000\000\003\145\000\000\001\200\003C\000\000\003W\001\005\000\000\000\000\000\000\003\127\000\000\000\000\000\000\000\233\001\173\001\205\000\234\001\175\001\176\000\235\000\236\000\000\000\000\003\147\000\000\0039\003@\002}\000\000\001\214\005\234\001\215\000\000\001\171\001\172\000\000\003z\002\149\000\000\000\000\000\000\002\153\004^\000\213\000\000\000\240\001\210\001\171\001\172\003A\000\000\000\000\000\000\001\173\001\205\000\000\001\175\001\176\003\145\000\000\001\200\003C\001\211\003\000\000\000\001\198\000\000\001\173\001\205\000\000\001\175\001\176\000\000\000\000\001\231\003\136\001\200\001\179\000\000\000\000\000\000\000\000\003\147\000\000\000\000\001\210\000\000\000\000\000\000\003\142\002\154\000\000\000\000\000\000\000\000\001\209\002\155\000\000\000\000\001\210\000\000\001\211\003\000\000\000\000\000\000\000\000\000\001\181\002\156\000\000\001w\000\000\001\171\001\172\000\000\001\211\003\000\000\000\003W\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{\001\173\001\205\001\209\001\175\001\176\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001\215\001\181\000\000\001\209\001w\000\000\000\000\001\171\001\172\003\151\000\000\000\000\003W\000\000\000\000\001\181\000\000\000\000\001w\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003W\001\173\001\205\000\000\001\175\001\176\000\000\000\000\001\198\001\211\003\000\001\214\000\000\001\215\000\000\001\171\001\172\001\231\002}\001\200\001\179\005\237\000\000\003\162\000\000\001\214\000\000\001\215\002\149\000\000\000\000\000\000\002\153\001\210\000\213\001\173\001\174\000\000\001\175\001\176\000\000\000\000\001\209\001\171\001\172\000\000\000\000\001\198\000\000\001\211\003\000\000\000\000\000\000\000\001\181\000\000\001\231\001w\001\200\001\179\000\000\001\198\000\000\001\173\001\205\003W\001\175\001\176\000\000\000\000\001\231\000\000\001\200\001\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\154\001\209\001\171\001\172\003\168\000\000\002\155\000\000\000\000\001\214\000\000\001\215\000\000\001\181\001\210\000\000\001w\000\000\002\156\001\171\001\172\000\000\001\173\003\022\003W\001\175\001\176\000\000\000\000\000\000\001\211\003\000\000\000\000\000\000\000\001\180\000\000\000\000\000\000\001\173\001\205\000\000\001\175\001\176\000\000\001\198\000\000\001\181\000\000\001\214\001w\001\215\000\000\000\000\001\231\000\000\001\200\001\179\000\000\000\000\000\000\003\174\000\000\001\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\001\181\000\000\000\000\001w\000\000\000\000\001\171\001\172\000\000\000\000\001\198\003W\001\211\003\000\000\000\000\000\000\000\000\000\000\000\001\231\000\000\001\200\001\179\000\000\000\000\000\000\001\173\001\205\001\180\001\175\001\176\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001\215\000\000\001\181\000\000\000\000\001w\001\198\001\209\001\171\001\172\003\180\000\000\000\000\000\000\000\000\001\199\000\000\001\200\001\179\001\181\001\210\000\000\001w\000\000\000\000\000\000\000\000\000\000\001\173\001\205\003W\001\175\001\176\000\000\001\198\000\000\001\211\003\000\000\221\000\000\000\000\003\024\000\000\001\231\000\000\001\200\001\179\001\171\001\172\000\000\003\186\000\000\000\000\000\000\000\000\001\214\000\000\001\215\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\003\025\001\173\001\205\001\209\001\175\001\176\000\000\000\000\001\198\000\000\001\211\003\000\000\000\000\000\000\000\001\181\000\000\001\199\001w\001\200\001\179\001\171\001\172\003\192\000\000\001\198\003W\000\000\000\000\000\000\000\000\000\000\000\000\001\210\001\231\000\000\001\200\001\179\000\000\000\000\000\000\001\173\001\205\001\209\001\175\001\176\000\000\000\000\000\000\001\211\003\000\001\214\000\000\001\215\000\000\001\181\000\000\000\000\001w\000\000\001\171\001\172\000\227\003\198\000\000\000\000\003W\000\000\000\000\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\228\001\173\001\205\001\209\001\175\001\176\000\213\000\231\001\198\bm\001\211\003\000\001\214\000\000\001\215\001\181\000\000\001\231\001w\001\200\001\179\001\171\001\172\003\204\000\000\000\000\003W\000\000\000\000\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\173\001\205\001\209\001\175\001\176\000\000\000\000\001\198\001\211\003\000\001\214\000\000\001\215\000\000\001\181\000\000\001\231\001w\001\200\001\179\000\000\000\000\003\210\000\000\000\000\003W\000\000\000\233\000\000\000\000\000\234\000\000\001\210\000\235\000\236\000\000\000\000\000\000\000\000\000\000\000\000\001\209\001\171\001\172\000\000\000\000\001\198\000\000\001\211\003\000\001\214\000\000\001\215\001\181\000\000\001\231\001w\001\200\001\179\bk\000\000\000\000\001\173\001\205\003W\001\175\001\176\000\000\000\000\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\209\001\171\001\172\003\216\000\000\001\198\000\000\000\000\001\214\000\000\001\215\000\000\001\181\001\210\001\231\001w\001\200\001\179\001\171\001\172\000\000\001\173\003\022\003W\001\175\001\176\000\000\000\000\000\000\001\211\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\173\001\205\000\000\001\175\001\176\000\000\001\198\000\000\000\000\000\000\001\214\000\000\001\215\000\000\000\000\001\231\000\000\001\200\001\179\000\000\000\000\000\000\003\222\000\000\001\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\001\181\000\000\000\000\001w\000\000\000\000\001\171\001\172\000\000\000\000\001\198\003W\001\211\003\000\000\000\000\000\000\000\000\000\000\000\001\231\000\000\001\200\001\179\000\000\000\000\000\000\001\173\001\205\001\180\001\175\001\176\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001\215\000\000\001\181\000\000\000\000\001w\000\000\001\209\001\171\001\172\003\228\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\181\001\210\000\000\001w\000\000\000\000\000\000\000\000\000\000\001\173\001\205\003W\001\175\001\176\000\000\001\198\000\000\001\211\003\000\000\000\000\000\000\000\007\163\000\000\001\231\000\000\001\200\001\179\001\171\001\172\000\000\003\234\000\000\000\000\000\000\000\000\001\214\000\000\001\215\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\001\173\001\205\001\209\001\175\001\176\000\000\000\000\001\198\000\000\001\211\003\000\000\000\000\000\000\000\001\181\000\000\001\199\001w\001\200\001\179\001\171\001\172\003\240\000\000\001\198\003W\000\000\000\000\000\000\007\176\000\000\000\000\001\210\001\231\000\000\001\200\001\179\000\000\000\000\000\000\001\173\001\205\001\209\001\175\001\176\000\000\000\000\000\000\001\211\003\000\001\214\000\000\001\215\000\000\001\181\000\000\000\000\001w\000\000\001\171\001\172\000\000\003\246\000\000\000\000\003W\000\000\000\000\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\001\173\001\205\001\209\001\175\001\176\000\000\000\000\001\198\000\000\001\211\003\000\001\214\000\000\001\215\001\181\000\000\001\231\001w\001\200\001\179\001\171\001\172\003\252\000\000\000\000\003W\000\000\000\000\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\173\001\205\001\209\001\175\001\176\000\000\000\000\001\198\001\211\003\000\001\214\000\000\001\215\000\000\001\181\000\000\001\231\001w\001\200\001\179\000\000\000\000\004\002\000\000\000\000\003W\000\000\000\000\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\001\209\001\171\001\172\000\000\000\000\001\198\000\000\001\211\003\000\001\214\000\000\001\215\001\181\000\000\001\231\001w\001\200\001\179\003N\000\000\000\000\001\173\001\205\003W\001\175\001\176\000\000\000\000\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\209\000\221\000\000\004\b\000\222\001\198\000\000\000\000\001\214\000\000\001\215\000\000\001\181\001\210\001\231\001w\001\200\001\179\001\171\001\172\000\000\000\000\000\000\003W\000\000\000\000\000\000\000\000\000\000\001\211\003\000\000\000\000\000\000\000\000\000\000\000\000\000\006 \001\173\001\205\000\000\001\175\001\176\000\000\001\198\000\000\000\000\000\000\001\214\000\000\001\215\000\000\000\000\001\231\000\000\001\200\001\179\002\221\b\166\000\000\004\022\000\000\001\209\000\000\000\000\000\000\000\000\000\000\000\000\002\222\001\210\002\210\001w\000\000\001\181\000\000\000\224\001w\000\000\000\000\001\171\001\172\000\000\000\000\001\198\003W\001\211\003\000\000\000\000\000\000\000\000\227\000\000\001\231\000\000\001\200\001\179\000\000\000\000\000\000\001\173\001\205\000\000\001\175\001\176\004 \001\172\000\000\000\228\000\000\001\214\000\000\001\215\000\000\000\213\000\231\003O\0039\003@\001\209\000\000\000\000\004\028\000\000\000\000\004<\001\205\000\000\001\175\001\176\000\000\001\181\001\210\000\000\001w\000\000\000\000\000\000\000\000\000\000\000\000\003A\003W\000\000\000\000\000\000\001\198\000\000\001\211\003\000\003B\000\000\001\200\003C\000\000\001\231\002-\001\200\001\179\000\000\000\000\000\000\000\000\000\000\002{\001\171\001\172\001\214\000\232\001\215\000\000\000\000\004A\0023\000\000\000\000\000\233\000\000\000\000\000\234\000\000\001\209\000\235\000\236\006)\001\173\001\205\000\000\001\175\001\176\002\219\002\206\001\172\001\181\000\000\000\000\001w\000\000\000\000\000\000\000\000\000\000\000\000\001\198\003W\003R\001\209\004h\000\240\000\000\000\000\000\255\001\231\003X\001\200\001\179\000\000\001\210\001\181\001\171\001\172\001w\002}\004`\000\000\005\251\000\000\000\000\000\000\001\214\000\000\001\215\002\149\001\211\003\000\000\000\002\153\000\000\000\213\001\173\001\205\000\000\001\175\001\176\003m\000\000\000\000\000\000\000\000\000\000\000\000\004W\004X\0024\000\000\0025\000\000\000\000\000\000\000\000\000\000\004r\000\000\000\000\000\000\001\198\001\209\000\000\000\000\000\000\000\000\001\210\000\000\000\000\001\231\000\000\001\200\001\179\001\181\000\000\000\000\001w\000\000\000\000\000\000\002\154\000\000\001\211\003\000\003W\001\198\002\155\003}\000\000\002\219\002\206\001\172\000\000\000\000\001\231\000\000\001\200\001\179\002\156\002\222\000\000\002\210\001w\000\000\003R\000\000\000\000\000\000\000\000\001\214\000\000\001\215\003X\000\000\000\000\001\209\001\171\001\172\000\000\000\000\002{\000\000\004k\000\000\000\000\000\000\000\000\001\181\000\000\000\000\001w\003\127\000\000\000\000\000\000\000\000\001\173\001\205\003W\001\175\001\176\000\000\000\000\003m\000\000\001\198\000\000\0039\003@\000\000\000\000\000\000\000\000\000\000\001\231\000\000\001\200\001\179\004|\000\000\000\000\000\000\000\000\001\214\004^\001\215\000\000\000\000\001\210\000\000\000\000\003A\000\000\000\000\002\219\002\206\001\172\000\000\002}\000\000\003\145\006K\001\200\003C\001\211\003\000\000\000\000\000\002\149\003R\000\000\003}\002\153\000\000\000\213\000\000\000\000\003X\000\000\001\198\000\000\001\171\001\172\002\222\003\147\002\210\001w\004u\001\231\000\000\001\200\001\179\000\000\000\000\000\000\000\000\000\000\001\209\000\000\000\000\000\000\001\173\001\205\000\000\001\175\001\176\000\000\000\000\003m\001\181\000\000\000\000\001w\000\000\000\000\003\127\000\000\000\000\000\000\000\000\003W\002\154\000\000\004\135\000\000\000\000\000\000\002\155\000\000\000\000\000\000\0039\003@\001\210\000\000\000\000\000\000\000\000\000\000\002\156\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001\215\004^\001\211\003\000\000\000\000\000\000\000\000\000\003A\003}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\145\000\000\001\200\003C\002\222\000\000\002\210\001w\000\000\000\000\000\000\000\000\000\000\000\000\002\219\002\206\001\172\001\198\001\209\000\000\000\000\000\000\001\171\001\172\003\147\000\000\001\231\000\000\001\200\001\179\001\181\000\000\000\000\001w\000\000\000\000\003\127\004\196\000\000\000\000\000\000\003W\001\173\001\205\000\000\001\175\001\176\000\000\000\000\000\000\000\000\000\000\0039\003@\000\000\000\000\000\000\000\000\000\000\000\000\007\169\000\000\000\000\000\000\004\145\000\000\001\214\000\000\001\215\004^\000\000\000\000\000\000\000\000\001\210\000\000\003A\000\000\000\000\000\000\001\171\001\172\000\000\000\000\000\000\003\145\000\000\001\200\003C\000\000\001\211\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\173\001\205\001\198\001\175\001\176\000\000\002\219\002\206\001\172\003\147\000\000\001\231\000\000\001\200\001\179\000\000\002\221\000\000\000\000\000\000\000\000\003R\004\155\001\209\000\000\000\000\000\000\000\000\002\222\003X\002\210\001w\001\210\001\171\001\172\001\181\000\000\000\000\001w\004\160\000\000\000\000\000\000\001\171\001\172\000\000\003W\000\000\001\211\003\000\000\000\000\000\000\000\001\173\001\205\000\000\001\175\001\176\000\000\000\000\003m\000\000\000\000\001\173\003\022\000\000\001\175\001\176\004\199\000\000\000\000\001\214\000\000\001\215\000\000\004\167\0039\003@\000\000\000\000\000\000\001\209\000\000\000\000\000\000\001\210\000\000\000\000\000\000\000\000\003\023\000\000\000\000\001\181\000\000\000\000\001w\000\000\000\000\000\000\003A\001\211\003\000\007\232\003W\000\000\000\000\001\198\003}\003B\000\000\001\200\003C\000\000\000\000\000\000\001\231\000\000\001\200\001\179\002\222\007\233\002\210\001w\007\235\000\000\000\000\000\000\000\000\001\214\000\000\001\215\000\000\007\236\001\209\000\000\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\001\180\000\000\001\181\000\000\000\000\001w\000\000\000\000\003\127\000\000\003R\000\000\001\181\003W\000\000\001w\000\000\000\000\003X\000\000\000\000\001\198\000\000\007\237\0039\003@\000\000\000\000\004\170\000\000\001\231\000\000\001\200\001\179\000\000\000\000\000\000\000\000\001\214\000\000\001\215\004^\000\000\000\000\000\000\000\000\001\171\001\172\003A\003m\000\000\003\024\000\000\000\000\000\000\000\000\000\000\003\145\007\238\001\200\003C\002{\000\000\000\000\000\000\000\000\001\173\001\205\007\239\001\175\001\176\000\000\000\000\000\000\001\198\003\026\004;\000\000\000\000\000\000\000\000\003\147\000\000\001\231\001\198\001\200\001\179\000\000\004\177\000\000\000\000\000\000\007\251\001\199\000\000\001\200\001\179\003}\001\210\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\007\241\000\000\002\222\000\000\002\210\001w\000\000\001\211\003\000\003R\000\000\000\000\002}\000\000\000\000\006W\000\000\003X\007\242\000\000\000\000\000\000\002\149\007\244\000\000\000\000\002\153\004\180\000\213\000\000\000\000\000\000\000\000\000\000\003\127\000\000\007\246\001\171\001\172\000\000\001\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003m\000\000\0039\003@\001\181\000\000\007\247\001w\000\000\001\173\001\205\000\000\001\175\001\176\000\000\003W\000\000\000\000\000\000\004^\000\000\000\000\000\000\000\000\000\000\000\000\003A\002\154\000\000\001\171\001\172\004\187\000\000\002\155\000\000\003\145\000\000\001\200\003C\000\000\001\214\001\210\001\215\000\000\000\000\002\156\000\000\000\000\003}\001\173\001\205\000\000\001\175\001\176\000\000\000\000\000\000\001\211\003\000\003\147\002\222\000\000\002\210\001w\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\194\000\000\000\000\000\000\000\000\001\198\000\000\000\000\000\000\000\221\001\210\000\000\006\222\000\000\001\231\000\000\001\200\001\179\000\000\001\209\000\000\003\127\000\000\000\000\000\000\000\000\001\211\003\000\000\000\000\000\000\000\001\181\000\000\000\000\001w\000\000\000\000\0039\003@\000\000\000\000\000\000\003W\002\219\002\206\001\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004^\000\000\000\000\000\000\003R\001\209\000\000\003A\000\000\002\219\002\206\001\172\003X\001\214\000\000\001\215\003\145\001\181\001\200\003C\001w\000\000\004\221\000\000\003R\000\000\000\000\000\000\003W\000\000\006\224\000\000\003X\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\147\000\000\004\224\003m\000\000\000\227\000\000\000\000\000\000\001\198\000\000\000\000\000\000\001\214\000\000\001\215\000\000\000\000\001\231\000\000\001\200\001\179\000\228\003m\002\219\002\206\001\172\000\000\000\213\006\227\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003X\000\000\001\198\000\000\003}\000\000\000\000\000\000\000\000\000\000\004\227\001\231\000\000\001\200\001\179\000\000\002\222\000\000\002\210\001w\000\000\000\000\000\000\000\000\003}\000\000\000\000\000\000\000\000\000\000\000\000\003m\000\000\000\000\001\171\001\172\002\222\000\000\002\210\001w\000\000\000\000\000\000\000\233\000\000\000\000\006\228\000\000\003\127\000\235\000\236\000\000\000\000\000\000\001\173\001\205\000\000\001\175\001\176\006\174\000\000\006\232\000\000\006\230\0039\003@\000\000\000\000\003\127\000\000\002{\000\000\000\000\000\000\000\000\000\240\004\233\000\000\000\000\003}\000\000\004^\000\000\000\000\0039\003@\001\210\000\000\003A\000\000\000\000\002\222\000\000\002\210\001w\000\000\000\000\003\145\000\000\001\200\003C\004^\001\211\003\000\000\000\000\000\000\000\000\000\003A\001\171\001\172\000\000\000\000\000\000\000\000\000\000\000\000\003\145\000\000\001\200\003C\003\147\000\000\003\127\000\000\000\000\000\000\000\000\002}\001\173\001\205\006]\001\175\001\176\000\000\001\209\000\000\000\000\002\149\0039\003@\003\147\002\153\000\000\000\213\000\000\000\000\001\181\000\000\000\000\001w\004\249\000\000\000\000\000\000\000\000\004^\000\000\003W\000\000\000\000\001\210\000\000\003A\000\000\000\000\001\171\001\172\000\000\000\000\000\000\000\000\003\145\000\000\001\200\003C\000\000\001\211\003\000\000\000\000\000\000\000\000\000\001\214\000\000\001\215\001\173\001\205\000\000\001\175\001\176\002\154\000\000\000\000\000\000\000\000\003\147\002\155\000\000\000\000\000\000\000\000\000\000\001\171\001\172\000\000\000\000\000\000\004\254\002\156\001\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\210\001\198\000\000\000\000\001\181\001\173\001\205\001w\001\175\001\176\001\231\000\000\001\200\001\179\000\000\003W\001\211\003\000\000\000\000\000\000\000\000\000\000\000\002\219\002\206\001\172\000\000\005\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\210\003R\000\000\001\214\000\000\001\215\000\000\002{\000\000\003X\000\000\000\000\001\209\002\219\002\206\001\172\001\211\003\000\000\000\005\n\000\000\000\000\000\000\000\000\001\181\000\000\000\000\001w\003R\000\000\000\000\000\000\000\000\000\000\000\000\003W\003X\000\000\000\000\001\198\003m\000\000\000\000\000\000\000\000\000\000\005\r\000\000\001\231\001\209\001\200\001\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\214\001\181\001\215\000\000\001w\002}\000\000\003m\006g\001\171\001\172\000\000\003W\000\000\000\000\002\149\000\000\000\000\000\000\002\153\000\000\000\213\000\000\000\000\000\000\000\000\000\000\000\000\003}\001\173\001\205\000\000\001\175\001\176\000\000\000\000\001\198\001\214\000\000\001\215\002\222\000\000\002\210\001w\000\000\001\231\000\000\001\200\001\179\000\000\000\000\005\027\000\000\000\000\000\000\003}\000\000\000\000\000\000\000\000\000\000\001\210\000\000\000\000\002\219\002\206\001\172\002\222\002\154\002\210\001w\000\000\003\127\001\198\002\155\000\000\000\000\001\211\003\000\003R\000\000\000\000\001\231\000\000\001\200\001\179\002\156\003X\0039\003@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005-\000\000\003\127\000\000\000\000\000\000\000\000\000\000\004^\000\000\000\000\000\000\000\000\001\209\000\000\003A\000\000\000\000\0039\003@\000\000\003m\000\000\000\000\003\145\001\181\001\200\003C\001w\007\232\000\000\000\000\000\000\000\000\000\000\004^\003W\000\000\000\000\000\000\000\000\000\000\003A\000\000\004 \001\172\000\000\b\255\003\147\000\000\007\235\003\145\000\000\001\200\003C\000\000\002\219\002\206\001\172\007\236\000\000\001\214\000\000\001\215\004<\001\205\000\000\001\175\001\176\003}\000\000\003R\000\000\000\000\000\000\003\147\000\000\000\000\000\000\003X\000\000\002\222\000\000\002\210\001w\000\000\000\000\000\000\000\000\0052\000\000\000\000\000\000\007\237\000\000\002-\000\000\001\198\001\171\001\172\000\000\000\000\000\000\000\000\000\000\000\000\001\231\000\000\001\200\001\179\003m\004A\0023\003\127\000\000\000\000\000\000\000\000\001\173\001\205\000\000\001\175\001\176\000\000\000\000\000\000\000\000\000\000\007\238\0039\003@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\239\000\000\005T\000\000\000\000\000\000\000\000\001\209\004^\000\000\000\000\000\000\001\210\000\000\000\000\003A\000\000\001\171\001\172\001\181\003}\t\000\001w\000\000\003\145\000\000\001\200\003C\001\211\003\000\000\000\000\000\002\222\000\000\002\210\001w\000\000\001\173\001\205\007\241\001\175\001\176\000\000\000\000\000\000\000\000\000\000\000\000\003\147\000\000\000\000\000\000\004W\005\171\0024\000\000\0025\007\242\000\000\005\181\000\000\001\209\007\244\000\000\003\127\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\001\181\000\000\007\246\001w\000\000\000\000\000\000\0039\003@\000\000\000\000\003W\001\211\003\000\000\000\000\000\000\000\000\000\001\198\000\000\007\247\000\000\000\000\000\000\004^\000\000\000\000\001\231\000\000\001\200\001\179\003A\000\000\000\000\000\000\000\000\001\214\000\000\001\215\000\000\003\145\000\000\001\200\003C\000\000\001\209\001\171\001\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\181\000\000\002{\001w\000\000\000\000\000\000\003\147\000\000\001\173\001\205\003W\001\175\001\176\000\000\001\198\000\000\000\000\000\000\001\171\001\172\000\000\000\000\000\000\001\231\000\000\001\200\001\179\000\000\004 \001\172\005\204\000\000\000\000\000\000\000\000\001\214\000\000\001\215\001\173\001\205\001\210\001\175\001\176\000\000\000\000\000\000\000\000\000\000\004<\001\205\000\000\001\175\001\176\000\000\000\000\000\000\001\211\003\000\000\000\002}\005\211\000\000\006p\000\000\000\000\000\000\000\000\000\000\000\000\002\149\001\210\001\198\000\000\002\153\000\000\000\213\000\000\000\000\000\000\002-\001\231\000\000\001\200\001\179\000\000\000\000\001\211\003\000\000\000\001\209\000\000\000\000\000\000\000\000\000\000\004A\0023\000\000\000\000\000\000\000\000\001\181\000\000\000\000\001w\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003W\000\000\000\000\000\000\000\000\000\000\000\000\001\209\000\000\000\000\002\154\000\000\000\000\000\000\004 \001\172\002\155\001\209\000\000\001\181\000\000\000\000\001w\000\000\000\000\001\214\000\000\001\215\002\156\001\181\003W\000\221\001w\000\000\004<\001\205\000\000\001\175\001\176\000\000\000\000\000\000\000\000\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\214\000\000\001\215\000\000\000\000\005\146\001\198\004W\007\150\0024\002-\0025\000\000\000\000\000\000\001\231\000\000\001\200\001\179\001\171\001\172\000\000\000\000\000\000\000\000\000\000\004A\0023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\198\000\000\000\000\001\173\001\205\000\000\001\175\001\176\000\000\001\231\001\198\001\200\001\179\000\000\000\000\000\000\000\000\000\000\000\000\001\231\000\000\001\200\001\179\000\000\001\209\b-\000\000\000\000\000\000\000\000\000\227\000\000\000\000\000\000\000\000\001\210\001\181\001\171\001\172\001w\000\000\000\000\000\000\001\171\001\172\000\000\000\000\000\228\000\000\000\000\000\000\001\211\003\000\000\213\000\231\000\000\000\000\001\173\001\205\000\000\001\175\001\176\000\000\001\173\001\205\000\000\001\175\001\176\000\000\004W\007\184\0024\000\000\0025\000\000\000\000\000\000\000\000\000\000\b<\000\000\000\000\000\000\000\000\001\209\bA\000\000\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\001\210\001\181\000\221\000\000\001w\000\222\000\000\000\000\001\006\000\000\001\211\003\000\003W\001\198\000\000\000\221\001\211\003\000\000\222\000\000\000\233\000\000\001\231\000\234\001\200\001\179\000\235\000\236\001\007\000\000\005\154\000\000\000\000\000\000\001\031\000\000\000\221\001\214\000\000\001\215\000\000\000\000\000\000\001\209\000\000\000\000\000\000\000\000\000\000\001\209\000\000\005\133\005\157\000\000\000\000\001\181\000\000\000\221\001w\000\000\000\222\001\181\000\000\001\006\001w\000\000\003W\000\000\000\000\000\000\000\000\005\136\003W\001\198\000\000\000\000\000\000\000\224\000\000\000\000\000\000\000\000\001\231\001\007\001\200\001\179\000\000\000\000\000\000\001\b\000\224\001\214\000\227\001\215\000\000\000\000\001\012\001\214\000\000\001\215\000\000\000\000\000\000\000\000\000\000\000\227\000\000\000\000\000\000\000\228\000\000\000\000\000\000\000\000\000\221\000\213\000\231\000\222\000\000\000\000\001\006\000\000\000\228\000\000\000\000\000\000\000\227\001\198\000\213\000\231\000\000\000\000\000\224\001\198\000\000\000\000\001\231\000\000\001\200\001\179\001\007\000\000\001\231\000\228\001\200\001\179\001\029\000\227\000\000\000\213\000\231\001\012\002\219\002\206\001\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\228\000\000\000\000\003R\000\000\000\232\000\213\000\231\000\000\000\000\000\000\003X\000\000\000\233\001\171\001\172\000\234\000\000\000\232\000\235\000\236\001\024\000\000\000\000\000\000\000\224\000\233\000\000\000\000\000\234\000\000\000\000\000\235\000\236\001\173\001\205\000\000\001\175\001\176\000\000\000\227\000\000\003m\000\000\001\012\000\240\000\000\000\233\000\255\000\000\000\234\000\000\000\000\000\235\000\236\000\000\000\000\000\228\000\240\000\221\000\232\005\140\000\000\000\213\000\231\000\000\001\210\000\000\000\233\000\000\000\000\000\234\000\000\000\000\000\235\000\236\001\024\000\000\000\000\000\244\000\000\000\000\001\211\001\242\000\000\000\000\002\219\002\206\001\172\000\000\003}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\240\003R\002\222\000\255\002\210\001w\000\000\000\000\000n\003X\000\000\000\000\000\000\000\000\000\000\001\209\000\000\000\232\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\233\000\000\001\181\000\234\000\000\001w\000\235\000\236\001\024\003\127\000\000\000\000\000\000\000\000\000\000\003m\002\219\002\206\001\172\000\000\000\000\000\000\000\000\000\000\000\227\0039\003@\000\000\000\000\000\000\000\000\003R\000\240\000\000\000\000\000\255\000\000\000\000\001\214\003X\001\215\000\228\b.\000\000\000\000\000\000\000\000\000\213\000\231\003A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\145\000\000\001\200\003C\000\000\003}\000\000\000\000\000\000\000\000\001\171\001\172\003m\000\000\000\000\000\000\001\198\002\222\000\000\002\210\001w\000\000\000\000\000\000\003\147\001\231\000\000\001\200\001\179\000\000\001\173\001\205\000\000\001\175\001\176\000\000\000\000\000\000\000\000\000\000\002'\000\000\000\000\000\000\000\000\000\000\000\000\001\171\001\172\003\127\000\000\000\233\000\000\000\000\000\234\000\000\000\000\000\235\000\236\000\000\003}\000\000\001\210\000\000\000\000\0039\003@\001\173\001\205\000\000\001\175\001\176\002\222\000\000\002\210\001w\000\000\002\024\001\211\002\027\000\000\000\000\005\225\000\253\000\000\000\000\000\000\000\000\000\000\003A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\145\001\210\001\200\003C\000\000\000\000\003\127\000\000\000\000\000\000\000\000\000\000\000\000\001\209\001\171\001\172\000\000\001\211\002\027\000\000\000\000\000\000\0039\003@\003\147\001\181\000\000\000\000\001w\000\000\000\000\000\000\000\000\000\000\001\173\001\205\000\000\001\175\001\176\005\182\000\000\000\000\000\000\000\000\002\029\000\000\003A\000\000\000\000\000\000\001\209\000\000\000\000\001\171\001\172\003\145\000\000\001\200\003C\000\000\000\000\001\214\001\181\001\215\000\000\001w\001\210\000\000\000\000\002\219\002\206\001\172\000\000\001\173\001\205\000\000\001\175\001\176\000\000\003\147\000\000\000\000\001\211\002\027\003R\000\000\000\000\000\000\000\000\000\000\001\171\001\172\003X\000\000\000\000\000\000\000\000\001\198\001\214\000\000\001\215\000\000\000\000\000\000\000\000\001\210\001\231\000\000\001\200\001\179\001\173\001\205\000\000\001\175\001\176\001\209\000\000\000\000\000\000\000\000\000\000\001\211\003\000\003m\000\000\000\000\000\000\001\181\000\000\000\000\001w\000\000\000\000\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\210\001\231\000\000\001\200\001\179\000\221\000\000\000\000\000\222\000\000\000\000\000\000\001\209\002\219\002\206\001\172\001\211\003\b\000\000\000\000\000\000\001\214\000\000\001\215\001\181\000\000\000\000\001w\003R\003}\000\000\000\000\000\000\000\000\000\000\004\242\003X\000\000\000\000\000\000\000\000\002\222\000\000\002\210\001w\000\000\000\000\000\000\000\000\001\209\000\000\000\000\000\000\000\221\000\000\000\000\000\222\001\198\000\000\000\000\001\214\001\181\001\215\000\000\001w\000\000\001\231\003m\001\200\001\179\000\000\000\000\000\000\003\127\000\000\000\000\000\000\002\219\002\206\001\172\000\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0039\003@\003\011\003R\000\000\000\000\000\227\001\198\001\214\000\000\001\215\003X\000\000\000\000\000\000\000\000\001\231\005U\001\200\001\179\000\000\000\000\000\000\000\228\003A\000\000\003}\000\000\000\000\000\213\000\231\000\000\000\000\003\145\000\000\001\200\003C\000\000\002\222\000\224\002\210\001w\003m\000\000\001\198\000\221\002\219\002\206\001\172\000\000\000\000\000\000\000\000\001\231\000\227\001\200\001\179\003\147\000\000\000\000\000\000\003R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003X\003\127\000\228\000\000\bv\000\000\000\000\000\000\000\213\000\231\000\000\000\000\000\000\000\000\000\232\000\000\000\000\0039\003@\001\171\001\172\003}\000\233\000\000\000\000\000\234\000\000\000\000\000\235\000\236\001\193\003m\000\000\002\222\004\234\002\210\001w\000\000\000\000\001\173\001\205\003A\001\175\001\176\000\000\002\219\002\206\001\172\000\000\000\000\003\145\000\000\001\200\003C\000\240\000\000\000\000\000\255\000\000\000\000\003R\000\000\001\004\000\000\000\000\003\127\000\227\000\000\003X\000\000\000\233\001\210\000\000\000\234\003\147\000\000\000\235\000\236\000\000\003}\000\000\0039\003@\000\228\000\000\000\000\000\000\001\211\003\000\000\213\000\231\002\222\000\000\002\210\001w\002\219\002\206\001\172\004\200\003m\000\000\000\000\000\240\000\000\000\000\003A\000\000\000\000\000\000\000\000\003R\000\000\000\000\000\000\003\145\000\000\001\200\003C\003X\000\000\001\209\000\000\000\000\003\127\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\181\000\000\000\000\001w\000\000\000\000\003\147\0039\003@\000\000\000\000\003|\000\000\000\000\000\000\003}\000\000\003m\000\000\000\233\000\000\000\000\000\234\000\000\004]\000\235\000\236\002\222\000\000\002\210\001w\003A\000\000\000\000\000\000\000\000\001\214\000\000\001\215\000\000\003\145\000\000\001\200\003C\000\000\000\000\000\000\000\000\002\219\002\206\001\172\000\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\127\000\000\000\000\000\000\003R\003\147\003}\000\000\000\000\000\000\000\000\000\000\003X\001\198\000\000\000\000\0039\003@\002\222\000\000\002\210\001w\001\231\000\000\001\200\001\179\000\000\000\000\000\000\000\000\002\219\002\206\001\172\003\137\000\000\000\000\000\000\000\000\000\000\000\000\003A\000\000\000\000\003m\000\000\003R\000\000\000\000\000\000\003\145\003\127\001\200\003C\003X\000\000\002\219\002\206\001\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0039\003@\000\000\000\000\003R\000\000\000\000\003\147\000\000\000\000\000\000\000\000\003X\000\000\000\000\000\000\000\000\003\143\003m\000\000\000\000\000\000\000\000\000\000\003A\003}\000\000\000\000\000\000\000\000\002\219\002\206\001\172\003\145\000\000\001\200\003C\002\222\000\000\002\210\001w\000\000\000\000\003m\000\000\003R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003X\000\000\000\000\000\000\003\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003}\000\000\000\000\003\127\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\222\000\000\002\210\001w\000\000\000\000\003m\0039\003@\000\000\002\219\002\206\001\172\003}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\152\002\222\000\000\002\210\001w\000\000\000\000\003A\003\127\005\187\000\000\000\000\000\000\002\219\002\206\001\172\003\145\000\000\001\200\003C\000\000\000\000\000\000\000\000\0039\003@\000\000\000\000\003R\000\000\003}\000\000\000\000\003\127\000\000\000\000\003X\000\000\000\000\000\000\003\147\003\163\002\222\000\000\002\210\001w\000\000\000\000\003A\0039\003@\000\000\000\000\000\000\002\219\002\206\001\172\003\145\000\000\001\200\003C\000\000\000\000\000\000\000\000\000\000\003\169\003m\000\000\003R\000\000\000\000\000\000\003A\003\127\000\000\000\000\003X\000\000\000\000\000\000\003\147\003\145\000\221\001\200\003C\006\222\000\000\002\221\000\000\0039\003@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\222\000\000\002\210\001w\000\000\000\000\003\147\003\175\003m\000\000\000\000\000\000\000\000\000\221\003A\003}\000\222\000\000\000\000\000\000\002\219\002\206\001\172\003\145\000\000\001\200\003C\002\222\000\000\002\210\001w\000\000\000\000\000\000\000\000\003R\000\000\000\000\000\000\000\000\002\219\002\206\001\172\003X\000\000\000\000\000\000\003\147\0039\003@\000\000\000\000\000\000\000\000\000\000\003R\003}\000\000\006\224\003\127\000\000\000\000\000\000\003X\000\000\000\000\000\000\000\000\002\222\000\000\002\210\001w\003A\000\227\003m\0039\003@\000\000\000\000\000\000\000\000\003B\000\000\001\200\003C\000\000\000\000\000\000\000\224\000\000\000\228\000\000\003\181\000\000\003m\000\000\000\213\006\227\000\000\003A\003\127\000\000\000\000\000\227\000\000\000\000\000\000\000\000\003\145\000\000\001\200\003C\000\000\000\000\000\000\000\000\0039\003@\000\000\000\000\000\228\000\000\003}\000\000\000\000\000\000\000\213\000\231\000\000\000\000\000\000\000\000\003\147\003\187\002\222\000\000\002\210\001w\000\221\000\000\003A\000\222\003}\000\000\002\219\002\206\001\172\000\000\000\000\003\145\000\000\001\200\003C\000\000\002\222\000\000\002\210\001w\000\233\003R\000\000\006\228\000\000\000\000\000\235\000\236\003\127\003X\000\000\002\219\002\206\001\172\000\000\003\147\006\174\000\000\006\231\000\000\006\230\000\000\bs\000\000\0039\003@\003R\000\000\003\127\000\000\000\233\000\000\000\240\000\234\003X\000\000\000\235\000\236\000\000\000\000\003m\003\193\000\000\000\000\0039\003@\000\000\000\000\003A\000\000\000\000\000\000\002\219\002\206\001\172\000\224\000\000\003\145\000\000\001\200\003C\003\199\000\240\000\000\000\000\003m\000\000\003R\003A\000\000\000\227\000\000\000\000\000\000\000\000\003X\000\000\003\145\000\000\001\200\003C\003\147\000\000\000\000\000\000\000\000\000\000\000\228\003}\000\000\000\000\000\000\000\000\000\213\000\231\000\000\000\000\000\000\000\000\000\000\002\222\003\147\002\210\001w\000\000\000\000\003m\000\000\000\000\000\000\002\219\002\206\001\172\003}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\222\000\000\002\210\001w\000\000\000\000\000\000\003\127\005\207\000\000\000\000\000\000\002\219\002\206\001\172\000\000\002\219\002\206\001\172\000\000\000\000\000\000\bx\0039\003@\000\000\000\000\003R\000\000\003}\000\233\003R\003\127\000\234\000\000\003X\000\235\000\236\000\000\003X\003\205\002\222\000\000\002\210\001w\000\000\000\000\003A\0039\003@\000\000\000\000\000\000\002\219\002\206\001\172\003\145\000\000\001\200\003C\000\000\000\000\000\240\000\000\000\000\003\211\003m\000\000\003R\000\000\003m\000\000\003A\003\127\000\000\000\000\003X\000\000\000\000\000\000\003\147\003\145\000\000\001\200\003C\000\000\000\000\002\221\000\000\0039\003@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\222\000\000\002\210\001w\000\000\000\000\003\147\003\217\003m\000\000\000\000\000\000\000\000\000\000\003A\003}\000\000\000\221\000\000\003}\000\000\000\000\000\000\003\145\000\000\001\200\003C\002\222\000\000\002\210\001w\002\222\000\000\002\210\001w\000\000\000\000\000\000\000\000\002\219\002\206\001\172\000\000\002\219\002\206\001\172\000\000\003\147\0039\003@\000\000\000\000\000\000\000\000\003R\000\000\003}\000\000\003R\003\127\000\000\000\000\003X\003\127\000\221\000\000\003X\000\222\002\222\000\000\002\210\001w\003A\000\000\000\000\0039\003@\000\000\000\000\0039\003@\003B\000\000\001\200\003C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\223\003m\000\000\006\167\003\229\003m\000\000\003A\003\127\000\000\000\000\003A\000\000\000\000\000\000\000\227\003\145\000\000\001\200\003C\003\145\000\000\001\200\003C\0039\003@\000\000\000\221\000\000\000\000\000\222\000\000\000\228\000\000\000\000\000\000\000\000\000\000\000\213\000\231\003\147\003\235\000\000\000\000\003\147\000\000\000\000\000\224\003A\003}\000\000\000\000\000\000\003}\000\000\000\000\000\000\003\145\000\000\001\200\003C\002\222\000\227\002\210\001w\002\222\000\000\002\210\001w\002\219\002\206\001\172\000\000\002\219\002\206\001\172\000\000\000\000\000\000\000\228\000\000\003\147\000\000\000\000\003R\000\213\000\231\000\000\003R\000\000\000\000\000\000\003X\003\127\000\000\000\000\003X\003\127\000\000\000\000\000\233\000\000\000\224\000\234\000\000\000\000\000\235\000\236\000\000\0039\003@\000\000\000\000\0039\003@\000\000\000\000\000\227\000\000\000\000\000\000\000\000\000\000\003m\000\000\000\000\003\241\003m\000\000\000\000\003\247\000\000\000\252\003A\000\228\000\000\000\000\003A\000\000\000\232\000\213\000\231\003\145\000\000\001\200\003C\003\145\000\233\001\200\003C\000\234\000\000\000\000\000\235\000\236\006\172\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\000\000\000\000\003\147\000\000\000\000\000\000\003\147\003}\000\000\003R\000\000\003}\000\000\000\000\000\000\000\240\000\000\003X\000\255\002\222\000\000\002\210\001w\002\222\000\000\002\210\001w\000\000\000\000\000\000\000\232\002\219\002\206\001\172\000\000\002\219\002\206\001\172\000\233\000\000\000\000\000\234\000\000\000\000\000\235\000\236\003R\000\000\003m\000\000\003R\003\127\000\000\000\000\003X\003\127\000\000\000\000\003X\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0039\003@\000\000\000\240\0039\003@\001\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\253\003m\000\000\000\000\004\003\003m\000\000\003A\000\000\000\000\000\000\003A\003}\000\000\000\221\000\000\003\145\000\000\001\200\003C\003\145\000\000\001\200\003C\002\222\000\000\002\210\001w\000\000\000\000\000\000\000\000\000\000\000\000\001\171\001\172\000\000\002\219\002\206\001\172\003\147\000\000\000\000\0041\003\147\000\000\000\000\000\000\000\000\003}\000\000\0044\003R\003}\001\173\003\022\003\127\001\175\001\176\000\000\003X\002\222\000\000\002\210\001w\002\222\000\000\002\210\001w\000\000\000\000\000\000\0039\003@\000\000\000\000\000\000\000\221\000\000\000\000\006\222\003\023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\t\000\000\003m\000\000\003\127\000\000\000\000\003A\003\127\000\000\000\000\000\000\002\219\002\206\001\172\000\227\003\145\000\000\001\200\003C\0039\003@\000\000\000\000\0039\003@\000\000\003R\000\000\000\000\000\000\000\000\000\228\000\000\000\000\003X\000\000\004\023\000\213\000\231\003\147\004\029\000\000\000\000\003A\000\000\001\180\000\000\003A\000\000\003}\000\000\000\000\003\145\000\000\001\200\003C\003\145\001\181\001\200\003C\001w\002\222\006\224\002\210\001w\003m\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\000\000\003\147\000\227\000\000\000\000\003\147\000\000\000\000\000\000\003R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003X\003\127\000\228\000\000\003\024\000\000\000\000\000\233\000\213\006\227\000\234\000\000\000\000\000\235\000\236\000\000\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\000\000\000\000\000\000\0045\004;\000\000\003m\000\000\002\222\004i\002\210\001w\001\198\000\000\003\028\000\000\003A\000\000\002\219\002\206\001\172\001\199\000\000\001\200\001\179\003\145\000\000\001\200\003C\000\000\000\000\000\000\000\000\003R\000\000\000\000\000\000\000\000\000\000\000\000\003\127\003X\000\000\000\000\000\000\000\233\000\000\000\000\006\228\003\147\000\000\000\235\000\236\000\000\003}\000\000\0039\003@\000\000\000\000\000\000\006\174\000\000\006\229\000\000\006\230\002\222\000\000\002\210\001w\000\000\000\000\003m\004s\000\000\000\000\000\000\000\240\000\000\000\000\003A\000\000\002\219\002\206\001\172\000\000\002\219\002\206\001\172\003\145\000\000\001\200\003C\000\000\000\000\000\000\000\000\003R\003\127\000\000\000\000\003R\000\000\000\000\000\000\003X\000\000\000\000\000\000\003X\000\000\000\000\000\000\003\147\0039\003@\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\004}\002\222\000\000\002\210\001w\003m\000\000\003A\000\000\003m\000\000\000\000\000\000\000\000\000\000\000\000\003\145\000\000\001\200\003C\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\127\000\000\000\000\000\000\003R\000\000\000\000\003\147\000\000\000\000\000\000\000\000\003X\000\000\000\000\000\000\0039\003@\000\000\000\000\003}\000\000\000\000\000\000\003}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\222\004\136\002\210\001w\002\222\000\000\002\210\001w\003A\000\000\000\000\003m\002\219\002\206\001\172\000\000\000\000\003\145\000\000\001\200\003C\000\000\000\000\000\000\000\000\000\000\000\000\003R\000\000\000\000\000\000\000\000\003\127\000\000\000\000\003X\003\127\000\000\000\000\000\000\000\000\003\147\000\000\000\000\000\000\000\000\000\000\000\000\0039\003@\000\000\000\000\0039\003@\000\000\000\000\000\000\000\000\000\000\003}\000\000\000\000\000\000\000\000\000\000\004\146\003m\000\000\000\000\004\156\000\000\002\222\003A\002\210\001w\000\000\003A\000\000\002\219\002\206\001\172\003\145\000\000\001\200\003C\003\145\000\000\001\200\003C\000\000\000\000\000\000\000\000\003R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003X\000\000\003\127\000\000\003\147\000\000\000\000\000\000\003\147\000\000\000\000\000\000\000\000\003}\000\000\002\219\002\206\001\172\0039\003@\000\000\000\000\000\000\000\000\000\000\002\222\000\000\002\210\001w\000\000\003R\003m\000\000\000\000\000\000\004\168\000\000\000\000\003X\000\000\000\000\000\000\003A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\145\000\000\001\200\003C\000\000\000\000\003\127\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\219\002\206\001\172\000\000\003m\000\000\000\000\000\000\0039\003@\003\147\000\000\000\000\000\000\003}\003R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003X\000\000\004\178\002\222\000\000\002\210\001w\000\000\000\000\003A\000\000\000\000\000\000\000\000\000\000\002\219\002\206\001\172\003\145\000\000\001\200\003C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003}\003R\003m\000\000\000\000\000\000\003\127\000\000\000\000\003X\000\000\000\000\002\222\003\147\002\210\001w\000\000\000\000\000\000\000\000\000\000\000\000\0039\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\002\219\002\206\001\172\004\188\003m\000\000\000\000\000\000\003\127\000\000\003A\000\000\000\000\000\000\003}\003R\000\000\000\000\000\000\003\145\000\000\001\200\003C\003X\0039\003@\002\222\000\000\002\210\001w\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\219\002\206\001\172\004\195\000\000\003\147\000\000\000\000\000\000\000\000\003A\000\000\000\000\000\000\003}\003R\003m\000\000\000\000\003\145\003\127\001\200\003C\003X\000\000\000\000\002\222\000\000\002\210\001w\000\000\000\000\000\000\000\000\000\000\000\000\0039\003@\000\000\000\000\000\000\000\000\000\000\003\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000\003m\000\000\000\000\000\000\003\127\000\000\003A\000\000\000\000\000\000\003}\000\000\000\000\000\000\000\000\003\145\000\000\001\200\003C\000\000\0039\003@\002\222\000\000\002\210\001w\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\255\000\000\003\147\000\000\000\000\000\000\000\000\003A\002]\001\172\000\000\003}\000\000\000\000\000\000\000\000\003\145\003\127\001\200\003C\000\000\000\000\000\000\002\222\000\000\002\210\001w\000\000\001\173\002\239\000\000\001\175\001\176\0039\003@\000\000\000\000\000\000\000\000\000\221\003\147\000\000\000\222\000\000\000\000\001\025\000\000\000\000\000\000\000\000\005\006\000\000\000\000\000\000\000\000\003\127\000\000\003A\000\000\002-\000\000\000\221\002\219\002\206\001\172\001\027\003\145\000\000\001\200\003C\006\167\0039\003@\000\000\000\000\005\030\0023\003R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003X\000\000\000\000\005\028\000\000\003\147\000\000\000\000\000\000\000\000\003A\000\000\000\000\000\000\000\000\000\000\000\000\001\171\001\172\003\145\000\000\001\200\003C\000\000\001\209\000\000\000\000\000\000\000\000\000\224\000\000\003m\000\000\000\000\000\000\000\000\001\181\001\173\001\205\001w\001\175\001\176\000\000\003\147\000\227\000\000\000\000\000\000\001\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\228\000\000\000\000\000\000\005%\000\227\000\213\000\231\001\210\000\000\0024\000\000\0025\000\000\000\221\000\000\000\000\000\222\003}\000\000\001\025\000\000\000\228\000\000\001\211\b\234\000\000\b\236\000\213\000\231\002\222\000\000\002\210\001w\000\000\000\221\000\000\000\000\000\222\000\000\001\027\001\006\000\000\000\000\000\000\000\000\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\231\001\209\001\200\001\179\000\232\001\011\003\127\001\171\001\172\000\000\000\000\000\000\000\233\001\181\000\000\000\234\001w\000\000\000\235\000\236\006\221\000\000\0039\003@\000\000\000\000\000\000\001\173\001\205\000\000\001\175\001\176\000\000\000\224\000\233\000\000\000\000\000\234\000\000\b=\000\235\000\236\000\000\000\000\000\240\000\000\003A\000\255\000\227\001\214\000\000\001\215\001\012\000\000\000\224\003\145\000\000\001\200\003C\001\210\000\000\000\000\000\000\000\000\000\000\000\228\005\148\000\000\000\000\000\227\000\000\000\213\000\231\001\012\000\000\001\211\b\031\000\000\000\000\003\147\001\171\001\172\000\000\000\000\000\000\001\198\000\228\000\000\000\000\000\000\000\000\000\000\000\213\000\231\001\231\000\000\001\200\001\179\000\000\000\000\001\173\001\205\000\000\001\175\001\176\000\000\000\000\000\000\001\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\181\000\000\000\000\001w\000\000\000\232\000\000\000\000\000\000\000\000\000\000\000\000\001\210\000\233\000\000\000\000\000\234\000\000\000\000\000\235\000\236\001\024\000\000\001\171\001\172\000\000\000\232\000\000\001\211\b\017\001\171\001\172\000\000\000\000\000\233\000\000\001\214\000\234\001\215\000\000\000\235\000\236\001\024\001\173\001\205\000\240\001\175\001\176\000\255\000\000\001\173\001\205\000\000\001\175\001\176\000\000\000\000\000\000\000\000\000\000\000\000\001\209\000\000\000\000\000\000\000\000\000\240\000\000\000\000\000\255\000\000\000\000\001\198\001\181\002-\000\000\001w\000\000\000\000\000\000\000\000\001\231\001\210\001\200\001\179\000\000\000\000\000\221\000\000\000\000\002.\0023\000\000\000\000\000\000\000\000\001\171\001\172\001\211\002\031\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001\215\000\000\000\000\000\000\000\000\001\173\001\205\000\000\001\175\001\176\000\000\000\000\000\000\001\209\000\000\000\000\000\000\000\000\000\000\000\000\001\209\000\000\000\000\000\000\000\000\001\181\000\000\000\000\001w\000\000\000\000\000\000\001\181\000\000\001\198\001w\000\000\001\210\000\000\000\000\000\000\000\000\000\221\001\231\000\000\001\200\001\179\000\000\000\000\000\000\000\000\001\171\001\172\001\211\002\019\000\000\000\000\000\000\001\171\001\172\0024\000\000\0025\000\000\000\000\000\000\000\227\000\000\001\214\000\000\001\215\001\173\001\205\000\000\001\175\001\176\000\000\000\000\001\173\001\205\000\000\001\175\001\176\000\228\000\000\000\000\001\209\000\000\000\000\000\213\000\231\000\000\000\000\000\000\000\000\000\000\000\000\001\198\001\181\000\000\000\000\001w\000\000\001\210\001\198\000\000\001\231\000\000\001\200\001\179\001\210\000\000\000\000\001\231\000\000\001\200\001\179\001\171\001\172\001\211\002\016\000\000\000\000\000\000\001\171\001\172\001\211\002\014\000\000\000\000\000\000\000\000\000\227\000\000\001\214\000\000\001\215\001\173\001\205\000\000\001\175\001\176\000\000\000\000\001\173\001\205\000\000\001\175\001\176\000\228\000\000\000\233\001\209\000\000\000\234\000\213\000\231\000\235\000\236\001\209\000\000\000\000\000\000\000\000\001\181\000\000\000\000\001w\000\000\001\210\001\198\001\181\000\000\000\000\001w\000\000\001\210\000\000\000\000\001\231\000\000\001\200\001\179\005\156\000\000\001\211\001\212\000\000\000\000\000\000\001\171\001\172\001\211\001\227\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001\215\000\000\000\000\000\000\000\000\001\214\000\000\001\215\001\173\001\205\000\000\001\175\001\176\000\000\000\000\000\233\001\209\000\000\000\234\000\000\000\000\000\235\000\236\001\209\000\000\000\000\000\000\000\000\001\181\000\000\000\000\001w\000\000\000\000\001\198\001\181\000\000\000\000\001w\000\000\001\210\001\198\000\000\001\231\000\000\001\200\001\179\005\160\000\000\000\000\001\231\000\000\001\200\001\179\001\171\001\172\001\211\001\230\000\000\000\000\000\000\001\171\001\172\000\000\001\214\000\000\001\215\000\000\000\000\000\000\000\000\001\214\000\000\001\215\001\173\001\205\000\000\001\175\001\176\000\000\000\000\001\173\001\205\000\000\001\175\001\176\000\000\000\000\000\000\001\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\198\001\181\000\000\000\000\001w\000\000\001\210\001\198\000\000\001\231\000\000\001\200\001\179\001\210\000\000\000\000\001\231\000\000\001\200\001\179\001\171\001\172\001\211\002\r\000\000\000\000\000\000\001\171\001\172\001\211\002\001\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001\215\001\173\001\205\000\000\001\175\001\176\000\000\000\000\001\173\001\205\000\000\001\175\001\176\000\000\000\000\000\000\001\209\000\000\000\000\000\000\000\000\000\000\000\000\001\209\000\000\000\000\000\000\000\000\001\181\000\000\000\000\001w\000\000\001\210\001\198\001\181\000\000\000\000\001w\000\000\001\210\000\000\000\000\001\231\000\000\001\200\001\179\000\000\000\000\001\211\002\t\000\000\000\000\000\000\001\171\001\172\001\211\0021\000\000\000\000\000\000\000\000\000\000\000\000\001\214\007\232\001\215\001\171\001\172\000\000\000\000\001\214\000\000\001\215\001\173\001\205\000\000\001\175\001\176\000\000\t\b\000\000\001\209\t\t\005\177\000\000\007\235\001\173\003\022\001\209\001\175\001\176\000\000\000\000\001\181\007\236\000\000\001w\000\000\000\000\001\198\001\181\000\000\000\000\001w\002-\000\000\001\198\000\000\001\231\000\000\001\200\001\179\000\000\003\023\000\000\001\231\000\000\001\200\001\179\000\000\002A\0023\000\000\000\000\001\171\001\172\000\000\000\000\007\237\001\214\000\000\001\215\000\000\000\000\000\000\000\000\001\214\000\000\001\215\000\000\000\000\000\000\000\000\000\000\001\173\001\205\000\000\001\175\001\176\000\000\000\000\000\000\000\000\000\000\001\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\238\000\000\001\198\001\181\001\180\000\000\001w\000\000\000\000\001\198\007\239\001\231\002-\001\200\001\179\000\000\001\181\000\000\001\231\001w\001\200\001\179\001\171\001\172\000\000\000\000\000\000\000\000\002N\0023\t\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0024\000\000\0025\000\000\001\173\001\205\000\000\001\175\001\176\000\000\000\000\007\241\000\000\000\000\000\000\000\000\000\000\003\024\000\000\000\000\000\000\000\000\000\000\000\000\001\209\000\000\000\000\000\000\000\000\007\242\000\000\000\000\000\000\000\000\007\244\002-\001\181\001\198\000\000\001w\000\000\0045\004;\001\171\001\172\000\000\001\231\007\246\001\200\001\179\001\198\002\\\0023\000\000\000\000\000\000\000\000\001\171\001\172\001\199\000\000\001\200\001\179\001\173\001\205\007\247\001\175\001\176\000\000\000\000\000\000\0024\000\000\0025\000\000\000\000\000\000\001\173\001\205\000\000\001\175\001\176\001\171\001\172\000\000\001\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\210\000\000\001\181\000\000\000\000\001w\000\000\001\173\001\205\000\000\001\175\001\176\000\000\001\198\001\210\000\000\001\211\0033\000\000\000\000\000\000\000\000\001\231\000\000\001\200\001\179\000\000\001\171\001\172\000\000\001\211\004S\000\000\000\000\000\000\000\000\000\000\0024\002-\0025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\173\001\205\001\209\001\175\001\176\000\000\000\000\004P\0023\000\000\000\000\000\000\000\000\000\000\001\181\000\000\001\209\001w\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\198\001\181\000\000\000\000\001w\001\210\000\000\000\000\000\000\001\231\000\000\001\200\001\179\000\000\001\209\000\000\000\000\000\000\000\000\000\000\000\000\001\211\006\017\001\214\000\000\001\215\001\181\001\171\001\172\001w\000\000\000\000\001\171\001\172\000\000\000\000\000\000\001\214\000\000\001\215\000\000\000\000\000\000\000\000\007p\000\000\000\000\001\173\003\022\007\136\001\175\001\176\001\173\003\022\001\209\001\175\001\176\000\000\000\000\001\198\000\000\0024\000\000\0025\000\000\000\000\001\181\000\000\001\231\001w\001\200\001\179\000\000\001\198\003\023\000\000\000\000\000\000\000\221\003\023\000\000\006\222\001\231\000\000\001\200\001\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\171\001\172\000\000\000\000\001\198\000\000\000\000\000\000\001\214\000\000\001\215\000\000\000\000\001\231\000\000\001\200\001\179\000\000\000\000\000\000\001\173\001\205\000\000\001\175\001\176\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\180\000\000\000\000\000\000\000\000\001\180\000\000\000\000\000\000\000\000\001\198\000\000\001\181\000\221\000\000\001w\000\222\001\181\001\210\001\231\001w\001\200\001\179\000\000\000\000\006\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\221\001\211\b\030\000\222\000\000\000\000\000\000\000\227\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006 \000\000\003\024\000\000\000\000\000\000\000\000\003\024\000\228\000\000\000\000\000\000\000\000\000\000\000\213\006\227\000\000\000\000\001\209\000\000\006 \006#\000\000\000\000\000\000\000\000\0045\004;\000\000\000\000\001\181\0045\004;\001w\000\000\001\198\000\000\000\000\000\000\000\224\001\198\006\156\000\000\000\000\001\199\000\000\001\200\001\179\000\000\001\199\000\221\001\200\001\179\000\222\000\227\000\000\000\000\000\000\000\000\000\224\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\001\215\000\000\000\000\000\228\000\000\000\000\000\227\000\000\000\233\000\213\000\231\006\228\000\000\000\000\000\235\000\236\000\000\000\000\006 \000\000\000\000\000\000\000\000\000\228\006\174\000\000\006\241\000\000\006\230\000\213\000\231\000\000\000\000\000\000\001\198\000\000\000\000\000\000\000\000\007m\000\240\000\000\000\000\001\231\000\000\001\200\001\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\224\000\000\000\000\000\000\000\000\000\000\000\232\000\221\000\000\000\000\000\222\000\000\000\000\000\000\000\233\000\227\000\000\000\234\000\000\000\000\000\235\000\236\006)\000\000\000\000\000\000\000\232\000\221\000\000\000\000\000\222\000\000\000\228\000\000\000\233\000\000\000\000\000\234\000\213\000\231\000\235\000\236\006)\006 \000\000\000\000\000\240\000\000\000\000\000\255\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\221\000\000\000\000\000\222\000\000\006 \007{\000\000\000\240\000\000\000\000\000\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\224\000\000\007\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\232\000\000\004*\000\000\000\000\000\227\000\000\000\000\000\233\000\000\000\224\000\234\000\000\000\000\000\235\000\236\006)\000\221\000\000\000\000\000\222\000\000\000\228\000\000\000\000\000\227\000\000\000\000\000\213\000\231\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\240\000\224\000\228\000\255\000\000\000\000\000\000\000\000\000\213\000\231\000\000\000\000\000\000\000\000\000\000\000\000\000\227\006\245\000\000\000\000\000\000\000\000\000\000\000\000\000\221\000\000\000\000\000\222\000\000\000\000\000\000\000\000\000\000\000\228\000\000\000\000\000\000\000\000\000\000\000\213\000\231\000\000\000\232\000\000\000\000\006\246\000\000\006\247\000\000\000\000\000\233\000\000\000\224\000\234\000\000\007\158\000\235\000\236\006)\000\000\000\221\000\000\000\232\000\222\000\000\000\000\000\000\000\227\000\000\000\000\000\233\000\000\000\221\000\234\000\000\000\222\000\235\000\236\006)\000\000\000\000\006\248\000\240\000\000\000\228\000\255\000\000\000\000\000\000\000\000\000\213\000\231\000\000\000\232\000\000\000\000\000\000\000\000\000\000\000\224\000\000\000\233\000\240\000\000\000\234\000\255\000\000\000\235\000\236\001+\000\000\000\000\000\000\000\000\000\227\006\249\000\000\000\000\000\000\000\221\000\000\000\000\000\222\000\000\000\000\006\250\006\251\000\000\006\252\000\000\000\000\000\228\000\000\000\240\000\000\000\224\000\255\000\213\000\231\000\000\000\000\000\000\000\000\000\000\000\232\000\000\000\000\000\224\000\000\000\000\000\227\0076\000\233\000\000\000\000\000\234\000\000\000\000\000\235\000\236\006\185\000\221\000\227\006\188\000\222\000\000\000\000\000\228\000\000\000\000\000\000\000\000\000\000\000\213\000\231\000\000\000\000\000\000\000\000\000\228\000\000\000\000\000\000\006\254\000\240\000\213\000\231\000\255\007\000\007\n\000\000\000\232\000\000\000\000\000\224\000\000\000\000\000\221\000\000\000\233\000\222\0074\000\234\000\000\000\000\000\235\000\236\006\172\000\000\000\227\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\221\000\000\0075\000\222\000\000\000\000\000\000\000\000\000\000\000\228\000\232\000\000\000\000\000\000\000\240\000\213\000\231\000\255\000\233\000\224\000\000\000\234\000\232\000\000\000\235\000\236\006\185\000\000\000\000\007\204\000\233\000\000\000\000\000\234\000\227\000\000\000\235\000\236\001\221\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\221\000\000\000\000\000\222\000\240\000\228\000\000\000\255\000\000\000\224\000\000\000\213\000\231\000\000\000\000\000\000\000\240\000\000\000\000\000\255\000\000\000\000\000\000\000\232\000\227\000\000\000\000\000\000\000\000\000\224\000\000\000\233\000\000\000\000\000\234\000\000\000\000\000\235\000\236\001\251\000\000\000\228\000\000\000\000\000\227\000\000\000\000\000\213\000\231\000\221\000\000\000\000\000\222\000\000\000\000\000\000\000\000\000\000\000\000\000\221\000\000\000\228\000\222\000\240\000\000\000\232\000\255\000\213\000\231\000\000\000\000\000\000\000\000\000\233\000\000\000\224\000\234\000\000\000\000\000\235\000\236\002\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\227\000\000\000\000\000\000\000\000\000\221\000\000\000\000\000\222\000\000\000\000\000\232\000\000\000\000\000\000\000\240\000\000\000\228\000\255\000\233\000\000\000\000\000\234\000\213\000\231\000\235\000\236\002;\000\000\000\000\000\000\000\232\000\000\000\000\000\224\000\000\000\000\000\000\000\000\000\233\000\000\000\000\000\234\000\000\000\224\000\235\000\236\002H\000\000\000\227\000\000\000\240\000\000\000\000\000\255\000\000\000\000\000\000\000\000\000\227\000\000\000\000\000\000\000\000\000\221\000\000\000\228\000\222\000\000\000\000\000\000\000\240\000\213\000\231\000\255\000\000\000\228\000\232\000\000\000\000\000\224\000\000\000\213\000\231\000\221\000\233\000\000\000\222\000\234\000\000\000\000\000\235\000\236\002V\000\000\000\227\000\000\000\000\000\000\000\000\000\000\001\171\001\172\000\000\000\000\000\000\000\221\000\000\000\000\000\222\000\000\000\000\000\228\000\000\000\000\000\000\000\000\000\240\000\213\000\231\000\255\001\173\003\022\000\000\001\175\001\176\000\232\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\233\000\000\000\232\000\234\000\000\000\224\000\235\000\236\002b\000\221\000\233\000\000\000\222\000\234\000\000\000\000\000\235\000\236\002\139\000\000\000\227\000\000\000\000\000\000\000\000\000\224\000\000\000\000\000\221\000\000\000\000\000\222\000\240\000\000\000\000\000\255\000\000\000\228\000\232\000\000\000\227\000\000\000\240\000\213\000\231\000\255\000\233\000\224\000\000\000\234\000\000\000\000\000\235\000\236\002\141\000\000\000\000\000\228\000\000\000\000\000\000\000\000\000\227\000\213\000\231\000\000\000\000\000\000\001\180\002\219\002\206\001\172\000\000\000\000\000\000\000\000\000\000\000\000\000\240\000\228\001\181\000\255\000\000\001w\000\224\000\213\000\231\000\221\000\000\000\000\000\222\000\000\004\196\000\000\000\000\000\000\000\000\000\232\000\000\000\227\000\000\000\000\000\000\000\224\000\000\000\233\000\000\000\000\000\234\000\000\000\000\000\235\000\236\002\241\000\000\000\000\000\228\000\232\000\227\007\163\000\000\000\000\000\213\000\231\000\000\000\233\000\000\000\000\000\234\000\000\000\000\000\235\000\236\003\n\000\000\000\228\000\000\000\240\000\000\000\232\000\255\000\213\000\231\000\221\000\000\000\000\000\222\000\233\000\000\000\000\000\234\000\000\001\198\000\235\000\236\004'\000\000\000\240\000\000\000\000\000\255\001\199\000\224\001\200\001\179\000\000\000\000\000\000\000\000\000\000\000\000\002\221\000\000\000\000\007\175\000\000\000\232\000\227\000\000\000\240\000\000\000\000\000\255\002\222\000\233\002\210\001w\000\234\000\000\000\000\000\235\000\236\004.\000\000\000\228\000\232\000\000\000\000\000\000\000\221\000\213\000\231\000\222\000\233\000\000\000\000\000\234\000\000\000\000\000\235\000\236\004>\000\000\000\000\000\000\000\000\000\240\000\000\000\224\000\255\000\000\000\221\000\000\004\198\000\222\000\000\000\000\000\000\000\000\000\000\000\000\0039\003@\000\227\000\000\000\240\000\000\000\000\000\255\000\000\000\000\000\221\000\000\000\000\000\222\000\000\000\000\000\000\000\000\000\000\000\228\000\000\000\000\000\000\000\232\003A\000\213\000\231\000\000\000\000\000\000\000\000\000\233\000\000\003B\000\234\001\200\003C\000\235\000\236\004J\000\000\000\221\000\000\000\224\000\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\227\000\000\000\000\000\000\000\000\000\240\000\000\000\224\000\255\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\228\000\000\000\000\000\000\000\232\000\227\000\213\000\231\000\000\000\000\000\224\000\000\000\233\000\000\000\221\000\234\000\000\000\222\000\235\000\236\006\"\000\000\000\228\000\000\000\221\000\227\000\000\000\222\000\213\000\231\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\224\000\228\000\000\000\240\000\000\000\000\000\255\000\213\000\231\000\000\000\000\000\000\000\000\000\000\000\000\000\227\000\000\000\000\000\000\000\232\000\221\000\000\000\000\000\222\000\000\000\000\000\000\000\233\000\000\000\000\000\234\000\000\000\228\000\235\000\236\006\133\000\000\000\000\000\213\000\231\000\000\000\232\000\000\000\000\001\171\001\172\000\000\000\000\000\224\000\233\000\000\000\000\000\234\000\000\000\000\000\235\000\236\006\145\000\224\000\240\000\000\000\232\000\255\000\227\001\173\001\187\000\000\001\175\001\176\000\233\000\000\000\000\000\234\000\227\000\000\000\235\000\236\006\171\000\000\000\000\000\228\000\240\000\000\000\000\000\255\000\000\000\213\000\231\000\000\000\000\000\228\000\000\000\232\000\000\000\000\000\224\000\213\000\231\000\000\000\221\000\233\000\240\006\222\000\234\000\255\000\000\000\235\000\236\006\187\000\000\000\227\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\221\000\000\000\000\006\222\000\000\000\000\000\228\000\000\000\000\000\000\000\000\000\240\000\213\000\231\000\255\000\000\000\000\000\000\000\000\000\232\000\000\000\000\000\221\000\000\001\180\000\222\000\000\000\233\000\000\000\232\000\234\001\171\001\172\000\235\000\236\007X\001\181\000\233\000\000\001w\000\234\000\000\000\000\000\235\000\236\007j\000\000\000\000\000\000\000\000\000\000\001\173\003\022\006\224\001\175\001\176\000\000\000\000\000\000\000\240\000\000\000\000\000\255\001\171\001\172\000\000\000\232\000\000\000\227\000\240\000\000\000\000\000\255\000\000\000\233\006\224\000\000\000\234\000\000\000\000\000\235\000\236\007\130\001\173\003\022\000\228\001\175\001\176\000\000\000\000\000\227\000\213\006\227\000\000\000\000\000\000\000\000\000\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\240\000\228\001\198\000\255\000\000\000\000\000\227\000\213\006\227\000\000\000\000\001\199\000\000\001\200\001\179\000\000\000\000\000\221\000\000\000\000\000\222\000\000\000\000\000\228\000\000\000\000\001\180\000\000\000\000\000\213\000\231\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\181\000\000\000\000\001w\000\000\000\000\000\000\000\000\000\000\000\233\000\000\000\000\006\228\000\000\000\000\000\235\000\236\000\000\000\000\000\000\001\180\000\221\000\000\000\000\000\222\006\174\000\000\007\190\000\000\006\230\000\221\000\233\001\181\000\222\006\228\001w\000\000\000\235\000\236\007\219\000\000\000\240\000\000\000\000\000\000\000\232\000\000\006\174\000\000\007\216\000\000\006\230\000\000\000\233\000\224\000\000\000\234\000\000\000\000\000\235\000\236\b\024\000\000\000\240\000\000\000\000\000\000\000\000\000\000\000\227\000\000\007\219\001\198\000\000\000\000\000\000\000\000\000\221\000\000\000\000\000\222\001\199\000\000\001\200\001\179\000\240\000\228\000\000\000\255\000\000\000\000\000\000\000\213\000\231\000\000\007\220\000\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\198\000\224\000\000\000\000\000\000\000\000\000\000\000\227\000\000\001\199\000\000\001\200\001\179\000\000\000\000\000\221\000\227\000\000\000\222\000\000\000\000\000\000\000\000\007\228\000\228\000\000\000\000\000\000\000\000\000\000\000\213\000\231\000\000\000\228\000\000\000\000\000\000\000\000\000\000\000\213\000\231\000\000\000\232\002\219\002\206\001\172\000\000\000\000\000\224\000\000\000\233\000\000\000\000\000\234\000\000\000\000\000\235\000\236\b\"\000\000\000\000\000\000\000\000\000\227\000\000\000\000\005I\000\000\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\000\000\000\000\000\000\000\228\000\000\000\240\000\000\000\232\000\255\000\213\000\231\000\000\000\000\000\224\000\000\000\233\000\232\002\220\000\234\000\000\000\000\000\235\000\236\b\127\000\233\000\000\000\000\000\234\000\227\000\000\000\235\000\236\b\130\000\000\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\000\000\000\000\000\000\000\228\000\000\000\240\000\000\000\000\000\255\000\213\000\231\002\219\002\206\001\172\000\240\000\000\000\000\000\255\002\244\000\000\000\000\000\232\000\000\000\000\000\000\000\000\002\221\000\000\000\000\000\233\000\000\000\000\000\234\000\000\002\246\000\235\000\236\000\000\002\222\000\000\002\210\001w\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\219\002\206\001\172\000\000\000\000\002\221\000\000\000\000\000\000\000\000\000\000\000\000\000\240\000\000\000\232\002\134\000\000\002\222\000\000\002\210\001w\000\000\000\233\003+\000\000\000\234\000\000\000\000\000\235\000\236\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0039\003@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\221\000\000\000\000\002\219\002\206\001\172\000\240\000\000\000\000\002\136\000\000\000\000\002\222\003A\002\210\001w\002\221\0039\003@\002\219\002\206\001\172\003B\000\000\001\200\003C\0038\000\000\002\222\000\000\002\210\001w\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003A\003?\000\000\002\219\002\206\001\172\000\000\000\000\000\000\003B\000\000\001\200\003C\002\221\000\000\000\000\002\219\002\206\001\172\0039\003@\002\219\002\206\001\172\000\000\002\222\003F\002\210\001w\000\000\000\000\000\000\000\000\000\000\000\000\0039\003@\000\000\000\000\003b\000\000\000\000\000\000\003A\003d\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003B\000\000\001\200\003C\000\000\000\000\000\000\003A\000\000\000\000\000\000\000\000\002\221\000\000\000\000\000\000\003B\000\000\001\200\003C\000\000\0039\003@\000\000\002\222\000\000\002\210\001w\002\221\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\219\002\206\001\172\002\222\000\000\002\210\001w\000\000\003A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\221\003B\000\000\001\200\003C\000\000\000\000\003v\000\000\000\000\000\000\000\000\002\222\002\221\002\210\001w\000\000\000\000\002\221\0039\003@\002\219\002\206\001\172\000\000\002\222\000\000\002\210\001w\000\000\002\222\000\000\002\210\001w\000\000\0039\003@\000\000\000\000\002\219\002\206\001\172\000\000\003A\003~\000\000\002\219\002\206\001\172\000\000\000\000\000\000\003B\000\000\001\200\003C\000\000\000\000\000\000\003A\0039\003@\003\146\000\000\000\221\000\000\000\000\000\222\003B\004\018\001\200\003C\000\000\0039\003@\000\000\000\000\000\000\0039\003@\000\000\000\000\000\000\000\000\003A\000\000\002\221\000\000\006\245\002\219\002\206\001\172\000\000\003B\000\000\001\200\003C\003A\002\222\000\000\002\210\001w\003A\000\000\000\000\000\000\003B\000\000\001\200\003C\000\000\003B\005\023\001\200\003C\000\000\006\246\000\000\006\247\000\000\000\000\000\000\000\000\002\221\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\222\000\000\002\210\001w\000\224\000\000\002\221\000\000\000\000\000\000\000\000\0039\003@\002\221\000\000\000\000\000\000\006\248\002\222\000\227\002\210\001w\000\000\000\000\000\000\002\222\000\000\002\210\001w\002\219\002\206\001\172\000\000\000\000\000\000\003A\000\228\000\000\000\000\000\000\000\000\000\000\000\213\000\231\003B\000\000\001\200\003C\0039\003@\000\000\006\249\b)\000\000\000\000\000\000\002\221\002\219\002\206\001\172\000\000\006\250\006\251\000\000\006\252\000\000\0039\003@\002\222\000\000\002\210\001w\003A\0039\003@\000\000\000\000\000\000\000\000\000\000\b8\003B\000\000\001\200\003C\000\000\000\000\006\253\000\000\000\000\003A\000\000\000\000\000\000\000\000\000\000\000\232\003A\000\000\003B\007\232\001\200\003C\000\000\000\233\000\000\003B\000\234\001\200\003C\000\235\000\236\000\000\000\000\000\000\t\b\0039\003@\t\t\006\254\000\000\007\235\000\000\000\000\007\000\007\n\000\000\000\000\000\000\000\000\007\236\002\221\007\232\000\000\000\000\000\000\000\240\0074\000\000\005\135\003A\000\000\000\000\002\222\000\000\002\210\001w\t\b\007\232\003B\t\t\001\200\003C\007\235\000\000\0075\000\000\000\000\000\000\002\221\000\000\000\000\007\236\t\b\007\237\000\000\t\t\000\000\000\000\007\235\000\000\002\222\000\000\002\210\001w\000\000\000\000\000\000\007\236\000\000\000\000\001\171\001\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0039\003@\000\000\000\000\000\000\007\237\000\000\000\000\007\238\000\000\001\173\001\197\000\000\001\175\001\176\000\000\000\000\000\000\007\239\000\000\000\000\007\237\000\000\000\000\003A\000\000\000\000\000\000\0039\003@\000\000\000\000\000\000\003B\000\000\001\200\003C\000\000\t\n\000\000\007\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\171\001\172\007\239\000\000\003A\001\171\001\172\000\000\007\238\007\241\000\000\000\000\000\000\003B\000\000\001\200\003C\000\000\007\239\000\000\001\173\001\208\t\014\001\175\001\176\001\173\001\225\007\242\001\175\001\176\001\171\001\172\007\244\000\000\000\000\000\000\000\000\000\000\t\019\000\000\000\000\007\241\000\000\001\180\000\000\007\246\001\171\001\172\000\000\000\000\001\173\001\238\000\000\001\175\001\176\001\181\000\000\007\241\001w\007\242\000\000\000\000\000\000\007\247\007\244\000\000\001\173\001\255\000\000\001\175\001\176\000\000\000\000\000\000\000\000\007\242\000\000\007\246\000\000\000\000\007\244\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\246\000\000\007\247\000\000\000\000\000\000\000\000\000\000\001\180\000\000\000\000\000\000\000\000\001\180\000\000\000\000\001\171\001\172\007\247\000\000\001\181\000\000\000\000\001w\000\000\001\181\000\000\000\000\001w\000\000\000\000\000\000\000\000\000\000\001\198\000\000\001\173\002+\001\180\001\175\001\176\001\171\001\172\001\199\000\000\001\200\001\179\001\171\001\172\000\000\001\181\000\000\000\000\001w\001\180\001\171\001\172\000\000\000\000\000\000\000\000\001\173\002?\000\000\001\175\001\176\001\181\001\173\002L\001w\001\175\001\176\000\000\000\000\000\000\001\173\002P\000\000\001\175\001\176\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\171\001\172\001\198\000\000\000\000\001\171\001\172\001\198\000\000\000\000\000\000\001\199\000\000\001\200\001\179\000\000\001\199\000\000\001\200\001\179\001\173\002Z\000\000\001\175\001\176\001\173\003\021\001\180\001\175\001\176\001\171\001\172\001\198\000\000\000\000\000\000\000\000\000\000\000\000\001\181\000\000\001\199\001w\001\200\001\179\000\000\000\000\000\000\001\198\000\000\001\173\004N\001\180\001\175\001\176\000\000\000\000\001\199\001\180\001\200\001\179\000\000\000\000\000\000\001\181\007\232\001\180\001w\001\171\001\172\001\181\000\000\000\000\001w\000\000\000\000\001\171\001\172\001\181\000\000\000\000\001w\000\000\007\233\000\000\000\000\007\235\000\000\001\173\b\015\000\000\001\175\001\176\000\000\000\000\007\236\001\173\b\028\000\000\001\175\001\176\001\180\000\000\000\000\000\000\000\000\001\180\000\000\000\000\000\000\000\000\001\198\000\000\001\181\000\000\000\000\001w\000\000\001\181\000\000\001\199\001w\001\200\001\179\000\000\000\000\000\000\000\000\000\000\007\237\000\000\001\180\000\000\000\000\000\000\000\000\001\198\000\000\000\000\000\000\000\000\000\000\001\198\001\181\000\000\001\199\001w\001\200\001\179\000\000\001\198\001\199\000\000\001\200\001\179\000\000\000\000\000\000\000\000\001\199\000\000\001\200\001\179\000\000\007\238\000\000\000\000\000\000\000\000\001\180\000\000\000\000\000\000\000\000\007\239\000\000\000\000\001\180\000\000\000\000\000\000\001\181\000\000\000\000\001w\001\198\000\000\000\000\000\000\001\181\001\198\000\000\001w\000\000\001\199\000\000\001\200\001\179\b\005\001\199\000\000\001\200\001\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\241\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\199\000\000\001\200\001\179\000\000\000\000\000\000\007\242\000\000\000\000\000\000\000\000\007\244\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\246\000\000\000\000\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\198\001\199\000\000\001\200\001\179\000\000\007\247\000\000\000\000\001\199\000\000\001\200\001\179")) and semantic_action = [| @@ -1427,9 +1518,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3832 "mlx/parser.mly" +# 4246 "mlx/parser.mly" ( "+" ) -# 1433 "mlx/parser.ml" +# 1524 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1452,9 +1543,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3833 "mlx/parser.mly" +# 4247 "mlx/parser.mly" ( "+." ) -# 1458 "mlx/parser.ml" +# 1549 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1477,9 +1568,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = -# 3367 "mlx/parser.mly" +# 3669 "mlx/parser.mly" ( _1 ) -# 1483 "mlx/parser.ml" +# 1574 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1492,14 +1583,14 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = tyvar; - MenhirLib.EngineTypes.startp = _startpos_tyvar_; - MenhirLib.EngineTypes.endp = _endpos_tyvar_; + 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 = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -1515,33 +1606,46 @@ module Tables = struct }; }; } = _menhir_stack in - let tyvar : (string) = Obj.magic tyvar in - let _3 : unit = Obj.magic _3 in + let _2_inlined1 : (string) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in let _2 : unit = Obj.magic _2 in let ty : (Parsetree.core_type) = Obj.magic ty in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_ty_ in - let _endpos = _endpos_tyvar_ in + let _endpos = _endpos__2_inlined1_ in let _v : (Parsetree.core_type) = let _1 = - let _1 = -# 3370 "mlx/parser.mly" + let _1 = + let tyvar = + let (_endpos__2_, _2) = (_endpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3617 "mlx/parser.mly" + ( mkrhs _2 _sloc ) +# 1627 "mlx/parser.ml" + + in + +# 3672 "mlx/parser.mly" ( Ptyp_alias(ty, tyvar) ) -# 1530 "mlx/parser.ml" - in - let (_endpos__1_, _startpos__1_) = (_endpos_tyvar_, _startpos_ty_) in +# 1633 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__2_inlined1_, _startpos_ty_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 938 "mlx/parser.mly" +# 1015 "mlx/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 1539 "mlx/parser.ml" +# 1643 "mlx/parser.ml" in -# 3372 "mlx/parser.mly" +# 3674 "mlx/parser.mly" ( _1 ) -# 1545 "mlx/parser.ml" +# 1649 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1588,30 +1692,30 @@ module Tables = struct let _v : (let_binding) = let attrs2 = let _1 = _1_inlined2 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 1594 "mlx/parser.ml" +# 1698 "mlx/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined2_ in let attrs1 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 1603 "mlx/parser.ml" +# 1707 "mlx/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2618 "mlx/parser.mly" +# 2763 "mlx/parser.mly" ( let attrs = attrs1 @ attrs2 in mklb ~loc:_sloc false body attrs ) -# 1615 "mlx/parser.ml" +# 1719 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1629,14 +1733,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t) = 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 : (Ppxlib.longident) = -# 3716 "mlx/parser.mly" + let _v : (Mlx_shim.Longident.t) = +# 4130 "mlx/parser.mly" ( _1 ) -# 1640 "mlx/parser.ml" +# 1744 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1658,141 +1762,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : (Ppxlib.longident) = -# 3717 "mlx/parser.mly" + let _v : (Mlx_shim.Longident.t) = +# 4131 "mlx/parser.mly" ( Lident _1 ) -# 1665 "mlx/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 = _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 : unit = Obj.magic _3 in - let _2 : (Parsetree.core_type) = 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 : (Parsetree.core_type) = -# 3428 "mlx/parser.mly" - ( _2 ) -# 1704 "mlx/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 = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 _5 : unit = Obj.magic _5 in - let _1_inlined3 : (Parsetree.module_type) = Obj.magic _1_inlined3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 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__5_ in - let _v : (Parsetree.core_type) = let _4 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3488 "mlx/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 ) -# 1771 "mlx/parser.ml" - - in - let _3 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 1781 "mlx/parser.ml" - - in - -# 3935 "mlx/parser.mly" - ( _1, _2 ) -# 1787 "mlx/parser.ml" - - in - let _endpos = _endpos__5_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3430 "mlx/parser.mly" - ( wrap_typ_attrs ~loc:_sloc (reloc_typ ~loc:_sloc _4) _3 ) -# 1796 "mlx/parser.ml" +# 1769 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1804,83 +1777,20 @@ module Tables = struct (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 : (string) = 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.core_type) = let _1 = - let _1 = -# 3433 "mlx/parser.mly" - ( Ptyp_var _2 ) -# 1829 "mlx/parser.ml" - in - let _endpos__1_ = _endpos__2_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 938 "mlx/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 1838 "mlx/parser.ml" - - in - -# 3465 "mlx/parser.mly" - ( _1 ) -# 1844 "mlx/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.semv = type_; + MenhirLib.EngineTypes.startp = _startpos_type__; + MenhirLib.EngineTypes.endp = _endpos_type__; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : unit = Obj.magic _1 in + let type_ : (Parsetree.core_type) = Obj.magic type_ in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Parsetree.core_type) = let _1 = - let _1 = -# 3435 "mlx/parser.mly" - ( Ptyp_any ) -# 1870 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 938 "mlx/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 1878 "mlx/parser.ml" - - in - -# 3465 "mlx/parser.mly" - ( _1 ) -# 1884 "mlx/parser.ml" + let _startpos = _startpos_type__ in + let _endpos = _endpos_type__ in + let _v : (Parsetree.core_type) = +# 3850 "mlx/parser.mly" + ( type_ ) +# 1794 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1898,7 +1808,7 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in @@ -1909,35 +1819,35 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 1915 "mlx/parser.ml" +# 1825 "mlx/parser.ml" in let tys = -# 3480 "mlx/parser.mly" +# 3883 "mlx/parser.mly" ( [] ) -# 1921 "mlx/parser.ml" +# 1831 "mlx/parser.ml" in -# 3438 "mlx/parser.mly" - ( Ptyp_constr(tid, tys) ) -# 1926 "mlx/parser.ml" +# 3854 "mlx/parser.mly" + ( Ptyp_constr (tid, tys) ) +# 1836 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 938 "mlx/parser.mly" +# 1015 "mlx/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 1935 "mlx/parser.ml" +# 1845 "mlx/parser.ml" in -# 3465 "mlx/parser.mly" +# 3868 "mlx/parser.mly" ( _1 ) -# 1941 "mlx/parser.ml" +# 1851 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1961,7 +1871,7 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let ty : (Parsetree.core_type) = Obj.magic ty in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_ty_ in @@ -1973,20 +1883,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 1979 "mlx/parser.ml" +# 1889 "mlx/parser.ml" in let tys = -# 3482 "mlx/parser.mly" - ( [ty] ) -# 1985 "mlx/parser.ml" +# 3885 "mlx/parser.mly" + ( [ ty ] ) +# 1895 "mlx/parser.ml" in -# 3438 "mlx/parser.mly" - ( Ptyp_constr(tid, tys) ) -# 1990 "mlx/parser.ml" +# 3854 "mlx/parser.mly" + ( Ptyp_constr (tid, tys) ) +# 1900 "mlx/parser.ml" in let _startpos__1_ = _startpos_ty_ in @@ -1994,15 +1904,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 938 "mlx/parser.mly" +# 1015 "mlx/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2000 "mlx/parser.ml" +# 1910 "mlx/parser.ml" in -# 3465 "mlx/parser.mly" +# 3868 "mlx/parser.mly" ( _1 ) -# 2006 "mlx/parser.ml" +# 1916 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2038,7 +1948,7 @@ module Tables = struct }; }; } = _menhir_stack in - let _1_inlined1 : (Ppxlib.longident) = Obj.magic _1_inlined1 in + let _1_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined1 in let _3 : unit = Obj.magic _3 in let xs : (Parsetree.core_type list) = Obj.magic xs in let _1 : unit = Obj.magic _1 in @@ -2053,9 +1963,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 2059 "mlx/parser.ml" +# 1969 "mlx/parser.ml" in let tys = @@ -2063,24 +1973,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 2067 "mlx/parser.ml" +# 1977 "mlx/parser.ml" in -# 1063 "mlx/parser.mly" +# 1161 "mlx/parser.mly" ( xs ) -# 2072 "mlx/parser.ml" +# 1982 "mlx/parser.ml" in -# 3484 "mlx/parser.mly" +# 3887 "mlx/parser.mly" ( tys ) -# 2078 "mlx/parser.ml" +# 1988 "mlx/parser.ml" in -# 3438 "mlx/parser.mly" - ( Ptyp_constr(tid, tys) ) -# 2084 "mlx/parser.ml" +# 3854 "mlx/parser.mly" + ( Ptyp_constr (tid, tys) ) +# 1994 "mlx/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -2088,118 +1998,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 938 "mlx/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 2094 "mlx/parser.ml" - - in - -# 3465 "mlx/parser.mly" - ( _1 ) -# 2100 "mlx/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 = _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 : unit = Obj.magic _3 in - let _2 : (Parsetree.object_field list * Asttypes.closed_flag) = 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 : (Parsetree.core_type) = let _1 = - let _1 = -# 3440 "mlx/parser.mly" - ( let (f, c) = _2 in Ptyp_object (f, c) ) -# 2140 "mlx/parser.ml" - in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 938 "mlx/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 2149 "mlx/parser.ml" - - in - -# 3465 "mlx/parser.mly" - ( _1 ) -# 2155 "mlx/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.core_type) = let _1 = - let _1 = -# 3442 "mlx/parser.mly" - ( Ptyp_object ([], Closed) ) -# 2188 "mlx/parser.ml" - in - let _endpos__1_ = _endpos__2_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 938 "mlx/parser.mly" +# 1015 "mlx/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2197 "mlx/parser.ml" +# 2004 "mlx/parser.ml" in -# 3465 "mlx/parser.mly" +# 3868 "mlx/parser.mly" ( _1 ) -# 2203 "mlx/parser.ml" +# 2010 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2223,7 +2030,7 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _2 : unit = Obj.magic _2 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__2_ in @@ -2235,20 +2042,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 2241 "mlx/parser.ml" +# 2048 "mlx/parser.ml" in let tys = -# 3480 "mlx/parser.mly" +# 3883 "mlx/parser.mly" ( [] ) -# 2247 "mlx/parser.ml" +# 2054 "mlx/parser.ml" in -# 3446 "mlx/parser.mly" - ( Ptyp_class(cid, tys) ) -# 2252 "mlx/parser.ml" +# 3858 "mlx/parser.mly" + ( Ptyp_class (cid, tys) ) +# 2059 "mlx/parser.ml" in let _startpos__1_ = _startpos__2_ in @@ -2256,15 +2063,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 938 "mlx/parser.mly" +# 1015 "mlx/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2262 "mlx/parser.ml" +# 2069 "mlx/parser.ml" in -# 3465 "mlx/parser.mly" +# 3868 "mlx/parser.mly" ( _1 ) -# 2268 "mlx/parser.ml" +# 2075 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2294,7 +2101,7 @@ module Tables = struct }; }; } = _menhir_stack in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _2 : unit = Obj.magic _2 in let ty : (Parsetree.core_type) = Obj.magic ty in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -2307,20 +2114,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 2313 "mlx/parser.ml" +# 2120 "mlx/parser.ml" in let tys = -# 3482 "mlx/parser.mly" - ( [ty] ) -# 2319 "mlx/parser.ml" +# 3885 "mlx/parser.mly" + ( [ ty ] ) +# 2126 "mlx/parser.ml" in -# 3446 "mlx/parser.mly" - ( Ptyp_class(cid, tys) ) -# 2324 "mlx/parser.ml" +# 3858 "mlx/parser.mly" + ( Ptyp_class (cid, tys) ) +# 2131 "mlx/parser.ml" in let _startpos__1_ = _startpos_ty_ in @@ -2328,15 +2135,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 938 "mlx/parser.mly" +# 1015 "mlx/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2334 "mlx/parser.ml" +# 2141 "mlx/parser.ml" in -# 3465 "mlx/parser.mly" +# 3868 "mlx/parser.mly" ( _1 ) -# 2340 "mlx/parser.ml" +# 2147 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2378,7 +2185,7 @@ module Tables = struct }; }; } = _menhir_stack in - let _1_inlined1 : (Ppxlib.longident) = Obj.magic _1_inlined1 in + let _1_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _3 : unit = Obj.magic _3 in let xs : (Parsetree.core_type list) = Obj.magic xs in @@ -2394,9 +2201,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 2400 "mlx/parser.ml" +# 2207 "mlx/parser.ml" in let tys = @@ -2404,24 +2211,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 2408 "mlx/parser.ml" +# 2215 "mlx/parser.ml" in -# 1063 "mlx/parser.mly" +# 1161 "mlx/parser.mly" ( xs ) -# 2413 "mlx/parser.ml" +# 2220 "mlx/parser.ml" in -# 3484 "mlx/parser.mly" +# 3887 "mlx/parser.mly" ( tys ) -# 2419 "mlx/parser.ml" +# 2226 "mlx/parser.ml" in -# 3446 "mlx/parser.mly" - ( Ptyp_class(cid, tys) ) -# 2425 "mlx/parser.ml" +# 3858 "mlx/parser.mly" + ( Ptyp_class (cid, tys) ) +# 2232 "mlx/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -2429,15 +2236,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 938 "mlx/parser.mly" +# 1015 "mlx/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2435 "mlx/parser.ml" +# 2242 "mlx/parser.ml" in -# 3465 "mlx/parser.mly" +# 3868 "mlx/parser.mly" ( _1 ) -# 2441 "mlx/parser.ml" +# 2248 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2450,9 +2257,9 @@ 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 = type_; + MenhirLib.EngineTypes.startp = _startpos_type__; + MenhirLib.EngineTypes.endp = _endpos_type__; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -2467,32 +2274,44 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : unit = Obj.magic _3 in - let _2 : (Parsetree.row_field) = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let type_ : (Parsetree.core_type) = Obj.magic type_ in + let _2 : unit = Obj.magic _2 in + let _1 : (Mlx_shim.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_type__ in let _v : (Parsetree.core_type) = let _1 = - let _1 = -# 3449 "mlx/parser.mly" - ( Ptyp_variant([_2], Closed, None) ) -# 2481 "mlx/parser.ml" - in - let _endpos__1_ = _endpos__3_ in + let _1 = + let mod_ident = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 2293 "mlx/parser.ml" + + in + +# 3862 "mlx/parser.mly" + ( Ptyp_open (mod_ident, type_) ) +# 2299 "mlx/parser.ml" + + in + let _endpos__1_ = _endpos_type__ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 938 "mlx/parser.mly" +# 1015 "mlx/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2490 "mlx/parser.ml" +# 2309 "mlx/parser.ml" in -# 3465 "mlx/parser.mly" +# 3868 "mlx/parser.mly" ( _1 ) -# 2496 "mlx/parser.ml" +# 2315 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2505,77 +2324,42 @@ module Tables = struct 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.semv = ident; + MenhirLib.EngineTypes.startp = _startpos_ident_; + MenhirLib.EngineTypes.endp = _endpos_ident_; 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; - }; - }; + 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 : (Parsetree.row_field list) = Obj.magic xs in - let _2 : unit = Obj.magic _2 in + let ident : (string) = Obj.magic ident 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 _endpos = _endpos_ident_ in let _v : (Parsetree.core_type) = let _1 = - let _1 = - let _3 = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 2546 "mlx/parser.ml" - in - -# 1035 "mlx/parser.mly" - ( xs ) -# 2551 "mlx/parser.ml" - - in - -# 3494 "mlx/parser.mly" - ( _1 ) -# 2557 "mlx/parser.ml" - - in - -# 3451 "mlx/parser.mly" - ( Ptyp_variant(_3, Closed, None) ) -# 2563 "mlx/parser.ml" - - in - let _endpos__1_ = _endpos__4_ in + let _1 = +# 3864 "mlx/parser.mly" + ( Ptyp_var ident ) +# 2348 "mlx/parser.ml" + in + let _endpos__1_ = _endpos_ident_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 938 "mlx/parser.mly" +# 1015 "mlx/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2573 "mlx/parser.ml" +# 2357 "mlx/parser.ml" in -# 3465 "mlx/parser.mly" +# 3868 "mlx/parser.mly" ( _1 ) -# 2579 "mlx/parser.ml" +# 2363 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2587,85 +2371,35 @@ module Tables = struct (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 = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - 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; - }; - }; - }; - }; + 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 xs : (Parsetree.row_field list) = Obj.magic xs in - let _3 : unit = Obj.magic _3 in - let _2 : (Parsetree.row_field) = 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 _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = let _1 = - let _1 = - let _4 = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 2636 "mlx/parser.ml" - in - -# 1035 "mlx/parser.mly" - ( xs ) -# 2641 "mlx/parser.ml" - - in - -# 3494 "mlx/parser.mly" - ( _1 ) -# 2647 "mlx/parser.ml" - - in - -# 3453 "mlx/parser.mly" - ( Ptyp_variant(_2 :: _4, Closed, None) ) -# 2653 "mlx/parser.ml" - - in - let _endpos__1_ = _endpos__5_ in + let _1 = +# 3866 "mlx/parser.mly" + ( Ptyp_any ) +# 2389 "mlx/parser.ml" + in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 938 "mlx/parser.mly" +# 1015 "mlx/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2663 "mlx/parser.ml" +# 2397 "mlx/parser.ml" in -# 3465 "mlx/parser.mly" +# 3868 "mlx/parser.mly" ( _1 ) -# 2669 "mlx/parser.ml" +# 2403 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2677,78 +2411,35 @@ module Tables = struct (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; - }; - }; - }; + 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 : (Parsetree.row_field list) = Obj.magic xs in - let _2 : (unit option) = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _1 : (string) = 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.core_type) = let _1 = - let _1 = - let _3 = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 2719 "mlx/parser.ml" - in - -# 1035 "mlx/parser.mly" - ( xs ) -# 2724 "mlx/parser.ml" - - in - -# 3494 "mlx/parser.mly" - ( _1 ) -# 2730 "mlx/parser.ml" - - in - -# 3455 "mlx/parser.mly" - ( Ptyp_variant(_3, Open, None) ) -# 2736 "mlx/parser.ml" - - in - let _endpos__1_ = _endpos__4_ in + let _endpos = _endpos__1_ in + let _v : (Dune__exe__Ast_helper.str) = let _1 = + let _1 = +# 4314 "mlx/parser.mly" + ( _1 ) +# 2429 "mlx/parser.ml" + in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 938 "mlx/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 2746 "mlx/parser.ml" +# 1008 "mlx/parser.mly" + ( mkloc _1 (make_loc _sloc) ) +# 2437 "mlx/parser.ml" in -# 3465 "mlx/parser.mly" - ( _1 ) -# 2752 "mlx/parser.ml" +# 4316 "mlx/parser.mly" + ( _1 ) +# 2443 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2761,42 +2452,74 @@ module Tables = struct 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.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 : (Dune__exe__Ast_helper.str) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _1 : (string) = 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.core_type) = let _1 = + let _endpos = _endpos__3_ in + let _v : (Dune__exe__Ast_helper.str) = let _1 = let _1 = -# 3457 "mlx/parser.mly" - ( Ptyp_variant([], Open, None) ) -# 2785 "mlx/parser.ml" +# 4315 "mlx/parser.mly" + ( _1 ^ "." ^ _3.txt ) +# 2483 "mlx/parser.ml" in - let _endpos__1_ = _endpos__2_ in + let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 938 "mlx/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 2794 "mlx/parser.ml" +# 1008 "mlx/parser.mly" + ( mkloc _1 (make_loc _sloc) ) +# 2492 "mlx/parser.ml" in -# 3465 "mlx/parser.mly" - ( _1 ) -# 2800 "mlx/parser.ml" +# 4316 "mlx/parser.mly" + ( _1 ) +# 2498 "mlx/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) = +# 4371 "mlx/parser.mly" + ( _1 ) +# 2523 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2814,9 +2537,9 @@ module Tables = struct 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.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -2833,53 +2556,19 @@ module Tables = struct }; } = _menhir_stack in let _4 : unit = Obj.magic _4 in - let xs : (Parsetree.row_field list) = Obj.magic xs in - let _2 : (unit option) = Obj.magic _2 in + let _3 : (Parsetree.payload) = Obj.magic _3 in + let _2 : (Dune__exe__Ast_helper.str) = 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.core_type) = let _1 = - let _1 = - let _3 = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 2850 "mlx/parser.ml" - in - -# 1035 "mlx/parser.mly" - ( xs ) -# 2855 "mlx/parser.ml" - - in - -# 3494 "mlx/parser.mly" - ( _1 ) -# 2861 "mlx/parser.ml" - - in - -# 3459 "mlx/parser.mly" - ( Ptyp_variant(_3, Closed, Some []) ) -# 2867 "mlx/parser.ml" - - in - let _endpos__1_ = _endpos__4_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 938 "mlx/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 2877 "mlx/parser.ml" - - in + let _v : (Parsetree.attribute) = let _endpos = _endpos__4_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3465 "mlx/parser.mly" - ( _1 ) -# 2883 "mlx/parser.ml" +# 4320 "mlx/parser.mly" + ( mk_attr ~loc:(make_loc _sloc) _2 _3 ) +# 2572 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2891,321 +2580,20 @@ module Tables = struct (fun _menhir_env -> 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.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs_inlined1; - MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; - MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; - 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 = 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; - }; - }; - }; - }; - }; + 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 : unit = Obj.magic _6 in - let xs_inlined1 : (string list) = Obj.magic xs_inlined1 in - let _4 : unit = Obj.magic _4 in - let xs : (Parsetree.row_field list) = Obj.magic xs in - let _2 : (unit option) = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.class_expr) = 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 : (Parsetree.core_type) = let _1 = - let _1 = - let _5 = - let xs = xs_inlined1 in - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 2948 "mlx/parser.ml" - in - -# 1003 "mlx/parser.mly" - ( xs ) -# 2953 "mlx/parser.ml" - - in - -# 3522 "mlx/parser.mly" - ( _1 ) -# 2959 "mlx/parser.ml" - - in - let _3 = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 2967 "mlx/parser.ml" - in - -# 1035 "mlx/parser.mly" - ( xs ) -# 2972 "mlx/parser.ml" - - in - -# 3494 "mlx/parser.mly" - ( _1 ) -# 2978 "mlx/parser.ml" - - in - -# 3461 "mlx/parser.mly" - ( Ptyp_variant(_3, Closed, Some _5) ) -# 2984 "mlx/parser.ml" - - in - let _endpos__1_ = _endpos__6_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 938 "mlx/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 2994 "mlx/parser.ml" - - in - -# 3465 "mlx/parser.mly" - ( _1 ) -# 3000 "mlx/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.extension) = 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.core_type) = let _1 = - let _1 = -# 3463 "mlx/parser.mly" - ( Ptyp_extension _1 ) -# 3026 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 938 "mlx/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 3034 "mlx/parser.ml" - - in - -# 3465 "mlx/parser.mly" - ( _1 ) -# 3040 "mlx/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 : (string) = 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 Ppxlib.loc) = let _1 = - let _1 = -# 3899 "mlx/parser.mly" - ( _1 ) -# 3066 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 931 "mlx/parser.mly" - ( mkloc _1 (make_loc _sloc) ) -# 3074 "mlx/parser.ml" - - in - -# 3901 "mlx/parser.mly" - ( _1 ) -# 3080 "mlx/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 = _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 : (string Ppxlib.loc) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (string) = 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 Ppxlib.loc) = let _1 = - let _1 = -# 3900 "mlx/parser.mly" - ( _1 ^ "." ^ _3.txt ) -# 3120 "mlx/parser.ml" - in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 931 "mlx/parser.mly" - ( mkloc _1 (make_loc _sloc) ) -# 3129 "mlx/parser.ml" - - in - -# 3901 "mlx/parser.mly" - ( _1 ) -# 3135 "mlx/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 : (Parsetree.payload) = Obj.magic _3 in - let _2 : (string Ppxlib.loc) = 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.attribute) = let _endpos = _endpos__4_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3905 "mlx/parser.mly" - ( Attr.mk ~loc:(make_loc _sloc) _2 _3 ) -# 3184 "mlx/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.class_expr) = 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.class_expr) = -# 1895 "mlx/parser.mly" - ( _1 ) -# 3209 "mlx/parser.ml" + let _endpos = _endpos__1_ in + let _v : (Parsetree.class_expr) = +# 1991 "mlx/parser.mly" + ( _1 ) +# 2597 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3244,18 +2632,18 @@ module Tables = struct let _v : (Parsetree.class_expr) = let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 3250 "mlx/parser.ml" +# 2638 "mlx/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1897 "mlx/parser.mly" +# 1993 "mlx/parser.mly" ( wrap_class_attrs ~loc:_sloc _3 _2 ) -# 3259 "mlx/parser.ml" +# 2647 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3295,9 +2683,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1899 "mlx/parser.mly" +# 1995 "mlx/parser.mly" ( class_of_let_bindings ~loc:_sloc _1 _3 ) -# 3301 "mlx/parser.ml" +# 2689 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3347,7 +2735,7 @@ module Tables = struct } = _menhir_stack in let _7 : (Parsetree.class_expr) = Obj.magic _7 in let _6 : unit = Obj.magic _6 in - let _1_inlined2 : (Ppxlib.longident) = Obj.magic _1_inlined2 in + let _1_inlined2 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined2 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in @@ -3360,34 +2748,34 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 3366 "mlx/parser.ml" +# 2754 "mlx/parser.ml" in let _endpos__5_ = _endpos__1_inlined2_ in let _4 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 3375 "mlx/parser.ml" +# 2763 "mlx/parser.ml" in let _3 = -# 3824 "mlx/parser.mly" +# 4238 "mlx/parser.mly" ( Fresh ) -# 3381 "mlx/parser.ml" +# 2769 "mlx/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1901 "mlx/parser.mly" +# 1997 "mlx/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)) ) -# 3391 "mlx/parser.ml" +# 2779 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3443,7 +2831,7 @@ module Tables = struct } = _menhir_stack in let _7 : (Parsetree.class_expr) = Obj.magic _7 in let _6 : unit = Obj.magic _6 in - let _1_inlined3 : (Ppxlib.longident) = Obj.magic _1_inlined3 in + let _1_inlined3 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined3 in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in @@ -3457,37 +2845,37 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 3463 "mlx/parser.ml" +# 2851 "mlx/parser.ml" in let _endpos__5_ = _endpos__1_inlined3_ in let _4 = let _1 = _1_inlined2 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 3472 "mlx/parser.ml" +# 2860 "mlx/parser.ml" in let _3 = let _1 = _1_inlined1 in -# 3825 "mlx/parser.mly" +# 4239 "mlx/parser.mly" ( Override ) -# 3480 "mlx/parser.ml" +# 2868 "mlx/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1901 "mlx/parser.mly" +# 1997 "mlx/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)) ) -# 3491 "mlx/parser.ml" +# 2879 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3517,9 +2905,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.class_expr) = -# 1905 "mlx/parser.mly" +# 2001 "mlx/parser.mly" ( Cl.attr _1 _2 ) -# 3523 "mlx/parser.ml" +# 2911 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3554,18 +2942,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 3558 "mlx/parser.ml" +# 2946 "mlx/parser.ml" in -# 1003 "mlx/parser.mly" +# 1080 "mlx/parser.mly" ( xs ) -# 3563 "mlx/parser.ml" +# 2951 "mlx/parser.ml" in -# 1908 "mlx/parser.mly" +# 2004 "mlx/parser.mly" ( Pcl_apply(_1, _2) ) -# 3569 "mlx/parser.ml" +# 2957 "mlx/parser.ml" in let _endpos__1_ = _endpos_xs_ in @@ -3573,15 +2961,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 954 "mlx/parser.mly" +# 1031 "mlx/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 3579 "mlx/parser.ml" +# 2967 "mlx/parser.ml" in -# 1911 "mlx/parser.mly" +# 2007 "mlx/parser.mly" ( _1 ) -# 3585 "mlx/parser.ml" +# 2973 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3605,23 +2993,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 1910 "mlx/parser.mly" +# 2006 "mlx/parser.mly" ( Pcl_extension _1 ) -# 3611 "mlx/parser.ml" +# 2999 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 954 "mlx/parser.mly" +# 1031 "mlx/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 3619 "mlx/parser.ml" +# 3007 "mlx/parser.ml" in -# 1911 "mlx/parser.mly" +# 2007 "mlx/parser.mly" ( _1 ) -# 3625 "mlx/parser.ml" +# 3013 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3674,33 +3062,33 @@ module Tables = struct let _v : (Parsetree.class_field) = let _6 = let _1 = _1_inlined2 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 3680 "mlx/parser.ml" +# 3068 "mlx/parser.ml" in let _endpos__6_ = _endpos__1_inlined2_ in let _3 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 3689 "mlx/parser.ml" +# 3077 "mlx/parser.ml" in let _2 = -# 3824 "mlx/parser.mly" +# 4238 "mlx/parser.mly" ( Fresh ) -# 3695 "mlx/parser.ml" +# 3083 "mlx/parser.ml" in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1960 "mlx/parser.mly" +# 2056 "mlx/parser.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_inherit (_2, _4, self)) ~attrs:(_3@_6) ~docs ) -# 3704 "mlx/parser.ml" +# 3092 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3760,36 +3148,36 @@ module Tables = struct let _v : (Parsetree.class_field) = let _6 = let _1 = _1_inlined3 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 3766 "mlx/parser.ml" +# 3154 "mlx/parser.ml" in let _endpos__6_ = _endpos__1_inlined3_ in let _3 = let _1 = _1_inlined2 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 3775 "mlx/parser.ml" +# 3163 "mlx/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3825 "mlx/parser.mly" +# 4239 "mlx/parser.mly" ( Override ) -# 3783 "mlx/parser.ml" +# 3171 "mlx/parser.ml" in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1960 "mlx/parser.mly" +# 2056 "mlx/parser.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_inherit (_2, _4, self)) ~attrs:(_3@_6) ~docs ) -# 3793 "mlx/parser.ml" +# 3181 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3829,9 +3217,9 @@ module Tables = struct let _v : (Parsetree.class_field) = let _3 = let _1 = _1_inlined1 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 3835 "mlx/parser.ml" +# 3223 "mlx/parser.ml" in let _endpos__3_ = _endpos__1_inlined1_ in @@ -3839,11 +3227,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1963 "mlx/parser.mly" +# 2059 "mlx/parser.mly" ( let v, attrs = _2 in let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_val v) ~attrs:(attrs@_3) ~docs ) -# 3847 "mlx/parser.ml" +# 3235 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3883,9 +3271,9 @@ module Tables = struct let _v : (Parsetree.class_field) = let _3 = let _1 = _1_inlined1 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 3889 "mlx/parser.ml" +# 3277 "mlx/parser.ml" in let _endpos__3_ = _endpos__1_inlined1_ in @@ -3893,11 +3281,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1967 "mlx/parser.mly" +# 2063 "mlx/parser.mly" ( let meth, attrs = _2 in let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_method meth) ~attrs:(attrs@_3) ~docs ) -# 3901 "mlx/parser.ml" +# 3289 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3943,28 +3331,28 @@ module Tables = struct let _v : (Parsetree.class_field) = let _4 = let _1 = _1_inlined2 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 3949 "mlx/parser.ml" +# 3337 "mlx/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 3958 "mlx/parser.ml" +# 3346 "mlx/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1971 "mlx/parser.mly" +# 2067 "mlx/parser.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_constraint _3) ~attrs:(_2@_4) ~docs ) -# 3968 "mlx/parser.ml" +# 3356 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4010,28 +3398,28 @@ module Tables = struct let _v : (Parsetree.class_field) = let _4 = let _1 = _1_inlined2 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 4016 "mlx/parser.ml" +# 3404 "mlx/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 4025 "mlx/parser.ml" +# 3413 "mlx/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1974 "mlx/parser.mly" +# 2070 "mlx/parser.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_initializer _3) ~attrs:(_2@_4) ~docs ) -# 4035 "mlx/parser.ml" +# 3423 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4063,9 +3451,9 @@ module Tables = struct let _v : (Parsetree.class_field) = let _2 = let _1 = _1_inlined1 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 4069 "mlx/parser.ml" +# 3457 "mlx/parser.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -4073,10 +3461,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1977 "mlx/parser.mly" +# 2073 "mlx/parser.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_extension _1) ~attrs:_2 ~docs ) -# 4080 "mlx/parser.ml" +# 3468 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4100,23 +3488,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.class_field) = let _1 = let _1 = -# 1980 "mlx/parser.mly" +# 2076 "mlx/parser.mly" ( Pcf_attribute _1 ) -# 4106 "mlx/parser.ml" +# 3494 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 952 "mlx/parser.mly" +# 1029 "mlx/parser.mly" ( mkcf ~loc:_sloc _1 ) -# 4114 "mlx/parser.ml" +# 3502 "mlx/parser.ml" in -# 1981 "mlx/parser.mly" +# 2077 "mlx/parser.mly" ( _1 ) -# 4120 "mlx/parser.ml" +# 3508 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4146,9 +3534,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.class_expr) = -# 1875 "mlx/parser.mly" +# 1971 "mlx/parser.mly" ( _2 ) -# 4152 "mlx/parser.ml" +# 3540 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4193,24 +3581,24 @@ module Tables = struct let _endpos = _endpos__4_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 1878 "mlx/parser.mly" +# 1974 "mlx/parser.mly" ( Pcl_constraint(_4, _2) ) -# 4199 "mlx/parser.ml" +# 3587 "mlx/parser.ml" in let _endpos__1_ = _endpos__4_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 954 "mlx/parser.mly" +# 1031 "mlx/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 4208 "mlx/parser.ml" +# 3596 "mlx/parser.ml" in -# 1881 "mlx/parser.mly" +# 1977 "mlx/parser.mly" ( _1 ) -# 4214 "mlx/parser.ml" +# 3602 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4241,24 +3629,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 1880 "mlx/parser.mly" +# 1976 "mlx/parser.mly" ( let (l,o,p) = _1 in Pcl_fun(l, o, p, _2) ) -# 4247 "mlx/parser.ml" +# 3635 "mlx/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 954 "mlx/parser.mly" +# 1031 "mlx/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 4256 "mlx/parser.ml" +# 3644 "mlx/parser.ml" in -# 1881 "mlx/parser.mly" +# 1977 "mlx/parser.mly" ( _1 ) -# 4262 "mlx/parser.ml" +# 3650 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4296,24 +3684,24 @@ module Tables = struct let _endpos = _endpos_e_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 1936 "mlx/parser.mly" +# 2032 "mlx/parser.mly" ( let (l,o,p) = _1 in Pcl_fun(l, o, p, e) ) -# 4302 "mlx/parser.ml" +# 3690 "mlx/parser.ml" in let _endpos__1_ = _endpos_e_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 954 "mlx/parser.mly" +# 1031 "mlx/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 4311 "mlx/parser.ml" +# 3699 "mlx/parser.ml" in -# 1937 "mlx/parser.mly" +# 2033 "mlx/parser.mly" ( _1 ) -# 4317 "mlx/parser.ml" +# 3705 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4344,24 +3732,24 @@ module Tables = struct let _endpos = _endpos_e_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 1936 "mlx/parser.mly" +# 2032 "mlx/parser.mly" ( let (l,o,p) = _1 in Pcl_fun(l, o, p, e) ) -# 4350 "mlx/parser.ml" +# 3738 "mlx/parser.ml" in let _endpos__1_ = _endpos_e_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 954 "mlx/parser.mly" +# 1031 "mlx/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 4359 "mlx/parser.ml" +# 3747 "mlx/parser.ml" in -# 1937 "mlx/parser.mly" +# 2033 "mlx/parser.mly" ( _1 ) -# 4365 "mlx/parser.ml" +# 3753 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4379,14 +3767,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t) = 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 : (Ppxlib.longident) = -# 3706 "mlx/parser.mly" + let _v : (Mlx_shim.Longident.t) = +# 4120 "mlx/parser.mly" ( _1 ) -# 4390 "mlx/parser.ml" +# 3778 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4426,9 +3814,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1945 "mlx/parser.mly" +# 2041 "mlx/parser.mly" ( reloc_pat ~loc:_sloc _2 ) -# 4432 "mlx/parser.ml" +# 3820 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4480,24 +3868,24 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 1947 "mlx/parser.mly" +# 2043 "mlx/parser.mly" ( Ppat_constraint(_2, _4) ) -# 4486 "mlx/parser.ml" +# 3874 "mlx/parser.ml" in let _endpos__1_ = _endpos__5_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 4495 "mlx/parser.ml" +# 3883 "mlx/parser.ml" in -# 1948 "mlx/parser.mly" +# 2044 "mlx/parser.mly" ( _1 ) -# 4501 "mlx/parser.ml" +# 3889 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4516,9 +3904,9 @@ module Tables = struct let _symbolstartpos = _endpos in let _sloc = (_symbolstartpos, _endpos) in -# 1950 "mlx/parser.mly" +# 2046 "mlx/parser.mly" ( ghpat ~loc:_sloc Ppat_any ) -# 4522 "mlx/parser.ml" +# 3910 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4555,9 +3943,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.core_type) = -# 2075 "mlx/parser.mly" +# 2171 "mlx/parser.mly" ( _2 ) -# 4561 "mlx/parser.ml" +# 3949 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4572,26 +3960,13 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in - let _v : (Parsetree.core_type) = let _1 = - let _1 = -# 2076 "mlx/parser.mly" - ( Ptyp_any ) -# 4580 "mlx/parser.ml" - in - let _endpos__1_ = _endpos__0_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _endpos in - let _sloc = (_symbolstartpos, _endpos) in - -# 938 "mlx/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 4589 "mlx/parser.ml" - - in + let _v : (Parsetree.core_type) = let _endpos = _endpos__0_ in + let _symbolstartpos = _endpos in + let _sloc = (_symbolstartpos, _endpos) in -# 2077 "mlx/parser.mly" - ( _1 ) -# 4595 "mlx/parser.ml" +# 2173 "mlx/parser.mly" + ( ghtyp ~loc:_sloc Ptyp_any ) +# 3970 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4637,28 +4012,28 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _4 = let _1 = _1_inlined2 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 4643 "mlx/parser.ml" +# 4018 "mlx/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 4652 "mlx/parser.ml" +# 4027 "mlx/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2085 "mlx/parser.mly" +# 2181 "mlx/parser.mly" ( let docs = symbol_docs _sloc in mkctf ~loc:_sloc (Pctf_inherit _3) ~attrs:(_2@_4) ~docs ) -# 4662 "mlx/parser.ml" +# 4037 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4716,9 +4091,9 @@ module Tables = struct let ty : (Parsetree.core_type) = Obj.magic ty in let _3 : unit = Obj.magic _3 in let _1_inlined2 : ( -# 714 "mlx/parser.mly" +# 786 "mlx/parser.mly" (string) -# 4722 "mlx/parser.ml" +# 4097 "mlx/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 @@ -4729,9 +4104,9 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _4 = let _1 = _1_inlined3 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 4735 "mlx/parser.ml" +# 4110 "mlx/parser.ml" in let _endpos__4_ = _endpos__1_inlined3_ in @@ -4739,44 +4114,44 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let label = let _1 = -# 3562 "mlx/parser.mly" +# 3967 "mlx/parser.mly" ( _1 ) -# 4745 "mlx/parser.ml" +# 4120 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 4753 "mlx/parser.ml" +# 4128 "mlx/parser.ml" in -# 2110 "mlx/parser.mly" +# 2206 "mlx/parser.mly" ( let mut, virt = flags in label, mut, virt, ty ) -# 4762 "mlx/parser.ml" +# 4137 "mlx/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 4770 "mlx/parser.ml" +# 4145 "mlx/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2088 "mlx/parser.mly" +# 2184 "mlx/parser.mly" ( let docs = symbol_docs _sloc in mkctf ~loc:_sloc (Pctf_val _3) ~attrs:(_2@_4) ~docs ) -# 4780 "mlx/parser.ml" +# 4155 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4834,9 +4209,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 : ( -# 714 "mlx/parser.mly" +# 786 "mlx/parser.mly" (string) -# 4840 "mlx/parser.ml" +# 4215 "mlx/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 @@ -4847,53 +4222,53 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _7 = let _1 = _1_inlined4 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 4853 "mlx/parser.ml" +# 4228 "mlx/parser.ml" in let _endpos__7_ = _endpos__1_inlined4_ in let _6 = let _1 = _1_inlined3 in -# 3333 "mlx/parser.mly" +# 3635 "mlx/parser.mly" ( _1 ) -# 4862 "mlx/parser.ml" +# 4237 "mlx/parser.ml" in let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let _1 = -# 3562 "mlx/parser.mly" +# 3967 "mlx/parser.mly" ( _1 ) -# 4870 "mlx/parser.ml" +# 4245 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 4878 "mlx/parser.ml" +# 4253 "mlx/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 4886 "mlx/parser.ml" +# 4261 "mlx/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2092 "mlx/parser.mly" +# 2188 "mlx/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 ) -# 4897 "mlx/parser.ml" +# 4272 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4939,28 +4314,28 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _4 = let _1 = _1_inlined2 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 4945 "mlx/parser.ml" +# 4320 "mlx/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 4954 "mlx/parser.ml" +# 4329 "mlx/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2096 "mlx/parser.mly" +# 2192 "mlx/parser.mly" ( let docs = symbol_docs _sloc in mkctf ~loc:_sloc (Pctf_constraint _3) ~attrs:(_2@_4) ~docs ) -# 4964 "mlx/parser.ml" +# 4339 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4992,9 +4367,9 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _2 = let _1 = _1_inlined1 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 4998 "mlx/parser.ml" +# 4373 "mlx/parser.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -5002,10 +4377,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2099 "mlx/parser.mly" +# 2195 "mlx/parser.mly" ( let docs = symbol_docs _sloc in mkctf ~loc:_sloc (Pctf_extension _1) ~attrs:_2 ~docs ) -# 5009 "mlx/parser.ml" +# 4384 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5029,23 +4404,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.class_type_field) = let _1 = let _1 = -# 2102 "mlx/parser.mly" +# 2198 "mlx/parser.mly" ( Pctf_attribute _1 ) -# 5035 "mlx/parser.ml" +# 4410 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 950 "mlx/parser.mly" +# 1027 "mlx/parser.mly" ( mkctf ~loc:_sloc _1 ) -# 5043 "mlx/parser.ml" +# 4418 "mlx/parser.ml" in -# 2103 "mlx/parser.mly" +# 2199 "mlx/parser.mly" ( _1 ) -# 5049 "mlx/parser.ml" +# 4424 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5063,7 +4438,7 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in @@ -5074,42 +4449,42 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 5080 "mlx/parser.ml" +# 4455 "mlx/parser.ml" in let tys = let tys = -# 2061 "mlx/parser.mly" +# 2157 "mlx/parser.mly" ( [] ) -# 5087 "mlx/parser.ml" +# 4462 "mlx/parser.ml" in -# 2067 "mlx/parser.mly" +# 2163 "mlx/parser.mly" ( tys ) -# 5092 "mlx/parser.ml" +# 4467 "mlx/parser.ml" in -# 2044 "mlx/parser.mly" +# 2140 "mlx/parser.mly" ( Pcty_constr (cid, tys) ) -# 5098 "mlx/parser.ml" +# 4473 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 948 "mlx/parser.mly" +# 1025 "mlx/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 5107 "mlx/parser.ml" +# 4482 "mlx/parser.ml" in -# 2047 "mlx/parser.mly" +# 2143 "mlx/parser.mly" ( _1 ) -# 5113 "mlx/parser.ml" +# 4488 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5145,7 +4520,7 @@ module Tables = struct }; }; } = _menhir_stack in - let _1_inlined1 : (Ppxlib.longident) = Obj.magic _1_inlined1 in + let _1_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined1 in let _3 : unit = Obj.magic _3 in let xs : (Parsetree.core_type list) = Obj.magic xs in let _1 : unit = Obj.magic _1 in @@ -5160,9 +4535,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 5166 "mlx/parser.ml" +# 4541 "mlx/parser.ml" in let tys = @@ -5171,30 +4546,30 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 5175 "mlx/parser.ml" +# 4550 "mlx/parser.ml" in -# 1035 "mlx/parser.mly" +# 1133 "mlx/parser.mly" ( xs ) -# 5180 "mlx/parser.ml" +# 4555 "mlx/parser.ml" in -# 2063 "mlx/parser.mly" +# 2159 "mlx/parser.mly" ( params ) -# 5186 "mlx/parser.ml" +# 4561 "mlx/parser.ml" in -# 2067 "mlx/parser.mly" +# 2163 "mlx/parser.mly" ( tys ) -# 5192 "mlx/parser.ml" +# 4567 "mlx/parser.ml" in -# 2044 "mlx/parser.mly" +# 2140 "mlx/parser.mly" ( Pcty_constr (cid, tys) ) -# 5198 "mlx/parser.ml" +# 4573 "mlx/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -5202,15 +4577,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 948 "mlx/parser.mly" +# 1025 "mlx/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 5208 "mlx/parser.ml" +# 4583 "mlx/parser.ml" in -# 2047 "mlx/parser.mly" +# 2143 "mlx/parser.mly" ( _1 ) -# 5214 "mlx/parser.ml" +# 4589 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5234,23 +4609,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.class_type) = let _1 = let _1 = -# 2046 "mlx/parser.mly" +# 2142 "mlx/parser.mly" ( Pcty_extension _1 ) -# 5240 "mlx/parser.ml" +# 4615 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 948 "mlx/parser.mly" +# 1025 "mlx/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 5248 "mlx/parser.ml" +# 4623 "mlx/parser.ml" in -# 2047 "mlx/parser.mly" +# 2143 "mlx/parser.mly" ( _1 ) -# 5254 "mlx/parser.ml" +# 4629 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5307,44 +4682,44 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 5311 "mlx/parser.ml" +# 4686 "mlx/parser.ml" in -# 2081 "mlx/parser.mly" +# 2177 "mlx/parser.mly" ( _1 ) -# 5316 "mlx/parser.ml" +# 4691 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 896 "mlx/parser.mly" +# 973 "mlx/parser.mly" ( extra_csig _startpos _endpos _1 ) -# 5325 "mlx/parser.ml" +# 4700 "mlx/parser.ml" in -# 2071 "mlx/parser.mly" +# 2167 "mlx/parser.mly" ( Csig.mk _1 _2 ) -# 5331 "mlx/parser.ml" +# 4706 "mlx/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 5339 "mlx/parser.ml" +# 4714 "mlx/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2049 "mlx/parser.mly" +# 2145 "mlx/parser.mly" ( mkcty ~loc:_sloc ~attrs:_2 (Pcty_signature _3) ) -# 5348 "mlx/parser.ml" +# 4723 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5401,43 +4776,43 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 5405 "mlx/parser.ml" +# 4780 "mlx/parser.ml" in -# 2081 "mlx/parser.mly" +# 2177 "mlx/parser.mly" ( _1 ) -# 5410 "mlx/parser.ml" +# 4785 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 896 "mlx/parser.mly" +# 973 "mlx/parser.mly" ( extra_csig _startpos _endpos _1 ) -# 5419 "mlx/parser.ml" +# 4794 "mlx/parser.ml" in -# 2071 "mlx/parser.mly" +# 2167 "mlx/parser.mly" ( Csig.mk _1 _2 ) -# 5425 "mlx/parser.ml" +# 4800 "mlx/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 5433 "mlx/parser.ml" +# 4808 "mlx/parser.ml" in let _loc__4_ = (_startpos__4_, _endpos__4_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2051 "mlx/parser.mly" +# 2147 "mlx/parser.mly" ( unclosed "object" _loc__1_ "end" _loc__4_ ) -# 5441 "mlx/parser.ml" +# 4816 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5467,9 +4842,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.class_type) = -# 2053 "mlx/parser.mly" +# 2149 "mlx/parser.mly" ( Cty.attr _1 _2 ) -# 5473 "mlx/parser.ml" +# 4848 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5519,7 +4894,7 @@ module Tables = struct } = _menhir_stack in let _7 : (Parsetree.class_type) = Obj.magic _7 in let _6 : unit = Obj.magic _6 in - let _1_inlined2 : (Ppxlib.longident) = Obj.magic _1_inlined2 in + let _1_inlined2 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined2 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in @@ -5532,34 +4907,34 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 5538 "mlx/parser.ml" +# 4913 "mlx/parser.ml" in let _endpos__5_ = _endpos__1_inlined2_ in let _4 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 5547 "mlx/parser.ml" +# 4922 "mlx/parser.ml" in let _3 = -# 3824 "mlx/parser.mly" +# 4238 "mlx/parser.mly" ( Fresh ) -# 5553 "mlx/parser.ml" +# 4928 "mlx/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2055 "mlx/parser.mly" +# 2151 "mlx/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)) ) -# 5563 "mlx/parser.ml" +# 4938 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5615,7 +4990,7 @@ module Tables = struct } = _menhir_stack in let _7 : (Parsetree.class_type) = Obj.magic _7 in let _6 : unit = Obj.magic _6 in - let _1_inlined3 : (Ppxlib.longident) = Obj.magic _1_inlined3 in + let _1_inlined3 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined3 in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in @@ -5629,37 +5004,37 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 5635 "mlx/parser.ml" +# 5010 "mlx/parser.ml" in let _endpos__5_ = _endpos__1_inlined3_ in let _4 = let _1 = _1_inlined2 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 5644 "mlx/parser.ml" +# 5019 "mlx/parser.ml" in let _3 = let _1 = _1_inlined1 in -# 3825 "mlx/parser.mly" +# 4239 "mlx/parser.mly" ( Override ) -# 5652 "mlx/parser.ml" +# 5027 "mlx/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2055 "mlx/parser.mly" +# 2151 "mlx/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)) ) -# 5663 "mlx/parser.ml" +# 5038 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5696,9 +5071,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.class_expr) = -# 1915 "mlx/parser.mly" +# 2011 "mlx/parser.mly" ( _2 ) -# 5702 "mlx/parser.ml" +# 5077 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5737,9 +5112,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 -# 1917 "mlx/parser.mly" +# 2013 "mlx/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 5743 "mlx/parser.ml" +# 5118 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5757,7 +5132,7 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in @@ -5768,42 +5143,42 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 5774 "mlx/parser.ml" +# 5149 "mlx/parser.ml" in let tys = let tys = -# 2061 "mlx/parser.mly" +# 2157 "mlx/parser.mly" ( [] ) -# 5781 "mlx/parser.ml" +# 5156 "mlx/parser.ml" in -# 2067 "mlx/parser.mly" +# 2163 "mlx/parser.mly" ( tys ) -# 5786 "mlx/parser.ml" +# 5161 "mlx/parser.ml" in -# 1920 "mlx/parser.mly" +# 2016 "mlx/parser.mly" ( Pcl_constr(cid, tys) ) -# 5792 "mlx/parser.ml" +# 5167 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 954 "mlx/parser.mly" +# 1031 "mlx/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 5801 "mlx/parser.ml" +# 5176 "mlx/parser.ml" in -# 1927 "mlx/parser.mly" +# 2023 "mlx/parser.mly" ( _1 ) -# 5807 "mlx/parser.ml" +# 5182 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5839,7 +5214,7 @@ module Tables = struct }; }; } = _menhir_stack in - let _1_inlined1 : (Ppxlib.longident) = Obj.magic _1_inlined1 in + let _1_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined1 in let _3 : unit = Obj.magic _3 in let xs : (Parsetree.core_type list) = Obj.magic xs in let _1 : unit = Obj.magic _1 in @@ -5854,9 +5229,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 5860 "mlx/parser.ml" +# 5235 "mlx/parser.ml" in let tys = @@ -5865,30 +5240,30 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 5869 "mlx/parser.ml" +# 5244 "mlx/parser.ml" in -# 1035 "mlx/parser.mly" +# 1133 "mlx/parser.mly" ( xs ) -# 5874 "mlx/parser.ml" +# 5249 "mlx/parser.ml" in -# 2063 "mlx/parser.mly" +# 2159 "mlx/parser.mly" ( params ) -# 5880 "mlx/parser.ml" +# 5255 "mlx/parser.ml" in -# 2067 "mlx/parser.mly" +# 2163 "mlx/parser.mly" ( tys ) -# 5886 "mlx/parser.ml" +# 5261 "mlx/parser.ml" in -# 1920 "mlx/parser.mly" +# 2016 "mlx/parser.mly" ( Pcl_constr(cid, tys) ) -# 5892 "mlx/parser.ml" +# 5267 "mlx/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -5896,15 +5271,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 954 "mlx/parser.mly" +# 1031 "mlx/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 5902 "mlx/parser.ml" +# 5277 "mlx/parser.ml" in -# 1927 "mlx/parser.mly" +# 2023 "mlx/parser.mly" ( _1 ) -# 5908 "mlx/parser.ml" +# 5283 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5963,43 +5338,43 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 5967 "mlx/parser.ml" +# 5342 "mlx/parser.ml" in -# 1954 "mlx/parser.mly" +# 2050 "mlx/parser.mly" ( _1 ) -# 5972 "mlx/parser.ml" +# 5347 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 895 "mlx/parser.mly" +# 972 "mlx/parser.mly" ( extra_cstr _startpos _endpos _1 ) -# 5981 "mlx/parser.ml" +# 5356 "mlx/parser.ml" in -# 1941 "mlx/parser.mly" +# 2037 "mlx/parser.mly" ( Cstr.mk _1 _2 ) -# 5987 "mlx/parser.ml" +# 5362 "mlx/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 5995 "mlx/parser.ml" +# 5370 "mlx/parser.ml" in let _loc__4_ = (_startpos__4_, _endpos__4_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1922 "mlx/parser.mly" +# 2018 "mlx/parser.mly" ( unclosed "object" _loc__1_ "end" _loc__4_ ) -# 6003 "mlx/parser.ml" +# 5378 "mlx/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -6007,15 +5382,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 954 "mlx/parser.mly" +# 1031 "mlx/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 6013 "mlx/parser.ml" +# 5388 "mlx/parser.ml" in -# 1927 "mlx/parser.mly" +# 2023 "mlx/parser.mly" ( _1 ) -# 6019 "mlx/parser.ml" +# 5394 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6067,24 +5442,24 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 1924 "mlx/parser.mly" +# 2020 "mlx/parser.mly" ( Pcl_constraint(_2, _4) ) -# 6073 "mlx/parser.ml" +# 5448 "mlx/parser.ml" in let _endpos__1_ = _endpos__5_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 954 "mlx/parser.mly" +# 1031 "mlx/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 6082 "mlx/parser.ml" +# 5457 "mlx/parser.ml" in -# 1927 "mlx/parser.mly" +# 2023 "mlx/parser.mly" ( _1 ) -# 6088 "mlx/parser.ml" +# 5463 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6139,9 +5514,9 @@ module Tables = struct let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1926 "mlx/parser.mly" +# 2022 "mlx/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__5_ ) -# 6145 "mlx/parser.ml" +# 5520 "mlx/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -6149,15 +5524,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 954 "mlx/parser.mly" +# 1031 "mlx/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 6155 "mlx/parser.ml" +# 5530 "mlx/parser.ml" in -# 1927 "mlx/parser.mly" +# 2023 "mlx/parser.mly" ( _1 ) -# 6161 "mlx/parser.ml" +# 5536 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6214,44 +5589,44 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 6218 "mlx/parser.ml" +# 5593 "mlx/parser.ml" in -# 1954 "mlx/parser.mly" +# 2050 "mlx/parser.mly" ( _1 ) -# 6223 "mlx/parser.ml" +# 5598 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 895 "mlx/parser.mly" +# 972 "mlx/parser.mly" ( extra_cstr _startpos _endpos _1 ) -# 6232 "mlx/parser.ml" +# 5607 "mlx/parser.ml" in -# 1941 "mlx/parser.mly" +# 2037 "mlx/parser.mly" ( Cstr.mk _1 _2 ) -# 6238 "mlx/parser.ml" +# 5613 "mlx/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 6246 "mlx/parser.ml" +# 5621 "mlx/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1929 "mlx/parser.mly" +# 2025 "mlx/parser.mly" ( mkclass ~loc:_sloc ~attrs:_2 (Pcl_structure _3) ) -# 6255 "mlx/parser.ml" +# 5630 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6274,9 +5649,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.class_type) = -# 2032 "mlx/parser.mly" +# 2128 "mlx/parser.mly" ( _1 ) -# 6280 "mlx/parser.ml" +# 5655 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6322,14 +5697,14 @@ module Tables = struct let _v : (Parsetree.class_type) = let _1 = let _1 = let label = -# 3396 "mlx/parser.mly" +# 3726 "mlx/parser.mly" ( Optional label ) -# 6328 "mlx/parser.ml" +# 5703 "mlx/parser.ml" in -# 2038 "mlx/parser.mly" +# 2134 "mlx/parser.mly" ( Pcty_arrow(label, domain, codomain) ) -# 6333 "mlx/parser.ml" +# 5708 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -6337,15 +5712,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 948 "mlx/parser.mly" +# 1025 "mlx/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 6343 "mlx/parser.ml" +# 5718 "mlx/parser.ml" in -# 2039 "mlx/parser.mly" +# 2135 "mlx/parser.mly" ( _1 ) -# 6349 "mlx/parser.ml" +# 5724 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6392,9 +5767,9 @@ module Tables = struct let domain : (Parsetree.core_type) = Obj.magic domain in let _2 : unit = Obj.magic _2 in let label : ( -# 714 "mlx/parser.mly" +# 786 "mlx/parser.mly" (string) -# 6398 "mlx/parser.ml" +# 5773 "mlx/parser.ml" ) = Obj.magic label in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_label_ in @@ -6402,14 +5777,14 @@ module Tables = struct let _v : (Parsetree.class_type) = let _1 = let _1 = let label = -# 3398 "mlx/parser.mly" +# 3728 "mlx/parser.mly" ( Labelled label ) -# 6408 "mlx/parser.ml" +# 5783 "mlx/parser.ml" in -# 2038 "mlx/parser.mly" +# 2134 "mlx/parser.mly" ( Pcty_arrow(label, domain, codomain) ) -# 6413 "mlx/parser.ml" +# 5788 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -6417,15 +5792,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 948 "mlx/parser.mly" +# 1025 "mlx/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 6423 "mlx/parser.ml" +# 5798 "mlx/parser.ml" in -# 2039 "mlx/parser.mly" +# 2135 "mlx/parser.mly" ( _1 ) -# 6429 "mlx/parser.ml" +# 5804 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6464,14 +5839,14 @@ module Tables = struct let _v : (Parsetree.class_type) = let _1 = let _1 = let label = -# 3400 "mlx/parser.mly" +# 3730 "mlx/parser.mly" ( Nolabel ) -# 6470 "mlx/parser.ml" +# 5845 "mlx/parser.ml" in -# 2038 "mlx/parser.mly" +# 2134 "mlx/parser.mly" ( Pcty_arrow(label, domain, codomain) ) -# 6475 "mlx/parser.ml" +# 5850 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_domain_) in @@ -6479,15 +5854,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 948 "mlx/parser.mly" +# 1025 "mlx/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 6485 "mlx/parser.ml" +# 5860 "mlx/parser.ml" in -# 2039 "mlx/parser.mly" +# 2135 "mlx/parser.mly" ( _1 ) -# 6491 "mlx/parser.ml" +# 5866 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6570,9 +5945,9 @@ module Tables = struct let csig : (Parsetree.class_type) = Obj.magic csig in let _8 : unit = Obj.magic _8 in let _1_inlined2 : ( -# 714 "mlx/parser.mly" +# 786 "mlx/parser.mly" (string) -# 6576 "mlx/parser.ml" +# 5951 "mlx/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 @@ -6588,9 +5963,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 6594 "mlx/parser.ml" +# 5969 "mlx/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -6600,24 +5975,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 6606 "mlx/parser.ml" +# 5981 "mlx/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 6614 "mlx/parser.ml" +# 5989 "mlx/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2177 "mlx/parser.mly" +# 2273 "mlx/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -6625,19 +6000,19 @@ module Tables = struct ext, Ci.mk id csig ~virt ~params ~attrs ~loc ~docs ) -# 6629 "mlx/parser.ml" +# 6004 "mlx/parser.ml" in -# 1132 "mlx/parser.mly" +# 1230 "mlx/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 6635 "mlx/parser.ml" +# 6010 "mlx/parser.ml" in -# 2165 "mlx/parser.mly" +# 2261 "mlx/parser.mly" ( _1 ) -# 6641 "mlx/parser.ml" +# 6016 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6655,14 +6030,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t) = 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 : (Ppxlib.longident) = -# 3703 "mlx/parser.mly" + let _v : (Mlx_shim.Longident.t) = +# 4117 "mlx/parser.mly" ( _1 ) -# 6666 "mlx/parser.ml" +# 6041 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6681,17 +6056,21 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 699 "mlx/parser.mly" +# 771 "mlx/parser.mly" (string * char option) -# 6687 "mlx/parser.ml" +# 6062 "mlx/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) = -# 3568 "mlx/parser.mly" - ( let (n, m) = _1 in Pconst_integer (n, m) ) -# 6695 "mlx/parser.ml" + let _v : (Parsetree.constant) = let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3973 "mlx/parser.mly" + ( let (n, m) = _1 in + mkconst ~loc:_sloc (Pconst_integer (n, m)) ) +# 6074 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6710,17 +6089,20 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 657 "mlx/parser.mly" +# 728 "mlx/parser.mly" (char) -# 6716 "mlx/parser.ml" +# 6095 "mlx/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) = -# 3569 "mlx/parser.mly" - ( Pconst_char _1 ) -# 6724 "mlx/parser.ml" + let _v : (Parsetree.constant) = let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3975 "mlx/parser.mly" + ( mkconst ~loc:_sloc (Pconst_char _1) ) +# 6106 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6739,17 +6121,21 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 754 "mlx/parser.mly" +# 826 "mlx/parser.mly" (string * Location.t * string option) -# 6745 "mlx/parser.ml" +# 6127 "mlx/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) = -# 3570 "mlx/parser.mly" - ( let (s, strloc, d) = _1 in Pconst_string (s, strloc, d) ) -# 6753 "mlx/parser.ml" + let _v : (Parsetree.constant) = let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3976 "mlx/parser.mly" + ( let (s, strloc, d) = _1 in + mkconst ~loc:_sloc (Pconst_string (s,strloc,d)) ) +# 6139 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6768,17 +6154,21 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 677 "mlx/parser.mly" +# 749 "mlx/parser.mly" (string * char option) -# 6774 "mlx/parser.ml" +# 6160 "mlx/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) = -# 3571 "mlx/parser.mly" - ( let (f, m) = _1 in Pconst_float (f, m) ) -# 6782 "mlx/parser.ml" + let _v : (Parsetree.constant) = let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3978 "mlx/parser.mly" + ( let (f, m) = _1 in + mkconst ~loc:_sloc (Pconst_float (f, m)) ) +# 6172 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6808,9 +6198,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (string) = -# 3642 "mlx/parser.mly" +# 4054 "mlx/parser.mly" ( "[]" ) -# 6814 "mlx/parser.ml" +# 6204 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6840,9 +6230,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (string) = -# 3643 "mlx/parser.mly" +# 4055 "mlx/parser.mly" ( "()" ) -# 6846 "mlx/parser.ml" +# 6236 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6865,9 +6255,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3644 "mlx/parser.mly" +# 4056 "mlx/parser.mly" ( "false" ) -# 6871 "mlx/parser.ml" +# 6261 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6890,9 +6280,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3645 "mlx/parser.mly" +# 4057 "mlx/parser.mly" ( "true" ) -# 6896 "mlx/parser.ml" +# 6286 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6911,17 +6301,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 767 "mlx/parser.mly" +# 839 "mlx/parser.mly" (string) -# 6917 "mlx/parser.ml" +# 6307 "mlx/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) = -# 3648 "mlx/parser.mly" +# 4060 "mlx/parser.mly" ( _1 ) -# 6925 "mlx/parser.ml" +# 6315 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6958,14 +6348,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (string) = let _1 = -# 3639 "mlx/parser.mly" +# 4051 "mlx/parser.mly" ( "::" ) -# 6964 "mlx/parser.ml" +# 6354 "mlx/parser.ml" in -# 3649 "mlx/parser.mly" +# 4061 "mlx/parser.mly" ( _1 ) -# 6969 "mlx/parser.ml" +# 6359 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6988,9 +6378,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3650 "mlx/parser.mly" +# 4062 "mlx/parser.mly" ( _1 ) -# 6994 "mlx/parser.ml" +# 6384 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7008,14 +6398,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t) = 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 : (Ppxlib.longident) = -# 3653 "mlx/parser.mly" + let _v : (Mlx_shim.Longident.t) = +# 4065 "mlx/parser.mly" ( _1 ) -# 7019 "mlx/parser.ml" +# 6409 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7061,22 +6451,25 @@ module Tables = struct let _2_inlined1 : unit = Obj.magic _2_inlined1 in let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.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 _v : (Ppxlib.longident) = let _3 = + let _v : (Mlx_shim.Longident.t) = let _3 = let (_2, _1) = (_2_inlined1, _1_inlined1) in -# 3639 "mlx/parser.mly" +# 4051 "mlx/parser.mly" ( "::" ) -# 7074 "mlx/parser.ml" +# 6464 "mlx/parser.ml" in + let _startpos__3_ = _startpos__1_inlined1_ in + let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 3654 "mlx/parser.mly" - ( Ldot(_1,_3) ) -# 7080 "mlx/parser.ml" +# 4066 "mlx/parser.mly" + ( ldot _1 _loc__1_ _3 _loc__3_ ) +# 6473 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7112,15 +6505,15 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in - let _v : (Ppxlib.longident) = let _1 = -# 3639 "mlx/parser.mly" + let _v : (Mlx_shim.Longident.t) = let _1 = +# 4051 "mlx/parser.mly" ( "::" ) -# 7119 "mlx/parser.ml" +# 6512 "mlx/parser.ml" in -# 3655 "mlx/parser.mly" +# 4067 "mlx/parser.mly" ( Lident _1 ) -# 7124 "mlx/parser.ml" +# 6517 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7142,10 +6535,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : (Ppxlib.longident) = -# 3656 "mlx/parser.mly" + let _v : (Mlx_shim.Longident.t) = +# 4068 "mlx/parser.mly" ( Lident _1 ) -# 7149 "mlx/parser.ml" +# 6542 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7182,9 +6575,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.core_type * Parsetree.core_type) = -# 2121 "mlx/parser.mly" +# 2217 "mlx/parser.mly" ( _1, _3 ) -# 7188 "mlx/parser.ml" +# 6581 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7209,26 +6602,26 @@ module Tables = struct let _v : (Parsetree.constructor_arguments) = let tys = let xs = let xs = -# 1019 "mlx/parser.mly" +# 1117 "mlx/parser.mly" ( [ x ] ) -# 7215 "mlx/parser.ml" +# 6608 "mlx/parser.ml" in # 253 "" ( List.rev xs ) -# 7220 "mlx/parser.ml" +# 6613 "mlx/parser.ml" in -# 1039 "mlx/parser.mly" +# 1137 "mlx/parser.mly" ( xs ) -# 7226 "mlx/parser.ml" +# 6619 "mlx/parser.ml" in -# 3199 "mlx/parser.mly" +# 3500 "mlx/parser.mly" ( Pcstr_tuple tys ) -# 7232 "mlx/parser.ml" +# 6625 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7267,26 +6660,26 @@ module Tables = struct let _v : (Parsetree.constructor_arguments) = let tys = let xs = let xs = -# 1023 "mlx/parser.mly" +# 1121 "mlx/parser.mly" ( x :: xs ) -# 7273 "mlx/parser.ml" +# 6666 "mlx/parser.ml" in # 253 "" ( List.rev xs ) -# 7278 "mlx/parser.ml" +# 6671 "mlx/parser.ml" in -# 1039 "mlx/parser.mly" +# 1137 "mlx/parser.mly" ( xs ) -# 7284 "mlx/parser.ml" +# 6677 "mlx/parser.ml" in -# 3199 "mlx/parser.mly" +# 3500 "mlx/parser.mly" ( Pcstr_tuple tys ) -# 7290 "mlx/parser.ml" +# 6683 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7323,9 +6716,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.constructor_arguments) = -# 3201 "mlx/parser.mly" +# 3502 "mlx/parser.mly" ( Pcstr_record _2 ) -# 7329 "mlx/parser.ml" +# 6722 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7348,9 +6741,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.constructor_declaration list) = -# 3115 "mlx/parser.mly" +# 3416 "mlx/parser.mly" ( [] ) -# 7354 "mlx/parser.ml" +# 6747 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7373,14 +6766,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_xs_ in let _v : (Parsetree.constructor_declaration list) = let cs = -# 1124 "mlx/parser.mly" +# 1222 "mlx/parser.mly" ( List.rev xs ) -# 7379 "mlx/parser.ml" +# 6772 "mlx/parser.ml" in -# 3117 "mlx/parser.mly" +# 3418 "mlx/parser.mly" ( cs ) -# 7384 "mlx/parser.ml" +# 6777 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7403,14 +6796,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = let _1 = -# 3358 "mlx/parser.mly" +# 3660 "mlx/parser.mly" ( _1 ) -# 7409 "mlx/parser.ml" +# 6802 "mlx/parser.ml" in -# 3348 "mlx/parser.mly" +# 3650 "mlx/parser.mly" ( _1 ) -# 7414 "mlx/parser.ml" +# 6807 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7440,9 +6833,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.core_type) = -# 3350 "mlx/parser.mly" +# 3652 "mlx/parser.mly" ( Typ.attr _1 _2 ) -# 7446 "mlx/parser.ml" +# 6839 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7460,14 +6853,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.core_type) = 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.direction_flag) = -# 3769 "mlx/parser.mly" - ( Upto ) -# 7471 "mlx/parser.ml" + let _v : (Parsetree.core_type) = +# 3845 "mlx/parser.mly" + ( _1 ) +# 6864 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7485,14 +6878,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.core_type) = 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.direction_flag) = -# 3770 "mlx/parser.mly" - ( Downto ) -# 7496 "mlx/parser.ml" + let _v : (Parsetree.core_type) = +# 3845 "mlx/parser.mly" + ( _1 ) +# 6889 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7510,14 +6903,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let _1 : (Parsetree.core_type) = 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.expression) = -# 2288 "mlx/parser.mly" - ( _1 ) -# 7521 "mlx/parser.ml" + let _v : (Parsetree.core_type) = +# 3845 "mlx/parser.mly" + ( _1 ) +# 6914 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7530,107 +6923,33 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = type_; + MenhirLib.EngineTypes.startp = _startpos_type__; + MenhirLib.EngineTypes.endp = _endpos_type__; MenhirLib.EngineTypes.next = { - 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 = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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; - }; - }; - }; - }; - }; + 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 _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : unit = Obj.magic _6 in - let _5 : (Parsetree.module_expr) = Obj.magic _5 in - let _1_inlined3 : (string option) = Obj.magic _1_inlined3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in + let _3 : unit = Obj.magic _3 in + let type_ : (Parsetree.core_type) = Obj.magic type_ 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__7_ in - let _v : (Parsetree.expression) = let _1 = - let _4 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 7601 "mlx/parser.ml" - - in - let _3 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 7611 "mlx/parser.ml" - - in - -# 3935 "mlx/parser.mly" - ( _1, _2 ) -# 7617 "mlx/parser.ml" - - in - -# 2321 "mlx/parser.mly" - ( Pexp_letmodule(_4, _5, _7), _3 ) -# 7623 "mlx/parser.ml" - - in - let _endpos__1_ = _endpos__7_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2290 "mlx/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 7634 "mlx/parser.ml" + let _endpos = _endpos__3_ in + let _v : (Parsetree.core_type) = +# 3798 "mlx/parser.mly" + ( type_ ) +# 6953 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7643,135 +6962,85 @@ 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 = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined4; - MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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; - }; - }; - }; + 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 : unit = Obj.magic _5 in - let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in - let _2_inlined1 : (Dune__exe__Ast_helper.str list * Parsetree.constructor_arguments * - Parsetree.core_type option) = Obj.magic _2_inlined1 in - let _1_inlined3 : (string) = Obj.magic _1_inlined3 in + let _1_inlined3 : (Parsetree.module_type) = Obj.magic _1_inlined3 in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 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__6_ in - let _v : (Parsetree.expression) = let _1 = - let _4 = - let (_endpos__1_inlined1_, _endpos__1_, _startpos__1_, _1_inlined1, _2, _1) = (_endpos__1_inlined4_, _endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined4, _2_inlined1, _1_inlined3) in - let _3 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 7721 "mlx/parser.ml" - - in - let _endpos__3_ = _endpos__1_inlined1_ in - let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 7732 "mlx/parser.ml" - - in - let _endpos = _endpos__3_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3179 "mlx/parser.mly" - ( let vars, args, res = _2 in - Te.decl _1 ~vars ~args ?res ~attrs:_3 ~loc:(make_loc _sloc) ) -# 7742 "mlx/parser.ml" + let _endpos = _endpos__5_ in + let _v : (Parsetree.core_type) = let package_type = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3891 "mlx/parser.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 7019 "mlx/parser.ml" + + in + let ext_attrs = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in - in - let _3 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 7752 "mlx/parser.ml" - - in - -# 3935 "mlx/parser.mly" - ( _1, _2 ) -# 7758 "mlx/parser.ml" +# 7029 "mlx/parser.ml" in -# 2323 "mlx/parser.mly" - ( Pexp_letexception(_4, _6), _3 ) -# 7764 "mlx/parser.ml" +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 7035 "mlx/parser.ml" in - let _endpos__1_ = _endpos__6_ in - let _endpos = _endpos__1_ in + let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2290 "mlx/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 7775 "mlx/parser.ml" +# 3800 "mlx/parser.mly" + ( mktyp_attrs ~loc:_sloc (Ptyp_package package_type) ext_attrs ) +# 7044 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7784,96 +7053,49 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = field; + MenhirLib.EngineTypes.startp = _startpos_field_; + MenhirLib.EngineTypes.endp = _endpos_field_; MenhirLib.EngineTypes.next = { - 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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; - }; - }; - }; - }; + 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 _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : unit = Obj.magic _6 in - let _5 : (Parsetree.module_expr) = Obj.magic _5 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in + let _3 : unit = Obj.magic _3 in + let field : (Parsetree.row_field) = Obj.magic field 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__7_ in - let _v : (Parsetree.expression) = let _1 = - let _4 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 7847 "mlx/parser.ml" - - in - -# 3935 "mlx/parser.mly" - ( _1, _2 ) -# 7853 "mlx/parser.ml" - - in - let _3 = -# 3824 "mlx/parser.mly" - ( Fresh ) -# 7859 "mlx/parser.ml" + let _endpos = _endpos__3_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = +# 3803 "mlx/parser.mly" + ( Ptyp_variant([ field ], Closed, None) ) +# 7084 "mlx/parser.ml" in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2325 "mlx/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 ) -# 7866 "mlx/parser.ml" +# 1015 "mlx/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 7093 "mlx/parser.ml" in - let _endpos__1_ = _endpos__7_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2290 "mlx/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 7877 "mlx/parser.ml" +# 3820 "mlx/parser.mly" + ( _1 ) +# 7099 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7886,106 +7108,77 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { 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 = _; - 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 = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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; - }; - }; - }; - }; + 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 _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : unit = Obj.magic _6 in - let _5 : (Parsetree.module_expr) = Obj.magic _5 in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in - let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _4 : unit = Obj.magic _4 in + let xs : (Parsetree.row_field list) = Obj.magic xs 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__7_ in - let _v : (Parsetree.expression) = let _1 = - let _4 = - let (_1_inlined1, _1) = (_1_inlined3, _1_inlined2) in - let _2 = - let _1 = _1_inlined1 in + let _endpos = _endpos__4_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let fields = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 7149 "mlx/parser.ml" + in + +# 1133 "mlx/parser.mly" + ( xs ) +# 7154 "mlx/parser.ml" + + in -# 3922 "mlx/parser.mly" +# 3899 "mlx/parser.mly" ( _1 ) -# 7956 "mlx/parser.ml" +# 7160 "mlx/parser.ml" in -# 3935 "mlx/parser.mly" - ( _1, _2 ) -# 7962 "mlx/parser.ml" - - in - let _3 = - let _1 = _1_inlined1 in - -# 3825 "mlx/parser.mly" - ( Override ) -# 7970 "mlx/parser.ml" +# 3805 "mlx/parser.mly" + ( Ptyp_variant(fields, Closed, None) ) +# 7166 "mlx/parser.ml" in + let _endpos__1_ = _endpos__4_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2325 "mlx/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 ) -# 7978 "mlx/parser.ml" +# 1015 "mlx/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 7176 "mlx/parser.ml" in - let _endpos__1_ = _endpos__7_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2290 "mlx/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 7989 "mlx/parser.ml" +# 3820 "mlx/parser.mly" + ( _1 ) +# 7182 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7998,87 +7191,84 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 = field; + MenhirLib.EngineTypes.startp = _startpos_field_; + MenhirLib.EngineTypes.endp = _endpos_field_; + 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 : (Parsetree.case list) = Obj.magic xs in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in + let _5 : unit = Obj.magic _5 in + let xs : (Parsetree.row_field list) = Obj.magic xs in + let _3 : unit = Obj.magic _3 in + let field : (Parsetree.row_field) = Obj.magic field 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 : (Parsetree.expression) = let _1 = - let _3 = - let xs = - let xs = + let _endpos = _endpos__5_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let fields = + let _1 = + let xs = # 253 "" ( List.rev xs ) -# 8038 "mlx/parser.ml" - in - -# 1096 "mlx/parser.mly" - ( xs ) -# 8043 "mlx/parser.ml" - - in - -# 2662 "mlx/parser.mly" +# 7239 "mlx/parser.ml" + in + +# 1133 "mlx/parser.mly" ( xs ) -# 8049 "mlx/parser.ml" - - in - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in +# 7244 "mlx/parser.ml" + + in -# 3922 "mlx/parser.mly" +# 3899 "mlx/parser.mly" ( _1 ) -# 8059 "mlx/parser.ml" +# 7250 "mlx/parser.ml" in -# 3935 "mlx/parser.mly" - ( _1, _2 ) -# 8065 "mlx/parser.ml" +# 3807 "mlx/parser.mly" + ( Ptyp_variant(field :: fields, Closed, None) ) +# 7256 "mlx/parser.ml" in + let _endpos__1_ = _endpos__5_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2329 "mlx/parser.mly" - ( Pexp_function _3, _2 ) -# 8071 "mlx/parser.ml" +# 1015 "mlx/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 7266 "mlx/parser.ml" in - let _endpos__1_ = _endpos_xs_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2290 "mlx/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8082 "mlx/parser.ml" +# 3820 "mlx/parser.mly" + ( _1 ) +# 7272 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8096,71 +7286,72 @@ module Tables = struct 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.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _4 : (Parsetree.expression) = Obj.magic _4 in - let _3 : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in + let _4 : unit = Obj.magic _4 in + let xs : (Parsetree.row_field list) = Obj.magic xs in + let _2 : (unit option) = 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 _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let fields = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 7322 "mlx/parser.ml" + in + +# 1133 "mlx/parser.mly" + ( xs ) +# 7327 "mlx/parser.ml" + + in -# 3922 "mlx/parser.mly" +# 3899 "mlx/parser.mly" ( _1 ) -# 8140 "mlx/parser.ml" +# 7333 "mlx/parser.ml" in -# 3935 "mlx/parser.mly" - ( _1, _2 ) -# 8146 "mlx/parser.ml" +# 3809 "mlx/parser.mly" + ( Ptyp_variant(fields, Open, None) ) +# 7339 "mlx/parser.ml" in + let _endpos__1_ = _endpos__4_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2331 "mlx/parser.mly" - ( let (l,o,p) = _3 in - Pexp_fun(l, o, p, _4), _2 ) -# 8153 "mlx/parser.ml" +# 1015 "mlx/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 7349 "mlx/parser.ml" in - let _endpos__1_ = _endpos__4_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2290 "mlx/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8164 "mlx/parser.ml" +# 3820 "mlx/parser.mly" + ( _1 ) +# 7355 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8173,104 +7364,42 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - 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 = _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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : unit = Obj.magic _6 in - let xs : (string Ppxlib.loc list) = Obj.magic xs in - let _4 : unit = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 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__7_ in - let _v : (Parsetree.expression) = let _1 = - let _5 = -# 2549 "mlx/parser.mly" - ( xs ) -# 8239 "mlx/parser.ml" + let _endpos = _endpos__2_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = +# 3811 "mlx/parser.mly" + ( Ptyp_variant([], Open, None) ) +# 7388 "mlx/parser.ml" in - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 8248 "mlx/parser.ml" - - in - -# 3935 "mlx/parser.mly" - ( _1, _2 ) -# 8254 "mlx/parser.ml" - - in - let _endpos = _endpos__7_ in + let _endpos__1_ = _endpos__2_ in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2334 "mlx/parser.mly" - ( (mk_newtypes ~loc:_sloc _5 _7).pexp_desc, _2 ) -# 8263 "mlx/parser.ml" +# 1015 "mlx/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 7397 "mlx/parser.ml" in - let _endpos__1_ = _endpos__7_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2290 "mlx/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8274 "mlx/parser.ml" +# 3820 "mlx/parser.mly" + ( _1 ) +# 7403 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8283,101 +7412,77 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 xs : (Parsetree.case list) = Obj.magic xs in let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in + let xs : (Parsetree.row_field list) = Obj.magic xs in + let _2 : (unit option) = 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_xs_ in - let _v : (Parsetree.expression) = let _1 = - let _5 = - let xs = - let xs = + let _endpos = _endpos__4_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let fields = + let _1 = + let xs = # 253 "" ( List.rev xs ) -# 8337 "mlx/parser.ml" - in - -# 1096 "mlx/parser.mly" - ( xs ) -# 8342 "mlx/parser.ml" - - in - -# 2662 "mlx/parser.mly" +# 7453 "mlx/parser.ml" + in + +# 1133 "mlx/parser.mly" ( xs ) -# 8348 "mlx/parser.ml" - - in - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in +# 7458 "mlx/parser.ml" + + in -# 3922 "mlx/parser.mly" +# 3899 "mlx/parser.mly" ( _1 ) -# 8358 "mlx/parser.ml" +# 7464 "mlx/parser.ml" in -# 3935 "mlx/parser.mly" - ( _1, _2 ) -# 8364 "mlx/parser.ml" +# 3813 "mlx/parser.mly" + ( Ptyp_variant(fields, Closed, Some []) ) +# 7470 "mlx/parser.ml" in + let _endpos__1_ = _endpos__4_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2336 "mlx/parser.mly" - ( Pexp_match(_3, _5), _2 ) -# 8370 "mlx/parser.ml" +# 1015 "mlx/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 7480 "mlx/parser.ml" in - let _endpos__1_ = _endpos_xs_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2290 "mlx/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8381 "mlx/parser.ml" +# 3820 "mlx/parser.mly" + ( _1 ) +# 7486 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8390,29 +7495,29 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = xs_inlined1; + MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; MenhirLib.EngineTypes.next = { 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -8425,66 +7530,76 @@ module Tables = struct }; }; } = _menhir_stack in - let xs : (Parsetree.case list) = Obj.magic xs in + let _6 : unit = Obj.magic _6 in + let xs_inlined1 : (string list) = Obj.magic xs_inlined1 in let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in + let xs : (Parsetree.row_field list) = Obj.magic xs in + let _2 : (unit option) = 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_xs_ in - let _v : (Parsetree.expression) = let _1 = - let _5 = - let xs = - let xs = + let _endpos = _endpos__6_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let tags = + let xs = xs_inlined1 in + let _1 = + let xs = # 253 "" ( List.rev xs ) -# 8444 "mlx/parser.ml" - in - -# 1096 "mlx/parser.mly" +# 7551 "mlx/parser.ml" + in + +# 1080 "mlx/parser.mly" ( xs ) -# 8449 "mlx/parser.ml" +# 7556 "mlx/parser.ml" + + in + +# 3927 "mlx/parser.mly" + ( _1 ) +# 7562 "mlx/parser.ml" in - -# 2662 "mlx/parser.mly" + let fields = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 7570 "mlx/parser.ml" + in + +# 1133 "mlx/parser.mly" ( xs ) -# 8455 "mlx/parser.ml" - - in - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in +# 7575 "mlx/parser.ml" + + in -# 3922 "mlx/parser.mly" +# 3899 "mlx/parser.mly" ( _1 ) -# 8465 "mlx/parser.ml" +# 7581 "mlx/parser.ml" in -# 3935 "mlx/parser.mly" - ( _1, _2 ) -# 8471 "mlx/parser.ml" +# 3818 "mlx/parser.mly" + ( Ptyp_variant(fields, Closed, Some tags) ) +# 7587 "mlx/parser.ml" in + let _endpos__1_ = _endpos__6_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2338 "mlx/parser.mly" - ( Pexp_try(_3, _5), _2 ) -# 8477 "mlx/parser.ml" +# 1015 "mlx/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 7597 "mlx/parser.ml" in - let _endpos__1_ = _endpos_xs_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2290 "mlx/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8488 "mlx/parser.ml" +# 3820 "mlx/parser.mly" + ( _1 ) +# 7603 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8496,83 +7611,20 @@ module Tables = struct (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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 _5 : unit = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 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 : (Parsetree.expression) = let _1 = - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 8553 "mlx/parser.ml" - - in - -# 3935 "mlx/parser.mly" - ( _1, _2 ) -# 8559 "mlx/parser.ml" - - in - -# 2340 "mlx/parser.mly" - ( syntax_error() ) -# 8565 "mlx/parser.ml" - - in - let _endpos__1_ = _endpos__5_ in let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2290 "mlx/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8576 "mlx/parser.ml" + let _v : (Asttypes.direction_flag) = +# 4183 "mlx/parser.mly" + ( Upto ) +# 7628 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8584,97 +7636,38 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : unit = Obj.magic _6 in - let _5 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 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__7_ in - let _v : (Parsetree.expression) = let _1 = - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 8655 "mlx/parser.ml" - - in - -# 3935 "mlx/parser.mly" - ( _1, _2 ) -# 8661 "mlx/parser.ml" - - in - -# 2342 "mlx/parser.mly" - ( Pexp_ifthenelse(_3, _5, Some _7), _2 ) -# 8667 "mlx/parser.ml" - - in - let _endpos__1_ = _endpos__7_ in let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2290 "mlx/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8678 "mlx/parser.ml" + let _v : (Asttypes.direction_flag) = +# 4184 "mlx/parser.mly" + ( Downto ) +# 7653 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (string Ppxlib.loc option) = +# 4340 "mlx/parser.mly" + ( None ) +# 7671 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8687,82 +7680,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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 _5 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in + let _2 : (Dune__exe__Ast_helper.str) = 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 : (Parsetree.expression) = let _1 = - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 8743 "mlx/parser.ml" - - in - -# 3935 "mlx/parser.mly" - ( _1, _2 ) -# 8749 "mlx/parser.ml" - - in - -# 2344 "mlx/parser.mly" - ( Pexp_ifthenelse(_3, _5, None), _2 ) -# 8755 "mlx/parser.ml" - - in - let _endpos__1_ = _endpos__5_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2290 "mlx/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8766 "mlx/parser.ml" + let _endpos = _endpos__2_ in + let _v : (string Ppxlib.loc option) = +# 4341 "mlx/parser.mly" + ( Some _2 ) +# 7703 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8775,97 +7712,72 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3_inlined1; - MenhirLib.EngineTypes.startp = _startpos__3_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__3_inlined1_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 _3_inlined1 : unit = Obj.magic _3_inlined1 in - let e : (Parsetree.expression) = Obj.magic e in - let _1_inlined3 : unit = Obj.magic _1_inlined3 in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.payload) = Obj.magic _3 in + let _2 : (Dune__exe__Ast_helper.str) = 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_inlined1_ in - let _v : (Parsetree.expression) = let _1 = - let _4 = - let (_3, _1) = (_3_inlined1, _1_inlined3) in - -# 2357 "mlx/parser.mly" - ( e ) -# 8836 "mlx/parser.ml" - - in - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 8846 "mlx/parser.ml" - - in - -# 3935 "mlx/parser.mly" - ( _1, _2 ) -# 8852 "mlx/parser.ml" - - in - -# 2346 "mlx/parser.mly" - ( Pexp_while(_3, _4), _2 ) -# 8858 "mlx/parser.ml" - - in - let _endpos__1_ = _endpos__3_inlined1_ in + let _endpos = _endpos__4_ in + let _v : (Parsetree.extension) = +# 4353 "mlx/parser.mly" + ( (_2, _3) ) +# 7749 "mlx/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 : ( +# 828 "mlx/parser.mly" + (string * Location.t * string * Location.t * string option) +# 7770 "mlx/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.extension) = let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2290 "mlx/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8869 "mlx/parser.ml" +# 4355 "mlx/parser.mly" + ( mk_quotedext ~loc:_sloc _1 ) +# 7781 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8878,99 +7790,82 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3_inlined1; - MenhirLib.EngineTypes.startp = _startpos__3_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__3_inlined1_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 _3_inlined1 : unit = Obj.magic _3_inlined1 in - let _2 : (Parsetree.expression) = Obj.magic _2 in - let _1_inlined3 : unit = Obj.magic _1_inlined3 in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined2 in + let _3 : unit = Obj.magic _3 in + let _1_inlined1 : (string) = Obj.magic _1_inlined1 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_inlined1_ in - let _v : (Parsetree.expression) = let _1 = - let _4 = - let (_endpos__1_, _startpos__1_, _3, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _3_inlined1, _1_inlined3) in - let _loc__2_ = (_startpos__2_, _endpos__2_) in - let _loc__1_ = (_startpos__1_, _endpos__1_) in - -# 2359 "mlx/parser.mly" - ( unclosed "do" _loc__1_ "done" _loc__2_ ) -# 8941 "mlx/parser.ml" - - in - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" + let _endpos = _endpos__1_inlined3_ in + let _v : (Parsetree.extension_constructor) = let attrs = + let _1 = _1_inlined3 in + +# 4337 "mlx/parser.mly" ( _1 ) -# 8951 "mlx/parser.ml" - - in - -# 3935 "mlx/parser.mly" - ( _1, _2 ) -# 8957 "mlx/parser.ml" - - in +# 7836 "mlx/parser.ml" -# 2346 "mlx/parser.mly" - ( Pexp_while(_3, _4), _2 ) -# 8963 "mlx/parser.ml" + in + let _endpos_attrs_ = _endpos__1_inlined3_ in + let lid = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 7848 "mlx/parser.ml" in - let _endpos__1_ = _endpos__3_inlined1_ in - let _endpos = _endpos__1_ in + let cid = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 7859 "mlx/parser.ml" + + in + let _endpos = _endpos_attrs_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2290 "mlx/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8974 "mlx/parser.ml" +# 3570 "mlx/parser.mly" + ( let info = symbol_info _endpos in + Te.rebind cid lid ~attrs ~loc:(make_loc _sloc) ~info ) +# 7869 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8983,125 +7878,121 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3_inlined1; - MenhirLib.EngineTypes.startp = _startpos__3_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__3_inlined1_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + 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 = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 _3_inlined1 : unit = Obj.magic _3_inlined1 in - let e : (Parsetree.expression) = Obj.magic e in - let _1_inlined3 : unit = Obj.magic _1_inlined3 in - let _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : (Asttypes.direction_flag) = Obj.magic _6 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 _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in + let _1_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined1 in + let _3 : unit = Obj.magic _3 in + let _1 : (string) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__3_inlined1_ in - let _v : (Parsetree.expression) = let _1 = - let _8 = - let (_3, _1) = (_3_inlined1, _1_inlined3) in - -# 2357 "mlx/parser.mly" - ( e ) -# 9072 "mlx/parser.ml" - - in - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" + let _endpos = _endpos__1_inlined2_ in + let _v : (Parsetree.extension_constructor) = let attrs = + let _1 = _1_inlined2 in + +# 4337 "mlx/parser.mly" ( _1 ) -# 9082 "mlx/parser.ml" - - in - -# 3935 "mlx/parser.mly" - ( _1, _2 ) -# 9088 "mlx/parser.ml" - - in +# 7917 "mlx/parser.ml" -# 2349 "mlx/parser.mly" - ( Pexp_for(_3, _5, _7, _6, _8), _2 ) -# 9094 "mlx/parser.ml" + in + let _endpos_attrs_ = _endpos__1_inlined2_ in + let lid = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 7929 "mlx/parser.ml" in - let _endpos__1_ = _endpos__3_inlined1_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in + let cid = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 7939 "mlx/parser.ml" + + in + let _startpos_cid_ = _startpos__1_ in + let _1 = +# 4157 "mlx/parser.mly" + ( () ) +# 7946 "mlx/parser.ml" + in + let _endpos = _endpos_attrs_ in + let _symbolstartpos = _startpos_cid_ in let _sloc = (_symbolstartpos, _endpos) in -# 2290 "mlx/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 9105 "mlx/parser.ml" +# 3570 "mlx/parser.mly" + ( let info = symbol_info _endpos in + Te.rebind cid lid ~attrs ~loc:(make_loc _sloc) ~info ) +# 7955 "mlx/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 = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let ext : (Parsetree.extension) = Obj.magic ext in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_ext_ in + let _endpos = _endpos_ext_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = +# 3836 "mlx/parser.mly" + ( Ptyp_extension ext ) +# 7981 "mlx/parser.ml" + in + let (_endpos__1_, _startpos__1_) = (_endpos_ext_, _startpos_ext_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1015 "mlx/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 7990 "mlx/parser.ml" + + in + +# 3838 "mlx/parser.mly" + ( _1 ) +# 7996 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9114,127 +8005,67 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3_inlined1; - MenhirLib.EngineTypes.startp = _startpos__3_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__3_inlined1_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 _3_inlined1 : unit = Obj.magic _3_inlined1 in - let _2 : (Parsetree.expression) = Obj.magic _2 in - let _1_inlined3 : unit = Obj.magic _1_inlined3 in - let _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : (Asttypes.direction_flag) = Obj.magic _6 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 _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in + let _3 : (Parsetree.payload) = Obj.magic _3 in + let _2 : (Dune__exe__Ast_helper.str) = 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_inlined1_ in - let _v : (Parsetree.expression) = let _1 = - let _8 = - let (_endpos__1_, _startpos__1_, _3, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _3_inlined1, _1_inlined3) in - let _loc__2_ = (_startpos__2_, _endpos__2_) in - let _loc__1_ = (_startpos__1_, _endpos__1_) in - -# 2359 "mlx/parser.mly" - ( unclosed "do" _loc__1_ "done" _loc__2_ ) -# 9205 "mlx/parser.ml" - - in - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 9215 "mlx/parser.ml" - - in - -# 3935 "mlx/parser.mly" - ( _1, _2 ) -# 9221 "mlx/parser.ml" - - in - -# 2349 "mlx/parser.mly" - ( Pexp_for(_3, _5, _7, _6, _8), _2 ) -# 9227 "mlx/parser.ml" - - in - let _endpos__1_ = _endpos__3_inlined1_ in - let _endpos = _endpos__1_ in + let _endpos = _endpos__4_ in + let _v : (Parsetree.attribute) = let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2290 "mlx/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 9238 "mlx/parser.ml" +# 4328 "mlx/parser.mly" + ( mark_symbol_docs _sloc; + mk_attr ~loc:(make_loc _sloc) _2 _3 ) +# 8046 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = let params = +# 2157 "mlx/parser.mly" + ( [] ) +# 8064 "mlx/parser.ml" + in + +# 1982 "mlx/parser.mly" + ( params ) +# 8069 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9252,63 +8083,47 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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.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 _3 : (Parsetree.expression) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in + let _3 : unit = Obj.magic _3 in + let xs : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) 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 : (Parsetree.expression) = let _1 = - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 9289 "mlx/parser.ml" - - in + let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = let params = + let params = + let xs = +# 253 "" + ( List.rev xs ) +# 8110 "mlx/parser.ml" + in -# 3935 "mlx/parser.mly" - ( _1, _2 ) -# 9295 "mlx/parser.ml" +# 1133 "mlx/parser.mly" + ( xs ) +# 8115 "mlx/parser.ml" in -# 2351 "mlx/parser.mly" - ( Pexp_assert _3, _2 ) -# 9301 "mlx/parser.ml" +# 2159 "mlx/parser.mly" + ( params ) +# 8121 "mlx/parser.ml" in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2290 "mlx/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 9312 "mlx/parser.ml" +# 1982 "mlx/parser.mly" + ( params ) +# 8127 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9321,9 +8136,9 @@ 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined2; @@ -9344,45 +8159,64 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : (Parsetree.expression) = Obj.magic _3 in + let xs : (Parsetree.case list) = Obj.magic xs in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 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 _endpos = _endpos_xs_ in + let _v : (Parsetree.function_body) = let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 8175 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 8180 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 8186 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 9363 "mlx/parser.ml" - - in + let _1 = _1_inlined1 in -# 3935 "mlx/parser.mly" - ( _1, _2 ) -# 9369 "mlx/parser.ml" +# 4337 "mlx/parser.mly" + ( _1 ) +# 8197 "mlx/parser.ml" in -# 2353 "mlx/parser.mly" - ( Pexp_lazy _3, _2 ) -# 9375 "mlx/parser.ml" +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 8203 "mlx/parser.ml" in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2290 "mlx/parser.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 9386 "mlx/parser.ml" +# 2800 "mlx/parser.mly" + ( let ext, attrs = _2 in + match ext with + | None -> Pfunction_cases (_3, make_loc _sloc, attrs) + | Some _ -> + (* function%foo extension nodes interrupt the arity *) + let cases = Pfunction_cases (_3, make_loc _sloc, []) in + Pfunction_body + (mkexp_attrs ~loc:_sloc (mkfunction [] None cases) _2) + ) +# 8220 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9394,57 +8228,20 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - 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 xs : ((Asttypes.arg_label * Parsetree.expression) list) = Obj.magic xs in let _1 : (Parsetree.expression) = 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 : (Parsetree.expression) = let _1 = - let _1 = - let _2 = - let xs = -# 253 "" - ( List.rev xs ) -# 9421 "mlx/parser.ml" - in - -# 1003 "mlx/parser.mly" - ( xs ) -# 9426 "mlx/parser.ml" - - in - -# 2363 "mlx/parser.mly" - ( Pexp_apply(_1, _2) ) -# 9432 "mlx/parser.ml" - - in - let _endpos__1_ = _endpos_xs_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 9442 "mlx/parser.ml" - - in - -# 2293 "mlx/parser.mly" - ( _1 ) -# 9448 "mlx/parser.ml" + let _endpos = _endpos__1_ in + let _v : (Parsetree.function_body) = +# 2810 "mlx/parser.mly" + ( Pfunction_body _1 ) +# 8245 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9457,56 +8254,132 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let xs : (Parsetree.expression list) = Obj.magic xs in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_xs_ in - let _endpos = _endpos_xs_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.expression) = +# 2413 "mlx/parser.mly" + ( _1 ) +# 8270 "mlx/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 = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + 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 = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _7 : (Parsetree.expression) = Obj.magic _7 in + let _6 : unit = Obj.magic _6 in + let _5 : (Parsetree.module_expr) = Obj.magic _5 in + let _1_inlined3 : (string option) = Obj.magic _1_inlined3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 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__7_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let _1 = - let es = - let xs = -# 253 "" - ( List.rev xs ) -# 9477 "mlx/parser.ml" - in - -# 1063 "mlx/parser.mly" - ( xs ) -# 9482 "mlx/parser.ml" - - in + let _4 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 8350 "mlx/parser.ml" + + in + let _3 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in -# 2689 "mlx/parser.mly" - ( es ) -# 9488 "mlx/parser.ml" +# 4337 "mlx/parser.mly" + ( _1 ) +# 8360 "mlx/parser.ml" in -# 2365 "mlx/parser.mly" - ( Pexp_tuple(_1) ) -# 9494 "mlx/parser.ml" +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 8366 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_xs_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 9504 "mlx/parser.ml" +# 2450 "mlx/parser.mly" + ( Pexp_letmodule(_4, _5, _7), _3 ) +# 8372 "mlx/parser.ml" in + let _endpos__1_ = _endpos__7_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2293 "mlx/parser.mly" - ( _1 ) -# 9510 "mlx/parser.ml" +# 2415 "mlx/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 8383 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9519,54 +8392,135 @@ module Tables = struct 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.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; 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 = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + 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_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _2 : (Parsetree.expression) = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _6 : (Parsetree.expression) = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _2_inlined1 : (Dune__exe__Ast_helper.str list * Parsetree.constructor_arguments * + Parsetree.core_type option) = Obj.magic _2_inlined1 in + let _1_inlined3 : (string) = Obj.magic _1_inlined3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 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 _endpos = _endpos__6_ in let _v : (Parsetree.expression) = let _1 = - let _1 = + let _4 = + let (_endpos__1_inlined1_, _endpos__1_, _startpos__1_, _1_inlined1, _2, _1) = (_endpos__1_inlined4_, _endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined4, _2_inlined1, _1_inlined3) in + let _3 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 8470 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos__1_inlined1_ in let _1 = let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 9548 "mlx/parser.ml" +# 8481 "mlx/parser.ml" in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2367 "mlx/parser.mly" - ( Pexp_construct(_1, Some _2) ) -# 9554 "mlx/parser.ml" +# 3480 "mlx/parser.mly" + ( let vars, args, res = _2 in + Te.decl _1 ~vars ~args ?res ~attrs:_3 ~loc:(make_loc _sloc) ) +# 8491 "mlx/parser.ml" + + in + let _3 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 8501 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 8507 "mlx/parser.ml" in - let _endpos__1_ = _endpos__2_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 9564 "mlx/parser.ml" +# 2452 "mlx/parser.mly" + ( Pexp_letexception(_4, _6), _3 ) +# 8513 "mlx/parser.ml" in + let _endpos__1_ = _endpos__6_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2293 "mlx/parser.mly" - ( _1 ) -# 9570 "mlx/parser.ml" +# 2415 "mlx/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 8524 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9579,119 +8533,96 @@ module Tables = struct 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 : (string) = 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 = -# 2369 "mlx/parser.mly" - ( Pexp_variant(_1, Some _2) ) -# 9603 "mlx/parser.ml" - in - let _endpos__1_ = _endpos__2_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 9612 "mlx/parser.ml" - - in - -# 2293 "mlx/parser.mly" - ( _1 ) -# 9618 "mlx/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 = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 e2 : (Parsetree.expression) = Obj.magic e2 in - let op : ( -# 689 "mlx/parser.mly" - (string) -# 9652 "mlx/parser.ml" - ) = Obj.magic op in - let e1 : (Parsetree.expression) = Obj.magic e1 in + let _7 : (Parsetree.expression) = Obj.magic _7 in + let _6 : unit = Obj.magic _6 in + let _5 : (Parsetree.module_expr) = Obj.magic _5 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 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_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__7_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3612 "mlx/parser.mly" - ( op ) -# 9664 "mlx/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 + let _4 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in -# 928 "mlx/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 9673 "mlx/parser.ml" +# 4337 "mlx/parser.mly" + ( _1 ) +# 8596 "mlx/parser.ml" in -# 2371 "mlx/parser.mly" - ( mkinfix e1 op e2 ) -# 9679 "mlx/parser.ml" +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 8602 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _3 = +# 4238 "mlx/parser.mly" + ( Fresh ) +# 8608 "mlx/parser.ml" + in -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 9689 "mlx/parser.ml" +# 2454 "mlx/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 ) +# 8615 "mlx/parser.ml" in + let _endpos__1_ = _endpos__7_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2293 "mlx/parser.mly" - ( _1 ) -# 9695 "mlx/parser.ml" +# 2415 "mlx/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 8626 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9704,71 +8635,106 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 e2 : (Parsetree.expression) = Obj.magic e2 in - let op : ( -# 690 "mlx/parser.mly" - (string) -# 9729 "mlx/parser.ml" - ) = Obj.magic op in - let e1 : (Parsetree.expression) = Obj.magic e1 in + let _7 : (Parsetree.expression) = Obj.magic _7 in + let _6 : unit = Obj.magic _6 in + let _5 : (Parsetree.module_expr) = Obj.magic _5 in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__7_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3613 "mlx/parser.mly" - ( op ) -# 9741 "mlx/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 + let _4 = + let (_1_inlined1, _1) = (_1_inlined3, _1_inlined2) in + let _2 = + let _1 = _1_inlined1 in -# 928 "mlx/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 9750 "mlx/parser.ml" +# 4337 "mlx/parser.mly" + ( _1 ) +# 8705 "mlx/parser.ml" in -# 2371 "mlx/parser.mly" - ( mkinfix e1 op e2 ) -# 9756 "mlx/parser.ml" +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 8711 "mlx/parser.ml" + + in + let _3 = + let _1 = _1_inlined1 in + +# 4239 "mlx/parser.mly" + ( Override ) +# 8719 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 9766 "mlx/parser.ml" +# 2454 "mlx/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 ) +# 8727 "mlx/parser.ml" in + let _endpos__1_ = _endpos__7_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2293 "mlx/parser.mly" - ( _1 ) -# 9772 "mlx/parser.ml" +# 2415 "mlx/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 8738 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9781,71 +8747,91 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 e2 : (Parsetree.expression) = Obj.magic e2 in - let op : ( -# 691 "mlx/parser.mly" - (string) -# 9806 "mlx/parser.ml" - ) = Obj.magic op in - let e1 : (Parsetree.expression) = Obj.magic e1 in + let _6 : (Parsetree.function_body) = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let _4 : (Parsetree.core_type option) = Obj.magic _4 in + let _3 : (Parsetree.function_param list) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__6_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3614 "mlx/parser.mly" - ( op ) -# 9818 "mlx/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 + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in -# 928 "mlx/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 9827 "mlx/parser.ml" +# 4337 "mlx/parser.mly" + ( _1 ) +# 8810 "mlx/parser.ml" in -# 2371 "mlx/parser.mly" - ( mkinfix e1 op e2 ) -# 9833 "mlx/parser.ml" +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 8816 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 9843 "mlx/parser.ml" +# 2460 "mlx/parser.mly" + ( let body_constraint = Option.map (fun x -> Pconstraint x) _4 in + mkfunction _3 body_constraint _6, _2 + ) +# 8824 "mlx/parser.ml" in + let _endpos__1_ = _endpos__6_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2293 "mlx/parser.mly" - ( _1 ) -# 9849 "mlx/parser.ml" +# 2415 "mlx/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 8835 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9858,71 +8844,101 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 e2 : (Parsetree.expression) = Obj.magic e2 in - let op : ( -# 692 "mlx/parser.mly" - (string) -# 9883 "mlx/parser.ml" - ) = Obj.magic op in - let e1 : (Parsetree.expression) = Obj.magic e1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3615 "mlx/parser.mly" - ( op ) -# 9895 "mlx/parser.ml" + let _5 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 8898 "mlx/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 -# 928 "mlx/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 9904 "mlx/parser.ml" +# 1194 "mlx/parser.mly" + ( xs ) +# 8903 "mlx/parser.ml" in -# 2371 "mlx/parser.mly" - ( mkinfix e1 op e2 ) -# 9910 "mlx/parser.ml" +# 2814 "mlx/parser.mly" + ( xs ) +# 8909 "mlx/parser.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 8919 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 8925 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 9920 "mlx/parser.ml" +# 2464 "mlx/parser.mly" + ( Pexp_match(_3, _5), _2 ) +# 8931 "mlx/parser.ml" in + let _endpos__1_ = _endpos_xs_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2293 "mlx/parser.mly" - ( _1 ) -# 9926 "mlx/parser.ml" +# 2415 "mlx/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 8942 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9935,71 +8951,101 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 e2 : (Parsetree.expression) = Obj.magic e2 in - let op : ( -# 693 "mlx/parser.mly" - (string) -# 9960 "mlx/parser.ml" - ) = Obj.magic op in - let e1 : (Parsetree.expression) = Obj.magic e1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3616 "mlx/parser.mly" - ( op ) -# 9972 "mlx/parser.ml" + let _5 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 9005 "mlx/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 -# 928 "mlx/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 9981 "mlx/parser.ml" +# 1194 "mlx/parser.mly" + ( xs ) +# 9010 "mlx/parser.ml" in -# 2371 "mlx/parser.mly" - ( mkinfix e1 op e2 ) -# 9987 "mlx/parser.ml" +# 2814 "mlx/parser.mly" + ( xs ) +# 9016 "mlx/parser.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 9026 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 9032 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 9997 "mlx/parser.ml" +# 2466 "mlx/parser.mly" + ( Pexp_try(_3, _5), _2 ) +# 9038 "mlx/parser.ml" in + let _endpos__1_ = _endpos_xs_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2293 "mlx/parser.mly" - ( _1 ) -# 10003 "mlx/parser.ml" +# 2415 "mlx/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 9049 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10012,66 +9058,82 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 e2 : (Parsetree.expression) = Obj.magic e2 in + let _5 : unit = Obj.magic _5 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3617 "mlx/parser.mly" - ("+") -# 10045 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in -# 928 "mlx/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10053 "mlx/parser.ml" +# 4337 "mlx/parser.mly" + ( _1 ) +# 9114 "mlx/parser.ml" in -# 2371 "mlx/parser.mly" - ( mkinfix e1 op e2 ) -# 10059 "mlx/parser.ml" +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 9120 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10069 "mlx/parser.ml" +# 2468 "mlx/parser.mly" + ( syntax_error() ) +# 9126 "mlx/parser.ml" in + let _endpos__1_ = _endpos__5_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2293 "mlx/parser.mly" - ( _1 ) -# 10075 "mlx/parser.ml" +# 2415 "mlx/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 9137 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10084,66 +9146,122 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 e2 : (Parsetree.expression) = Obj.magic e2 in + let _1_inlined4 : (Parsetree.expression) = Obj.magic _1_inlined4 in + let _6 : unit = Obj.magic _6 in + let _1_inlined3 : (Parsetree.expression) = Obj.magic _1_inlined3 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined4_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3618 "mlx/parser.mly" - ("+.") -# 10117 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _7 = + let _1 = _1_inlined4 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 9214 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 9219 "mlx/parser.ml" + + in + let _5 = + let _1 = _1_inlined3 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 9227 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 9232 "mlx/parser.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in -# 928 "mlx/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10125 "mlx/parser.ml" +# 4337 "mlx/parser.mly" + ( _1 ) +# 9242 "mlx/parser.ml" in -# 2371 "mlx/parser.mly" - ( mkinfix e1 op e2 ) -# 10131 "mlx/parser.ml" +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 9248 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10141 "mlx/parser.ml" +# 2470 "mlx/parser.mly" + ( Pexp_ifthenelse(_3, _5, Some _7), _2 ) +# 9254 "mlx/parser.ml" in + let _endpos__1_ = _endpos__1_inlined4_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2293 "mlx/parser.mly" - ( _1 ) -# 10147 "mlx/parser.ml" +# 2415 "mlx/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 9265 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10156,138 +9274,195 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined6; + MenhirLib.EngineTypes.startp = _startpos__1_inlined6_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined6_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 e2 : (Parsetree.expression) = Obj.magic e2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined6 : (Parsetree.attributes) = Obj.magic _1_inlined6 in + let _1_inlined5 : (string Ppxlib.loc option) = Obj.magic _1_inlined5 in + let _1_inlined4 : unit = Obj.magic _1_inlined4 in + let _6 : unit = Obj.magic _6 in + let _1_inlined3 : (Parsetree.expression) = Obj.magic _1_inlined3 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3619 "mlx/parser.mly" - ("+=") -# 10189 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in + let _7 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined4_, _1_inlined6, _1_inlined5, _1_inlined4) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 9366 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 9371 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 9377 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 9388 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 9394 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 928 "mlx/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10197 "mlx/parser.ml" +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 9414 "mlx/parser.ml" in -# 2371 "mlx/parser.mly" - ( mkinfix e1 op e2 ) -# 10203 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 9420 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10213 "mlx/parser.ml" - - in - -# 2293 "mlx/parser.mly" + let _5 = + let _1 = _1_inlined3 in + let _1 = +# 2303 "mlx/parser.mly" ( _1 ) -# 10219 "mlx/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 = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in - let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in - let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3620 "mlx/parser.mly" - ("-") -# 10261 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in +# 9428 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 9433 "mlx/parser.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in -# 928 "mlx/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10269 "mlx/parser.ml" +# 4337 "mlx/parser.mly" + ( _1 ) +# 9443 "mlx/parser.ml" in -# 2371 "mlx/parser.mly" - ( mkinfix e1 op e2 ) -# 10275 "mlx/parser.ml" +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 9449 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10285 "mlx/parser.ml" +# 2470 "mlx/parser.mly" + ( Pexp_ifthenelse(_3, _5, Some _7), _2 ) +# 9455 "mlx/parser.ml" in + let _endpos__1_ = _endpos_xs_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2293 "mlx/parser.mly" - ( _1 ) -# 10291 "mlx/parser.ml" +# 2415 "mlx/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 9466 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10300,66 +9475,195 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _1_inlined6; + MenhirLib.EngineTypes.startp = _startpos__1_inlined6_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined6_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 e2 : (Parsetree.expression) = Obj.magic e2 in + let _1_inlined6 : (Parsetree.expression) = Obj.magic _1_inlined6 in + let _6 : unit = Obj.magic _6 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined5 : (Parsetree.attributes) = Obj.magic _1_inlined5 in + let _1_inlined4 : (string Ppxlib.loc option) = Obj.magic _1_inlined4 in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined6_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3621 "mlx/parser.mly" - ("-.") -# 10333 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in + let _7 = + let _1 = _1_inlined6 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 9564 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 9569 "mlx/parser.ml" + + in + let _5 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined3_, _1_inlined5, _1_inlined4, _1_inlined3) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 9580 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 9585 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 9591 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 9602 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 9608 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 928 "mlx/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10341 "mlx/parser.ml" +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 9628 "mlx/parser.ml" in -# 2371 "mlx/parser.mly" - ( mkinfix e1 op e2 ) -# 10347 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 9634 "mlx/parser.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 9644 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 9650 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10357 "mlx/parser.ml" +# 2470 "mlx/parser.mly" + ( Pexp_ifthenelse(_3, _5, Some _7), _2 ) +# 9656 "mlx/parser.ml" in + let _endpos__1_ = _endpos__1_inlined6_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2293 "mlx/parser.mly" - ( _1 ) -# 10363 "mlx/parser.ml" +# 2415 "mlx/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 9667 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10372,210 +9676,268 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = xs_inlined1; + MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined8; + MenhirLib.EngineTypes.startp = _startpos__1_inlined8_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined8_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in - let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in - let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3622 "mlx/parser.mly" - ("*") -# 10405 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 928 "mlx/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10413 "mlx/parser.ml" - - in - -# 2371 "mlx/parser.mly" - ( mkinfix e1 op e2 ) -# 10419 "mlx/parser.ml" - - in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10429 "mlx/parser.ml" - - in - -# 2293 "mlx/parser.mly" - ( _1 ) -# 10435 "mlx/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 = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined7; + MenhirLib.EngineTypes.startp = _startpos__1_inlined7_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined7_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined6; + MenhirLib.EngineTypes.startp = _startpos__1_inlined6_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + 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 = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 e2 : (Parsetree.expression) = Obj.magic e2 in + let xs_inlined1 : (Parsetree.case list) = Obj.magic xs_inlined1 in + let _1_inlined8 : (Parsetree.attributes) = Obj.magic _1_inlined8 in + let _1_inlined7 : (string Ppxlib.loc option) = Obj.magic _1_inlined7 in + let _1_inlined6 : unit = Obj.magic _1_inlined6 in + let _6 : unit = Obj.magic _6 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined5 : (Parsetree.attributes) = Obj.magic _1_inlined5 in + let _1_inlined4 : (string Ppxlib.loc option) = Obj.magic _1_inlined4 in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_inlined1_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3623 "mlx/parser.mly" - ("%") -# 10477 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in + let _7 = + let (_endpos_xs_, _startpos__1_, xs, _1_inlined2, _1_inlined1, _1) = (_endpos_xs_inlined1_, _startpos__1_inlined6_, xs_inlined1, _1_inlined8, _1_inlined7, _1_inlined6) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 9789 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 9794 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 9800 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 9811 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 9817 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 928 "mlx/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10485 "mlx/parser.ml" +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 9837 "mlx/parser.ml" in -# 2371 "mlx/parser.mly" - ( mkinfix e1 op e2 ) -# 10491 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 9843 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10501 "mlx/parser.ml" - - in - -# 2293 "mlx/parser.mly" - ( _1 ) -# 10507 "mlx/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 = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in - let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in - let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3624 "mlx/parser.mly" - ("=") -# 10549 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in + let _5 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined3_, _1_inlined5, _1_inlined4, _1_inlined3) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 9854 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 9859 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 9865 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 9876 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 9882 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 928 "mlx/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10557 "mlx/parser.ml" +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 9902 "mlx/parser.ml" in -# 2371 "mlx/parser.mly" - ( mkinfix e1 op e2 ) -# 10563 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 9908 "mlx/parser.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 9918 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 9924 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10573 "mlx/parser.ml" +# 2470 "mlx/parser.mly" + ( Pexp_ifthenelse(_3, _5, Some _7), _2 ) +# 9930 "mlx/parser.ml" in + let _endpos__1_ = _endpos_xs_inlined1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2293 "mlx/parser.mly" - ( _1 ) -# 10579 "mlx/parser.ml" +# 2415 "mlx/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 9941 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10588,66 +9950,95 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 e2 : (Parsetree.expression) = Obj.magic e2 in + let _1_inlined3 : (Parsetree.expression) = Obj.magic _1_inlined3 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined3_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3625 "mlx/parser.mly" - ("<") -# 10621 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _5 = + let _1 = _1_inlined3 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 10004 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 10009 "mlx/parser.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in -# 928 "mlx/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10629 "mlx/parser.ml" +# 4337 "mlx/parser.mly" + ( _1 ) +# 10019 "mlx/parser.ml" in -# 2371 "mlx/parser.mly" - ( mkinfix e1 op e2 ) -# 10635 "mlx/parser.ml" +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 10025 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10645 "mlx/parser.ml" +# 2472 "mlx/parser.mly" + ( Pexp_ifthenelse(_3, _5, None), _2 ) +# 10031 "mlx/parser.ml" in + let _endpos__1_ = _endpos__1_inlined3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2293 "mlx/parser.mly" - ( _1 ) -# 10651 "mlx/parser.ml" +# 2415 "mlx/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 10042 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10660,66 +10051,168 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 e2 : (Parsetree.expression) = Obj.magic e2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined5 : (Parsetree.attributes) = Obj.magic _1_inlined5 in + let _1_inlined4 : (string Ppxlib.loc option) = Obj.magic _1_inlined4 in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3626 "mlx/parser.mly" - (">") -# 10693 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in + let _5 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined3_, _1_inlined5, _1_inlined4, _1_inlined3) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 10129 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 10134 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 10140 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 10151 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 10157 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 928 "mlx/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10701 "mlx/parser.ml" +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 10177 "mlx/parser.ml" in -# 2371 "mlx/parser.mly" - ( mkinfix e1 op e2 ) -# 10707 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 10183 "mlx/parser.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 10193 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 10199 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10717 "mlx/parser.ml" +# 2472 "mlx/parser.mly" + ( Pexp_ifthenelse(_3, _5, None), _2 ) +# 10205 "mlx/parser.ml" in + let _endpos__1_ = _endpos_xs_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2293 "mlx/parser.mly" - ( _1 ) -# 10723 "mlx/parser.ml" +# 2415 "mlx/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 10216 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10732,66 +10225,97 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _3_inlined1; + MenhirLib.EngineTypes.startp = _startpos__3_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__3_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 e2 : (Parsetree.expression) = Obj.magic e2 in + let _3_inlined1 : unit = Obj.magic _3_inlined1 in + let e : (Parsetree.expression) = Obj.magic e in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_inlined1_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3627 "mlx/parser.mly" - ("or") -# 10765 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _4 = + let (_3, _1) = (_3_inlined1, _1_inlined3) in + +# 2485 "mlx/parser.mly" + ( e ) +# 10286 "mlx/parser.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in -# 928 "mlx/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10773 "mlx/parser.ml" +# 4337 "mlx/parser.mly" + ( _1 ) +# 10296 "mlx/parser.ml" in -# 2371 "mlx/parser.mly" - ( mkinfix e1 op e2 ) -# 10779 "mlx/parser.ml" +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 10302 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10789 "mlx/parser.ml" +# 2474 "mlx/parser.mly" + ( Pexp_while(_3, _4), _2 ) +# 10308 "mlx/parser.ml" in + let _endpos__1_ = _endpos__3_inlined1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2293 "mlx/parser.mly" - ( _1 ) -# 10795 "mlx/parser.ml" +# 2415 "mlx/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 10319 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10804,66 +10328,99 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _3_inlined1; + MenhirLib.EngineTypes.startp = _startpos__3_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__3_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + 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 = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 e2 : (Parsetree.expression) = Obj.magic e2 in + let _3_inlined1 : unit = Obj.magic _3_inlined1 in + let _2 : (Parsetree.expression) = Obj.magic _2 in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_inlined1_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3628 "mlx/parser.mly" - ("||") -# 10837 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _4 = + let (_endpos__1_, _startpos__1_, _3, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _3_inlined1, _1_inlined3) in + let _loc__2_ = (_startpos__2_, _endpos__2_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 2487 "mlx/parser.mly" + ( unclosed "do" _loc__1_ "done" _loc__2_ ) +# 10391 "mlx/parser.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in -# 928 "mlx/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10845 "mlx/parser.ml" +# 4337 "mlx/parser.mly" + ( _1 ) +# 10401 "mlx/parser.ml" in -# 2371 "mlx/parser.mly" - ( mkinfix e1 op e2 ) -# 10851 "mlx/parser.ml" +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 10407 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10861 "mlx/parser.ml" +# 2474 "mlx/parser.mly" + ( Pexp_while(_3, _4), _2 ) +# 10413 "mlx/parser.ml" in + let _endpos__1_ = _endpos__3_inlined1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2293 "mlx/parser.mly" - ( _1 ) -# 10867 "mlx/parser.ml" +# 2415 "mlx/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 10424 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10876,66 +10433,125 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _3_inlined1; + MenhirLib.EngineTypes.startp = _startpos__3_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__3_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 e2 : (Parsetree.expression) = Obj.magic e2 in + let _3_inlined1 : unit = Obj.magic _3_inlined1 in + let e : (Parsetree.expression) = Obj.magic e in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in + let _7 : (Parsetree.expression) = Obj.magic _7 in + let _6 : (Asttypes.direction_flag) = Obj.magic _6 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 _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_inlined1_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3629 "mlx/parser.mly" - ("&") -# 10909 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _8 = + let (_3, _1) = (_3_inlined1, _1_inlined3) in + +# 2485 "mlx/parser.mly" + ( e ) +# 10522 "mlx/parser.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in -# 928 "mlx/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10917 "mlx/parser.ml" +# 4337 "mlx/parser.mly" + ( _1 ) +# 10532 "mlx/parser.ml" in -# 2371 "mlx/parser.mly" - ( mkinfix e1 op e2 ) -# 10923 "mlx/parser.ml" +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 10538 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 10933 "mlx/parser.ml" +# 2477 "mlx/parser.mly" + ( Pexp_for(_3, _5, _7, _6, _8), _2 ) +# 10544 "mlx/parser.ml" in + let _endpos__1_ = _endpos__3_inlined1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2293 "mlx/parser.mly" - ( _1 ) -# 10939 "mlx/parser.ml" +# 2415 "mlx/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 10555 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10948,66 +10564,127 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _3_inlined1; + MenhirLib.EngineTypes.startp = _startpos__3_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__3_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + 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 = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 e2 : (Parsetree.expression) = Obj.magic e2 in + let _3_inlined1 : unit = Obj.magic _3_inlined1 in + let _2 : (Parsetree.expression) = Obj.magic _2 in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in + let _7 : (Parsetree.expression) = Obj.magic _7 in + let _6 : (Asttypes.direction_flag) = Obj.magic _6 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 _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_inlined1_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3630 "mlx/parser.mly" - ("&&") -# 10981 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _8 = + let (_endpos__1_, _startpos__1_, _3, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _3_inlined1, _1_inlined3) in + let _loc__2_ = (_startpos__2_, _endpos__2_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 2487 "mlx/parser.mly" + ( unclosed "do" _loc__1_ "done" _loc__2_ ) +# 10655 "mlx/parser.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in -# 928 "mlx/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10989 "mlx/parser.ml" +# 4337 "mlx/parser.mly" + ( _1 ) +# 10665 "mlx/parser.ml" in -# 2371 "mlx/parser.mly" - ( mkinfix e1 op e2 ) -# 10995 "mlx/parser.ml" +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 10671 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 11005 "mlx/parser.ml" +# 2477 "mlx/parser.mly" + ( Pexp_for(_3, _5, _7, _6, _8), _2 ) +# 10677 "mlx/parser.ml" in + let _endpos__1_ = _endpos__3_inlined1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2293 "mlx/parser.mly" - ( _1 ) -# 11011 "mlx/parser.ml" +# 2415 "mlx/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 10688 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11020,66 +10697,68 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 e2 : (Parsetree.expression) = Obj.magic e2 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3631 "mlx/parser.mly" - (":=") -# 11053 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in -# 928 "mlx/parser.mly" - ( mkoperator ~loc:_sloc _1 ) -# 11061 "mlx/parser.ml" +# 4337 "mlx/parser.mly" + ( _1 ) +# 10739 "mlx/parser.ml" in -# 2371 "mlx/parser.mly" - ( mkinfix e1 op e2 ) -# 11067 "mlx/parser.ml" +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 10745 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 11077 "mlx/parser.ml" +# 2479 "mlx/parser.mly" + ( Pexp_assert _3, _2 ) +# 10751 "mlx/parser.ml" in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2293 "mlx/parser.mly" - ( _1 ) -# 11083 "mlx/parser.ml" +# 2415 "mlx/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 10762 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11092,45 +10771,68 @@ module Tables = struct 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.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _2 : (Parsetree.expression) = Obj.magic _2 in - let _1 : (string) = Obj.magic _1 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 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 _endpos = _endpos__3_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let _loc__1_ = (_startpos__1_, _endpos__1_) in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 10813 "mlx/parser.ml" + + in -# 2373 "mlx/parser.mly" - ( mkuminus ~oploc:_loc__1_ _1 _2 ) -# 11118 "mlx/parser.ml" +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 10819 "mlx/parser.ml" in - let _endpos__1_ = _endpos__2_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 11128 "mlx/parser.ml" +# 2481 "mlx/parser.mly" + ( Pexp_lazy _3, _2 ) +# 10825 "mlx/parser.ml" in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2293 "mlx/parser.mly" - ( _1 ) -# 11134 "mlx/parser.ml" +# 2415 "mlx/parser.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 10836 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11143,9 +10845,9 @@ module Tables = struct 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.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -11154,34 +10856,45 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : (Parsetree.expression) = Obj.magic _2 in - let _1 : (string) = Obj.magic _1 in + let xs : ((Asttypes.arg_label * Parsetree.expression) list) = Obj.magic xs in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = let _1 = - let _loc__1_ = (_startpos__1_, _endpos__1_) in + let _2 = + let xs = +# 253 "" + ( List.rev xs ) +# 10871 "mlx/parser.ml" + in + +# 1080 "mlx/parser.mly" + ( xs ) +# 10876 "mlx/parser.ml" + + in -# 2375 "mlx/parser.mly" - ( mkuplus ~oploc:_loc__1_ _1 _2 ) -# 11169 "mlx/parser.ml" +# 2491 "mlx/parser.mly" + ( Pexp_apply(_1, _2) ) +# 10882 "mlx/parser.ml" in - let _endpos__1_ = _endpos__2_ in + let _endpos__1_ = _endpos_xs_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 11179 "mlx/parser.ml" +# 10892 "mlx/parser.ml" in -# 2293 "mlx/parser.mly" +# 2418 "mlx/parser.mly" ( _1 ) -# 11185 "mlx/parser.ml" +# 10898 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11193,105 +10906,50 @@ module Tables = struct (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 = _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 : (Parsetree.expression) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (let_bindings) = 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 _endpos = _endpos__3_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2295 "mlx/parser.mly" - ( expr_of_let_bindings ~loc:_sloc _1 _3 ) -# 11227 "mlx/parser.ml" - in - { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = body; - MenhirLib.EngineTypes.startp = _startpos_body_; - MenhirLib.EngineTypes.endp = _endpos_body_; - 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 = bindings; - MenhirLib.EngineTypes.startp = _startpos_bindings_; - MenhirLib.EngineTypes.endp = _endpos_bindings_; - 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 body : (Parsetree.expression) = Obj.magic body in - let _3 : unit = Obj.magic _3 in - let bindings : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = Obj.magic bindings in - let _1 : ( -# 695 "mlx/parser.mly" - (string) -# 11269 "mlx/parser.ml" - ) = Obj.magic _1 in + let xs : ((string option * Parsetree.expression) list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos_body_ in - let _v : (Parsetree.expression) = let pbop_op = + let _startpos = _startpos_xs_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 10926 "mlx/parser.ml" + in + +# 2924 "mlx/parser.mly" + ( xs ) +# 10931 "mlx/parser.ml" + + in + +# 2493 "mlx/parser.mly" + ( Pexp_tuple(_1) ) +# 10937 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_xs_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 11281 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 10947 "mlx/parser.ml" in - let _startpos_pbop_op_ = _startpos__1_ in - let _endpos = _endpos_body_ in - let _symbolstartpos = _startpos_pbop_op_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2297 "mlx/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}) ) -# 11295 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 10953 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11304,37 +10962,54 @@ 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 = _; - 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; - }; + 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 : (Parsetree.expression) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let _2 : (Parsetree.expression) = Obj.magic _2 in + let _1 : (Mlx_shim.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 _v : (Parsetree.expression) = let _endpos = _endpos__3_ in - let _symbolstartpos = _startpos__1_ in - let _loc__2_ = (_startpos__2_, _endpos__2_) in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos__2_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 10991 "mlx/parser.ml" + + in + +# 2495 "mlx/parser.mly" + ( Pexp_construct(_1, Some _2) ) +# 10997 "mlx/parser.ml" + + in + let _endpos__1_ = _endpos__2_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 11007 "mlx/parser.ml" + + in -# 2303 "mlx/parser.mly" - ( mkexp_cons ~loc:_sloc _loc__2_ (ghexp ~loc:_sloc (Pexp_tuple[_1;_3])) ) -# 11338 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 11013 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11347,55 +11022,42 @@ 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 = _; - 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; - }; + 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 : (Parsetree.expression) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : ( -# 714 "mlx/parser.mly" - (string) -# 11373 "mlx/parser.ml" - ) = Obj.magic _1 in + let _2 : (Parsetree.expression) = Obj.magic _2 in + let _1 : (string) = 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__2_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 3562 "mlx/parser.mly" - ( _1 ) -# 11382 "mlx/parser.ml" +# 2497 "mlx/parser.mly" + ( Pexp_variant(_1, Some _2) ) +# 11046 "mlx/parser.ml" in + let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 11390 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 11055 "mlx/parser.ml" in - let _endpos = _endpos__3_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2305 "mlx/parser.mly" - ( mkexp ~loc:_sloc (Pexp_setinstvar(_1, _3)) ) -# 11399 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 11061 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11408,61 +11070,83 @@ 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; 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; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _5 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _1_inlined1 : (Ppxlib.longident) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in let _1 : (Parsetree.expression) = Obj.magic _1 in + let op : ( +# 761 "mlx/parser.mly" + (string) +# 11095 "mlx/parser.ml" + ) = Obj.magic op in + let e1 : (Parsetree.expression) = Obj.magic e1 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 _3 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 11107 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 11112 "mlx/parser.ml" + + in + let op = + let _1 = +# 4024 "mlx/parser.mly" + ( op ) +# 11119 "mlx/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 + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 11128 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 11134 "mlx/parser.ml" + + in + let _startpos__1_ = _startpos_e1_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 11457 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 11144 "mlx/parser.ml" in - let _endpos = _endpos__5_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2307 "mlx/parser.mly" - ( mkexp ~loc:_sloc (Pexp_setfield(_1, _3, _5)) ) -# 11466 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 11150 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11475,77 +11159,156 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + 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 = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let _5 : unit = Obj.magic _5 in - let i : (Parsetree.expression) = Obj.magic i in - let _3 : unit = Obj.magic _3 in - let d : unit = Obj.magic d in - let array : (Parsetree.expression) = Obj.magic array in + let op : ( +# 761 "mlx/parser.mly" + (string) +# 11205 "mlx/parser.ml" + ) = Obj.magic op in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let r = -# 2308 "mlx/parser.mly" - (Some v) -# 11534 "mlx/parser.ml" - in + let _1 = + let e2 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 11220 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 11225 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 11231 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 11242 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 11248 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 11268 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 11274 "mlx/parser.ml" + + in + let op = + let _1 = +# 4024 "mlx/parser.mly" + ( op ) +# 11281 "mlx/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 + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 11290 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 11296 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2268 "mlx/parser.mly" - ( array, d, Paren, i, r ) -# 11539 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 11306 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2309 "mlx/parser.mly" - ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 11549 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 11312 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11558,77 +11321,83 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; MenhirLib.EngineTypes.next = { - 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 = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - 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 = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in - let _1 : unit = Obj.magic _1 in - let _5 : unit = Obj.magic _5 in - let i : (Parsetree.expression) = Obj.magic i in - let _3 : unit = Obj.magic _3 in - let d : unit = Obj.magic d in - let array : (Parsetree.expression) = Obj.magic array in + let _1 : (Parsetree.expression) = Obj.magic _1 in + let op : ( +# 762 "mlx/parser.mly" + (string) +# 11346 "mlx/parser.ml" + ) = Obj.magic op in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = - let r = -# 2308 "mlx/parser.mly" - (Some v) -# 11617 "mlx/parser.ml" - in + let _1 = + let e2 = + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 11358 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 11363 "mlx/parser.ml" + + in + let op = + let _1 = +# 4025 "mlx/parser.mly" + ( op ) +# 11370 "mlx/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 + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 11379 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 11385 "mlx/parser.ml" + + in + let _startpos__1_ = _startpos_e1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2270 "mlx/parser.mly" - ( array, d, Brace, i, r ) -# 11622 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 11395 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2309 "mlx/parser.mly" - ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 11632 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 11401 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11641,181 +11410,156 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + 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 = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let _5 : unit = Obj.magic _5 in - let i : (Parsetree.expression) = Obj.magic i in - let _3 : unit = Obj.magic _3 in - let d : unit = Obj.magic d in - let array : (Parsetree.expression) = Obj.magic array in + let op : ( +# 762 "mlx/parser.mly" + (string) +# 11456 "mlx/parser.ml" + ) = Obj.magic op in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let r = -# 2308 "mlx/parser.mly" - (Some v) -# 11700 "mlx/parser.ml" - in - -# 2272 "mlx/parser.mly" - ( array, d, Bracket, i, r ) -# 11705 "mlx/parser.ml" - - in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2309 "mlx/parser.mly" - ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 11715 "mlx/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 = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - 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 = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; - } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v 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 : ( -# 694 "mlx/parser.mly" - (string) -# 11777 "mlx/parser.ml" - ) = Obj.magic _2 in - let array : (Parsetree.expression) = Obj.magic array in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in - let _v : (Parsetree.expression) = let _1 = - let r = -# 2310 "mlx/parser.mly" - (Some v) -# 11787 "mlx/parser.ml" - in - let i = -# 2729 "mlx/parser.mly" - ( es ) -# 11792 "mlx/parser.ml" - in - let d = - let _1 = -# 124 "" - ( None ) -# 11798 "mlx/parser.ml" - in + let _1 = + let e2 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 11471 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 11476 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 11482 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 11493 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 11499 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 11519 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 11525 "mlx/parser.ml" + + in + let op = + let _1 = +# 4025 "mlx/parser.mly" + ( op ) +# 11532 "mlx/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 + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 11541 "mlx/parser.ml" + + in -# 2284 "mlx/parser.mly" - ( _1, _2 ) -# 11803 "mlx/parser.ml" +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 11547 "mlx/parser.ml" in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2268 "mlx/parser.mly" - ( array, d, Paren, i, r ) -# 11809 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 11557 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2311 "mlx/parser.mly" - ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 11819 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 11563 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11828,123 +11572,83 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; 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 = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; MenhirLib.EngineTypes.next = { - 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 = _; - 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; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in - let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( -# 694 "mlx/parser.mly" + let _1 : (Parsetree.expression) = Obj.magic _1 in + let op : ( +# 763 "mlx/parser.mly" (string) -# 11893 "mlx/parser.ml" - ) = Obj.magic _2 in - let _2_inlined1 : (Ppxlib.longident) = Obj.magic _2_inlined1 in - let _1 : unit = Obj.magic _1 in - let array : (Parsetree.expression) = Obj.magic array in +# 11597 "mlx/parser.ml" + ) = Obj.magic op in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = - let r = - let _1 = _1_inlined1 in - -# 2310 "mlx/parser.mly" - (Some v) -# 11907 "mlx/parser.ml" - - in - let i = -# 2729 "mlx/parser.mly" - ( es ) -# 11913 "mlx/parser.ml" - in - let d = - let _1 = - let _2 = _2_inlined1 in - let x = -# 2284 "mlx/parser.mly" - (_2) -# 11921 "mlx/parser.ml" + let _1 = + let e2 = + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 11609 "mlx/parser.ml" in -# 126 "" - ( Some x ) -# 11926 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 11614 "mlx/parser.ml" + + in + let op = + let _1 = +# 4026 "mlx/parser.mly" + ( op ) +# 11621 "mlx/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 + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 11630 "mlx/parser.ml" in -# 2284 "mlx/parser.mly" - ( _1, _2 ) -# 11932 "mlx/parser.ml" +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 11636 "mlx/parser.ml" in + let _startpos__1_ = _startpos_e1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2268 "mlx/parser.mly" - ( array, d, Paren, i, r ) -# 11938 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 11646 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2311 "mlx/parser.mly" - ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 11948 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 11652 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11957,98 +11661,156 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + 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 = es; - MenhirLib.EngineTypes.startp = _startpos_es_; - MenhirLib.EngineTypes.endp = _endpos_es_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; 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 = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 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 : ( -# 694 "mlx/parser.mly" + let op : ( +# 763 "mlx/parser.mly" (string) -# 12010 "mlx/parser.ml" - ) = Obj.magic _2 in - let array : (Parsetree.expression) = Obj.magic array in +# 11707 "mlx/parser.ml" + ) = Obj.magic op in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let r = -# 2310 "mlx/parser.mly" - (Some v) -# 12020 "mlx/parser.ml" - in - let i = -# 2729 "mlx/parser.mly" - ( es ) -# 12025 "mlx/parser.ml" - in - let d = - let _1 = -# 124 "" - ( None ) -# 12031 "mlx/parser.ml" - in + let _1 = + let e2 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 11722 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 11727 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 11733 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 11744 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 11750 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 11770 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 11776 "mlx/parser.ml" + + in + let op = + let _1 = +# 4026 "mlx/parser.mly" + ( op ) +# 11783 "mlx/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 + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 11792 "mlx/parser.ml" + + in -# 2284 "mlx/parser.mly" - ( _1, _2 ) -# 12036 "mlx/parser.ml" +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 11798 "mlx/parser.ml" in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2270 "mlx/parser.mly" - ( array, d, Brace, i, r ) -# 12042 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 11808 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2311 "mlx/parser.mly" - ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 12052 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 11814 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12061,123 +11823,83 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; 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 = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; MenhirLib.EngineTypes.next = { - 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 = _; - 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; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in - let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( -# 694 "mlx/parser.mly" + let _1 : (Parsetree.expression) = Obj.magic _1 in + let op : ( +# 764 "mlx/parser.mly" (string) -# 12126 "mlx/parser.ml" - ) = Obj.magic _2 in - let _2_inlined1 : (Ppxlib.longident) = Obj.magic _2_inlined1 in - let _1 : unit = Obj.magic _1 in - let array : (Parsetree.expression) = Obj.magic array in +# 11848 "mlx/parser.ml" + ) = Obj.magic op in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = - let r = - let _1 = _1_inlined1 in - -# 2310 "mlx/parser.mly" - (Some v) -# 12140 "mlx/parser.ml" - - in - let i = -# 2729 "mlx/parser.mly" - ( es ) -# 12146 "mlx/parser.ml" - in - let d = - let _1 = - let _2 = _2_inlined1 in - let x = -# 2284 "mlx/parser.mly" - (_2) -# 12154 "mlx/parser.ml" + let _1 = + let e2 = + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 11860 "mlx/parser.ml" in -# 126 "" - ( Some x ) -# 12159 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 11865 "mlx/parser.ml" + + in + let op = + let _1 = +# 4027 "mlx/parser.mly" + ( op ) +# 11872 "mlx/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 + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 11881 "mlx/parser.ml" in -# 2284 "mlx/parser.mly" - ( _1, _2 ) -# 12165 "mlx/parser.ml" +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 11887 "mlx/parser.ml" in + let _startpos__1_ = _startpos_e1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2270 "mlx/parser.mly" - ( array, d, Brace, i, r ) -# 12171 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 11897 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2311 "mlx/parser.mly" - ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 12181 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 11903 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12190,98 +11912,156 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + 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 = es; - MenhirLib.EngineTypes.startp = _startpos_es_; - MenhirLib.EngineTypes.endp = _endpos_es_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; 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 = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 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 : ( -# 694 "mlx/parser.mly" + let op : ( +# 764 "mlx/parser.mly" (string) -# 12243 "mlx/parser.ml" - ) = Obj.magic _2 in - let array : (Parsetree.expression) = Obj.magic array in +# 11958 "mlx/parser.ml" + ) = Obj.magic op in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let r = -# 2310 "mlx/parser.mly" - (Some v) -# 12253 "mlx/parser.ml" - in - let i = -# 2729 "mlx/parser.mly" - ( es ) -# 12258 "mlx/parser.ml" - in - let d = - let _1 = -# 124 "" - ( None ) -# 12264 "mlx/parser.ml" - in + let _1 = + let e2 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 11973 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 11978 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 11984 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 11995 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 12001 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 12021 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 12027 "mlx/parser.ml" + + in + let op = + let _1 = +# 4027 "mlx/parser.mly" + ( op ) +# 12034 "mlx/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 + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12043 "mlx/parser.ml" + + in -# 2284 "mlx/parser.mly" - ( _1, _2 ) -# 12269 "mlx/parser.ml" +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 12049 "mlx/parser.ml" in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2272 "mlx/parser.mly" - ( array, d, Bracket, i, r ) -# 12275 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 12059 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2311 "mlx/parser.mly" - ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 12285 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 12065 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12294,123 +12074,83 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; 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 = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; MenhirLib.EngineTypes.next = { - 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 = _; - 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; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in - let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( -# 694 "mlx/parser.mly" + let _1 : (Parsetree.expression) = Obj.magic _1 in + let op : ( +# 765 "mlx/parser.mly" (string) -# 12359 "mlx/parser.ml" - ) = Obj.magic _2 in - let _2_inlined1 : (Ppxlib.longident) = Obj.magic _2_inlined1 in - let _1 : unit = Obj.magic _1 in - let array : (Parsetree.expression) = Obj.magic array in +# 12099 "mlx/parser.ml" + ) = Obj.magic op in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = - let r = - let _1 = _1_inlined1 in - -# 2310 "mlx/parser.mly" - (Some v) -# 12373 "mlx/parser.ml" - - in - let i = -# 2729 "mlx/parser.mly" - ( es ) -# 12379 "mlx/parser.ml" - in - let d = - let _1 = - let _2 = _2_inlined1 in - let x = -# 2284 "mlx/parser.mly" - (_2) -# 12387 "mlx/parser.ml" + let _1 = + let e2 = + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 12111 "mlx/parser.ml" in -# 126 "" - ( Some x ) -# 12392 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 12116 "mlx/parser.ml" + + in + let op = + let _1 = +# 4028 "mlx/parser.mly" + ( op ) +# 12123 "mlx/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 + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12132 "mlx/parser.ml" in -# 2284 "mlx/parser.mly" - ( _1, _2 ) -# 12398 "mlx/parser.ml" +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 12138 "mlx/parser.ml" in + let _startpos__1_ = _startpos_e1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2272 "mlx/parser.mly" - ( array, d, Bracket, i, r ) -# 12404 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 12148 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2311 "mlx/parser.mly" - ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 12414 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 12154 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12423,70 +12163,156 @@ module Tables = struct 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.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 = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; } = _menhir_stack in - let _2 : (Parsetree.attribute) = Obj.magic _2 in - let _1 : (Parsetree.expression) = 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) = -# 2313 "mlx/parser.mly" - ( Exp.attr _1 _2 ) -# 12446 "mlx/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 xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let op : ( +# 765 "mlx/parser.mly" + (string) +# 12209 "mlx/parser.ml" + ) = Obj.magic op in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Parsetree.expression) = let _loc__1_ = (_startpos__1_, _endpos__1_) in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 12224 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 12229 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 12235 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 12246 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 12252 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 12272 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 12278 "mlx/parser.ml" + + in + let op = + let _1 = +# 4028 "mlx/parser.mly" + ( op ) +# 12285 "mlx/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 + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12294 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 12300 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 12310 "mlx/parser.ml" + + in -# 2316 "mlx/parser.mly" - ( not_expecting _loc__1_ "wildcard \"_\"" ) -# 12472 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (string Ppxlib.loc option) = -# 3925 "mlx/parser.mly" - ( None ) -# 12490 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 12316 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12499,104 +12325,79 @@ module Tables = struct 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.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.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _2 : (string Ppxlib.loc) = 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 : (string Ppxlib.loc option) = -# 3926 "mlx/parser.mly" - ( Some _2 ) -# 12522 "mlx/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; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.payload) = Obj.magic _3 in - let _2 : (string Ppxlib.loc) = Obj.magic _2 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : (Parsetree.extension) = -# 3938 "mlx/parser.mly" - ( (_2, _3) ) -# 12568 "mlx/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 : ( -# 756 "mlx/parser.mly" - (string * Location.t * string * Location.t * string option) -# 12589 "mlx/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.extension) = let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 12359 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 12364 "mlx/parser.ml" + + in + let op = + let _1 = +# 4029 "mlx/parser.mly" + ("+") +# 12371 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12379 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 12385 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 12395 "mlx/parser.ml" + + in -# 3940 "mlx/parser.mly" - ( mk_quotedext ~loc:_sloc _1 ) -# 12600 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 12401 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12609,82 +12410,152 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; }; } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let _1_inlined2 : (Ppxlib.longident) = Obj.magic _1_inlined2 in - let _3 : unit = Obj.magic _3 in - let _1_inlined1 : (string) = Obj.magic _1_inlined1 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined3_ in - let _v : (Parsetree.extension_constructor) = let attrs = - let _1 = _1_inlined3 in - -# 3922 "mlx/parser.mly" + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 12468 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 12473 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 12479 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" ( _1 ) -# 12655 "mlx/parser.ml" - - in - let _endpos_attrs_ = _endpos__1_inlined3_ in - let lid = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 12667 "mlx/parser.ml" - - in - let cid = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in +# 12490 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 12496 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 12516 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 12522 "mlx/parser.ml" + + in + let op = + let _1 = +# 4029 "mlx/parser.mly" + ("+") +# 12529 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12537 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 12543 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 12678 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 12553 "mlx/parser.ml" in - let _endpos = _endpos_attrs_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 3268 "mlx/parser.mly" - ( let info = symbol_info _endpos in - Te.rebind cid lid ~attrs ~loc:(make_loc _sloc) ~info ) -# 12688 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 12559 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12697,80 +12568,79 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; 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 = _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 = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Ppxlib.longident) = Obj.magic _1_inlined1 in - let _3 : unit = Obj.magic _3 in - let _1 : (string) = Obj.magic _1 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined2_ in - let _v : (Parsetree.extension_constructor) = let attrs = - let _1 = _1_inlined2 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 12736 "mlx/parser.ml" - - in - let _endpos_attrs_ = _endpos__1_inlined2_ in - let lid = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 12748 "mlx/parser.ml" - - in - let cid = + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 12602 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 12607 "mlx/parser.ml" + + in + let op = + let _1 = +# 4030 "mlx/parser.mly" + ("+.") +# 12614 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12622 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 12628 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 12758 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 12638 "mlx/parser.ml" in - let _startpos_cid_ = _startpos__1_ in - let _1 = -# 3743 "mlx/parser.mly" - ( () ) -# 12765 "mlx/parser.ml" - in - let _endpos = _endpos_attrs_ in - let _symbolstartpos = _startpos_cid_ in - let _sloc = (_symbolstartpos, _endpos) in -# 3268 "mlx/parser.mly" - ( let info = symbol_info _endpos in - Te.rebind cid lid ~attrs ~loc:(make_loc _sloc) ~info ) -# 12774 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 12644 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12783,67 +12653,152 @@ module Tables = struct 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.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; } = _menhir_stack in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.payload) = Obj.magic _3 in - let _2 : (string Ppxlib.loc) = Obj.magic _2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : (Parsetree.attribute) = let _endpos = _endpos__4_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3913 "mlx/parser.mly" - ( mark_symbol_docs _sloc; - Attr.mk ~loc:(make_loc _sloc) _2 _3 ) -# 12824 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = let params = -# 2061 "mlx/parser.mly" - ( [] ) -# 12842 "mlx/parser.ml" - in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 12711 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 12716 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 12722 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 12733 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 12739 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 12759 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 12765 "mlx/parser.ml" + + in + let op = + let _1 = +# 4030 "mlx/parser.mly" + ("+.") +# 12772 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12780 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 12786 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 12796 "mlx/parser.ml" + + in -# 1886 "mlx/parser.mly" - ( params ) -# 12847 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 12802 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12856,77 +12811,79 @@ 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _3 : unit = Obj.magic _3 in - let xs : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic xs in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = let params = - let params = - let xs = -# 253 "" - ( List.rev xs ) -# 12888 "mlx/parser.ml" - in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 12845 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 12850 "mlx/parser.ml" + + in + let op = + let _1 = +# 4031 "mlx/parser.mly" + ("+=") +# 12857 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12865 "mlx/parser.ml" + + in -# 1035 "mlx/parser.mly" - ( xs ) -# 12893 "mlx/parser.ml" +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 12871 "mlx/parser.ml" in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2063 "mlx/parser.mly" - ( params ) -# 12899 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 12881 "mlx/parser.ml" in -# 1886 "mlx/parser.mly" - ( params ) -# 12905 "mlx/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.expression) = 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.expression) = -# 2648 "mlx/parser.mly" +# 2418 "mlx/parser.mly" ( _1 ) -# 12930 "mlx/parser.ml" +# 12887 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12939,36 +12896,152 @@ 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 = 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.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; }; } = _menhir_stack in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 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 _endpos = _endpos__3_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 12954 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 12959 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 12965 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 12976 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 12982 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 13002 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 13008 "mlx/parser.ml" + + in + let op = + let _1 = +# 4031 "mlx/parser.mly" + ("+=") +# 13015 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13023 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 13029 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 13039 "mlx/parser.ml" + + in -# 2650 "mlx/parser.mly" - ( mkexp_constraint ~loc:_sloc _3 _1 ) -# 12972 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 13045 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12981,126 +13054,79 @@ module Tables = struct 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.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.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : (Parsetree.expression) = Obj.magic _2 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.expression) = -# 2674 "mlx/parser.mly" - ( _2 ) -# 13004 "mlx/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 : (Parsetree.expression) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let _2 : (Parsetree.core_type) = 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 _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in let _v : (Parsetree.expression) = let _1 = - let _1 = -# 2676 "mlx/parser.mly" - ( Pexp_constraint (_4, _2) ) -# 13051 "mlx/parser.ml" - in - let _endpos__1_ = _endpos__4_ in + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 13088 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 13093 "mlx/parser.ml" + + in + let op = + let _1 = +# 4032 "mlx/parser.mly" + ("-") +# 13100 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13108 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 13114 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 13060 "mlx/parser.ml" +# 13124 "mlx/parser.ml" in -# 2677 "mlx/parser.mly" +# 2418 "mlx/parser.mly" ( _1 ) -# 13066 "mlx/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 : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = 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 _endpos = _endpos__2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2680 "mlx/parser.mly" - ( - let (l,o,p) = _1 in - ghexp ~loc:_sloc (Pexp_fun(l, o, p, _2)) - ) -# 13104 "mlx/parser.ml" +# 13130 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13113,80 +13139,152 @@ 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; }; } = _menhir_stack in - let _5 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let xs : (string Ppxlib.loc list) = Obj.magic xs in - let _2 : unit = Obj.magic _2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 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 _3 = -# 2549 "mlx/parser.mly" + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 13197 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" ( xs ) -# 13157 "mlx/parser.ml" - in - let _endpos = _endpos__5_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in +# 13202 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 13208 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 13219 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 13225 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 13245 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 13251 "mlx/parser.ml" + + in + let op = + let _1 = +# 4032 "mlx/parser.mly" + ("-") +# 13258 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13266 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 13272 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 13282 "mlx/parser.ml" + + in -# 2685 "mlx/parser.mly" - ( mk_newtypes ~loc:_sloc _3 _5 ) -# 13165 "mlx/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 = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let ty : (Parsetree.core_type) = Obj.magic ty in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_ty_ in - let _endpos = _endpos_ty_ in - let _v : (Parsetree.core_type) = -# 3384 "mlx/parser.mly" - ( ty ) -# 13190 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 13288 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13199,68 +13297,79 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = codomain; - MenhirLib.EngineTypes.startp = _startpos_codomain_; - MenhirLib.EngineTypes.endp = _endpos_codomain_; + 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 = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = label; - MenhirLib.EngineTypes.startp = _startpos_label_; - MenhirLib.EngineTypes.endp = _endpos_label_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let codomain : (Parsetree.core_type) = Obj.magic codomain in - let _3 : unit = Obj.magic _3 in - let _1 : (Parsetree.core_type) = Obj.magic _1 in - let label : (string) = Obj.magic label in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_label_ in - let _endpos = _endpos_codomain_ in - let _v : (Parsetree.core_type) = let _1 = + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = let _1 = - let domain = -# 899 "mlx/parser.mly" - ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 13238 "mlx/parser.ml" - in - let label = -# 3396 "mlx/parser.mly" - ( Optional label ) -# 13243 "mlx/parser.ml" - in + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 13331 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 13336 "mlx/parser.ml" + + in + let op = + let _1 = +# 4033 "mlx/parser.mly" + ("-.") +# 13343 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13351 "mlx/parser.ml" + + in -# 3390 "mlx/parser.mly" - ( Ptyp_arrow(label, domain, codomain) ) -# 13248 "mlx/parser.ml" +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 13357 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 938 "mlx/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 13258 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 13367 "mlx/parser.ml" in -# 3392 "mlx/parser.mly" - ( _1 ) -# 13264 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 13373 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13273,79 +13382,152 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = codomain; - MenhirLib.EngineTypes.startp = _startpos_codomain_; - MenhirLib.EngineTypes.endp = _endpos_codomain_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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 = label; - MenhirLib.EngineTypes.startp = _startpos_label_; - MenhirLib.EngineTypes.endp = _endpos_label_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; }; } = _menhir_stack in - let codomain : (Parsetree.core_type) = Obj.magic codomain in - let _3 : unit = Obj.magic _3 in - let _1 : (Parsetree.core_type) = Obj.magic _1 in - let _2 : unit = Obj.magic _2 in - let label : ( -# 714 "mlx/parser.mly" - (string) -# 13313 "mlx/parser.ml" - ) = Obj.magic label in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_label_ in - let _endpos = _endpos_codomain_ in - let _v : (Parsetree.core_type) = let _1 = + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = let _1 = - let domain = -# 899 "mlx/parser.mly" - ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 13323 "mlx/parser.ml" - in - let label = -# 3398 "mlx/parser.mly" - ( Labelled label ) -# 13328 "mlx/parser.ml" - in + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 13440 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 13445 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 13451 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 13462 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 13468 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 13488 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 13494 "mlx/parser.ml" + + in + let op = + let _1 = +# 4033 "mlx/parser.mly" + ("-.") +# 13501 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13509 "mlx/parser.ml" + + in -# 3390 "mlx/parser.mly" - ( Ptyp_arrow(label, domain, codomain) ) -# 13333 "mlx/parser.ml" +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 13515 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 938 "mlx/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 13343 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 13525 "mlx/parser.ml" in -# 3392 "mlx/parser.mly" - ( _1 ) -# 13349 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 13531 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13358,61 +13540,79 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = codomain; - MenhirLib.EngineTypes.startp = _startpos_codomain_; - MenhirLib.EngineTypes.endp = _endpos_codomain_; + 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 = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let codomain : (Parsetree.core_type) = Obj.magic codomain in - let _3 : unit = Obj.magic _3 in - let _1 : (Parsetree.core_type) = Obj.magic _1 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos_codomain_ in - let _v : (Parsetree.core_type) = let _1 = + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = let _1 = - let domain = -# 899 "mlx/parser.mly" - ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 13390 "mlx/parser.ml" - in - let label = -# 3400 "mlx/parser.mly" - ( Nolabel ) -# 13395 "mlx/parser.ml" - in + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 13574 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 13579 "mlx/parser.ml" + + in + let op = + let _1 = +# 4034 "mlx/parser.mly" + ("*") +# 13586 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13594 "mlx/parser.ml" + + in -# 3390 "mlx/parser.mly" - ( Ptyp_arrow(label, domain, codomain) ) -# 13400 "mlx/parser.ml" +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 13600 "mlx/parser.ml" in - let _endpos__1_ = _endpos_codomain_ in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 938 "mlx/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 13410 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 13610 "mlx/parser.ml" in -# 3392 "mlx/parser.mly" - ( _1 ) -# 13416 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 13616 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13425,111 +13625,152 @@ module Tables = struct 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 : (Lexing.position * Parsetree.functor_parameter) = let _startpos = _startpos__1_ in - -# 1289 "mlx/parser.mly" - ( _startpos, Unit ) -# 13449 "mlx/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.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = mty; - MenhirLib.EngineTypes.startp = _startpos_mty_; - MenhirLib.EngineTypes.endp = _endpos_mty_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; }; } = _menhir_stack in - let _5 : unit = Obj.magic _5 in - let mty : (Parsetree.module_type) = Obj.magic mty in - let _3 : unit = Obj.magic _3 in - let _1_inlined1 : (string option) = Obj.magic _1_inlined1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Lexing.position * Parsetree.functor_parameter) = let x = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 13683 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 13688 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 13694 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 13705 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 13711 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 13731 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 13737 "mlx/parser.ml" + + in + let op = + let _1 = +# 4034 "mlx/parser.mly" + ("*") +# 13744 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13752 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 13758 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 13507 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 13768 "mlx/parser.ml" in - let _startpos = _startpos__1_ in -# 1292 "mlx/parser.mly" - ( _startpos, Named (x, mty) ) -# 13514 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Dune__exe__Ast_helper.str list * Parsetree.constructor_arguments * - Parsetree.core_type option) = -# 3183 "mlx/parser.mly" - ( ([],Pcstr_tuple [],None) ) -# 13533 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 13774 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13542,74 +13783,79 @@ module Tables = struct 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.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.state = _; 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.constructor_arguments) = 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 : (Dune__exe__Ast_helper.str list * Parsetree.constructor_arguments * - Parsetree.core_type option) = -# 3184 "mlx/parser.mly" - ( ([],_2,None) ) -# 13566 "mlx/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; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _4 : (Parsetree.core_type) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let _2 : (Parsetree.constructor_arguments) = Obj.magic _2 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : (Dune__exe__Ast_helper.str list * Parsetree.constructor_arguments * - Parsetree.core_type option) = -# 3186 "mlx/parser.mly" - ( ([],_2,Some _4) ) -# 13613 "mlx/parser.ml" + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 13817 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 13822 "mlx/parser.ml" + + in + let op = + let _1 = +# 4035 "mlx/parser.mly" + ("%") +# 13829 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13837 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 13843 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 13853 "mlx/parser.ml" + + in + +# 2418 "mlx/parser.mly" + ( _1 ) +# 13859 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13622,34 +13868,34 @@ 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 = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + 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 = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; @@ -13657,39 +13903,117 @@ module Tables = struct }; }; } = _menhir_stack in - let _6 : (Parsetree.core_type) = Obj.magic _6 in - let _5 : unit = Obj.magic _5 in - let _4 : (Parsetree.constructor_arguments) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let xs : (string Ppxlib.loc list) = Obj.magic xs in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__6_ in - let _v : (Dune__exe__Ast_helper.str list * Parsetree.constructor_arguments * - Parsetree.core_type option) = let _2 = + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = let _1 = - let xs = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = # 253 "" ( List.rev xs ) -# 13676 "mlx/parser.ml" - in - -# 1003 "mlx/parser.mly" +# 13926 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 13931 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" ( xs ) -# 13681 "mlx/parser.ml" +# 13937 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 13948 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 13954 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 13974 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 13980 "mlx/parser.ml" + + in + let op = + let _1 = +# 4035 "mlx/parser.mly" + ("%") +# 13987 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13995 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 14001 "mlx/parser.ml" in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3319 "mlx/parser.mly" - ( _1 ) -# 13687 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 14011 "mlx/parser.ml" in -# 3189 "mlx/parser.mly" - ( (_2,_4,Some _6) ) -# 13693 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 14017 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13702,27 +14026,79 @@ module Tables = struct 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.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.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : (Parsetree.core_type) = Obj.magic _2 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Dune__exe__Ast_helper.str list * Parsetree.constructor_arguments * - Parsetree.core_type option) = -# 3191 "mlx/parser.mly" - ( ([],Pcstr_tuple [],Some _2) ) -# 13726 "mlx/parser.ml" + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 14060 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 14065 "mlx/parser.ml" + + in + let op = + let _1 = +# 4036 "mlx/parser.mly" + ("=") +# 14072 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14080 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 14086 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 14096 "mlx/parser.ml" + + in + +# 2418 "mlx/parser.mly" + ( _1 ) +# 14102 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13735,60 +14111,152 @@ module Tables = struct 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.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; } = _menhir_stack in - let _4 : (Parsetree.core_type) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let xs : (string Ppxlib.loc list) = Obj.magic xs in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : (Dune__exe__Ast_helper.str list * Parsetree.constructor_arguments * - Parsetree.core_type option) = let _2 = + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = let _1 = - let xs = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = # 253 "" ( List.rev xs ) -# 13775 "mlx/parser.ml" - in - -# 1003 "mlx/parser.mly" +# 14169 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 14174 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" ( xs ) -# 13780 "mlx/parser.ml" +# 14180 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 14191 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 14197 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 14217 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 14223 "mlx/parser.ml" + + in + let op = + let _1 = +# 4036 "mlx/parser.mly" + ("=") +# 14230 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14238 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 14244 "mlx/parser.ml" in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3319 "mlx/parser.mly" - ( _1 ) -# 13786 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 14254 "mlx/parser.ml" in -# 3193 "mlx/parser.mly" - ( (_2,Pcstr_tuple [],Some _4) ) -# 13792 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 14260 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13801,71 +14269,79 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = vars_args_res; - MenhirLib.EngineTypes.startp = _startpos_vars_args_res_; - MenhirLib.EngineTypes.endp = _endpos_vars_args_res_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; 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 _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let vars_args_res : (Dune__exe__Ast_helper.str list * Parsetree.constructor_arguments * - Parsetree.core_type option) = Obj.magic vars_args_res in - let _1_inlined1 : (string) = Obj.magic _1_inlined1 in + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined2_ in - let _v : (Dune__exe__Ast_helper.str * Dune__exe__Ast_helper.str list * - Parsetree.constructor_arguments * Parsetree.core_type option * - Parsetree.attributes * Warnings.loc * Dune__exe__Docstrings.info) = let attrs = - let _1 = _1_inlined2 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 13843 "mlx/parser.ml" - - in - let _endpos_attrs_ = _endpos__1_inlined2_ in - let cid = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 14303 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 14308 "mlx/parser.ml" + + in + let op = + let _1 = +# 4037 "mlx/parser.mly" + ("<") +# 14315 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14323 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 14329 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 13855 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 14339 "mlx/parser.ml" in - let _endpos = _endpos_attrs_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 3131 "mlx/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 - ) -# 13869 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 14345 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13878,69 +14354,152 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = vars_args_res; - MenhirLib.EngineTypes.startp = _startpos_vars_args_res_; - MenhirLib.EngineTypes.endp = _endpos_vars_args_res_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; }; } = _menhir_stack in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let vars_args_res : (Dune__exe__Ast_helper.str list * Parsetree.constructor_arguments * - Parsetree.core_type option) = Obj.magic vars_args_res in - let _1 : (string) = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined1_ in - let _v : (Dune__exe__Ast_helper.str * Dune__exe__Ast_helper.str list * - Parsetree.constructor_arguments * Parsetree.core_type option * - Parsetree.attributes * Warnings.loc * Dune__exe__Docstrings.info) = let attrs = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 14412 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 14417 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 14423 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" ( _1 ) -# 13913 "mlx/parser.ml" - - in - let _endpos_attrs_ = _endpos__1_inlined1_ in - let cid = +# 14434 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 14440 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 14460 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 14466 "mlx/parser.ml" + + in + let op = + let _1 = +# 4037 "mlx/parser.mly" + ("<") +# 14473 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14481 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 14487 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 13924 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 14497 "mlx/parser.ml" in - let _startpos_cid_ = _startpos__1_ in - let _1 = -# 3743 "mlx/parser.mly" - ( () ) -# 13931 "mlx/parser.ml" - in - let _endpos = _endpos_attrs_ in - let _symbolstartpos = _startpos_cid_ in - let _sloc = (_symbolstartpos, _endpos) in -# 3131 "mlx/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 - ) -# 13944 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 14503 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13953,149 +14512,79 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined4; - MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + 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 = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; 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_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = params; - MenhirLib.EngineTypes.startp = _startpos_params_; - MenhirLib.EngineTypes.endp = _endpos_params_; - 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 = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; - 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 = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in - let xs : ((Parsetree.core_type * Parsetree.core_type * Warnings.loc) list) = Obj.magic xs in - 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 : ( -# 714 "mlx/parser.mly" - (string) -# 14017 "mlx/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 - let ext : (string Ppxlib.loc option) = Obj.magic ext in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined4_ in - let _v : ((Asttypes.rec_flag * string Ppxlib.loc option) * Parsetree.type_declaration) = let attrs2 = - let _1 = _1_inlined4 in - -# 3918 "mlx/parser.mly" - ( _1 ) -# 14031 "mlx/parser.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined4_ in - let cstrs = + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 14040 "mlx/parser.ml" - in + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 14546 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 14551 "mlx/parser.ml" + + in + let op = + let _1 = +# 4038 "mlx/parser.mly" + (">") +# 14558 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14566 "mlx/parser.ml" + + in -# 985 "mlx/parser.mly" - ( xs ) -# 14045 "mlx/parser.ml" +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 14572 "mlx/parser.ml" in - -# 3036 "mlx/parser.mly" - ( _1 ) -# 14051 "mlx/parser.ml" - - in - let kind_priv_manifest = - let _1 = _1_inlined3 in - -# 3071 "mlx/parser.mly" - ( _2 ) -# 14059 "mlx/parser.ml" - - in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 14070 "mlx/parser.ml" - - in - let flag = -# 3763 "mlx/parser.mly" - ( Recursive ) -# 14076 "mlx/parser.ml" - in - let attrs1 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 14083 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 14582 "mlx/parser.ml" in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 3008 "mlx/parser.mly" - ( - let (kind, priv, manifest) = kind_priv_manifest in - let docs = symbol_docs _sloc in - let attrs = attrs1 @ attrs2 in - let loc = make_loc _sloc in - (flag, ext), - Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs - ) -# 14099 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 14588 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14108,162 +14597,152 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined5; - MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined4; - MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + 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 = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = params; - MenhirLib.EngineTypes.startp = _startpos_params_; - MenhirLib.EngineTypes.endp = _endpos_params_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; - 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 = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; }; } = _menhir_stack in - let _1_inlined5 : (Parsetree.attributes) = Obj.magic _1_inlined5 in - let xs : ((Parsetree.core_type * Parsetree.core_type * Warnings.loc) list) = Obj.magic xs in - 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 : ( -# 714 "mlx/parser.mly" - (string) -# 14178 "mlx/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 - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let ext : (string Ppxlib.loc option) = Obj.magic ext in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined5_ in - let _v : ((Asttypes.rec_flag * string Ppxlib.loc option) * Parsetree.type_declaration) = let attrs2 = - let _1 = _1_inlined5 in - -# 3918 "mlx/parser.mly" - ( _1 ) -# 14193 "mlx/parser.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined5_ in - let cstrs = + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = let _1 = - let xs = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = # 253 "" ( List.rev xs ) -# 14202 "mlx/parser.ml" - in - -# 985 "mlx/parser.mly" +# 14655 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 14660 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" ( xs ) -# 14207 "mlx/parser.ml" +# 14666 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 14677 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 14683 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 14703 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 14709 "mlx/parser.ml" + + in + let op = + let _1 = +# 4038 "mlx/parser.mly" + (">") +# 14716 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14724 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 14730 "mlx/parser.ml" in - -# 3036 "mlx/parser.mly" - ( _1 ) -# 14213 "mlx/parser.ml" - - in - let kind_priv_manifest = - let _1 = _1_inlined4 in - -# 3071 "mlx/parser.mly" - ( _2 ) -# 14221 "mlx/parser.ml" - - in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 14232 "mlx/parser.ml" - - in - let flag = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _startpos = _startpos__1_ in - let _loc = (_startpos, _endpos) in - -# 3765 "mlx/parser.mly" - ( not_expecting _loc "nonrec flag" ) -# 14243 "mlx/parser.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 14251 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 14740 "mlx/parser.ml" in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 3008 "mlx/parser.mly" - ( - let (kind, priv, manifest) = kind_priv_manifest in - let docs = symbol_docs _sloc in - let attrs = attrs1 @ attrs2 in - let loc = make_loc _sloc in - (flag, ext), - Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs - ) -# 14267 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 14746 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14276,134 +14755,79 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = kind_priv_manifest; - MenhirLib.EngineTypes.startp = _startpos_kind_priv_manifest_; - MenhirLib.EngineTypes.endp = _endpos_kind_priv_manifest_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = params; - MenhirLib.EngineTypes.startp = _startpos_params_; - MenhirLib.EngineTypes.endp = _endpos_params_; - 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 = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; - 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 = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let xs : ((Parsetree.core_type * Parsetree.core_type * Warnings.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 : ( -# 714 "mlx/parser.mly" - (string) -# 14333 "mlx/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 - let ext : (string Ppxlib.loc option) = Obj.magic ext in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined3_ in - let _v : ((Asttypes.rec_flag * string Ppxlib.loc option) * Parsetree.type_declaration) = let attrs2 = - let _1 = _1_inlined3 in - -# 3918 "mlx/parser.mly" - ( _1 ) -# 14347 "mlx/parser.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let cstrs = + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 14356 "mlx/parser.ml" - in + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 14789 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 14794 "mlx/parser.ml" + + in + let op = + let _1 = +# 4039 "mlx/parser.mly" + ("or") +# 14801 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14809 "mlx/parser.ml" + + in -# 985 "mlx/parser.mly" - ( xs ) -# 14361 "mlx/parser.ml" +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 14815 "mlx/parser.ml" in - -# 3036 "mlx/parser.mly" - ( _1 ) -# 14367 "mlx/parser.ml" - - in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 14378 "mlx/parser.ml" - - in - let flag = -# 3759 "mlx/parser.mly" - ( Recursive ) -# 14384 "mlx/parser.ml" - in - let attrs1 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 14391 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 14825 "mlx/parser.ml" in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 3008 "mlx/parser.mly" - ( - let (kind, priv, manifest) = kind_priv_manifest in - let docs = symbol_docs _sloc in - let attrs = attrs1 @ attrs2 in - let loc = make_loc _sloc in - (flag, ext), - Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs - ) -# 14407 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 14831 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14416,144 +14840,152 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined4; - MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = kind_priv_manifest; - MenhirLib.EngineTypes.startp = _startpos_kind_priv_manifest_; - MenhirLib.EngineTypes.endp = _endpos_kind_priv_manifest_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = params; - MenhirLib.EngineTypes.startp = _startpos_params_; - MenhirLib.EngineTypes.endp = _endpos_params_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; - 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 = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; }; } = _menhir_stack in - let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in - let xs : ((Parsetree.core_type * Parsetree.core_type * Warnings.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 : ( -# 714 "mlx/parser.mly" - (string) -# 14479 "mlx/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 - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let ext : (string Ppxlib.loc option) = Obj.magic ext in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined4_ in - let _v : ((Asttypes.rec_flag * string Ppxlib.loc option) * Parsetree.type_declaration) = let attrs2 = - let _1 = _1_inlined4 in - -# 3918 "mlx/parser.mly" - ( _1 ) -# 14494 "mlx/parser.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined4_ in - let cstrs = + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = let _1 = - let xs = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = # 253 "" ( List.rev xs ) -# 14503 "mlx/parser.ml" - in - -# 985 "mlx/parser.mly" +# 14898 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 14903 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" ( xs ) -# 14508 "mlx/parser.ml" +# 14909 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 14920 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 14926 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 14946 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 14952 "mlx/parser.ml" + + in + let op = + let _1 = +# 4039 "mlx/parser.mly" + ("or") +# 14959 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14967 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 14973 "mlx/parser.ml" in - -# 3036 "mlx/parser.mly" - ( _1 ) -# 14514 "mlx/parser.ml" - - in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 14525 "mlx/parser.ml" - - in - let flag = - let _1 = _1_inlined2 in - -# 3760 "mlx/parser.mly" - ( Nonrecursive ) -# 14533 "mlx/parser.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 14541 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 14983 "mlx/parser.ml" in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 3008 "mlx/parser.mly" - ( - let (kind, priv, manifest) = kind_priv_manifest in - let docs = symbol_docs _sloc in - let attrs = attrs1 @ attrs2 in - let loc = make_loc _sloc in - (flag, ext), - Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs - ) -# 14557 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 14989 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14565,24 +14997,80 @@ module Tables = struct (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; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let _1 : ( -# 767 "mlx/parser.mly" - (string) -# 14578 "mlx/parser.ml" - ) = Obj.magic _1 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (string) = -# 3584 "mlx/parser.mly" - ( _1 ) -# 14586 "mlx/parser.ml" + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 15032 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 15037 "mlx/parser.ml" + + in + let op = + let _1 = +# 4040 "mlx/parser.mly" + ("||") +# 15044 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 15052 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 15058 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 15068 "mlx/parser.ml" + + in + +# 2418 "mlx/parser.mly" + ( _1 ) +# 15074 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14594,24 +15082,153 @@ module Tables = struct (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; + 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 = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; } = _menhir_stack in - let _1 : ( -# 714 "mlx/parser.mly" - (string) -# 14607 "mlx/parser.ml" - ) = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (string) = -# 3585 "mlx/parser.mly" - ( _1 ) -# 14615 "mlx/parser.ml" + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 15141 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 15146 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 15152 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 15163 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 15169 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 15189 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 15195 "mlx/parser.ml" + + in + let op = + let _1 = +# 4040 "mlx/parser.mly" + ("||") +# 15202 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 15210 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 15216 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 15226 "mlx/parser.ml" + + in + +# 2418 "mlx/parser.mly" + ( _1 ) +# 15232 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14624,47 +15241,82 @@ module Tables = struct 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.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.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.structure) = 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.structure) = -# 1156 "mlx/parser.mly" - ( _1 ) -# 14647 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (string) = -# 3634 "mlx/parser.mly" - ( "" ) -# 14665 "mlx/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 15275 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 15280 "mlx/parser.ml" + + in + let op = + let _1 = +# 4041 "mlx/parser.mly" + ("&") +# 15287 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 15295 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 15301 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 15311 "mlx/parser.ml" + + in + +# 2418 "mlx/parser.mly" + ( _1 ) +# 15317 "mlx/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = Obj.repr _v; MenhirLib.EngineTypes.startp = _startpos; MenhirLib.EngineTypes.endp = _endpos; @@ -14674,26 +15326,152 @@ module Tables = struct 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.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 = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; } = _menhir_stack in - let _2 : unit = Obj.magic _2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (string) = -# 3635 "mlx/parser.mly" - ( ";.." ) -# 14697 "mlx/parser.ml" + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 15384 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 15389 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 15395 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 15406 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 15412 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 15432 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 15438 "mlx/parser.ml" + + in + let op = + let _1 = +# 4041 "mlx/parser.mly" + ("&") +# 15445 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 15453 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 15459 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 15469 "mlx/parser.ml" + + in + +# 2418 "mlx/parser.mly" + ( _1 ) +# 15475 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14706,26 +15484,79 @@ module Tables = struct 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.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.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.signature) = Obj.magic _1 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.signature) = -# 1163 "mlx/parser.mly" - ( _1 ) -# 14729 "mlx/parser.ml" + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 15518 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 15523 "mlx/parser.ml" + + in + let op = + let _1 = +# 4042 "mlx/parser.mly" + ("&&") +# 15530 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 15538 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 15544 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 15554 "mlx/parser.ml" + + in + +# 2418 "mlx/parser.mly" + ( _1 ) +# 15560 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14738,72 +15569,152 @@ module Tables = struct 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.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; } = _menhir_stack in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.payload) = Obj.magic _3 in - let _2 : (string Ppxlib.loc) = Obj.magic _2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : (Parsetree.extension) = -# 3943 "mlx/parser.mly" - ( (_2, _3) ) -# 14775 "mlx/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 : ( -# 758 "mlx/parser.mly" - (string * Location.t * string * Location.t * string option) -# 14796 "mlx/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.extension) = let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 15627 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 15632 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 15638 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 15649 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 15655 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 15675 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 15681 "mlx/parser.ml" + + in + let op = + let _1 = +# 4042 "mlx/parser.mly" + ("&&") +# 15688 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 15696 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 15702 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 15712 "mlx/parser.ml" + + in -# 3945 "mlx/parser.mly" - ( mk_quotedext ~loc:_sloc _1 ) -# 14807 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 15718 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14816,57 +15727,79 @@ 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = tag; - MenhirLib.EngineTypes.startp = _startpos_tag_; - MenhirLib.EngineTypes.endp = _endpos_tag_; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _3 : unit = Obj.magic _3 in - let xs : (((Lexing.position * Lexing.position) * - [ `Prop of string * Parsetree.expression - | `Prop_opt of string * Parsetree.expression - | `Prop_opt_punned of string - | `Prop_punned of string ]) - list) = Obj.magic xs in - let tag : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * - Ppxlib.longident) = Obj.magic tag in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_tag_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.expression_desc) = let props = - let xs = -# 253 "" - ( List.rev xs ) -# 14853 "mlx/parser.ml" - in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 15761 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 15766 "mlx/parser.ml" + + in + let op = + let _1 = +# 4043 "mlx/parser.mly" + (":=") +# 15773 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 15781 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 15787 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 985 "mlx/parser.mly" - ( xs ) -# 14858 "mlx/parser.ml" +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 15797 "mlx/parser.ml" in - let _loc_tag_ = (_startpos_tag_, _endpos_tag_) in -# 2507 "mlx/parser.mly" - ( - let children = - let children, loc = mktailexp _loc_tag_ [] in - mkexp ~loc children - in - Jsx_helper.make_jsx_element () ~raise ~loc:_loc_tag_ ~tag ~end_tag:None ~props ~children ) -# 14870 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 15803 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14879,34 +15812,34 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = end_tag_; - MenhirLib.EngineTypes.startp = _startpos_end_tag__; - MenhirLib.EngineTypes.endp = _endpos_end_tag__; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = end_tag; - MenhirLib.EngineTypes.startp = _startpos_end_tag_; - MenhirLib.EngineTypes.endp = _endpos_end_tag_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs_inlined1; - MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; - MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + 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 = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = tag; - MenhirLib.EngineTypes.startp = _startpos_tag_; - MenhirLib.EngineTypes.endp = _endpos_tag_; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; @@ -14914,67 +15847,121 @@ module Tables = struct }; }; } = _menhir_stack in - let end_tag_ : unit = Obj.magic end_tag_ in - let end_tag : ([> `Module | `Value ] * (Lexing.position * Lexing.position) * - Ppxlib.longident) = Obj.magic end_tag in - let xs_inlined1 : (Parsetree.expression list) = Obj.magic xs_inlined1 in - let _3 : unit = Obj.magic _3 in - let xs : (((Lexing.position * Lexing.position) * - [ `Prop of string * Parsetree.expression - | `Prop_opt of string * Parsetree.expression - | `Prop_opt_punned of string - | `Prop_punned of string ]) - list) = Obj.magic xs in - let tag : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * - Ppxlib.longident) = Obj.magic tag in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_tag_ in - let _endpos = _endpos_end_tag__ in - let _v : (Parsetree.expression_desc) = let children = - let xs = xs_inlined1 in - let xs = + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = # 253 "" ( List.rev xs ) -# 14939 "mlx/parser.ml" - in - -# 985 "mlx/parser.mly" +# 15870 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" ( xs ) -# 14944 "mlx/parser.ml" - - in - let (_endpos_children_, _startpos_children_) = (_endpos_xs_inlined1_, _startpos_xs_inlined1_) in - let props = - let xs = -# 253 "" - ( List.rev xs ) -# 14952 "mlx/parser.ml" - in - -# 985 "mlx/parser.mly" +# 15875 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" ( xs ) -# 14957 "mlx/parser.ml" - - in - let _loc_tag_ = (_startpos_tag_, _endpos_tag_) in - let _loc_end_tag__ = (_startpos_end_tag__, _endpos_end_tag__) in - let _loc_children_ = (_startpos_children_, _endpos_children_) in - -# 2514 "mlx/parser.mly" - ( - let children = - let children, loc = mktailexp _loc_children_ children in - mkexp ~loc children - in - let _ = end_tag_ in - Jsx_helper.make_jsx_element () - ~raise ~loc:_loc_tag_ ~tag ~end_tag:(Some (end_tag, _loc_end_tag__)) ~props ~children - ) -# 14974 "mlx/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; +# 15881 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 15892 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 15898 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 15918 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 15924 "mlx/parser.ml" + + in + let op = + let _1 = +# 4043 "mlx/parser.mly" + (":=") +# 15931 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1005 "mlx/parser.mly" + ( mkoperator ~loc:_sloc _1 ) +# 15939 "mlx/parser.ml" + + in + +# 2499 "mlx/parser.mly" + ( mkinfix e1 op e2 ) +# 15945 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 15955 "mlx/parser.ml" + + in + +# 2418 "mlx/parser.mly" + ( _1 ) +# 15961 "mlx/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; @@ -14982,28 +15969,63 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = id; - MenhirLib.EngineTypes.startp = _startpos_id_; - MenhirLib.EngineTypes.endp = _endpos_id_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 id : ( -# 768 "mlx/parser.mly" - (string) -# 14995 "mlx/parser.ml" - ) = Obj.magic id in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : (string) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_id_ in - let _endpos = _endpos_id_ in - let _v : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * - Ppxlib.longident) = let _endpos = _endpos_id_ in - let _symbolstartpos = _startpos_id_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let _2 = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 15997 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 16002 "mlx/parser.ml" + + in + let _endpos__2_ = _endpos__1_inlined1_ in + let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 2501 "mlx/parser.mly" + ( mkuminus ~sloc:_sloc ~oploc:_loc__1_ _1 _2 ) +# 16013 "mlx/parser.ml" + + in + let _endpos__1_ = _endpos__1_inlined1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 16023 "mlx/parser.ml" + + in -# 3663 "mlx/parser.mly" - ( `Module, _sloc, Lident id ) -# 15007 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 16029 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15015,28 +16037,204 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { + 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 = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : (string) = 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 : (Parsetree.expression) = let _1 = + let _1 = + let _2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 16089 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 16094 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 16100 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 16111 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 16117 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 16137 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 16143 "mlx/parser.ml" + + in + let _endpos__2_ = _endpos_xs_ in + let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 2501 "mlx/parser.mly" + ( mkuminus ~sloc:_sloc ~oploc:_loc__1_ _1 _2 ) +# 16154 "mlx/parser.ml" + + in + let _endpos__1_ = _endpos_xs_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 16164 "mlx/parser.ml" + + in + +# 2418 "mlx/parser.mly" + ( _1 ) +# 16170 "mlx/parser.ml" + in + { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = id; - MenhirLib.EngineTypes.startp = _startpos_id_; - MenhirLib.EngineTypes.endp = _endpos_id_; + 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 = _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 id : ( -# 715 "mlx/parser.mly" - (string) -# 15028 "mlx/parser.ml" - ) = Obj.magic id in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : (string) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_id_ in - let _endpos = _endpos_id_ in - let _v : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * - Ppxlib.longident) = let _endpos = _endpos_id_ in - let _symbolstartpos = _startpos_id_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let _2 = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 16206 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 16211 "mlx/parser.ml" + + in + let _endpos__2_ = _endpos__1_inlined1_ in + let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 2503 "mlx/parser.mly" + ( mkuplus ~sloc:_sloc ~oploc:_loc__1_ _1 _2 ) +# 16222 "mlx/parser.ml" + + in + let _endpos__1_ = _endpos__1_inlined1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 16232 "mlx/parser.ml" + + in -# 3664 "mlx/parser.mly" - ( `Value, _sloc, Lident id ) -# 15040 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 16238 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15049,47 +16247,135 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = id; - MenhirLib.EngineTypes.startp = _startpos_id_; - MenhirLib.EngineTypes.endp = _endpos_id_; + 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.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = prefix; - MenhirLib.EngineTypes.startp = _startpos_prefix_; - MenhirLib.EngineTypes.endp = _endpos_prefix_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 id : (Ppxlib.longident) = Obj.magic id in - let _2 : unit = Obj.magic _2 in - let prefix : ( -# 768 "mlx/parser.mly" - (string) -# 15075 "mlx/parser.ml" - ) = Obj.magic prefix in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : (string) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_prefix_ in - let _endpos = _endpos_id_ in - let _v : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * - Ppxlib.longident) = let _endpos = _endpos_id_ in - let _symbolstartpos = _startpos_prefix_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let _2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 16298 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 16303 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 16309 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 16320 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 16326 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 16346 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 16352 "mlx/parser.ml" + + in + let _endpos__2_ = _endpos_xs_ in + let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 2503 "mlx/parser.mly" + ( mkuplus ~sloc:_sloc ~oploc:_loc__1_ _1 _2 ) +# 16363 "mlx/parser.ml" + + in + let _endpos__1_ = _endpos_xs_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 16373 "mlx/parser.ml" + + in -# 3665 "mlx/parser.mly" - ( - let rec rebase = function - | Lident id -> Ldot (Lident prefix, id) - | Ldot (prefix', id) -> Ldot (rebase prefix', id) - | Lapply _ -> assert false - in - `Module, _sloc, rebase id ) -# 15093 "mlx/parser.ml" +# 2418 "mlx/parser.mly" + ( _1 ) +# 16379 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15102,9 +16388,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = id; - MenhirLib.EngineTypes.startp = _startpos_id_; - MenhirLib.EngineTypes.endp = _endpos_id_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -15112,37 +16398,26 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = prefix; - MenhirLib.EngineTypes.startp = _startpos_prefix_; - MenhirLib.EngineTypes.endp = _endpos_prefix_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let id : (Ppxlib.longident) = Obj.magic id in + let _3 : (Parsetree.expression) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let prefix : ( -# 768 "mlx/parser.mly" - (string) -# 15128 "mlx/parser.ml" - ) = Obj.magic prefix in + let _1 : (let_bindings) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_prefix_ in - let _endpos = _endpos_id_ in - let _v : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * - Ppxlib.longident) = let _endpos = _endpos_id_ in - let _symbolstartpos = _startpos_prefix_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.expression) = let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3672 "mlx/parser.mly" - ( - let rec rebase = function - | Lident id -> Ldot (Lident prefix, id) - | Ldot (prefix', id) -> Ldot (rebase prefix', id) - | Lapply _ -> assert false - in - `Value, _sloc, rebase id ) -# 15146 "mlx/parser.ml" +# 2420 "mlx/parser.mly" + ( expr_of_let_bindings ~loc:_sloc _1 _3 ) +# 16421 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15154,28 +16429,63 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = id; - MenhirLib.EngineTypes.startp = _startpos_id_; - MenhirLib.EngineTypes.endp = _endpos_id_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = body; + MenhirLib.EngineTypes.startp = _startpos_body_; + MenhirLib.EngineTypes.endp = _endpos_body_; + 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 = bindings; + MenhirLib.EngineTypes.startp = _startpos_bindings_; + MenhirLib.EngineTypes.endp = _endpos_bindings_; + 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 id : ( -# 769 "mlx/parser.mly" + let body : (Parsetree.expression) = Obj.magic body in + let _3 : unit = Obj.magic _3 in + let bindings : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = Obj.magic bindings in + let _1 : ( +# 767 "mlx/parser.mly" (string) -# 15167 "mlx/parser.ml" - ) = Obj.magic id in +# 16463 "mlx/parser.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_id_ in - let _endpos = _endpos_id_ in - let _v : ([> `Module | `Value ] * (Lexing.position * Lexing.position) * - Ppxlib.longident) = let _endpos = _endpos_id_ in - let _symbolstartpos = _startpos_id_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos_body_ in + let _v : (Parsetree.expression) = let pbop_op = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 16475 "mlx/parser.ml" + + in + let _startpos_pbop_op_ = _startpos__1_ in + let _endpos = _endpos_body_ in + let _symbolstartpos = _startpos_pbop_op_ in let _sloc = (_symbolstartpos, _endpos) in -# 3663 "mlx/parser.mly" - ( `Module, _sloc, Lident id ) -# 15179 "mlx/parser.ml" +# 2422 "mlx/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}) ) +# 16489 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15187,28 +16497,12578 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = id; - MenhirLib.EngineTypes.startp = _startpos_id_; - MenhirLib.EngineTypes.endp = _endpos_id_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 id : ( -# 716 "mlx/parser.mly" - (string) -# 15200 "mlx/parser.ml" - ) = Obj.magic id in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_id_ in - let _endpos = _endpos_id_ in - let _v : ([> `Module | `Value ] * (Lexing.position * Lexing.position) * - Ppxlib.longident) = let _endpos = _endpos_id_ in - let _symbolstartpos = _startpos_id_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _3 = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 16530 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 16535 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos__1_inlined1_ in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _loc__2_ = (_startpos__2_, _endpos__2_) in let _sloc = (_symbolstartpos, _endpos) in -# 3664 "mlx/parser.mly" - ( `Value, _sloc, Lident id ) -# 15212 "mlx/parser.ml" +# 2428 "mlx/parser.mly" + ( mkexp_cons ~loc:_sloc _loc__2_ + (ghexp ~loc:_sloc (Pexp_tuple[None,_1;None,_3])) ) +# 16547 "mlx/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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = 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 : (Parsetree.expression) = let _3 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 16612 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 16617 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 16623 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 16634 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 16640 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 16660 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 16666 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _loc__2_ = (_startpos__2_, _endpos__2_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 2428 "mlx/parser.mly" + ( mkexp_cons ~loc:_sloc _loc__2_ + (ghexp ~loc:_sloc (Pexp_tuple[None,_1;None,_3])) ) +# 16678 "mlx/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 = _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 _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 786 "mlx/parser.mly" + (string) +# 16713 "mlx/parser.ml" + ) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _3 = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 16723 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 16728 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos__1_inlined1_ in + let _1 = + let _1 = +# 3967 "mlx/parser.mly" + ( _1 ) +# 16736 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 16744 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2431 "mlx/parser.mly" + ( mkexp ~loc:_sloc (Pexp_setinstvar(_1, _3)) ) +# 16753 "mlx/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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 786 "mlx/parser.mly" + (string) +# 16809 "mlx/parser.ml" + ) = 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 : (Parsetree.expression) = let _3 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 16822 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 16827 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 16833 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 16844 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 16850 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 16870 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 16876 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _1 = + let _1 = +# 3967 "mlx/parser.mly" + ( _1 ) +# 16884 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 16892 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2431 "mlx/parser.mly" + ( mkexp ~loc:_sloc (Pexp_setinstvar(_1, _3)) ) +# 16901 "mlx/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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _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 _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _4 : unit = Obj.magic _4 in + let _1_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined2_ in + let _v : (Parsetree.expression) = let _5 = + let _1 = _1_inlined2 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 16956 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 16961 "mlx/parser.ml" + + in + let _endpos__5_ = _endpos__1_inlined2_ in + let _3 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 16973 "mlx/parser.ml" + + in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2433 "mlx/parser.mly" + ( mkexp ~loc:_sloc (Pexp_setfield(_1, _3, _5)) ) +# 16982 "mlx/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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _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 xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Ppxlib.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _4 : unit = Obj.magic _4 in + let _1_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = 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 : (Parsetree.expression) = let _5 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined2_, _1_inlined4, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 17061 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 17066 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 17072 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 17083 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 17089 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 17109 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 17115 "mlx/parser.ml" + + in + let _endpos__5_ = _endpos_xs_ in + let _3 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 17127 "mlx/parser.ml" + + in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2433 "mlx/parser.mly" + ( mkexp ~loc:_sloc (Pexp_setfield(_1, _3, _5)) ) +# 17136 "mlx/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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + 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 = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let i : (Parsetree.expression) = Obj.magic i in + let _3 : unit = Obj.magic _3 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 17207 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 17212 "mlx/parser.ml" + + in + +# 2434 "mlx/parser.mly" + (Some v) +# 17218 "mlx/parser.ml" + + in + +# 2393 "mlx/parser.mly" + ( array, d, Paren, i, r ) +# 17224 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2435 "mlx/parser.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 17234 "mlx/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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + 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 = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let i : (Parsetree.expression) = Obj.magic i in + let _3 : unit = Obj.magic _3 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 17329 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 17334 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 17340 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 17351 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 17357 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 17377 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 17383 "mlx/parser.ml" + + in + +# 2434 "mlx/parser.mly" + (Some v) +# 17389 "mlx/parser.ml" + + in + +# 2393 "mlx/parser.mly" + ( array, d, Paren, i, r ) +# 17395 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2435 "mlx/parser.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 17405 "mlx/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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + 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 = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let i : (Parsetree.expression) = Obj.magic i in + let _3 : unit = Obj.magic _3 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 17476 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 17481 "mlx/parser.ml" + + in + +# 2434 "mlx/parser.mly" + (Some v) +# 17487 "mlx/parser.ml" + + in + +# 2395 "mlx/parser.mly" + ( array, d, Brace, i, r ) +# 17493 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2435 "mlx/parser.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 17503 "mlx/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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + 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 = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let i : (Parsetree.expression) = Obj.magic i in + let _3 : unit = Obj.magic _3 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 17598 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 17603 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 17609 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 17620 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 17626 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 17646 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 17652 "mlx/parser.ml" + + in + +# 2434 "mlx/parser.mly" + (Some v) +# 17658 "mlx/parser.ml" + + in + +# 2395 "mlx/parser.mly" + ( array, d, Brace, i, r ) +# 17664 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2435 "mlx/parser.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 17674 "mlx/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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + 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 = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let i : (Parsetree.expression) = Obj.magic i in + let _3 : unit = Obj.magic _3 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 17745 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 17750 "mlx/parser.ml" + + in + +# 2434 "mlx/parser.mly" + (Some v) +# 17756 "mlx/parser.ml" + + in + +# 2397 "mlx/parser.mly" + ( array, d, Bracket, i, r ) +# 17762 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2435 "mlx/parser.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 17772 "mlx/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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + 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 = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let i : (Parsetree.expression) = Obj.magic i in + let _3 : unit = Obj.magic _3 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 17867 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 17872 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 17878 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 17889 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 17895 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 17915 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 17921 "mlx/parser.ml" + + in + +# 2434 "mlx/parser.mly" + (Some v) +# 17927 "mlx/parser.ml" + + in + +# 2397 "mlx/parser.mly" + ( array, d, Bracket, i, r ) +# 17933 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2435 "mlx/parser.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 17943 "mlx/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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + 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 = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 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 : ( +# 766 "mlx/parser.mly" + (string) +# 18005 "mlx/parser.ml" + ) = Obj.magic _2 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 18018 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 18023 "mlx/parser.ml" + + in + +# 2436 "mlx/parser.mly" + (Some v) +# 18029 "mlx/parser.ml" + + in + let i = +# 2964 "mlx/parser.mly" + ( es ) +# 18035 "mlx/parser.ml" + in + let d = + let _1 = +# 124 "" + ( None ) +# 18041 "mlx/parser.ml" + in + +# 2409 "mlx/parser.mly" + ( _1, _2 ) +# 18046 "mlx/parser.ml" + + in + +# 2393 "mlx/parser.mly" + ( array, d, Paren, i, r ) +# 18052 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2437 "mlx/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 18062 "mlx/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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + 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 = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( +# 766 "mlx/parser.mly" + (string) +# 18145 "mlx/parser.ml" + ) = Obj.magic _2 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 18161 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 18166 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 18172 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 18183 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 18189 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 18209 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 18215 "mlx/parser.ml" + + in + +# 2436 "mlx/parser.mly" + (Some v) +# 18221 "mlx/parser.ml" + + in + let i = +# 2964 "mlx/parser.mly" + ( es ) +# 18227 "mlx/parser.ml" + in + let d = + let _1 = +# 124 "" + ( None ) +# 18233 "mlx/parser.ml" + in + +# 2409 "mlx/parser.mly" + ( _1, _2 ) +# 18238 "mlx/parser.ml" + + in + +# 2393 "mlx/parser.mly" + ( array, d, Paren, i, r ) +# 18244 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2437 "mlx/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 18254 "mlx/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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _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 = _; + 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; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( +# 766 "mlx/parser.mly" + (string) +# 18328 "mlx/parser.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined2_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let v = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 18344 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 18349 "mlx/parser.ml" + + in + +# 2436 "mlx/parser.mly" + (Some v) +# 18355 "mlx/parser.ml" + + in + let i = +# 2964 "mlx/parser.mly" + ( es ) +# 18361 "mlx/parser.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2409 "mlx/parser.mly" + (_2) +# 18369 "mlx/parser.ml" + in + +# 126 "" + ( Some x ) +# 18374 "mlx/parser.ml" + + in + +# 2409 "mlx/parser.mly" + ( _1, _2 ) +# 18380 "mlx/parser.ml" + + in + +# 2393 "mlx/parser.mly" + ( array, d, Paren, i, r ) +# 18386 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined2_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2437 "mlx/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 18396 "mlx/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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _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 = _; + 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; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Ppxlib.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( +# 766 "mlx/parser.mly" + (string) +# 18491 "mlx/parser.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined2_, _1_inlined4, _1_inlined3, _1_inlined2, _1_inlined1) in + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 18510 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 18515 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 18521 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 18532 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 18538 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 18558 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 18564 "mlx/parser.ml" + + in + +# 2436 "mlx/parser.mly" + (Some v) +# 18570 "mlx/parser.ml" + + in + let i = +# 2964 "mlx/parser.mly" + ( es ) +# 18576 "mlx/parser.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2409 "mlx/parser.mly" + (_2) +# 18584 "mlx/parser.ml" + in + +# 126 "" + ( Some x ) +# 18589 "mlx/parser.ml" + + in + +# 2409 "mlx/parser.mly" + ( _1, _2 ) +# 18595 "mlx/parser.ml" + + in + +# 2393 "mlx/parser.mly" + ( array, d, Paren, i, r ) +# 18601 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2437 "mlx/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 18611 "mlx/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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + 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 = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 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 : ( +# 766 "mlx/parser.mly" + (string) +# 18673 "mlx/parser.ml" + ) = Obj.magic _2 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 18686 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 18691 "mlx/parser.ml" + + in + +# 2436 "mlx/parser.mly" + (Some v) +# 18697 "mlx/parser.ml" + + in + let i = +# 2964 "mlx/parser.mly" + ( es ) +# 18703 "mlx/parser.ml" + in + let d = + let _1 = +# 124 "" + ( None ) +# 18709 "mlx/parser.ml" + in + +# 2409 "mlx/parser.mly" + ( _1, _2 ) +# 18714 "mlx/parser.ml" + + in + +# 2395 "mlx/parser.mly" + ( array, d, Brace, i, r ) +# 18720 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2437 "mlx/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 18730 "mlx/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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + 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 = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( +# 766 "mlx/parser.mly" + (string) +# 18813 "mlx/parser.ml" + ) = Obj.magic _2 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 18829 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 18834 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 18840 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 18851 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 18857 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 18877 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 18883 "mlx/parser.ml" + + in + +# 2436 "mlx/parser.mly" + (Some v) +# 18889 "mlx/parser.ml" + + in + let i = +# 2964 "mlx/parser.mly" + ( es ) +# 18895 "mlx/parser.ml" + in + let d = + let _1 = +# 124 "" + ( None ) +# 18901 "mlx/parser.ml" + in + +# 2409 "mlx/parser.mly" + ( _1, _2 ) +# 18906 "mlx/parser.ml" + + in + +# 2395 "mlx/parser.mly" + ( array, d, Brace, i, r ) +# 18912 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2437 "mlx/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 18922 "mlx/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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _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 = _; + 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; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( +# 766 "mlx/parser.mly" + (string) +# 18996 "mlx/parser.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined2_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let v = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 19012 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 19017 "mlx/parser.ml" + + in + +# 2436 "mlx/parser.mly" + (Some v) +# 19023 "mlx/parser.ml" + + in + let i = +# 2964 "mlx/parser.mly" + ( es ) +# 19029 "mlx/parser.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2409 "mlx/parser.mly" + (_2) +# 19037 "mlx/parser.ml" + in + +# 126 "" + ( Some x ) +# 19042 "mlx/parser.ml" + + in + +# 2409 "mlx/parser.mly" + ( _1, _2 ) +# 19048 "mlx/parser.ml" + + in + +# 2395 "mlx/parser.mly" + ( array, d, Brace, i, r ) +# 19054 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined2_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2437 "mlx/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 19064 "mlx/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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _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 = _; + 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; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Ppxlib.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( +# 766 "mlx/parser.mly" + (string) +# 19159 "mlx/parser.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined2_, _1_inlined4, _1_inlined3, _1_inlined2, _1_inlined1) in + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 19178 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 19183 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 19189 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 19200 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 19206 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 19226 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 19232 "mlx/parser.ml" + + in + +# 2436 "mlx/parser.mly" + (Some v) +# 19238 "mlx/parser.ml" + + in + let i = +# 2964 "mlx/parser.mly" + ( es ) +# 19244 "mlx/parser.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2409 "mlx/parser.mly" + (_2) +# 19252 "mlx/parser.ml" + in + +# 126 "" + ( Some x ) +# 19257 "mlx/parser.ml" + + in + +# 2409 "mlx/parser.mly" + ( _1, _2 ) +# 19263 "mlx/parser.ml" + + in + +# 2395 "mlx/parser.mly" + ( array, d, Brace, i, r ) +# 19269 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2437 "mlx/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 19279 "mlx/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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + 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 = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 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 : ( +# 766 "mlx/parser.mly" + (string) +# 19341 "mlx/parser.ml" + ) = Obj.magic _2 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 19354 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 19359 "mlx/parser.ml" + + in + +# 2436 "mlx/parser.mly" + (Some v) +# 19365 "mlx/parser.ml" + + in + let i = +# 2964 "mlx/parser.mly" + ( es ) +# 19371 "mlx/parser.ml" + in + let d = + let _1 = +# 124 "" + ( None ) +# 19377 "mlx/parser.ml" + in + +# 2409 "mlx/parser.mly" + ( _1, _2 ) +# 19382 "mlx/parser.ml" + + in + +# 2397 "mlx/parser.mly" + ( array, d, Bracket, i, r ) +# 19388 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2437 "mlx/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 19398 "mlx/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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + 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 = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( +# 766 "mlx/parser.mly" + (string) +# 19481 "mlx/parser.ml" + ) = Obj.magic _2 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 19497 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 19502 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 19508 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 19519 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 19525 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 19545 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 19551 "mlx/parser.ml" + + in + +# 2436 "mlx/parser.mly" + (Some v) +# 19557 "mlx/parser.ml" + + in + let i = +# 2964 "mlx/parser.mly" + ( es ) +# 19563 "mlx/parser.ml" + in + let d = + let _1 = +# 124 "" + ( None ) +# 19569 "mlx/parser.ml" + in + +# 2409 "mlx/parser.mly" + ( _1, _2 ) +# 19574 "mlx/parser.ml" + + in + +# 2397 "mlx/parser.mly" + ( array, d, Bracket, i, r ) +# 19580 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2437 "mlx/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 19590 "mlx/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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _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 = _; + 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; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( +# 766 "mlx/parser.mly" + (string) +# 19664 "mlx/parser.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined2_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let v = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 19680 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 19685 "mlx/parser.ml" + + in + +# 2436 "mlx/parser.mly" + (Some v) +# 19691 "mlx/parser.ml" + + in + let i = +# 2964 "mlx/parser.mly" + ( es ) +# 19697 "mlx/parser.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2409 "mlx/parser.mly" + (_2) +# 19705 "mlx/parser.ml" + in + +# 126 "" + ( Some x ) +# 19710 "mlx/parser.ml" + + in + +# 2409 "mlx/parser.mly" + ( _1, _2 ) +# 19716 "mlx/parser.ml" + + in + +# 2397 "mlx/parser.mly" + ( array, d, Bracket, i, r ) +# 19722 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined2_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2437 "mlx/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 19732 "mlx/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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _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 = _; + 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; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Ppxlib.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( +# 766 "mlx/parser.mly" + (string) +# 19827 "mlx/parser.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined2_, _1_inlined4, _1_inlined3, _1_inlined2, _1_inlined1) in + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 19846 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 19851 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 19857 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 19868 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 19874 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 19894 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 19900 "mlx/parser.ml" + + in + +# 2436 "mlx/parser.mly" + (Some v) +# 19906 "mlx/parser.ml" + + in + let i = +# 2964 "mlx/parser.mly" + ( es ) +# 19912 "mlx/parser.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2409 "mlx/parser.mly" + (_2) +# 19920 "mlx/parser.ml" + in + +# 126 "" + ( Some x ) +# 19925 "mlx/parser.ml" + + in + +# 2409 "mlx/parser.mly" + ( _1, _2 ) +# 19931 "mlx/parser.ml" + + in + +# 2397 "mlx/parser.mly" + ( array, d, Bracket, i, r ) +# 19937 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2437 "mlx/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 19947 "mlx/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.attribute) = Obj.magic _2 in + let _1 : (Parsetree.expression) = 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) = +# 2439 "mlx/parser.mly" + ( Exp.attr _1 _2 ) +# 19979 "mlx/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 : unit = 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.expression) = let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 2442 "mlx/parser.mly" + ( not_expecting _loc__1_ "wildcard \"_\"" ) +# 20005 "mlx/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 : (string Ppxlib.loc list) = Obj.magic xs 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__4_ in + let _v : (Parsetree.function_param list) = let ty_params = +# 2695 "mlx/parser.mly" + ( xs ) +# 20051 "mlx/parser.ml" + in + let _endpos = _endpos__4_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2826 "mlx/parser.mly" + ( (* We desugar (type a b c) to (type a) (type b) (type c). + If we do this desugaring, the loc for each parameter is a ghost. + *) + let loc = + match ty_params with + | [] -> assert false (* lident_list is non-empty *) + | [_] -> make_loc _sloc + | _ :: _ :: _ -> ghost_loc _sloc + in + List.map + (fun x -> { pparam_loc = loc; pparam_desc = Pparam_newtype x }) + ty_params + ) +# 20071 "mlx/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 : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = 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.function_param list) = let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2840 "mlx/parser.mly" + ( let a, b, c = _1 in + [ { pparam_loc = make_loc _sloc; pparam_desc = Pparam_val (a, b, c) } ] + ) +# 20101 "mlx/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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let xs : (Parsetree.function_param list) = Obj.magic xs in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_xs_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.function_param list) = let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 20127 "mlx/parser.ml" + in + +# 1101 "mlx/parser.mly" + ( xs ) +# 20132 "mlx/parser.ml" + + in + +# 2845 "mlx/parser.mly" + ( _1 ) +# 20138 "mlx/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.expression) = 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.expression) = +# 2330 "mlx/parser.mly" + ( _1 ) +# 20163 "mlx/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 : (Parsetree.expression) = 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) = +# 2331 "mlx/parser.mly" + ( _1 ) +# 20195 "mlx/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 = _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 : (Parsetree.expression) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = 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 = +# 2333 "mlx/parser.mly" + ( Pexp_sequence(_1, _3) ) +# 20235 "mlx/parser.ml" + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1011 "mlx/parser.mly" + ( mkexp ~loc:_sloc _1 ) +# 20244 "mlx/parser.ml" + + in + +# 2334 "mlx/parser.mly" + ( _1 ) +# 20250 "mlx/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 = _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 : (Parsetree.expression) = Obj.magic _5 in + let _4 : (Dune__exe__Ast_helper.str) = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = 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 _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2336 "mlx/parser.mly" + ( mkexp_attrs ~loc:_sloc (Pexp_sequence (_1, _5)) (Some _4, []) ) +# 20306 "mlx/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 = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let ty : (Parsetree.core_type) = Obj.magic ty in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_ty_ in + let _endpos = _endpos_ty_ in + let _v : (Parsetree.core_type) = +# 3686 "mlx/parser.mly" + ( ty ) +# 20331 "mlx/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 = codomain; + MenhirLib.EngineTypes.startp = _startpos_codomain_; + MenhirLib.EngineTypes.endp = _endpos_codomain_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + } = _menhir_stack in + let codomain : (Parsetree.core_type) = Obj.magic codomain in + let _3 : unit = Obj.magic _3 in + let _1 : (Parsetree.core_type) = Obj.magic _1 in + let label : (string) = Obj.magic label in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_label_ in + let _endpos = _endpos_codomain_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let domain = +# 976 "mlx/parser.mly" + ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) +# 20379 "mlx/parser.ml" + in + let label = +# 3726 "mlx/parser.mly" + ( Optional label ) +# 20384 "mlx/parser.ml" + in + +# 3692 "mlx/parser.mly" + ( Ptyp_arrow(label, domain, codomain) ) +# 20389 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1015 "mlx/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 20399 "mlx/parser.ml" + + in + +# 3694 "mlx/parser.mly" + ( _1 ) +# 20405 "mlx/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 = codomain; + MenhirLib.EngineTypes.startp = _startpos_codomain_; + MenhirLib.EngineTypes.endp = _endpos_codomain_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let codomain : (Parsetree.core_type) = Obj.magic codomain in + let _3 : unit = Obj.magic _3 in + let _1 : (Parsetree.core_type) = Obj.magic _1 in + let _2 : unit = Obj.magic _2 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 20454 "mlx/parser.ml" + ) = Obj.magic label in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_label_ in + let _endpos = _endpos_codomain_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let domain = +# 976 "mlx/parser.mly" + ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) +# 20464 "mlx/parser.ml" + in + let label = +# 3728 "mlx/parser.mly" + ( Labelled label ) +# 20469 "mlx/parser.ml" + in + +# 3692 "mlx/parser.mly" + ( Ptyp_arrow(label, domain, codomain) ) +# 20474 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1015 "mlx/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 20484 "mlx/parser.ml" + + in + +# 3694 "mlx/parser.mly" + ( _1 ) +# 20490 "mlx/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 = codomain; + MenhirLib.EngineTypes.startp = _startpos_codomain_; + MenhirLib.EngineTypes.endp = _endpos_codomain_; + 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 = _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 codomain : (Parsetree.core_type) = Obj.magic codomain in + let _3 : unit = Obj.magic _3 in + let _1 : (Parsetree.core_type) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_codomain_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let domain = +# 976 "mlx/parser.mly" + ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) +# 20531 "mlx/parser.ml" + in + let label = +# 3730 "mlx/parser.mly" + ( Nolabel ) +# 20536 "mlx/parser.ml" + in + +# 3692 "mlx/parser.mly" + ( Ptyp_arrow(label, domain, codomain) ) +# 20541 "mlx/parser.ml" + + in + let _endpos__1_ = _endpos_codomain_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1015 "mlx/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 20551 "mlx/parser.ml" + + in + +# 3694 "mlx/parser.mly" + ( _1 ) +# 20557 "mlx/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 = codomain; + MenhirLib.EngineTypes.startp = _startpos_codomain_; + MenhirLib.EngineTypes.endp = _endpos_codomain_; + 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 = 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 = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let codomain : (Parsetree.core_type) = Obj.magic codomain in + let _4 : unit = Obj.magic _4 in + let xs : ((string option * Parsetree.core_type) list) = Obj.magic xs in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let ty : (Parsetree.core_type) = Obj.magic ty in + let _2 : unit = Obj.magic _2 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 20620 "mlx/parser.ml" + ) = Obj.magic label in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_label_ in + let _endpos = _endpos_codomain_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let tuple = + let _2 = _2_inlined1 in + let ltys = + let xs = +# 253 "" + ( List.rev xs ) +# 20633 "mlx/parser.ml" + in + +# 1133 "mlx/parser.mly" + ( xs ) +# 20638 "mlx/parser.ml" + + in + +# 3756 "mlx/parser.mly" + ( ty, ltys ) +# 20644 "mlx/parser.ml" + + in + let (_endpos_tuple_, _startpos_tuple_) = (_endpos_xs_, _startpos_ty_) in + let _loc_tuple_ = (_startpos_tuple_, _endpos_tuple_) in + +# 3710 "mlx/parser.mly" + ( let ty, ltys = tuple in + let tuple_loc = _loc_tuple_ in + let domain = + mktyp ~loc:tuple_loc (Ptyp_tuple ((None, ty) :: ltys)) + in + let domain = extra_rhs_core_type domain ~pos:(snd tuple_loc) in + Ptyp_arrow(Labelled label, domain, codomain) ) +# 20658 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1015 "mlx/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 20668 "mlx/parser.ml" + + in + +# 3718 "mlx/parser.mly" + ( _1 ) +# 20674 "mlx/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 = 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 = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let xs : ((string option * Parsetree.core_type) list) = Obj.magic xs in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let ty : (Parsetree.core_type) = Obj.magic ty in + let _2 : unit = Obj.magic _2 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 20723 "mlx/parser.ml" + ) = Obj.magic label in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_label_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.core_type) = let _3 = + let _2 = _2_inlined1 in + let ltys = + let xs = +# 253 "" + ( List.rev xs ) +# 20734 "mlx/parser.ml" + in + +# 1133 "mlx/parser.mly" + ( xs ) +# 20739 "mlx/parser.ml" + + in + +# 3756 "mlx/parser.mly" + ( ty, ltys ) +# 20745 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos_label_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3720 "mlx/parser.mly" + ( let ty, ltys = _3 in + mktyp ~loc:_sloc (Ptyp_tuple ((Some label, ty) :: ltys)) + ) +# 20757 "mlx/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 : (Lexing.position * Parsetree.functor_parameter) = let _startpos = _startpos__1_ in + +# 1387 "mlx/parser.mly" + ( _startpos, Unit ) +# 20790 "mlx/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 = mty; + MenhirLib.EngineTypes.startp = _startpos_mty_; + MenhirLib.EngineTypes.endp = _endpos_mty_; + 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 = _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 _5 : unit = Obj.magic _5 in + let mty : (Parsetree.module_type) = Obj.magic mty in + let _3 : unit = Obj.magic _3 in + let _1_inlined1 : (string option) = Obj.magic _1_inlined1 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 : (Lexing.position * Parsetree.functor_parameter) = let x = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 20848 "mlx/parser.ml" + + in + let _startpos = _startpos__1_ in + +# 1390 "mlx/parser.mly" + ( _startpos, Named (x, mty) ) +# 20855 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Dune__exe__Ast_helper.str list * Parsetree.constructor_arguments * + Parsetree.core_type option) = +# 3484 "mlx/parser.mly" + ( ([],Pcstr_tuple [],None) ) +# 20874 "mlx/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.constructor_arguments) = 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 : (Dune__exe__Ast_helper.str list * Parsetree.constructor_arguments * + Parsetree.core_type option) = +# 3485 "mlx/parser.mly" + ( ([],_2,None) ) +# 20907 "mlx/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 : (Parsetree.core_type) = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in + let _2 : (Parsetree.constructor_arguments) = 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 : (Dune__exe__Ast_helper.str list * Parsetree.constructor_arguments * + Parsetree.core_type option) = +# 3487 "mlx/parser.mly" + ( ([],_2,Some _4) ) +# 20954 "mlx/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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + 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 _6 : (Parsetree.core_type) = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let _4 : (Parsetree.constructor_arguments) = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in + let xs : (string Ppxlib.loc 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__6_ in + let _v : (Dune__exe__Ast_helper.str list * Parsetree.constructor_arguments * + Parsetree.core_type option) = let _2 = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 21017 "mlx/parser.ml" + in + +# 1080 "mlx/parser.mly" + ( xs ) +# 21022 "mlx/parser.ml" + + in + +# 3621 "mlx/parser.mly" + ( _1 ) +# 21028 "mlx/parser.ml" + + in + +# 3490 "mlx/parser.mly" + ( (_2,_4,Some _6) ) +# 21034 "mlx/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.core_type) = 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 : (Dune__exe__Ast_helper.str list * Parsetree.constructor_arguments * + Parsetree.core_type option) = +# 3492 "mlx/parser.mly" + ( ([],Pcstr_tuple [],Some _2) ) +# 21067 "mlx/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 = 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 _4 : (Parsetree.core_type) = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in + let xs : (string Ppxlib.loc 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__4_ in + let _v : (Dune__exe__Ast_helper.str list * Parsetree.constructor_arguments * + Parsetree.core_type option) = let _2 = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 21116 "mlx/parser.ml" + in + +# 1080 "mlx/parser.mly" + ( xs ) +# 21121 "mlx/parser.ml" + + in + +# 3621 "mlx/parser.mly" + ( _1 ) +# 21127 "mlx/parser.ml" + + in + +# 3494 "mlx/parser.mly" + ( (_2,Pcstr_tuple [],Some _4) ) +# 21133 "mlx/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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = vars_args_res; + MenhirLib.EngineTypes.startp = _startpos_vars_args_res_; + MenhirLib.EngineTypes.endp = _endpos_vars_args_res_; + 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 _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let vars_args_res : (Dune__exe__Ast_helper.str list * Parsetree.constructor_arguments * + Parsetree.core_type option) = Obj.magic vars_args_res in + let _1_inlined1 : (string) = Obj.magic _1_inlined1 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__1_inlined2_ in + let _v : (Dune__exe__Ast_helper.str * Dune__exe__Ast_helper.str list * + Parsetree.constructor_arguments * Parsetree.core_type option * + Parsetree.attributes * Warnings.loc * Dune__exe__Docstrings.info) = let attrs = + let _1 = _1_inlined2 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 21184 "mlx/parser.ml" + + in + let _endpos_attrs_ = _endpos__1_inlined2_ in + let cid = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 21196 "mlx/parser.ml" + + in + let _endpos = _endpos_attrs_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3432 "mlx/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 + ) +# 21210 "mlx/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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = vars_args_res; + MenhirLib.EngineTypes.startp = _startpos_vars_args_res_; + MenhirLib.EngineTypes.endp = _endpos_vars_args_res_; + 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 _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let vars_args_res : (Dune__exe__Ast_helper.str list * Parsetree.constructor_arguments * + Parsetree.core_type option) = Obj.magic vars_args_res in + let _1 : (string) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Dune__exe__Ast_helper.str * Dune__exe__Ast_helper.str list * + Parsetree.constructor_arguments * Parsetree.core_type option * + Parsetree.attributes * Warnings.loc * Dune__exe__Docstrings.info) = let attrs = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 21254 "mlx/parser.ml" + + in + let _endpos_attrs_ = _endpos__1_inlined1_ in + let cid = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 21265 "mlx/parser.ml" + + in + let _startpos_cid_ = _startpos__1_ in + let _1 = +# 4157 "mlx/parser.mly" + ( () ) +# 21272 "mlx/parser.ml" + in + let _endpos = _endpos_attrs_ in + let _symbolstartpos = _startpos_cid_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3432 "mlx/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 + ) +# 21285 "mlx/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 = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + 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 = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = params; + MenhirLib.EngineTypes.startp = _startpos_params_; + MenhirLib.EngineTypes.endp = _endpos_params_; + 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 = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + 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 _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let xs : ((Parsetree.core_type * Parsetree.core_type * Warnings.loc) list) = Obj.magic xs in + 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 : ( +# 786 "mlx/parser.mly" + (string) +# 21358 "mlx/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 + let ext : (string Ppxlib.loc option) = Obj.magic ext 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__1_inlined4_ in + let _v : ((Asttypes.rec_flag * string Ppxlib.loc option) * Parsetree.type_declaration) = let attrs2 = + let _1 = _1_inlined4 in + +# 4333 "mlx/parser.mly" + ( _1 ) +# 21372 "mlx/parser.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined4_ in + let cstrs = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 21381 "mlx/parser.ml" + in + +# 1062 "mlx/parser.mly" + ( xs ) +# 21386 "mlx/parser.ml" + + in + +# 3331 "mlx/parser.mly" + ( _1 ) +# 21392 "mlx/parser.ml" + + in + let kind_priv_manifest = + let _1 = _1_inlined3 in + +# 3366 "mlx/parser.mly" + ( _2 ) +# 21400 "mlx/parser.ml" + + in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 21411 "mlx/parser.ml" + + in + let flag = +# 4177 "mlx/parser.mly" + ( Recursive ) +# 21417 "mlx/parser.ml" + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 21424 "mlx/parser.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3303 "mlx/parser.mly" + ( + let (kind, priv, manifest) = kind_priv_manifest in + let docs = symbol_docs _sloc in + let attrs = attrs1 @ attrs2 in + let loc = make_loc _sloc in + (flag, ext), + Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs + ) +# 21440 "mlx/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 = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; + 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 = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = params; + MenhirLib.EngineTypes.startp = _startpos_params_; + MenhirLib.EngineTypes.endp = _endpos_params_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + 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 _1_inlined5 : (Parsetree.attributes) = Obj.magic _1_inlined5 in + let xs : ((Parsetree.core_type * Parsetree.core_type * Warnings.loc) list) = Obj.magic xs in + 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 : ( +# 786 "mlx/parser.mly" + (string) +# 21519 "mlx/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 + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let ext : (string Ppxlib.loc option) = Obj.magic ext 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__1_inlined5_ in + let _v : ((Asttypes.rec_flag * string Ppxlib.loc option) * Parsetree.type_declaration) = let attrs2 = + let _1 = _1_inlined5 in + +# 4333 "mlx/parser.mly" + ( _1 ) +# 21534 "mlx/parser.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined5_ in + let cstrs = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 21543 "mlx/parser.ml" + in + +# 1062 "mlx/parser.mly" + ( xs ) +# 21548 "mlx/parser.ml" + + in + +# 3331 "mlx/parser.mly" + ( _1 ) +# 21554 "mlx/parser.ml" + + in + let kind_priv_manifest = + let _1 = _1_inlined4 in + +# 3366 "mlx/parser.mly" + ( _2 ) +# 21562 "mlx/parser.ml" + + in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 21573 "mlx/parser.ml" + + in + let flag = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _startpos = _startpos__1_ in + let _loc = (_startpos, _endpos) in + +# 4179 "mlx/parser.mly" + ( not_expecting _loc "nonrec flag" ) +# 21584 "mlx/parser.ml" + + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 21592 "mlx/parser.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3303 "mlx/parser.mly" + ( + let (kind, priv, manifest) = kind_priv_manifest in + let docs = symbol_docs _sloc in + let attrs = attrs1 @ attrs2 in + let loc = make_loc _sloc in + (flag, ext), + Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs + ) +# 21608 "mlx/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 = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = kind_priv_manifest; + MenhirLib.EngineTypes.startp = _startpos_kind_priv_manifest_; + MenhirLib.EngineTypes.endp = _endpos_kind_priv_manifest_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = params; + MenhirLib.EngineTypes.startp = _startpos_params_; + MenhirLib.EngineTypes.endp = _endpos_params_; + 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 = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + 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 _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let xs : ((Parsetree.core_type * Parsetree.core_type * Warnings.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 : ( +# 786 "mlx/parser.mly" + (string) +# 21674 "mlx/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 + let ext : (string Ppxlib.loc option) = Obj.magic ext 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__1_inlined3_ in + let _v : ((Asttypes.rec_flag * string Ppxlib.loc option) * Parsetree.type_declaration) = let attrs2 = + let _1 = _1_inlined3 in + +# 4333 "mlx/parser.mly" + ( _1 ) +# 21688 "mlx/parser.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let cstrs = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 21697 "mlx/parser.ml" + in + +# 1062 "mlx/parser.mly" + ( xs ) +# 21702 "mlx/parser.ml" + + in + +# 3331 "mlx/parser.mly" + ( _1 ) +# 21708 "mlx/parser.ml" + + in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 21719 "mlx/parser.ml" + + in + let flag = +# 4173 "mlx/parser.mly" + ( Recursive ) +# 21725 "mlx/parser.ml" + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 21732 "mlx/parser.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3303 "mlx/parser.mly" + ( + let (kind, priv, manifest) = kind_priv_manifest in + let docs = symbol_docs _sloc in + let attrs = attrs1 @ attrs2 in + let loc = make_loc _sloc in + (flag, ext), + Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs + ) +# 21748 "mlx/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 = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + 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 = kind_priv_manifest; + MenhirLib.EngineTypes.startp = _startpos_kind_priv_manifest_; + MenhirLib.EngineTypes.endp = _endpos_kind_priv_manifest_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = params; + MenhirLib.EngineTypes.startp = _startpos_params_; + MenhirLib.EngineTypes.endp = _endpos_params_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + 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 _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let xs : ((Parsetree.core_type * Parsetree.core_type * Warnings.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 : ( +# 786 "mlx/parser.mly" + (string) +# 21820 "mlx/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 + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let ext : (string Ppxlib.loc option) = Obj.magic ext 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__1_inlined4_ in + let _v : ((Asttypes.rec_flag * string Ppxlib.loc option) * Parsetree.type_declaration) = let attrs2 = + let _1 = _1_inlined4 in + +# 4333 "mlx/parser.mly" + ( _1 ) +# 21835 "mlx/parser.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined4_ in + let cstrs = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 21844 "mlx/parser.ml" + in + +# 1062 "mlx/parser.mly" + ( xs ) +# 21849 "mlx/parser.ml" + + in + +# 3331 "mlx/parser.mly" + ( _1 ) +# 21855 "mlx/parser.ml" + + in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 21866 "mlx/parser.ml" + + in + let flag = + let _1 = _1_inlined2 in + +# 4174 "mlx/parser.mly" + ( Nonrecursive ) +# 21874 "mlx/parser.ml" + + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 21882 "mlx/parser.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3303 "mlx/parser.mly" + ( + let (kind, priv, manifest) = kind_priv_manifest in + let docs = symbol_docs _sloc in + let attrs = attrs1 @ attrs2 in + let loc = make_loc _sloc in + (flag, ext), + Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs + ) +# 21898 "mlx/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 : ( +# 839 "mlx/parser.mly" + (string) +# 21919 "mlx/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) = +# 3996 "mlx/parser.mly" + ( _1 ) +# 21927 "mlx/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 : ( +# 786 "mlx/parser.mly" + (string) +# 21948 "mlx/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) = +# 3997 "mlx/parser.mly" + ( _1 ) +# 21956 "mlx/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 : (Parsetree.structure) = 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.structure) = +# 1254 "mlx/parser.mly" + ( _1 ) +# 21988 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (string) = +# 4046 "mlx/parser.mly" + ( "" ) +# 22006 "mlx/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 : (string) = +# 4047 "mlx/parser.mly" + ( ";.." ) +# 22038 "mlx/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 : (Parsetree.signature) = 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.signature) = +# 1261 "mlx/parser.mly" + ( _1 ) +# 22070 "mlx/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 : (Parsetree.payload) = Obj.magic _3 in + let _2 : (Dune__exe__Ast_helper.str) = 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.extension) = +# 4358 "mlx/parser.mly" + ( (_2, _3) ) +# 22116 "mlx/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 : ( +# 830 "mlx/parser.mly" + (string * Location.t * string * Location.t * string option) +# 22137 "mlx/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.extension) = let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4360 "mlx/parser.mly" + ( mk_quotedext ~loc:_sloc _1 ) +# 22148 "mlx/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 = tag; + MenhirLib.EngineTypes.startp = _startpos_tag_; + MenhirLib.EngineTypes.endp = _endpos_tag_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : unit = Obj.magic _3 in + let xs : (((Lexing.position * Lexing.position) * + [ `Prop of string * Parsetree.expression + | `Prop_opt of string * Parsetree.expression + | `Prop_opt_punned of string + | `Prop_punned of string ]) + list) = Obj.magic xs in + let tag : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * + Mlx_shim.Longident.t) = Obj.magic tag in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_tag_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.expression_desc) = let props = + let xs = +# 253 "" + ( List.rev xs ) +# 22194 "mlx/parser.ml" + in + +# 1062 "mlx/parser.mly" + ( xs ) +# 22199 "mlx/parser.ml" + + in + let _loc_tag_ = (_startpos_tag_, _endpos_tag_) in + +# 2653 "mlx/parser.mly" + ( + let children = + let children, loc = mktailexp _loc_tag_ [] in + mkexp ~loc children + in + Jsx_helper.make_jsx_element () ~raise ~loc:_loc_tag_ ~tag ~end_tag:None ~props ~children ) +# 22211 "mlx/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 = end_tag_; + MenhirLib.EngineTypes.startp = _startpos_end_tag__; + MenhirLib.EngineTypes.endp = _endpos_end_tag__; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = end_tag; + MenhirLib.EngineTypes.startp = _startpos_end_tag_; + MenhirLib.EngineTypes.endp = _endpos_end_tag_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs_inlined1; + MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; + 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 = tag; + MenhirLib.EngineTypes.startp = _startpos_tag_; + MenhirLib.EngineTypes.endp = _endpos_tag_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let end_tag_ : unit = Obj.magic end_tag_ in + let end_tag : ([> `Module | `Value ] * (Lexing.position * Lexing.position) * + Mlx_shim.Longident.t) = Obj.magic end_tag in + let xs_inlined1 : (Parsetree.expression list) = Obj.magic xs_inlined1 in + let _3 : unit = Obj.magic _3 in + let xs : (((Lexing.position * Lexing.position) * + [ `Prop of string * Parsetree.expression + | `Prop_opt of string * Parsetree.expression + | `Prop_opt_punned of string + | `Prop_punned of string ]) + list) = Obj.magic xs in + let tag : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * + Mlx_shim.Longident.t) = Obj.magic tag in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_tag_ in + let _endpos = _endpos_end_tag__ in + let _v : (Parsetree.expression_desc) = let children = + let xs = xs_inlined1 in + let xs = +# 253 "" + ( List.rev xs ) +# 22280 "mlx/parser.ml" + in + +# 1062 "mlx/parser.mly" + ( xs ) +# 22285 "mlx/parser.ml" + + in + let (_endpos_children_, _startpos_children_) = (_endpos_xs_inlined1_, _startpos_xs_inlined1_) in + let props = + let xs = +# 253 "" + ( List.rev xs ) +# 22293 "mlx/parser.ml" + in + +# 1062 "mlx/parser.mly" + ( xs ) +# 22298 "mlx/parser.ml" + + in + let _loc_tag_ = (_startpos_tag_, _endpos_tag_) in + let _loc_end_tag__ = (_startpos_end_tag__, _endpos_end_tag__) in + let _loc_children_ = (_startpos_children_, _endpos_children_) in + +# 2660 "mlx/parser.mly" + ( + let children = + let children, loc = mktailexp _loc_children_ children in + mkexp ~loc children + in + let _ = end_tag_ in + Jsx_helper.make_jsx_element () + ~raise ~loc:_loc_tag_ ~tag ~end_tag:(Some (end_tag, _loc_end_tag__)) ~props ~children + ) +# 22315 "mlx/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 = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let id : ( +# 840 "mlx/parser.mly" + (string) +# 22336 "mlx/parser.ml" + ) = Obj.magic id in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_id_ in + let _endpos = _endpos_id_ in + let _v : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * + Mlx_shim.Longident.t) = let _endpos = _endpos_id_ in + let _symbolstartpos = _startpos_id_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4075 "mlx/parser.mly" + ( `Module, _sloc, Lident id ) +# 22348 "mlx/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 = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let id : ( +# 787 "mlx/parser.mly" + (string) +# 22369 "mlx/parser.ml" + ) = Obj.magic id in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_id_ in + let _endpos = _endpos_id_ in + let _v : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * + Mlx_shim.Longident.t) = let _endpos = _endpos_id_ in + let _symbolstartpos = _startpos_id_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4076 "mlx/parser.mly" + ( `Value, _sloc, Lident id ) +# 22381 "mlx/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 = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; + 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 = prefix; + MenhirLib.EngineTypes.startp = _startpos_prefix_; + MenhirLib.EngineTypes.endp = _endpos_prefix_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let id : (Mlx_shim.Longident.t) = Obj.magic id in + let _2 : unit = Obj.magic _2 in + let prefix : ( +# 840 "mlx/parser.mly" + (string) +# 22416 "mlx/parser.ml" + ) = Obj.magic prefix in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_prefix_ in + let _endpos = _endpos_id_ in + let _v : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * + Mlx_shim.Longident.t) = let _endpos = _endpos_id_ in + let _symbolstartpos = _startpos_prefix_ in + let _loc_prefix_ = (_startpos_prefix_, _endpos_prefix_) in + let _loc_id_ = (_startpos_id_, _endpos_id_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 4077 "mlx/parser.mly" + ( + let rec rebase = function + | Lident id -> ldot (Lident prefix) _loc_prefix_ id _loc_id_ + | Ldot ({txt = prefix'; loc = prefix_loc}, {txt = id; loc = id_loc}) -> + Ldot (mkloc (rebase prefix') prefix_loc, mkloc id id_loc) + | Lapply _ -> assert false + in + `Module, _sloc, rebase id ) +# 22437 "mlx/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 = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; + 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 = prefix; + MenhirLib.EngineTypes.startp = _startpos_prefix_; + MenhirLib.EngineTypes.endp = _endpos_prefix_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let id : (Mlx_shim.Longident.t) = Obj.magic id in + let _2 : unit = Obj.magic _2 in + let prefix : ( +# 840 "mlx/parser.mly" + (string) +# 22472 "mlx/parser.ml" + ) = Obj.magic prefix in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_prefix_ in + let _endpos = _endpos_id_ in + let _v : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * + Mlx_shim.Longident.t) = let _endpos = _endpos_id_ in + let _symbolstartpos = _startpos_prefix_ in + let _loc_prefix_ = (_startpos_prefix_, _endpos_prefix_) in + let _loc_id_ = (_startpos_id_, _endpos_id_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 4085 "mlx/parser.mly" + ( + let rec rebase = function + | Lident id -> ldot (Lident prefix) _loc_prefix_ id _loc_id_ + | Ldot ({txt = prefix'; loc = prefix_loc}, {txt = id; loc = id_loc}) -> + Ldot (mkloc (rebase prefix') prefix_loc, mkloc id id_loc) + | Lapply _ -> assert false + in + `Value, _sloc, rebase id ) +# 22493 "mlx/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 = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let id : ( +# 841 "mlx/parser.mly" + (string) +# 22514 "mlx/parser.ml" + ) = Obj.magic id in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_id_ in + let _endpos = _endpos_id_ in + let _v : ([> `Module | `Value ] * (Lexing.position * Lexing.position) * + Mlx_shim.Longident.t) = let _endpos = _endpos_id_ in + let _symbolstartpos = _startpos_id_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4075 "mlx/parser.mly" + ( `Module, _sloc, Lident id ) +# 22526 "mlx/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 = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let id : ( +# 788 "mlx/parser.mly" + (string) +# 22547 "mlx/parser.ml" + ) = Obj.magic id in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_id_ in + let _endpos = _endpos_id_ in + let _v : ([> `Module | `Value ] * (Lexing.position * Lexing.position) * + Mlx_shim.Longident.t) = let _endpos = _endpos_id_ in + let _symbolstartpos = _startpos_id_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4076 "mlx/parser.mly" + ( `Value, _sloc, Lident id ) +# 22559 "mlx/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 = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; + 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 = prefix; + MenhirLib.EngineTypes.startp = _startpos_prefix_; + MenhirLib.EngineTypes.endp = _endpos_prefix_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let id : (Mlx_shim.Longident.t) = Obj.magic id in + let _2 : unit = Obj.magic _2 in + let prefix : ( +# 841 "mlx/parser.mly" + (string) +# 22594 "mlx/parser.ml" + ) = Obj.magic prefix in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_prefix_ in + let _endpos = _endpos_id_ in + let _v : ([> `Module | `Value ] * (Lexing.position * Lexing.position) * + Mlx_shim.Longident.t) = let _endpos = _endpos_id_ in + let _symbolstartpos = _startpos_prefix_ in + let _loc_prefix_ = (_startpos_prefix_, _endpos_prefix_) in + let _loc_id_ = (_startpos_id_, _endpos_id_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 4077 "mlx/parser.mly" + ( + let rec rebase = function + | Lident id -> ldot (Lident prefix) _loc_prefix_ id _loc_id_ + | Ldot ({txt = prefix'; loc = prefix_loc}, {txt = id; loc = id_loc}) -> + Ldot (mkloc (rebase prefix') prefix_loc, mkloc id id_loc) + | Lapply _ -> assert false + in + `Module, _sloc, rebase id ) +# 22615 "mlx/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 = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; + 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 = prefix; + MenhirLib.EngineTypes.startp = _startpos_prefix_; + MenhirLib.EngineTypes.endp = _endpos_prefix_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let id : (Mlx_shim.Longident.t) = Obj.magic id in + let _2 : unit = Obj.magic _2 in + let prefix : ( +# 841 "mlx/parser.mly" + (string) +# 22650 "mlx/parser.ml" + ) = Obj.magic prefix in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_prefix_ in + let _endpos = _endpos_id_ in + let _v : ([> `Module | `Value ] * (Lexing.position * Lexing.position) * + Mlx_shim.Longident.t) = let _endpos = _endpos_id_ in + let _symbolstartpos = _startpos_prefix_ in + let _loc_prefix_ = (_startpos_prefix_, _endpos_prefix_) in + let _loc_id_ = (_startpos_id_, _endpos_id_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 4085 "mlx/parser.mly" + ( + let rec rebase = function + | Lident id -> ldot (Lident prefix) _loc_prefix_ id _loc_id_ + | Ldot ({txt = prefix'; loc = prefix_loc}, {txt = id; loc = id_loc}) -> + Ldot (mkloc (rebase prefix') prefix_loc, mkloc id id_loc) + | Lapply _ -> assert false + in + `Value, _sloc, rebase id ) +# 22671 "mlx/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 = name; + MenhirLib.EngineTypes.startp = _startpos_name_; + MenhirLib.EngineTypes.endp = _endpos_name_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let name : ( +# 786 "mlx/parser.mly" + (string) +# 22692 "mlx/parser.ml" + ) = Obj.magic name in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_name_ in + let _endpos = _endpos_name_ in + let _v : ((Lexing.position * Lexing.position) * + [ `Prop of string * Parsetree.expression + | `Prop_opt of string * Parsetree.expression + | `Prop_opt_punned of string + | `Prop_punned of string ]) = let _loc_name_ = (_startpos_name_, _endpos_name_) in + +# 2671 "mlx/parser.mly" + ( _loc_name_, `Prop_punned name ) +# 22705 "mlx/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 = name; + MenhirLib.EngineTypes.startp = _startpos_name_; + MenhirLib.EngineTypes.endp = _endpos_name_; + 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 name : ( +# 786 "mlx/parser.mly" + (string) +# 22732 "mlx/parser.ml" + ) = Obj.magic name 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_name_ in + let _v : ((Lexing.position * Lexing.position) * + [ `Prop of string * Parsetree.expression + | `Prop_opt of string * Parsetree.expression + | `Prop_opt_punned of string + | `Prop_punned of string ]) = let _loc_name_ = (_startpos_name_, _endpos_name_) in + +# 2672 "mlx/parser.mly" + ( _loc_name_, `Prop_opt_punned name ) +# 22746 "mlx/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 = expr; + MenhirLib.EngineTypes.startp = _startpos_expr_; + MenhirLib.EngineTypes.endp = _endpos_expr_; + 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 = name; + MenhirLib.EngineTypes.startp = _startpos_name_; + MenhirLib.EngineTypes.endp = _endpos_name_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let expr : (Parsetree.expression) = Obj.magic expr in + let _2 : unit = Obj.magic _2 in + let name : ( +# 786 "mlx/parser.mly" + (string) +# 22781 "mlx/parser.ml" + ) = Obj.magic name in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_name_ in + let _endpos = _endpos_expr_ in + let _v : ((Lexing.position * Lexing.position) * + [ `Prop of string * Parsetree.expression + | `Prop_opt of string * Parsetree.expression + | `Prop_opt_punned of string + | `Prop_punned of string ]) = let _loc_name_ = (_startpos_name_, _endpos_name_) in + +# 2673 "mlx/parser.mly" + ( _loc_name_, `Prop (name, expr) ) +# 22794 "mlx/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 = expr; + MenhirLib.EngineTypes.startp = _startpos_expr_; + MenhirLib.EngineTypes.endp = _endpos_expr_; + 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 = name; + MenhirLib.EngineTypes.startp = _startpos_name_; + MenhirLib.EngineTypes.endp = _endpos_name_; + 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 expr : (Parsetree.expression) = Obj.magic expr in + let _3 : unit = Obj.magic _3 in + let name : ( +# 786 "mlx/parser.mly" + (string) +# 22835 "mlx/parser.ml" + ) = Obj.magic name 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_expr_ in + let _v : ((Lexing.position * Lexing.position) * + [ `Prop of string * Parsetree.expression + | `Prop_opt of string * Parsetree.expression + | `Prop_opt_punned of string + | `Prop_punned of string ]) = let _loc_name_ = (_startpos_name_, _endpos_name_) in + +# 2674 "mlx/parser.mly" + ( _loc_name_, `Prop_opt (name, expr) ) +# 22849 "mlx/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 = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _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 _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in + let _3 : unit = Obj.magic _3 in + let _1_inlined1 : ( +# 786 "mlx/parser.mly" + (string) +# 22897 "mlx/parser.ml" + ) = Obj.magic _1_inlined1 in + let _1 : (Asttypes.mutable_flag) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined3_ in + let _v : (Parsetree.label_declaration) = let _5 = + let _1 = _1_inlined3 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 22908 "mlx/parser.ml" + + in + let _endpos__5_ = _endpos__1_inlined3_ in + let _4 = + let _1 = _1_inlined2 in + +# 3639 "mlx/parser.mly" + ( _1 ) +# 22917 "mlx/parser.ml" + + in + let _2 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _1 = +# 3967 "mlx/parser.mly" + ( _1 ) +# 22925 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 22933 "mlx/parser.ml" + + in + let _startpos__2_ = _startpos__1_inlined1_ in + let _endpos = _endpos__5_ in + let _symbolstartpos = if _startpos__1_ != _endpos__1_ then + _startpos__1_ + else + _startpos__2_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3511 "mlx/parser.mly" + ( let info = symbol_info _endpos in + Type.field _2 _4 ~mut:_1 ~attrs:_5 ~loc:(make_loc _sloc) ~info ) +# 22947 "mlx/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 = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _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 _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _6 : unit = Obj.magic _6 in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in + let _3 : unit = Obj.magic _3 in + let _1_inlined1 : ( +# 786 "mlx/parser.mly" + (string) +# 23009 "mlx/parser.ml" + ) = Obj.magic _1_inlined1 in + let _1 : (Asttypes.mutable_flag) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined4_ in + let _v : (Parsetree.label_declaration) = let _7 = + let _1 = _1_inlined4 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 23020 "mlx/parser.ml" + + in + let _endpos__7_ = _endpos__1_inlined4_ in + let _5 = + let _1 = _1_inlined3 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 23029 "mlx/parser.ml" + + in + let _endpos__5_ = _endpos__1_inlined3_ in + let _4 = + let _1 = _1_inlined2 in + +# 3639 "mlx/parser.mly" + ( _1 ) +# 23038 "mlx/parser.ml" + + in + let _2 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _1 = +# 3967 "mlx/parser.mly" + ( _1 ) +# 23046 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 23054 "mlx/parser.ml" + + in + let _startpos__2_ = _startpos__1_inlined1_ in + let _endpos = _endpos__7_ in + let _symbolstartpos = if _startpos__1_ != _endpos__1_ then + _startpos__1_ + else + _startpos__2_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3516 "mlx/parser.mly" + ( let info = + match rhs_info _endpos__5_ with + | Some _ as info_before_semi -> info_before_semi + | None -> symbol_info _endpos + in + Type.field _2 _4 ~mut:_1 ~attrs:(_5 @ _7) ~loc:(make_loc _sloc) ~info ) +# 23072 "mlx/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.label_declaration) = 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.label_declaration list) = +# 3505 "mlx/parser.mly" + ( [_1] ) +# 23097 "mlx/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.label_declaration) = 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.label_declaration list) = +# 3506 "mlx/parser.mly" + ( [_1] ) +# 23122 "mlx/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.label_declaration list) = Obj.magic _2 in + let _1 : (Parsetree.label_declaration) = 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.label_declaration list) = +# 3507 "mlx/parser.mly" + ( _1 :: _2 ) +# 23154 "mlx/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 : ( +# 786 "mlx/parser.mly" + (string) +# 23175 "mlx/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 * Parsetree.pattern) = let x = + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 23188 "mlx/parser.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2381 "mlx/parser.mly" + ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) +# 23197 "mlx/parser.ml" + + in + +# 2373 "mlx/parser.mly" + ( x ) +# 23203 "mlx/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 = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 cty : (Parsetree.core_type) = Obj.magic cty in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 786 "mlx/parser.mly" + (string) +# 23238 "mlx/parser.ml" + ) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_cty_ in + let _v : (string * Parsetree.pattern) = let x = + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 23251 "mlx/parser.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2381 "mlx/parser.mly" + ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) +# 23260 "mlx/parser.ml" + + in + let _startpos_x_ = _startpos__1_ in + let _endpos = _endpos_cty_ in + let _symbolstartpos = _startpos_x_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2375 "mlx/parser.mly" + ( let lab, pat = x in + lab, + mkpat ~loc:_sloc (Ppat_constraint (pat, cty)) ) +# 23272 "mlx/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 : (Mlx_shim.Longident.t) = 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 : (Mlx_shim.Longident.t) = +# 4098 "mlx/parser.mly" + ( _1 ) +# 23297 "mlx/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.expression) = 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.arg_label * Parsetree.expression) = +# 2678 "mlx/parser.mly" + ( (Nolabel, _1) ) +# 23322 "mlx/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 : ( +# 772 "mlx/parser.mly" + (string) +# 23350 "mlx/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) = +# 2680 "mlx/parser.mly" + ( (Labelled _1, _2) ) +# 23358 "mlx/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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 label : ( +# 786 "mlx/parser.mly" + (string) +# 23385 "mlx/parser.ml" + ) = Obj.magic label 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_label_ in + let _v : (Asttypes.arg_label * Parsetree.expression) = let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 2682 "mlx/parser.mly" + ( let loc = _loc_label_ in + (Labelled label, mkexpvar ~loc label) ) +# 23396 "mlx/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 = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 ty : (Parsetree.type_constraint) = Obj.magic ty in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 23443 "mlx/parser.ml" + ) = Obj.magic label 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__5_ in + let _v : (Asttypes.arg_label * Parsetree.expression) = let _endpos = _endpos__5_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 2685 "mlx/parser.mly" + ( (Labelled label, mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_label_ label) ty) ) +# 23456 "mlx/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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 label : ( +# 786 "mlx/parser.mly" + (string) +# 23483 "mlx/parser.ml" + ) = Obj.magic label 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_label_ in + let _v : (Asttypes.arg_label * Parsetree.expression) = let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 2688 "mlx/parser.mly" + ( let loc = _loc_label_ in + (Optional label, mkexpvar ~loc label) ) +# 23494 "mlx/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 : ( +# 805 "mlx/parser.mly" + (string) +# 23522 "mlx/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) = +# 2691 "mlx/parser.mly" + ( (Optional _1, _2) ) +# 23530 "mlx/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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + 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 _1_inlined1 : (Parsetree.expression option) = Obj.magic _1_inlined1 in + let _3 : (string * Parsetree.pattern) = Obj.magic _3 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__5_ in + let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _4 = + let _1 = _1_inlined1 in + +# 2369 "mlx/parser.mly" + ( _1 ) +# 23585 "mlx/parser.ml" + + in + +# 2343 "mlx/parser.mly" + ( (Optional (fst _3), _4, snd _3) ) +# 23591 "mlx/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 = _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 _1_inlined1 : ( +# 786 "mlx/parser.mly" + (string) +# 23618 "mlx/parser.ml" + ) = Obj.magic _1_inlined1 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__1_inlined1_ in + let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _2 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 23633 "mlx/parser.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2381 "mlx/parser.mly" + ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) +# 23642 "mlx/parser.ml" + + in + +# 2345 "mlx/parser.mly" + ( (Optional (fst _2), None, snd _2) ) +# 23648 "mlx/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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + 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 _1_inlined1 : (Parsetree.expression option) = Obj.magic _1_inlined1 in + let _3 : (Parsetree.pattern) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 805 "mlx/parser.mly" + (string) +# 23697 "mlx/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 _4 = + let _1 = _1_inlined1 in + +# 2369 "mlx/parser.mly" + ( _1 ) +# 23707 "mlx/parser.ml" + + in + +# 2347 "mlx/parser.mly" + ( (Optional _1, _4, _3) ) +# 23713 "mlx/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.pattern) = Obj.magic _2 in + let _1 : ( +# 805 "mlx/parser.mly" + (string) +# 23741 "mlx/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) = +# 2349 "mlx/parser.mly" + ( (Optional _1, None, _2) ) +# 23749 "mlx/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 : (string * Parsetree.pattern) = Obj.magic _3 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__4_ in + let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = +# 2351 "mlx/parser.mly" + ( (Labelled (fst _3), None, snd _3) ) +# 23795 "mlx/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 = _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 _1_inlined1 : ( +# 786 "mlx/parser.mly" + (string) +# 23822 "mlx/parser.ml" + ) = Obj.magic _1_inlined1 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__1_inlined1_ in + let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _2 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 23837 "mlx/parser.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2381 "mlx/parser.mly" + ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) +# 23846 "mlx/parser.ml" + + in + +# 2353 "mlx/parser.mly" + ( (Labelled (fst _2), None, snd _2) ) +# 23852 "mlx/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.pattern) = Obj.magic _2 in + let _1 : ( +# 772 "mlx/parser.mly" + (string) +# 23880 "mlx/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) = +# 2355 "mlx/parser.mly" + ( (Labelled _1, None, _2) ) +# 23888 "mlx/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.pattern) = 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.arg_label * Parsetree.expression option * Parsetree.pattern) = +# 2357 "mlx/parser.mly" + ( (Nolabel, None, _1) ) +# 23913 "mlx/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 = _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 _1_inlined1 : (Parsetree.pattern) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ((string option * Parsetree.pattern) list) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + +# 3143 "mlx/parser.mly" + ( None, _1 ) +# 23954 "mlx/parser.ml" + + in + +# 3171 "mlx/parser.mly" + ( _3 :: _1 ) +# 23960 "mlx/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_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 _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1_inlined1 : ( +# 772 "mlx/parser.mly" + (string) +# 24000 "mlx/parser.ml" + ) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ((string option * Parsetree.pattern) list) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_2, _1) = (_2_inlined1, _1_inlined1) in + +# 3145 "mlx/parser.mly" + ( Some _1, _2 ) +# 24012 "mlx/parser.ml" + + in + +# 3171 "mlx/parser.mly" + ( _3 :: _1 ) +# 24018 "mlx/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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 label : ( +# 786 "mlx/parser.mly" + (string) +# 24057 "mlx/parser.ml" + ) = Obj.magic label in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ((string option * Parsetree.pattern) list) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3147 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 24072 "mlx/parser.ml" + + in + +# 3171 "mlx/parser.mly" + ( _3 :: _1 ) +# 24078 "mlx/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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 24144 "mlx/parser.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ((string option * Parsetree.pattern) list) = 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 : ((string option * Parsetree.pattern) list) = let _3 = + let (_startpos__2_, _2, _1) = (_startpos__2_inlined1_, _2_inlined1, _1_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3150 "mlx/parser.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 24163 "mlx/parser.ml" + + in + +# 3171 "mlx/parser.mly" + ( _3 :: _1 ) +# 24169 "mlx/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 = _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 _1_inlined1 : (Parsetree.pattern) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + +# 3143 "mlx/parser.mly" + ( None, _1 ) +# 24210 "mlx/parser.ml" + + in + let _1 = +# 3157 "mlx/parser.mly" + ( None, _1 ) +# 24216 "mlx/parser.ml" + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 24221 "mlx/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_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 _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1_inlined1 : ( +# 772 "mlx/parser.mly" + (string) +# 24261 "mlx/parser.ml" + ) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_2, _1) = (_2_inlined1, _1_inlined1) in + +# 3145 "mlx/parser.mly" + ( Some _1, _2 ) +# 24273 "mlx/parser.ml" + + in + let _1 = +# 3157 "mlx/parser.mly" + ( None, _1 ) +# 24279 "mlx/parser.ml" + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 24284 "mlx/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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 label : ( +# 786 "mlx/parser.mly" + (string) +# 24323 "mlx/parser.ml" + ) = Obj.magic label in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3147 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 24338 "mlx/parser.ml" + + in + let _1 = +# 3157 "mlx/parser.mly" + ( None, _1 ) +# 24344 "mlx/parser.ml" + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 24349 "mlx/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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 24415 "mlx/parser.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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 : ((string option * Parsetree.pattern) list) = let _3 = + let (_startpos__2_, _2, _1) = (_startpos__2_inlined1_, _2_inlined1, _1_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3150 "mlx/parser.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 24434 "mlx/parser.ml" + + in + let _1 = +# 3157 "mlx/parser.mly" + ( None, _1 ) +# 24440 "mlx/parser.ml" + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 24445 "mlx/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 = _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 = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_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 _1_inlined1 : (Parsetree.pattern) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1 : ( +# 772 "mlx/parser.mly" + (string) +# 24487 "mlx/parser.ml" + ) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + +# 3143 "mlx/parser.mly" + ( None, _1 ) +# 24497 "mlx/parser.ml" + + in + let _1 = + let _2 = _2_inlined1 in + +# 3159 "mlx/parser.mly" + ( Some _1, _2 ) +# 24505 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 24511 "mlx/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_inlined2; + MenhirLib.EngineTypes.startp = _startpos__2_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined2_; + 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 = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_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 _2_inlined2 : (Parsetree.pattern) = Obj.magic _2_inlined2 in + let _1_inlined1 : ( +# 772 "mlx/parser.mly" + (string) +# 24557 "mlx/parser.ml" + ) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1 : ( +# 772 "mlx/parser.mly" + (string) +# 24564 "mlx/parser.ml" + ) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_inlined2_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_2, _1) = (_2_inlined2, _1_inlined1) in + +# 3145 "mlx/parser.mly" + ( Some _1, _2 ) +# 24574 "mlx/parser.ml" + + in + let _1 = + let _2 = _2_inlined1 in + +# 3159 "mlx/parser.mly" + ( Some _1, _2 ) +# 24582 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 24588 "mlx/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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_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 label : ( +# 786 "mlx/parser.mly" + (string) +# 24633 "mlx/parser.ml" + ) = Obj.magic label in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1 : ( +# 772 "mlx/parser.mly" + (string) +# 24641 "mlx/parser.ml" + ) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3147 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 24653 "mlx/parser.ml" + + in + let _1 = + let _2 = _2_inlined1 in + +# 3159 "mlx/parser.mly" + ( Some _1, _2 ) +# 24661 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 24667 "mlx/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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined2; + MenhirLib.EngineTypes.startp = _startpos__2_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined2_; + 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 = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_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 _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 24739 "mlx/parser.ml" + ) = Obj.magic label in + let _2_inlined2 : unit = Obj.magic _2_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1 : ( +# 772 "mlx/parser.mly" + (string) +# 24748 "mlx/parser.ml" + ) = 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 : ((string option * Parsetree.pattern) list) = let _3 = + let (_startpos__2_, _2, _1) = (_startpos__2_inlined2_, _2_inlined2, _1_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3150 "mlx/parser.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 24763 "mlx/parser.ml" + + in + let _1 = + let _2 = _2_inlined1 in + +# 3159 "mlx/parser.mly" + ( Some _1, _2 ) +# 24771 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 24777 "mlx/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 = _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 = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 _1_inlined1 : (Parsetree.pattern) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 24818 "mlx/parser.ml" + ) = Obj.magic label 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__1_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + +# 3143 "mlx/parser.mly" + ( None, _1 ) +# 24829 "mlx/parser.ml" + + in + let _1 = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3161 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 24838 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 24844 "mlx/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_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 = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1_inlined1 : ( +# 772 "mlx/parser.mly" + (string) +# 24890 "mlx/parser.ml" + ) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 24896 "mlx/parser.ml" + ) = Obj.magic label 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_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_2, _1) = (_2_inlined1, _1_inlined1) in + +# 3145 "mlx/parser.mly" + ( Some _1, _2 ) +# 24907 "mlx/parser.ml" + + in + let _1 = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3161 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 24916 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 24922 "mlx/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 = label_inlined1; + MenhirLib.EngineTypes.startp = _startpos_label_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_label_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 = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 label_inlined1 : ( +# 786 "mlx/parser.mly" + (string) +# 24967 "mlx/parser.ml" + ) = Obj.magic label_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 24974 "mlx/parser.ml" + ) = Obj.magic label 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_label_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_endpos_label_, _startpos_label_, label, _1) = (_endpos_label_inlined1_, _startpos_label_inlined1_, label_inlined1, _1_inlined1) in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3147 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 24987 "mlx/parser.ml" + + in + let _1 = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3161 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 24996 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 25002 "mlx/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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label_inlined1; + MenhirLib.EngineTypes.startp = _startpos_label_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_label_inlined1_; + 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 = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label_inlined1 : ( +# 786 "mlx/parser.mly" + (string) +# 25074 "mlx/parser.ml" + ) = Obj.magic label_inlined1 in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 25082 "mlx/parser.ml" + ) = Obj.magic label 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__6_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_endpos_label_, _startpos_label_, _startpos__2_, label, _2, _1) = (_endpos_label_inlined1_, _startpos_label_inlined1_, _startpos__2_inlined1_, label_inlined1, _2_inlined1, _1_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3150 "mlx/parser.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 25098 "mlx/parser.ml" + + in + let _1 = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3161 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 25107 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 25113 "mlx/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 = _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 = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _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_inlined1 : (Parsetree.pattern) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 25181 "mlx/parser.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 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__1_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + +# 3143 "mlx/parser.mly" + ( None, _1 ) +# 25193 "mlx/parser.ml" + + in + let _1 = + let (_startpos__2_, _2) = (_startpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3164 "mlx/parser.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 25206 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 25212 "mlx/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_inlined2; + MenhirLib.EngineTypes.startp = _startpos__2_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined2_; + 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 = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _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_inlined2 : (Parsetree.pattern) = Obj.magic _2_inlined2 in + let _1_inlined1 : ( +# 772 "mlx/parser.mly" + (string) +# 25282 "mlx/parser.ml" + ) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 25291 "mlx/parser.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 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_inlined2_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_2, _1) = (_2_inlined2, _1_inlined1) in + +# 3145 "mlx/parser.mly" + ( Some _1, _2 ) +# 25303 "mlx/parser.ml" + + in + let _1 = + let (_startpos__2_, _2) = (_startpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3164 "mlx/parser.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 25316 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 25322 "mlx/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 = label_inlined1; + MenhirLib.EngineTypes.startp = _startpos_label_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_label_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 = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _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 label_inlined1 : ( +# 786 "mlx/parser.mly" + (string) +# 25391 "mlx/parser.ml" + ) = Obj.magic label_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 25401 "mlx/parser.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 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_label_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_endpos_label_, _startpos_label_, label, _1) = (_endpos_label_inlined1_, _startpos_label_inlined1_, label_inlined1, _1_inlined1) in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3147 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 25415 "mlx/parser.ml" + + in + let _1 = + let (_startpos__2_, _2) = (_startpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3164 "mlx/parser.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 25428 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 25434 "mlx/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 = _6_inlined1; + MenhirLib.EngineTypes.startp = _startpos__6_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__6_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty_inlined1; + MenhirLib.EngineTypes.startp = _startpos_cty_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_cty_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4_inlined1; + MenhirLib.EngineTypes.startp = _startpos__4_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__4_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = label_inlined1; + MenhirLib.EngineTypes.startp = _startpos_label_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_label_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined2; + MenhirLib.EngineTypes.startp = _startpos__2_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined2_; + 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 = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _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_inlined1 : unit = Obj.magic _6_inlined1 in + let cty_inlined1 : (Parsetree.core_type) = Obj.magic cty_inlined1 in + let _4_inlined1 : unit = Obj.magic _4_inlined1 in + let label_inlined1 : ( +# 786 "mlx/parser.mly" + (string) +# 25530 "mlx/parser.ml" + ) = Obj.magic label_inlined1 in + let _2_inlined2 : unit = Obj.magic _2_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 25541 "mlx/parser.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 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__6_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_endpos_label_, _startpos_label_, _endpos__6_, _startpos__2_, _6, cty, _4, label, _2, _1) = (_endpos_label_inlined1_, _startpos_label_inlined1_, _endpos__6_inlined1_, _startpos__2_inlined2_, _6_inlined1, cty_inlined1, _4_inlined1, label_inlined1, _2_inlined2, _1_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3150 "mlx/parser.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 25558 "mlx/parser.ml" + + in + let _1 = + let (_startpos__2_, _2) = (_startpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3164 "mlx/parser.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 25571 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 25577 "mlx/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 = _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 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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 option * Parsetree.pattern) list) = let _loc__3_ = (_startpos__3_, _endpos__3_) in + +# 3175 "mlx/parser.mly" + ( expecting _loc__3_ "pattern" ) +# 25617 "mlx/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 = _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 _1_inlined1 : (Parsetree.pattern) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ((string option * Parsetree.pattern) list) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + +# 3143 "mlx/parser.mly" + ( None, _1 ) +# 25658 "mlx/parser.ml" + + in + +# 3171 "mlx/parser.mly" + ( _3 :: _1 ) +# 25664 "mlx/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_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 _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1_inlined1 : ( +# 772 "mlx/parser.mly" + (string) +# 25704 "mlx/parser.ml" + ) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ((string option * Parsetree.pattern) list) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_2, _1) = (_2_inlined1, _1_inlined1) in + +# 3145 "mlx/parser.mly" + ( Some _1, _2 ) +# 25716 "mlx/parser.ml" + + in + +# 3171 "mlx/parser.mly" + ( _3 :: _1 ) +# 25722 "mlx/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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 label : ( +# 786 "mlx/parser.mly" + (string) +# 25761 "mlx/parser.ml" + ) = Obj.magic label in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ((string option * Parsetree.pattern) list) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3147 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 25776 "mlx/parser.ml" + + in + +# 3171 "mlx/parser.mly" + ( _3 :: _1 ) +# 25782 "mlx/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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 25848 "mlx/parser.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ((string option * Parsetree.pattern) list) = 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 : ((string option * Parsetree.pattern) list) = let _3 = + let (_startpos__2_, _2, _1) = (_startpos__2_inlined1_, _2_inlined1, _1_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3150 "mlx/parser.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 25867 "mlx/parser.ml" + + in + +# 3171 "mlx/parser.mly" + ( _3 :: _1 ) +# 25873 "mlx/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 = _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 _1_inlined1 : (Parsetree.pattern) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + +# 3143 "mlx/parser.mly" + ( None, _1 ) +# 25914 "mlx/parser.ml" + + in + let _1 = +# 3157 "mlx/parser.mly" + ( None, _1 ) +# 25920 "mlx/parser.ml" + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 25925 "mlx/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_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 _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1_inlined1 : ( +# 772 "mlx/parser.mly" + (string) +# 25965 "mlx/parser.ml" + ) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_2, _1) = (_2_inlined1, _1_inlined1) in + +# 3145 "mlx/parser.mly" + ( Some _1, _2 ) +# 25977 "mlx/parser.ml" + + in + let _1 = +# 3157 "mlx/parser.mly" + ( None, _1 ) +# 25983 "mlx/parser.ml" + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 25988 "mlx/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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 label : ( +# 786 "mlx/parser.mly" + (string) +# 26027 "mlx/parser.ml" + ) = Obj.magic label in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3147 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 26042 "mlx/parser.ml" + + in + let _1 = +# 3157 "mlx/parser.mly" + ( None, _1 ) +# 26048 "mlx/parser.ml" + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 26053 "mlx/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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 26119 "mlx/parser.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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 : ((string option * Parsetree.pattern) list) = let _3 = + let (_startpos__2_, _2, _1) = (_startpos__2_inlined1_, _2_inlined1, _1_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3150 "mlx/parser.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 26138 "mlx/parser.ml" + + in + let _1 = +# 3157 "mlx/parser.mly" + ( None, _1 ) +# 26144 "mlx/parser.ml" + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 26149 "mlx/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 = _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 = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_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 _1_inlined1 : (Parsetree.pattern) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1 : ( +# 772 "mlx/parser.mly" + (string) +# 26191 "mlx/parser.ml" + ) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + +# 3143 "mlx/parser.mly" + ( None, _1 ) +# 26201 "mlx/parser.ml" + + in + let _1 = + let _2 = _2_inlined1 in + +# 3159 "mlx/parser.mly" + ( Some _1, _2 ) +# 26209 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 26215 "mlx/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_inlined2; + MenhirLib.EngineTypes.startp = _startpos__2_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined2_; + 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 = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_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 _2_inlined2 : (Parsetree.pattern) = Obj.magic _2_inlined2 in + let _1_inlined1 : ( +# 772 "mlx/parser.mly" + (string) +# 26261 "mlx/parser.ml" + ) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1 : ( +# 772 "mlx/parser.mly" + (string) +# 26268 "mlx/parser.ml" + ) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_inlined2_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_2, _1) = (_2_inlined2, _1_inlined1) in + +# 3145 "mlx/parser.mly" + ( Some _1, _2 ) +# 26278 "mlx/parser.ml" + + in + let _1 = + let _2 = _2_inlined1 in + +# 3159 "mlx/parser.mly" + ( Some _1, _2 ) +# 26286 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 26292 "mlx/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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_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 label : ( +# 786 "mlx/parser.mly" + (string) +# 26337 "mlx/parser.ml" + ) = Obj.magic label in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1 : ( +# 772 "mlx/parser.mly" + (string) +# 26345 "mlx/parser.ml" + ) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3147 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 26357 "mlx/parser.ml" + + in + let _1 = + let _2 = _2_inlined1 in + +# 3159 "mlx/parser.mly" + ( Some _1, _2 ) +# 26365 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 26371 "mlx/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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined2; + MenhirLib.EngineTypes.startp = _startpos__2_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined2_; + 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 = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_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 _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 26443 "mlx/parser.ml" + ) = Obj.magic label in + let _2_inlined2 : unit = Obj.magic _2_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1 : ( +# 772 "mlx/parser.mly" + (string) +# 26452 "mlx/parser.ml" + ) = 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 : ((string option * Parsetree.pattern) list) = let _3 = + let (_startpos__2_, _2, _1) = (_startpos__2_inlined2_, _2_inlined2, _1_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3150 "mlx/parser.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 26467 "mlx/parser.ml" + + in + let _1 = + let _2 = _2_inlined1 in + +# 3159 "mlx/parser.mly" + ( Some _1, _2 ) +# 26475 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 26481 "mlx/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 = _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 = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 _1_inlined1 : (Parsetree.pattern) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 26522 "mlx/parser.ml" + ) = Obj.magic label 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__1_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + +# 3143 "mlx/parser.mly" + ( None, _1 ) +# 26533 "mlx/parser.ml" + + in + let _1 = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3161 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 26542 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 26548 "mlx/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_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 = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1_inlined1 : ( +# 772 "mlx/parser.mly" + (string) +# 26594 "mlx/parser.ml" + ) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 26600 "mlx/parser.ml" + ) = Obj.magic label 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_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_2, _1) = (_2_inlined1, _1_inlined1) in + +# 3145 "mlx/parser.mly" + ( Some _1, _2 ) +# 26611 "mlx/parser.ml" + + in + let _1 = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3161 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 26620 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 26626 "mlx/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 = label_inlined1; + MenhirLib.EngineTypes.startp = _startpos_label_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_label_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 = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 label_inlined1 : ( +# 786 "mlx/parser.mly" + (string) +# 26671 "mlx/parser.ml" + ) = Obj.magic label_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 26678 "mlx/parser.ml" + ) = Obj.magic label 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_label_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_endpos_label_, _startpos_label_, label, _1) = (_endpos_label_inlined1_, _startpos_label_inlined1_, label_inlined1, _1_inlined1) in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3147 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 26691 "mlx/parser.ml" + + in + let _1 = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3161 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 26700 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 26706 "mlx/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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label_inlined1; + MenhirLib.EngineTypes.startp = _startpos_label_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_label_inlined1_; + 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 = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label_inlined1 : ( +# 786 "mlx/parser.mly" + (string) +# 26778 "mlx/parser.ml" + ) = Obj.magic label_inlined1 in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 26786 "mlx/parser.ml" + ) = Obj.magic label 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__6_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_endpos_label_, _startpos_label_, _startpos__2_, label, _2, _1) = (_endpos_label_inlined1_, _startpos_label_inlined1_, _startpos__2_inlined1_, label_inlined1, _2_inlined1, _1_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3150 "mlx/parser.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 26802 "mlx/parser.ml" + + in + let _1 = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3161 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 26811 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 26817 "mlx/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 = _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 = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _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_inlined1 : (Parsetree.pattern) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 26885 "mlx/parser.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 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__1_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + +# 3143 "mlx/parser.mly" + ( None, _1 ) +# 26897 "mlx/parser.ml" + + in + let _1 = + let (_startpos__2_, _2) = (_startpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3164 "mlx/parser.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 26910 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 26916 "mlx/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_inlined2; + MenhirLib.EngineTypes.startp = _startpos__2_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined2_; + 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 = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _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_inlined2 : (Parsetree.pattern) = Obj.magic _2_inlined2 in + let _1_inlined1 : ( +# 772 "mlx/parser.mly" + (string) +# 26986 "mlx/parser.ml" + ) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 26995 "mlx/parser.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 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_inlined2_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_2, _1) = (_2_inlined2, _1_inlined1) in + +# 3145 "mlx/parser.mly" + ( Some _1, _2 ) +# 27007 "mlx/parser.ml" + + in + let _1 = + let (_startpos__2_, _2) = (_startpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3164 "mlx/parser.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 27020 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 27026 "mlx/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 = label_inlined1; + MenhirLib.EngineTypes.startp = _startpos_label_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_label_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 = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _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 label_inlined1 : ( +# 786 "mlx/parser.mly" + (string) +# 27095 "mlx/parser.ml" + ) = Obj.magic label_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 27105 "mlx/parser.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 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_label_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_endpos_label_, _startpos_label_, label, _1) = (_endpos_label_inlined1_, _startpos_label_inlined1_, label_inlined1, _1_inlined1) in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3147 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 27119 "mlx/parser.ml" + + in + let _1 = + let (_startpos__2_, _2) = (_startpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3164 "mlx/parser.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 27132 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 27138 "mlx/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 = _6_inlined1; + MenhirLib.EngineTypes.startp = _startpos__6_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__6_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty_inlined1; + MenhirLib.EngineTypes.startp = _startpos_cty_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_cty_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4_inlined1; + MenhirLib.EngineTypes.startp = _startpos__4_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__4_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = label_inlined1; + MenhirLib.EngineTypes.startp = _startpos_label_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_label_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined2; + MenhirLib.EngineTypes.startp = _startpos__2_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined2_; + 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 = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _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_inlined1 : unit = Obj.magic _6_inlined1 in + let cty_inlined1 : (Parsetree.core_type) = Obj.magic cty_inlined1 in + let _4_inlined1 : unit = Obj.magic _4_inlined1 in + let label_inlined1 : ( +# 786 "mlx/parser.mly" + (string) +# 27234 "mlx/parser.ml" + ) = Obj.magic label_inlined1 in + let _2_inlined2 : unit = Obj.magic _2_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 27245 "mlx/parser.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 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__6_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_endpos_label_, _startpos_label_, _endpos__6_, _startpos__2_, _6, cty, _4, label, _2, _1) = (_endpos_label_inlined1_, _startpos_label_inlined1_, _endpos__6_inlined1_, _startpos__2_inlined2_, _6_inlined1, cty_inlined1, _4_inlined1, label_inlined1, _2_inlined2, _1_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3150 "mlx/parser.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 27262 "mlx/parser.ml" + + in + let _1 = + let (_startpos__2_, _2) = (_startpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3164 "mlx/parser.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 27275 "mlx/parser.ml" + + in + +# 3173 "mlx/parser.mly" + ( [ _3; _1 ] ) +# 27281 "mlx/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 = _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 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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 option * Parsetree.pattern) list) = let _loc__3_ = (_startpos__3_, _endpos__3_) in + +# 3175 "mlx/parser.mly" + ( expecting _loc__3_ "pattern" ) +# 27321 "mlx/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 : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = 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.pattern_desc) = +# 3187 "mlx/parser.mly" + ( let closed, pat = _1 in + Ppat_tuple(List.rev pat, closed) ) +# 27347 "mlx/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 : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = 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.pattern_desc) = +# 3187 "mlx/parser.mly" + ( let closed, pat = _1 in + Ppat_tuple(List.rev pat, closed) ) +# 27373 "mlx/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.pattern * Parsetree.expression * + Parsetree.value_constraint option) = 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.pattern * Parsetree.expression * + Parsetree.value_constraint option * bool) = +# 2730 "mlx/parser.mly" + ( let p,e,c = _1 in (p,e,c,false) ) +# 27400 "mlx/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 : (string) = 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.pattern * Parsetree.expression * + Parsetree.value_constraint option * bool) = let _endpos = _endpos__1_ in + let _startpos = _startpos__1_ in + let _loc = (_startpos, _endpos) in + +# 2733 "mlx/parser.mly" + ( (mkpatvar ~loc:_loc _1, mkexpvar ~loc:_loc _1, None, true) ) +# 27429 "mlx/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 : (string) = 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 * Parsetree.expression * + Parsetree.value_constraint option) = let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2698 "mlx/parser.mly" + ( mkpatvar ~loc:_sloc _1 ) +# 27466 "mlx/parser.ml" + + in + +# 2702 "mlx/parser.mly" + ( (_1, _2, None) ) +# 27472 "mlx/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 : (Parsetree.expression) = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in + let _2 : (Parsetree.type_constraint) = Obj.magic _2 in + let _1 : (string) = 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.pattern * Parsetree.expression * + Parsetree.value_constraint option) = let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2698 "mlx/parser.mly" + ( mkpatvar ~loc:_sloc _1 ) +# 27523 "mlx/parser.ml" + + in + +# 2704 "mlx/parser.mly" + ( let v = _1 in (* PR#7344 *) + let t = + match _2 with + Pconstraint t -> + Pvc_constraint { locally_abstract_univars = []; typ=t } + | Pcoerce (ground, coercion) -> Pvc_coercion { ground; coercion} + in + (v, _4, Some t) + ) +# 27537 "mlx/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 = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + 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 _5 : (Parsetree.expression) = Obj.magic _5 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.core_type) = Obj.magic _3 in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let xs : (string Ppxlib.loc list) = Obj.magic xs in + let _2 : unit = Obj.magic _2 in + let _1 : (string) = 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.pattern * Parsetree.expression * + Parsetree.value_constraint option) = let _3 = + let _2 = _2_inlined1 in + let _1 = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 27609 "mlx/parser.ml" + in + +# 1080 "mlx/parser.mly" + ( xs ) +# 27614 "mlx/parser.ml" + + in + +# 3621 "mlx/parser.mly" + ( _1 ) +# 27620 "mlx/parser.ml" + + in + +# 3625 "mlx/parser.mly" + ( Ptyp_poly(_1, _3) ) +# 27626 "mlx/parser.ml" + + in + let _startpos__3_ = _startpos_xs_ in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2698 "mlx/parser.mly" + ( mkpatvar ~loc:_sloc _1 ) +# 27637 "mlx/parser.ml" + + in + let _loc__3_ = (_startpos__3_, _endpos__3_) in + +# 2714 "mlx/parser.mly" + ( + let t = ghtyp ~loc:(_loc__3_) _3 in + (_1, _5, Some (Pvc_constraint { locally_abstract_univars = []; typ=t })) + ) +# 27647 "mlx/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 = _8; + MenhirLib.EngineTypes.startp = _startpos__8_; + MenhirLib.EngineTypes.endp = _endpos__8_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + 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 _8 : (Parsetree.expression) = Obj.magic _8 in + let _7 : unit = Obj.magic _7 in + let _6 : (Parsetree.core_type) = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let xs : (string Ppxlib.loc list) = Obj.magic xs in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (string) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__8_ in + let _v : (Parsetree.pattern * Parsetree.expression * + Parsetree.value_constraint option) = let _4 = +# 2695 "mlx/parser.mly" + ( xs ) +# 27722 "mlx/parser.ml" + in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2698 "mlx/parser.mly" + ( mkpatvar ~loc:_sloc _1 ) +# 27731 "mlx/parser.ml" + + in + +# 2719 "mlx/parser.mly" + ( let constraint' = + Pvc_constraint { locally_abstract_univars=_4; typ = _6} + in + (_1, _8, Some constraint') ) +# 27740 "mlx/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 = _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 : (Parsetree.expression) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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 * Parsetree.expression * + Parsetree.value_constraint option) = +# 2724 "mlx/parser.mly" + ( (_1, _3, None) ) +# 27780 "mlx/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 = _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 : (Parsetree.expression) = Obj.magic _5 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.core_type) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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.pattern * Parsetree.expression * + Parsetree.value_constraint option) = +# 2726 "mlx/parser.mly" + ( (_1, _5, Some(Pvc_constraint { locally_abstract_univars=[]; typ=_3 })) ) +# 27834 "mlx/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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = body; + MenhirLib.EngineTypes.startp = _startpos_body_; + MenhirLib.EngineTypes.endp = _endpos_body_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = rec_flag; + MenhirLib.EngineTypes.startp = _startpos_rec_flag_; + MenhirLib.EngineTypes.endp = _endpos_rec_flag_; + 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 = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + 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 _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let body : (Parsetree.pattern * Parsetree.expression * + Parsetree.value_constraint option * bool) = Obj.magic body in + let rec_flag : (Asttypes.rec_flag) = Obj.magic rec_flag in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let ext : (string Ppxlib.loc option) = Obj.magic ext 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__1_inlined2_ in + let _v : (let_bindings) = let _1 = + let attrs2 = + let _1 = _1_inlined2 in + +# 4333 "mlx/parser.mly" + ( _1 ) +# 27898 "mlx/parser.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined2_ in + let attrs1 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 27907 "mlx/parser.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2753 "mlx/parser.mly" + ( + let attrs = attrs1 @ attrs2 in + mklbs ext rec_flag (mklb ~loc:_sloc true body attrs) + ) +# 27919 "mlx/parser.ml" + + in + +# 2743 "mlx/parser.mly" + ( _1 ) +# 27925 "mlx/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 : (let_binding) = Obj.magic _2 in + let _1 : (let_bindings) = 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 : (let_bindings) = +# 2744 "mlx/parser.mly" + ( addlb _1 _2 ) +# 27957 "mlx/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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = body; + MenhirLib.EngineTypes.startp = _startpos_body_; + MenhirLib.EngineTypes.endp = _endpos_body_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = rec_flag; + MenhirLib.EngineTypes.startp = _startpos_rec_flag_; + MenhirLib.EngineTypes.endp = _endpos_rec_flag_; + 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 _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let body : (Parsetree.pattern * Parsetree.expression * + Parsetree.value_constraint option * bool) = Obj.magic body in + let rec_flag : (Asttypes.rec_flag) = Obj.magic rec_flag in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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__1_inlined2_ in + let _v : (let_bindings) = let _1 = + let attrs2 = + let _1 = _1_inlined2 in + +# 4333 "mlx/parser.mly" + ( _1 ) +# 28014 "mlx/parser.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined2_ in + let attrs1 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 28023 "mlx/parser.ml" + + in + let ext = +# 4344 "mlx/parser.mly" + ( None ) +# 28029 "mlx/parser.ml" + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2753 "mlx/parser.mly" + ( + let attrs = attrs1 @ attrs2 in + mklbs ext rec_flag (mklb ~loc:_sloc true body attrs) + ) +# 28040 "mlx/parser.ml" + + in + +# 2743 "mlx/parser.mly" + ( _1 ) +# 28046 "mlx/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 = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = body; + MenhirLib.EngineTypes.startp = _startpos_body_; + MenhirLib.EngineTypes.endp = _endpos_body_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = rec_flag; + MenhirLib.EngineTypes.startp = _startpos_rec_flag_; + MenhirLib.EngineTypes.endp = _endpos_rec_flag_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let body : (Parsetree.pattern * Parsetree.expression * + Parsetree.value_constraint option * bool) = Obj.magic body in + let rec_flag : (Asttypes.rec_flag) = Obj.magic rec_flag in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _2 : (Dune__exe__Ast_helper.str) = Obj.magic _2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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__1_inlined3_ in + let _v : (let_bindings) = let _1 = + let attrs2 = + let _1 = _1_inlined3 in + +# 4333 "mlx/parser.mly" + ( _1 ) +# 28117 "mlx/parser.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let attrs1 = + let _1 = _1_inlined2 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 28126 "mlx/parser.ml" + + in + let ext = + let (_startpos__1_, _1) = (_startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__2_ in + let _startpos = _startpos__1_ in + let _loc = (_startpos, _endpos) in + +# 4346 "mlx/parser.mly" + ( not_expecting _loc "extension" ) +# 28137 "mlx/parser.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2753 "mlx/parser.mly" + ( + let attrs = attrs1 @ attrs2 in + mklbs ext rec_flag (mklb ~loc:_sloc true body attrs) + ) +# 28149 "mlx/parser.ml" + + in + +# 2743 "mlx/parser.mly" + ( _1 ) +# 28155 "mlx/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 : (let_binding) = Obj.magic _2 in + let _1 : (let_bindings) = 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 : (let_bindings) = +# 2744 "mlx/parser.mly" + ( addlb _1 _2 ) +# 28187 "mlx/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.pattern) = 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.pattern) = +# 2385 "mlx/parser.mly" + ( _1 ) +# 28212 "mlx/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 = _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 : (Parsetree.core_type) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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 = +# 2387 "mlx/parser.mly" + ( Ppat_constraint(_1, _3) ) +# 28252 "mlx/parser.ml" + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1013 "mlx/parser.mly" + ( mkpat ~loc:_sloc _1 ) +# 28261 "mlx/parser.ml" + + in + +# 2388 "mlx/parser.mly" + ( _1 ) +# 28267 "mlx/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 = exp; + MenhirLib.EngineTypes.startp = _startpos_exp_; + MenhirLib.EngineTypes.endp = _endpos_exp_; + 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 exp : (Parsetree.expression) = Obj.magic exp in + let _1 : (string) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_exp_ in + let _v : (Parsetree.pattern * Parsetree.expression) = let pat = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2698 "mlx/parser.mly" + ( mkpatvar ~loc:_sloc _1 ) +# 28303 "mlx/parser.ml" + + in + +# 2770 "mlx/parser.mly" + ( (pat, exp) ) +# 28309 "mlx/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 : (string) = 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.pattern * Parsetree.expression) = let _endpos = _endpos__1_ in + let _startpos = _startpos__1_ in + let _loc = (_startpos, _endpos) in + +# 2773 "mlx/parser.mly" + ( (mkpatvar ~loc:_loc _1, mkexpvar ~loc:_loc _1) ) +# 28337 "mlx/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 = exp; + MenhirLib.EngineTypes.startp = _startpos_exp_; + MenhirLib.EngineTypes.endp = _endpos_exp_; + 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 = typ; + MenhirLib.EngineTypes.startp = _startpos_typ_; + MenhirLib.EngineTypes.endp = _endpos_typ_; + 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 = pat; + MenhirLib.EngineTypes.startp = _startpos_pat_; + MenhirLib.EngineTypes.endp = _endpos_pat_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let exp : (Parsetree.expression) = Obj.magic exp in + let _4 : unit = Obj.magic _4 in + let typ : (Parsetree.core_type) = Obj.magic typ in + let _2 : unit = Obj.magic _2 in + let pat : (Parsetree.pattern) = Obj.magic pat in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_pat_ in + let _endpos = _endpos_exp_ in + let _v : (Parsetree.pattern * Parsetree.expression) = +# 2775 "mlx/parser.mly" + ( let loc = (_startpos_pat_, _endpos_typ_) in + (ghpat ~loc (Ppat_constraint(pat, typ)), exp) ) +# 28391 "mlx/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 = exp; + MenhirLib.EngineTypes.startp = _startpos_exp_; + MenhirLib.EngineTypes.endp = _endpos_exp_; + 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 = pat; + MenhirLib.EngineTypes.startp = _startpos_pat_; + MenhirLib.EngineTypes.endp = _endpos_pat_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let exp : (Parsetree.expression) = Obj.magic exp in + let _2 : unit = Obj.magic _2 in + let pat : (Parsetree.pattern) = Obj.magic pat in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_pat_ in + let _endpos = _endpos_exp_ in + let _v : (Parsetree.pattern * Parsetree.expression) = +# 2778 "mlx/parser.mly" + ( (pat, exp) ) +# 28430 "mlx/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 = body; + MenhirLib.EngineTypes.startp = _startpos_body_; + MenhirLib.EngineTypes.endp = _endpos_body_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let body : (Parsetree.pattern * Parsetree.expression) = Obj.magic body in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_body_ in + let _endpos = _endpos_body_ in + let _v : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = +# 2782 "mlx/parser.mly" + ( let let_pat, let_exp = body in + let_pat, let_exp, [] ) +# 28456 "mlx/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 = body; + MenhirLib.EngineTypes.startp = _startpos_body_; + MenhirLib.EngineTypes.endp = _endpos_body_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = bindings; + MenhirLib.EngineTypes.startp = _startpos_bindings_; + MenhirLib.EngineTypes.endp = _endpos_bindings_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let body : (Parsetree.pattern * Parsetree.expression) = Obj.magic body in + let _1 : ( +# 768 "mlx/parser.mly" + (string) +# 28490 "mlx/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 + let _startpos = _startpos_bindings_ in + let _endpos = _endpos_body_ in + let _v : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = let pbop_op = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 28503 "mlx/parser.ml" + + in + let _endpos = _endpos_body_ in + let _symbolstartpos = _startpos_bindings_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2785 "mlx/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 ) +# 28516 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.class_expr Parsetree.class_infos list) = +# 211 "" + ( [] ) +# 28534 "mlx/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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = body; + MenhirLib.EngineTypes.startp = _startpos_body_; + MenhirLib.EngineTypes.endp = _endpos_body_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = params; + MenhirLib.EngineTypes.startp = _startpos_params_; + MenhirLib.EngineTypes.endp = _endpos_params_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = virt; + MenhirLib.EngineTypes.startp = _startpos_virt_; + MenhirLib.EngineTypes.endp = _endpos_virt_; + 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 xs : (Parsetree.class_expr Parsetree.class_infos list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let body : (Parsetree.class_expr) = Obj.magic body in + let _1_inlined2 : ( +# 786 "mlx/parser.mly" + (string) +# 28600 "mlx/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 + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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 : (Parsetree.class_expr Parsetree.class_infos list) = let x = + let attrs2 = + let _1 = _1_inlined3 in + +# 4333 "mlx/parser.mly" + ( _1 ) +# 28615 "mlx/parser.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 28627 "mlx/parser.ml" + + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 28635 "mlx/parser.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1960 "mlx/parser.mly" + ( + let attrs = attrs1 @ attrs2 in + let loc = make_loc _sloc in + let docs = symbol_docs _sloc in + let text = symbol_text _symbolstartpos in + Ci.mk id body ~virt ~params ~attrs ~loc ~text ~docs + ) +# 28650 "mlx/parser.ml" + + in + +# 213 "" + ( x :: xs ) +# 28656 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.class_type Parsetree.class_infos list) = +# 211 "" + ( [] ) +# 28674 "mlx/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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = params; + MenhirLib.EngineTypes.startp = _startpos_params_; + MenhirLib.EngineTypes.endp = _endpos_params_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = virt; + MenhirLib.EngineTypes.startp = _startpos_virt_; + MenhirLib.EngineTypes.endp = _endpos_virt_; + 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 xs : (Parsetree.class_type Parsetree.class_infos list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let cty : (Parsetree.class_type) = Obj.magic cty in + let _6 : unit = Obj.magic _6 in + let _1_inlined2 : ( +# 786 "mlx/parser.mly" + (string) +# 28747 "mlx/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 + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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 : (Parsetree.class_type Parsetree.class_infos list) = let x = + let attrs2 = + let _1 = _1_inlined3 in + +# 4333 "mlx/parser.mly" + ( _1 ) +# 28762 "mlx/parser.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 28774 "mlx/parser.ml" + + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 28782 "mlx/parser.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2251 "mlx/parser.mly" + ( + let attrs = attrs1 @ attrs2 in + let loc = make_loc _sloc in + let docs = symbol_docs _sloc in + let text = symbol_text _symbolstartpos in + Ci.mk id cty ~virt ~params ~attrs ~loc ~text ~docs + ) +# 28797 "mlx/parser.ml" + + in + +# 213 "" + ( x :: xs ) +# 28803 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.class_type Parsetree.class_infos list) = +# 211 "" + ( [] ) +# 28821 "mlx/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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = csig; + MenhirLib.EngineTypes.startp = _startpos_csig_; + MenhirLib.EngineTypes.endp = _endpos_csig_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = params; + MenhirLib.EngineTypes.startp = _startpos_params_; + MenhirLib.EngineTypes.endp = _endpos_params_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = virt; + MenhirLib.EngineTypes.startp = _startpos_virt_; + MenhirLib.EngineTypes.endp = _endpos_virt_; + 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 xs : (Parsetree.class_type Parsetree.class_infos list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let csig : (Parsetree.class_type) = Obj.magic csig in + let _6 : unit = Obj.magic _6 in + let _1_inlined2 : ( +# 786 "mlx/parser.mly" + (string) +# 28894 "mlx/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 + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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 : (Parsetree.class_type Parsetree.class_infos list) = let x = + let attrs2 = + let _1 = _1_inlined3 in + +# 4333 "mlx/parser.mly" + ( _1 ) +# 28909 "mlx/parser.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 28921 "mlx/parser.ml" + + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 28929 "mlx/parser.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2290 "mlx/parser.mly" + ( + let attrs = attrs1 @ attrs2 in + let loc = make_loc _sloc in + let docs = symbol_docs _sloc in + let text = symbol_text _symbolstartpos in + Ci.mk id csig ~virt ~params ~attrs ~loc ~text ~docs + ) +# 28944 "mlx/parser.ml" + + in + +# 213 "" + ( x :: xs ) +# 28950 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.module_binding list) = +# 211 "" + ( [] ) +# 28968 "mlx/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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = body; + MenhirLib.EngineTypes.startp = _startpos_body_; + MenhirLib.EngineTypes.endp = _endpos_body_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 xs : (Parsetree.module_binding list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let body : (Parsetree.module_expr) = Obj.magic body in + let _1_inlined2 : (string option) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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 : (Parsetree.module_binding list) = let x = + let attrs2 = + let _1 = _1_inlined3 in + +# 4333 "mlx/parser.mly" + ( _1 ) +# 29031 "mlx/parser.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let name = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 29043 "mlx/parser.ml" + + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 29051 "mlx/parser.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1618 "mlx/parser.mly" + ( + let loc = make_loc _sloc in + let attrs = attrs1 @ attrs2 in + let docs = symbol_docs _sloc in + let text = symbol_text _symbolstartpos in + Mb.mk name body ~attrs ~loc ~text ~docs + ) +# 29066 "mlx/parser.ml" + + in + +# 213 "" + ( x :: xs ) +# 29072 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15219,49 +29079,14 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = id; - MenhirLib.EngineTypes.startp = _startpos_id_; - MenhirLib.EngineTypes.endp = _endpos_id_; - 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 = prefix; - MenhirLib.EngineTypes.startp = _startpos_prefix_; - MenhirLib.EngineTypes.endp = _endpos_prefix_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let id : (Ppxlib.longident) = Obj.magic id in - let _2 : unit = Obj.magic _2 in - let prefix : ( -# 769 "mlx/parser.mly" - (string) -# 15247 "mlx/parser.ml" - ) = Obj.magic prefix in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_prefix_ in - let _endpos = _endpos_id_ in - let _v : ([> `Module | `Value ] * (Lexing.position * Lexing.position) * - Ppxlib.longident) = let _endpos = _endpos_id_ in - let _symbolstartpos = _startpos_prefix_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3665 "mlx/parser.mly" - ( - let rec rebase = function - | Lident id -> Ldot (Lident prefix, id) - | Ldot (prefix', id) -> Ldot (rebase prefix', id) - | Lapply _ -> assert false - in - `Module, _sloc, rebase id ) -# 15265 "mlx/parser.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.module_declaration list) = +# 211 "" + ( [] ) +# 29090 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15274,47 +29099,105 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = id; - MenhirLib.EngineTypes.startp = _startpos_id_; - MenhirLib.EngineTypes.endp = _endpos_id_; + 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.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = prefix; - MenhirLib.EngineTypes.startp = _startpos_prefix_; - MenhirLib.EngineTypes.endp = _endpos_prefix_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = mty; + MenhirLib.EngineTypes.startp = _startpos_mty_; + MenhirLib.EngineTypes.endp = _endpos_mty_; + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 id : (Ppxlib.longident) = Obj.magic id in - let _2 : unit = Obj.magic _2 in - let prefix : ( -# 769 "mlx/parser.mly" - (string) -# 15300 "mlx/parser.ml" - ) = Obj.magic prefix in + let xs : (Parsetree.module_declaration list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let mty : (Parsetree.module_type) = Obj.magic mty in + let _4 : unit = Obj.magic _4 in + let _1_inlined2 : (string option) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_prefix_ in - let _endpos = _endpos_id_ in - let _v : ([> `Module | `Value ] * (Lexing.position * Lexing.position) * - Ppxlib.longident) = let _endpos = _endpos_id_ in - let _symbolstartpos = _startpos_prefix_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.module_declaration list) = let x = + let attrs2 = + let _1 = _1_inlined3 in + +# 4333 "mlx/parser.mly" + ( _1 ) +# 29160 "mlx/parser.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let name = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 29172 "mlx/parser.ml" + + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 29180 "mlx/parser.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1901 "mlx/parser.mly" + ( + let attrs = attrs1 @ attrs2 in + let docs = symbol_docs _sloc in + let loc = make_loc _sloc in + let text = symbol_text _symbolstartpos in + Md.mk name mty ~attrs ~loc ~text ~docs + ) +# 29195 "mlx/parser.ml" + + in -# 3672 "mlx/parser.mly" - ( - let rec rebase = function - | Lident id -> Ldot (Lident prefix, id) - | Ldot (prefix', id) -> Ldot (rebase prefix', id) - | Lapply _ -> assert false - in - `Value, _sloc, rebase id ) -# 15318 "mlx/parser.ml" +# 213 "" + ( x :: xs ) +# 29201 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15325,30 +29208,14 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = name; - MenhirLib.EngineTypes.startp = _startpos_name_; - MenhirLib.EngineTypes.endp = _endpos_name_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let name : ( -# 714 "mlx/parser.mly" - (string) -# 15339 "mlx/parser.ml" - ) = Obj.magic name in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_name_ in - let _endpos = _endpos_name_ in - let _v : ((Lexing.position * Lexing.position) * - [ `Prop of string * Parsetree.expression - | `Prop_opt of string * Parsetree.expression - | `Prop_opt_punned of string - | `Prop_punned of string ]) = let _loc_name_ = (_startpos_name_, _endpos_name_) in - -# 2525 "mlx/parser.mly" - ( _loc_name_, `Prop_punned name ) -# 15352 "mlx/parser.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.attributes) = +# 211 "" + ( [] ) +# 29219 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15361,35 +29228,26 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = name; - MenhirLib.EngineTypes.startp = _startpos_name_; - MenhirLib.EngineTypes.endp = _endpos_name_; + 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.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let name : ( -# 714 "mlx/parser.mly" - (string) -# 15379 "mlx/parser.ml" - ) = Obj.magic name in - let _1 : unit = Obj.magic _1 in + let xs : (Parsetree.attributes) = Obj.magic xs in + let x : (Parsetree.attribute) = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos_name_ in - let _v : ((Lexing.position * Lexing.position) * - [ `Prop of string * Parsetree.expression - | `Prop_opt of string * Parsetree.expression - | `Prop_opt_punned of string - | `Prop_punned of string ]) = let _loc_name_ = (_startpos_name_, _endpos_name_) in - -# 2526 "mlx/parser.mly" - ( _loc_name_, `Prop_opt_punned name ) -# 15393 "mlx/parser.ml" + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.attributes) = +# 213 "" + ( x :: xs ) +# 29251 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15400,44 +29258,14 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = expr; - MenhirLib.EngineTypes.startp = _startpos_expr_; - MenhirLib.EngineTypes.endp = _endpos_expr_; - 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 = name; - MenhirLib.EngineTypes.startp = _startpos_name_; - MenhirLib.EngineTypes.endp = _endpos_name_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let expr : (Parsetree.expression) = Obj.magic expr in - let _2 : unit = Obj.magic _2 in - let name : ( -# 714 "mlx/parser.mly" - (string) -# 15428 "mlx/parser.ml" - ) = Obj.magic name in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_name_ in - let _endpos = _endpos_expr_ in - let _v : ((Lexing.position * Lexing.position) * - [ `Prop of string * Parsetree.expression - | `Prop_opt of string * Parsetree.expression - | `Prop_opt_punned of string - | `Prop_punned of string ]) = let _loc_name_ = (_startpos_name_, _endpos_name_) in - -# 2527 "mlx/parser.mly" - ( _loc_name_, `Prop (name, expr) ) -# 15441 "mlx/parser.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.type_declaration list) = +# 211 "" + ( [] ) +# 29269 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15450,49 +29278,137 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = expr; - MenhirLib.EngineTypes.startp = _startpos_expr_; - MenhirLib.EngineTypes.endp = _endpos_expr_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = name; - MenhirLib.EngineTypes.startp = _startpos_name_; - MenhirLib.EngineTypes.endp = _endpos_name_; + MenhirLib.EngineTypes.semv = xs_inlined1; + MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_xs_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 = kind_priv_manifest; + MenhirLib.EngineTypes.startp = _startpos_kind_priv_manifest_; + MenhirLib.EngineTypes.endp = _endpos_kind_priv_manifest_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = params; + MenhirLib.EngineTypes.startp = _startpos_params_; + MenhirLib.EngineTypes.endp = _endpos_params_; + 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 expr : (Parsetree.expression) = Obj.magic expr in - let _3 : unit = Obj.magic _3 in - let name : ( -# 714 "mlx/parser.mly" + let xs : (Parsetree.type_declaration list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let xs_inlined1 : ((Parsetree.core_type * Parsetree.core_type * Warnings.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 : ( +# 786 "mlx/parser.mly" (string) -# 15482 "mlx/parser.ml" - ) = Obj.magic name in +# 29336 "mlx/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 let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_expr_ in - let _v : ((Lexing.position * Lexing.position) * - [ `Prop of string * Parsetree.expression - | `Prop_opt of string * Parsetree.expression - | `Prop_opt_punned of string - | `Prop_punned of string ]) = let _loc_name_ = (_startpos_name_, _endpos_name_) in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.type_declaration list) = let x = + let xs = xs_inlined1 in + let attrs2 = + let _1 = _1_inlined3 in + +# 4333 "mlx/parser.mly" + ( _1 ) +# 29351 "mlx/parser.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let cstrs = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 29360 "mlx/parser.ml" + in + +# 1062 "mlx/parser.mly" + ( xs ) +# 29365 "mlx/parser.ml" + + in + +# 3331 "mlx/parser.mly" + ( _1 ) +# 29371 "mlx/parser.ml" + + in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 29382 "mlx/parser.ml" + + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 29390 "mlx/parser.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3320 "mlx/parser.mly" + ( + let (kind, priv, manifest) = kind_priv_manifest in + let docs = symbol_docs _sloc in + let attrs = attrs1 @ attrs2 in + let loc = make_loc _sloc in + let text = symbol_text _symbolstartpos in + Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ~text + ) +# 29406 "mlx/parser.ml" + + in -# 2528 "mlx/parser.mly" - ( _loc_name_, `Prop_opt (name, expr) ) -# 15496 "mlx/parser.ml" +# 213 "" + ( x :: xs ) +# 29412 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15503,94 +29419,14 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 = _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 _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in - let _3 : unit = Obj.magic _3 in - let _1_inlined1 : ( -# 714 "mlx/parser.mly" - (string) -# 15544 "mlx/parser.ml" - ) = Obj.magic _1_inlined1 in - let _1 : (Asttypes.mutable_flag) = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined3_ in - let _v : (Parsetree.label_declaration) = let _5 = - let _1 = _1_inlined3 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 15555 "mlx/parser.ml" - - in - let _endpos__5_ = _endpos__1_inlined3_ in - let _4 = - let _1 = _1_inlined2 in - -# 3337 "mlx/parser.mly" - ( _1 ) -# 15564 "mlx/parser.ml" - - in - let _2 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _1 = -# 3562 "mlx/parser.mly" - ( _1 ) -# 15572 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 15580 "mlx/parser.ml" - - in - let _startpos__2_ = _startpos__1_inlined1_ in - let _endpos = _endpos__5_ in - let _symbolstartpos = if _startpos__1_ != _endpos__1_ then - _startpos__1_ - else - _startpos__2_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3210 "mlx/parser.mly" - ( let info = symbol_info _endpos in - Type.field _2 _4 ~mut:_1 ~attrs:_5 ~loc:(make_loc _sloc) ~info ) -# 15594 "mlx/parser.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.type_declaration list) = +# 211 "" + ( [] ) +# 29430 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15603,40 +29439,52 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined4; - MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = xs_inlined1; + MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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 = params; + MenhirLib.EngineTypes.startp = _startpos_params_; + MenhirLib.EngineTypes.endp = _endpos_params_; + 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; + }; + }; }; }; }; @@ -15644,78 +29492,99 @@ module Tables = struct }; }; } = _menhir_stack in + let xs : (Parsetree.type_declaration list) = Obj.magic xs in let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in - let _6 : unit = Obj.magic _6 in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in - let _3 : unit = Obj.magic _3 in - let _1_inlined1 : ( -# 714 "mlx/parser.mly" + let xs_inlined1 : ((Parsetree.core_type * Parsetree.core_type * Warnings.loc) list) = Obj.magic xs_inlined1 in + 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 : ( +# 786 "mlx/parser.mly" (string) -# 15656 "mlx/parser.ml" - ) = Obj.magic _1_inlined1 in - let _1 : (Asttypes.mutable_flag) = Obj.magic _1 in +# 29504 "mlx/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 + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined4_ in - let _v : (Parsetree.label_declaration) = let _7 = - let _1 = _1_inlined4 in - -# 3922 "mlx/parser.mly" + let _endpos = _endpos_xs_ in + let _v : (Parsetree.type_declaration list) = let x = + let xs = xs_inlined1 in + let attrs2 = + let _1 = _1_inlined4 in + +# 4333 "mlx/parser.mly" ( _1 ) -# 15667 "mlx/parser.ml" - - in - let _endpos__7_ = _endpos__1_inlined4_ in - let _5 = - let _1 = _1_inlined3 in - -# 3922 "mlx/parser.mly" +# 29519 "mlx/parser.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined4_ in + let cstrs = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 29528 "mlx/parser.ml" + in + +# 1062 "mlx/parser.mly" + ( xs ) +# 29533 "mlx/parser.ml" + + in + +# 3331 "mlx/parser.mly" ( _1 ) -# 15676 "mlx/parser.ml" - - in - let _endpos__5_ = _endpos__1_inlined3_ in - let _4 = - let _1 = _1_inlined2 in - -# 3337 "mlx/parser.mly" +# 29539 "mlx/parser.ml" + + in + let kind_priv_manifest = + let _1 = _1_inlined3 in + +# 3366 "mlx/parser.mly" + ( _2 ) +# 29547 "mlx/parser.ml" + + in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 29558 "mlx/parser.ml" + + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" ( _1 ) -# 15685 "mlx/parser.ml" - - in - let _2 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _1 = -# 3562 "mlx/parser.mly" - ( _1 ) -# 15693 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in +# 29566 "mlx/parser.ml" + + in + let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 15701 "mlx/parser.ml" +# 3320 "mlx/parser.mly" + ( + let (kind, priv, manifest) = kind_priv_manifest in + let docs = symbol_docs _sloc in + let attrs = attrs1 @ attrs2 in + let loc = make_loc _sloc in + let text = symbol_text _symbolstartpos in + Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ~text + ) +# 29582 "mlx/parser.ml" in - let _startpos__2_ = _startpos__1_inlined1_ in - let _endpos = _endpos__7_ in - let _symbolstartpos = if _startpos__1_ != _endpos__1_ then - _startpos__1_ - else - _startpos__2_ in - let _sloc = (_symbolstartpos, _endpos) in -# 3215 "mlx/parser.mly" - ( let info = - match rhs_info _endpos__5_ with - | Some _ as info_before_semi -> info_before_semi - | None -> symbol_info _endpos - in - Type.field _2 _4 ~mut:_1 ~attrs:(_5 @ _7) ~loc:(make_loc _sloc) ~info ) -# 15719 "mlx/parser.ml" +# 213 "" + ( x :: xs ) +# 29588 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15726,21 +29595,14 @@ module Tables = struct }); (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.label_declaration) = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Parsetree.label_declaration list) = -# 3204 "mlx/parser.mly" - ( [_1] ) -# 15744 "mlx/parser.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.attributes) = +# 211 "" + ( [] ) +# 29606 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15752,20 +29614,27 @@ module Tables = struct (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; + 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 = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : (Parsetree.label_declaration) = Obj.magic _1 in + let xs : (Parsetree.attributes) = Obj.magic xs in + let x : (Parsetree.attribute) = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Parsetree.label_declaration list) = -# 3205 "mlx/parser.mly" - ( [_1] ) -# 15769 "mlx/parser.ml" + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.attributes) = +# 213 "" + ( x :: xs ) +# 29638 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15776,28 +29645,14 @@ module Tables = struct }); (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.label_declaration list) = Obj.magic _2 in - let _1 : (Parsetree.label_declaration) = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.label_declaration list) = -# 3206 "mlx/parser.mly" - ( _1 :: _2 ) -# 15801 "mlx/parser.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.signature_item list list) = +# 211 "" + ( [] ) +# 29656 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15809,44 +29664,42 @@ module Tables = struct (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; + 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 _1 : ( -# 714 "mlx/parser.mly" - (string) -# 15822 "mlx/parser.ml" - ) = Obj.magic _1 in + let xs : (Parsetree.signature_item list 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__1_ in - let _v : (string * Parsetree.pattern) = let x = + let _endpos = _endpos_xs_ in + let _v : (Parsetree.signature_item list list) = let x = let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos__1_ in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 15835 "mlx/parser.ml" +# 988 "mlx/parser.mly" + ( text_sig _startpos ) +# 29691 "mlx/parser.ml" in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2256 "mlx/parser.mly" - ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) -# 15844 "mlx/parser.ml" +# 1758 "mlx/parser.mly" + ( _1 ) +# 29697 "mlx/parser.ml" in -# 2248 "mlx/parser.mly" - ( x ) -# 15850 "mlx/parser.ml" +# 213 "" + ( x :: xs ) +# 29703 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15859,63 +29712,41 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = cty; - MenhirLib.EngineTypes.startp = _startpos_cty_; - MenhirLib.EngineTypes.endp = _endpos_cty_; + 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; - }; + 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 cty : (Parsetree.core_type) = Obj.magic cty in - let _2 : unit = Obj.magic _2 in - let _1 : ( -# 714 "mlx/parser.mly" - (string) -# 15885 "mlx/parser.ml" - ) = Obj.magic _1 in + let xs : (Parsetree.signature_item list list) = Obj.magic xs in + let _1 : (Parsetree.signature_item) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_cty_ in - let _v : (string * Parsetree.pattern) = let x = + let _endpos = _endpos_xs_ in + let _v : (Parsetree.signature_item list list) = let x = let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos__1_ in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 15898 "mlx/parser.ml" +# 986 "mlx/parser.mly" + ( text_sig _startpos @ [_1] ) +# 29738 "mlx/parser.ml" in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2256 "mlx/parser.mly" - ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) -# 15907 "mlx/parser.ml" +# 1758 "mlx/parser.mly" + ( _1 ) +# 29744 "mlx/parser.ml" in - let _startpos_x_ = _startpos__1_ in - let _endpos = _endpos_cty_ in - let _symbolstartpos = _startpos_x_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2250 "mlx/parser.mly" - ( let lab, pat = x in - lab, - mkpat ~loc:_sloc (Ppat_constraint (pat, cty)) ) -# 15919 "mlx/parser.ml" +# 213 "" + ( x :: xs ) +# 29750 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15926,21 +29757,14 @@ module Tables = struct }); (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 : (Ppxlib.longident) = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Ppxlib.longident) = -# 3684 "mlx/parser.mly" - ( _1 ) -# 15944 "mlx/parser.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.structure_item list list) = +# 211 "" + ( [] ) +# 29768 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15952,20 +29776,61 @@ module Tables = struct (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; + 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 _1 : (Parsetree.expression) = Obj.magic _1 in + let xs : (Parsetree.structure_item list 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__1_ in - let _v : (Asttypes.arg_label * Parsetree.expression) = -# 2532 "mlx/parser.mly" - ( (Nolabel, _1) ) -# 15969 "mlx/parser.ml" + let _endpos = _endpos_xs_ in + let _v : (Parsetree.structure_item list list) = let x = + let _1 = + let ys = + let items = +# 1048 "mlx/parser.mly" + ( [] ) +# 29803 "mlx/parser.ml" + in + +# 1499 "mlx/parser.mly" + ( items ) +# 29808 "mlx/parser.ml" + + in + let xs = + let _startpos = _startpos__1_ in + +# 984 "mlx/parser.mly" + ( text_str _startpos ) +# 29816 "mlx/parser.ml" + + in + +# 267 "" + ( xs @ ys ) +# 29822 "mlx/parser.ml" + + in + +# 1515 "mlx/parser.mly" + ( _1 ) +# 29828 "mlx/parser.ml" + + in + +# 213 "" + ( x :: xs ) +# 29834 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15978,30 +29843,109 @@ module Tables = struct 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.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 = _; + 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 = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; + 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 : ( -# 700 "mlx/parser.mly" - (string) -# 15997 "mlx/parser.ml" - ) = Obj.magic _1 in + let xs : (Parsetree.structure_item list list) = Obj.magic xs in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let e : (Parsetree.expression) = Obj.magic e 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 : (Asttypes.arg_label * Parsetree.expression) = -# 2534 "mlx/parser.mly" - ( (Labelled _1, _2) ) -# 16005 "mlx/parser.ml" + let _endpos = _endpos_xs_ in + let _v : (Parsetree.structure_item list list) = let x = + let _1 = + let ys = + let (_endpos__1_, _1) = (_endpos__1_inlined1_, _1_inlined1) in + let items = + let x = + let _1 = + let _1 = + let attrs = +# 4333 "mlx/parser.mly" + ( _1 ) +# 29888 "mlx/parser.ml" + in + +# 1506 "mlx/parser.mly" + ( mkstrexp e attrs ) +# 29893 "mlx/parser.ml" + + in + let _startpos__1_ = _startpos_e_ in + let _startpos = _startpos__1_ in + +# 982 "mlx/parser.mly" + ( text_str _startpos @ [_1] ) +# 29901 "mlx/parser.ml" + + in + let _startpos__1_ = _startpos_e_ in + let _endpos = _endpos__1_ in + let _startpos = _startpos__1_ in + +# 1001 "mlx/parser.mly" + ( mark_rhs_docs _startpos _endpos; + _1 ) +# 29911 "mlx/parser.ml" + + in + +# 1050 "mlx/parser.mly" + ( x ) +# 29917 "mlx/parser.ml" + + in + +# 1499 "mlx/parser.mly" + ( items ) +# 29923 "mlx/parser.ml" + + in + let xs = + let _startpos = _startpos__1_ in + +# 984 "mlx/parser.mly" + ( text_str _startpos ) +# 29931 "mlx/parser.ml" + + in + +# 267 "" + ( xs @ ys ) +# 29937 "mlx/parser.ml" + + in + +# 1515 "mlx/parser.mly" + ( _1 ) +# 29943 "mlx/parser.ml" + + in + +# 213 "" + ( x :: xs ) +# 29949 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16014,9 +29958,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = label; - MenhirLib.EngineTypes.startp = _startpos_label_; - MenhirLib.EngineTypes.endp = _endpos_label_; + 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; @@ -16025,21 +29969,30 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let label : ( -# 714 "mlx/parser.mly" - (string) -# 16032 "mlx/parser.ml" - ) = Obj.magic label in - let _1 : unit = Obj.magic _1 in + let xs : (Parsetree.structure_item list list) = Obj.magic xs in + let _1 : (Parsetree.structure_item) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_label_ in - let _v : (Asttypes.arg_label * Parsetree.expression) = let _loc_label_ = (_startpos_label_, _endpos_label_) in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.structure_item list list) = let x = + let _1 = + let _startpos = _startpos__1_ in + +# 982 "mlx/parser.mly" + ( text_str _startpos @ [_1] ) +# 29984 "mlx/parser.ml" + + in + +# 1515 "mlx/parser.mly" + ( _1 ) +# 29990 "mlx/parser.ml" + + in -# 2536 "mlx/parser.mly" - ( let loc = _loc_label_ in - (Labelled label, mkexpvar ~loc label) ) -# 16043 "mlx/parser.ml" +# 213 "" + ( x :: xs ) +# 29996 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16050,56 +30003,14 @@ module Tables = struct }); (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 = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = label; - MenhirLib.EngineTypes.startp = _startpos_label_; - MenhirLib.EngineTypes.endp = _endpos_label_; - 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 ty : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic ty in - let label : ( -# 714 "mlx/parser.mly" - (string) -# 16090 "mlx/parser.ml" - ) = Obj.magic label in - let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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) = let _endpos = _endpos__5_ in - let _loc_label_ = (_startpos_label_, _endpos_label_) in - -# 2539 "mlx/parser.mly" - ( (Labelled label, mkexp_constraint ~loc:(_startpos__2_, _endpos) - (mkexpvar ~loc:_loc_label_ label) ty) ) -# 16103 "mlx/parser.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.class_type_field list list) = +# 211 "" + ( [] ) +# 30014 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16112,9 +30023,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = label; - MenhirLib.EngineTypes.startp = _startpos_label_; - MenhirLib.EngineTypes.endp = _endpos_label_; + 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; @@ -16123,21 +30034,41 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let label : ( -# 714 "mlx/parser.mly" - (string) -# 16130 "mlx/parser.ml" - ) = Obj.magic label in - let _1 : unit = Obj.magic _1 in + let xs : (Parsetree.class_type_field list list) = Obj.magic xs in + let _1 : (Parsetree.class_type_field) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_label_ in - let _v : (Asttypes.arg_label * Parsetree.expression) = let _loc_label_ = (_startpos_label_, _endpos_label_) in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.class_type_field list list) = let x = + let _startpos = _startpos__1_ in + +# 996 "mlx/parser.mly" + ( text_csig _startpos @ [_1] ) +# 30048 "mlx/parser.ml" + + in -# 2542 "mlx/parser.mly" - ( let loc = _loc_label_ in - (Optional label, mkexpvar ~loc label) ) -# 16141 "mlx/parser.ml" +# 213 "" + ( x :: xs ) +# 30054 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.class_field list list) = +# 211 "" + ( [] ) +# 30072 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16150,9 +30081,9 @@ module Tables = struct 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.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -16161,19 +30092,23 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : (Parsetree.expression) = Obj.magic _2 in - let _1 : ( -# 733 "mlx/parser.mly" - (string) -# 16169 "mlx/parser.ml" - ) = Obj.magic _1 in + let xs : (Parsetree.class_field list list) = Obj.magic xs in + let _1 : (Parsetree.class_field) = 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) = -# 2545 "mlx/parser.mly" - ( (Optional _1, _2) ) -# 16177 "mlx/parser.ml" + let _endpos = _endpos_xs_ in + let _v : (Parsetree.class_field list list) = let x = + let _startpos = _startpos__1_ in + +# 994 "mlx/parser.mly" + ( text_cstr _startpos @ [_1] ) +# 30106 "mlx/parser.ml" + + in + +# 213 "" + ( x :: xs ) +# 30112 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16184,57 +30119,14 @@ module Tables = struct }); (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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - 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 _1_inlined1 : (Parsetree.expression option) = Obj.magic _1_inlined1 in - let _3 : (string * Parsetree.pattern) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 _4 = - let _1 = _1_inlined1 in - -# 2244 "mlx/parser.mly" - ( _1 ) -# 16232 "mlx/parser.ml" - - in - -# 2218 "mlx/parser.mly" - ( (Optional (fst _3), _4, snd _3) ) -# 16238 "mlx/parser.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.structure_item list list) = +# 211 "" + ( [] ) +# 30130 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16247,9 +30139,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + 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; @@ -16258,40 +30150,23 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _1_inlined1 : ( -# 714 "mlx/parser.mly" - (string) -# 16265 "mlx/parser.ml" - ) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in + let xs : (Parsetree.structure_item list list) = Obj.magic xs in + let _1 : (Parsetree.structure_item) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined1_ in - let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _2 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 16280 "mlx/parser.ml" - - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.structure_item list list) = let x = + let _startpos = _startpos__1_ in -# 2256 "mlx/parser.mly" - ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) -# 16289 "mlx/parser.ml" +# 982 "mlx/parser.mly" + ( text_str _startpos @ [_1] ) +# 30164 "mlx/parser.ml" in -# 2220 "mlx/parser.mly" - ( (Optional (fst _2), None, snd _2) ) -# 16295 "mlx/parser.ml" +# 213 "" + ( x :: xs ) +# 30170 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16302,61 +30177,14 @@ module Tables = struct }); (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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - 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 _1_inlined1 : (Parsetree.expression option) = Obj.magic _1_inlined1 in - let _3 : (Parsetree.pattern) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : ( -# 733 "mlx/parser.mly" - (string) -# 16344 "mlx/parser.ml" - ) = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 _4 = - let _1 = _1_inlined1 in - -# 2244 "mlx/parser.mly" - ( _1 ) -# 16354 "mlx/parser.ml" - - in - -# 2222 "mlx/parser.mly" - ( (Optional _1, _4, _3) ) -# 16360 "mlx/parser.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.toplevel_phrase list list) = +# 211 "" + ( [] ) +# 30188 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16369,9 +30197,9 @@ module Tables = struct 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.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -16380,19 +30208,41 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : (Parsetree.pattern) = Obj.magic _2 in - let _1 : ( -# 733 "mlx/parser.mly" - (string) -# 16388 "mlx/parser.ml" - ) = Obj.magic _1 in + let xs : (Parsetree.toplevel_phrase list 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__2_ in - let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = -# 2224 "mlx/parser.mly" - ( (Optional _1, None, _2) ) -# 16396 "mlx/parser.ml" + let _endpos = _endpos_xs_ in + let _v : (Parsetree.toplevel_phrase list list) = let x = + let _1 = + let x = + let _1 = +# 1048 "mlx/parser.mly" + ( [] ) +# 30223 "mlx/parser.ml" + in + +# 1301 "mlx/parser.mly" + ( _1 ) +# 30228 "mlx/parser.ml" + + in + +# 183 "" + ( x ) +# 30234 "mlx/parser.ml" + + in + +# 1313 "mlx/parser.mly" + ( _1 ) +# 30240 "mlx/parser.ml" + + in + +# 213 "" + ( x :: xs ) +# 30246 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16405,19 +30255,19 @@ module Tables = struct 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.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + 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.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -16428,17 +30278,74 @@ module Tables = struct }; }; } = _menhir_stack in - let _4 : unit = Obj.magic _4 in - let _3 : (string * Parsetree.pattern) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in + let xs : (Parsetree.toplevel_phrase list list) = Obj.magic xs in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let e : (Parsetree.expression) = Obj.magic e 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 : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = -# 2226 "mlx/parser.mly" - ( (Labelled (fst _3), None, snd _3) ) -# 16442 "mlx/parser.ml" + let _endpos = _endpos_xs_ in + let _v : (Parsetree.toplevel_phrase list list) = let x = + let _1 = + let x = + let _1 = _1_inlined1 in + let _1 = + let x = + let _1 = + let _1 = + let attrs = +# 4333 "mlx/parser.mly" + ( _1 ) +# 30300 "mlx/parser.ml" + in + +# 1506 "mlx/parser.mly" + ( mkstrexp e attrs ) +# 30305 "mlx/parser.ml" + + in + +# 992 "mlx/parser.mly" + ( Ptop_def [_1] ) +# 30311 "mlx/parser.ml" + + in + let _startpos__1_ = _startpos_e_ in + let _startpos = _startpos__1_ in + +# 990 "mlx/parser.mly" + ( text_def _startpos @ [_1] ) +# 30319 "mlx/parser.ml" + + in + +# 1050 "mlx/parser.mly" + ( x ) +# 30325 "mlx/parser.ml" + + in + +# 1301 "mlx/parser.mly" + ( _1 ) +# 30331 "mlx/parser.ml" + + in + +# 183 "" + ( x ) +# 30337 "mlx/parser.ml" + + in + +# 1313 "mlx/parser.mly" + ( _1 ) +# 30343 "mlx/parser.ml" + + in + +# 213 "" + ( x :: xs ) +# 30349 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16451,9 +30358,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + 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; @@ -16462,40 +30369,35 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _1_inlined1 : ( -# 714 "mlx/parser.mly" - (string) -# 16469 "mlx/parser.ml" - ) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in + let xs : (Parsetree.toplevel_phrase list list) = Obj.magic xs in + let _1 : (Parsetree.structure_item) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined1_ in - let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _2 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.toplevel_phrase list list) = let x = let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _1 = +# 992 "mlx/parser.mly" + ( Ptop_def [_1] ) +# 30383 "mlx/parser.ml" + in + let _startpos = _startpos__1_ in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 16484 "mlx/parser.ml" +# 990 "mlx/parser.mly" + ( text_def _startpos @ [_1] ) +# 30389 "mlx/parser.ml" in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2256 "mlx/parser.mly" - ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) -# 16493 "mlx/parser.ml" +# 1313 "mlx/parser.mly" + ( _1 ) +# 30395 "mlx/parser.ml" in -# 2228 "mlx/parser.mly" - ( (Labelled (fst _2), None, snd _2) ) -# 16499 "mlx/parser.ml" +# 213 "" + ( x :: xs ) +# 30401 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16508,9 +30410,9 @@ module Tables = struct 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.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -16519,44 +30421,40 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : (Parsetree.pattern) = Obj.magic _2 in - let _1 : ( -# 700 "mlx/parser.mly" - (string) -# 16527 "mlx/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) = -# 2230 "mlx/parser.mly" - ( (Labelled _1, None, _2) ) -# 16535 "mlx/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.pattern) = Obj.magic _1 in + let xs : (Parsetree.toplevel_phrase list list) = Obj.magic xs in + let _1 : (Parsetree.toplevel_phrase) = 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.arg_label * Parsetree.expression option * Parsetree.pattern) = -# 2232 "mlx/parser.mly" - ( (Nolabel, None, _1) ) -# 16560 "mlx/parser.ml" + let _endpos = _endpos_xs_ in + let _v : (Parsetree.toplevel_phrase list list) = let x = + let _1 = + let _1 = + let _endpos = _endpos__1_ in + let _startpos = _startpos__1_ in + +# 1001 "mlx/parser.mly" + ( mark_rhs_docs _startpos _endpos; + _1 ) +# 30439 "mlx/parser.ml" + + in + let _startpos = _startpos__1_ in + +# 990 "mlx/parser.mly" + ( text_def _startpos @ [_1] ) +# 30446 "mlx/parser.ml" + + in + +# 1313 "mlx/parser.mly" + ( _1 ) +# 30452 "mlx/parser.ml" + + in + +# 213 "" + ( x :: xs ) +# 30458 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16568,51 +30466,72 @@ module Tables = struct (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; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = opat; + MenhirLib.EngineTypes.startp = _startpos_opat_; + MenhirLib.EngineTypes.endp = _endpos_opat_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = octy; + MenhirLib.EngineTypes.startp = _startpos_octy_; + MenhirLib.EngineTypes.endp = _endpos_octy_; + 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 _1 : (Parsetree.pattern * Parsetree.expression * - Parsetree.value_constraint option) = Obj.magic _1 in + let opat : (Parsetree.pattern option) = Obj.magic opat in + let octy : (Parsetree.core_type option) = Obj.magic octy in + let _1 : (Mlx_shim.Longident.t) = 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.pattern * Parsetree.expression * - Parsetree.value_constraint option * bool) = -# 2585 "mlx/parser.mly" - ( let p,e,c = _1 in (p,e,c,false) ) -# 16587 "mlx/parser.ml" + let _endpos = _endpos_opat_ in + let _v : ((Mlx_shim.Longident.t Ppxlib.loc * Parsetree.pattern) list * unit option) = let _2 = +# 124 "" + ( None ) +# 30497 "mlx/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 : (string) = 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.pattern * Parsetree.expression * - Parsetree.value_constraint option * bool) = let _endpos = _endpos__1_ in - let _startpos = _startpos__1_ in - let _loc = (_startpos, _endpos) in + let x = + let label = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 30507 "mlx/parser.ml" + + in + let _startpos_label_ = _startpos__1_ in + let _endpos = _endpos_opat_ in + let _symbolstartpos = _startpos_label_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3206 "mlx/parser.mly" + ( let constraint_loc, label, pat = + match opat with + | None -> + (* No pattern; this is a pun. Desugar it. + But that the pattern was there and the label reconstructed (which + piece of AST is marked as ghost is important for warning + emission). *) + _sloc, make_ghost label, pat_of_label label + | Some pat -> + (_startpos_octy_, _endpos), label, pat + in + label, mkpat_opt_constraint ~loc:constraint_loc pat octy + ) +# 30529 "mlx/parser.ml" + + in -# 2588 "mlx/parser.mly" - ( (mkpatvar ~loc:_loc _1, mkexpvar ~loc:_loc _1, None, true) ) -# 16616 "mlx/parser.ml" +# 1238 "mlx/parser.mly" + ( [x], None ) +# 30535 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16625,37 +30544,78 @@ module Tables = struct 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.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; 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 = opat; + MenhirLib.EngineTypes.startp = _startpos_opat_; + MenhirLib.EngineTypes.endp = _endpos_opat_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = octy; + MenhirLib.EngineTypes.startp = _startpos_octy_; + MenhirLib.EngineTypes.endp = _endpos_octy_; + 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 : (string) = Obj.magic _1 in + let x : unit = Obj.magic x in + let opat : (Parsetree.pattern option) = Obj.magic opat in + let octy : (Parsetree.core_type option) = Obj.magic octy in + let _1 : (Mlx_shim.Longident.t) = 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 * Parsetree.expression * - Parsetree.value_constraint option) = let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in + let _endpos = _endpos_x_ in + let _v : ((Mlx_shim.Longident.t Ppxlib.loc * Parsetree.pattern) list * unit option) = let _2 = +# 126 "" + ( Some x ) +# 30581 "mlx/parser.ml" + in + let x = + let label = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 30591 "mlx/parser.ml" + + in + let _startpos_label_ = _startpos__1_ in + let _endpos = _endpos_opat_ in + let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2552 "mlx/parser.mly" - ( mkpatvar ~loc:_sloc _1 ) -# 16653 "mlx/parser.ml" +# 3206 "mlx/parser.mly" + ( let constraint_loc, label, pat = + match opat with + | None -> + (* No pattern; this is a pun. Desugar it. + But that the pattern was there and the label reconstructed (which + piece of AST is marked as ghost is important for warning + emission). *) + _sloc, make_ghost label, pat_of_label label + | Some pat -> + (_startpos_octy_, _endpos), label, pat + in + label, mkpat_opt_constraint ~loc:constraint_loc pat octy + ) +# 30613 "mlx/parser.ml" in -# 2556 "mlx/parser.mly" - ( (_1, _2, None) ) -# 16659 "mlx/parser.ml" +# 1238 "mlx/parser.mly" + ( [x], None ) +# 30619 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16673,55 +30633,82 @@ module Tables = struct 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.semv = y; + MenhirLib.EngineTypes.startp = _startpos_y_; + MenhirLib.EngineTypes.endp = _endpos_y_; 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; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = opat; + MenhirLib.EngineTypes.startp = _startpos_opat_; + MenhirLib.EngineTypes.endp = _endpos_opat_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = octy; + MenhirLib.EngineTypes.startp = _startpos_octy_; + MenhirLib.EngineTypes.endp = _endpos_octy_; + 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.core_type option * Parsetree.core_type option) = Obj.magic _2 in - let _1 : (string) = Obj.magic _1 in + let _4 : (unit option) = Obj.magic _4 in + let y : unit = Obj.magic y in + let _2 : unit = Obj.magic _2 in + let opat : (Parsetree.pattern option) = Obj.magic opat in + let octy : (Parsetree.core_type option) = Obj.magic octy in + let _1 : (Mlx_shim.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.pattern * Parsetree.expression * - Parsetree.value_constraint option) = let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in + let _v : ((Mlx_shim.Longident.t Ppxlib.loc * Parsetree.pattern) list * unit option) = let x = + let label = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 30684 "mlx/parser.ml" + + in + let _startpos_label_ = _startpos__1_ in + let _endpos = _endpos_opat_ in + let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2552 "mlx/parser.mly" - ( mkpatvar ~loc:_sloc _1 ) -# 16710 "mlx/parser.ml" +# 3206 "mlx/parser.mly" + ( let constraint_loc, label, pat = + match opat with + | None -> + (* No pattern; this is a pun. Desugar it. + But that the pattern was there and the label reconstructed (which + piece of AST is marked as ghost is important for warning + emission). *) + _sloc, make_ghost label, pat_of_label label + | Some pat -> + (_startpos_octy_, _endpos), label, pat + in + label, mkpat_opt_constraint ~loc:constraint_loc pat octy + ) +# 30706 "mlx/parser.ml" in -# 2558 "mlx/parser.mly" - ( let v = _1 in (* PR#7344 *) - let t = - match _2 with - Some t, None -> - Pvc_constraint { locally_abstract_univars = []; typ=t } - | ground, Some coercion -> Pvc_coercion { ground; coercion} - | _ -> assert false - in - (v, _4, Some t) - ) -# 16725 "mlx/parser.ml" +# 1240 "mlx/parser.mly" + ( [x], Some y ) +# 30712 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16734,104 +30721,81 @@ 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 = tail; + MenhirLib.EngineTypes.startp = _startpos_tail_; + MenhirLib.EngineTypes.endp = _endpos_tail_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = opat; + MenhirLib.EngineTypes.startp = _startpos_opat_; + MenhirLib.EngineTypes.endp = _endpos_opat_; 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 = octy; + MenhirLib.EngineTypes.startp = _startpos_octy_; + MenhirLib.EngineTypes.endp = _endpos_octy_; 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; - }; - }; + 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 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.core_type) = Obj.magic _3 in - let _2_inlined1 : unit = Obj.magic _2_inlined1 in - let xs : (string Ppxlib.loc list) = Obj.magic xs in + let tail : ((Mlx_shim.Longident.t Ppxlib.loc * Parsetree.pattern) list * unit option) = Obj.magic tail in let _2 : unit = Obj.magic _2 in - let _1 : (string) = Obj.magic _1 in + let opat : (Parsetree.pattern option) = Obj.magic opat in + let octy : (Parsetree.core_type option) = Obj.magic octy in + let _1 : (Mlx_shim.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.pattern * Parsetree.expression * - Parsetree.value_constraint option) = let _3 = - let _2 = _2_inlined1 in - let _1 = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 16797 "mlx/parser.ml" - in - -# 1003 "mlx/parser.mly" - ( xs ) -# 16802 "mlx/parser.ml" - - in + let _endpos = _endpos_tail_ in + let _v : ((Mlx_shim.Longident.t Ppxlib.loc * Parsetree.pattern) list * unit option) = let x = + let label = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3319 "mlx/parser.mly" - ( _1 ) -# 16808 "mlx/parser.ml" +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 30770 "mlx/parser.ml" in - -# 3323 "mlx/parser.mly" - ( Ptyp_poly(_1, _3) ) -# 16814 "mlx/parser.ml" - - in - let _startpos__3_ = _startpos_xs_ in - let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in + let _startpos_label_ = _startpos__1_ in + let _endpos = _endpos_opat_ in + let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2552 "mlx/parser.mly" - ( mkpatvar ~loc:_sloc _1 ) -# 16825 "mlx/parser.ml" +# 3206 "mlx/parser.mly" + ( let constraint_loc, label, pat = + match opat with + | None -> + (* No pattern; this is a pun. Desugar it. + But that the pattern was there and the label reconstructed (which + piece of AST is marked as ghost is important for warning + emission). *) + _sloc, make_ghost label, pat_of_label label + | Some pat -> + (_startpos_octy_, _endpos), label, pat + in + label, mkpat_opt_constraint ~loc:constraint_loc pat octy + ) +# 30792 "mlx/parser.ml" in - let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2569 "mlx/parser.mly" - ( - let t = ghtyp ~loc:(_loc__3_) _3 in - (_1, _5, Some (Pvc_constraint { locally_abstract_univars = []; typ=t })) - ) -# 16835 "mlx/parser.ml" +# 1244 "mlx/parser.mly" + ( let xs, y = tail in + x :: xs, y ) +# 30799 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16844,87 +30808,86 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _8; - MenhirLib.EngineTypes.startp = _startpos__8_; - MenhirLib.EngineTypes.endp = _endpos__8_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + 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 : (Parsetree.expression) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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.case) = +# 2818 "mlx/parser.mly" + ( Exp.case _1 _3 ) +# 30838 "mlx/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 = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + 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 = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - 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; - }; - }; - }; + 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 _8 : (Parsetree.expression) = Obj.magic _8 in - let _7 : unit = Obj.magic _7 in - let _6 : (Parsetree.core_type) = Obj.magic _6 in - let _5 : unit = Obj.magic _5 in - let xs : (string Ppxlib.loc list) = Obj.magic xs in - let _3 : unit = Obj.magic _3 in + let _5 : (Parsetree.expression) = Obj.magic _5 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : (string) = Obj.magic _1 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__8_ in - let _v : (Parsetree.pattern * Parsetree.expression * - Parsetree.value_constraint option) = let _4 = -# 2549 "mlx/parser.mly" - ( xs ) -# 16910 "mlx/parser.ml" - in - let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2552 "mlx/parser.mly" - ( mkpatvar ~loc:_sloc _1 ) -# 16919 "mlx/parser.ml" - - in - -# 2574 "mlx/parser.mly" - ( let constraint' = - Pvc_constraint { locally_abstract_univars=_4; typ = _6} - in - (_1, _8, Some constraint') ) -# 16928 "mlx/parser.ml" + let _endpos = _endpos__5_ in + let _v : (Parsetree.case) = +# 2820 "mlx/parser.mly" + ( Exp.case _1 ~guard:_3 _5 ) +# 30891 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16954,17 +30917,145 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : (Parsetree.expression) = Obj.magic _3 in + let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : (Parsetree.pattern) = 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 * Parsetree.expression * - Parsetree.value_constraint option) = -# 2579 "mlx/parser.mly" - ( (_1, _3, None) ) -# 16968 "mlx/parser.ml" + let _v : (Parsetree.case) = let _loc__3_ = (_startpos__3_, _endpos__3_) in + +# 2822 "mlx/parser.mly" + ( Exp.case _1 (Exp.unreachable ~loc:(make_loc _loc__3_) ()) ) +# 30931 "mlx/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 = tail; + MenhirLib.EngineTypes.startp = _startpos_tail_; + MenhirLib.EngineTypes.endp = _endpos_tail_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 tail : (Parsetree.object_field list * Asttypes.closed_flag) = Obj.magic tail in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _5 : unit = Obj.magic _5 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 786 "mlx/parser.mly" + (string) +# 30994 "mlx/parser.ml" + ) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_tail_ in + let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = + let _6 = + let _1 = _1_inlined3 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 31005 "mlx/parser.ml" + + in + let _endpos__6_ = _endpos__1_inlined3_ in + let _4 = + let _1 = _1_inlined2 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 31014 "mlx/parser.ml" + + in + let _endpos__4_ = _endpos__1_inlined2_ in + let _3 = + let _1 = _1_inlined1 in + +# 3639 "mlx/parser.mly" + ( _1 ) +# 31023 "mlx/parser.ml" + + in + let _1 = + let _1 = +# 3967 "mlx/parser.mly" + ( _1 ) +# 31030 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 31038 "mlx/parser.ml" + + in + let _endpos = _endpos__6_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3952 "mlx/parser.mly" + ( let info = + match rhs_info _endpos__4_ with + | Some _ as info_before_semi -> info_before_semi + | None -> symbol_info _endpos + in + let attrs = add_info_attrs info (_4 @ _6) in + Of.tag ~loc:(make_loc _sloc) ~attrs _1 _3 ) +# 31053 "mlx/parser.ml" + + in + +# 3933 "mlx/parser.mly" + ( let (f, c) = tail in (head :: f, c) ) +# 31059 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16977,48 +31068,43 @@ 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 = tail; + MenhirLib.EngineTypes.startp = _startpos_tail_; + MenhirLib.EngineTypes.endp = _endpos_tail_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _5 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.core_type) = Obj.magic _3 in + let tail : (Parsetree.object_field list * Asttypes.closed_flag) = Obj.magic tail in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let ty : (Parsetree.core_type) = Obj.magic ty in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Parsetree.pattern * Parsetree.expression * - Parsetree.value_constraint option) = -# 2581 "mlx/parser.mly" - ( (_1, _5, Some(Pvc_constraint { locally_abstract_univars=[]; typ=_3 })) ) -# 17022 "mlx/parser.ml" + let _startpos = _startpos_ty_ in + let _endpos = _endpos_tail_ in + let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = + let _endpos = _endpos_ty_ in + let _symbolstartpos = _startpos_ty_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3963 "mlx/parser.mly" + ( Of.inherit_ ~loc:(make_loc _sloc) ty ) +# 31102 "mlx/parser.ml" + + in + +# 3933 "mlx/parser.mly" + ( let (f, c) = tail in (head :: f, c) ) +# 31108 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17031,19 +31117,19 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = body; - MenhirLib.EngineTypes.startp = _startpos_body_; - MenhirLib.EngineTypes.endp = _endpos_body_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = rec_flag; - MenhirLib.EngineTypes.startp = _startpos_rec_flag_; - MenhirLib.EngineTypes.endp = _endpos_rec_flag_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined1; @@ -17051,9 +31137,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; + 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; @@ -17066,50 +31152,80 @@ module Tables = struct }; }; } = _menhir_stack in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _5 : unit = Obj.magic _5 in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let body : (Parsetree.pattern * Parsetree.expression * - Parsetree.value_constraint option * bool) = Obj.magic body in - let rec_flag : (Asttypes.rec_flag) = Obj.magic rec_flag in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let ext : (string Ppxlib.loc option) = Obj.magic ext in - let _1 : unit = Obj.magic _1 in + let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 786 "mlx/parser.mly" + (string) +# 31164 "mlx/parser.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined2_ in - let _v : (let_bindings) = let _1 = - let attrs2 = + let _endpos = _endpos__1_inlined3_ in + let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = + let _6 = + let _1 = _1_inlined3 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 31175 "mlx/parser.ml" + + in + let _endpos__6_ = _endpos__1_inlined3_ in + let _4 = let _1 = _1_inlined2 in -# 3918 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 17086 "mlx/parser.ml" +# 31184 "mlx/parser.ml" in - let _endpos_attrs2_ = _endpos__1_inlined2_ in - let attrs1 = + let _endpos__4_ = _endpos__1_inlined2_ in + let _3 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 3639 "mlx/parser.mly" ( _1 ) -# 17095 "mlx/parser.ml" +# 31193 "mlx/parser.ml" in - let _endpos = _endpos_attrs2_ in + let _1 = + let _1 = +# 3967 "mlx/parser.mly" + ( _1 ) +# 31200 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 31208 "mlx/parser.ml" + + in + let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2608 "mlx/parser.mly" - ( - let attrs = attrs1 @ attrs2 in - mklbs ext rec_flag (mklb ~loc:_sloc true body attrs) - ) -# 17107 "mlx/parser.ml" +# 3952 "mlx/parser.mly" + ( let info = + match rhs_info _endpos__4_ with + | Some _ as info_before_semi -> info_before_semi + | None -> symbol_info _endpos + in + let attrs = add_info_attrs info (_4 @ _6) in + Of.tag ~loc:(make_loc _sloc) ~attrs _1 _3 ) +# 31223 "mlx/parser.ml" in -# 2598 "mlx/parser.mly" - ( _1 ) -# 17113 "mlx/parser.ml" +# 3936 "mlx/parser.mly" + ( [head], Closed ) +# 31229 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17127,21 +31243,31 @@ module Tables = struct 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.semv = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : (let_binding) = Obj.magic _2 in - let _1 : (let_bindings) = Obj.magic _1 in + let _2 : unit = Obj.magic _2 in + let ty : (Parsetree.core_type) = Obj.magic ty in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in + let _startpos = _startpos_ty_ in let _endpos = _endpos__2_ in - let _v : (let_bindings) = -# 2599 "mlx/parser.mly" - ( addlb _1 _2 ) -# 17145 "mlx/parser.ml" + let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = + let _endpos = _endpos_ty_ in + let _symbolstartpos = _startpos_ty_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3963 "mlx/parser.mly" + ( Of.inherit_ ~loc:(make_loc _sloc) ty ) +# 31265 "mlx/parser.ml" + + in + +# 3936 "mlx/parser.mly" + ( [head], Closed ) +# 31271 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17159,78 +31285,83 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = body; - MenhirLib.EngineTypes.startp = _startpos_body_; - MenhirLib.EngineTypes.endp = _endpos_body_; + 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 = rec_flag; - MenhirLib.EngineTypes.startp = _startpos_rec_flag_; - MenhirLib.EngineTypes.endp = _endpos_rec_flag_; + 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 _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let body : (Parsetree.pattern * Parsetree.expression * - Parsetree.value_constraint option * bool) = Obj.magic body in - let rec_flag : (Asttypes.rec_flag) = Obj.magic rec_flag in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in + let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 786 "mlx/parser.mly" + (string) +# 31313 "mlx/parser.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_inlined2_ in - let _v : (let_bindings) = let _1 = - let attrs2 = + let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = + let _4 = let _1 = _1_inlined2 in -# 3918 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 17202 "mlx/parser.ml" +# 31324 "mlx/parser.ml" in - let _endpos_attrs2_ = _endpos__1_inlined2_ in - let attrs1 = + let _endpos__4_ = _endpos__1_inlined2_ in + let _3 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 3639 "mlx/parser.mly" ( _1 ) -# 17211 "mlx/parser.ml" +# 31333 "mlx/parser.ml" in - let ext = -# 3929 "mlx/parser.mly" - ( None ) -# 17217 "mlx/parser.ml" - in - let _endpos = _endpos_attrs2_ in + let _1 = + let _1 = +# 3967 "mlx/parser.mly" + ( _1 ) +# 31340 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 31348 "mlx/parser.ml" + + in + let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2608 "mlx/parser.mly" - ( - let attrs = attrs1 @ attrs2 in - mklbs ext rec_flag (mklb ~loc:_sloc true body attrs) - ) -# 17228 "mlx/parser.ml" +# 3945 "mlx/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 ) +# 31359 "mlx/parser.ml" in -# 2598 "mlx/parser.mly" - ( _1 ) -# 17234 "mlx/parser.ml" +# 3939 "mlx/parser.mly" + ( [head], Closed ) +# 31365 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17242,136 +31373,30 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = body; - MenhirLib.EngineTypes.startp = _startpos_body_; - MenhirLib.EngineTypes.endp = _endpos_body_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = rec_flag; - MenhirLib.EngineTypes.startp = _startpos_rec_flag_; - MenhirLib.EngineTypes.endp = _endpos_rec_flag_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let body : (Parsetree.pattern * Parsetree.expression * - Parsetree.value_constraint option * bool) = Obj.magic body in - let rec_flag : (Asttypes.rec_flag) = Obj.magic rec_flag in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _2 : (string Ppxlib.loc) = Obj.magic _2 in - let _1_inlined1 : unit = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in + let ty : (Parsetree.core_type) = Obj.magic ty in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined3_ in - let _v : (let_bindings) = let _1 = - let attrs2 = - let _1 = _1_inlined3 in - -# 3918 "mlx/parser.mly" - ( _1 ) -# 17305 "mlx/parser.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let attrs1 = - let _1 = _1_inlined2 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 17314 "mlx/parser.ml" - - in - let ext = - let (_startpos__1_, _1) = (_startpos__1_inlined1_, _1_inlined1) in - let _endpos = _endpos__2_ in - let _startpos = _startpos__1_ in - let _loc = (_startpos, _endpos) in - -# 3931 "mlx/parser.mly" - ( not_expecting _loc "extension" ) -# 17325 "mlx/parser.ml" - - in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in + let _startpos = _startpos_ty_ in + let _endpos = _endpos_ty_ in + let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = + let _endpos = _endpos_ty_ in + let _symbolstartpos = _startpos_ty_ in let _sloc = (_symbolstartpos, _endpos) in -# 2608 "mlx/parser.mly" - ( - let attrs = attrs1 @ attrs2 in - mklbs ext rec_flag (mklb ~loc:_sloc true body attrs) - ) -# 17337 "mlx/parser.ml" +# 3963 "mlx/parser.mly" + ( Of.inherit_ ~loc:(make_loc _sloc) ty ) +# 31394 "mlx/parser.ml" in -# 2598 "mlx/parser.mly" - ( _1 ) -# 17343 "mlx/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 : (let_binding) = Obj.magic _2 in - let _1 : (let_bindings) = 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 : (let_bindings) = -# 2599 "mlx/parser.mly" - ( addlb _1 _2 ) -# 17375 "mlx/parser.ml" +# 3939 "mlx/parser.mly" + ( [head], Closed ) +# 31400 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17389,14 +31414,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Parsetree.pattern) = Obj.magic _1 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__1_ in - let _v : (Parsetree.pattern) = -# 2260 "mlx/parser.mly" - ( _1 ) -# 17400 "mlx/parser.ml" + let _v : (Parsetree.object_field list * Asttypes.closed_flag) = +# 3941 "mlx/parser.mly" + ( [], Open ) +# 31425 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17409,119 +31434,86 @@ 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = private_; + MenhirLib.EngineTypes.startp = _startpos_private__; + MenhirLib.EngineTypes.endp = _endpos_private__; + 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 : (Parsetree.core_type) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in + let _5 : unit = Obj.magic _5 in + let _1_inlined1 : ( +# 786 "mlx/parser.mly" + (string) +# 31472 "mlx/parser.ml" + ) = Obj.magic _1_inlined1 in + let private_ : (Asttypes.private_flag) = Obj.magic private_ 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 : (Parsetree.pattern) = let _1 = - let _1 = -# 2262 "mlx/parser.mly" - ( Ppat_constraint(_1, _3) ) -# 17440 "mlx/parser.ml" - in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos__1_inlined2_ in + let _v : ((string Ppxlib.loc * Asttypes.private_flag * Parsetree.class_field_kind) * + Parsetree.attributes) = let ty = + let _1 = _1_inlined2 in -# 936 "mlx/parser.mly" - ( mkpat ~loc:_sloc _1 ) -# 17449 "mlx/parser.ml" +# 3635 "mlx/parser.mly" + ( _1 ) +# 31485 "mlx/parser.ml" in - -# 2263 "mlx/parser.mly" - ( _1 ) -# 17455 "mlx/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 = exp; - MenhirLib.EngineTypes.startp = _startpos_exp_; - MenhirLib.EngineTypes.endp = _endpos_exp_; - 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 exp : (Parsetree.expression) = Obj.magic exp in - let _1 : (string) = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos_exp_ in - let _v : (Parsetree.pattern * Parsetree.expression) = let pat = + let label = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _1 = +# 3967 "mlx/parser.mly" + ( _1 ) +# 31493 "mlx/parser.ml" + in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2552 "mlx/parser.mly" - ( mkpatvar ~loc:_sloc _1 ) -# 17491 "mlx/parser.ml" +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 31501 "mlx/parser.ml" in - -# 2625 "mlx/parser.mly" - ( (pat, exp) ) -# 17497 "mlx/parser.ml" + let attrs = +# 4337 "mlx/parser.mly" + ( _1 ) +# 31507 "mlx/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 : (string) = 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.pattern * Parsetree.expression) = let _endpos = _endpos__1_ in - let _startpos = _startpos__1_ in - let _loc = (_startpos, _endpos) in - -# 2628 "mlx/parser.mly" - ( (mkpatvar ~loc:_loc _1, mkexpvar ~loc:_loc _1) ) -# 17525 "mlx/parser.ml" + let _1 = +# 4235 "mlx/parser.mly" + ( Fresh ) +# 31512 "mlx/parser.ml" + in + +# 2098 "mlx/parser.mly" + ( (label, private_, Cfk_virtual ty), attrs ) +# 31517 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17534,48 +31526,74 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = exp; - MenhirLib.EngineTypes.startp = _startpos_exp_; - MenhirLib.EngineTypes.endp = _endpos_exp_; + 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.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = typ; - MenhirLib.EngineTypes.startp = _startpos_typ_; - MenhirLib.EngineTypes.endp = _endpos_typ_; + 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 = pat; - MenhirLib.EngineTypes.startp = _startpos_pat_; - MenhirLib.EngineTypes.endp = _endpos_pat_; - 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 exp : (Parsetree.expression) = Obj.magic exp in - let _4 : unit = Obj.magic _4 in - let typ : (Parsetree.core_type) = Obj.magic typ in - let _2 : unit = Obj.magic _2 in - let pat : (Parsetree.pattern) = Obj.magic pat in + let _5 : (Parsetree.expression) = Obj.magic _5 in + let _1_inlined1 : ( +# 786 "mlx/parser.mly" + (string) +# 31557 "mlx/parser.ml" + ) = Obj.magic _1_inlined1 in + let _3 : (Asttypes.private_flag) = Obj.magic _3 in + let _1 : (Parsetree.attributes) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_pat_ in - let _endpos = _endpos_exp_ in - let _v : (Parsetree.pattern * Parsetree.expression) = -# 2630 "mlx/parser.mly" - ( let loc = (_startpos_pat_, _endpos_typ_) in - (ghpat ~loc (Ppat_constraint(pat, typ)), exp) ) -# 17579 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : ((string Ppxlib.loc * Asttypes.private_flag * Parsetree.class_field_kind) * + Parsetree.attributes) = let _4 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _1 = +# 3967 "mlx/parser.mly" + ( _1 ) +# 31570 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 31578 "mlx/parser.ml" + + in + let _2 = +# 4337 "mlx/parser.mly" + ( _1 ) +# 31584 "mlx/parser.ml" + in + let _1 = +# 4238 "mlx/parser.mly" + ( Fresh ) +# 31589 "mlx/parser.ml" + in + +# 2100 "mlx/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 ) +# 31597 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17588,59 +31606,84 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = exp; - MenhirLib.EngineTypes.startp = _startpos_exp_; - MenhirLib.EngineTypes.endp = _endpos_exp_; + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = pat; - MenhirLib.EngineTypes.startp = _startpos_pat_; - MenhirLib.EngineTypes.endp = _endpos_pat_; - 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 = _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 exp : (Parsetree.expression) = Obj.magic exp in - let _2 : unit = Obj.magic _2 in - let pat : (Parsetree.pattern) = Obj.magic pat in + let _5 : (Parsetree.expression) = Obj.magic _5 in + let _1_inlined2 : ( +# 786 "mlx/parser.mly" + (string) +# 31643 "mlx/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 + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_pat_ in - let _endpos = _endpos_exp_ in - let _v : (Parsetree.pattern * Parsetree.expression) = -# 2633 "mlx/parser.mly" - ( (pat, exp) ) -# 17618 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : ((string Ppxlib.loc * Asttypes.private_flag * Parsetree.class_field_kind) * + Parsetree.attributes) = let _4 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _1 = +# 3967 "mlx/parser.mly" + ( _1 ) +# 31657 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 31665 "mlx/parser.ml" + + in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 31673 "mlx/parser.ml" + + in + let _1 = +# 4239 "mlx/parser.mly" + ( Override ) +# 31679 "mlx/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 = body; - MenhirLib.EngineTypes.startp = _startpos_body_; - MenhirLib.EngineTypes.endp = _endpos_body_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let body : (Parsetree.pattern * Parsetree.expression) = Obj.magic body in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_body_ in - let _endpos = _endpos_body_ in - let _v : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = -# 2637 "mlx/parser.mly" - ( let let_pat, let_exp = body in - let_pat, let_exp, [] ) -# 17644 "mlx/parser.ml" + +# 2100 "mlx/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 ) +# 31687 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17653,72 +31696,104 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = body; - MenhirLib.EngineTypes.startp = _startpos_body_; - MenhirLib.EngineTypes.endp = _endpos_body_; + MenhirLib.EngineTypes.semv = _8; + MenhirLib.EngineTypes.startp = _startpos__8_; + MenhirLib.EngineTypes.endp = _endpos__8_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = bindings; - MenhirLib.EngineTypes.startp = _startpos_bindings_; - MenhirLib.EngineTypes.endp = _endpos_bindings_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + 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 = _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 body : (Parsetree.pattern * Parsetree.expression) = Obj.magic body in - let _1 : ( -# 696 "mlx/parser.mly" + let _8 : (Parsetree.expression) = Obj.magic _8 in + let _7 : unit = Obj.magic _7 in + let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in + let _5 : unit = Obj.magic _5 in + let _1_inlined1 : ( +# 786 "mlx/parser.mly" (string) -# 17678 "mlx/parser.ml" - ) = Obj.magic _1 in - let bindings : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = Obj.magic bindings in +# 31748 "mlx/parser.ml" + ) = Obj.magic _1_inlined1 in + let _3 : (Asttypes.private_flag) = Obj.magic _3 in + let _1 : (Parsetree.attributes) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_bindings_ in - let _endpos = _endpos_body_ in - let _v : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = let pbop_op = + let _startpos = _startpos__1_ in + let _endpos = _endpos__8_ in + let _v : ((string Ppxlib.loc * Asttypes.private_flag * Parsetree.class_field_kind) * + Parsetree.attributes) = let _6 = + let _1 = _1_inlined2 in + +# 3635 "mlx/parser.mly" + ( _1 ) +# 31761 "mlx/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 = +# 3967 "mlx/parser.mly" + ( _1 ) +# 31770 "mlx/parser.ml" + in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 17691 "mlx/parser.ml" +# 31778 "mlx/parser.ml" in - let _endpos = _endpos_body_ in - let _symbolstartpos = _startpos_bindings_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2640 "mlx/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 ) -# 17704 "mlx/parser.ml" + let _2 = +# 4337 "mlx/parser.mly" + ( _1 ) +# 31784 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.class_expr Parsetree.class_infos list) = -# 211 "" - ( [] ) -# 17722 "mlx/parser.ml" + let _1 = +# 4238 "mlx/parser.mly" + ( Fresh ) +# 31789 "mlx/parser.ml" + in + +# 2106 "mlx/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 ) +# 31797 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17731,34 +31806,34 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _8; + MenhirLib.EngineTypes.startp = _startpos__8_; + MenhirLib.EngineTypes.endp = _endpos__8_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = body; - MenhirLib.EngineTypes.startp = _startpos_body_; - MenhirLib.EngineTypes.endp = _endpos_body_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = params; - MenhirLib.EngineTypes.startp = _startpos_params_; - MenhirLib.EngineTypes.endp = _endpos_params_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = virt; - MenhirLib.EngineTypes.startp = _startpos_virt_; - MenhirLib.EngineTypes.endp = _endpos_virt_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined1; @@ -17778,87 +31853,216 @@ module Tables = struct }; }; } = _menhir_stack in - let xs : (Parsetree.class_expr Parsetree.class_infos list) = Obj.magic xs in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let body : (Parsetree.class_expr) = Obj.magic body in + let _8 : (Parsetree.expression) = Obj.magic _8 in + let _7 : unit = Obj.magic _7 in + let _1_inlined3 : (Parsetree.core_type) = Obj.magic _1_inlined3 in + let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 714 "mlx/parser.mly" +# 786 "mlx/parser.mly" (string) -# 17788 "mlx/parser.ml" +# 31864 "mlx/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 + let _3 : (Asttypes.private_flag) = Obj.magic _3 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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 : (Parsetree.class_expr Parsetree.class_infos list) = let x = - let attrs2 = - let _1 = _1_inlined3 in - -# 3918 "mlx/parser.mly" + let _endpos = _endpos__8_ in + let _v : ((string Ppxlib.loc * Asttypes.private_flag * Parsetree.class_field_kind) * + Parsetree.attributes) = let _6 = + let _1 = _1_inlined3 in + +# 3635 "mlx/parser.mly" ( _1 ) -# 17803 "mlx/parser.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" +# 31878 "mlx/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 = +# 3967 "mlx/parser.mly" + ( _1 ) +# 31887 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 17815 "mlx/parser.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" +# 31895 "mlx/parser.ml" + + in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" ( _1 ) -# 17823 "mlx/parser.ml" - - in - let _endpos = _endpos_attrs2_ in +# 31903 "mlx/parser.ml" + + in + let _1 = +# 4239 "mlx/parser.mly" + ( Override ) +# 31909 "mlx/parser.ml" + in + +# 2106 "mlx/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 ) +# 31917 "mlx/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 = _11; + MenhirLib.EngineTypes.startp = _startpos__11_; + MenhirLib.EngineTypes.endp = _endpos__11_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _9; + MenhirLib.EngineTypes.startp = _startpos__9_; + MenhirLib.EngineTypes.endp = _endpos__9_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _8; + MenhirLib.EngineTypes.startp = _startpos__8_; + MenhirLib.EngineTypes.endp = _endpos__8_; + 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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + 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 = _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 _11 : (Parsetree.expression) = Obj.magic _11 in + let _10 : unit = Obj.magic _10 in + let _9 : (Parsetree.core_type) = Obj.magic _9 in + let _8 : unit = Obj.magic _8 in + let xs : (string Ppxlib.loc list) = Obj.magic xs in + let _6 : unit = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let _1_inlined1 : ( +# 786 "mlx/parser.mly" + (string) +# 31999 "mlx/parser.ml" + ) = Obj.magic _1_inlined1 in + let _3 : (Asttypes.private_flag) = Obj.magic _3 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__11_ in + let _v : ((string Ppxlib.loc * Asttypes.private_flag * Parsetree.class_field_kind) * + Parsetree.attributes) = let _7 = +# 2695 "mlx/parser.mly" + ( xs ) +# 32010 "mlx/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 = +# 3967 "mlx/parser.mly" + ( _1 ) +# 32018 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1864 "mlx/parser.mly" - ( - let attrs = attrs1 @ attrs2 in - let loc = make_loc _sloc in - let docs = symbol_docs _sloc in - let text = symbol_text _symbolstartpos in - Ci.mk id body ~virt ~params ~attrs ~loc ~text ~docs - ) -# 17838 "mlx/parser.ml" +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 32026 "mlx/parser.ml" in + let _startpos__4_ = _startpos__1_inlined1_ in + let _2 = +# 4337 "mlx/parser.mly" + ( _1 ) +# 32033 "mlx/parser.ml" + in + let (_endpos__2_, _startpos__2_) = (_endpos__1_, _startpos__1_) in + let _1 = +# 4238 "mlx/parser.mly" + ( Fresh ) +# 32039 "mlx/parser.ml" + in + let (_endpos__1_, _startpos__1_) = (_endpos__0_, _endpos__0_) in + let _endpos = _endpos__11_ in + let _symbolstartpos = if _startpos__1_ != _endpos__1_ then + _startpos__1_ + else + if _startpos__2_ != _endpos__2_ then + _startpos__2_ + else + if _startpos__3_ != _endpos__3_ then + _startpos__3_ + else + _startpos__4_ in + let _sloc = (_symbolstartpos, _endpos) in -# 213 "" - ( x :: xs ) -# 17844 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.class_type Parsetree.class_infos list) = -# 211 "" - ( [] ) -# 17862 "mlx/parser.ml" +# 2112 "mlx/parser.mly" + ( let poly_exp_loc = (_startpos__7_, _endpos__11_) in + let poly_exp = + let exp, poly = + (* it seems odd to use the global ~loc here while poly_exp_loc + is tighter, but this is what ocamlyacc does; + TODO improve parser.mly *) + wrap_type_annotation ~loc:_sloc _7 _9 _11 in + ghexp ~loc:poly_exp_loc (Pexp_poly(exp, Some poly)) in + (_4, _3, + Cfk_concrete (_1, poly_exp)), _2 ) +# 32066 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17871,50 +32075,62 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _11; + MenhirLib.EngineTypes.startp = _startpos__11_; + MenhirLib.EngineTypes.endp = _endpos__11_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = cty; - MenhirLib.EngineTypes.startp = _startpos_cty_; - MenhirLib.EngineTypes.endp = _endpos_cty_; + MenhirLib.EngineTypes.semv = _9; + MenhirLib.EngineTypes.startp = _startpos__9_; + MenhirLib.EngineTypes.endp = _endpos__9_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = _8; + MenhirLib.EngineTypes.startp = _startpos__8_; + MenhirLib.EngineTypes.endp = _endpos__8_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = params; - MenhirLib.EngineTypes.startp = _startpos_params_; - MenhirLib.EngineTypes.endp = _endpos_params_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = virt; - MenhirLib.EngineTypes.startp = _startpos_virt_; - MenhirLib.EngineTypes.endp = _endpos_virt_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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 = _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; + }; + }; }; }; }; @@ -17924,70 +32140,87 @@ module Tables = struct }; }; } = _menhir_stack in - let xs : (Parsetree.class_type Parsetree.class_infos list) = Obj.magic xs in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let cty : (Parsetree.class_type) = Obj.magic cty in + let _11 : (Parsetree.expression) = Obj.magic _11 in + let _10 : unit = Obj.magic _10 in + let _9 : (Parsetree.core_type) = Obj.magic _9 in + let _8 : unit = Obj.magic _8 in + let xs : (string Ppxlib.loc list) = Obj.magic xs in let _6 : unit = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 714 "mlx/parser.mly" +# 786 "mlx/parser.mly" (string) -# 17935 "mlx/parser.ml" +# 32154 "mlx/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 + let _3 : (Asttypes.private_flag) = Obj.magic _3 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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 : (Parsetree.class_type Parsetree.class_infos list) = let x = - let attrs2 = - let _1 = _1_inlined3 in - -# 3918 "mlx/parser.mly" - ( _1 ) -# 17950 "mlx/parser.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 17962 "mlx/parser.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 17970 "mlx/parser.ml" - - in - let _endpos = _endpos_attrs2_ in + let _endpos = _endpos__11_ in + let _v : ((string Ppxlib.loc * Asttypes.private_flag * Parsetree.class_field_kind) * + Parsetree.attributes) = let _7 = +# 2695 "mlx/parser.mly" + ( xs ) +# 32166 "mlx/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 = +# 3967 "mlx/parser.mly" + ( _1 ) +# 32174 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2155 "mlx/parser.mly" - ( - let attrs = attrs1 @ attrs2 in - let loc = make_loc _sloc in - let docs = symbol_docs _sloc in - let text = symbol_text _symbolstartpos in - Ci.mk id cty ~virt ~params ~attrs ~loc ~text ~docs - ) -# 17985 "mlx/parser.ml" +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 32182 "mlx/parser.ml" + + in + let _startpos__4_ = _startpos__1_inlined2_ in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 32191 "mlx/parser.ml" in + let (_endpos__2_, _startpos__2_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in + let _1 = +# 4239 "mlx/parser.mly" + ( Override ) +# 32198 "mlx/parser.ml" + in + let _endpos = _endpos__11_ in + let _symbolstartpos = if _startpos__1_ != _endpos__1_ then + _startpos__1_ + else + if _startpos__2_ != _endpos__2_ then + _startpos__2_ + else + if _startpos__3_ != _endpos__3_ then + _startpos__3_ + else + _startpos__4_ in + let _sloc = (_symbolstartpos, _endpos) in -# 213 "" - ( x :: xs ) -# 17991 "mlx/parser.ml" +# 2112 "mlx/parser.mly" + ( let poly_exp_loc = (_startpos__7_, _endpos__11_) in + let poly_exp = + let exp, poly = + (* it seems odd to use the global ~loc here while poly_exp_loc + is tighter, but this is what ocamlyacc does; + TODO improve parser.mly *) + wrap_type_annotation ~loc:_sloc _7 _9 _11 in + ghexp ~loc:poly_exp_loc (Pexp_poly(exp, Some poly)) in + (_4, _3, + Cfk_concrete (_1, poly_exp)), _2 ) +# 32224 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17998,14 +32231,25 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 : ( +# 786 "mlx/parser.mly" + (string) +# 32245 "mlx/parser.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.class_type Parsetree.class_infos list) = -# 211 "" - ( [] ) -# 18009 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Mlx_shim.Longident.t) = +# 4071 "mlx/parser.mly" + ( Lident _1 ) +# 32253 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18018,123 +32262,39 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = csig; - MenhirLib.EngineTypes.startp = _startpos_csig_; - MenhirLib.EngineTypes.endp = _endpos_csig_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = params; - MenhirLib.EngineTypes.startp = _startpos_params_; - MenhirLib.EngineTypes.endp = _endpos_params_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = virt; - MenhirLib.EngineTypes.startp = _startpos_virt_; - MenhirLib.EngineTypes.endp = _endpos_virt_; - 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 xs : (Parsetree.class_type Parsetree.class_infos list) = Obj.magic xs in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let csig : (Parsetree.class_type) = Obj.magic csig in - let _6 : unit = Obj.magic _6 in - let _1_inlined2 : ( -# 714 "mlx/parser.mly" + let _3 : ( +# 786 "mlx/parser.mly" (string) -# 18082 "mlx/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 - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in +# 32286 "mlx/parser.ml" + ) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Mlx_shim.Longident.t) = 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 : (Parsetree.class_type Parsetree.class_infos list) = let x = - let attrs2 = - let _1 = _1_inlined3 in - -# 3918 "mlx/parser.mly" - ( _1 ) -# 18097 "mlx/parser.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 18109 "mlx/parser.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 18117 "mlx/parser.ml" - - in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2194 "mlx/parser.mly" - ( - let attrs = attrs1 @ attrs2 in - let loc = make_loc _sloc in - let docs = symbol_docs _sloc in - let text = symbol_text _symbolstartpos in - Ci.mk id csig ~virt ~params ~attrs ~loc ~text ~docs - ) -# 18132 "mlx/parser.ml" - - in + let _endpos = _endpos__3_ in + let _v : (Mlx_shim.Longident.t) = let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 213 "" - ( x :: xs ) -# 18138 "mlx/parser.ml" +# 4072 "mlx/parser.mly" + ( ldot _1 _loc__1_ _3 _loc__3_ ) +# 32298 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18145,14 +32305,25 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 : ( +# 839 "mlx/parser.mly" + (string) +# 32319 "mlx/parser.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.module_binding list) = -# 211 "" - ( [] ) -# 18156 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Mlx_shim.Longident.t) = +# 4071 "mlx/parser.mly" + ( Lident _1 ) +# 32327 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18165,98 +32336,39 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = body; - MenhirLib.EngineTypes.startp = _startpos_body_; - MenhirLib.EngineTypes.endp = _endpos_body_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 xs : (Parsetree.module_binding list) = Obj.magic xs in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let body : (Parsetree.module_expr) = Obj.magic body in - let _1_inlined2 : (string option) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in + let _3 : ( +# 839 "mlx/parser.mly" + (string) +# 32360 "mlx/parser.ml" + ) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Mlx_shim.Longident.t) = 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 : (Parsetree.module_binding list) = let x = - let attrs2 = - let _1 = _1_inlined3 in - -# 3918 "mlx/parser.mly" - ( _1 ) -# 18219 "mlx/parser.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let name = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 18231 "mlx/parser.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 18239 "mlx/parser.ml" - - in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1520 "mlx/parser.mly" - ( - let loc = make_loc _sloc in - let attrs = attrs1 @ attrs2 in - let docs = symbol_docs _sloc in - let text = symbol_text _symbolstartpos in - Mb.mk name body ~attrs ~loc ~text ~docs - ) -# 18254 "mlx/parser.ml" - - in + let _endpos = _endpos__3_ in + let _v : (Mlx_shim.Longident.t) = let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 213 "" - ( x :: xs ) -# 18260 "mlx/parser.ml" +# 4072 "mlx/parser.mly" + ( ldot _1 _loc__1_ _3 _loc__3_ ) +# 32372 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18267,125 +32379,77 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 : (string) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.module_declaration list) = -# 211 "" - ( [] ) -# 18278 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Mlx_shim.Longident.t) = let _1 = +# 4129 "mlx/parser.mly" + ( _1 ) +# 32397 "mlx/parser.ml" + in + +# 4071 "mlx/parser.mly" + ( Lident _1 ) +# 32402 "mlx/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 = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = mty; - MenhirLib.EngineTypes.startp = _startpos_mty_; - MenhirLib.EngineTypes.endp = _endpos_mty_; - 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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.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 = _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 xs : (Parsetree.module_declaration list) = Obj.magic xs in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let mty : (Parsetree.module_type) = Obj.magic mty in - let _4 : unit = Obj.magic _4 in - let _1_inlined2 : (string option) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let _3 : unit = Obj.magic _3 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_xs_ in - let _v : (Parsetree.module_declaration list) = let x = - let attrs2 = - let _1 = _1_inlined3 in - -# 3918 "mlx/parser.mly" - ( _1 ) -# 18348 "mlx/parser.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let name = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 18360 "mlx/parser.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 18368 "mlx/parser.ml" - - in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos__3_ in + let _v : (Mlx_shim.Longident.t) = let _1 = + let _1 = +# 4051 "mlx/parser.mly" + ( "::" ) +# 32442 "mlx/parser.ml" + in -# 1805 "mlx/parser.mly" - ( - let attrs = attrs1 @ attrs2 in - let docs = symbol_docs _sloc in - let loc = make_loc _sloc in - let text = symbol_text _symbolstartpos in - Md.mk name mty ~attrs ~loc ~text ~docs - ) -# 18383 "mlx/parser.ml" +# 4129 "mlx/parser.mly" + ( _1 ) +# 32447 "mlx/parser.ml" in -# 213 "" - ( x :: xs ) -# 18389 "mlx/parser.ml" +# 4071 "mlx/parser.mly" + ( Lident _1 ) +# 32453 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18396,14 +32460,26 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 : (string) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.attributes) = -# 211 "" - ( [] ) -# 18407 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Mlx_shim.Longident.t) = let _1 = +# 4129 "mlx/parser.mly" + ( _1 ) +# 32478 "mlx/parser.ml" + in + +# 4071 "mlx/parser.mly" + ( Lident _1 ) +# 32483 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18416,26 +32492,44 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + 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 = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - 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 xs : (Parsetree.attributes) = Obj.magic xs in - let x : (Parsetree.attribute) = Obj.magic x in + let _1_inlined1 : (string) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : (Parsetree.attributes) = -# 213 "" - ( x :: xs ) -# 18439 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Mlx_shim.Longident.t) = let _3 = + let _1 = _1_inlined1 in + +# 4129 "mlx/parser.mly" + ( _1 ) +# 32524 "mlx/parser.ml" + + in + let (_endpos__3_, _startpos__3_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in + let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 4072 "mlx/parser.mly" + ( ldot _1 _loc__1_ _3 _loc__3_ ) +# 32533 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18446,14 +32540,65 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 = _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 _3 : unit = Obj.magic _3 in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.type_declaration list) = -# 211 "" - ( [] ) -# 18457 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Mlx_shim.Longident.t) = let _3 = + let (_2, _1) = (_2_inlined1, _1_inlined1) in + let _1 = +# 4051 "mlx/parser.mly" + ( "::" ) +# 32588 "mlx/parser.ml" + in + +# 4129 "mlx/parser.mly" + ( _1 ) +# 32593 "mlx/parser.ml" + + in + let _startpos__3_ = _startpos__1_inlined1_ in + let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 4072 "mlx/parser.mly" + ( ldot _1 _loc__1_ _3 _loc__3_ ) +# 32602 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18466,137 +32611,44 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + 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 = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs_inlined1; - MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; - MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = kind_priv_manifest; - MenhirLib.EngineTypes.startp = _startpos_kind_priv_manifest_; - MenhirLib.EngineTypes.endp = _endpos_kind_priv_manifest_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = params; - MenhirLib.EngineTypes.startp = _startpos_params_; - MenhirLib.EngineTypes.endp = _endpos_params_; - 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 xs : (Parsetree.type_declaration list) = Obj.magic xs in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let xs_inlined1 : ((Parsetree.core_type * Parsetree.core_type * Warnings.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 : ( -# 714 "mlx/parser.mly" - (string) -# 18524 "mlx/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 - let _1 : unit = Obj.magic _1 in + let _1_inlined1 : (string) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Mlx_shim.Longident.t) = 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 : (Parsetree.type_declaration list) = let x = - let xs = xs_inlined1 in - let attrs2 = - let _1 = _1_inlined3 in - -# 3918 "mlx/parser.mly" - ( _1 ) -# 18539 "mlx/parser.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let cstrs = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 18548 "mlx/parser.ml" - in - -# 985 "mlx/parser.mly" - ( xs ) -# 18553 "mlx/parser.ml" - - in - -# 3036 "mlx/parser.mly" - ( _1 ) -# 18559 "mlx/parser.ml" - - in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 18570 "mlx/parser.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 18578 "mlx/parser.ml" - - in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos__1_inlined1_ in + let _v : (Mlx_shim.Longident.t) = let _3 = + let _1 = _1_inlined1 in -# 3025 "mlx/parser.mly" - ( - let (kind, priv, manifest) = kind_priv_manifest in - let docs = symbol_docs _sloc in - let attrs = attrs1 @ attrs2 in - let loc = make_loc _sloc in - let text = symbol_text _symbolstartpos in - Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ~text - ) -# 18594 "mlx/parser.ml" +# 4129 "mlx/parser.mly" + ( _1 ) +# 32643 "mlx/parser.ml" in + let (_endpos__3_, _startpos__3_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in + let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 213 "" - ( x :: xs ) -# 18600 "mlx/parser.ml" +# 4072 "mlx/parser.mly" + ( ldot _1 _loc__1_ _3 _loc__3_ ) +# 32652 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18607,14 +32659,21 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 : (string) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.type_declaration list) = -# 211 "" - ( [] ) -# 18618 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Mlx_shim.Longident.t) = +# 4071 "mlx/parser.mly" + ( Lident _1 ) +# 32677 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18627,152 +32686,35 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined4; - MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs_inlined1; - MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; - MenhirLib.EngineTypes.endp = _endpos_xs_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 = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = params; - MenhirLib.EngineTypes.startp = _startpos_params_; - MenhirLib.EngineTypes.endp = _endpos_params_; - 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 xs : (Parsetree.type_declaration list) = Obj.magic xs in - let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in - let xs_inlined1 : ((Parsetree.core_type * Parsetree.core_type * Warnings.loc) list) = Obj.magic xs_inlined1 in - 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 : ( -# 714 "mlx/parser.mly" - (string) -# 18692 "mlx/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 - let _1 : unit = Obj.magic _1 in + let _3 : (string) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Mlx_shim.Longident.t) = 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 : (Parsetree.type_declaration list) = let x = - let xs = xs_inlined1 in - let attrs2 = - let _1 = _1_inlined4 in - -# 3918 "mlx/parser.mly" - ( _1 ) -# 18707 "mlx/parser.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined4_ in - let cstrs = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 18716 "mlx/parser.ml" - in - -# 985 "mlx/parser.mly" - ( xs ) -# 18721 "mlx/parser.ml" - - in - -# 3036 "mlx/parser.mly" - ( _1 ) -# 18727 "mlx/parser.ml" - - in - let kind_priv_manifest = - let _1 = _1_inlined3 in - -# 3071 "mlx/parser.mly" - ( _2 ) -# 18735 "mlx/parser.ml" - - in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 18746 "mlx/parser.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 18754 "mlx/parser.ml" - - in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3025 "mlx/parser.mly" - ( - let (kind, priv, manifest) = kind_priv_manifest in - let docs = symbol_docs _sloc in - let attrs = attrs1 @ attrs2 in - let loc = make_loc _sloc in - let text = symbol_text _symbolstartpos in - Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ~text - ) -# 18770 "mlx/parser.ml" - - in + let _endpos = _endpos__3_ in + let _v : (Mlx_shim.Longident.t) = let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 213 "" - ( x :: xs ) -# 18776 "mlx/parser.ml" +# 4072 "mlx/parser.mly" + ( ldot _1 _loc__1_ _3 _loc__3_ ) +# 32718 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18783,14 +32725,25 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 : ( +# 786 "mlx/parser.mly" + (string) +# 32739 "mlx/parser.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.attributes) = -# 211 "" - ( [] ) -# 18794 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Mlx_shim.Longident.t) = +# 4071 "mlx/parser.mly" + ( Lident _1 ) +# 32747 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18803,26 +32756,39 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - 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 xs : (Parsetree.attributes) = Obj.magic xs in - let x : (Parsetree.attribute) = Obj.magic x in + let _3 : ( +# 786 "mlx/parser.mly" + (string) +# 32780 "mlx/parser.ml" + ) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : (Parsetree.attributes) = -# 213 "" - ( x :: xs ) -# 18826 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Mlx_shim.Longident.t) = let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 4072 "mlx/parser.mly" + ( ldot _1 _loc__1_ _3 _loc__3_ ) +# 32792 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18833,14 +32799,25 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 : ( +# 839 "mlx/parser.mly" + (string) +# 32813 "mlx/parser.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.signature_item list list) = -# 211 "" - ( [] ) -# 18844 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Mlx_shim.Longident.t) = +# 4071 "mlx/parser.mly" + ( Lident _1 ) +# 32821 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18853,41 +32830,39 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 xs : (Parsetree.signature_item list list) = Obj.magic xs in - let _1 : unit = Obj.magic _1 in + let _3 : ( +# 839 "mlx/parser.mly" + (string) +# 32854 "mlx/parser.ml" + ) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Mlx_shim.Longident.t) = 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 : (Parsetree.signature_item list list) = let x = - let _1 = - let _startpos = _startpos__1_ in - -# 911 "mlx/parser.mly" - ( text_sig _startpos ) -# 18879 "mlx/parser.ml" - - in - -# 1662 "mlx/parser.mly" - ( _1 ) -# 18885 "mlx/parser.ml" - - in + let _endpos = _endpos__3_ in + let _v : (Mlx_shim.Longident.t) = let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 213 "" - ( x :: xs ) -# 18891 "mlx/parser.ml" +# 4072 "mlx/parser.mly" + ( ldot _1 _loc__1_ _3 _loc__3_ ) +# 32866 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18899,42 +32874,20 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - 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 xs : (Parsetree.signature_item list list) = Obj.magic xs in - let _1 : (Parsetree.signature_item) = Obj.magic _1 in + let _1 : (string) = 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 : (Parsetree.signature_item list list) = let x = - let _1 = - let _startpos = _startpos__1_ in - -# 909 "mlx/parser.mly" - ( text_sig _startpos @ [_1] ) -# 18926 "mlx/parser.ml" - - in - -# 1662 "mlx/parser.mly" - ( _1 ) -# 18932 "mlx/parser.ml" - - in - -# 213 "" - ( x :: xs ) -# 18938 "mlx/parser.ml" + let _endpos = _endpos__1_ in + let _v : (Mlx_shim.Longident.t) = +# 4071 "mlx/parser.mly" + ( Lident _1 ) +# 32891 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18945,14 +32898,37 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 = _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 : (string) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.structure_item list list) = -# 211 "" - ( [] ) -# 18956 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Mlx_shim.Longident.t) = let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 4072 "mlx/parser.mly" + ( ldot _1 _loc__1_ _3 _loc__3_ ) +# 32932 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18964,61 +32940,20 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - 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 xs : (Parsetree.structure_item list list) = Obj.magic xs in - let _1 : unit = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t) = 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 : (Parsetree.structure_item list list) = let x = - let _1 = - let ys = - let items = -# 971 "mlx/parser.mly" - ( [] ) -# 18991 "mlx/parser.ml" - in - -# 1401 "mlx/parser.mly" - ( items ) -# 18996 "mlx/parser.ml" - - in - let xs = - let _startpos = _startpos__1_ in - -# 907 "mlx/parser.mly" - ( text_str _startpos ) -# 19004 "mlx/parser.ml" - - in - -# 267 "" - ( xs @ ys ) -# 19010 "mlx/parser.ml" - - in - -# 1417 "mlx/parser.mly" - ( _1 ) -# 19016 "mlx/parser.ml" - - in - -# 213 "" - ( x :: xs ) -# 19022 "mlx/parser.ml" + let _endpos = _endpos__1_ in + let _v : (Mlx_shim.Longident.t) = +# 4107 "mlx/parser.mly" + ( _1 ) +# 32957 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19031,19 +32966,19 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + 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; @@ -19054,86 +32989,22 @@ module Tables = struct }; }; } = _menhir_stack in - let xs : (Parsetree.structure_item list list) = Obj.magic xs in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let e : (Parsetree.expression) = Obj.magic e in - let _1 : unit = Obj.magic _1 in + let _4 : unit = Obj.magic _4 in + let _3 : (Mlx_shim.Longident.t) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Mlx_shim.Longident.t) = 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 : (Parsetree.structure_item list list) = let x = - let _1 = - let ys = - let (_endpos__1_, _1) = (_endpos__1_inlined1_, _1_inlined1) in - let items = - let x = - let _1 = - let _1 = - let attrs = -# 3918 "mlx/parser.mly" - ( _1 ) -# 19076 "mlx/parser.ml" - in - -# 1408 "mlx/parser.mly" - ( mkstrexp e attrs ) -# 19081 "mlx/parser.ml" - - in - let _startpos__1_ = _startpos_e_ in - let _startpos = _startpos__1_ in - -# 905 "mlx/parser.mly" - ( text_str _startpos @ [_1] ) -# 19089 "mlx/parser.ml" - - in - let _startpos__1_ = _startpos_e_ in - let _endpos = _endpos__1_ in - let _startpos = _startpos__1_ in - -# 924 "mlx/parser.mly" - ( mark_rhs_docs _startpos _endpos; - _1 ) -# 19099 "mlx/parser.ml" - - in - -# 973 "mlx/parser.mly" - ( x ) -# 19105 "mlx/parser.ml" - - in - -# 1401 "mlx/parser.mly" - ( items ) -# 19111 "mlx/parser.ml" - - in - let xs = - let _startpos = _startpos__1_ in - -# 907 "mlx/parser.mly" - ( text_str _startpos ) -# 19119 "mlx/parser.ml" - - in - -# 267 "" - ( xs @ ys ) -# 19125 "mlx/parser.ml" - - in - -# 1417 "mlx/parser.mly" - ( _1 ) -# 19131 "mlx/parser.ml" - - in + let _endpos = _endpos__4_ in + let _v : (Mlx_shim.Longident.t) = let _endpos = _endpos__4_ in + let _symbolstartpos = _startpos__1_ in + let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + let _sloc = (_symbolstartpos, _endpos) in -# 213 "" - ( x :: xs ) -# 19137 "mlx/parser.ml" +# 4109 "mlx/parser.mly" + ( lapply ~loc:_sloc _1 _loc__1_ _3 _loc__3_ ) +# 33008 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19146,41 +33017,34 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 xs : (Parsetree.structure_item list list) = Obj.magic xs in - let _1 : (Parsetree.structure_item) = Obj.magic _1 in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Mlx_shim.Longident.t) = 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 : (Parsetree.structure_item list list) = let x = - let _1 = - let _startpos = _startpos__1_ in - -# 905 "mlx/parser.mly" - ( text_str _startpos @ [_1] ) -# 19172 "mlx/parser.ml" - - in - -# 1417 "mlx/parser.mly" - ( _1 ) -# 19178 "mlx/parser.ml" - - in + let _endpos = _endpos__3_ in + let _v : (Mlx_shim.Longident.t) = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 213 "" - ( x :: xs ) -# 19184 "mlx/parser.ml" +# 4111 "mlx/parser.mly" + ( expecting _loc__3_ "module path" ) +# 33048 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19191,14 +33055,21 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.class_type_field list list) = -# 211 "" - ( [] ) -# 19202 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Mlx_shim.Longident.t) = +# 4104 "mlx/parser.mly" + ( _1 ) +# 33073 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19211,9 +33082,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = me; + MenhirLib.EngineTypes.startp = _startpos_me_; + MenhirLib.EngineTypes.endp = _endpos_me_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -19222,41 +33093,15 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : (Parsetree.class_type_field list list) = Obj.magic xs in - let _1 : (Parsetree.class_type_field) = Obj.magic _1 in + let me : (Parsetree.module_expr) = Obj.magic me 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 : (Parsetree.class_type_field list list) = let x = - let _startpos = _startpos__1_ in - -# 919 "mlx/parser.mly" - ( text_csig _startpos @ [_1] ) -# 19236 "mlx/parser.ml" - - in - -# 213 "" - ( x :: xs ) -# 19242 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.class_field list list) = -# 211 "" - ( [] ) -# 19260 "mlx/parser.ml" + let _endpos = _endpos_me_ in + let _v : (Parsetree.module_expr) = +# 1575 "mlx/parser.mly" + ( me ) +# 33105 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19269,9 +33114,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + 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; @@ -19280,23 +33125,16 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : (Parsetree.class_field list list) = Obj.magic xs in - let _1 : (Parsetree.class_field) = Obj.magic _1 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_xs_ in - let _v : (Parsetree.class_field list list) = let x = - let _startpos = _startpos__1_ in - -# 917 "mlx/parser.mly" - ( text_cstr _startpos @ [_1] ) -# 19294 "mlx/parser.ml" - - in + let _endpos = _endpos__2_ in + let _v : (Parsetree.module_expr) = let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 213 "" - ( x :: xs ) -# 19300 "mlx/parser.ml" +# 1577 "mlx/parser.mly" + ( expecting _loc__1_ "=" ) +# 33138 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19307,14 +33145,58 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = me; + MenhirLib.EngineTypes.startp = _startpos_me_; + MenhirLib.EngineTypes.endp = _endpos_me_; + 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 = mty; + MenhirLib.EngineTypes.startp = _startpos_mty_; + MenhirLib.EngineTypes.endp = _endpos_mty_; + 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 me : (Parsetree.module_expr) = Obj.magic me in + let _3 : unit = Obj.magic _3 in + let mty : (Parsetree.module_type) = Obj.magic mty in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.structure_item list list) = -# 211 "" - ( [] ) -# 19318 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos_me_ in + let _v : (Parsetree.module_expr) = let _1 = + let _1 = +# 1580 "mlx/parser.mly" + ( Pmod_constraint(me, mty) ) +# 33185 "mlx/parser.ml" + in + let _endpos__1_ = _endpos_me_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1021 "mlx/parser.mly" + ( mkmod ~loc:_sloc _1 ) +# 33194 "mlx/parser.ml" + + in + +# 1584 "mlx/parser.mly" + ( _1 ) +# 33200 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19327,34 +33209,43 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = body; + MenhirLib.EngineTypes.startp = _startpos_body_; + MenhirLib.EngineTypes.endp = _endpos_body_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = arg_and_pos; + MenhirLib.EngineTypes.startp = _startpos_arg_and_pos_; + MenhirLib.EngineTypes.endp = _endpos_arg_and_pos_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : (Parsetree.structure_item list list) = Obj.magic xs in - let _1 : (Parsetree.structure_item) = Obj.magic _1 in + let body : (Parsetree.module_expr) = Obj.magic body in + let arg_and_pos : (Lexing.position * Parsetree.functor_parameter) = Obj.magic arg_and_pos in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos_xs_ in - let _v : (Parsetree.structure_item list list) = let x = - let _startpos = _startpos__1_ in + let _startpos = _startpos_arg_and_pos_ in + let _endpos = _endpos_body_ in + let _v : (Parsetree.module_expr) = let _1 = + let _1 = +# 1582 "mlx/parser.mly" + ( let (_, arg) = arg_and_pos in + Pmod_functor(arg, body) ) +# 33234 "mlx/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 -# 905 "mlx/parser.mly" - ( text_str _startpos @ [_1] ) -# 19352 "mlx/parser.ml" +# 1021 "mlx/parser.mly" + ( mkmod ~loc:_sloc _1 ) +# 33243 "mlx/parser.ml" in -# 213 "" - ( x :: xs ) -# 19358 "mlx/parser.ml" +# 1584 "mlx/parser.mly" + ( _1 ) +# 33249 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19365,14 +33256,28 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = mty; + MenhirLib.EngineTypes.startp = _startpos_mty_; + MenhirLib.EngineTypes.endp = _endpos_mty_; + 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 mty : (Parsetree.module_type) = Obj.magic mty in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.toplevel_phrase list list) = -# 211 "" - ( [] ) -# 19376 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos_mty_ in + let _v : (Parsetree.module_type) = +# 1825 "mlx/parser.mly" + ( mty ) +# 33281 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19385,9 +33290,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + 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; @@ -19396,41 +33301,65 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : (Parsetree.toplevel_phrase list list) = Obj.magic xs 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_xs_ in - let _v : (Parsetree.toplevel_phrase list list) = let x = - let _1 = - let x = - let _1 = -# 971 "mlx/parser.mly" - ( [] ) -# 19411 "mlx/parser.ml" - in - -# 1203 "mlx/parser.mly" - ( _1 ) -# 19416 "mlx/parser.ml" - - in - -# 183 "" - ( x ) -# 19422 "mlx/parser.ml" - - in + let _endpos = _endpos__2_ in + let _v : (Parsetree.module_type) = let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 1827 "mlx/parser.mly" + ( expecting _loc__1_ ":" ) +# 33314 "mlx/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 = body; + MenhirLib.EngineTypes.startp = _startpos_body_; + MenhirLib.EngineTypes.endp = _endpos_body_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = arg_and_pos; + MenhirLib.EngineTypes.startp = _startpos_arg_and_pos_; + MenhirLib.EngineTypes.endp = _endpos_arg_and_pos_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let body : (Parsetree.module_type) = Obj.magic body in + let arg_and_pos : (Lexing.position * Parsetree.functor_parameter) = Obj.magic arg_and_pos in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_arg_and_pos_ in + let _endpos = _endpos_body_ in + let _v : (Parsetree.module_type) = let _1 = + let _1 = +# 1830 "mlx/parser.mly" + ( let (_, arg) = arg_and_pos in + Pmty_functor(arg, body) ) +# 33348 "mlx/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 -# 1215 "mlx/parser.mly" - ( _1 ) -# 19428 "mlx/parser.ml" +# 1023 "mlx/parser.mly" + ( mkmty ~loc:_sloc _1 ) +# 33357 "mlx/parser.ml" in -# 213 "" - ( x :: xs ) -# 19434 "mlx/parser.ml" +# 1833 "mlx/parser.mly" + ( _1 ) +# 33363 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19443,19 +33372,19 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; 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 = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + 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; @@ -19466,74 +33395,28 @@ module Tables = struct }; }; } = _menhir_stack in - let xs : (Parsetree.toplevel_phrase list list) = Obj.magic xs in + let _4 : unit = Obj.magic _4 in + let s : (Parsetree.structure) = Obj.magic s in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let e : (Parsetree.expression) = Obj.magic e 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 : (Parsetree.toplevel_phrase list list) = let x = - let _1 = - let x = - let _1 = _1_inlined1 in - let _1 = - let x = - let _1 = - let _1 = - let attrs = -# 3918 "mlx/parser.mly" - ( _1 ) -# 19488 "mlx/parser.ml" - in - -# 1408 "mlx/parser.mly" - ( mkstrexp e attrs ) -# 19493 "mlx/parser.ml" - - in - -# 915 "mlx/parser.mly" - ( Ptop_def [_1] ) -# 19499 "mlx/parser.ml" - - in - let _startpos__1_ = _startpos_e_ in - let _startpos = _startpos__1_ in - -# 913 "mlx/parser.mly" - ( text_def _startpos @ [_1] ) -# 19507 "mlx/parser.ml" - - in - -# 973 "mlx/parser.mly" - ( x ) -# 19513 "mlx/parser.ml" - - in - -# 1203 "mlx/parser.mly" - ( _1 ) -# 19519 "mlx/parser.ml" - - in - -# 183 "" - ( x ) -# 19525 "mlx/parser.ml" - - in + let _endpos = _endpos__4_ in + let _v : (Parsetree.module_expr) = let attrs = + let _1 = _1_inlined1 in -# 1215 "mlx/parser.mly" - ( _1 ) -# 19531 "mlx/parser.ml" +# 4337 "mlx/parser.mly" + ( _1 ) +# 33411 "mlx/parser.ml" in + let _endpos = _endpos__4_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 213 "" - ( x :: xs ) -# 19537 "mlx/parser.ml" +# 1413 "mlx/parser.mly" + ( mkmod ~loc:_sloc ~attrs (Pmod_structure s) ) +# 33420 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19546,46 +33429,50 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; 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 = _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 xs : (Parsetree.toplevel_phrase list list) = Obj.magic xs in - let _1 : (Parsetree.structure_item) = Obj.magic _1 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.structure) = Obj.magic _3 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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 : (Parsetree.toplevel_phrase list list) = let x = - let _1 = - let _1 = -# 915 "mlx/parser.mly" - ( Ptop_def [_1] ) -# 19571 "mlx/parser.ml" - in - let _startpos = _startpos__1_ in - -# 913 "mlx/parser.mly" - ( text_def _startpos @ [_1] ) -# 19577 "mlx/parser.ml" - - in + let _endpos = _endpos__4_ in + let _v : (Parsetree.module_expr) = let _2 = + let _1 = _1_inlined1 in -# 1215 "mlx/parser.mly" - ( _1 ) -# 19583 "mlx/parser.ml" +# 4337 "mlx/parser.mly" + ( _1 ) +# 33468 "mlx/parser.ml" in + let _loc__4_ = (_startpos__4_, _endpos__4_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 213 "" - ( x :: xs ) -# 19589 "mlx/parser.ml" +# 1415 "mlx/parser.mly" + ( unclosed "struct" _loc__1_ "end" _loc__4_ ) +# 33476 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19598,9 +33485,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + 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; @@ -19609,40 +33496,16 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : (Parsetree.toplevel_phrase list list) = Obj.magic xs in - let _1 : (Parsetree.toplevel_phrase) = Obj.magic _1 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_xs_ in - let _v : (Parsetree.toplevel_phrase list list) = let x = - let _1 = - let _1 = - let _endpos = _endpos__1_ in - let _startpos = _startpos__1_ in - -# 924 "mlx/parser.mly" - ( mark_rhs_docs _startpos _endpos; - _1 ) -# 19627 "mlx/parser.ml" - - in - let _startpos = _startpos__1_ in - -# 913 "mlx/parser.mly" - ( text_def _startpos @ [_1] ) -# 19634 "mlx/parser.ml" - - in - -# 1215 "mlx/parser.mly" - ( _1 ) -# 19640 "mlx/parser.ml" - - in + let _endpos = _endpos__2_ in + let _v : (Parsetree.module_expr) = let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 213 "" - ( x :: xs ) -# 19646 "mlx/parser.ml" +# 1417 "mlx/parser.mly" + ( expecting _loc__1_ "struct" ) +# 33509 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19655,71 +33518,70 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = opat; - MenhirLib.EngineTypes.startp = _startpos_opat_; - MenhirLib.EngineTypes.endp = _endpos_opat_; + MenhirLib.EngineTypes.semv = me; + MenhirLib.EngineTypes.startp = _startpos_me_; + MenhirLib.EngineTypes.endp = _endpos_me_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = octy; - MenhirLib.EngineTypes.startp = _startpos_octy_; - MenhirLib.EngineTypes.endp = _endpos_octy_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 opat : (Parsetree.pattern option) = Obj.magic opat in - let octy : (Parsetree.core_type option) = Obj.magic octy in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let me : (Parsetree.module_expr) = Obj.magic me in + let _4 : unit = Obj.magic _4 in + let _1_inlined2 : ((Lexing.position * Parsetree.functor_parameter) list) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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_opat_ in - let _v : ((Ppxlib.longident Ppxlib.loc * Parsetree.pattern) list * unit option) = let _2 = -# 124 "" - ( None ) -# 19685 "mlx/parser.ml" - in - let x = - let label = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 19695 "mlx/parser.ml" - - in - let _startpos_label_ = _startpos__1_ in - let _endpos = _endpos_opat_ in - let _symbolstartpos = _startpos_label_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos_me_ in + let _v : (Parsetree.module_expr) = let args = + let _1 = _1_inlined2 in -# 2911 "mlx/parser.mly" - ( let constraint_loc, label, pat = - match opat with - | None -> - (* No pattern; this is a pun. Desugar it. - But that the pattern was there and the label reconstructed (which - piece of AST is marked as ghost is important for warning - emission). *) - _sloc, make_ghost label, pat_of_label label - | Some pat -> - (_startpos_octy_, _endpos), label, pat - in - label, mkpat_opt_constraint ~loc:constraint_loc pat octy - ) -# 19717 "mlx/parser.ml" +# 1379 "mlx/parser.mly" + ( _1 ) +# 33564 "mlx/parser.ml" + + in + let attrs = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 33572 "mlx/parser.ml" in + let _endpos = _endpos_me_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 1140 "mlx/parser.mly" - ( [x], None ) -# 19723 "mlx/parser.ml" +# 1419 "mlx/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 + ) ) +# 33585 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19731,79 +33593,20 @@ module Tables = struct (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 = _; - MenhirLib.EngineTypes.semv = opat; - MenhirLib.EngineTypes.startp = _startpos_opat_; - MenhirLib.EngineTypes.endp = _endpos_opat_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = octy; - MenhirLib.EngineTypes.startp = _startpos_octy_; - MenhirLib.EngineTypes.endp = _endpos_octy_; - 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 = me; + MenhirLib.EngineTypes.startp = _startpos_me_; + MenhirLib.EngineTypes.endp = _endpos_me_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : unit = Obj.magic x in - let opat : (Parsetree.pattern option) = Obj.magic opat in - let octy : (Parsetree.core_type option) = Obj.magic octy in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let me : (Parsetree.module_expr) = Obj.magic me in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos_x_ in - let _v : ((Ppxlib.longident Ppxlib.loc * Parsetree.pattern) list * unit option) = let _2 = -# 126 "" - ( Some x ) -# 19769 "mlx/parser.ml" - in - let x = - let label = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 19779 "mlx/parser.ml" - - in - let _startpos_label_ = _startpos__1_ in - let _endpos = _endpos_opat_ in - let _symbolstartpos = _startpos_label_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2911 "mlx/parser.mly" - ( let constraint_loc, label, pat = - match opat with - | None -> - (* No pattern; this is a pun. Desugar it. - But that the pattern was there and the label reconstructed (which - piece of AST is marked as ghost is important for warning - emission). *) - _sloc, make_ghost label, pat_of_label label - | Some pat -> - (_startpos_octy_, _endpos), label, pat - in - label, mkpat_opt_constraint ~loc:constraint_loc pat octy - ) -# 19801 "mlx/parser.ml" - - in - -# 1140 "mlx/parser.mly" - ( [x], None ) -# 19807 "mlx/parser.ml" + let _startpos = _startpos_me_ in + let _endpos = _endpos_me_ in + let _v : (Parsetree.module_expr) = +# 1425 "mlx/parser.mly" + ( me ) +# 33610 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19816,87 +33619,78 @@ module Tables = struct 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.semv = attr; + MenhirLib.EngineTypes.startp = _startpos_attr_; + MenhirLib.EngineTypes.endp = _endpos_attr_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = y; - MenhirLib.EngineTypes.startp = _startpos_y_; - MenhirLib.EngineTypes.endp = _endpos_y_; - 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 = opat; - MenhirLib.EngineTypes.startp = _startpos_opat_; - MenhirLib.EngineTypes.endp = _endpos_opat_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = octy; - MenhirLib.EngineTypes.startp = _startpos_octy_; - MenhirLib.EngineTypes.endp = _endpos_octy_; - 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 = me; + MenhirLib.EngineTypes.startp = _startpos_me_; + MenhirLib.EngineTypes.endp = _endpos_me_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _4 : (unit option) = Obj.magic _4 in - let y : unit = Obj.magic y in - let _2 : unit = Obj.magic _2 in - let opat : (Parsetree.pattern option) = Obj.magic opat in - let octy : (Parsetree.core_type option) = Obj.magic octy in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let attr : (Parsetree.attribute) = Obj.magic attr in + let me : (Parsetree.module_expr) = Obj.magic me in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_me_ in + let _endpos = _endpos_attr_ in + let _v : (Parsetree.module_expr) = +# 1427 "mlx/parser.mly" + ( Mod.attr me attr ) +# 33642 "mlx/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 : (Mlx_shim.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 : ((Ppxlib.longident Ppxlib.loc * Parsetree.pattern) list * unit option) = let x = - let label = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" + let _endpos = _endpos__1_ in + let _v : (Parsetree.module_expr) = let _1 = + let _1 = + let x = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 19872 "mlx/parser.ml" +# 33673 "mlx/parser.ml" + + in + +# 1431 "mlx/parser.mly" + ( Pmod_ident x ) +# 33679 "mlx/parser.ml" in - let _startpos_label_ = _startpos__1_ in - let _endpos = _endpos_opat_ in - let _symbolstartpos = _startpos_label_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2911 "mlx/parser.mly" - ( let constraint_loc, label, pat = - match opat with - | None -> - (* No pattern; this is a pun. Desugar it. - But that the pattern was there and the label reconstructed (which - piece of AST is marked as ghost is important for warning - emission). *) - _sloc, make_ghost label, pat_of_label label - | Some pat -> - (_startpos_octy_, _endpos), label, pat - in - label, mkpat_opt_constraint ~loc:constraint_loc pat octy - ) -# 19894 "mlx/parser.ml" +# 1021 "mlx/parser.mly" + ( mkmod ~loc:_sloc _1 ) +# 33688 "mlx/parser.ml" in -# 1142 "mlx/parser.mly" - ( [x], Some y ) -# 19900 "mlx/parser.ml" +# 1442 "mlx/parser.mly" + ( _1 ) +# 33694 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19909,81 +33703,42 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = tail; - MenhirLib.EngineTypes.startp = _startpos_tail_; - MenhirLib.EngineTypes.endp = _endpos_tail_; + MenhirLib.EngineTypes.semv = me2; + MenhirLib.EngineTypes.startp = _startpos_me2_; + MenhirLib.EngineTypes.endp = _endpos_me2_; 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 = opat; - MenhirLib.EngineTypes.startp = _startpos_opat_; - MenhirLib.EngineTypes.endp = _endpos_opat_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = octy; - MenhirLib.EngineTypes.startp = _startpos_octy_; - MenhirLib.EngineTypes.endp = _endpos_octy_; - 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 = me1; + MenhirLib.EngineTypes.startp = _startpos_me1_; + MenhirLib.EngineTypes.endp = _endpos_me1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let tail : ((Ppxlib.longident Ppxlib.loc * Parsetree.pattern) list * unit option) = Obj.magic tail in - let _2 : unit = Obj.magic _2 in - let opat : (Parsetree.pattern option) = Obj.magic opat in - let octy : (Parsetree.core_type option) = Obj.magic octy in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let me2 : (Parsetree.module_expr) = Obj.magic me2 in + let me1 : (Parsetree.module_expr) = Obj.magic me1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos_tail_ in - let _v : ((Ppxlib.longident Ppxlib.loc * Parsetree.pattern) list * unit option) = let x = - let label = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 19958 "mlx/parser.ml" - - in - let _startpos_label_ = _startpos__1_ in - let _endpos = _endpos_opat_ in - let _symbolstartpos = _startpos_label_ in + let _startpos = _startpos_me1_ in + let _endpos = _endpos_me2_ in + let _v : (Parsetree.module_expr) = let _1 = + let _1 = +# 1434 "mlx/parser.mly" + ( Pmod_apply(me1, me2) ) +# 33727 "mlx/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 -# 2911 "mlx/parser.mly" - ( let constraint_loc, label, pat = - match opat with - | None -> - (* No pattern; this is a pun. Desugar it. - But that the pattern was there and the label reconstructed (which - piece of AST is marked as ghost is important for warning - emission). *) - _sloc, make_ghost label, pat_of_label label - | Some pat -> - (_startpos_octy_, _endpos), label, pat - in - label, mkpat_opt_constraint ~loc:constraint_loc pat octy - ) -# 19980 "mlx/parser.ml" +# 1021 "mlx/parser.mly" + ( mkmod ~loc:_sloc _1 ) +# 33736 "mlx/parser.ml" in -# 1146 "mlx/parser.mly" - ( let xs, y = tail in - x :: xs, y ) -# 19987 "mlx/parser.ml" +# 1442 "mlx/parser.mly" + ( _1 ) +# 33742 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20006,23 +33761,39 @@ module Tables = struct 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.semv = me; + MenhirLib.EngineTypes.startp = _startpos_me_; + MenhirLib.EngineTypes.endp = _endpos_me_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _3 : (Parsetree.expression) = Obj.magic _3 in + let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let me : (Parsetree.module_expr) = Obj.magic me in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in + let _startpos = _startpos_me_ in let _endpos = _endpos__3_ in - let _v : (Parsetree.case) = -# 2666 "mlx/parser.mly" - ( Exp.case _1 _3 ) -# 20026 "mlx/parser.ml" + let _v : (Parsetree.module_expr) = let _1 = + let _1 = +# 1437 "mlx/parser.mly" + ( Pmod_apply_unit me ) +# 33782 "mlx/parser.ml" + in + let (_endpos__1_, _startpos__1_) = (_endpos__3_, _startpos_me_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1021 "mlx/parser.mly" + ( mkmod ~loc:_sloc _1 ) +# 33791 "mlx/parser.ml" + + in + +# 1442 "mlx/parser.mly" + ( _1 ) +# 33797 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20034,48 +33805,36 @@ module Tables = struct (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 = _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; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ex; + MenhirLib.EngineTypes.startp = _startpos_ex_; + MenhirLib.EngineTypes.endp = _endpos_ex_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _5 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let ex : (Parsetree.extension) = Obj.magic ex in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Parsetree.case) = -# 2668 "mlx/parser.mly" - ( Exp.case _1 ~guard:_3 _5 ) -# 20079 "mlx/parser.ml" + let _startpos = _startpos_ex_ in + let _endpos = _endpos_ex_ in + let _v : (Parsetree.module_expr) = let _1 = + let _1 = +# 1440 "mlx/parser.mly" + ( Pmod_extension ex ) +# 33823 "mlx/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 + +# 1021 "mlx/parser.mly" + ( mkmod ~loc:_sloc _1 ) +# 33832 "mlx/parser.ml" + + in + +# 1442 "mlx/parser.mly" + ( _1 ) +# 33838 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20087,35 +33846,49 @@ module Tables = struct (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 = _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; - }; - }; + 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 _3 : unit = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let x : ( +# 839 "mlx/parser.mly" + (string) +# 33859 "mlx/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) = +# 1396 "mlx/parser.mly" + ( Some x ) +# 33867 "mlx/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 : 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.case) = let _loc__3_ = (_startpos__3_, _endpos__3_) in - -# 2670 "mlx/parser.mly" - ( Exp.case _1 (Exp.unreachable ~loc:(make_loc _loc__3_) ()) ) -# 20119 "mlx/parser.ml" + let _endpos = _endpos__1_ in + let _v : (string option) = +# 1399 "mlx/parser.mly" + ( None ) +# 33892 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20128,9 +33901,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = tail; - MenhirLib.EngineTypes.startp = _startpos_tail_; - MenhirLib.EngineTypes.endp = _endpos_tail_; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined3; @@ -20153,9 +33926,9 @@ module Tables = struct 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.semv = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -20169,81 +33942,268 @@ module Tables = struct }; }; } = _menhir_stack in - let tail : (Parsetree.object_field list * Asttypes.closed_flag) = Obj.magic tail in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined3 in let _5 : unit = Obj.magic _5 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in - let _1 : ( -# 714 "mlx/parser.mly" + let _1_inlined2 : ( +# 839 "mlx/parser.mly" (string) -# 20182 "mlx/parser.ml" - ) = Obj.magic _1 in +# 33952 "mlx/parser.ml" + ) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let ext : (string Ppxlib.loc option) = Obj.magic ext 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_tail_ in - let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = - let _6 = - let _1 = _1_inlined3 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 20193 "mlx/parser.ml" - - in - let _endpos__6_ = _endpos__1_inlined3_ in - let _4 = - let _1 = _1_inlined2 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 20202 "mlx/parser.ml" - - in - let _endpos__4_ = _endpos__1_inlined2_ in - let _3 = - let _1 = _1_inlined1 in - -# 3337 "mlx/parser.mly" + let _endpos = _endpos__1_inlined4_ in + let _v : (Parsetree.module_substitution * string Ppxlib.loc option) = let attrs2 = + let _1 = _1_inlined4 in + +# 4333 "mlx/parser.mly" ( _1 ) -# 20211 "mlx/parser.ml" - - in - let _1 = - let _1 = -# 3562 "mlx/parser.mly" - ( _1 ) -# 20218 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" +# 33965 "mlx/parser.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined4_ in + let body = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 20226 "mlx/parser.ml" - - in - let _endpos = _endpos__6_ in +# 33977 "mlx/parser.ml" + + in + let uid = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3547 "mlx/parser.mly" - ( let info = - match rhs_info _endpos__4_ with - | Some _ as info_before_semi -> info_before_semi - | None -> symbol_info _endpos - in - let attrs = add_info_attrs info (_4 @ _6) in - Of.tag ~loc:(make_loc _sloc) ~attrs _1 _3 ) -# 20241 "mlx/parser.ml" +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 33988 "mlx/parser.ml" + + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 33996 "mlx/parser.ml" in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3528 "mlx/parser.mly" - ( let (f, c) = tail in (head :: f, c) ) -# 20247 "mlx/parser.ml" +# 1863 "mlx/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 + ) +# 34010 "mlx/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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _6 : unit = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let _1_inlined2 : ( +# 839 "mlx/parser.mly" + (string) +# 34063 "mlx/parser.ml" + ) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let _2 : (string Ppxlib.loc option) = 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__6_ in + let _v : (Parsetree.module_substitution * string Ppxlib.loc option) = let _4 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 34079 "mlx/parser.ml" + + in + let _3 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 34087 "mlx/parser.ml" + + in + let _loc__6_ = (_startpos__6_, _endpos__6_) in + +# 1870 "mlx/parser.mly" + ( expecting _loc__6_ "module path" ) +# 34094 "mlx/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 = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; + 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 : unit = Obj.magic _4 in + let s : (Parsetree.signature) = Obj.magic s in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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.module_type) = let attrs = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 34142 "mlx/parser.ml" + + in + let _endpos = _endpos__4_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1709 "mlx/parser.mly" + ( mkmty ~loc:_sloc ~attrs (Pmty_signature s) ) +# 34151 "mlx/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 = _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 : unit = Obj.magic _4 in + let _3 : (Parsetree.signature) = Obj.magic _3 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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.module_type) = let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 34199 "mlx/parser.ml" + + in + let _loc__4_ = (_startpos__4_, _endpos__4_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 1711 "mlx/parser.mly" + ( unclosed "sig" _loc__1_ "end" _loc__4_ ) +# 34207 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20256,43 +34216,27 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = tail; - MenhirLib.EngineTypes.startp = _startpos_tail_; - MenhirLib.EngineTypes.endp = _endpos_tail_; + 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 = _menhir_s; - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; - 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 tail : (Parsetree.object_field list * Asttypes.closed_flag) = Obj.magic tail in let _2 : unit = Obj.magic _2 in - let ty : (Parsetree.core_type) = Obj.magic ty in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_ty_ in - let _endpos = _endpos_tail_ in - let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = - let _endpos = _endpos_ty_ in - let _symbolstartpos = _startpos_ty_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3558 "mlx/parser.mly" - ( Of.inherit_ ~loc:(make_loc _sloc) ty ) -# 20290 "mlx/parser.ml" - - in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : (Parsetree.module_type) = let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 3528 "mlx/parser.mly" - ( let (f, c) = tail in (head :: f, c) ) -# 20296 "mlx/parser.ml" +# 1713 "mlx/parser.mly" + ( expecting _loc__1_ "sig" ) +# 34240 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20305,14 +34249,14 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = mty; + MenhirLib.EngineTypes.startp = _startpos_mty_; + MenhirLib.EngineTypes.endp = _endpos_mty_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined2; @@ -20324,96 +34268,47 @@ module Tables = struct 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; - }; + 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_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let _5 : unit = Obj.magic _5 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in - let _1 : ( -# 714 "mlx/parser.mly" - (string) -# 20352 "mlx/parser.ml" - ) = Obj.magic _1 in + let mty : (Parsetree.module_type) = Obj.magic mty in + let _4 : unit = Obj.magic _4 in + let _1_inlined2 : ((Lexing.position * Parsetree.functor_parameter) list) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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__1_inlined3_ in - let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = - let _6 = - let _1 = _1_inlined3 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 20363 "mlx/parser.ml" - - in - let _endpos__6_ = _endpos__1_inlined3_ in - let _4 = - let _1 = _1_inlined2 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 20372 "mlx/parser.ml" - - in - let _endpos__4_ = _endpos__1_inlined2_ in - let _3 = - let _1 = _1_inlined1 in - -# 3337 "mlx/parser.mly" + let _endpos = _endpos_mty_ in + let _v : (Parsetree.module_type) = let args = + let _1 = _1_inlined2 in + +# 1379 "mlx/parser.mly" ( _1 ) -# 20381 "mlx/parser.ml" - - in - let _1 = - let _1 = -# 3562 "mlx/parser.mly" - ( _1 ) -# 20388 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 20396 "mlx/parser.ml" - - in - let _endpos = _endpos__6_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in +# 34295 "mlx/parser.ml" -# 3547 "mlx/parser.mly" - ( let info = - match rhs_info _endpos__4_ with - | Some _ as info_before_semi -> info_before_semi - | None -> symbol_info _endpos - in - let attrs = add_info_attrs info (_4 @ _6) in - Of.tag ~loc:(make_loc _sloc) ~attrs _1 _3 ) -# 20411 "mlx/parser.ml" + in + let attrs = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 34303 "mlx/parser.ml" in + let _endpos = _endpos_mty_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3531 "mlx/parser.mly" - ( [head], Closed ) -# 20417 "mlx/parser.ml" +# 1717 "mlx/parser.mly" + ( wrap_mty_attrs ~loc:_sloc attrs (mk_functor_typ args mty) ) +# 34312 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20426,36 +34321,38 @@ module Tables = struct 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.semv = mty; + MenhirLib.EngineTypes.startp = _startpos_mty_; + MenhirLib.EngineTypes.endp = _endpos_mty_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; - 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 mty : (Parsetree.module_type) = Obj.magic mty in let _2 : unit = Obj.magic _2 in - let ty : (Parsetree.core_type) = Obj.magic ty in + let _1 : ((Lexing.position * Parsetree.functor_parameter) list) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_ty_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = - let _endpos = _endpos_ty_ in - let _symbolstartpos = _startpos_ty_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3558 "mlx/parser.mly" - ( Of.inherit_ ~loc:(make_loc _sloc) ty ) -# 20453 "mlx/parser.ml" - - in + let _startpos = _startpos__1_ in + let _endpos = _endpos_mty_ in + let _v : (Parsetree.module_type) = let args = +# 1379 "mlx/parser.mly" + ( _1 ) +# 34351 "mlx/parser.ml" + in -# 3531 "mlx/parser.mly" - ( [head], Closed ) -# 20459 "mlx/parser.ml" +# 1721 "mlx/parser.mly" + ( mk_functor_typ args mty ) +# 34356 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20468,9 +34365,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined1; @@ -20478,78 +34375,48 @@ module Tables = struct 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.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in + let _5 : (Parsetree.module_expr) = Obj.magic _5 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : ( -# 714 "mlx/parser.mly" - (string) -# 20501 "mlx/parser.ml" - ) = Obj.magic _1 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__1_inlined2_ in - let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = - let _4 = - let _1 = _1_inlined2 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 20512 "mlx/parser.ml" - - in - let _endpos__4_ = _endpos__1_inlined2_ in - let _3 = - let _1 = _1_inlined1 in - -# 3337 "mlx/parser.mly" - ( _1 ) -# 20521 "mlx/parser.ml" - - in - let _1 = - let _1 = -# 3562 "mlx/parser.mly" - ( _1 ) -# 20528 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 20536 "mlx/parser.ml" - - in - let _endpos = _endpos__4_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos__5_ in + let _v : (Parsetree.module_type) = let _4 = + let _1 = _1_inlined1 in -# 3540 "mlx/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 ) -# 20547 "mlx/parser.ml" +# 4337 "mlx/parser.mly" + ( _1 ) +# 34411 "mlx/parser.ml" in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3534 "mlx/parser.mly" - ( [head], Closed ) -# 20553 "mlx/parser.ml" +# 1723 "mlx/parser.mly" + ( mkmty ~loc:_sloc ~attrs:_4 (Pmty_typeof _5) ) +# 34420 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20561,30 +34428,107 @@ module Tables = struct (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 = _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 : unit = Obj.magic _3 in + let _2 : (Parsetree.module_type) = 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 : (Parsetree.module_type) = +# 1725 "mlx/parser.mly" + ( _2 ) +# 34459 "mlx/parser.ml" + in + { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; + 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 = _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 ty : (Parsetree.core_type) = Obj.magic ty in + let _3 : unit = Obj.magic _3 in + let _2 : (Parsetree.module_type) = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_ty_ in - let _endpos = _endpos_ty_ in - let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = - let _endpos = _endpos_ty_ in - let _symbolstartpos = _startpos_ty_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3558 "mlx/parser.mly" - ( Of.inherit_ ~loc:(make_loc _sloc) ty ) -# 20582 "mlx/parser.ml" - - in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.module_type) = let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 3534 "mlx/parser.mly" - ( [head], Closed ) -# 20588 "mlx/parser.ml" +# 1727 "mlx/parser.mly" + ( unclosed "(" _loc__1_ ")" _loc__3_ ) +# 34500 "mlx/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.attribute) = Obj.magic _2 in + let _1 : (Parsetree.module_type) = 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.module_type) = +# 1729 "mlx/parser.mly" + ( Mty.attr _1 _2 ) +# 34532 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20602,14 +34546,41 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : unit = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t) = 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.object_field list * Asttypes.closed_flag) = -# 3536 "mlx/parser.mly" - ( [], Open ) -# 20613 "mlx/parser.ml" + let _v : (Parsetree.module_type) = let _1 = + let _1 = + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 34563 "mlx/parser.ml" + + in + +# 1732 "mlx/parser.mly" + ( Pmty_ident _1 ) +# 34569 "mlx/parser.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1023 "mlx/parser.mly" + ( mkmty ~loc:_sloc _1 ) +# 34578 "mlx/parser.ml" + + in + +# 1743 "mlx/parser.mly" + ( _1 ) +# 34584 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20622,86 +34593,49 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _; - 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 = private_; - MenhirLib.EngineTypes.startp = _startpos_private__; - MenhirLib.EngineTypes.endp = _endpos_private__; - 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 _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in - let _5 : unit = Obj.magic _5 in - let _1_inlined1 : ( -# 714 "mlx/parser.mly" - (string) -# 20660 "mlx/parser.ml" - ) = Obj.magic _1_inlined1 in - let private_ : (Asttypes.private_flag) = Obj.magic private_ in - let _1 : (Parsetree.attributes) = Obj.magic _1 in + let _3 : (Parsetree.module_type) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.module_type) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined2_ in - let _v : ((string Ppxlib.loc * Asttypes.private_flag * Parsetree.class_field_kind) * - Parsetree.attributes) = let ty = - let _1 = _1_inlined2 in - -# 3333 "mlx/parser.mly" - ( _1 ) -# 20673 "mlx/parser.ml" - - in - let label = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__3_ in + let _v : (Parsetree.module_type) = let _1 = let _1 = -# 3562 "mlx/parser.mly" - ( _1 ) -# 20681 "mlx/parser.ml" +# 1735 "mlx/parser.mly" + ( Pmty_functor(Named (mknoloc None, _1), _3) ) +# 34624 "mlx/parser.ml" in + let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 20689 "mlx/parser.ml" +# 1023 "mlx/parser.mly" + ( mkmty ~loc:_sloc _1 ) +# 34633 "mlx/parser.ml" in - let attrs = -# 3922 "mlx/parser.mly" - ( _1 ) -# 20695 "mlx/parser.ml" - in - let _1 = -# 3821 "mlx/parser.mly" - ( Fresh ) -# 20700 "mlx/parser.ml" - in -# 2002 "mlx/parser.mly" - ( (label, private_, Cfk_virtual ty), attrs ) -# 20705 "mlx/parser.ml" +# 1743 "mlx/parser.mly" + ( _1 ) +# 34639 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20714,74 +34648,63 @@ 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 = 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; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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 = _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 : (Parsetree.expression) = Obj.magic _5 in - let _1_inlined1 : ( -# 714 "mlx/parser.mly" - (string) -# 20745 "mlx/parser.ml" - ) = Obj.magic _1_inlined1 in - let _3 : (Asttypes.private_flag) = Obj.magic _3 in - let _1 : (Parsetree.attributes) = Obj.magic _1 in + let xs : (Parsetree.with_constraint list) = Obj.magic xs in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.module_type) = 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 : ((string Ppxlib.loc * Asttypes.private_flag * Parsetree.class_field_kind) * - Parsetree.attributes) = let _4 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _1 = -# 3562 "mlx/parser.mly" - ( _1 ) -# 20758 "mlx/parser.ml" - in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.module_type) = let _1 = + let _1 = + let _3 = + let xs = +# 253 "" + ( List.rev xs ) +# 34681 "mlx/parser.ml" + in + +# 1133 "mlx/parser.mly" + ( xs ) +# 34686 "mlx/parser.ml" + + in + +# 1737 "mlx/parser.mly" + ( Pmty_with(_1, _3) ) +# 34692 "mlx/parser.ml" + + in + let _endpos__1_ = _endpos_xs_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 20766 "mlx/parser.ml" +# 1023 "mlx/parser.mly" + ( mkmty ~loc:_sloc _1 ) +# 34702 "mlx/parser.ml" in - let _2 = -# 3922 "mlx/parser.mly" - ( _1 ) -# 20772 "mlx/parser.ml" - in - let _1 = -# 3824 "mlx/parser.mly" - ( Fresh ) -# 20777 "mlx/parser.ml" - in -# 2004 "mlx/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 ) -# 20785 "mlx/parser.ml" +# 1743 "mlx/parser.mly" + ( _1 ) +# 34708 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20793,85 +34716,35 @@ module Tables = struct (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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 = _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 _5 : (Parsetree.expression) = Obj.magic _5 in - let _1_inlined2 : ( -# 714 "mlx/parser.mly" - (string) -# 20831 "mlx/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 - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.extension) = 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 : ((string Ppxlib.loc * Asttypes.private_flag * Parsetree.class_field_kind) * - Parsetree.attributes) = let _4 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _v : (Parsetree.module_type) = let _1 = let _1 = -# 3562 "mlx/parser.mly" - ( _1 ) -# 20845 "mlx/parser.ml" +# 1741 "mlx/parser.mly" + ( Pmty_extension _1 ) +# 34734 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 20853 "mlx/parser.ml" - - in - let _2 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 20861 "mlx/parser.ml" +# 1023 "mlx/parser.mly" + ( mkmty ~loc:_sloc _1 ) +# 34742 "mlx/parser.ml" in - let _1 = -# 3825 "mlx/parser.mly" - ( Override ) -# 20867 "mlx/parser.ml" - in -# 2004 "mlx/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 ) -# 20875 "mlx/parser.ml" +# 1743 "mlx/parser.mly" + ( _1 ) +# 34748 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20884,14 +34757,14 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _8; - MenhirLib.EngineTypes.startp = _startpos__8_; - MenhirLib.EngineTypes.endp = _endpos__8_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = typ; + MenhirLib.EngineTypes.startp = _startpos_typ_; + MenhirLib.EngineTypes.endp = _endpos_typ_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined2; @@ -20899,19 +34772,19 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + 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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; 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 = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -20925,63 +34798,56 @@ module Tables = struct }; }; } = _menhir_stack in - let _8 : (Parsetree.expression) = Obj.magic _8 in - let _7 : unit = Obj.magic _7 in - let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in - let _5 : unit = Obj.magic _5 in - let _1_inlined1 : ( -# 714 "mlx/parser.mly" - (string) -# 20936 "mlx/parser.ml" - ) = Obj.magic _1_inlined1 in - let _3 : (Asttypes.private_flag) = Obj.magic _3 in - let _1 : (Parsetree.attributes) = Obj.magic _1 in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let typ : (Parsetree.module_type option) = Obj.magic typ in + let _1_inlined2 : (string) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let ext : (string Ppxlib.loc option) = Obj.magic ext 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__8_ in - let _v : ((string Ppxlib.loc * Asttypes.private_flag * Parsetree.class_field_kind) * - Parsetree.attributes) = let _6 = - let _1 = _1_inlined2 in + let _endpos = _endpos__1_inlined3_ in + let _v : (Parsetree.module_type_declaration * string Ppxlib.loc option) = let attrs2 = + let _1 = _1_inlined3 in -# 3333 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 20949 "mlx/parser.ml" +# 34817 "mlx/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 = -# 3562 "mlx/parser.mly" - ( _1 ) -# 20958 "mlx/parser.ml" - in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 20966 "mlx/parser.ml" +# 34829 "mlx/parser.ml" in - let _2 = -# 3922 "mlx/parser.mly" + let attrs1 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" ( _1 ) -# 20972 "mlx/parser.ml" - in - let _1 = -# 3824 "mlx/parser.mly" - ( Fresh ) -# 20977 "mlx/parser.ml" - in +# 34837 "mlx/parser.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2010 "mlx/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 ) -# 20985 "mlx/parser.ml" +# 1655 "mlx/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 + ) +# 34851 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20994,39 +34860,39 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _8; - MenhirLib.EngineTypes.startp = _startpos__8_; - MenhirLib.EngineTypes.endp = _endpos__8_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = typ; + MenhirLib.EngineTypes.startp = _startpos_typ_; + MenhirLib.EngineTypes.endp = _endpos_typ_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; 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; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -21041,67 +34907,328 @@ module Tables = struct }; }; } = _menhir_stack in - let _8 : (Parsetree.expression) = Obj.magic _8 in - let _7 : unit = Obj.magic _7 in - let _1_inlined3 : (Parsetree.core_type) = Obj.magic _1_inlined3 in - let _5 : unit = Obj.magic _5 in - let _1_inlined2 : ( -# 714 "mlx/parser.mly" - (string) -# 21052 "mlx/parser.ml" - ) = Obj.magic _1_inlined2 in - let _3 : (Asttypes.private_flag) = Obj.magic _3 in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let typ : (Parsetree.module_type) = Obj.magic typ in + let _6 : unit = Obj.magic _6 in + let _1_inlined2 : (string) = Obj.magic _1_inlined2 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let ext : (string Ppxlib.loc option) = Obj.magic ext 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__8_ in - let _v : ((string Ppxlib.loc * Asttypes.private_flag * Parsetree.class_field_kind) * - Parsetree.attributes) = let _6 = + let _endpos = _endpos__1_inlined3_ in + let _v : (Parsetree.module_type_declaration * string Ppxlib.loc option) = let attrs2 = let _1 = _1_inlined3 in -# 3333 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 21066 "mlx/parser.ml" +# 34927 "mlx/parser.ml" in - let _startpos__6_ = _startpos__1_inlined3_ in - let _4 = + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let id = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _1 = -# 3562 "mlx/parser.mly" - ( _1 ) -# 21075 "mlx/parser.ml" - in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 21083 "mlx/parser.ml" +# 34939 "mlx/parser.ml" in - let _2 = + let attrs1 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 21091 "mlx/parser.ml" +# 34947 "mlx/parser.ml" in - let _1 = -# 3825 "mlx/parser.mly" - ( Override ) -# 21097 "mlx/parser.ml" + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1919 "mlx/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 + ) +# 34961 "mlx/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 : (Mlx_shim.Longident.t) = 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 : (Mlx_shim.Longident.t) = +# 4114 "mlx/parser.mly" + ( _1 ) +# 34986 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Asttypes.mutable_flag) = +# 4195 "mlx/parser.mly" + ( Immutable ) +# 35004 "mlx/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 : unit = 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.mutable_flag) = +# 4196 "mlx/parser.mly" + ( Mutable ) +# 35029 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = +# 4204 "mlx/parser.mly" + ( Immutable, Concrete ) +# 35047 "mlx/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 : unit = 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.mutable_flag * Asttypes.virtual_flag) = +# 4206 "mlx/parser.mly" + ( Mutable, Concrete ) +# 35072 "mlx/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 : unit = 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.mutable_flag * Asttypes.virtual_flag) = +# 4208 "mlx/parser.mly" + ( Immutable, Virtual ) +# 35097 "mlx/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 : (Asttypes.mutable_flag * Asttypes.virtual_flag) = +# 4211 "mlx/parser.mly" + ( Mutable, Virtual ) +# 35129 "mlx/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 : (Asttypes.mutable_flag * Asttypes.virtual_flag) = +# 4211 "mlx/parser.mly" + ( Mutable, Virtual ) +# 35161 "mlx/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 : (string) = 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 : (string) = +# 4166 "mlx/parser.mly" + ( _2 ) +# 35193 "mlx/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 : ( +# 786 "mlx/parser.mly" + (string) +# 35214 "mlx/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 Ppxlib.loc list) = let x = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 35226 "mlx/parser.ml" + + in -# 2010 "mlx/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 ) -# 21105 "mlx/parser.ml" +# 221 "" + ( [ x ] ) +# 35232 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21114,143 +35241,74 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _11; - MenhirLib.EngineTypes.startp = _startpos__11_; - MenhirLib.EngineTypes.endp = _endpos__11_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _10; - MenhirLib.EngineTypes.startp = _startpos__10_; - MenhirLib.EngineTypes.endp = _endpos__10_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _9; - MenhirLib.EngineTypes.startp = _startpos__9_; - MenhirLib.EngineTypes.endp = _endpos__9_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _8; - MenhirLib.EngineTypes.startp = _startpos__8_; - MenhirLib.EngineTypes.endp = _endpos__8_; - 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 = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - 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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - 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 = _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 _11 : (Parsetree.expression) = Obj.magic _11 in - let _10 : unit = Obj.magic _10 in - let _9 : (Parsetree.core_type) = Obj.magic _9 in - let _8 : unit = Obj.magic _8 in let xs : (string Ppxlib.loc list) = Obj.magic xs in - let _6 : unit = Obj.magic _6 in - let _5 : unit = Obj.magic _5 in - let _1_inlined1 : ( -# 714 "mlx/parser.mly" + let _1 : ( +# 786 "mlx/parser.mly" (string) -# 21187 "mlx/parser.ml" - ) = Obj.magic _1_inlined1 in - let _3 : (Asttypes.private_flag) = Obj.magic _3 in - let _1 : (Parsetree.attributes) = Obj.magic _1 in +# 35260 "mlx/parser.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__11_ in - let _v : ((string Ppxlib.loc * Asttypes.private_flag * Parsetree.class_field_kind) * - Parsetree.attributes) = let _7 = -# 2549 "mlx/parser.mly" - ( xs ) -# 21198 "mlx/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 = -# 3562 "mlx/parser.mly" - ( _1 ) -# 21206 "mlx/parser.ml" - in + let _endpos = _endpos_xs_ in + let _v : (string Ppxlib.loc list) = let x = let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 21214 "mlx/parser.ml" +# 35272 "mlx/parser.ml" in - let _startpos__4_ = _startpos__1_inlined1_ in - let _2 = -# 3922 "mlx/parser.mly" - ( _1 ) -# 21221 "mlx/parser.ml" + +# 223 "" + ( x :: xs ) +# 35278 "mlx/parser.ml" in - let (_endpos__2_, _startpos__2_) = (_endpos__1_, _startpos__1_) in - let _1 = -# 3824 "mlx/parser.mly" - ( Fresh ) -# 21227 "mlx/parser.ml" + { + 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 = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let s : ( +# 826 "mlx/parser.mly" + (string * Location.t * string option) +# 35299 "mlx/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 = +# 4162 "mlx/parser.mly" + ( let body, _, _ = s in body ) +# 35307 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos__0_, _endpos__0_) in - let _endpos = _endpos__11_ in - let _symbolstartpos = if _startpos__1_ != _endpos__1_ then - _startpos__1_ - else - if _startpos__2_ != _endpos__2_ then - _startpos__2_ - else - if _startpos__3_ != _endpos__3_ then - _startpos__3_ - else - _startpos__4_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2016 "mlx/parser.mly" - ( let poly_exp_loc = (_startpos__7_, _endpos__11_) in - let poly_exp = - let exp, poly = - (* it seems odd to use the global ~loc here while poly_exp_loc - is tighter, but this is what ocamlyacc does; - TODO improve parser.mly *) - wrap_type_annotation ~loc:_sloc _7 _9 _11 in - ghexp ~loc:poly_exp_loc (Pexp_poly(exp, Some poly)) in - (_4, _3, - Cfk_concrete (_1, poly_exp)), _2 ) -# 21254 "mlx/parser.ml" +# 221 "" + ( [ x ] ) +# 35312 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21263,152 +35321,35 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _11; - MenhirLib.EngineTypes.startp = _startpos__11_; - MenhirLib.EngineTypes.endp = _endpos__11_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _10; - MenhirLib.EngineTypes.startp = _startpos__10_; - MenhirLib.EngineTypes.endp = _endpos__10_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _9; - MenhirLib.EngineTypes.startp = _startpos__9_; - MenhirLib.EngineTypes.endp = _endpos__9_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _8; - MenhirLib.EngineTypes.startp = _startpos__8_; - MenhirLib.EngineTypes.endp = _endpos__8_; - 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 = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 = _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 = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _11 : (Parsetree.expression) = Obj.magic _11 in - let _10 : unit = Obj.magic _10 in - let _9 : (Parsetree.core_type) = Obj.magic _9 in - let _8 : unit = Obj.magic _8 in - let xs : (string Ppxlib.loc list) = Obj.magic xs in - let _6 : unit = Obj.magic _6 in - let _5 : unit = Obj.magic _5 in - let _1_inlined2 : ( -# 714 "mlx/parser.mly" - (string) -# 21342 "mlx/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 - let _1 : unit = Obj.magic _1 in + let xs : (string list) = Obj.magic xs in + let s : ( +# 826 "mlx/parser.mly" + (string * Location.t * string option) +# 35340 "mlx/parser.ml" + ) = Obj.magic s in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__11_ in - let _v : ((string Ppxlib.loc * Asttypes.private_flag * Parsetree.class_field_kind) * - Parsetree.attributes) = let _7 = -# 2549 "mlx/parser.mly" - ( xs ) -# 21354 "mlx/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 = -# 3562 "mlx/parser.mly" - ( _1 ) -# 21362 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 21370 "mlx/parser.ml" - - in - let _startpos__4_ = _startpos__1_inlined2_ in - let _2 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 21379 "mlx/parser.ml" - - in - let (_endpos__2_, _startpos__2_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in - let _1 = -# 3825 "mlx/parser.mly" - ( Override ) -# 21386 "mlx/parser.ml" + let _startpos = _startpos_s_ in + let _endpos = _endpos_xs_ in + let _v : (string list) = let x = +# 4162 "mlx/parser.mly" + ( let body, _, _ = s in body ) +# 35348 "mlx/parser.ml" in - let _endpos = _endpos__11_ in - let _symbolstartpos = if _startpos__1_ != _endpos__1_ then - _startpos__1_ - else - if _startpos__2_ != _endpos__2_ then - _startpos__2_ - else - if _startpos__3_ != _endpos__3_ then - _startpos__3_ - else - _startpos__4_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2016 "mlx/parser.mly" - ( let poly_exp_loc = (_startpos__7_, _endpos__11_) in - let poly_exp = - let exp, poly = - (* it seems odd to use the global ~loc here while poly_exp_loc - is tighter, but this is what ocamlyacc does; - TODO improve parser.mly *) - wrap_type_annotation ~loc:_sloc _7 _9 _11 in - ghexp ~loc:poly_exp_loc (Pexp_poly(exp, Some poly)) in - (_4, _3, - Cfk_concrete (_1, poly_exp)), _2 ) -# 21412 "mlx/parser.ml" +# 223 "" + ( x :: xs ) +# 35353 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21421,23 +35362,24 @@ module Tables = struct 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.semv = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 714 "mlx/parser.mly" - (string) -# 21433 "mlx/parser.ml" - ) = Obj.magic _1 in + let ty : (Parsetree.core_type) = Obj.magic ty in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Ppxlib.longident) = -# 3659 "mlx/parser.mly" - ( Lident _1 ) -# 21441 "mlx/parser.ml" + let _startpos = _startpos_ty_ in + let _endpos = _endpos_ty_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4191 "mlx/parser.mly" + ( Public ) +# 35378 "mlx/parser.ml" + in + +# 3340 "mlx/parser.mly" + ( (Ptype_abstract, priv, Some ty) ) +# 35383 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21450,37 +35392,31 @@ 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 = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; 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; - }; + 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 : ( -# 714 "mlx/parser.mly" - (string) -# 21474 "mlx/parser.ml" - ) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let ty : (Parsetree.core_type) = Obj.magic ty 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 : (Ppxlib.longident) = -# 3660 "mlx/parser.mly" - ( Ldot(_1,_3) ) -# 21484 "mlx/parser.ml" + let _endpos = _endpos_ty_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4192 "mlx/parser.mly" + ( Private ) +# 35415 "mlx/parser.ml" + in + +# 3340 "mlx/parser.mly" + ( (Ptype_abstract, priv, Some ty) ) +# 35420 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21493,23 +35429,85 @@ module Tables = struct 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.semv = cs; + MenhirLib.EngineTypes.startp = _startpos_cs_; + MenhirLib.EngineTypes.endp = _endpos_cs_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 767 "mlx/parser.mly" - (string) -# 21505 "mlx/parser.ml" - ) = Obj.magic _1 in + let cs : (Parsetree.constructor_declaration list) = Obj.magic cs in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_cs_ in + let _endpos = _endpos_cs_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4191 "mlx/parser.mly" + ( Public ) +# 35445 "mlx/parser.ml" + in + let oty = + let _1 = +# 124 "" + ( None ) +# 35451 "mlx/parser.ml" + in + +# 3356 "mlx/parser.mly" + ( _1 ) +# 35456 "mlx/parser.ml" + + in + +# 3344 "mlx/parser.mly" + ( (Ptype_variant cs, priv, oty) ) +# 35462 "mlx/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 = cs; + MenhirLib.EngineTypes.startp = _startpos_cs_; + MenhirLib.EngineTypes.endp = _endpos_cs_; + 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 cs : (Parsetree.constructor_declaration list) = Obj.magic cs 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__1_ in - let _v : (Ppxlib.longident) = -# 3659 "mlx/parser.mly" - ( Lident _1 ) -# 21513 "mlx/parser.ml" + let _endpos = _endpos_cs_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4192 "mlx/parser.mly" + ( Private ) +# 35494 "mlx/parser.ml" + in + let oty = + let _1 = +# 124 "" + ( None ) +# 35500 "mlx/parser.ml" + in + +# 3356 "mlx/parser.mly" + ( _1 ) +# 35505 "mlx/parser.ml" + + in + +# 3344 "mlx/parser.mly" + ( (Ptype_variant cs, priv, oty) ) +# 35511 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21522,9 +35520,9 @@ 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 = cs; + MenhirLib.EngineTypes.startp = _startpos_cs_; + MenhirLib.EngineTypes.endp = _endpos_cs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -21532,27 +35530,47 @@ module Tables = struct 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.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _3 : ( -# 767 "mlx/parser.mly" - (string) -# 21546 "mlx/parser.ml" - ) = Obj.magic _3 in + let cs : (Parsetree.constructor_declaration list) = Obj.magic cs in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let x : (Parsetree.core_type) = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Ppxlib.longident) = -# 3660 "mlx/parser.mly" - ( Ldot(_1,_3) ) -# 21556 "mlx/parser.ml" + let _startpos = _startpos_x_ in + let _endpos = _endpos_cs_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4191 "mlx/parser.mly" + ( Public ) +# 35550 "mlx/parser.ml" + in + let oty = + let _1 = + let x = +# 191 "" + ( x ) +# 35557 "mlx/parser.ml" + in + +# 126 "" + ( Some x ) +# 35562 "mlx/parser.ml" + + in + +# 3356 "mlx/parser.mly" + ( _1 ) +# 35568 "mlx/parser.ml" + + in + +# 3344 "mlx/parser.mly" + ( (Ptype_variant cs, priv, oty) ) +# 35574 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21564,25 +35582,65 @@ module Tables = struct (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; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cs; + MenhirLib.EngineTypes.startp = _startpos_cs_; + MenhirLib.EngineTypes.endp = _endpos_cs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + 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 = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; } = _menhir_stack in - let _1 : (string) = Obj.magic _1 in + let cs : (Parsetree.constructor_declaration list) = Obj.magic cs in + let _1 : unit = Obj.magic _1 in + let _2 : unit = Obj.magic _2 in + let x : (Parsetree.core_type) = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Ppxlib.longident) = let _1 = -# 3715 "mlx/parser.mly" - ( _1 ) -# 21581 "mlx/parser.ml" + let _startpos = _startpos_x_ in + let _endpos = _endpos_cs_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4192 "mlx/parser.mly" + ( Private ) +# 35620 "mlx/parser.ml" in + let oty = + let _1 = + let x = +# 191 "" + ( x ) +# 35627 "mlx/parser.ml" + in + +# 126 "" + ( Some x ) +# 35632 "mlx/parser.ml" + + in + +# 3356 "mlx/parser.mly" + ( _1 ) +# 35638 "mlx/parser.ml" + + in -# 3659 "mlx/parser.mly" - ( Lident _1 ) -# 21586 "mlx/parser.ml" +# 3344 "mlx/parser.mly" + ( (Ptype_variant cs, priv, oty) ) +# 35644 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21594,46 +35652,37 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.state = _menhir_s; 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; - }; - }; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _3 : unit = Obj.magic _3 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 _startpos = _startpos__3_ in let _endpos = _endpos__3_ in - let _v : (Ppxlib.longident) = let _1 = + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4191 "mlx/parser.mly" + ( Public ) +# 35669 "mlx/parser.ml" + in + let oty = let _1 = -# 3639 "mlx/parser.mly" - ( "::" ) -# 21626 "mlx/parser.ml" +# 124 "" + ( None ) +# 35675 "mlx/parser.ml" in -# 3715 "mlx/parser.mly" - ( _1 ) -# 21631 "mlx/parser.ml" +# 3356 "mlx/parser.mly" + ( _1 ) +# 35680 "mlx/parser.ml" in -# 3659 "mlx/parser.mly" - ( Lident _1 ) -# 21637 "mlx/parser.ml" +# 3348 "mlx/parser.mly" + ( (Ptype_open, priv, oty) ) +# 35686 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21645,25 +35694,44 @@ module Tables = struct (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; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + 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 _1 : (string) = Obj.magic _1 in + let _3 : unit = Obj.magic _3 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__1_ in - let _v : (Ppxlib.longident) = let _1 = -# 3715 "mlx/parser.mly" - ( _1 ) -# 21662 "mlx/parser.ml" + let _endpos = _endpos__3_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4192 "mlx/parser.mly" + ( Private ) +# 35718 "mlx/parser.ml" in + let oty = + let _1 = +# 124 "" + ( None ) +# 35724 "mlx/parser.ml" + in + +# 3356 "mlx/parser.mly" + ( _1 ) +# 35729 "mlx/parser.ml" + + in -# 3659 "mlx/parser.mly" - ( Lident _1 ) -# 21667 "mlx/parser.ml" +# 3348 "mlx/parser.mly" + ( (Ptype_open, priv, oty) ) +# 35735 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21676,9 +35744,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -21686,31 +35754,47 @@ module Tables = struct 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.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _1_inlined1 : (string) = Obj.magic _1_inlined1 in + let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let x : (Parsetree.core_type) = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined1_ in - let _v : (Ppxlib.longident) = let _3 = - let _1 = _1_inlined1 in + let _startpos = _startpos_x_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4191 "mlx/parser.mly" + ( Public ) +# 35774 "mlx/parser.ml" + in + let oty = + let _1 = + let x = +# 191 "" + ( x ) +# 35781 "mlx/parser.ml" + in + +# 126 "" + ( Some x ) +# 35786 "mlx/parser.ml" + + in -# 3715 "mlx/parser.mly" - ( _1 ) -# 21708 "mlx/parser.ml" +# 3356 "mlx/parser.mly" + ( _1 ) +# 35792 "mlx/parser.ml" in -# 3660 "mlx/parser.mly" - ( Ldot(_1,_3) ) -# 21714 "mlx/parser.ml" +# 3348 "mlx/parser.mly" + ( (Ptype_open, priv, oty) ) +# 35798 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21728,55 +35812,59 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__3_; 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; 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; + 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 = _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 = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in let _3 : unit = Obj.magic _3 in - let _2_inlined1 : unit = Obj.magic _2_inlined1 in - let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let x : (Parsetree.core_type) = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in + let _startpos = _startpos_x_ in let _endpos = _endpos__3_ in - let _v : (Ppxlib.longident) = let _3 = - let (_2, _1) = (_2_inlined1, _1_inlined1) in - let _1 = -# 3639 "mlx/parser.mly" - ( "::" ) -# 21769 "mlx/parser.ml" - in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4192 "mlx/parser.mly" + ( Private ) +# 35844 "mlx/parser.ml" + in + let oty = + let _1 = + let x = +# 191 "" + ( x ) +# 35851 "mlx/parser.ml" + in + +# 126 "" + ( Some x ) +# 35856 "mlx/parser.ml" + + in -# 3715 "mlx/parser.mly" - ( _1 ) -# 21774 "mlx/parser.ml" +# 3356 "mlx/parser.mly" + ( _1 ) +# 35862 "mlx/parser.ml" in -# 3660 "mlx/parser.mly" - ( Ldot(_1,_3) ) -# 21780 "mlx/parser.ml" +# 3348 "mlx/parser.mly" + ( (Ptype_open, priv, oty) ) +# 35868 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21789,41 +35877,50 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + 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 = ls; + MenhirLib.EngineTypes.startp = _startpos_ls_; + MenhirLib.EngineTypes.endp = _endpos_ls_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _1_inlined1 : (string) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let ls : (Parsetree.label_declaration list) = Obj.magic ls in + let _3 : unit = Obj.magic _3 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined1_ in - let _v : (Ppxlib.longident) = let _3 = - let _1 = _1_inlined1 in + let _startpos = _startpos__3_ in + let _endpos = _endpos__5_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4191 "mlx/parser.mly" + ( Public ) +# 35907 "mlx/parser.ml" + in + let oty = + let _1 = +# 124 "" + ( None ) +# 35913 "mlx/parser.ml" + in -# 3715 "mlx/parser.mly" - ( _1 ) -# 21821 "mlx/parser.ml" +# 3356 "mlx/parser.mly" + ( _1 ) +# 35918 "mlx/parser.ml" in -# 3660 "mlx/parser.mly" - ( Ldot(_1,_3) ) -# 21827 "mlx/parser.ml" +# 3352 "mlx/parser.mly" + ( (Ptype_record ls, priv, oty) ) +# 35924 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21835,20 +35932,58 @@ module Tables = struct (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; + 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 = ls; + MenhirLib.EngineTypes.startp = _startpos_ls_; + MenhirLib.EngineTypes.endp = _endpos_ls_; + 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 = _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 : (string) = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let ls : (Parsetree.label_declaration list) = Obj.magic ls in + let _3 : unit = Obj.magic _3 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__1_ in - let _v : (Ppxlib.longident) = -# 3659 "mlx/parser.mly" - ( Lident _1 ) -# 21852 "mlx/parser.ml" + let _endpos = _endpos__5_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4192 "mlx/parser.mly" + ( Private ) +# 35970 "mlx/parser.ml" + in + let oty = + let _1 = +# 124 "" + ( None ) +# 35976 "mlx/parser.ml" + in + +# 3356 "mlx/parser.mly" + ( _1 ) +# 35981 "mlx/parser.ml" + + in + +# 3352 "mlx/parser.mly" + ( (Ptype_record ls, priv, oty) ) +# 35987 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21861,62 +35996,71 @@ 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 = _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 = ls; + MenhirLib.EngineTypes.startp = _startpos_ls_; + MenhirLib.EngineTypes.endp = _endpos_ls_; 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 = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; } = _menhir_stack in - let _3 : (string) = Obj.magic _3 in + let _5 : unit = Obj.magic _5 in + let ls : (Parsetree.label_declaration list) = Obj.magic ls in + let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let x : (Parsetree.core_type) = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Ppxlib.longident) = -# 3660 "mlx/parser.mly" - ( Ldot(_1,_3) ) -# 21891 "mlx/parser.ml" + let _startpos = _startpos_x_ in + let _endpos = _endpos__5_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4191 "mlx/parser.mly" + ( Public ) +# 36040 "mlx/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 : ( -# 714 "mlx/parser.mly" - (string) -# 21912 "mlx/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 : (Ppxlib.longident) = -# 3659 "mlx/parser.mly" - ( Lident _1 ) -# 21920 "mlx/parser.ml" + let oty = + let _1 = + let x = +# 191 "" + ( x ) +# 36047 "mlx/parser.ml" + in + +# 126 "" + ( Some x ) +# 36052 "mlx/parser.ml" + + in + +# 3356 "mlx/parser.mly" + ( _1 ) +# 36058 "mlx/parser.ml" + + in + +# 3352 "mlx/parser.mly" + ( (Ptype_record ls, priv, oty) ) +# 36064 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21929,66 +36073,78 @@ 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 = _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 = ls; + MenhirLib.EngineTypes.startp = _startpos_ls_; + MenhirLib.EngineTypes.endp = _endpos_ls_; 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + 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 = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; }; } = _menhir_stack in - let _3 : ( -# 714 "mlx/parser.mly" - (string) -# 21953 "mlx/parser.ml" - ) = Obj.magic _3 in + let _5 : unit = Obj.magic _5 in + let ls : (Parsetree.label_declaration list) = Obj.magic ls in + let _3 : unit = Obj.magic _3 in + let _1 : unit = Obj.magic _1 in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let x : (Parsetree.core_type) = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Ppxlib.longident) = -# 3660 "mlx/parser.mly" - ( Ldot(_1,_3) ) -# 21963 "mlx/parser.ml" + let _startpos = _startpos_x_ in + let _endpos = _endpos__5_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4192 "mlx/parser.mly" + ( Private ) +# 36124 "mlx/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 : ( -# 767 "mlx/parser.mly" - (string) -# 21984 "mlx/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 : (Ppxlib.longident) = -# 3659 "mlx/parser.mly" - ( Lident _1 ) -# 21992 "mlx/parser.ml" + let oty = + let _1 = + let x = +# 191 "" + ( x ) +# 36131 "mlx/parser.ml" + in + +# 126 "" + ( Some x ) +# 36136 "mlx/parser.ml" + + in + +# 3356 "mlx/parser.mly" + ( _1 ) +# 36142 "mlx/parser.ml" + + in + +# 3352 "mlx/parser.mly" + ( (Ptype_record ls, priv, oty) ) +# 36148 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22006,9 +36162,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 = meth_list; + MenhirLib.EngineTypes.startp = _startpos_meth_list_; + MenhirLib.EngineTypes.endp = _endpos_meth_list_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -22018,20 +36174,32 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : ( -# 767 "mlx/parser.mly" - (string) -# 22025 "mlx/parser.ml" - ) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _3 : unit = Obj.magic _3 in + let meth_list : (Parsetree.object_field list * Asttypes.closed_flag) = Obj.magic meth_list 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 : (Ppxlib.longident) = -# 3660 "mlx/parser.mly" - ( Ldot(_1,_3) ) -# 22035 "mlx/parser.ml" + let _v : (Parsetree.core_type) = let _1 = + let _1 = +# 3826 "mlx/parser.mly" + ( let (f, c) = meth_list in Ptyp_object (f, c) ) +# 36188 "mlx/parser.ml" + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1015 "mlx/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 36197 "mlx/parser.ml" + + in + +# 3830 "mlx/parser.mly" + ( _1 ) +# 36203 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22043,20 +36211,43 @@ module Tables = struct (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; + 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 _1 : (string) = Obj.magic _1 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__1_ in - let _v : (Ppxlib.longident) = -# 3659 "mlx/parser.mly" - ( Lident _1 ) -# 22060 "mlx/parser.ml" + let _endpos = _endpos__2_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = +# 3828 "mlx/parser.mly" + ( Ptyp_object ([], Closed) ) +# 36236 "mlx/parser.ml" + in + let _endpos__1_ = _endpos__2_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1015 "mlx/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 36245 "mlx/parser.ml" + + in + +# 3830 "mlx/parser.mly" + ( _1 ) +# 36251 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22069,33 +36260,77 @@ 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = me; + MenhirLib.EngineTypes.startp = _startpos_me_; + MenhirLib.EngineTypes.endp = _endpos_me_; 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + 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 : (string) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let me : (Parsetree.module_expr) = Obj.magic me in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let ext : (string Ppxlib.loc option) = Obj.magic ext 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 : (Ppxlib.longident) = -# 3660 "mlx/parser.mly" - ( Ldot(_1,_3) ) -# 22099 "mlx/parser.ml" + let _endpos = _endpos__1_inlined2_ in + let _v : (Parsetree.module_expr Parsetree.open_infos * string Ppxlib.loc option) = let attrs2 = + let _1 = _1_inlined2 in + +# 4333 "mlx/parser.mly" + ( _1 ) +# 36306 "mlx/parser.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined2_ in + let attrs1 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 36315 "mlx/parser.ml" + + in + let override = +# 4238 "mlx/parser.mly" + ( Fresh ) +# 36321 "mlx/parser.ml" + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1674 "mlx/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 + ) +# 36334 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22107,20 +36342,88 @@ module Tables = struct (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; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = me; + MenhirLib.EngineTypes.startp = _startpos_me_; + MenhirLib.EngineTypes.endp = _endpos_me_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + 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 _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let me : (Parsetree.module_expr) = Obj.magic me in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let ext : (string Ppxlib.loc option) = Obj.magic ext in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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__1_ in - let _v : (Ppxlib.longident) = -# 3693 "mlx/parser.mly" - ( _1 ) -# 22124 "mlx/parser.ml" + let _endpos = _endpos__1_inlined3_ in + let _v : (Parsetree.module_expr Parsetree.open_infos * string Ppxlib.loc option) = let attrs2 = + let _1 = _1_inlined3 in + +# 4333 "mlx/parser.mly" + ( _1 ) +# 36396 "mlx/parser.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let attrs1 = + let _1 = _1_inlined2 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 36405 "mlx/parser.ml" + + in + let override = + let _1 = _1_inlined1 in + +# 4239 "mlx/parser.mly" + ( Override ) +# 36413 "mlx/parser.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1674 "mlx/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 + ) +# 36427 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22133,43 +36436,89 @@ module Tables = struct 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.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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 = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + 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 : (Ppxlib.longident) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let ext : (string Ppxlib.loc option) = Obj.magic ext 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 : (Ppxlib.longident) = let _endpos = _endpos__4_ in + let _endpos = _endpos__1_inlined3_ in + let _v : (Mlx_shim.Longident.t Ppxlib.loc Parsetree.open_infos * + string Ppxlib.loc option) = let attrs2 = + let _1 = _1_inlined3 in + +# 4333 "mlx/parser.mly" + ( _1 ) +# 36483 "mlx/parser.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 36495 "mlx/parser.ml" + + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 36503 "mlx/parser.ml" + + in + let override = +# 4238 "mlx/parser.mly" + ( Fresh ) +# 36509 "mlx/parser.ml" + in + let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3695 "mlx/parser.mly" - ( lapply ~loc:_sloc _1 _3 ) -# 22173 "mlx/parser.ml" +# 1689 "mlx/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 + ) +# 36522 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22182,34 +36531,99 @@ 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 = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + 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 _3 : unit = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let ext : (string Ppxlib.loc option) = Obj.magic ext in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : (Ppxlib.longident) = let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _endpos = _endpos__1_inlined4_ in + let _v : (Mlx_shim.Longident.t Ppxlib.loc Parsetree.open_infos * + string Ppxlib.loc option) = let attrs2 = + let _1 = _1_inlined4 in + +# 4333 "mlx/parser.mly" + ( _1 ) +# 36585 "mlx/parser.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined4_ in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 36597 "mlx/parser.ml" + + in + let attrs1 = + let _1 = _1_inlined2 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 36605 "mlx/parser.ml" + + in + let override = + let _1 = _1_inlined1 in + +# 4239 "mlx/parser.mly" + ( Override ) +# 36613 "mlx/parser.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3697 "mlx/parser.mly" - ( expecting _loc__3_ "module path" ) -# 22213 "mlx/parser.ml" +# 1689 "mlx/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 + ) +# 36627 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22227,14 +36641,18 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : ( +# 812 "mlx/parser.mly" + (string) +# 36648 "mlx/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 : (Ppxlib.longident) = -# 3690 "mlx/parser.mly" - ( _1 ) -# 22238 "mlx/parser.ml" + let _v : (string) = +# 4010 "mlx/parser.mly" + ( _1 ) +# 36656 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22246,27 +36664,24 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = me; - MenhirLib.EngineTypes.startp = _startpos_me_; - MenhirLib.EngineTypes.endp = _endpos_me_; - 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 me : (Parsetree.module_expr) = Obj.magic me in - let _1 : unit = Obj.magic _1 in + let _1 : ( +# 767 "mlx/parser.mly" + (string) +# 36677 "mlx/parser.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_me_ in - let _v : (Parsetree.module_expr) = -# 1477 "mlx/parser.mly" - ( me ) -# 22270 "mlx/parser.ml" + let _endpos = _endpos__1_ in + let _v : (string) = +# 4011 "mlx/parser.mly" + ( _1 ) +# 36685 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22278,28 +36693,24 @@ module Tables = struct (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; - }; + 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 _1 : ( +# 768 "mlx/parser.mly" + (string) +# 36706 "mlx/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 : (Parsetree.module_expr) = let _loc__1_ = (_startpos__1_, _endpos__1_) in - -# 1479 "mlx/parser.mly" - ( expecting _loc__1_ "=" ) -# 22303 "mlx/parser.ml" + let _endpos = _endpos__1_ in + let _v : (string) = +# 4012 "mlx/parser.mly" + ( _1 ) +# 36714 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22312,9 +36723,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = me; - MenhirLib.EngineTypes.startp = _startpos_me_; - MenhirLib.EngineTypes.endp = _endpos_me_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _3; @@ -22322,9 +36733,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = mty; - MenhirLib.EngineTypes.startp = _startpos_mty_; - MenhirLib.EngineTypes.endp = _endpos_mty_; + 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; @@ -22335,82 +36746,21 @@ module Tables = struct }; }; } = _menhir_stack in - let me : (Parsetree.module_expr) = Obj.magic me in - let _3 : unit = Obj.magic _3 in - let mty : (Parsetree.module_type) = Obj.magic mty in - let _1 : unit = Obj.magic _1 in + let _4 : unit = Obj.magic _4 in + let _3 : (string) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 766 "mlx/parser.mly" + (string) +# 36756 "mlx/parser.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_me_ in - let _v : (Parsetree.module_expr) = let _1 = - let _1 = -# 1482 "mlx/parser.mly" - ( Pmod_constraint(me, mty) ) -# 22350 "mlx/parser.ml" - in - let _endpos__1_ = _endpos_me_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 944 "mlx/parser.mly" - ( mkmod ~loc:_sloc _1 ) -# 22359 "mlx/parser.ml" - - in - -# 1486 "mlx/parser.mly" - ( _1 ) -# 22365 "mlx/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 = body; - MenhirLib.EngineTypes.startp = _startpos_body_; - MenhirLib.EngineTypes.endp = _endpos_body_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = arg_and_pos; - MenhirLib.EngineTypes.startp = _startpos_arg_and_pos_; - MenhirLib.EngineTypes.endp = _endpos_arg_and_pos_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let body : (Parsetree.module_expr) = Obj.magic body in - let arg_and_pos : (Lexing.position * Parsetree.functor_parameter) = Obj.magic arg_and_pos in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_arg_and_pos_ in - let _endpos = _endpos_body_ in - let _v : (Parsetree.module_expr) = let _1 = - let _1 = -# 1484 "mlx/parser.mly" - ( let (_, arg) = arg_and_pos in - Pmod_functor(arg, body) ) -# 22399 "mlx/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 - -# 944 "mlx/parser.mly" - ( mkmod ~loc:_sloc _1 ) -# 22408 "mlx/parser.ml" - - in - -# 1486 "mlx/parser.mly" - ( _1 ) -# 22414 "mlx/parser.ml" + let _endpos = _endpos__4_ in + let _v : (string) = +# 4013 "mlx/parser.mly" + ( "."^ _1 ^"(" ^ _3 ^ ")" ) +# 36764 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22423,26 +36773,51 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = mty; - MenhirLib.EngineTypes.startp = _startpos_mty_; - MenhirLib.EngineTypes.endp = _endpos_mty_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; 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 = _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 mty : (Parsetree.module_type) = Obj.magic mty in - let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let _4 : unit = Obj.magic _4 in + let _3 : (string) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 766 "mlx/parser.mly" + (string) +# 36813 "mlx/parser.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_mty_ in - let _v : (Parsetree.module_type) = -# 1729 "mlx/parser.mly" - ( mty ) -# 22446 "mlx/parser.ml" + let _endpos = _endpos__5_ in + let _v : (string) = +# 4014 "mlx/parser.mly" + ( "."^ _1 ^ "(" ^ _3 ^ ")<-" ) +# 36821 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22455,27 +36830,44 @@ module Tables = struct 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.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; 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 _4 : unit = Obj.magic _4 in + let _3 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _1 : ( +# 766 "mlx/parser.mly" + (string) +# 36863 "mlx/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 : (Parsetree.module_type) = let _loc__1_ = (_startpos__1_, _endpos__1_) in - -# 1731 "mlx/parser.mly" - ( expecting _loc__1_ ":" ) -# 22479 "mlx/parser.ml" + let _endpos = _endpos__4_ in + let _v : (string) = +# 4015 "mlx/parser.mly" + ( "."^ _1 ^"[" ^ _3 ^ "]" ) +# 36871 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22488,43 +36880,51 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = body; - MenhirLib.EngineTypes.startp = _startpos_body_; - MenhirLib.EngineTypes.endp = _endpos_body_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = arg_and_pos; - MenhirLib.EngineTypes.startp = _startpos_arg_and_pos_; - MenhirLib.EngineTypes.endp = _endpos_arg_and_pos_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 body : (Parsetree.module_type) = Obj.magic body in - let arg_and_pos : (Lexing.position * Parsetree.functor_parameter) = Obj.magic arg_and_pos in + let _5 : unit = Obj.magic _5 in + let _4 : unit = Obj.magic _4 in + let _3 : (string) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 766 "mlx/parser.mly" + (string) +# 36920 "mlx/parser.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_arg_and_pos_ in - let _endpos = _endpos_body_ in - let _v : (Parsetree.module_type) = let _1 = - let _1 = -# 1734 "mlx/parser.mly" - ( let (_, arg) = arg_and_pos in - Pmty_functor(arg, body) ) -# 22513 "mlx/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 - -# 946 "mlx/parser.mly" - ( mkmty ~loc:_sloc _1 ) -# 22522 "mlx/parser.ml" - - in - -# 1737 "mlx/parser.mly" - ( _1 ) -# 22528 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : (string) = +# 4016 "mlx/parser.mly" + ( "."^ _1 ^ "[" ^ _3 ^ "]<-" ) +# 36928 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22542,14 +36942,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -22561,27 +36961,20 @@ module Tables = struct }; } = _menhir_stack in let _4 : unit = Obj.magic _4 in - let s : (Parsetree.structure) = Obj.magic s in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in + let _3 : (string) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 766 "mlx/parser.mly" + (string) +# 36970 "mlx/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 : (Parsetree.module_expr) = let attrs = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 22576 "mlx/parser.ml" - - in - let _endpos = _endpos__4_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1315 "mlx/parser.mly" - ( mkmod ~loc:_sloc ~attrs (Pmod_structure s) ) -# 22585 "mlx/parser.ml" + let _v : (string) = +# 4017 "mlx/parser.mly" + ( "."^ _1 ^"{" ^ _3 ^ "}" ) +# 36978 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22594,50 +36987,51 @@ module Tables = struct 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.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { 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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 _5 : unit = Obj.magic _5 in let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.structure) = Obj.magic _3 in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in + let _3 : (string) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 766 "mlx/parser.mly" + (string) +# 37027 "mlx/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 : (Parsetree.module_expr) = let _2 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 22633 "mlx/parser.ml" - - in - let _loc__4_ = (_startpos__4_, _endpos__4_) in - let _loc__1_ = (_startpos__1_, _endpos__1_) in - -# 1317 "mlx/parser.mly" - ( unclosed "struct" _loc__1_ "end" _loc__4_ ) -# 22641 "mlx/parser.ml" + let _endpos = _endpos__5_ in + let _v : (string) = +# 4018 "mlx/parser.mly" + ( "."^ _1 ^ "{" ^ _3 ^ "}<-" ) +# 37035 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22649,28 +37043,24 @@ module Tables = struct (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; - }; + 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 _1 : ( +# 823 "mlx/parser.mly" + (string) +# 37056 "mlx/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 : (Parsetree.module_expr) = let _loc__1_ = (_startpos__1_, _endpos__1_) in - -# 1319 "mlx/parser.mly" - ( expecting _loc__1_ "struct" ) -# 22674 "mlx/parser.ml" + let _endpos = _endpos__1_ in + let _v : (string) = +# 4019 "mlx/parser.mly" + ( _1 ) +# 37064 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22682,71 +37072,54 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = me; - MenhirLib.EngineTypes.startp = _startpos_me_; - MenhirLib.EngineTypes.endp = _endpos_me_; - 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 me : (Parsetree.module_expr) = Obj.magic me in - let _4 : unit = Obj.magic _4 in - let _1_inlined2 : ((Lexing.position * Parsetree.functor_parameter) list) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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_me_ in - let _v : (Parsetree.module_expr) = let args = - let _1 = _1_inlined2 in - -# 1281 "mlx/parser.mly" - ( _1 ) -# 22729 "mlx/parser.ml" - - in - let attrs = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 22737 "mlx/parser.ml" - - in - let _endpos = _endpos_me_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos__1_ in + let _v : (string) = +# 4020 "mlx/parser.mly" + ( "!" ) +# 37089 "mlx/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 = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let op : ( +# 761 "mlx/parser.mly" + (string) +# 37110 "mlx/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 : (string) = let _1 = +# 4024 "mlx/parser.mly" + ( op ) +# 37118 "mlx/parser.ml" + in -# 1321 "mlx/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 - ) ) -# 22750 "mlx/parser.ml" +# 4021 "mlx/parser.mly" + ( _1 ) +# 37123 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22759,19 +37132,28 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = me; - MenhirLib.EngineTypes.startp = _startpos_me_; - MenhirLib.EngineTypes.endp = _endpos_me_; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let me : (Parsetree.module_expr) = Obj.magic me in + let op : ( +# 762 "mlx/parser.mly" + (string) +# 37144 "mlx/parser.ml" + ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_me_ in - let _endpos = _endpos_me_ in - let _v : (Parsetree.module_expr) = -# 1327 "mlx/parser.mly" - ( me ) -# 22775 "mlx/parser.ml" + let _startpos = _startpos_op_ in + let _endpos = _endpos_op_ in + let _v : (string) = let _1 = +# 4025 "mlx/parser.mly" + ( op ) +# 37152 "mlx/parser.ml" + in + +# 4021 "mlx/parser.mly" + ( _1 ) +# 37157 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22783,27 +37165,29 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = attr; - MenhirLib.EngineTypes.startp = _startpos_attr_; - MenhirLib.EngineTypes.endp = _endpos_attr_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = me; - MenhirLib.EngineTypes.startp = _startpos_me_; - MenhirLib.EngineTypes.endp = _endpos_me_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let attr : (Parsetree.attribute) = Obj.magic attr in - let me : (Parsetree.module_expr) = Obj.magic me in + let op : ( +# 763 "mlx/parser.mly" + (string) +# 37178 "mlx/parser.ml" + ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_me_ in - let _endpos = _endpos_attr_ in - let _v : (Parsetree.module_expr) = -# 1329 "mlx/parser.mly" - ( Mod.attr me attr ) -# 22807 "mlx/parser.ml" + let _startpos = _startpos_op_ in + let _endpos = _endpos_op_ in + let _v : (string) = let _1 = +# 4026 "mlx/parser.mly" + ( op ) +# 37186 "mlx/parser.ml" + in + +# 4021 "mlx/parser.mly" + ( _1 ) +# 37191 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22816,46 +37200,28 @@ module Tables = struct 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.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let op : ( +# 764 "mlx/parser.mly" + (string) +# 37212 "mlx/parser.ml" + ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Parsetree.module_expr) = let _1 = - let _1 = - let x = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 22838 "mlx/parser.ml" - - in - -# 1333 "mlx/parser.mly" - ( Pmod_ident x ) -# 22844 "mlx/parser.ml" - - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 944 "mlx/parser.mly" - ( mkmod ~loc:_sloc _1 ) -# 22853 "mlx/parser.ml" - - in + let _startpos = _startpos_op_ in + let _endpos = _endpos_op_ in + let _v : (string) = let _1 = +# 4027 "mlx/parser.mly" + ( op ) +# 37220 "mlx/parser.ml" + in -# 1344 "mlx/parser.mly" - ( _1 ) -# 22859 "mlx/parser.ml" +# 4021 "mlx/parser.mly" + ( _1 ) +# 37225 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22867,43 +37233,29 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = me2; - MenhirLib.EngineTypes.startp = _startpos_me2_; - MenhirLib.EngineTypes.endp = _endpos_me2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = me1; - MenhirLib.EngineTypes.startp = _startpos_me1_; - MenhirLib.EngineTypes.endp = _endpos_me1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let me2 : (Parsetree.module_expr) = Obj.magic me2 in - let me1 : (Parsetree.module_expr) = Obj.magic me1 in + let op : ( +# 765 "mlx/parser.mly" + (string) +# 37246 "mlx/parser.ml" + ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_me1_ in - let _endpos = _endpos_me2_ in - let _v : (Parsetree.module_expr) = let _1 = - let _1 = -# 1336 "mlx/parser.mly" - ( Pmod_apply(me1, me2) ) -# 22892 "mlx/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 - -# 944 "mlx/parser.mly" - ( mkmod ~loc:_sloc _1 ) -# 22901 "mlx/parser.ml" - - in + let _startpos = _startpos_op_ in + let _endpos = _endpos_op_ in + let _v : (string) = let _1 = +# 4028 "mlx/parser.mly" + ( op ) +# 37254 "mlx/parser.ml" + in -# 1344 "mlx/parser.mly" - ( _1 ) -# 22907 "mlx/parser.ml" +# 4021 "mlx/parser.mly" + ( _1 ) +# 37259 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22915,50 +37267,55 @@ module Tables = struct (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 = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = me; - MenhirLib.EngineTypes.startp = _startpos_me_; - MenhirLib.EngineTypes.endp = _endpos_me_; - 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 _3 : unit = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let me : (Parsetree.module_expr) = Obj.magic me in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_me_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.module_expr) = let _1 = - let _1 = -# 1339 "mlx/parser.mly" - ( Pmod_apply_unit me ) -# 22947 "mlx/parser.ml" - in - let (_endpos__1_, _startpos__1_) = (_endpos__3_, _startpos_me_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 944 "mlx/parser.mly" - ( mkmod ~loc:_sloc _1 ) -# 22956 "mlx/parser.ml" - - in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (string) = let _1 = +# 4029 "mlx/parser.mly" + ("+") +# 37284 "mlx/parser.ml" + in + +# 4021 "mlx/parser.mly" + ( _1 ) +# 37289 "mlx/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 : unit = 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) = let _1 = +# 4030 "mlx/parser.mly" + ("+.") +# 37314 "mlx/parser.ml" + in -# 1344 "mlx/parser.mly" - ( _1 ) -# 22962 "mlx/parser.ml" +# 4021 "mlx/parser.mly" + ( _1 ) +# 37319 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22971,35 +37328,24 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ex; - MenhirLib.EngineTypes.startp = _startpos_ex_; - MenhirLib.EngineTypes.endp = _endpos_ex_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let ex : (Parsetree.extension) = Obj.magic ex in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_ex_ in - let _endpos = _endpos_ex_ in - let _v : (Parsetree.module_expr) = let _1 = - let _1 = -# 1342 "mlx/parser.mly" - ( Pmod_extension ex ) -# 22988 "mlx/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 - -# 944 "mlx/parser.mly" - ( mkmod ~loc:_sloc _1 ) -# 22997 "mlx/parser.ml" - - in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (string) = let _1 = +# 4031 "mlx/parser.mly" + ("+=") +# 37344 "mlx/parser.ml" + in -# 1344 "mlx/parser.mly" - ( _1 ) -# 23003 "mlx/parser.ml" +# 4021 "mlx/parser.mly" + ( _1 ) +# 37349 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23012,23 +37358,24 @@ module Tables = struct 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.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : ( -# 767 "mlx/parser.mly" - (string) -# 23024 "mlx/parser.ml" - ) = Obj.magic x in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : (string option) = -# 1298 "mlx/parser.mly" - ( Some x ) -# 23032 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (string) = let _1 = +# 4032 "mlx/parser.mly" + ("-") +# 37374 "mlx/parser.ml" + in + +# 4021 "mlx/parser.mly" + ( _1 ) +# 37379 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23050,10 +37397,15 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : (string option) = -# 1301 "mlx/parser.mly" - ( None ) -# 23057 "mlx/parser.ml" + let _v : (string) = let _1 = +# 4033 "mlx/parser.mly" + ("-.") +# 37404 "mlx/parser.ml" + in + +# 4021 "mlx/parser.mly" + ( _1 ) +# 37409 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23065,113 +37417,25 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined4; - MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; - MenhirLib.EngineTypes.next = { - 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; - 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 _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in - let _1_inlined3 : (Ppxlib.longident) = Obj.magic _1_inlined3 in - let _5 : unit = Obj.magic _5 in - let _1_inlined2 : ( -# 767 "mlx/parser.mly" - (string) -# 23117 "mlx/parser.ml" - ) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let ext : (string Ppxlib.loc option) = Obj.magic ext 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__1_inlined4_ in - let _v : (Parsetree.module_substitution * string Ppxlib.loc option) = let attrs2 = - let _1 = _1_inlined4 in - -# 3918 "mlx/parser.mly" - ( _1 ) -# 23130 "mlx/parser.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined4_ in - let body = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 23142 "mlx/parser.ml" - - in - let uid = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 23153 "mlx/parser.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 23161 "mlx/parser.ml" - - in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos__1_ in + let _v : (string) = let _1 = +# 4034 "mlx/parser.mly" + ("*") +# 37434 "mlx/parser.ml" + in -# 1767 "mlx/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 - ) -# 23175 "mlx/parser.ml" +# 4021 "mlx/parser.mly" + ( _1 ) +# 37439 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23183,79 +37447,25 @@ module Tables = struct (fun _menhir_env -> 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.next = { - 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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; - }; - }; - }; - }; - }; + 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 : unit = Obj.magic _6 in - let _5 : unit = Obj.magic _5 in - let _1_inlined2 : ( -# 767 "mlx/parser.mly" - (string) -# 23228 "mlx/parser.ml" - ) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _2 : (string Ppxlib.loc option) = 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__6_ in - let _v : (Parsetree.module_substitution * string Ppxlib.loc option) = let _4 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 23244 "mlx/parser.ml" - - in - let _3 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 23252 "mlx/parser.ml" - - in - let _loc__6_ = (_startpos__6_, _endpos__6_) in + let _endpos = _endpos__1_ in + let _v : (string) = let _1 = +# 4035 "mlx/parser.mly" + ("%") +# 37464 "mlx/parser.ml" + in -# 1774 "mlx/parser.mly" - ( expecting _loc__6_ "module path" ) -# 23259 "mlx/parser.ml" +# 4021 "mlx/parser.mly" + ( _1 ) +# 37469 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23267,52 +37477,25 @@ module Tables = struct (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 = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; - 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 _4 : unit = Obj.magic _4 in - let s : (Parsetree.signature) = Obj.magic s in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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.module_type) = let attrs = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 23307 "mlx/parser.ml" - - in - let _endpos = _endpos__4_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos__1_ in + let _v : (string) = let _1 = +# 4036 "mlx/parser.mly" + ("=") +# 37494 "mlx/parser.ml" + in -# 1611 "mlx/parser.mly" - ( mkmty ~loc:_sloc ~attrs (Pmty_signature s) ) -# 23316 "mlx/parser.ml" +# 4021 "mlx/parser.mly" + ( _1 ) +# 37499 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23324,51 +37507,25 @@ module Tables = struct (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 = _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 _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.signature) = Obj.magic _3 in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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.module_type) = let _2 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 23364 "mlx/parser.ml" - - in - let _loc__4_ = (_startpos__4_, _endpos__4_) in - let _loc__1_ = (_startpos__1_, _endpos__1_) in + let _endpos = _endpos__1_ in + let _v : (string) = let _1 = +# 4037 "mlx/parser.mly" + ("<") +# 37524 "mlx/parser.ml" + in -# 1613 "mlx/parser.mly" - ( unclosed "sig" _loc__1_ "end" _loc__4_ ) -# 23372 "mlx/parser.ml" +# 4021 "mlx/parser.mly" + ( _1 ) +# 37529 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23380,28 +37537,25 @@ module Tables = struct (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; - }; + 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.module_type) = let _loc__1_ = (_startpos__1_, _endpos__1_) in + let _endpos = _endpos__1_ in + let _v : (string) = let _1 = +# 4038 "mlx/parser.mly" + (">") +# 37554 "mlx/parser.ml" + in -# 1615 "mlx/parser.mly" - ( expecting _loc__1_ "sig" ) -# 23405 "mlx/parser.ml" +# 4021 "mlx/parser.mly" + ( _1 ) +# 37559 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23413,71 +37567,25 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = mty; - MenhirLib.EngineTypes.startp = _startpos_mty_; - MenhirLib.EngineTypes.endp = _endpos_mty_; - 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 mty : (Parsetree.module_type) = Obj.magic mty in - let _4 : unit = Obj.magic _4 in - let _1_inlined2 : ((Lexing.position * Parsetree.functor_parameter) list) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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_mty_ in - let _v : (Parsetree.module_type) = let args = - let _1 = _1_inlined2 in - -# 1281 "mlx/parser.mly" - ( _1 ) -# 23460 "mlx/parser.ml" - - in - let attrs = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 23468 "mlx/parser.ml" - - in - let _endpos = _endpos_mty_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos__1_ in + let _v : (string) = let _1 = +# 4039 "mlx/parser.mly" + ("or") +# 37584 "mlx/parser.ml" + in -# 1619 "mlx/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 - ) ) -# 23481 "mlx/parser.ml" +# 4021 "mlx/parser.mly" + ( _1 ) +# 37589 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23489,59 +37597,25 @@ module Tables = struct (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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - 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; - }; - }; - }; - }; + 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 : (Parsetree.module_expr) = Obj.magic _5 in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _3 : unit = Obj.magic _3 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__5_ in - let _v : (Parsetree.module_type) = let _4 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 23536 "mlx/parser.ml" - - in - let _endpos = _endpos__5_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos__1_ in + let _v : (string) = let _1 = +# 4040 "mlx/parser.mly" + ("||") +# 37614 "mlx/parser.ml" + in -# 1625 "mlx/parser.mly" - ( mkmty ~loc:_sloc ~attrs:_4 (Pmty_typeof _5) ) -# 23545 "mlx/parser.ml" +# 4021 "mlx/parser.mly" + ( _1 ) +# 37619 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23553,34 +37627,25 @@ module Tables = struct (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 = _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; - }; - }; + 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 _2 : (Parsetree.module_type) = 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 : (Parsetree.module_type) = -# 1627 "mlx/parser.mly" - ( _2 ) -# 23584 "mlx/parser.ml" + let _endpos = _endpos__1_ in + let _v : (string) = let _1 = +# 4041 "mlx/parser.mly" + ("&") +# 37644 "mlx/parser.ml" + in + +# 4021 "mlx/parser.mly" + ( _1 ) +# 37649 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23592,36 +37657,25 @@ module Tables = struct (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 = _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; - }; - }; + 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 _2 : (Parsetree.module_type) = 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 : (Parsetree.module_type) = let _loc__3_ = (_startpos__3_, _endpos__3_) in - let _loc__1_ = (_startpos__1_, _endpos__1_) in + let _endpos = _endpos__1_ in + let _v : (string) = let _1 = +# 4042 "mlx/parser.mly" + ("&&") +# 37674 "mlx/parser.ml" + in -# 1629 "mlx/parser.mly" - ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 23625 "mlx/parser.ml" +# 4021 "mlx/parser.mly" + ( _1 ) +# 37679 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23633,27 +37687,25 @@ module Tables = struct (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; - }; + 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.attribute) = Obj.magic _2 in - let _1 : (Parsetree.module_type) = Obj.magic _1 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.module_type) = -# 1631 "mlx/parser.mly" - ( Mty.attr _1 _2 ) -# 23657 "mlx/parser.ml" + let _endpos = _endpos__1_ in + let _v : (string) = let _1 = +# 4043 "mlx/parser.mly" + (":=") +# 37704 "mlx/parser.ml" + in + +# 4021 "mlx/parser.mly" + ( _1 ) +# 37709 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23671,41 +37723,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Ppxlib.longident) = Obj.magic _1 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__1_ in - let _v : (Parsetree.module_type) = let _1 = - let _1 = - let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 23688 "mlx/parser.ml" - - in - -# 1634 "mlx/parser.mly" - ( Pmty_ident _1 ) -# 23694 "mlx/parser.ml" - - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 946 "mlx/parser.mly" - ( mkmty ~loc:_sloc _1 ) -# 23703 "mlx/parser.ml" - - in - -# 1647 "mlx/parser.mly" - ( _1 ) -# 23709 "mlx/parser.ml" + let _v : (bool) = +# 3918 "mlx/parser.mly" + ( true ) +# 37734 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23716,58 +37741,14 @@ module Tables = struct }); (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 : (Parsetree.module_type) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : (Parsetree.module_type) = let _1 = - let _1 = -# 1636 "mlx/parser.mly" - ( Pmty_functor(Unit, _4) ) -# 23756 "mlx/parser.ml" - in - let _endpos__1_ = _endpos__4_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 946 "mlx/parser.mly" - ( mkmty ~loc:_sloc _1 ) -# 23765 "mlx/parser.ml" - - in - -# 1647 "mlx/parser.mly" - ( _1 ) -# 23771 "mlx/parser.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (bool) = +# 3919 "mlx/parser.mly" + ( false ) +# 37752 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23778,51 +37759,14 @@ module Tables = struct }); (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 = _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 : (Parsetree.module_type) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.module_type) = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.module_type) = let _1 = - let _1 = -# 1639 "mlx/parser.mly" - ( Pmty_functor(Named (mknoloc None, _1), _3) ) -# 23811 "mlx/parser.ml" - in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 946 "mlx/parser.mly" - ( mkmty ~loc:_sloc _1 ) -# 23820 "mlx/parser.ml" - - in - -# 1647 "mlx/parser.mly" - ( _1 ) -# 23826 "mlx/parser.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (unit option) = +# 114 "" + ( None ) +# 37770 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23834,64 +37778,38 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - 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; - }; - }; + 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 xs : (Parsetree.with_constraint list) = Obj.magic xs in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.module_type) = Obj.magic _1 in + let x : unit = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos_xs_ in - let _v : (Parsetree.module_type) = let _1 = - let _1 = - let _3 = - let xs = -# 253 "" - ( List.rev xs ) -# 23868 "mlx/parser.ml" - in - -# 1035 "mlx/parser.mly" - ( xs ) -# 23873 "mlx/parser.ml" - - in - -# 1641 "mlx/parser.mly" - ( Pmty_with(_1, _3) ) -# 23879 "mlx/parser.ml" - - in - let _endpos__1_ = _endpos_xs_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 946 "mlx/parser.mly" - ( mkmty ~loc:_sloc _1 ) -# 23889 "mlx/parser.ml" - - in - -# 1647 "mlx/parser.mly" - ( _1 ) -# 23895 "mlx/parser.ml" + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : (unit option) = +# 116 "" + ( Some x ) +# 37795 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (unit option) = +# 114 "" + ( None ) +# 37813 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23904,34 +37822,19 @@ module Tables = struct 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.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Parsetree.extension) = Obj.magic _1 in + let x : unit = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Parsetree.module_type) = let _1 = - let _1 = -# 1645 "mlx/parser.mly" - ( Pmty_extension _1 ) -# 23921 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 946 "mlx/parser.mly" - ( mkmty ~loc:_sloc _1 ) -# 23929 "mlx/parser.ml" - - in - -# 1647 "mlx/parser.mly" - ( _1 ) -# 23935 "mlx/parser.ml" + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : (unit option) = +# 116 "" + ( Some x ) +# 37838 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23942,99 +37845,14 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = typ; - MenhirLib.EngineTypes.startp = _startpos_typ_; - MenhirLib.EngineTypes.endp = _endpos_typ_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; - 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 _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let typ : (Parsetree.module_type option) = Obj.magic typ in - let _1_inlined2 : (string) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let ext : (string Ppxlib.loc option) = Obj.magic ext in - let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined3_ in - let _v : (Parsetree.module_type_declaration * string Ppxlib.loc option) = let attrs2 = - let _1 = _1_inlined3 in - -# 3918 "mlx/parser.mly" - ( _1 ) -# 24004 "mlx/parser.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 24016 "mlx/parser.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 24024 "mlx/parser.ml" - - in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1557 "mlx/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 - ) -# 24038 "mlx/parser.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (string Ppxlib.loc option) = +# 114 "" + ( None ) +# 37856 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24047,104 +37865,48 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = typ; - MenhirLib.EngineTypes.startp = _startpos_typ_; - MenhirLib.EngineTypes.endp = _endpos_typ_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; - 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; - }; - }; - }; - }; - }; - }; + 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_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let typ : (Parsetree.module_type) = Obj.magic typ in - let _6 : unit = Obj.magic _6 in - let _1_inlined2 : (string) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let ext : (string Ppxlib.loc option) = Obj.magic ext in - let _2 : unit = Obj.magic _2 in + let _1_inlined1 : ( +# 786 "mlx/parser.mly" + (string) +# 37883 "mlx/parser.ml" + ) = Obj.magic _1_inlined1 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__1_inlined3_ in - let _v : (Parsetree.module_type_declaration * string Ppxlib.loc option) = let attrs2 = - let _1 = _1_inlined3 in - -# 3918 "mlx/parser.mly" - ( _1 ) -# 24114 "mlx/parser.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" + let _endpos = _endpos__1_inlined1_ in + let _v : (string Ppxlib.loc option) = let x = + let x = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 24126 "mlx/parser.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in +# 37898 "mlx/parser.ml" + + in -# 3922 "mlx/parser.mly" - ( _1 ) -# 24134 "mlx/parser.ml" +# 183 "" + ( x ) +# 37904 "mlx/parser.ml" in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1823 "mlx/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 - ) -# 24148 "mlx/parser.ml" +# 116 "" + ( Some x ) +# 37910 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24155,21 +37917,51 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.core_type option) = +# 114 "" + ( None ) +# 37928 "mlx/parser.ml" + in + { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let x : (Parsetree.core_type) = Obj.magic x 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__1_ in - let _v : (Ppxlib.longident) = -# 3700 "mlx/parser.mly" - ( _1 ) -# 24173 "mlx/parser.ml" + let _endpos = _endpos_x_ in + let _v : (Parsetree.core_type option) = let x = +# 183 "" + ( x ) +# 37960 "mlx/parser.ml" + in + +# 116 "" + ( Some x ) +# 37965 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24184,10 +37976,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in - let _v : (Asttypes.mutable_flag) = -# 3781 "mlx/parser.mly" - ( Immutable ) -# 24191 "mlx/parser.ml" + let _v : (Parsetree.core_type option) = +# 114 "" + ( None ) +# 37983 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24199,20 +37991,32 @@ module Tables = struct (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; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in + let x : (Parsetree.core_type) = Obj.magic x 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__1_ in - let _v : (Asttypes.mutable_flag) = -# 3782 "mlx/parser.mly" - ( Mutable ) -# 24216 "mlx/parser.ml" + let _endpos = _endpos_x_ in + let _v : (Parsetree.core_type option) = let x = +# 183 "" + ( x ) +# 38015 "mlx/parser.ml" + in + +# 116 "" + ( Some x ) +# 38020 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24227,10 +38031,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in - let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3790 "mlx/parser.mly" - ( Immutable, Concrete ) -# 24234 "mlx/parser.ml" + let _v : (Parsetree.expression option) = +# 114 "" + ( None ) +# 38038 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24242,20 +38046,47 @@ module Tables = struct (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; + 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 _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 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__1_ in - let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3792 "mlx/parser.mly" - ( Mutable, Concrete ) -# 24259 "mlx/parser.ml" + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression option) = let x = + let x = + let _1 = _1_inlined1 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 38073 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 38078 "mlx/parser.ml" + + in + +# 183 "" + ( x ) +# 38084 "mlx/parser.ml" + + in + +# 116 "" + ( Some x ) +# 38090 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24267,20 +38098,120 @@ module Tables = struct (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; + 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 = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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__1_ in - let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3794 "mlx/parser.mly" - ( Immutable, Virtual ) -# 24284 "mlx/parser.ml" + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression option) = let x = + let x = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 38149 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 38154 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 38160 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 38171 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 38177 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 38197 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 38203 "mlx/parser.ml" + + in + +# 183 "" + ( x ) +# 38209 "mlx/parser.ml" + + in + +# 116 "" + ( Some x ) +# 38215 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24291,28 +38222,14 @@ module Tables = struct }); (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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3797 "mlx/parser.mly" - ( Mutable, Virtual ) -# 24316 "mlx/parser.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.module_type option) = +# 114 "" + ( None ) +# 38233 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24325,9 +38242,9 @@ module Tables = struct 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.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -24336,15 +38253,38 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : unit = Obj.magic _2 in + let x : (Parsetree.module_type) = Obj.magic x 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 : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3797 "mlx/parser.mly" - ( Mutable, Virtual ) -# 24348 "mlx/parser.ml" + let _endpos = _endpos_x_ in + let _v : (Parsetree.module_type option) = let x = +# 183 "" + ( x ) +# 38265 "mlx/parser.ml" + in + +# 116 "" + ( Some x ) +# 38270 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.pattern option) = +# 114 "" + ( None ) +# 38288 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24357,9 +38297,9 @@ module Tables = struct 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.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -24368,15 +38308,20 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : (string) = Obj.magic _2 in + let x : (Parsetree.pattern) = Obj.magic x 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 : (string) = -# 3752 "mlx/parser.mly" - ( _2 ) -# 24380 "mlx/parser.ml" + let _endpos = _endpos_x_ in + let _v : (Parsetree.pattern option) = let x = +# 183 "" + ( x ) +# 38320 "mlx/parser.ml" + in + +# 116 "" + ( Some x ) +# 38325 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24387,35 +38332,14 @@ module Tables = struct }); (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 : ( -# 714 "mlx/parser.mly" - (string) -# 24401 "mlx/parser.ml" - ) = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (string Ppxlib.loc list) = let x = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 24413 "mlx/parser.ml" - - in - -# 221 "" - ( [ x ] ) -# 24419 "mlx/parser.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.expression option) = +# 114 "" + ( None ) +# 38343 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24428,9 +38352,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + 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 = _1; @@ -24439,29 +38363,38 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let xs : (string Ppxlib.loc list) = Obj.magic xs in - let _1 : ( -# 714 "mlx/parser.mly" - (string) -# 24447 "mlx/parser.ml" - ) = Obj.magic _1 in + let x : (Parsetree.expression) = Obj.magic x 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 : (string Ppxlib.loc list) = let x = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 24459 "mlx/parser.ml" - - in + let _endpos = _endpos_x_ in + let _v : (Parsetree.expression option) = let x = +# 183 "" + ( x ) +# 38375 "mlx/parser.ml" + in -# 223 "" - ( x :: xs ) -# 24465 "mlx/parser.ml" +# 116 "" + ( Some x ) +# 38380 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.type_constraint option) = +# 114 "" + ( None ) +# 38398 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24474,28 +38407,19 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let s : ( -# 754 "mlx/parser.mly" - (string * Location.t * string option) -# 24486 "mlx/parser.ml" - ) = Obj.magic s in + let x : (Parsetree.type_constraint) = Obj.magic x 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 = -# 3748 "mlx/parser.mly" - ( let body, _, _ = s in body ) -# 24494 "mlx/parser.ml" - in - -# 221 "" - ( [ x ] ) -# 24499 "mlx/parser.ml" + let _startpos = _startpos_x_ in + let _endpos = _endpos_x_ in + let _v : (Parsetree.type_constraint option) = +# 116 "" + ( Some x ) +# 38423 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24507,36 +38431,24 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - 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 = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; - 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 xs : (string list) = Obj.magic xs in - let s : ( -# 754 "mlx/parser.mly" - (string * Location.t * string option) -# 24527 "mlx/parser.ml" - ) = Obj.magic s in + let _1 : ( +# 805 "mlx/parser.mly" + (string) +# 38444 "mlx/parser.ml" + ) = Obj.magic _1 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 = -# 3748 "mlx/parser.mly" - ( let body, _, _ = s in body ) -# 24535 "mlx/parser.ml" - in - -# 223 "" - ( x :: xs ) -# 24540 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (string) = +# 4250 "mlx/parser.mly" + ( _1 ) +# 38452 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24548,25 +38460,38 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; - 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 ty : (Parsetree.core_type) = Obj.magic ty in + let _3 : unit = Obj.magic _3 in + let _2 : ( +# 786 "mlx/parser.mly" + (string) +# 38486 "mlx/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_ty_ in - let _endpos = _endpos_ty_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3777 "mlx/parser.mly" - ( Public ) -# 24565 "mlx/parser.ml" - in - -# 3045 "mlx/parser.mly" - ( (Ptype_abstract, priv, Some ty) ) -# 24570 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (string) = +# 4251 "mlx/parser.mly" + ( _2 ) +# 38495 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24579,31 +38504,50 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; 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 = mty; + MenhirLib.EngineTypes.startp = _startpos_mty_; + MenhirLib.EngineTypes.endp = _endpos_mty_; + 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 = me; + MenhirLib.EngineTypes.startp = _startpos_me_; + MenhirLib.EngineTypes.endp = _endpos_me_; + 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 ty : (Parsetree.core_type) = Obj.magic ty in + let _5 : unit = Obj.magic _5 in + let mty : (Parsetree.module_type) = Obj.magic mty in + let _3 : unit = Obj.magic _3 in + let me : (Parsetree.module_expr) = Obj.magic me 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_ty_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3778 "mlx/parser.mly" - ( Private ) -# 24602 "mlx/parser.ml" - in + let _endpos = _endpos__5_ in + let _v : (Parsetree.module_expr) = let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3045 "mlx/parser.mly" - ( (Ptype_abstract, priv, Some ty) ) -# 24607 "mlx/parser.ml" +# 1451 "mlx/parser.mly" + ( mkmod ~loc:_sloc (Pmod_constraint(me, mty)) ) +# 38551 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24615,37 +38559,50 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = cs; - MenhirLib.EngineTypes.startp = _startpos_cs_; - MenhirLib.EngineTypes.endp = _endpos_cs_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 = _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 cs : (Parsetree.constructor_declaration list) = Obj.magic cs in + let _5 : unit = Obj.magic _5 in + let _4 : (Parsetree.module_type) = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in + let _2 : (Parsetree.module_expr) = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_cs_ in - let _endpos = _endpos_cs_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3777 "mlx/parser.mly" - ( Public ) -# 24632 "mlx/parser.ml" - in - let oty = - let _1 = -# 124 "" - ( None ) -# 24638 "mlx/parser.ml" - in - -# 3061 "mlx/parser.mly" - ( _1 ) -# 24643 "mlx/parser.ml" - - in + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : (Parsetree.module_expr) = let _loc__5_ = (_startpos__5_, _endpos__5_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 3049 "mlx/parser.mly" - ( (Ptype_variant cs, priv, oty) ) -# 24649 "mlx/parser.ml" +# 1453 "mlx/parser.mly" + ( unclosed "(" _loc__1_ ")" _loc__5_ ) +# 38606 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24658,43 +38615,33 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = cs; - MenhirLib.EngineTypes.startp = _startpos_cs_; - MenhirLib.EngineTypes.endp = _endpos_cs_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 = me; + MenhirLib.EngineTypes.startp = _startpos_me_; + MenhirLib.EngineTypes.endp = _endpos_me_; + 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 cs : (Parsetree.constructor_declaration list) = Obj.magic cs in + let _3 : unit = Obj.magic _3 in + let me : (Parsetree.module_expr) = Obj.magic me 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_cs_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3778 "mlx/parser.mly" - ( Private ) -# 24681 "mlx/parser.ml" - in - let oty = - let _1 = -# 124 "" - ( None ) -# 24687 "mlx/parser.ml" - in - -# 3061 "mlx/parser.mly" - ( _1 ) -# 24692 "mlx/parser.ml" - - in - -# 3049 "mlx/parser.mly" - ( (Ptype_variant cs, priv, oty) ) -# 24698 "mlx/parser.ml" + let _endpos = _endpos__3_ in + let _v : (Parsetree.module_expr) = +# 1456 "mlx/parser.mly" + ( me (* TODO consider reloc *) ) +# 38645 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24707,9 +38654,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = cs; - MenhirLib.EngineTypes.startp = _startpos_cs_; - MenhirLib.EngineTypes.endp = _endpos_cs_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -24717,47 +38664,25 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let cs : (Parsetree.constructor_declaration list) = Obj.magic cs in - let _2 : unit = Obj.magic _2 in - let x : (Parsetree.core_type) = Obj.magic x in + let _3 : unit = Obj.magic _3 in + let _2 : (Parsetree.module_expr) = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_cs_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3777 "mlx/parser.mly" - ( Public ) -# 24737 "mlx/parser.ml" - in - let oty = - let _1 = - let x = -# 191 "" - ( x ) -# 24744 "mlx/parser.ml" - in - -# 126 "" - ( Some x ) -# 24749 "mlx/parser.ml" - - in - -# 3061 "mlx/parser.mly" - ( _1 ) -# 24755 "mlx/parser.ml" - - in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.module_expr) = let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 3049 "mlx/parser.mly" - ( (Ptype_variant cs, priv, oty) ) -# 24761 "mlx/parser.ml" +# 1458 "mlx/parser.mly" + ( unclosed "(" _loc__1_ ")" _loc__3_ ) +# 38686 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24770,106 +38695,78 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = cs; - MenhirLib.EngineTypes.startp = _startpos_cs_; - MenhirLib.EngineTypes.endp = _endpos_cs_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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 = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - 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 cs : (Parsetree.constructor_declaration list) = Obj.magic cs in - let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let x : (Parsetree.core_type) = Obj.magic x in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_cs_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3778 "mlx/parser.mly" - ( Private ) -# 24807 "mlx/parser.ml" - in - let oty = - let _1 = - let x = -# 191 "" - ( x ) -# 24814 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : (Parsetree.module_expr) = let e = + let _1 = _1_inlined2 in + let e = + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 38742 "mlx/parser.ml" in -# 126 "" - ( Some x ) -# 24819 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 38747 "mlx/parser.ml" in -# 3061 "mlx/parser.mly" - ( _1 ) -# 24825 "mlx/parser.ml" +# 1475 "mlx/parser.mly" + ( e ) +# 38753 "mlx/parser.ml" in - -# 3049 "mlx/parser.mly" - ( (Ptype_variant cs, priv, oty) ) -# 24831 "mlx/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 = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _3 : unit = Obj.magic _3 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__3_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3777 "mlx/parser.mly" - ( Public ) -# 24856 "mlx/parser.ml" - in - let oty = - let _1 = -# 124 "" - ( None ) -# 24862 "mlx/parser.ml" - in + let attrs = + let _1 = _1_inlined1 in -# 3061 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 24867 "mlx/parser.ml" +# 38761 "mlx/parser.ml" in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3053 "mlx/parser.mly" - ( (Ptype_open, priv, oty) ) -# 24873 "mlx/parser.ml" +# 1462 "mlx/parser.mly" + ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) +# 38770 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24882,43 +38779,151 @@ 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 = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _3 : unit = Obj.magic _3 in + let _5 : unit = Obj.magic _5 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Ppxlib.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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__3_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3778 "mlx/parser.mly" - ( Private ) -# 24905 "mlx/parser.ml" - in - let oty = - let _1 = -# 124 "" - ( None ) -# 24911 "mlx/parser.ml" - in + let _endpos = _endpos__5_ in + let _v : (Parsetree.module_expr) = let e = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined2_, _1_inlined4, _1_inlined3, _1_inlined2) in + let e = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 38850 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 38855 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 38861 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 38872 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 38878 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 38898 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 38904 "mlx/parser.ml" + + in + +# 1475 "mlx/parser.mly" + ( e ) +# 38910 "mlx/parser.ml" + + in + let attrs = + let _1 = _1_inlined1 in -# 3061 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 24916 "mlx/parser.ml" +# 38918 "mlx/parser.ml" in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3053 "mlx/parser.mly" - ( (Ptype_open, priv, oty) ) -# 24922 "mlx/parser.ml" +# 1462 "mlx/parser.mly" + ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) +# 38927 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24931,57 +38936,119 @@ 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 = _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 = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _3 : unit = Obj.magic _3 in + let _5 : unit = Obj.magic _5 in + let _1_inlined3 : (Parsetree.module_type) = Obj.magic _1_inlined3 in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let x : (Parsetree.core_type) = Obj.magic x in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3777 "mlx/parser.mly" - ( Public ) -# 24961 "mlx/parser.ml" - in - let oty = - let _1 = - let x = -# 191 "" - ( x ) -# 24968 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : (Parsetree.module_expr) = let e = + let (_endpos__1_inlined1_, _startpos__1_inlined1_, _startpos__1_, _1_inlined1, _2, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _startpos__1_inlined2_, _1_inlined3, _2_inlined1, _1_inlined2) in + let ty = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3891 "mlx/parser.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 39003 "mlx/parser.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3895 "mlx/parser.mly" + ( mktyp ~loc:_sloc (Ptyp_package _1) ) +# 39012 "mlx/parser.ml" + + in + let _endpos_ty_ = _endpos__1_inlined1_ in + let e = + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 39020 "mlx/parser.ml" in -# 126 "" - ( Some x ) -# 24973 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 39025 "mlx/parser.ml" in + let _startpos_e_ = _startpos__1_ in + let _endpos = _endpos_ty_ in + let _startpos = _startpos_e_ in + let _loc = (_startpos, _endpos) in + +# 1477 "mlx/parser.mly" + ( ghexp ~loc:_loc (Pexp_constraint (e, ty)) ) +# 39035 "mlx/parser.ml" + + in + let attrs = + let _1 = _1_inlined1 in -# 3061 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 24979 "mlx/parser.ml" +# 39043 "mlx/parser.ml" in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3053 "mlx/parser.mly" - ( (Ptype_open, priv, oty) ) -# 24985 "mlx/parser.ml" +# 1462 "mlx/parser.mly" + ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) +# 39052 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24994,120 +39061,192 @@ 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 = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _3 : unit = Obj.magic _3 in - let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let _1_inlined5 : (Parsetree.module_type) = Obj.magic _1_inlined5 in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Ppxlib.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let x : (Parsetree.core_type) = Obj.magic x in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3778 "mlx/parser.mly" - ( Private ) -# 25031 "mlx/parser.ml" - in - let oty = - let _1 = - let x = -# 191 "" - ( x ) -# 25038 "mlx/parser.ml" - in + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : (Parsetree.module_expr) = let e = + let (_endpos__1_inlined3_, _startpos__1_inlined3_, _startpos__1_, _1_inlined3, _2, _1_inlined2, _1_inlined1, _1) = (_endpos__1_inlined5_, _startpos__1_inlined5_, _startpos__1_inlined2_, _1_inlined5, _2_inlined1, _1_inlined4, _1_inlined3, _1_inlined2) in + let ty = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3891 "mlx/parser.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 39149 "mlx/parser.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 126 "" - ( Some x ) -# 25043 "mlx/parser.ml" +# 3895 "mlx/parser.mly" + ( mktyp ~loc:_sloc (Ptyp_package _1) ) +# 39158 "mlx/parser.ml" in - -# 3061 "mlx/parser.mly" + let _endpos_ty_ = _endpos__1_inlined3_ in + let e = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 39169 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 39174 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 39180 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" ( _1 ) -# 25049 "mlx/parser.ml" +# 39191 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 39197 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 39217 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 39223 "mlx/parser.ml" + + in + let _startpos_e_ = _startpos__1_ in + let _endpos = _endpos_ty_ in + let _startpos = _startpos_e_ in + let _loc = (_startpos, _endpos) in + +# 1477 "mlx/parser.mly" + ( ghexp ~loc:_loc (Pexp_constraint (e, ty)) ) +# 39233 "mlx/parser.ml" in - -# 3053 "mlx/parser.mly" - ( (Ptype_open, priv, oty) ) -# 25055 "mlx/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 = ls; - MenhirLib.EngineTypes.startp = _startpos_ls_; - MenhirLib.EngineTypes.endp = _endpos_ls_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let _5 : unit = Obj.magic _5 in - let ls : (Parsetree.label_declaration list) = Obj.magic ls in - let _3 : unit = Obj.magic _3 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__3_ in - let _endpos = _endpos__5_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3777 "mlx/parser.mly" - ( Public ) -# 25094 "mlx/parser.ml" - in - let oty = - let _1 = -# 124 "" - ( None ) -# 25100 "mlx/parser.ml" - in + let attrs = + let _1 = _1_inlined1 in -# 3061 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 25105 "mlx/parser.ml" +# 39241 "mlx/parser.ml" in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3057 "mlx/parser.mly" - ( (Ptype_record ls, priv, oty) ) -# 25111 "mlx/parser.ml" +# 1462 "mlx/parser.mly" + ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) +# 39250 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25125,52 +39264,150 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = ls; - MenhirLib.EngineTypes.startp = _startpos_ls_; - MenhirLib.EngineTypes.endp = _endpos_ls_; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; MenhirLib.EngineTypes.next = { 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 = _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 = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _5 : unit = Obj.magic _5 in - let ls : (Parsetree.label_declaration list) = Obj.magic ls in - let _3 : unit = Obj.magic _3 in + let _1_inlined4 : (Parsetree.module_type) = Obj.magic _1_inlined4 in + let _4 : unit = Obj.magic _4 in + let _1_inlined3 : (Parsetree.module_type) = Obj.magic _1_inlined3 in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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__5_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3778 "mlx/parser.mly" - ( Private ) -# 25157 "mlx/parser.ml" - in - let oty = - let _1 = -# 124 "" - ( None ) -# 25163 "mlx/parser.ml" - in + let _v : (Parsetree.module_expr) = let e = + let (_endpos__1_inlined2_, _startpos__1_inlined2_, _endpos__1_inlined1_, _startpos__1_inlined1_, _startpos__1_, _1_inlined2, _1_inlined1, _2, _1) = (_endpos__1_inlined4_, _startpos__1_inlined4_, _endpos__1_inlined3_, _startpos__1_inlined3_, _startpos__1_inlined2_, _1_inlined4, _1_inlined3, _2_inlined1, _1_inlined2) in + let ty2 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3891 "mlx/parser.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 39340 "mlx/parser.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3895 "mlx/parser.mly" + ( mktyp ~loc:_sloc (Ptyp_package _1) ) +# 39349 "mlx/parser.ml" + + in + let _endpos_ty2_ = _endpos__1_inlined2_ in + let ty1 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3891 "mlx/parser.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 39363 "mlx/parser.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3895 "mlx/parser.mly" + ( mktyp ~loc:_sloc (Ptyp_package _1) ) +# 39372 "mlx/parser.ml" + + in + let e = + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 39379 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 39384 "mlx/parser.ml" + + in + let _startpos_e_ = _startpos__1_ in + let _endpos = _endpos_ty2_ in + let _startpos = _startpos_e_ in + let _loc = (_startpos, _endpos) in + +# 1479 "mlx/parser.mly" + ( ghexp ~loc:_loc (Pexp_coerce (e, Some ty1, ty2)) ) +# 39394 "mlx/parser.ml" + + in + let attrs = + let _1 = _1_inlined1 in -# 3061 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 25168 "mlx/parser.ml" +# 39402 "mlx/parser.ml" in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3057 "mlx/parser.mly" - ( (Ptype_record ls, priv, oty) ) -# 25174 "mlx/parser.ml" +# 1462 "mlx/parser.mly" + ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) +# 39411 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25188,66 +39425,223 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = ls; - MenhirLib.EngineTypes.startp = _startpos_ls_; - MenhirLib.EngineTypes.endp = _endpos_ls_; + MenhirLib.EngineTypes.semv = _1_inlined6; + MenhirLib.EngineTypes.startp = _startpos__1_inlined6_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined6_; MenhirLib.EngineTypes.next = { 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; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _5 : unit = Obj.magic _5 in - let ls : (Parsetree.label_declaration list) = Obj.magic ls in - let _3 : unit = Obj.magic _3 in + let _1_inlined6 : (Parsetree.module_type) = Obj.magic _1_inlined6 in + let _4 : unit = Obj.magic _4 in + let _1_inlined5 : (Parsetree.module_type) = Obj.magic _1_inlined5 in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Ppxlib.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let x : (Parsetree.core_type) = Obj.magic x in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in + let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3777 "mlx/parser.mly" - ( Public ) -# 25227 "mlx/parser.ml" - in - let oty = - let _1 = - let x = -# 191 "" - ( x ) -# 25234 "mlx/parser.ml" - in + let _v : (Parsetree.module_expr) = let e = + let (_endpos__1_inlined4_, _startpos__1_inlined4_, _endpos__1_inlined3_, _startpos__1_inlined3_, _startpos__1_, _1_inlined4, _1_inlined3, _2, _1_inlined2, _1_inlined1, _1) = (_endpos__1_inlined6_, _startpos__1_inlined6_, _endpos__1_inlined5_, _startpos__1_inlined5_, _startpos__1_inlined2_, _1_inlined6, _1_inlined5, _2_inlined1, _1_inlined4, _1_inlined3, _1_inlined2) in + let ty2 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined4_, _startpos__1_inlined4_, _1_inlined4) in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3891 "mlx/parser.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 39522 "mlx/parser.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 126 "" - ( Some x ) -# 25239 "mlx/parser.ml" +# 3895 "mlx/parser.mly" + ( mktyp ~loc:_sloc (Ptyp_package _1) ) +# 39531 "mlx/parser.ml" + + in + let _endpos_ty2_ = _endpos__1_inlined4_ in + let ty1 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3891 "mlx/parser.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 39545 "mlx/parser.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3895 "mlx/parser.mly" + ( mktyp ~loc:_sloc (Ptyp_package _1) ) +# 39554 "mlx/parser.ml" + + in + let e = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 39564 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 39569 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 39575 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 39586 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 39592 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 39612 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 39618 "mlx/parser.ml" in + let _startpos_e_ = _startpos__1_ in + let _endpos = _endpos_ty2_ in + let _startpos = _startpos_e_ in + let _loc = (_startpos, _endpos) in + +# 1479 "mlx/parser.mly" + ( ghexp ~loc:_loc (Pexp_coerce (e, Some ty1, ty2)) ) +# 39628 "mlx/parser.ml" + + in + let attrs = + let _1 = _1_inlined1 in -# 3061 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 25245 "mlx/parser.ml" +# 39636 "mlx/parser.ml" in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3057 "mlx/parser.mly" - ( (Ptype_record ls, priv, oty) ) -# 25251 "mlx/parser.ml" +# 1462 "mlx/parser.mly" + ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) +# 39645 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25265,30 +39659,36 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = ls; - MenhirLib.EngineTypes.startp = _startpos_ls_; - MenhirLib.EngineTypes.endp = _endpos_ls_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + 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; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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 = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - 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; + }; }; }; }; @@ -25296,42 +39696,77 @@ module Tables = struct }; } = _menhir_stack in let _5 : unit = Obj.magic _5 in - let ls : (Parsetree.label_declaration list) = Obj.magic ls in - let _3 : unit = Obj.magic _3 in - let _1 : unit = Obj.magic _1 in + let _1_inlined3 : (Parsetree.module_type) = Obj.magic _1_inlined3 in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let x : (Parsetree.core_type) = Obj.magic x in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in + let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3778 "mlx/parser.mly" - ( Private ) -# 25311 "mlx/parser.ml" - in - let oty = - let _1 = - let x = -# 191 "" - ( x ) -# 25318 "mlx/parser.ml" + let _v : (Parsetree.module_expr) = let e = + let (_endpos__1_inlined1_, _startpos__1_inlined1_, _startpos__1_, _1_inlined1, _2, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _startpos__1_inlined2_, _1_inlined3, _2_inlined1, _1_inlined2) in + let ty2 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3891 "mlx/parser.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 39721 "mlx/parser.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3895 "mlx/parser.mly" + ( mktyp ~loc:_sloc (Ptyp_package _1) ) +# 39730 "mlx/parser.ml" + + in + let _endpos_ty2_ = _endpos__1_inlined1_ in + let e = + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 39738 "mlx/parser.ml" in -# 126 "" - ( Some x ) -# 25323 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 39743 "mlx/parser.ml" in + let _startpos_e_ = _startpos__1_ in + let _endpos = _endpos_ty2_ in + let _startpos = _startpos_e_ in + let _loc = (_startpos, _endpos) in + +# 1481 "mlx/parser.mly" + ( ghexp ~loc:_loc (Pexp_coerce (e, None, ty2)) ) +# 39753 "mlx/parser.ml" + + in + let attrs = + let _1 = _1_inlined1 in -# 3061 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 25329 "mlx/parser.ml" +# 39761 "mlx/parser.ml" in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3057 "mlx/parser.mly" - ( (Ptype_record ls, priv, oty) ) -# 25335 "mlx/parser.ml" +# 1462 "mlx/parser.mly" + ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) +# 39770 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25344,77 +39779,192 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = me; - MenhirLib.EngineTypes.startp = _startpos_me_; - MenhirLib.EngineTypes.endp = _endpos_me_; - 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 = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; + 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 = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; + 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 = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let me : (Parsetree.module_expr) = Obj.magic me in + let _5 : unit = Obj.magic _5 in + let _1_inlined5 : (Parsetree.module_type) = Obj.magic _1_inlined5 in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Ppxlib.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let ext : (string Ppxlib.loc option) = Obj.magic ext 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__1_inlined2_ in - let _v : (Parsetree.module_expr Parsetree.open_infos * string Ppxlib.loc option) = let attrs2 = - let _1 = _1_inlined2 in - -# 3918 "mlx/parser.mly" + let _endpos = _endpos__5_ in + let _v : (Parsetree.module_expr) = let e = + let (_endpos__1_inlined3_, _startpos__1_inlined3_, _startpos__1_, _1_inlined3, _2, _1_inlined2, _1_inlined1, _1) = (_endpos__1_inlined5_, _startpos__1_inlined5_, _startpos__1_inlined2_, _1_inlined5, _2_inlined1, _1_inlined4, _1_inlined3, _1_inlined2) in + let ty2 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3891 "mlx/parser.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 39867 "mlx/parser.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3895 "mlx/parser.mly" + ( mktyp ~loc:_sloc (Ptyp_package _1) ) +# 39876 "mlx/parser.ml" + + in + let _endpos_ty2_ = _endpos__1_inlined3_ in + let e = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 39887 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 39892 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 39898 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" ( _1 ) -# 25390 "mlx/parser.ml" +# 39909 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 39915 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 39935 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 39941 "mlx/parser.ml" + + in + let _startpos_e_ = _startpos__1_ in + let _endpos = _endpos_ty2_ in + let _startpos = _startpos_e_ in + let _loc = (_startpos, _endpos) in + +# 1481 "mlx/parser.mly" + ( ghexp ~loc:_loc (Pexp_coerce (e, None, ty2)) ) +# 39951 "mlx/parser.ml" in - let _endpos_attrs2_ = _endpos__1_inlined2_ in - let attrs1 = + let attrs = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 25399 "mlx/parser.ml" +# 39959 "mlx/parser.ml" in - let override = -# 3824 "mlx/parser.mly" - ( Fresh ) -# 25405 "mlx/parser.ml" - in - let _endpos = _endpos_attrs2_ in + let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1576 "mlx/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 - ) -# 25418 "mlx/parser.ml" +# 1462 "mlx/parser.mly" + ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) +# 39968 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25427,14 +39977,14 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = me; - MenhirLib.EngineTypes.startp = _startpos_me_; - MenhirLib.EngineTypes.endp = _endpos_me_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined2; @@ -25442,14 +39992,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; + 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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + 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; @@ -25462,52 +40012,42 @@ module Tables = struct }; }; } = _menhir_stack in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let me : (Parsetree.module_expr) = Obj.magic me in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let ext : (string Ppxlib.loc option) = Obj.magic ext in - let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _6 : unit = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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__1_inlined3_ in - let _v : (Parsetree.module_expr Parsetree.open_infos * string Ppxlib.loc option) = let attrs2 = - let _1 = _1_inlined3 in - -# 3918 "mlx/parser.mly" - ( _1 ) -# 25480 "mlx/parser.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let attrs1 = + let _endpos = _endpos__6_ in + let _v : (Parsetree.module_expr) = let _4 = let _1 = _1_inlined2 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 40030 "mlx/parser.ml" + in -# 3922 "mlx/parser.mly" - ( _1 ) -# 25489 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 40035 "mlx/parser.ml" in - let override = + let _3 = let _1 = _1_inlined1 in -# 3825 "mlx/parser.mly" - ( Override ) -# 25497 "mlx/parser.ml" +# 4337 "mlx/parser.mly" + ( _1 ) +# 40043 "mlx/parser.ml" in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _loc__6_ = (_startpos__6_, _endpos__6_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1576 "mlx/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 - ) -# 25511 "mlx/parser.ml" +# 1464 "mlx/parser.mly" + ( unclosed "(" _loc__1_ ")" _loc__6_ ) +# 40051 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25520,88 +40060,150 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; 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 = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let _1_inlined2 : (Ppxlib.longident) = Obj.magic _1_inlined2 in + let _6 : unit = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Ppxlib.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let ext : (string Ppxlib.loc option) = Obj.magic ext 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__1_inlined3_ in - let _v : (Ppxlib.longident Ppxlib.loc Parsetree.open_infos * string Ppxlib.loc option) = let attrs2 = - let _1 = _1_inlined3 in - -# 3918 "mlx/parser.mly" + let _endpos = _endpos__6_ in + let _v : (Parsetree.module_expr) = let _4 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined2_, _1_inlined4, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 40137 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 40142 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 40148 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" ( _1 ) -# 25566 "mlx/parser.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in +# 40159 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 40165 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 40185 "mlx/parser.ml" + + in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 25578 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 40191 "mlx/parser.ml" in - let attrs1 = + let _3 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 25586 "mlx/parser.ml" +# 40199 "mlx/parser.ml" in - let override = -# 3824 "mlx/parser.mly" - ( Fresh ) -# 25592 "mlx/parser.ml" - in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _loc__6_ = (_startpos__6_, _endpos__6_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1591 "mlx/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 - ) -# 25605 "mlx/parser.ml" +# 1464 "mlx/parser.mly" + ( unclosed "(" _loc__1_ ")" _loc__6_ ) +# 40207 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25614,14 +40216,14 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined4; - MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined2; @@ -25629,14 +40231,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; + 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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + 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; @@ -25649,150 +40251,42 @@ module Tables = struct }; }; } = _menhir_stack in - let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in - let _1_inlined3 : (Ppxlib.longident) = Obj.magic _1_inlined3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let ext : (string Ppxlib.loc option) = Obj.magic ext in - let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _6 : unit = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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__1_inlined4_ in - let _v : (Ppxlib.longident Ppxlib.loc Parsetree.open_infos * string Ppxlib.loc option) = let attrs2 = - let _1 = _1_inlined4 in - -# 3918 "mlx/parser.mly" - ( _1 ) -# 25667 "mlx/parser.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined4_ in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 25679 "mlx/parser.ml" - - in - let attrs1 = + let _endpos = _endpos__6_ in + let _v : (Parsetree.module_expr) = let _4 = let _1 = _1_inlined2 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 40269 "mlx/parser.ml" + in -# 3922 "mlx/parser.mly" - ( _1 ) -# 25687 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 40274 "mlx/parser.ml" in - let override = + let _3 = let _1 = _1_inlined1 in -# 3825 "mlx/parser.mly" - ( Override ) -# 25695 "mlx/parser.ml" +# 4337 "mlx/parser.mly" + ( _1 ) +# 40282 "mlx/parser.ml" in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _loc__6_ = (_startpos__6_, _endpos__6_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1591 "mlx/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 - ) -# 25709 "mlx/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 : ( -# 740 "mlx/parser.mly" - (string) -# 25730 "mlx/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) = -# 3598 "mlx/parser.mly" - ( _1 ) -# 25738 "mlx/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 : ( -# 695 "mlx/parser.mly" - (string) -# 25759 "mlx/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) = -# 3599 "mlx/parser.mly" - ( _1 ) -# 25767 "mlx/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 : ( -# 696 "mlx/parser.mly" - (string) -# 25788 "mlx/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) = -# 3600 "mlx/parser.mly" - ( _1 ) -# 25796 "mlx/parser.ml" +# 1466 "mlx/parser.mly" + ( unclosed "(" _loc__1_ ")" _loc__6_ ) +# 40290 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25805,44 +40299,150 @@ module Tables = struct 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.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + 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 = 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 = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _3 : (string) = Obj.magic _3 in + let _6 : unit = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Ppxlib.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let _1 : ( -# 694 "mlx/parser.mly" - (string) -# 25838 "mlx/parser.ml" - ) = Obj.magic _1 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 : (string) = -# 3601 "mlx/parser.mly" - ( "."^ _1 ^"(" ^ _3 ^ ")" ) -# 25846 "mlx/parser.ml" + let _endpos = _endpos__6_ in + let _v : (Parsetree.module_expr) = let _4 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined2_, _1_inlined4, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 40376 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 40381 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 40387 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 40398 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 40404 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 40424 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 40430 "mlx/parser.ml" + + in + let _3 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 40438 "mlx/parser.ml" + + in + let _loc__6_ = (_startpos__6_, _endpos__6_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 1466 "mlx/parser.mly" + ( unclosed "(" _loc__1_ ")" _loc__6_ ) +# 40446 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25860,14 +40460,14 @@ module Tables = struct 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.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + 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; @@ -25885,71 +40485,40 @@ module Tables = struct }; } = _menhir_stack in let _5 : unit = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _3 : (string) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let _1 : ( -# 694 "mlx/parser.mly" - (string) -# 25895 "mlx/parser.ml" - ) = Obj.magic _1 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 : (string) = -# 3602 "mlx/parser.mly" - ( "."^ _1 ^ "(" ^ _3 ^ ")<-" ) -# 25903 "mlx/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 : (string) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : ( -# 694 "mlx/parser.mly" - (string) -# 25945 "mlx/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 : (string) = -# 3603 "mlx/parser.mly" - ( "."^ _1 ^"[" ^ _3 ^ "]" ) -# 25953 "mlx/parser.ml" + let _v : (Parsetree.module_expr) = let _4 = + let _1 = _1_inlined2 in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 40501 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 40506 "mlx/parser.ml" + + in + let _3 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 40514 "mlx/parser.ml" + + in + let _loc__5_ = (_startpos__5_, _endpos__5_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 1468 "mlx/parser.mly" + ( unclosed "(" _loc__1_ ")" _loc__5_ ) +# 40522 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25967,46 +40536,138 @@ module Tables = struct 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.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _5 : unit = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _3 : (string) = Obj.magic _3 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Ppxlib.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let _1 : ( -# 694 "mlx/parser.mly" - (string) -# 26002 "mlx/parser.ml" - ) = Obj.magic _1 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 : (string) = -# 3604 "mlx/parser.mly" - ( "."^ _1 ^ "[" ^ _3 ^ "]<-" ) -# 26010 "mlx/parser.ml" + let _v : (Parsetree.module_expr) = let _4 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined2_, _1_inlined4, _1_inlined3, _1_inlined2) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 40601 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 40606 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 40612 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 40623 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 40629 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 40649 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 40655 "mlx/parser.ml" + + in + let _3 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 40663 "mlx/parser.ml" + + in + let _loc__5_ = (_startpos__5_, _endpos__5_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 1468 "mlx/parser.mly" + ( unclosed "(" _loc__1_ ")" _loc__5_ ) +# 40671 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26019,44 +40680,26 @@ module Tables = struct 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.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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; - }; - }; + 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 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : ( -# 694 "mlx/parser.mly" - (string) -# 26052 "mlx/parser.ml" - ) = Obj.magic _1 in + let _1 : (Mlx_shim.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 : (string) = -# 3605 "mlx/parser.mly" - ( "."^ _1 ^"{" ^ _3 ^ "}" ) -# 26060 "mlx/parser.ml" + let _endpos = _endpos__2_ in + let _v : (Mlx_shim.Longident.t) = +# 1369 "mlx/parser.mly" + ( _1 ) +# 40703 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26069,51 +40712,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 = _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; - }; - }; - }; + 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 : unit = Obj.magic _4 in - let _3 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : ( -# 694 "mlx/parser.mly" - (string) -# 26109 "mlx/parser.ml" - ) = Obj.magic _1 in + let _1 : (Mlx_shim.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 : (string) = -# 3606 "mlx/parser.mly" - ( "."^ _1 ^ "{" ^ _3 ^ "}<-" ) -# 26117 "mlx/parser.ml" + let _endpos = _endpos__2_ in + let _v : (Mlx_shim.Longident.t) = +# 1354 "mlx/parser.mly" + ( _1 ) +# 40735 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26125,24 +40743,27 @@ module Tables = struct (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; + 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 _1 : ( -# 751 "mlx/parser.mly" - (string) -# 26138 "mlx/parser.ml" - ) = Obj.magic _1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.core_type) = 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) = -# 3607 "mlx/parser.mly" - ( _1 ) -# 26146 "mlx/parser.ml" + let _endpos = _endpos__2_ in + let _v : (Parsetree.core_type) = +# 1329 "mlx/parser.mly" + ( _1 ) +# 40767 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26154,20 +40775,27 @@ module Tables = struct (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; + 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 _1 : unit = Obj.magic _1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = 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) = -# 3608 "mlx/parser.mly" - ( "!" ) -# 26171 "mlx/parser.ml" + let _endpos = _endpos__2_ in + let _v : (Parsetree.expression) = +# 1334 "mlx/parser.mly" + ( _1 ) +# 40799 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26179,29 +40807,27 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; - 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 op : ( -# 689 "mlx/parser.mly" - (string) -# 26192 "mlx/parser.ml" - ) = Obj.magic op in + let _2 : unit = Obj.magic _2 in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_op_ in - let _endpos = _endpos_op_ in - let _v : (string) = let _1 = -# 3612 "mlx/parser.mly" - ( op ) -# 26200 "mlx/parser.ml" - in - -# 3609 "mlx/parser.mly" - ( _1 ) -# 26205 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : (Mlx_shim.Longident.t) = +# 1359 "mlx/parser.mly" + ( _1 ) +# 40831 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26213,29 +40839,27 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; - 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 op : ( -# 690 "mlx/parser.mly" - (string) -# 26226 "mlx/parser.ml" - ) = Obj.magic op in + let _2 : unit = Obj.magic _2 in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_op_ in - let _endpos = _endpos_op_ in - let _v : (string) = let _1 = -# 3613 "mlx/parser.mly" - ( op ) -# 26234 "mlx/parser.ml" - in - -# 3609 "mlx/parser.mly" - ( _1 ) -# 26239 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : (Mlx_shim.Longident.t) = +# 1364 "mlx/parser.mly" + ( _1 ) +# 40863 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26247,29 +40871,27 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; - 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 op : ( -# 691 "mlx/parser.mly" - (string) -# 26260 "mlx/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 : (string) = let _1 = -# 3614 "mlx/parser.mly" - ( op ) -# 26268 "mlx/parser.ml" - in - -# 3609 "mlx/parser.mly" - ( _1 ) -# 26273 "mlx/parser.ml" + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.module_expr) = 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.module_expr) = +# 1324 "mlx/parser.mly" + ( _1 ) +# 40895 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26281,29 +40903,27 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; - 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 op : ( -# 692 "mlx/parser.mly" - (string) -# 26294 "mlx/parser.ml" - ) = Obj.magic op in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.module_type) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_op_ in - let _endpos = _endpos_op_ in - let _v : (string) = let _1 = -# 3615 "mlx/parser.mly" - ( op ) -# 26302 "mlx/parser.ml" - in - -# 3609 "mlx/parser.mly" - ( _1 ) -# 26307 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : (Parsetree.module_type) = +# 1319 "mlx/parser.mly" + ( _1 ) +# 40927 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26315,29 +40935,27 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; - 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 op : ( -# 693 "mlx/parser.mly" - (string) -# 26328 "mlx/parser.ml" - ) = Obj.magic op in + let _2 : unit = Obj.magic _2 in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_op_ in - let _endpos = _endpos_op_ in - let _v : (string) = let _1 = -# 3616 "mlx/parser.mly" - ( op ) -# 26336 "mlx/parser.ml" - in - -# 3609 "mlx/parser.mly" - ( _1 ) -# 26341 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : (Mlx_shim.Longident.t) = +# 1344 "mlx/parser.mly" + ( _1 ) +# 40959 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26349,25 +40967,27 @@ module Tables = struct (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; + 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 _1 : unit = Obj.magic _1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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) = let _1 = -# 3617 "mlx/parser.mly" - ("+") -# 26366 "mlx/parser.ml" - in - -# 3609 "mlx/parser.mly" - ( _1 ) -# 26371 "mlx/parser.ml" + let _endpos = _endpos__2_ in + let _v : (Parsetree.pattern) = +# 1339 "mlx/parser.mly" + ( _1 ) +# 40991 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26379,25 +40999,78 @@ module Tables = struct (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 : (Mlx_shim.Longident.t) = 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 : (Mlx_shim.Longident.t) = +# 1349 "mlx/parser.mly" + ( _1 ) +# 41023 "mlx/parser.ml" + in + { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + 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 = _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 _1 : unit = Obj.magic _1 in + let _3 : (Parsetree.pattern) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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) = let _1 = -# 3618 "mlx/parser.mly" - ("+.") -# 26396 "mlx/parser.ml" - in + let _endpos = _endpos__3_ in + let _v : (Parsetree.pattern) = let _1 = + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _loc__2_ = (_startpos__2_, _endpos__2_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 3011 "mlx/parser.mly" + ( mkpat_cons ~loc:_sloc _loc__2_ + (ghpat ~loc:_sloc (Ppat_tuple ([None, _1; None, _3], Closed))) ) +# 41068 "mlx/parser.ml" + + in -# 3609 "mlx/parser.mly" - ( _1 ) -# 26401 "mlx/parser.ml" +# 2997 "mlx/parser.mly" + ( _1 ) +# 41074 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26409,25 +41082,32 @@ module Tables = struct (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; + 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 _1 : unit = Obj.magic _1 in + let _2 : (Parsetree.attribute) = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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) = let _1 = -# 3619 "mlx/parser.mly" - ("+=") -# 26426 "mlx/parser.ml" + let _endpos = _endpos__2_ in + let _v : (Parsetree.pattern) = let _1 = +# 3014 "mlx/parser.mly" + ( Pat.attr _1 _2 ) +# 41106 "mlx/parser.ml" in -# 3609 "mlx/parser.mly" - ( _1 ) -# 26431 "mlx/parser.ml" +# 2997 "mlx/parser.mly" + ( _1 ) +# 41111 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26445,19 +41125,19 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.pattern) = 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) = let _1 = -# 3620 "mlx/parser.mly" - ("-") -# 26456 "mlx/parser.ml" + let _v : (Parsetree.pattern) = let _1 = +# 3016 "mlx/parser.mly" + ( _1 ) +# 41136 "mlx/parser.ml" in -# 3609 "mlx/parser.mly" - ( _1 ) -# 26461 "mlx/parser.ml" +# 2997 "mlx/parser.mly" + ( _1 ) +# 41141 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26469,25 +41149,70 @@ module Tables = struct (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; + 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 _1 : unit = Obj.magic _1 in + let _1_inlined1 : (string) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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) = let _1 = -# 3621 "mlx/parser.mly" - ("-.") -# 26486 "mlx/parser.ml" - in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = + let _3 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 41188 "mlx/parser.ml" + + in + +# 3019 "mlx/parser.mly" + ( Ppat_alias(_1, _3) ) +# 41194 "mlx/parser.ml" + + in + let _endpos__1_ = _endpos__1_inlined1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1013 "mlx/parser.mly" + ( mkpat ~loc:_sloc _1 ) +# 41204 "mlx/parser.ml" + + in + +# 3030 "mlx/parser.mly" + ( _1 ) +# 41210 "mlx/parser.ml" + + in -# 3609 "mlx/parser.mly" - ( _1 ) -# 26491 "mlx/parser.ml" +# 2997 "mlx/parser.mly" + ( _1 ) +# 41216 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26499,25 +41224,60 @@ module Tables = struct (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; + 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 _1 : unit = Obj.magic _1 in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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) = let _1 = -# 3622 "mlx/parser.mly" - ("*") -# 26516 "mlx/parser.ml" - in + let _endpos = _endpos__3_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = + let _loc__3_ = (_startpos__3_, _endpos__3_) in + +# 3021 "mlx/parser.mly" + ( expecting _loc__3_ "identifier" ) +# 41259 "mlx/parser.ml" + + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1013 "mlx/parser.mly" + ( mkpat ~loc:_sloc _1 ) +# 41269 "mlx/parser.ml" + + in + +# 3030 "mlx/parser.mly" + ( _1 ) +# 41275 "mlx/parser.ml" + + in -# 3609 "mlx/parser.mly" - ( _1 ) -# 26521 "mlx/parser.ml" +# 2997 "mlx/parser.mly" + ( _1 ) +# 41281 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26535,19 +41295,36 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.pattern_desc) = 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) = let _1 = -# 3623 "mlx/parser.mly" - ("%") -# 26546 "mlx/parser.ml" - in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = +# 3023 "mlx/parser.mly" + ( _1 ) +# 41308 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1013 "mlx/parser.mly" + ( mkpat ~loc:_sloc _1 ) +# 41316 "mlx/parser.ml" + + in + +# 3030 "mlx/parser.mly" + ( _1 ) +# 41322 "mlx/parser.ml" + + in -# 3609 "mlx/parser.mly" - ( _1 ) -# 26551 "mlx/parser.ml" +# 2997 "mlx/parser.mly" + ( _1 ) +# 41328 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26559,25 +41336,60 @@ module Tables = struct (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; + 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 _1 : unit = Obj.magic _1 in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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) = let _1 = -# 3624 "mlx/parser.mly" - ("=") -# 26576 "mlx/parser.ml" - in + let _endpos = _endpos__3_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = + let _loc__3_ = (_startpos__3_, _endpos__3_) in + +# 3025 "mlx/parser.mly" + ( expecting _loc__3_ "pattern" ) +# 41371 "mlx/parser.ml" + + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1013 "mlx/parser.mly" + ( mkpat ~loc:_sloc _1 ) +# 41381 "mlx/parser.ml" + + in + +# 3030 "mlx/parser.mly" + ( _1 ) +# 41387 "mlx/parser.ml" + + in -# 3609 "mlx/parser.mly" - ( _1 ) -# 26581 "mlx/parser.ml" +# 2997 "mlx/parser.mly" + ( _1 ) +# 41393 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26589,25 +41401,57 @@ module Tables = struct (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; + 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 _1 : unit = Obj.magic _1 in + let _3 : (Parsetree.pattern) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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) = let _1 = -# 3625 "mlx/parser.mly" - ("<") -# 26606 "mlx/parser.ml" - in + let _endpos = _endpos__3_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = +# 3027 "mlx/parser.mly" + ( Ppat_or(_1, _3) ) +# 41434 "mlx/parser.ml" + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1013 "mlx/parser.mly" + ( mkpat ~loc:_sloc _1 ) +# 41443 "mlx/parser.ml" + + in + +# 3030 "mlx/parser.mly" + ( _1 ) +# 41449 "mlx/parser.ml" + + in -# 3609 "mlx/parser.mly" - ( _1 ) -# 26611 "mlx/parser.ml" +# 2997 "mlx/parser.mly" + ( _1 ) +# 41455 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26619,25 +41463,60 @@ module Tables = struct (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; + 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 _1 : unit = Obj.magic _1 in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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) = let _1 = -# 3626 "mlx/parser.mly" - (">") -# 26636 "mlx/parser.ml" - in + let _endpos = _endpos__3_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = + let _loc__3_ = (_startpos__3_, _endpos__3_) in + +# 3029 "mlx/parser.mly" + ( expecting _loc__3_ "pattern" ) +# 41498 "mlx/parser.ml" + + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1013 "mlx/parser.mly" + ( mkpat ~loc:_sloc _1 ) +# 41508 "mlx/parser.ml" + + in + +# 3030 "mlx/parser.mly" + ( _1 ) +# 41514 "mlx/parser.ml" + + in -# 3609 "mlx/parser.mly" - ( _1 ) -# 26641 "mlx/parser.ml" +# 2997 "mlx/parser.mly" + ( _1 ) +# 41520 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26649,25 +41528,60 @@ module Tables = struct (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; + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _3 : (Parsetree.pattern) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 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__1_ in - let _v : (string) = let _1 = -# 3627 "mlx/parser.mly" - ("or") -# 26666 "mlx/parser.ml" - in + let _endpos = _endpos__3_ in + let _v : (Parsetree.pattern) = let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 41570 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 41576 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3609 "mlx/parser.mly" - ( _1 ) -# 26671 "mlx/parser.ml" +# 2999 "mlx/parser.mly" + ( mkpat_attrs ~loc:_sloc (Ppat_exception _3) _2) +# 41585 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26679,25 +41593,44 @@ module Tables = struct (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; + 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 : (Parsetree.pattern) = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in + let _2 : (Parsetree.pattern) = 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__1_ in - let _v : (string) = let _1 = -# 3628 "mlx/parser.mly" - ("||") -# 26696 "mlx/parser.ml" - in + let _endpos = _endpos__4_ in + let _v : (Parsetree.pattern) = let _endpos = _endpos__4_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3609 "mlx/parser.mly" - ( _1 ) -# 26701 "mlx/parser.ml" +# 3001 "mlx/parser.mly" + ( mkpat ~loc:_sloc (Ppat_effect(_2,_4)) ) +# 41634 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26715,19 +41648,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.pattern) = 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) = let _1 = -# 3629 "mlx/parser.mly" - ("&") -# 26726 "mlx/parser.ml" - in - -# 3609 "mlx/parser.mly" - ( _1 ) -# 26731 "mlx/parser.ml" + let _v : (Parsetree.pattern) = +# 3035 "mlx/parser.mly" + ( _1 ) +# 41659 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26739,25 +41667,55 @@ module Tables = struct (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; + 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 _1 : unit = Obj.magic _1 in + let _2 : (Parsetree.pattern) = Obj.magic _2 in + let _1 : (Mlx_shim.Longident.t) = 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) = let _1 = -# 3630 "mlx/parser.mly" - ("&&") -# 26756 "mlx/parser.ml" - in + let _endpos = _endpos__2_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 41697 "mlx/parser.ml" + + in + +# 3038 "mlx/parser.mly" + ( Ppat_construct(_1, Some ([], _2)) ) +# 41703 "mlx/parser.ml" + + in + let _endpos__1_ = _endpos__2_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1013 "mlx/parser.mly" + ( mkpat ~loc:_sloc _1 ) +# 41713 "mlx/parser.ml" + + in -# 3609 "mlx/parser.mly" - ( _1 ) -# 26761 "mlx/parser.ml" +# 3044 "mlx/parser.mly" + ( _1 ) +# 41719 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26769,25 +41727,88 @@ module Tables = struct (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; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = pat; + MenhirLib.EngineTypes.startp = _startpos_pat_; + MenhirLib.EngineTypes.endp = _endpos_pat_; + MenhirLib.EngineTypes.next = { + 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + 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 _1 : unit = Obj.magic _1 in + let pat : (Parsetree.pattern) = Obj.magic pat in + let _5 : unit = Obj.magic _5 in + let xs : (string Ppxlib.loc list) = Obj.magic xs in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Mlx_shim.Longident.t) = 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) = let _1 = -# 3631 "mlx/parser.mly" - (":=") -# 26786 "mlx/parser.ml" - in + let _endpos = _endpos_pat_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let newtypes = +# 2695 "mlx/parser.mly" + ( xs ) +# 41781 "mlx/parser.ml" + in + let constr = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 41790 "mlx/parser.ml" + + in + +# 3041 "mlx/parser.mly" + ( Ppat_construct(constr, Some (newtypes, pat)) ) +# 41796 "mlx/parser.ml" + + in + let _endpos__1_ = _endpos_pat_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1013 "mlx/parser.mly" + ( mkpat ~loc:_sloc _1 ) +# 41806 "mlx/parser.ml" + + in -# 3609 "mlx/parser.mly" - ( _1 ) -# 26791 "mlx/parser.ml" +# 3044 "mlx/parser.mly" + ( _1 ) +# 41812 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26799,20 +41820,43 @@ module Tables = struct (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; + 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 _1 : unit = Obj.magic _1 in + let _2 : (Parsetree.pattern) = Obj.magic _2 in + let _1 : (string) = 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 : (bool) = -# 3513 "mlx/parser.mly" - ( true ) -# 26816 "mlx/parser.ml" + let _endpos = _endpos__2_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = +# 3043 "mlx/parser.mly" + ( Ppat_variant(_1, Some _2) ) +# 41845 "mlx/parser.ml" + in + let _endpos__1_ = _endpos__2_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1013 "mlx/parser.mly" + ( mkpat ~loc:_sloc _1 ) +# 41854 "mlx/parser.ml" + + in + +# 3044 "mlx/parser.mly" + ( _1 ) +# 41860 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26823,14 +41867,61 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _3 : (Parsetree.pattern) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (bool) = -# 3514 "mlx/parser.mly" - ( false ) -# 26834 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.pattern) = let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 41910 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 41916 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3046 "mlx/parser.mly" + ( mkpat_attrs ~loc:_sloc (Ppat_lazy _3) _2) +# 41925 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26841,14 +41932,47 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 = _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 : (Parsetree.pattern) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (unit option) = -# 114 "" - ( None ) -# 26852 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.pattern) = let _1 = + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _loc__2_ = (_startpos__2_, _endpos__2_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 3011 "mlx/parser.mly" + ( mkpat_cons ~loc:_sloc _loc__2_ + (ghpat ~loc:_sloc (Ppat_tuple ([None, _1; None, _3], Closed))) ) +# 41970 "mlx/parser.ml" + + in + +# 3006 "mlx/parser.mly" + ( _1 ) +# 41976 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26860,38 +41984,32 @@ module Tables = struct (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; + 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 x : unit = Obj.magic x in + let _2 : (Parsetree.attribute) = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : (unit option) = -# 116 "" - ( Some x ) -# 26877 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : (Parsetree.pattern) = let _1 = +# 3014 "mlx/parser.mly" + ( Pat.attr _1 _2 ) +# 42008 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (unit option) = -# 114 "" - ( None ) -# 26895 "mlx/parser.ml" + +# 3006 "mlx/parser.mly" + ( _1 ) +# 42013 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26904,19 +42022,24 @@ module Tables = struct 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.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : unit = Obj.magic x in + let _1 : (Parsetree.pattern) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : (unit option) = -# 116 "" - ( Some x ) -# 26920 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.pattern) = let _1 = +# 3016 "mlx/parser.mly" + ( _1 ) +# 42038 "mlx/parser.ml" + in + +# 3006 "mlx/parser.mly" + ( _1 ) +# 42043 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26927,14 +42050,71 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let { + 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 _1_inlined1 : (string) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (string Ppxlib.loc option) = -# 114 "" - ( None ) -# 26938 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = + let _3 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 42090 "mlx/parser.ml" + + in + +# 3019 "mlx/parser.mly" + ( Ppat_alias(_1, _3) ) +# 42096 "mlx/parser.ml" + + in + let _endpos__1_ = _endpos__1_inlined1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1013 "mlx/parser.mly" + ( mkpat ~loc:_sloc _1 ) +# 42106 "mlx/parser.ml" + + in + +# 3030 "mlx/parser.mly" + ( _1 ) +# 42112 "mlx/parser.ml" + + in + +# 3006 "mlx/parser.mly" + ( _1 ) +# 42118 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26947,48 +42127,59 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 _1_inlined1 : ( -# 714 "mlx/parser.mly" - (string) -# 26965 "mlx/parser.ml" - ) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined1_ in - let _v : (string Ppxlib.loc option) = let x = - let x = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__3_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = + let _loc__3_ = (_startpos__3_, _endpos__3_) in + +# 3021 "mlx/parser.mly" + ( expecting _loc__3_ "identifier" ) +# 42161 "mlx/parser.ml" + + in + let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 26980 "mlx/parser.ml" +# 1013 "mlx/parser.mly" + ( mkpat ~loc:_sloc _1 ) +# 42171 "mlx/parser.ml" in -# 183 "" - ( x ) -# 26986 "mlx/parser.ml" +# 3030 "mlx/parser.mly" + ( _1 ) +# 42177 "mlx/parser.ml" in -# 116 "" - ( Some x ) -# 26992 "mlx/parser.ml" +# 3006 "mlx/parser.mly" + ( _1 ) +# 42183 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26999,14 +42190,43 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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.pattern_desc) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.core_type option) = -# 114 "" - ( None ) -# 27010 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = +# 3023 "mlx/parser.mly" + ( _1 ) +# 42210 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1013 "mlx/parser.mly" + ( mkpat ~loc:_sloc _1 ) +# 42218 "mlx/parser.ml" + + in + +# 3030 "mlx/parser.mly" + ( _1 ) +# 42224 "mlx/parser.ml" + + in + +# 3006 "mlx/parser.mly" + ( _1 ) +# 42230 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27019,49 +42239,59 @@ module Tables = struct 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.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 x : (Parsetree.core_type) = Obj.magic x in - let _1 : unit = Obj.magic _1 in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_x_ in - let _v : (Parsetree.core_type option) = let x = -# 183 "" - ( x ) -# 27042 "mlx/parser.ml" - in + let _endpos = _endpos__3_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = + let _loc__3_ = (_startpos__3_, _endpos__3_) in + +# 3025 "mlx/parser.mly" + ( expecting _loc__3_ "pattern" ) +# 42273 "mlx/parser.ml" + + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1013 "mlx/parser.mly" + ( mkpat ~loc:_sloc _1 ) +# 42283 "mlx/parser.ml" + + in + +# 3030 "mlx/parser.mly" + ( _1 ) +# 42289 "mlx/parser.ml" + + in -# 116 "" - ( Some x ) -# 27047 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.expression option) = -# 114 "" - ( None ) -# 27065 "mlx/parser.ml" +# 3006 "mlx/parser.mly" + ( _1 ) +# 42295 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27074,49 +42304,56 @@ module Tables = struct 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.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 x : (Parsetree.expression) = Obj.magic x in - let _1 : unit = Obj.magic _1 in + let _3 : (Parsetree.pattern) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_x_ in - let _v : (Parsetree.expression option) = let x = -# 183 "" - ( x ) -# 27097 "mlx/parser.ml" - in + let _endpos = _endpos__3_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = +# 3027 "mlx/parser.mly" + ( Ppat_or(_1, _3) ) +# 42336 "mlx/parser.ml" + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1013 "mlx/parser.mly" + ( mkpat ~loc:_sloc _1 ) +# 42345 "mlx/parser.ml" + + in + +# 3030 "mlx/parser.mly" + ( _1 ) +# 42351 "mlx/parser.ml" + + in -# 116 "" - ( Some x ) -# 27102 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.module_type option) = -# 114 "" - ( None ) -# 27120 "mlx/parser.ml" +# 3006 "mlx/parser.mly" + ( _1 ) +# 42357 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27129,31 +42366,59 @@ module Tables = struct 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.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 x : (Parsetree.module_type) = Obj.magic x in - let _1 : unit = Obj.magic _1 in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_x_ in - let _v : (Parsetree.module_type option) = let x = -# 183 "" - ( x ) -# 27152 "mlx/parser.ml" - in + let _endpos = _endpos__3_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = + let _loc__3_ = (_startpos__3_, _endpos__3_) in + +# 3029 "mlx/parser.mly" + ( expecting _loc__3_ "pattern" ) +# 42400 "mlx/parser.ml" + + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1013 "mlx/parser.mly" + ( mkpat ~loc:_sloc _1 ) +# 42410 "mlx/parser.ml" + + in + +# 3030 "mlx/parser.mly" + ( _1 ) +# 42416 "mlx/parser.ml" + + in -# 116 "" - ( Some x ) -# 27157 "mlx/parser.ml" +# 3006 "mlx/parser.mly" + ( _1 ) +# 42422 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27164,51 +42429,52 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.pattern option) = -# 114 "" - ( None ) -# 27175 "mlx/parser.ml" - in - { + let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; 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 = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; } = _menhir_stack in - let x : (Parsetree.pattern) = Obj.magic x in - let _1 : unit = Obj.magic _1 in + let _1 : ( +# 786 "mlx/parser.mly" + (string) +# 42443 "mlx/parser.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_x_ in - let _v : (Parsetree.pattern option) = let x = -# 183 "" - ( x ) -# 27207 "mlx/parser.ml" - in + let _endpos = _endpos__1_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 42457 "mlx/parser.ml" + + in + +# 2362 "mlx/parser.mly" + ( Ppat_var _1 ) +# 42463 "mlx/parser.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1013 "mlx/parser.mly" + ( mkpat ~loc:_sloc _1 ) +# 42472 "mlx/parser.ml" + + in -# 116 "" - ( Some x ) -# 27212 "mlx/parser.ml" +# 2364 "mlx/parser.mly" + ( _1 ) +# 42478 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27219,69 +42485,36 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.expression option) = -# 114 "" - ( None ) -# 27230 "mlx/parser.ml" - in - { + let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; 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 = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; } = _menhir_stack in - let x : (Parsetree.expression) = Obj.magic x 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_x_ in - let _v : (Parsetree.expression option) = let x = -# 183 "" - ( x ) -# 27262 "mlx/parser.ml" - in + let _endpos = _endpos__1_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = +# 2363 "mlx/parser.mly" + ( Ppat_any ) +# 42504 "mlx/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1013 "mlx/parser.mly" + ( mkpat ~loc:_sloc _1 ) +# 42512 "mlx/parser.ml" + + in -# 116 "" - ( Some x ) -# 27267 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : ((Parsetree.core_type option * Parsetree.core_type option) option) = -# 114 "" - ( None ) -# 27285 "mlx/parser.ml" +# 2364 "mlx/parser.mly" + ( _1 ) +# 42518 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27294,19 +42527,19 @@ module Tables = struct 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.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic x in + let _1 : (Parsetree.structure) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : ((Parsetree.core_type option * Parsetree.core_type option) option) = -# 116 "" - ( Some x ) -# 27310 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.payload) = +# 4363 "mlx/parser.mly" + ( PStr _1 ) +# 42543 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27318,24 +42551,27 @@ module Tables = struct (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; + 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 _1 : ( -# 733 "mlx/parser.mly" - (string) -# 27331 "mlx/parser.ml" - ) = Obj.magic _1 in + let _2 : (Parsetree.signature) = 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__1_ in - let _v : (string) = -# 3836 "mlx/parser.mly" - ( _1 ) -# 27339 "mlx/parser.ml" + let _endpos = _endpos__2_ in + let _v : (Parsetree.payload) = +# 4364 "mlx/parser.mly" + ( PSig _2 ) +# 42575 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27348,37 +42584,26 @@ 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 = _; - 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; - }; + 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 _2 : ( -# 714 "mlx/parser.mly" - (string) -# 27373 "mlx/parser.ml" - ) = Obj.magic _2 in + let _2 : (Parsetree.core_type) = 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) = -# 3837 "mlx/parser.mly" - ( _2 ) -# 27382 "mlx/parser.ml" + let _endpos = _endpos__2_ in + let _v : (Parsetree.payload) = +# 4365 "mlx/parser.mly" + ( PTyp _2 ) +# 42607 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27391,50 +42616,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 = mty; - MenhirLib.EngineTypes.startp = _startpos_mty_; - MenhirLib.EngineTypes.endp = _endpos_mty_; - 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 = me; - MenhirLib.EngineTypes.startp = _startpos_me_; - MenhirLib.EngineTypes.endp = _endpos_me_; - 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 mty : (Parsetree.module_type) = Obj.magic mty in - let _3 : unit = Obj.magic _3 in - let me : (Parsetree.module_expr) = Obj.magic me in + let _2 : (Parsetree.pattern) = 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 : (Parsetree.module_expr) = let _endpos = _endpos__5_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1353 "mlx/parser.mly" - ( mkmod ~loc:_sloc (Pmod_constraint(me, mty)) ) -# 27438 "mlx/parser.ml" + let _endpos = _endpos__2_ in + let _v : (Parsetree.payload) = +# 4366 "mlx/parser.mly" + ( PPat (_2, None) ) +# 42639 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27447,49 +42648,40 @@ 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 = _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 = _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.module_type) = Obj.magic _4 in + let _4 : (Parsetree.expression) = Obj.magic _4 in let _3 : unit = Obj.magic _3 in - let _2 : (Parsetree.module_expr) = Obj.magic _2 in + let _2 : (Parsetree.pattern) = 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 : (Parsetree.module_expr) = let _loc__5_ = (_startpos__5_, _endpos__5_) in - let _loc__1_ = (_startpos__1_, _endpos__1_) in - -# 1355 "mlx/parser.mly" - ( unclosed "(" _loc__1_ ")" _loc__5_ ) -# 27493 "mlx/parser.ml" + let _endpos = _endpos__4_ in + let _v : (Parsetree.payload) = +# 4367 "mlx/parser.mly" + ( PPat (_2, Some _4) ) +# 42685 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27501,34 +42693,20 @@ module Tables = struct (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 = me; - MenhirLib.EngineTypes.startp = _startpos_me_; - MenhirLib.EngineTypes.endp = _endpos_me_; - 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 _3 : unit = Obj.magic _3 in - let me : (Parsetree.module_expr) = Obj.magic me in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.core_type) = 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.module_expr) = -# 1358 "mlx/parser.mly" - ( me (* TODO consider reloc *) ) -# 27532 "mlx/parser.ml" + let _endpos = _endpos__1_ in + let _v : (Parsetree.core_type) = +# 3629 "mlx/parser.mly" + ( _1 ) +# 42710 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27551,25 +42729,60 @@ module Tables = struct 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.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _3 : unit = Obj.magic _3 in - let _2 : (Parsetree.module_expr) = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _3 : (Parsetree.core_type) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let xs : (string Ppxlib.loc list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in + let _startpos = _startpos_xs_ in let _endpos = _endpos__3_ in - let _v : (Parsetree.module_expr) = let _loc__3_ = (_startpos__3_, _endpos__3_) in - let _loc__1_ = (_startpos__1_, _endpos__1_) in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let _1 = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 42753 "mlx/parser.ml" + in + +# 1080 "mlx/parser.mly" + ( xs ) +# 42758 "mlx/parser.ml" + + in + +# 3621 "mlx/parser.mly" + ( _1 ) +# 42764 "mlx/parser.ml" + + in + +# 3625 "mlx/parser.mly" + ( Ptyp_poly(_1, _3) ) +# 42770 "mlx/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__3_, _startpos_xs_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1015 "mlx/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 42780 "mlx/parser.ml" + + in -# 1360 "mlx/parser.mly" - ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 27573 "mlx/parser.ml" +# 3631 "mlx/parser.mly" + ( _1 ) +# 42786 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27581,64 +42794,25 @@ module Tables = struct (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 = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; - 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; - }; - }; - }; - }; + 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 e : (Parsetree.expression) = Obj.magic e in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.core_type) = 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.module_expr) = let e = -# 1377 "mlx/parser.mly" - ( e ) -# 27626 "mlx/parser.ml" - in - let attrs = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" + let _endpos = _endpos__1_ in + let _v : (Parsetree.core_type) = let _1 = +# 3660 "mlx/parser.mly" ( _1 ) -# 27633 "mlx/parser.ml" - - in - let _endpos = _endpos__5_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in +# 42811 "mlx/parser.ml" + in -# 1364 "mlx/parser.mly" - ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) -# 27642 "mlx/parser.ml" +# 3629 "mlx/parser.mly" + ( _1 ) +# 42816 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27651,96 +42825,75 @@ 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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 = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; - 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; - }; - }; - }; - }; + 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 _5 : unit = Obj.magic _5 in - let _1_inlined2 : (Parsetree.module_type) = Obj.magic _1_inlined2 in - let _2_inlined1 : unit = Obj.magic _2_inlined1 in - let e : (Parsetree.expression) = Obj.magic e in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let _1 : (Parsetree.core_type) = Obj.magic _1 in let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let xs : (string Ppxlib.loc list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Parsetree.module_expr) = let e = - let (_endpos__1_, _startpos__1_, _1, _2) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2, _2_inlined1) in - let ty = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos_xs_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let _3 = +# 3660 "mlx/parser.mly" + ( _1 ) +# 42857 "mlx/parser.ml" + in + let _1 = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 42864 "mlx/parser.ml" + in + +# 1080 "mlx/parser.mly" + ( xs ) +# 42869 "mlx/parser.ml" + + in + +# 3621 "mlx/parser.mly" + ( _1 ) +# 42875 "mlx/parser.ml" + + in -# 3488 "mlx/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 ) -# 27717 "mlx/parser.ml" +# 3625 "mlx/parser.mly" + ( Ptyp_poly(_1, _3) ) +# 42881 "mlx/parser.ml" in - let _endpos_ty_ = _endpos__1_ in - let _endpos = _endpos_ty_ in - let _startpos = _startpos_e_ in - let _loc = (_startpos, _endpos) in - -# 1379 "mlx/parser.mly" - ( ghexp ~loc:_loc (Pexp_constraint (e, ty)) ) -# 27727 "mlx/parser.ml" - - in - let attrs = - let _1 = _1_inlined1 in + let _startpos__1_ = _startpos_xs_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3922 "mlx/parser.mly" - ( _1 ) -# 27735 "mlx/parser.ml" +# 1015 "mlx/parser.mly" + ( mktyp ~loc:_sloc _1 ) +# 42891 "mlx/parser.ml" in - let _endpos = _endpos__5_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1364 "mlx/parser.mly" - ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) -# 27744 "mlx/parser.ml" +# 3631 "mlx/parser.mly" + ( _1 ) +# 42897 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27753,123 +42906,43 @@ 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 = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; - 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; - }; - }; - }; - }; - }; + 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 _1_inlined3 : (Parsetree.module_type) = Obj.magic _1_inlined3 in let _4 : unit = Obj.magic _4 in - let _1_inlined2 : (Parsetree.module_type) = Obj.magic _1_inlined2 in - let _2_inlined1 : unit = Obj.magic _2_inlined1 in - let e : (Parsetree.expression) = Obj.magic e in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in + let _3 : (Parsetree.payload) = Obj.magic _3 in + let _2 : (Dune__exe__Ast_helper.str) = 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 : (Parsetree.module_expr) = let e = - let (_endpos__1_inlined1_, _startpos__1_inlined1_, _endpos__1_, _startpos__1_, _1_inlined1, _1, _2) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined3, _1_inlined2, _2_inlined1) in - let ty2 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3488 "mlx/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 ) -# 27834 "mlx/parser.ml" - - in - let _endpos_ty2_ = _endpos__1_inlined1_ in - let ty1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3488 "mlx/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 ) -# 27847 "mlx/parser.ml" - - in - let _endpos = _endpos_ty2_ in - let _startpos = _startpos_e_ in - let _loc = (_startpos, _endpos) in - -# 1381 "mlx/parser.mly" - ( ghexp ~loc:_loc (Pexp_coerce (e, Some ty1, ty2)) ) -# 27856 "mlx/parser.ml" - - in - let attrs = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 27864 "mlx/parser.ml" - - in - let _endpos = _endpos__5_ in + let _endpos = _endpos__4_ in + let _v : (Parsetree.attribute) = let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1364 "mlx/parser.mly" - ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) -# 27873 "mlx/parser.ml" +# 4324 "mlx/parser.mly" + ( mk_attr ~loc:(make_loc _sloc) _2 _3 ) +# 42946 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27882,40 +42955,52 @@ 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 = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = prim; + MenhirLib.EngineTypes.startp = _startpos_prim_; + MenhirLib.EngineTypes.endp = _endpos_prim_; 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 = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.semv = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; 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 = _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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + 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; + }; + }; }; }; }; @@ -27923,55 +43008,57 @@ module Tables = struct }; }; } = _menhir_stack in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let prim : (string list) = Obj.magic prim in + let _7 : unit = Obj.magic _7 in + let ty : (Parsetree.core_type) = Obj.magic ty in let _5 : unit = Obj.magic _5 in - let _1_inlined2 : (Parsetree.module_type) = Obj.magic _1_inlined2 in - let _2_inlined1 : unit = Obj.magic _2_inlined1 in - let e : (Parsetree.expression) = Obj.magic e in + let _1_inlined2 : (string) = Obj.magic _1_inlined2 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in + let ext : (string Ppxlib.loc option) = Obj.magic ext 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 : (Parsetree.module_expr) = let e = - let (_endpos__1_, _startpos__1_, _1, _2) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2, _2_inlined1) in - let ty2 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3488 "mlx/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 ) -# 27948 "mlx/parser.ml" - - in - let _endpos_ty2_ = _endpos__1_ in - let _endpos = _endpos_ty2_ in - let _startpos = _startpos_e_ in - let _loc = (_startpos, _endpos) in + let _endpos = _endpos__1_inlined3_ in + let _v : (Parsetree.value_description * string Ppxlib.loc option) = let attrs2 = + let _1 = _1_inlined3 in -# 1383 "mlx/parser.mly" - ( ghexp ~loc:_loc (Pexp_coerce (e, None, ty2)) ) -# 27958 "mlx/parser.ml" +# 4333 "mlx/parser.mly" + ( _1 ) +# 43029 "mlx/parser.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 43041 "mlx/parser.ml" in - let attrs = + let attrs1 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 27966 "mlx/parser.ml" +# 43049 "mlx/parser.ml" in - let _endpos = _endpos__5_ in + let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1364 "mlx/parser.mly" - ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) -# 27975 "mlx/parser.ml" +# 3250 "mlx/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 ) +# 43062 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27982,66 +43069,19 @@ module Tables = struct }); (fun _menhir_env -> 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.next = { - 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 = _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 _6 : unit = Obj.magic _6 in - let _5 : unit = Obj.magic _5 in - let _4 : (Parsetree.expression) = Obj.magic _4 in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__6_ in - let _v : (Parsetree.module_expr) = let _3 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 28037 "mlx/parser.ml" - - in - let _loc__6_ = (_startpos__6_, _endpos__6_) in - let _loc__1_ = (_startpos__1_, _endpos__1_) in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Asttypes.private_flag) = let _1 = +# 4191 "mlx/parser.mly" + ( Public ) +# 43080 "mlx/parser.ml" + in -# 1366 "mlx/parser.mly" - ( unclosed "(" _loc__1_ ")" _loc__6_ ) -# 28045 "mlx/parser.ml" +# 4188 "mlx/parser.mly" + ( _1 ) +# 43085 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28053,65 +43093,43 @@ module Tables = struct (fun _menhir_env -> 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.next = { - 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 = _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; - }; - }; - }; - }; - }; + 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 : unit = Obj.magic _6 in - let _5 : unit = Obj.magic _5 in - let _4 : (Parsetree.expression) = Obj.magic _4 in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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__6_ in - let _v : (Parsetree.module_expr) = let _3 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 28107 "mlx/parser.ml" - - in - let _loc__6_ = (_startpos__6_, _endpos__6_) in - let _loc__1_ = (_startpos__1_, _endpos__1_) in + let _endpos = _endpos__1_ in + let _v : (Asttypes.private_flag) = let _1 = +# 4192 "mlx/parser.mly" + ( Private ) +# 43110 "mlx/parser.ml" + in -# 1368 "mlx/parser.mly" - ( unclosed "(" _loc__1_ ")" _loc__6_ ) -# 28115 "mlx/parser.ml" +# 4188 "mlx/parser.mly" + ( _1 ) +# 43115 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = +# 4214 "mlx/parser.mly" + ( Public, Concrete ) +# 43133 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28123,58 +43141,20 @@ module Tables = struct (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 = _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; - }; - }; - }; - }; + 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 _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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__5_ in - let _v : (Parsetree.module_expr) = let _3 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 28170 "mlx/parser.ml" - - in - let _loc__5_ = (_startpos__5_, _endpos__5_) in - let _loc__1_ = (_startpos__1_, _endpos__1_) in - -# 1370 "mlx/parser.mly" - ( unclosed "(" _loc__1_ ")" _loc__5_ ) -# 28178 "mlx/parser.ml" + let _endpos = _endpos__1_ in + let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = +# 4215 "mlx/parser.mly" + ( Private, Concrete ) +# 43158 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28186,27 +43166,20 @@ module Tables = struct (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; - }; + 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 : (Ppxlib.longident) = Obj.magic _1 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 : (Ppxlib.longident) = -# 1271 "mlx/parser.mly" - ( _1 ) -# 28210 "mlx/parser.ml" + let _endpos = _endpos__1_ in + let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = +# 4216 "mlx/parser.mly" + ( Public, Virtual ) +# 43183 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28231,14 +43204,14 @@ module Tables = struct }; } = _menhir_stack in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 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 : (Ppxlib.longident) = -# 1256 "mlx/parser.mly" - ( _1 ) -# 28242 "mlx/parser.ml" + let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = +# 4217 "mlx/parser.mly" + ( Private, Virtual ) +# 43215 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28263,14 +43236,14 @@ module Tables = struct }; } = _menhir_stack in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.core_type) = Obj.magic _1 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.core_type) = -# 1231 "mlx/parser.mly" - ( _1 ) -# 28274 "mlx/parser.ml" + let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = +# 4218 "mlx/parser.mly" + ( Private, Virtual ) +# 43247 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28281,28 +43254,14 @@ module Tables = struct }); (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 : (Parsetree.expression) = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.expression) = -# 1236 "mlx/parser.mly" - ( _1 ) -# 28306 "mlx/parser.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Asttypes.rec_flag) = +# 4169 "mlx/parser.mly" + ( Nonrecursive ) +# 43265 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28314,27 +43273,20 @@ module Tables = struct (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; - }; + 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 : (Ppxlib.longident) = Obj.magic _1 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 : (Ppxlib.longident) = -# 1261 "mlx/parser.mly" - ( _1 ) -# 28338 "mlx/parser.ml" + let _endpos = _endpos__1_ in + let _v : (Asttypes.rec_flag) = +# 4170 "mlx/parser.mly" + ( Recursive ) +# 43290 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28346,27 +43298,26 @@ module Tables = struct (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; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = fields; + MenhirLib.EngineTypes.startp = _startpos_fields_; + MenhirLib.EngineTypes.endp = _endpos_fields_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let fields : ((Mlx_shim.Longident.t Ppxlib.loc * Parsetree.expression) list) = Obj.magic fields in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Ppxlib.longident) = -# 1266 "mlx/parser.mly" - ( _1 ) -# 28370 "mlx/parser.ml" + let _startpos = _startpos_fields_ in + let _endpos = _endpos_fields_ in + let _v : (Parsetree.expression option * + (Mlx_shim.Longident.t Ppxlib.loc * Parsetree.expression) list) = let eo = +# 124 "" + ( None ) +# 43316 "mlx/parser.ml" + in + +# 2929 "mlx/parser.mly" + ( eo, fields ) +# 43321 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28379,26 +43330,46 @@ module Tables = struct 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.semv = fields; + MenhirLib.EngineTypes.startp = _startpos_fields_; + MenhirLib.EngineTypes.endp = _endpos_fields_; 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 = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in + let fields : ((Mlx_shim.Longident.t Ppxlib.loc * Parsetree.expression) list) = Obj.magic fields in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.module_expr) = Obj.magic _1 in + let x : (Parsetree.expression) = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.module_expr) = -# 1226 "mlx/parser.mly" - ( _1 ) -# 28402 "mlx/parser.ml" + let _startpos = _startpos_x_ in + let _endpos = _endpos_fields_ in + let _v : (Parsetree.expression option * + (Mlx_shim.Longident.t Ppxlib.loc * Parsetree.expression) list) = let eo = + let x = +# 191 "" + ( x ) +# 43362 "mlx/parser.ml" + in + +# 126 "" + ( Some x ) +# 43367 "mlx/parser.ml" + + in + +# 2929 "mlx/parser.mly" + ( eo, fields ) +# 43373 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28410,27 +43381,30 @@ module Tables = struct (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; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.module_type) = Obj.magic _1 in + let d : (Dune__exe__Ast_helper.str * Dune__exe__Ast_helper.str list * + Parsetree.constructor_arguments * Parsetree.core_type option * + Parsetree.attributes * Warnings.loc * Dune__exe__Docstrings.info) = Obj.magic d in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.module_type) = -# 1221 "mlx/parser.mly" - ( _1 ) -# 28434 "mlx/parser.ml" + let _startpos = _startpos_d_ in + let _endpos = _endpos_d_ in + let _v : (Parsetree.constructor_declaration list) = let x = +# 3441 "mlx/parser.mly" + ( + let cid, vars, args, res, attrs, loc, info = d in + Type.constructor cid ~vars ~args ?res ~attrs ~loc ~info + ) +# 43403 "mlx/parser.ml" + in + +# 1211 "mlx/parser.mly" + ( [x] ) +# 43408 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28442,27 +43416,30 @@ module Tables = struct (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; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let d : (Dune__exe__Ast_helper.str * Dune__exe__Ast_helper.str list * + Parsetree.constructor_arguments * Parsetree.core_type option * + Parsetree.attributes * Warnings.loc * Dune__exe__Docstrings.info) = Obj.magic d in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Ppxlib.longident) = -# 1246 "mlx/parser.mly" - ( _1 ) -# 28466 "mlx/parser.ml" + let _startpos = _startpos_d_ in + let _endpos = _endpos_d_ in + let _v : (Parsetree.constructor_declaration list) = let x = +# 3441 "mlx/parser.mly" + ( + let cid, vars, args, res, attrs, loc, info = d in + Type.constructor cid ~vars ~args ?res ~attrs ~loc ~info + ) +# 43438 "mlx/parser.ml" + in + +# 1214 "mlx/parser.mly" + ( [x] ) +# 43443 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28475,26 +43452,36 @@ module Tables = struct 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.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let d : (Dune__exe__Ast_helper.str * Dune__exe__Ast_helper.str list * + Parsetree.constructor_arguments * Parsetree.core_type option * + Parsetree.attributes * Warnings.loc * Dune__exe__Docstrings.info) = Obj.magic d in + let xs : (Parsetree.constructor_declaration list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.pattern) = -# 1241 "mlx/parser.mly" - ( _1 ) -# 28498 "mlx/parser.ml" + let _startpos = _startpos_xs_ in + let _endpos = _endpos_d_ in + let _v : (Parsetree.constructor_declaration list) = let x = +# 3441 "mlx/parser.mly" + ( + let cid, vars, args, res, attrs, loc, info = d in + Type.constructor cid ~vars ~args ?res ~attrs ~loc ~info + ) +# 43480 "mlx/parser.ml" + in + +# 1218 "mlx/parser.mly" + ( x :: xs ) +# 43485 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28506,27 +43493,37 @@ module Tables = struct (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; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let d : (Dune__exe__Ast_helper.str * Dune__exe__Ast_helper.str list * + Parsetree.constructor_arguments * Parsetree.core_type option * + Parsetree.attributes * Warnings.loc * Dune__exe__Docstrings.info) = Obj.magic d in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Ppxlib.longident) = -# 1251 "mlx/parser.mly" - ( _1 ) -# 28530 "mlx/parser.ml" + let _startpos = _startpos_d_ in + let _endpos = _endpos_d_ in + let _v : (Parsetree.extension_constructor list) = let x = + let _1 = +# 3559 "mlx/parser.mly" + ( + let cid, vars, args, res, attrs, loc, info = d in + Te.decl cid ~vars ~args ?res ~attrs ~loc ~info + ) +# 43516 "mlx/parser.ml" + in + +# 3553 "mlx/parser.mly" + ( _1 ) +# 43521 "mlx/parser.ml" + + in + +# 1211 "mlx/parser.mly" + ( [x] ) +# 43527 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28538,45 +43535,25 @@ module Tables = struct (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 = _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 : (Parsetree.pattern) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + 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.extension_constructor) = 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 _endpos = _endpos__3_ in - let _symbolstartpos = _startpos__1_ in - let _loc__2_ = (_startpos__2_, _endpos__2_) in - let _sloc = (_symbolstartpos, _endpos) in - -# 2774 "mlx/parser.mly" - ( mkpat_cons ~loc:_sloc _loc__2_ (ghpat ~loc:_sloc (Ppat_tuple[_1;_3])) ) -# 28574 "mlx/parser.ml" - - in - -# 2762 "mlx/parser.mly" + let _endpos = _endpos__1_ in + let _v : (Parsetree.extension_constructor list) = let x = +# 3555 "mlx/parser.mly" ( _1 ) -# 28580 "mlx/parser.ml" +# 43552 "mlx/parser.ml" + in + +# 1211 "mlx/parser.mly" + ( [x] ) +# 43557 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28588,32 +43565,37 @@ module Tables = struct (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; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : (Parsetree.attribute) = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let d : (Dune__exe__Ast_helper.str * Dune__exe__Ast_helper.str list * + Parsetree.constructor_arguments * Parsetree.core_type option * + Parsetree.attributes * Warnings.loc * Dune__exe__Docstrings.info) = Obj.magic d 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 = -# 2776 "mlx/parser.mly" - ( Pat.attr _1 _2 ) -# 28612 "mlx/parser.ml" - in - -# 2762 "mlx/parser.mly" + let _startpos = _startpos_d_ in + let _endpos = _endpos_d_ in + let _v : (Parsetree.extension_constructor list) = let x = + let _1 = +# 3559 "mlx/parser.mly" + ( + let cid, vars, args, res, attrs, loc, info = d in + Te.decl cid ~vars ~args ?res ~attrs ~loc ~info + ) +# 43588 "mlx/parser.ml" + in + +# 3553 "mlx/parser.mly" ( _1 ) -# 28617 "mlx/parser.ml" +# 43593 "mlx/parser.ml" + + in + +# 1214 "mlx/parser.mly" + ( [x] ) +# 43599 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28631,19 +43613,19 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let _1 : (Parsetree.extension_constructor) = 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.pattern) = let _1 = -# 2778 "mlx/parser.mly" + let _v : (Parsetree.extension_constructor list) = let x = +# 3555 "mlx/parser.mly" ( _1 ) -# 28642 "mlx/parser.ml" +# 43624 "mlx/parser.ml" in -# 2762 "mlx/parser.mly" - ( _1 ) -# 28647 "mlx/parser.ml" +# 1214 "mlx/parser.mly" + ( [x] ) +# 43629 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28656,69 +43638,43 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; 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; - }; + 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 _1_inlined1 : (string) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let d : (Dune__exe__Ast_helper.str * Dune__exe__Ast_helper.str list * + Parsetree.constructor_arguments * Parsetree.core_type option * + Parsetree.attributes * Warnings.loc * Dune__exe__Docstrings.info) = Obj.magic d in + let xs : (Parsetree.extension_constructor list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined1_ in - let _v : (Parsetree.pattern) = let _1 = - let _1 = - let _1 = - let _3 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 28694 "mlx/parser.ml" - - in - -# 2781 "mlx/parser.mly" - ( Ppat_alias(_1, _3) ) -# 28700 "mlx/parser.ml" - - in - let _endpos__1_ = _endpos__1_inlined1_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 936 "mlx/parser.mly" - ( mkpat ~loc:_sloc _1 ) -# 28710 "mlx/parser.ml" - - in + let _startpos = _startpos_xs_ in + let _endpos = _endpos_d_ in + let _v : (Parsetree.extension_constructor list) = let x = + let _1 = +# 3559 "mlx/parser.mly" + ( + let cid, vars, args, res, attrs, loc, info = d in + Te.decl cid ~vars ~args ?res ~attrs ~loc ~info + ) +# 43667 "mlx/parser.ml" + in -# 2792 "mlx/parser.mly" - ( _1 ) -# 28716 "mlx/parser.ml" +# 3553 "mlx/parser.mly" + ( _1 ) +# 43672 "mlx/parser.ml" in -# 2762 "mlx/parser.mly" - ( _1 ) -# 28722 "mlx/parser.ml" +# 1218 "mlx/parser.mly" + ( x :: xs ) +# 43678 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28731,59 +43687,31 @@ 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; 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; - }; + 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 _3 : unit = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let _1 : (Parsetree.extension_constructor) = Obj.magic _1 in + let xs : (Parsetree.extension_constructor list) = Obj.magic xs 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 _loc__3_ = (_startpos__3_, _endpos__3_) in - -# 2783 "mlx/parser.mly" - ( expecting _loc__3_ "identifier" ) -# 28765 "mlx/parser.ml" - - in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 936 "mlx/parser.mly" - ( mkpat ~loc:_sloc _1 ) -# 28775 "mlx/parser.ml" - - in - -# 2792 "mlx/parser.mly" - ( _1 ) -# 28781 "mlx/parser.ml" - - in - -# 2762 "mlx/parser.mly" + let _startpos = _startpos_xs_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.extension_constructor list) = let x = +# 3555 "mlx/parser.mly" ( _1 ) -# 28787 "mlx/parser.ml" +# 43710 "mlx/parser.ml" + in + +# 1218 "mlx/parser.mly" + ( x :: xs ) +# 43715 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28796,41 +43724,29 @@ module Tables = struct 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.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Parsetree.pattern list) = Obj.magic _1 in + let d : (Dune__exe__Ast_helper.str * Dune__exe__Ast_helper.str list * + Parsetree.constructor_arguments * Parsetree.core_type option * + Parsetree.attributes * Warnings.loc * Dune__exe__Docstrings.info) = Obj.magic d in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Parsetree.pattern) = let _1 = - let _1 = - let _1 = -# 2785 "mlx/parser.mly" - ( Ppat_tuple(List.rev _1) ) -# 28814 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 936 "mlx/parser.mly" - ( mkpat ~loc:_sloc _1 ) -# 28822 "mlx/parser.ml" - - in - -# 2792 "mlx/parser.mly" - ( _1 ) -# 28828 "mlx/parser.ml" - - in + let _startpos = _startpos_d_ in + let _endpos = _endpos_d_ in + let _v : (Parsetree.extension_constructor list) = let x = +# 3559 "mlx/parser.mly" + ( + let cid, vars, args, res, attrs, loc, info = d in + Te.decl cid ~vars ~args ?res ~attrs ~loc ~info + ) +# 43745 "mlx/parser.ml" + in -# 2762 "mlx/parser.mly" - ( _1 ) -# 28834 "mlx/parser.ml" +# 1211 "mlx/parser.mly" + ( [x] ) +# 43750 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28842,60 +43758,30 @@ module Tables = struct (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 = _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; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _3 : unit = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let d : (Dune__exe__Ast_helper.str * Dune__exe__Ast_helper.str list * + Parsetree.constructor_arguments * Parsetree.core_type option * + Parsetree.attributes * Warnings.loc * Dune__exe__Docstrings.info) = Obj.magic d 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 _loc__3_ = (_startpos__3_, _endpos__3_) in - -# 2787 "mlx/parser.mly" - ( expecting _loc__3_ "pattern" ) -# 28877 "mlx/parser.ml" - - in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 936 "mlx/parser.mly" - ( mkpat ~loc:_sloc _1 ) -# 28887 "mlx/parser.ml" - - in - -# 2792 "mlx/parser.mly" - ( _1 ) -# 28893 "mlx/parser.ml" - - in + let _startpos = _startpos_d_ in + let _endpos = _endpos_d_ in + let _v : (Parsetree.extension_constructor list) = let x = +# 3559 "mlx/parser.mly" + ( + let cid, vars, args, res, attrs, loc, info = d in + Te.decl cid ~vars ~args ?res ~attrs ~loc ~info + ) +# 43780 "mlx/parser.ml" + in -# 2762 "mlx/parser.mly" - ( _1 ) -# 28899 "mlx/parser.ml" +# 1214 "mlx/parser.mly" + ( [x] ) +# 43785 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28908,56 +43794,36 @@ 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; 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; - }; + 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 _3 : (Parsetree.pattern) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let d : (Dune__exe__Ast_helper.str * Dune__exe__Ast_helper.str list * + Parsetree.constructor_arguments * Parsetree.core_type option * + Parsetree.attributes * Warnings.loc * Dune__exe__Docstrings.info) = Obj.magic d in + let xs : (Parsetree.extension_constructor list) = Obj.magic xs 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 = -# 2789 "mlx/parser.mly" - ( Ppat_or(_1, _3) ) -# 28940 "mlx/parser.ml" - in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 936 "mlx/parser.mly" - ( mkpat ~loc:_sloc _1 ) -# 28949 "mlx/parser.ml" - - in - -# 2792 "mlx/parser.mly" - ( _1 ) -# 28955 "mlx/parser.ml" - - in + let _startpos = _startpos_xs_ in + let _endpos = _endpos_d_ in + let _v : (Parsetree.extension_constructor list) = let x = +# 3559 "mlx/parser.mly" + ( + let cid, vars, args, res, attrs, loc, info = d in + Te.decl cid ~vars ~args ?res ~attrs ~loc ~info + ) +# 43822 "mlx/parser.ml" + in -# 2762 "mlx/parser.mly" - ( _1 ) -# 28961 "mlx/parser.ml" +# 1218 "mlx/parser.mly" + ( x :: xs ) +# 43827 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28970,9 +43836,9 @@ 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -28980,49 +43846,42 @@ module Tables = struct 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.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _3 : unit = Obj.magic _3 in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let xs : ((string option * Parsetree.expression) list) = Obj.magic xs 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 _startpos = _startpos_xs_ in + let _endpos = _endpos__1_ in + let _v : ((string option * Parsetree.expression) list) = let x = let _1 = - let _1 = - let _loc__3_ = (_startpos__3_, _endpos__3_) in - -# 2791 "mlx/parser.mly" - ( expecting _loc__3_ "pattern" ) -# 29004 "mlx/parser.ml" - - in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 43868 "mlx/parser.ml" + in -# 936 "mlx/parser.mly" - ( mkpat ~loc:_sloc _1 ) -# 29014 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 43873 "mlx/parser.ml" in -# 2792 "mlx/parser.mly" - ( _1 ) -# 29020 "mlx/parser.ml" +# 2882 "mlx/parser.mly" + ( None, _1 ) +# 43879 "mlx/parser.ml" in -# 2762 "mlx/parser.mly" - ( _1 ) -# 29026 "mlx/parser.ml" +# 2898 "mlx/parser.mly" + ( x :: xs ) +# 43885 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29035,9 +43894,9 @@ 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 = xs_inlined1; + MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined2; @@ -29049,123 +43908,112 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; } = _menhir_stack in - let _3 : (Parsetree.pattern) = Obj.magic _3 in + let xs_inlined1 : (Parsetree.case list) = Obj.magic xs_inlined1 in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 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 _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 29076 "mlx/parser.ml" - - in - -# 3935 "mlx/parser.mly" - ( _1, _2 ) -# 29082 "mlx/parser.ml" - - in - let _endpos = _endpos__3_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2764 "mlx/parser.mly" - ( mkpat_attrs ~loc:_sloc (Ppat_exception _3) _2) -# 29091 "mlx/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 = _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 : (Parsetree.pattern) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern list) = 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 list) = -# 2891 "mlx/parser.mly" - ( _3 :: _1 ) -# 29130 "mlx/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 = _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 : (Parsetree.pattern) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let xs : ((string option * Parsetree.expression) list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.pattern list) = -# 2892 "mlx/parser.mly" - ( [_3; _1] ) -# 29169 "mlx/parser.ml" + let _startpos = _startpos_xs_ in + let _endpos = _endpos_xs_inlined1_ in + let _v : ((string option * Parsetree.expression) list) = let x = + let (_endpos_xs_, xs) = (_endpos_xs_inlined1_, xs_inlined1) in + let _1 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 43951 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 43956 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 43962 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 43973 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 43979 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 43999 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 44005 "mlx/parser.ml" + + in + +# 2882 "mlx/parser.mly" + ( None, _1 ) +# 44011 "mlx/parser.ml" + + in + +# 2898 "mlx/parser.mly" + ( x :: xs ) +# 44017 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29178,34 +44026,52 @@ 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_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; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let _3 : unit = Obj.magic _3 in + let _2_inlined1 : (Parsetree.expression) = Obj.magic _2_inlined1 in + let _1 : ( +# 772 "mlx/parser.mly" + (string) +# 44057 "mlx/parser.ml" + ) = Obj.magic _1 in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let xs : ((string option * Parsetree.expression) list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.pattern list) = let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _startpos = _startpos_xs_ in + let _endpos = _endpos__2_inlined1_ in + let _v : ((string option * Parsetree.expression) list) = let x = + let _2 = _2_inlined1 in + +# 2884 "mlx/parser.mly" + ( Some _1, _2 ) +# 44069 "mlx/parser.ml" + + in -# 2893 "mlx/parser.mly" - ( expecting _loc__3_ "pattern" ) -# 29209 "mlx/parser.ml" +# 2898 "mlx/parser.mly" + ( x :: xs ) +# 44075 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29218,33 +44084,53 @@ 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let _3 : (Parsetree.pattern) = Obj.magic _3 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 44114 "mlx/parser.ml" + ) = Obj.magic label in + let _1 : unit = Obj.magic _1 in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern list) = Obj.magic _1 in + let xs : ((string option * Parsetree.expression) list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.pattern list) = -# 2891 "mlx/parser.mly" - ( _3 :: _1 ) -# 29248 "mlx/parser.ml" + let _startpos = _startpos_xs_ in + let _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.expression) list) = let x = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 2886 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkexpvar ~loc label ) +# 44128 "mlx/parser.ml" + + in + +# 2898 "mlx/parser.mly" + ( x :: xs ) +# 44134 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29257,33 +44143,77 @@ 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 = _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 = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; }; } = _menhir_stack in - let _3 : (Parsetree.pattern) = Obj.magic _3 in + let _5 : unit = Obj.magic _5 in + let c : (Parsetree.type_constraint) = Obj.magic c in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 44193 "mlx/parser.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let xs : ((string option * Parsetree.expression) list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.pattern list) = -# 2892 "mlx/parser.mly" - ( [_3; _1] ) -# 29287 "mlx/parser.ml" + let _startpos = _startpos_xs_ in + let _endpos = _endpos__5_ in + let _v : ((string option * Parsetree.expression) list) = let x = + let (_startpos__2_, _2) = (_startpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__5_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 2889 "mlx/parser.mly" + ( Some label, + mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_label_ label) c ) +# 44211 "mlx/parser.ml" + + in + +# 2898 "mlx/parser.mly" + ( x :: xs ) +# 44217 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29296,9 +44226,9 @@ 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -29313,102 +44243,48 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : unit = Obj.magic _3 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = 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 list) = let _loc__3_ = (_startpos__3_, _endpos__3_) in - -# 2893 "mlx/parser.mly" - ( expecting _loc__3_ "pattern" ) -# 29327 "mlx/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.pattern) = 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.pattern) = -# 2797 "mlx/parser.mly" - ( _1 ) -# 29352 "mlx/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.pattern) = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Parsetree.expression) = 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 _endpos = _endpos__1_inlined1_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _1 = _1_inlined1 in let _1 = - let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 29390 "mlx/parser.ml" - - in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 44259 "mlx/parser.ml" + in -# 2800 "mlx/parser.mly" - ( Ppat_construct(_1, Some ([], _2)) ) -# 29396 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 44264 "mlx/parser.ml" in - let _endpos__1_ = _endpos__2_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" - ( mkpat ~loc:_sloc _1 ) -# 29406 "mlx/parser.ml" +# 2882 "mlx/parser.mly" + ( None, _1 ) +# 44270 "mlx/parser.ml" in - -# 2806 "mlx/parser.mly" + let x1 = + let _1 = +# 2303 "mlx/parser.mly" ( _1 ) -# 29412 "mlx/parser.ml" +# 44277 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 44282 "mlx/parser.ml" + + in + +# 2903 "mlx/parser.mly" + ( [ x2; None, x1 ] ) +# 44288 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29421,24 +44297,24 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = pat; - MenhirLib.EngineTypes.startp = _startpos_pat_; - MenhirLib.EngineTypes.endp = _endpos_pat_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + 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; @@ -29456,100 +44332,103 @@ module Tables = struct }; }; } = _menhir_stack in - let pat : (Parsetree.pattern) = Obj.magic pat in - let _5 : unit = Obj.magic _5 in - let xs : (string Ppxlib.loc list) = Obj.magic xs in - let _3 : unit = Obj.magic _3 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_pat_ in - let _v : (Parsetree.pattern) = let _1 = + let _endpos = _endpos_xs_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in let _1 = - let newtypes = -# 2549 "mlx/parser.mly" + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 44354 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" ( xs ) -# 29474 "mlx/parser.ml" - in - let constr = - let _endpos = _endpos__1_ in +# 44359 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 44365 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 44376 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 44382 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 29483 "mlx/parser.ml" +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 44402 "mlx/parser.ml" in -# 2803 "mlx/parser.mly" - ( Ppat_construct(constr, Some (newtypes, pat)) ) -# 29489 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 44408 "mlx/parser.ml" in - let _endpos__1_ = _endpos_pat_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" - ( mkpat ~loc:_sloc _1 ) -# 29499 "mlx/parser.ml" +# 2882 "mlx/parser.mly" + ( None, _1 ) +# 44414 "mlx/parser.ml" in - -# 2806 "mlx/parser.mly" - ( _1 ) -# 29505 "mlx/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.pattern) = Obj.magic _2 in - let _1 : (string) = 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 x1 = let _1 = -# 2805 "mlx/parser.mly" - ( Ppat_variant(_1, Some _2) ) -# 29538 "mlx/parser.ml" +# 2303 "mlx/parser.mly" + ( _1 ) +# 44421 "mlx/parser.ml" in - let _endpos__1_ = _endpos__2_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" - ( mkpat ~loc:_sloc _1 ) -# 29547 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 44426 "mlx/parser.ml" in -# 2806 "mlx/parser.mly" - ( _1 ) -# 29553 "mlx/parser.ml" +# 2903 "mlx/parser.mly" + ( [ x2; None, x1 ] ) +# 44432 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29562,19 +44441,19 @@ 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_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + 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; @@ -29585,36 +44464,41 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : (Parsetree.pattern) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in + let _2_inlined1 : (Parsetree.expression) = Obj.magic _2_inlined1 in + let _1_inlined1 : ( +# 772 "mlx/parser.mly" + (string) +# 44472 "mlx/parser.ml" + ) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = 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 _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 3922 "mlx/parser.mly" - ( _1 ) -# 29603 "mlx/parser.ml" - - in + let _endpos = _endpos__2_inlined1_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let (_2, _1) = (_2_inlined1, _1_inlined1) in -# 3935 "mlx/parser.mly" - ( _1, _2 ) -# 29609 "mlx/parser.ml" +# 2884 "mlx/parser.mly" + ( Some _1, _2 ) +# 44484 "mlx/parser.ml" + + in + let x1 = + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 44491 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 44496 "mlx/parser.ml" in - let _endpos = _endpos__3_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2808 "mlx/parser.mly" - ( mkpat_attrs ~loc:_sloc (Ppat_lazy _3) _2) -# 29618 "mlx/parser.ml" +# 2903 "mlx/parser.mly" + ( [ x2; None, x1 ] ) +# 44502 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29627,81 +44511,66 @@ 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; 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 : (Parsetree.pattern) = Obj.magic _3 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 44541 "mlx/parser.ml" + ) = Obj.magic label in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let _1 : (Parsetree.expression) = 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 _endpos = _endpos__3_ in - let _symbolstartpos = _startpos__1_ in - let _loc__2_ = (_startpos__2_, _endpos__2_) in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _1 = _1_inlined1 in + let _loc_label_ = (_startpos_label_, _endpos_label_) in -# 2774 "mlx/parser.mly" - ( mkpat_cons ~loc:_sloc _loc__2_ (ghpat ~loc:_sloc (Ppat_tuple[_1;_3])) ) -# 29662 "mlx/parser.ml" +# 2886 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkexpvar ~loc label ) +# 44556 "mlx/parser.ml" in - -# 2769 "mlx/parser.mly" + let x1 = + let _1 = +# 2303 "mlx/parser.mly" ( _1 ) -# 29668 "mlx/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.attribute) = Obj.magic _2 in - let _1 : (Parsetree.pattern) = 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 = -# 2776 "mlx/parser.mly" - ( Pat.attr _1 _2 ) -# 29700 "mlx/parser.ml" - in +# 44563 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 44568 "mlx/parser.ml" + + in -# 2769 "mlx/parser.mly" - ( _1 ) -# 29705 "mlx/parser.ml" +# 2903 "mlx/parser.mly" + ( [ x2; None, x1 ] ) +# 44574 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29713,25 +44582,90 @@ module Tables = struct (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; + 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 = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 _1 : (Parsetree.pattern) = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let c : (Parsetree.type_constraint) = Obj.magic c in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 44633 "mlx/parser.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = 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.pattern) = let _1 = -# 2778 "mlx/parser.mly" + let _endpos = _endpos__5_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let (_startpos__2_, _2, _1) = (_startpos__2_inlined1_, _2_inlined1, _1_inlined1) in + let _endpos = _endpos__5_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 2889 "mlx/parser.mly" + ( Some label, + mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_label_ label) c ) +# 44651 "mlx/parser.ml" + + in + let x1 = + let _1 = +# 2303 "mlx/parser.mly" ( _1 ) -# 29730 "mlx/parser.ml" - in +# 44658 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 44663 "mlx/parser.ml" + + in -# 2769 "mlx/parser.mly" - ( _1 ) -# 29735 "mlx/parser.ml" +# 2903 "mlx/parser.mly" + ( [ x2; None, x1 ] ) +# 44669 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29744,69 +44678,138 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; 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; + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _1_inlined1 : (string) = Obj.magic _1_inlined1 in + let _1_inlined3 : (Parsetree.expression) = Obj.magic _1_inlined3 in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 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__1_inlined1_ in - let _v : (Parsetree.pattern) = let _1 = + let _endpos = _endpos__1_inlined3_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _1 = _1_inlined3 in let _1 = - let _1 = - let _3 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 44732 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 44737 "mlx/parser.ml" + + in + +# 2882 "mlx/parser.mly" + ( None, _1 ) +# 44743 "mlx/parser.ml" + + in + let x1 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 44753 "mlx/parser.ml" + in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 29782 "mlx/parser.ml" +# 1194 "mlx/parser.mly" + ( xs ) +# 44758 "mlx/parser.ml" in -# 2781 "mlx/parser.mly" - ( Ppat_alias(_1, _3) ) -# 29788 "mlx/parser.ml" +# 2814 "mlx/parser.mly" + ( xs ) +# 44764 "mlx/parser.ml" in - let _endpos__1_ = _endpos__1_inlined1_ in - let _endpos = _endpos__1_ in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 44775 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 44781 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" - ( mkpat ~loc:_sloc _1 ) -# 29798 "mlx/parser.ml" +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 44801 "mlx/parser.ml" in -# 2792 "mlx/parser.mly" - ( _1 ) -# 29804 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 44807 "mlx/parser.ml" in -# 2769 "mlx/parser.mly" - ( _1 ) -# 29810 "mlx/parser.ml" +# 2903 "mlx/parser.mly" + ( [ x2; None, x1 ] ) +# 44813 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29819,106 +44822,211 @@ 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 = xs_inlined1; + MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_xs_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_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; 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 = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _3 : unit = Obj.magic _3 in + let xs_inlined1 : (Parsetree.case list) = Obj.magic xs_inlined1 in + let _1_inlined5 : (Parsetree.attributes) = Obj.magic _1_inlined5 in + let _1_inlined4 : (string Ppxlib.loc option) = Obj.magic _1_inlined4 in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 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 _endpos = _endpos_xs_inlined1_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let (_endpos_xs_, _startpos__1_, xs, _1_inlined2, _1_inlined1, _1) = (_endpos_xs_inlined1_, _startpos__1_inlined3_, xs_inlined1, _1_inlined5, _1_inlined4, _1_inlined3) in let _1 = let _1 = - let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 44900 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 44905 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 44911 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 44922 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 44928 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2783 "mlx/parser.mly" - ( expecting _loc__3_ "identifier" ) -# 29853 "mlx/parser.ml" +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 44948 "mlx/parser.ml" in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" - ( mkpat ~loc:_sloc _1 ) -# 29863 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 44954 "mlx/parser.ml" in -# 2792 "mlx/parser.mly" - ( _1 ) -# 29869 "mlx/parser.ml" +# 2882 "mlx/parser.mly" + ( None, _1 ) +# 44960 "mlx/parser.ml" in - -# 2769 "mlx/parser.mly" - ( _1 ) -# 29875 "mlx/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.pattern list) = 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.pattern) = let _1 = + let x1 = let _1 = - let _1 = -# 2785 "mlx/parser.mly" - ( Ppat_tuple(List.rev _1) ) -# 29902 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 44970 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 44975 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 44981 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 44992 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 44998 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" - ( mkpat ~loc:_sloc _1 ) -# 29910 "mlx/parser.ml" +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 45018 "mlx/parser.ml" in -# 2792 "mlx/parser.mly" - ( _1 ) -# 29916 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 45024 "mlx/parser.ml" in -# 2769 "mlx/parser.mly" - ( _1 ) -# 29922 "mlx/parser.ml" +# 2903 "mlx/parser.mly" + ( [ x2; None, x1 ] ) +# 45030 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29931,59 +45039,137 @@ 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_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_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; 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 = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _3 : unit = Obj.magic _3 in + let _2_inlined1 : (Parsetree.expression) = Obj.magic _2_inlined1 in + let _1_inlined3 : ( +# 772 "mlx/parser.mly" + (string) +# 45088 "mlx/parser.ml" + ) = Obj.magic _1_inlined3 in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 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 _endpos = _endpos__2_inlined1_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let (_2, _1) = (_2_inlined1, _1_inlined3) in + +# 2884 "mlx/parser.mly" + ( Some _1, _2 ) +# 45103 "mlx/parser.ml" + + in + let x1 = let _1 = - let _1 = - let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 45113 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 45118 "mlx/parser.ml" + + in -# 2787 "mlx/parser.mly" - ( expecting _loc__3_ "pattern" ) -# 29965 "mlx/parser.ml" +# 2814 "mlx/parser.mly" + ( xs ) +# 45124 "mlx/parser.ml" in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 45135 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 45141 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" - ( mkpat ~loc:_sloc _1 ) -# 29975 "mlx/parser.ml" +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 45161 "mlx/parser.ml" in -# 2792 "mlx/parser.mly" - ( _1 ) -# 29981 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 45167 "mlx/parser.ml" in -# 2769 "mlx/parser.mly" - ( _1 ) -# 29987 "mlx/parser.ml" +# 2903 "mlx/parser.mly" + ( [ x2; None, x1 ] ) +# 45173 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29996,56 +45182,139 @@ 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; 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 = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _3 : (Parsetree.pattern) = Obj.magic _3 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 45230 "mlx/parser.ml" + ) = Obj.magic label in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 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 _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _1 = _1_inlined3 in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 2886 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkexpvar ~loc label ) +# 45248 "mlx/parser.ml" + + in + let x1 = let _1 = - let _1 = -# 2789 "mlx/parser.mly" - ( Ppat_or(_1, _3) ) -# 30028 "mlx/parser.ml" - in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 45258 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 45263 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 45269 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 45280 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 45286 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" - ( mkpat ~loc:_sloc _1 ) -# 30037 "mlx/parser.ml" +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 45306 "mlx/parser.ml" in -# 2792 "mlx/parser.mly" - ( _1 ) -# 30043 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 45312 "mlx/parser.ml" in -# 2769 "mlx/parser.mly" - ( _1 ) -# 30049 "mlx/parser.ml" +# 2903 "mlx/parser.mly" + ( [ x2; None, x1 ] ) +# 45318 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30058,59 +45327,162 @@ 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 = _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 = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _3 : unit = Obj.magic _3 in + let _5 : unit = Obj.magic _5 in + let c : (Parsetree.type_constraint) = Obj.magic c in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 45395 "mlx/parser.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 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 _endpos = _endpos__5_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let (_startpos__2_, _2, _1) = (_startpos__2_inlined1_, _2_inlined1, _1_inlined3) in + let _endpos = _endpos__5_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 2889 "mlx/parser.mly" + ( Some label, + mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_label_ label) c ) +# 45416 "mlx/parser.ml" + + in + let x1 = let _1 = - let _1 = - let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 45426 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 45431 "mlx/parser.ml" + + in -# 2791 "mlx/parser.mly" - ( expecting _loc__3_ "pattern" ) -# 30092 "mlx/parser.ml" +# 2814 "mlx/parser.mly" + ( xs ) +# 45437 "mlx/parser.ml" in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 45448 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 45454 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" - ( mkpat ~loc:_sloc _1 ) -# 30102 "mlx/parser.ml" +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 45474 "mlx/parser.ml" in -# 2792 "mlx/parser.mly" - ( _1 ) -# 30108 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 45480 "mlx/parser.ml" in -# 2769 "mlx/parser.mly" - ( _1 ) -# 30114 "mlx/parser.ml" +# 2903 "mlx/parser.mly" + ( [ x2; None, x1 ] ) +# 45486 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30122,51 +45494,64 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 = x1; + MenhirLib.EngineTypes.startp = _startpos_x1_; + MenhirLib.EngineTypes.endp = _endpos_x1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; } = _menhir_stack in - let _1 : ( -# 714 "mlx/parser.mly" + let _1 : (Parsetree.expression) = Obj.magic _1 in + let _3 : unit = Obj.magic _3 in + let x1 : (Parsetree.expression) = Obj.magic x1 in + let l1 : ( +# 772 "mlx/parser.mly" (string) -# 30135 "mlx/parser.ml" - ) = Obj.magic _1 in +# 45528 "mlx/parser.ml" + ) = Obj.magic l1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in + let _startpos = _startpos_l1_ in let _endpos = _endpos__1_ in - let _v : (Parsetree.pattern) = let _1 = + let _v : ((string option * Parsetree.expression) list) = let x2 = let _1 = - let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 30149 "mlx/parser.ml" - - in + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 45538 "mlx/parser.ml" + in -# 2237 "mlx/parser.mly" - ( Ppat_var _1 ) -# 30155 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 45543 "mlx/parser.ml" in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" - ( mkpat ~loc:_sloc _1 ) -# 30164 "mlx/parser.ml" +# 2882 "mlx/parser.mly" + ( None, _1 ) +# 45549 "mlx/parser.ml" in -# 2239 "mlx/parser.mly" - ( _1 ) -# 30170 "mlx/parser.ml" +# 2907 "mlx/parser.mly" + ( [ x2; Some l1, x1 ] ) +# 45555 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30178,60 +45563,137 @@ module Tables = struct (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; + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + 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 = x1; + MenhirLib.EngineTypes.startp = _startpos_x1_; + MenhirLib.EngineTypes.endp = _endpos_x1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let _3 : unit = Obj.magic _3 in + let x1 : (Parsetree.expression) = Obj.magic x1 in + let l1 : ( +# 772 "mlx/parser.mly" + (string) +# 45618 "mlx/parser.ml" + ) = Obj.magic l1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Parsetree.pattern) = let _1 = - let _1 = -# 2238 "mlx/parser.mly" - ( Ppat_any ) -# 30196 "mlx/parser.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos_l1_ in + let _endpos = _endpos_xs_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _1 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 45631 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 45636 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 45642 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 45653 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 45659 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 45679 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 45685 "mlx/parser.ml" + + in -# 936 "mlx/parser.mly" - ( mkpat ~loc:_sloc _1 ) -# 30204 "mlx/parser.ml" +# 2882 "mlx/parser.mly" + ( None, _1 ) +# 45691 "mlx/parser.ml" in -# 2239 "mlx/parser.mly" - ( _1 ) -# 30210 "mlx/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.structure) = 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) = -# 3948 "mlx/parser.mly" - ( PStr _1 ) -# 30235 "mlx/parser.ml" +# 2907 "mlx/parser.mly" + ( [ x2; Some l1, x1 ] ) +# 45697 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30248,22 +45710,56 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 = x1; + MenhirLib.EngineTypes.startp = _startpos_x1_; + MenhirLib.EngineTypes.endp = _endpos_x1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; } = _menhir_stack in - let _2 : (Parsetree.signature) = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _2 : (Parsetree.expression) = Obj.magic _2 in + let _1 : ( +# 772 "mlx/parser.mly" + (string) +# 45743 "mlx/parser.ml" + ) = Obj.magic _1 in + let _3 : unit = Obj.magic _3 in + let x1 : (Parsetree.expression) = Obj.magic x1 in + let l1 : ( +# 772 "mlx/parser.mly" + (string) +# 45750 "mlx/parser.ml" + ) = Obj.magic l1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in + let _startpos = _startpos_l1_ in let _endpos = _endpos__2_ in - let _v : (Parsetree.payload) = -# 3949 "mlx/parser.mly" - ( PSig _2 ) -# 30267 "mlx/parser.ml" + let _v : ((string option * Parsetree.expression) list) = let x2 = +# 2884 "mlx/parser.mly" + ( Some _1, _2 ) +# 45758 "mlx/parser.ml" + in + +# 2907 "mlx/parser.mly" + ( [ x2; Some l1, x1 ] ) +# 45763 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30276,26 +45772,64 @@ module Tables = struct 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.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 = x1; + MenhirLib.EngineTypes.startp = _startpos_x1_; + MenhirLib.EngineTypes.endp = _endpos_x1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; } = _menhir_stack in - let _2 : (Parsetree.core_type) = Obj.magic _2 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 45808 "mlx/parser.ml" + ) = Obj.magic label in let _1 : unit = Obj.magic _1 in + let _3 : unit = Obj.magic _3 in + let x1 : (Parsetree.expression) = Obj.magic x1 in + let l1 : ( +# 772 "mlx/parser.mly" + (string) +# 45816 "mlx/parser.ml" + ) = Obj.magic l1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.payload) = -# 3950 "mlx/parser.mly" - ( PTyp _2 ) -# 30299 "mlx/parser.ml" + let _startpos = _startpos_l1_ in + let _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 2886 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkexpvar ~loc label ) +# 45827 "mlx/parser.ml" + + in + +# 2907 "mlx/parser.mly" + ( [ x2; Some l1, x1 ] ) +# 45833 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30308,26 +45842,87 @@ module Tables = struct 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.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; 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 = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + 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 = x1; + MenhirLib.EngineTypes.startp = _startpos_x1_; + MenhirLib.EngineTypes.endp = _endpos_x1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; }; } = _menhir_stack in - let _2 : (Parsetree.pattern) = Obj.magic _2 in + let _5 : unit = Obj.magic _5 in + let c : (Parsetree.type_constraint) = Obj.magic c in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 45898 "mlx/parser.ml" + ) = Obj.magic label in + let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in + let _3 : unit = Obj.magic _3 in + let x1 : (Parsetree.expression) = Obj.magic x1 in + let l1 : ( +# 772 "mlx/parser.mly" + (string) +# 45907 "mlx/parser.ml" + ) = Obj.magic l1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.payload) = -# 3951 "mlx/parser.mly" - ( PPat (_2, None) ) -# 30331 "mlx/parser.ml" + let _startpos = _startpos_l1_ in + let _endpos = _endpos__5_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _endpos = _endpos__5_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 2889 "mlx/parser.mly" + ( Some label, + mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_label_ label) c ) +# 45920 "mlx/parser.ml" + + in + +# 2907 "mlx/parser.mly" + ( [ x2; Some l1, x1 ] ) +# 45926 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30340,9 +45935,9 @@ module Tables = struct 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.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _3; @@ -30350,9 +45945,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 = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -30363,42 +45958,43 @@ module Tables = struct }; }; } = _menhir_stack in - let _4 : (Parsetree.expression) = Obj.magic _4 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in let _3 : unit = Obj.magic _3 in - let _2 : (Parsetree.pattern) = Obj.magic _2 in + let l1 : ( +# 786 "mlx/parser.mly" + (string) +# 45967 "mlx/parser.ml" + ) = Obj.magic l1 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.payload) = -# 3952 "mlx/parser.mly" - ( PPat (_2, Some _4) ) -# 30377 "mlx/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.core_type) = 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.core_type) = -# 3327 "mlx/parser.mly" - ( _1 ) -# 30402 "mlx/parser.ml" + let _endpos = _endpos__1_inlined1_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _1 = _1_inlined1 in + let _1 = + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 45979 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 45984 "mlx/parser.ml" + + in + +# 2882 "mlx/parser.mly" + ( None, _1 ) +# 45990 "mlx/parser.ml" + + in + let _loc_l1_ = (_startpos_l1_, _endpos_l1_) in + +# 2911 "mlx/parser.mly" + ( let loc = _loc_l1_ in + [ x2; Some l1, mkexpvar ~loc l1] ) +# 45998 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30411,100 +46007,139 @@ 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 = 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.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; 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; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + 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 : (Parsetree.core_type) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let xs : (string Ppxlib.loc list) = Obj.magic xs in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _3 : unit = Obj.magic _3 in + let l1 : ( +# 786 "mlx/parser.mly" + (string) +# 46060 "mlx/parser.ml" + ) = Obj.magic l1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_xs_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.core_type) = let _1 = + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in let _1 = let _1 = - let _1 = - let xs = + let _3 = + let xs = + let xs = # 253 "" ( List.rev xs ) -# 30445 "mlx/parser.ml" - in +# 46075 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 46080 "mlx/parser.ml" + + in -# 1003 "mlx/parser.mly" +# 2814 "mlx/parser.mly" ( xs ) -# 30450 "mlx/parser.ml" +# 46086 "mlx/parser.ml" in - -# 3319 "mlx/parser.mly" + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" ( _1 ) -# 30456 "mlx/parser.ml" +# 46097 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 46103 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 46123 "mlx/parser.ml" in -# 3323 "mlx/parser.mly" - ( Ptyp_poly(_1, _3) ) -# 30462 "mlx/parser.ml" +# 2446 "mlx/parser.mly" + ( _1 ) +# 46129 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos__3_, _startpos_xs_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 938 "mlx/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 30472 "mlx/parser.ml" +# 2882 "mlx/parser.mly" + ( None, _1 ) +# 46135 "mlx/parser.ml" in + let _loc_l1_ = (_startpos_l1_, _endpos_l1_) in -# 3329 "mlx/parser.mly" - ( _1 ) -# 30478 "mlx/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.core_type) = 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.core_type) = let _1 = -# 3358 "mlx/parser.mly" - ( _1 ) -# 30503 "mlx/parser.ml" - in - -# 3327 "mlx/parser.mly" - ( _1 ) -# 30508 "mlx/parser.ml" +# 2911 "mlx/parser.mly" + ( let loc = _loc_l1_ in + [ x2; Some l1, mkexpvar ~loc l1] ) +# 46143 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30517,75 +46152,65 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + 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.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 = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - 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 = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + 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 _1 : (Parsetree.core_type) = Obj.magic _1 in - let _2 : unit = Obj.magic _2 in - let xs : (string Ppxlib.loc list) = Obj.magic xs in + let _2 : (Parsetree.expression) = Obj.magic _2 in + let _1_inlined1 : ( +# 772 "mlx/parser.mly" + (string) +# 46189 "mlx/parser.ml" + ) = Obj.magic _1_inlined1 in + let _3 : unit = Obj.magic _3 in + let l1 : ( +# 786 "mlx/parser.mly" + (string) +# 46195 "mlx/parser.ml" + ) = Obj.magic l1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_xs_ in - let _endpos = _endpos__1_ in - let _v : (Parsetree.core_type) = let _1 = - let _1 = - let _3 = -# 3358 "mlx/parser.mly" - ( _1 ) -# 30549 "mlx/parser.ml" - in - let _1 = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 30556 "mlx/parser.ml" - in - -# 1003 "mlx/parser.mly" - ( xs ) -# 30561 "mlx/parser.ml" - - in - -# 3319 "mlx/parser.mly" - ( _1 ) -# 30567 "mlx/parser.ml" - - in - -# 3323 "mlx/parser.mly" - ( Ptyp_poly(_1, _3) ) -# 30573 "mlx/parser.ml" - - in - let _startpos__1_ = _startpos_xs_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _1 = _1_inlined1 in -# 938 "mlx/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 30583 "mlx/parser.ml" +# 2884 "mlx/parser.mly" + ( Some _1, _2 ) +# 46206 "mlx/parser.ml" in + let _loc_l1_ = (_startpos_l1_, _endpos_l1_) in -# 3329 "mlx/parser.mly" - ( _1 ) -# 30589 "mlx/parser.ml" +# 2911 "mlx/parser.mly" + ( let loc = _loc_l1_ in + [ x2; Some l1, mkexpvar ~loc l1] ) +# 46214 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30598,43 +46223,67 @@ module Tables = struct 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.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + 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.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + 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 : (Parsetree.payload) = Obj.magic _3 in - let _2 : (string Ppxlib.loc) = Obj.magic _2 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 46259 "mlx/parser.ml" + ) = Obj.magic label in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _3 : unit = Obj.magic _3 in + let l1 : ( +# 786 "mlx/parser.mly" + (string) +# 46266 "mlx/parser.ml" + ) = Obj.magic l1 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.attribute) = let _endpos = _endpos__4_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _1 = _1_inlined1 in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 2886 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkexpvar ~loc label ) +# 46279 "mlx/parser.ml" + + in + let _loc_l1_ = (_startpos_l1_, _endpos_l1_) in -# 3909 "mlx/parser.mly" - ( Attr.mk ~loc:(make_loc _sloc) _2 _3 ) -# 30638 "mlx/parser.ml" +# 2911 "mlx/parser.mly" + ( let loc = _loc_l1_ in + [ x2; Some l1, mkexpvar ~loc l1] ) +# 46287 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30647,51 +46296,45 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = prim; - MenhirLib.EngineTypes.startp = _startpos_prim_; - MenhirLib.EngineTypes.endp = _endpos_prim_; + MenhirLib.EngineTypes.semv = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; - 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; }; }; }; @@ -30700,80 +46343,43 @@ module Tables = struct }; }; } = _menhir_stack in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let prim : (string list) = Obj.magic prim in - let _7 : unit = Obj.magic _7 in - let ty : (Parsetree.core_type) = Obj.magic ty in let _5 : unit = Obj.magic _5 in - let _1_inlined2 : (string) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let ext : (string Ppxlib.loc option) = Obj.magic ext in + let c : (Parsetree.type_constraint) = Obj.magic c in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 46352 "mlx/parser.ml" + ) = Obj.magic label in + let _2 : unit = Obj.magic _2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _3 : unit = Obj.magic _3 in + let l1 : ( +# 786 "mlx/parser.mly" + (string) +# 46360 "mlx/parser.ml" + ) = Obj.magic l1 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__1_inlined3_ in - let _v : (Parsetree.value_description * string Ppxlib.loc option) = let attrs2 = - let _1 = _1_inlined3 in - -# 3918 "mlx/parser.mly" - ( _1 ) -# 30721 "mlx/parser.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 30733 "mlx/parser.ml" - - in - let attrs1 = + let _endpos = _endpos__5_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = let _1 = _1_inlined1 in + let _endpos = _endpos__5_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in -# 3922 "mlx/parser.mly" - ( _1 ) -# 30741 "mlx/parser.ml" +# 2889 "mlx/parser.mly" + ( Some label, + mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_label_ label) c ) +# 46375 "mlx/parser.ml" in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2955 "mlx/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 ) -# 30754 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Asttypes.private_flag) = let _1 = -# 3777 "mlx/parser.mly" - ( Public ) -# 30772 "mlx/parser.ml" - in + let _loc_l1_ = (_startpos_l1_, _endpos_l1_) in -# 3774 "mlx/parser.mly" - ( _1 ) -# 30777 "mlx/parser.ml" +# 2911 "mlx/parser.mly" + ( let loc = _loc_l1_ in + [ x2; Some l1, mkexpvar ~loc l1] ) +# 46383 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30785,43 +46391,93 @@ module Tables = struct (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; + 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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + 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 = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + 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 _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _6 : unit = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let c : (Parsetree.type_constraint) = Obj.magic c in + let l1 : ( +# 786 "mlx/parser.mly" + (string) +# 46444 "mlx/parser.ml" + ) = Obj.magic l1 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__1_ in - let _v : (Asttypes.private_flag) = let _1 = -# 3778 "mlx/parser.mly" - ( Private ) -# 30802 "mlx/parser.ml" - in + let _endpos = _endpos__1_inlined1_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _1 = _1_inlined1 in + let _1 = + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 46457 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 46462 "mlx/parser.ml" + + in + +# 2882 "mlx/parser.mly" + ( None, _1 ) +# 46468 "mlx/parser.ml" + + in + let _endpos_x2_ = _endpos__1_inlined1_ in + let _endpos = _endpos_x2_ in + let _loc_l1_ = (_startpos_l1_, _endpos_l1_) in -# 3774 "mlx/parser.mly" - ( _1 ) -# 30807 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3800 "mlx/parser.mly" - ( Public, Concrete ) -# 30825 "mlx/parser.ml" +# 2916 "mlx/parser.mly" + ( let x1 = + mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_l1_ l1) c + in + [ x2; Some l1, x1] ) +# 46481 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30833,20 +46489,166 @@ module Tables = struct (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; + 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 = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + 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 = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + 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 xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Ppxlib.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _6 : unit = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let c : (Parsetree.type_constraint) = Obj.magic c in + let l1 : ( +# 786 "mlx/parser.mly" + (string) +# 46563 "mlx/parser.ml" + ) = Obj.magic l1 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__1_ in - let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3801 "mlx/parser.mly" - ( Private, Concrete ) -# 30850 "mlx/parser.ml" + let _endpos = _endpos_xs_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 46579 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 46584 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 46590 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 46601 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 46607 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 46627 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 46633 "mlx/parser.ml" + + in + +# 2882 "mlx/parser.mly" + ( None, _1 ) +# 46639 "mlx/parser.ml" + + in + let _endpos_x2_ = _endpos_xs_ in + let _endpos = _endpos_x2_ in + let _loc_l1_ = (_startpos_l1_, _endpos_l1_) in + +# 2916 "mlx/parser.mly" + ( let x1 = + mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_l1_ l1) c + in + [ x2; Some l1, x1] ) +# 46652 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30858,20 +46660,92 @@ module Tables = struct (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; + 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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + 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 = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + 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 _2_inlined1 : (Parsetree.expression) = Obj.magic _2_inlined1 in + let _1_inlined1 : ( +# 772 "mlx/parser.mly" + (string) +# 46716 "mlx/parser.ml" + ) = Obj.magic _1_inlined1 in + let _6 : unit = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let c : (Parsetree.type_constraint) = Obj.magic c in + let l1 : ( +# 786 "mlx/parser.mly" + (string) +# 46724 "mlx/parser.ml" + ) = Obj.magic l1 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__1_ in - let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3802 "mlx/parser.mly" - ( Public, Virtual ) -# 30875 "mlx/parser.ml" + let _endpos = _endpos__2_inlined1_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let (_2, _1) = (_2_inlined1, _1_inlined1) in + +# 2884 "mlx/parser.mly" + ( Some _1, _2 ) +# 46736 "mlx/parser.ml" + + in + let _endpos_x2_ = _endpos__2_inlined1_ in + let _endpos = _endpos_x2_ in + let _loc_l1_ = (_startpos_l1_, _endpos_l1_) in + +# 2916 "mlx/parser.mly" + ( let x1 = + mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_l1_ l1) c + in + [ x2; Some l1, x1] ) +# 46749 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30884,26 +46758,93 @@ module Tables = struct 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.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + 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 = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + 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 label : ( +# 786 "mlx/parser.mly" + (string) +# 46812 "mlx/parser.ml" + ) = Obj.magic label in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _6 : unit = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let c : (Parsetree.type_constraint) = Obj.magic c in + let l1 : ( +# 786 "mlx/parser.mly" + (string) +# 46821 "mlx/parser.ml" + ) = Obj.magic l1 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 : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3803 "mlx/parser.mly" - ( Private, Virtual ) -# 30907 "mlx/parser.ml" + let _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _1 = _1_inlined1 in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 2886 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkexpvar ~loc label ) +# 46835 "mlx/parser.ml" + + in + let _endpos_x2_ = _endpos_label_ in + let _endpos = _endpos_x2_ in + let _loc_l1_ = (_startpos_l1_, _endpos_l1_) in + +# 2916 "mlx/parser.mly" + ( let x1 = + mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_l1_ l1) c + in + [ x2; Some l1, x1] ) +# 46848 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30916,44 +46857,116 @@ module Tables = struct 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.semv = _5_inlined1; + MenhirLib.EngineTypes.startp = _startpos__5_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__5_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 = c_inlined1; + MenhirLib.EngineTypes.startp = _startpos_c_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_c_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + 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 = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + 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_inlined1 : unit = Obj.magic _5_inlined1 in + let c_inlined1 : (Parsetree.type_constraint) = Obj.magic c_inlined1 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 46931 "mlx/parser.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _6 : unit = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let c : (Parsetree.type_constraint) = Obj.magic c in + let l1 : ( +# 786 "mlx/parser.mly" + (string) +# 46941 "mlx/parser.ml" + ) = Obj.magic l1 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 : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3804 "mlx/parser.mly" - ( Private, Virtual ) -# 30939 "mlx/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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Asttypes.rec_flag) = -# 3755 "mlx/parser.mly" - ( Nonrecursive ) -# 30957 "mlx/parser.ml" + let _endpos = _endpos__5_inlined1_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let (_endpos__5_, _startpos__2_, _5, c, _2, _1) = (_endpos__5_inlined1_, _startpos__2_inlined1_, _5_inlined1, c_inlined1, _2_inlined1, _1_inlined1) in + let _endpos = _endpos__5_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 2889 "mlx/parser.mly" + ( Some label, + mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_label_ label) c ) +# 46957 "mlx/parser.ml" + + in + let _endpos_x2_ = _endpos__5_inlined1_ in + let _endpos = _endpos_x2_ in + let _loc_l1_ = (_startpos_l1_, _endpos_l1_) in + +# 2916 "mlx/parser.mly" + ( let x1 = + mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_l1_ l1) c + in + [ x2; Some l1, x1] ) +# 46970 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30971,45 +46984,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : unit = Obj.magic _1 in + let _1 : ((string option * Parsetree.pattern) list) = 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.rec_flag) = -# 3756 "mlx/parser.mly" - ( Recursive ) -# 30982 "mlx/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 = fields; - MenhirLib.EngineTypes.startp = _startpos_fields_; - MenhirLib.EngineTypes.endp = _endpos_fields_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let fields : ((Ppxlib.longident Ppxlib.loc * Parsetree.expression) list) = Obj.magic fields in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_fields_ in - let _endpos = _endpos_fields_ in - let _v : (Parsetree.expression option * - (Ppxlib.longident Ppxlib.loc * Parsetree.expression) list) = let eo = -# 124 "" - ( None ) -# 31008 "mlx/parser.ml" - in - -# 2694 "mlx/parser.mly" - ( eo, fields ) -# 31013 "mlx/parser.ml" + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = +# 3179 "mlx/parser.mly" + ( Closed, _1 ) +# 46995 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31022,9 +47004,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = fields; - MenhirLib.EngineTypes.startp = _startpos_fields_; - MenhirLib.EngineTypes.endp = _endpos_fields_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -31032,106 +47014,23 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let fields : ((Ppxlib.longident Ppxlib.loc * Parsetree.expression) list) = Obj.magic fields in + let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let x : (Parsetree.expression) = Obj.magic x in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_fields_ in - let _v : (Parsetree.expression option * - (Ppxlib.longident Ppxlib.loc * Parsetree.expression) list) = let eo = - let x = -# 191 "" - ( x ) -# 31054 "mlx/parser.ml" - in - -# 126 "" - ( Some x ) -# 31059 "mlx/parser.ml" - - in - -# 2694 "mlx/parser.mly" - ( eo, fields ) -# 31065 "mlx/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 = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let d : (Dune__exe__Ast_helper.str * Dune__exe__Ast_helper.str list * - Parsetree.constructor_arguments * Parsetree.core_type option * - Parsetree.attributes * Warnings.loc * Dune__exe__Docstrings.info) = Obj.magic d in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_d_ in - let _endpos = _endpos_d_ in - let _v : (Parsetree.constructor_declaration list) = let x = -# 3140 "mlx/parser.mly" - ( - let cid, vars, args, res, attrs, loc, info = d in - Type.constructor cid ~vars ~args ?res ~attrs ~loc ~info - ) -# 31095 "mlx/parser.ml" - in - -# 1113 "mlx/parser.mly" - ( [x] ) -# 31100 "mlx/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 = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let d : (Dune__exe__Ast_helper.str * Dune__exe__Ast_helper.str list * - Parsetree.constructor_arguments * Parsetree.core_type option * - Parsetree.attributes * Warnings.loc * Dune__exe__Docstrings.info) = Obj.magic d in + let _1 : ((string option * Parsetree.pattern) list) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_d_ in - let _endpos = _endpos_d_ in - let _v : (Parsetree.constructor_declaration list) = let x = -# 3140 "mlx/parser.mly" - ( - let cid, vars, args, res, attrs, loc, info = d in - Type.constructor cid ~vars ~args ?res ~attrs ~loc ~info - ) -# 31130 "mlx/parser.ml" - in - -# 1116 "mlx/parser.mly" - ( [x] ) -# 31135 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = +# 3181 "mlx/parser.mly" + ( Open, _1 ) +# 47034 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31144,36 +47043,38 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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; + 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 d : (Dune__exe__Ast_helper.str * Dune__exe__Ast_helper.str list * - Parsetree.constructor_arguments * Parsetree.core_type option * - Parsetree.attributes * Warnings.loc * Dune__exe__Docstrings.info) = Obj.magic d in - let xs : (Parsetree.constructor_declaration list) = Obj.magic xs in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_xs_ in - let _endpos = _endpos_d_ in - let _v : (Parsetree.constructor_declaration list) = let x = -# 3140 "mlx/parser.mly" - ( - let cid, vars, args, res, attrs, loc, info = d in - Type.constructor cid ~vars ~args ?res ~attrs ~loc ~info - ) -# 31172 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = let _1 = +# 3157 "mlx/parser.mly" + ( None, _1 ) +# 47073 "mlx/parser.ml" in -# 1120 "mlx/parser.mly" - ( x :: xs ) -# 31177 "mlx/parser.ml" +# 3183 "mlx/parser.mly" + ( Open, [ _1 ] ) +# 47078 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31185,37 +47086,53 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - 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 = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_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 d : (Dune__exe__Ast_helper.str * Dune__exe__Ast_helper.str list * - Parsetree.constructor_arguments * Parsetree.core_type option * - Parsetree.attributes * Warnings.loc * Dune__exe__Docstrings.info) = Obj.magic d in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1 : ( +# 772 "mlx/parser.mly" + (string) +# 47120 "mlx/parser.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_d_ in - let _endpos = _endpos_d_ in - let _v : (Parsetree.extension_constructor list) = let x = - let _1 = -# 3257 "mlx/parser.mly" - ( - let cid, vars, args, res, attrs, loc, info = d in - Te.decl cid ~vars ~args ?res ~attrs ~loc ~info - ) -# 31208 "mlx/parser.ml" - in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = let _1 = + let _2 = _2_inlined1 in -# 3251 "mlx/parser.mly" - ( _1 ) -# 31213 "mlx/parser.ml" +# 3159 "mlx/parser.mly" + ( Some _1, _2 ) +# 47130 "mlx/parser.ml" in -# 1113 "mlx/parser.mly" - ( [x] ) -# 31219 "mlx/parser.ml" +# 3183 "mlx/parser.mly" + ( Open, [ _1 ] ) +# 47136 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31227,25 +47144,54 @@ module Tables = struct (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; + 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 = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 _1 : (Parsetree.extension_constructor) = Obj.magic _1 in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 47177 "mlx/parser.ml" + ) = Obj.magic label 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__1_ in - let _v : (Parsetree.extension_constructor list) = let x = -# 3253 "mlx/parser.mly" - ( _1 ) -# 31244 "mlx/parser.ml" - in + let _endpos = _endpos__3_ in + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = let _1 = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3161 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 47189 "mlx/parser.ml" + + in -# 1113 "mlx/parser.mly" - ( [x] ) -# 31249 "mlx/parser.ml" +# 3183 "mlx/parser.mly" + ( Open, [ _1 ] ) +# 47195 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31257,37 +47203,86 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - 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 = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _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 d : (Dune__exe__Ast_helper.str * Dune__exe__Ast_helper.str list * - Parsetree.constructor_arguments * Parsetree.core_type option * - Parsetree.attributes * Warnings.loc * Dune__exe__Docstrings.info) = Obj.magic d in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 47263 "mlx/parser.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_d_ in - let _endpos = _endpos_d_ in - let _v : (Parsetree.extension_constructor list) = let x = - let _1 = -# 3257 "mlx/parser.mly" - ( - let cid, vars, args, res, attrs, loc, info = d in - Te.decl cid ~vars ~args ?res ~attrs ~loc ~info - ) -# 31280 "mlx/parser.ml" - in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = let _1 = + let (_startpos__2_, _2) = (_startpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in -# 3251 "mlx/parser.mly" - ( _1 ) -# 31285 "mlx/parser.ml" +# 3164 "mlx/parser.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 47280 "mlx/parser.ml" in -# 1116 "mlx/parser.mly" - ( [x] ) -# 31291 "mlx/parser.ml" +# 3183 "mlx/parser.mly" + ( Open, [ _1 ] ) +# 47286 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31305,19 +47300,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Parsetree.extension_constructor) = Obj.magic _1 in + let _1 : ((string option * Parsetree.pattern) list) = 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.extension_constructor list) = let x = -# 3253 "mlx/parser.mly" - ( _1 ) -# 31316 "mlx/parser.ml" - in - -# 1116 "mlx/parser.mly" - ( [x] ) -# 31321 "mlx/parser.ml" + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = +# 3179 "mlx/parser.mly" + ( Closed, _1 ) +# 47311 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31330,43 +47320,33 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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; + 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 d : (Dune__exe__Ast_helper.str * Dune__exe__Ast_helper.str list * - Parsetree.constructor_arguments * Parsetree.core_type option * - Parsetree.attributes * Warnings.loc * Dune__exe__Docstrings.info) = Obj.magic d in - let xs : (Parsetree.extension_constructor list) = Obj.magic xs in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : ((string option * Parsetree.pattern) list) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_xs_ in - let _endpos = _endpos_d_ in - let _v : (Parsetree.extension_constructor list) = let x = - let _1 = -# 3257 "mlx/parser.mly" - ( - let cid, vars, args, res, attrs, loc, info = d in - Te.decl cid ~vars ~args ?res ~attrs ~loc ~info - ) -# 31359 "mlx/parser.ml" - in - -# 3251 "mlx/parser.mly" - ( _1 ) -# 31364 "mlx/parser.ml" - - in - -# 1120 "mlx/parser.mly" - ( x :: xs ) -# 31370 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = +# 3181 "mlx/parser.mly" + ( Open, _1 ) +# 47350 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31379,31 +47359,38 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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; + 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 _1 : (Parsetree.extension_constructor) = Obj.magic _1 in - let xs : (Parsetree.extension_constructor list) = Obj.magic xs in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_xs_ in - let _endpos = _endpos__1_ in - let _v : (Parsetree.extension_constructor list) = let x = -# 3253 "mlx/parser.mly" - ( _1 ) -# 31402 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = let _1 = +# 3157 "mlx/parser.mly" + ( None, _1 ) +# 47389 "mlx/parser.ml" in -# 1120 "mlx/parser.mly" - ( x :: xs ) -# 31407 "mlx/parser.ml" +# 3183 "mlx/parser.mly" + ( Open, [ _1 ] ) +# 47394 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31415,30 +47402,53 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - 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 = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_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 d : (Dune__exe__Ast_helper.str * Dune__exe__Ast_helper.str list * - Parsetree.constructor_arguments * Parsetree.core_type option * - Parsetree.attributes * Warnings.loc * Dune__exe__Docstrings.info) = Obj.magic d in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1 : ( +# 772 "mlx/parser.mly" + (string) +# 47436 "mlx/parser.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_d_ in - let _endpos = _endpos_d_ in - let _v : (Parsetree.extension_constructor list) = let x = -# 3257 "mlx/parser.mly" - ( - let cid, vars, args, res, attrs, loc, info = d in - Te.decl cid ~vars ~args ?res ~attrs ~loc ~info - ) -# 31437 "mlx/parser.ml" - in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = let _1 = + let _2 = _2_inlined1 in + +# 3159 "mlx/parser.mly" + ( Some _1, _2 ) +# 47446 "mlx/parser.ml" + + in -# 1113 "mlx/parser.mly" - ( [x] ) -# 31442 "mlx/parser.ml" +# 3183 "mlx/parser.mly" + ( Open, [ _1 ] ) +# 47452 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31450,30 +47460,54 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - 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 = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 d : (Dune__exe__Ast_helper.str * Dune__exe__Ast_helper.str list * - Parsetree.constructor_arguments * Parsetree.core_type option * - Parsetree.attributes * Warnings.loc * Dune__exe__Docstrings.info) = Obj.magic d in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 47493 "mlx/parser.ml" + ) = Obj.magic label in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_d_ in - let _endpos = _endpos_d_ in - let _v : (Parsetree.extension_constructor list) = let x = -# 3257 "mlx/parser.mly" - ( - let cid, vars, args, res, attrs, loc, info = d in - Te.decl cid ~vars ~args ?res ~attrs ~loc ~info - ) -# 31472 "mlx/parser.ml" - in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = let _1 = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3161 "mlx/parser.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 47505 "mlx/parser.ml" + + in -# 1116 "mlx/parser.mly" - ( [x] ) -# 31477 "mlx/parser.ml" +# 3183 "mlx/parser.mly" + ( Open, [ _1 ] ) +# 47511 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31486,36 +47520,85 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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; + 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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _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 d : (Dune__exe__Ast_helper.str * Dune__exe__Ast_helper.str list * - Parsetree.constructor_arguments * Parsetree.core_type option * - Parsetree.attributes * Warnings.loc * Dune__exe__Docstrings.info) = Obj.magic d in - let xs : (Parsetree.extension_constructor list) = Obj.magic xs in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 47579 "mlx/parser.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_xs_ in - let _endpos = _endpos_d_ in - let _v : (Parsetree.extension_constructor list) = let x = -# 3257 "mlx/parser.mly" - ( - let cid, vars, args, res, attrs, loc, info = d in - Te.decl cid ~vars ~args ?res ~attrs ~loc ~info - ) -# 31514 "mlx/parser.ml" - in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = let _1 = + let (_startpos__2_, _2) = (_startpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3164 "mlx/parser.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 47596 "mlx/parser.ml" + + in -# 1120 "mlx/parser.mly" - ( x :: xs ) -# 31519 "mlx/parser.ml" +# 3183 "mlx/parser.mly" + ( Open, [ _1 ] ) +# 47602 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31536,9 +47619,9 @@ module Tables = struct | `Prop_opt_punned of string | `Prop_punned of string ]) list) = -# 979 "mlx/parser.mly" +# 1056 "mlx/parser.mly" ( [] ) -# 31542 "mlx/parser.ml" +# 47625 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31582,9 +47665,9 @@ module Tables = struct | `Prop_opt_punned of string | `Prop_punned of string ]) list) = -# 981 "mlx/parser.mly" +# 1058 "mlx/parser.mly" ( x :: xs ) -# 31588 "mlx/parser.ml" +# 47671 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31600,9 +47683,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : ((Parsetree.core_type * Parsetree.core_type * Warnings.loc) list) = -# 979 "mlx/parser.mly" +# 1056 "mlx/parser.mly" ( [] ) -# 31606 "mlx/parser.ml" +# 47689 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31659,21 +47742,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2117 "mlx/parser.mly" +# 2213 "mlx/parser.mly" ( _1, _3, make_loc _sloc ) -# 31665 "mlx/parser.ml" +# 47748 "mlx/parser.ml" in # 183 "" ( x ) -# 31671 "mlx/parser.ml" +# 47754 "mlx/parser.ml" in -# 981 "mlx/parser.mly" +# 1058 "mlx/parser.mly" ( x :: xs ) -# 31677 "mlx/parser.ml" +# 47760 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31689,9 +47772,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Parsetree.expression list) = -# 979 "mlx/parser.mly" +# 1056 "mlx/parser.mly" ( [] ) -# 31695 "mlx/parser.ml" +# 47778 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31721,9 +47804,66 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.expression list) = -# 981 "mlx/parser.mly" +# 1058 "mlx/parser.mly" ( x :: xs ) -# 31727 "mlx/parser.ml" +# 47810 "mlx/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 : (Parsetree.function_param list) = 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 : (Parsetree.function_param list) = +# 1089 "mlx/parser.mly" + ( List.rev x ) +# 47835 "mlx/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 : (Parsetree.function_param list) = Obj.magic x in + let xs : (Parsetree.function_param 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 : (Parsetree.function_param list) = +# 1091 "mlx/parser.mly" + ( List.rev_append x xs ) +# 47867 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31746,9 +47886,9 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : ((Lexing.position * Parsetree.functor_parameter) list) = -# 993 "mlx/parser.mly" +# 1070 "mlx/parser.mly" ( [ x ] ) -# 31752 "mlx/parser.ml" +# 47892 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31778,9 +47918,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : ((Lexing.position * Parsetree.functor_parameter) list) = -# 995 "mlx/parser.mly" +# 1072 "mlx/parser.mly" ( x :: xs ) -# 31784 "mlx/parser.ml" +# 47924 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31803,9 +47943,9 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : ((Asttypes.arg_label * Parsetree.expression) list) = -# 993 "mlx/parser.mly" +# 1070 "mlx/parser.mly" ( [ x ] ) -# 31809 "mlx/parser.ml" +# 47949 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31835,9 +47975,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : ((Asttypes.arg_label * Parsetree.expression) list) = -# 995 "mlx/parser.mly" +# 1072 "mlx/parser.mly" ( x :: xs ) -# 31841 "mlx/parser.ml" +# 47981 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31860,9 +48000,9 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (string list) = -# 993 "mlx/parser.mly" +# 1070 "mlx/parser.mly" ( [ x ] ) -# 31866 "mlx/parser.ml" +# 48006 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31892,9 +48032,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (string list) = -# 995 "mlx/parser.mly" +# 1072 "mlx/parser.mly" ( x :: xs ) -# 31898 "mlx/parser.ml" +# 48038 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31907,9 +48047,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + 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; @@ -31918,33 +48058,25 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _1_inlined1 : (string) = Obj.magic _1_inlined1 in + let _2 : (string) = 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__1_inlined1_ in + let _endpos = _endpos__2_ in let _v : (string Ppxlib.loc list) = let x = - let _2 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 31936 "mlx/parser.ml" - - in + let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3315 "mlx/parser.mly" - ( _2 ) -# 31942 "mlx/parser.ml" +# 3617 "mlx/parser.mly" + ( mkrhs _2 _sloc ) +# 48074 "mlx/parser.ml" in -# 993 "mlx/parser.mly" +# 1070 "mlx/parser.mly" ( [ x ] ) -# 31948 "mlx/parser.ml" +# 48080 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31957,9 +48089,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1; @@ -31974,34 +48106,26 @@ module Tables = struct }; }; } = _menhir_stack in - let _1_inlined1 : (string) = Obj.magic _1_inlined1 in + let _2 : (string) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let xs : (string Ppxlib.loc list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_xs_ in - let _endpos = _endpos__1_inlined1_ in + let _endpos = _endpos__2_ in let _v : (string Ppxlib.loc list) = let x = - let _2 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 31993 "mlx/parser.ml" - - in + let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3315 "mlx/parser.mly" - ( _2 ) -# 31999 "mlx/parser.ml" +# 3617 "mlx/parser.mly" + ( mkrhs _2 _sloc ) +# 48123 "mlx/parser.ml" in -# 995 "mlx/parser.mly" +# 1072 "mlx/parser.mly" ( x :: xs ) -# 32005 "mlx/parser.ml" +# 48129 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32026,12 +48150,12 @@ module Tables = struct let _v : (Parsetree.case list) = let _1 = # 124 "" ( None ) -# 32030 "mlx/parser.ml" +# 48154 "mlx/parser.ml" in -# 1084 "mlx/parser.mly" +# 1182 "mlx/parser.mly" ( [x] ) -# 32035 "mlx/parser.ml" +# 48159 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32065,13 +48189,13 @@ module Tables = struct # 126 "" ( Some x ) -# 32069 "mlx/parser.ml" +# 48193 "mlx/parser.ml" in -# 1084 "mlx/parser.mly" +# 1182 "mlx/parser.mly" ( [x] ) -# 32075 "mlx/parser.ml" +# 48199 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32108,9 +48232,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.case list) = -# 1088 "mlx/parser.mly" +# 1186 "mlx/parser.mly" ( x :: xs ) -# 32114 "mlx/parser.ml" +# 48238 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32134,20 +48258,20 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.core_type list) = let xs = let x = -# 3358 "mlx/parser.mly" +# 3660 "mlx/parser.mly" ( _1 ) -# 32140 "mlx/parser.ml" +# 48264 "mlx/parser.ml" in -# 1019 "mlx/parser.mly" +# 1117 "mlx/parser.mly" ( [ x ] ) -# 32145 "mlx/parser.ml" +# 48269 "mlx/parser.ml" in -# 1027 "mlx/parser.mly" +# 1125 "mlx/parser.mly" ( xs ) -# 32151 "mlx/parser.ml" +# 48275 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32185,20 +48309,20 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.core_type list) = let xs = let x = -# 3358 "mlx/parser.mly" +# 3660 "mlx/parser.mly" ( _1 ) -# 32191 "mlx/parser.ml" +# 48315 "mlx/parser.ml" in -# 1023 "mlx/parser.mly" +# 1121 "mlx/parser.mly" ( x :: xs ) -# 32196 "mlx/parser.ml" +# 48320 "mlx/parser.ml" in -# 1027 "mlx/parser.mly" +# 1125 "mlx/parser.mly" ( xs ) -# 32202 "mlx/parser.ml" +# 48326 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32221,14 +48345,14 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (Parsetree.with_constraint list) = let xs = -# 1019 "mlx/parser.mly" +# 1117 "mlx/parser.mly" ( [ x ] ) -# 32227 "mlx/parser.ml" +# 48351 "mlx/parser.ml" in -# 1027 "mlx/parser.mly" +# 1125 "mlx/parser.mly" ( xs ) -# 32232 "mlx/parser.ml" +# 48356 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32265,14 +48389,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.with_constraint list) = let xs = -# 1023 "mlx/parser.mly" +# 1121 "mlx/parser.mly" ( x :: xs ) -# 32271 "mlx/parser.ml" +# 48395 "mlx/parser.ml" in -# 1027 "mlx/parser.mly" +# 1125 "mlx/parser.mly" ( xs ) -# 32276 "mlx/parser.ml" +# 48400 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32295,14 +48419,14 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (Parsetree.row_field list) = let xs = -# 1019 "mlx/parser.mly" +# 1117 "mlx/parser.mly" ( [ x ] ) -# 32301 "mlx/parser.ml" +# 48425 "mlx/parser.ml" in -# 1027 "mlx/parser.mly" +# 1125 "mlx/parser.mly" ( xs ) -# 32306 "mlx/parser.ml" +# 48430 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32339,14 +48463,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.row_field list) = let xs = -# 1023 "mlx/parser.mly" +# 1121 "mlx/parser.mly" ( x :: xs ) -# 32345 "mlx/parser.ml" +# 48469 "mlx/parser.ml" in -# 1027 "mlx/parser.mly" +# 1125 "mlx/parser.mly" ( xs ) -# 32350 "mlx/parser.ml" +# 48474 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32369,14 +48493,14 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = let xs = -# 1019 "mlx/parser.mly" +# 1117 "mlx/parser.mly" ( [ x ] ) -# 32375 "mlx/parser.ml" +# 48499 "mlx/parser.ml" in -# 1027 "mlx/parser.mly" +# 1125 "mlx/parser.mly" ( xs ) -# 32380 "mlx/parser.ml" +# 48504 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32413,14 +48537,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = let xs = -# 1023 "mlx/parser.mly" +# 1121 "mlx/parser.mly" ( x :: xs ) -# 32419 "mlx/parser.ml" +# 48543 "mlx/parser.ml" in -# 1027 "mlx/parser.mly" +# 1125 "mlx/parser.mly" ( xs ) -# 32424 "mlx/parser.ml" +# 48548 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32443,14 +48567,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 = -# 1019 "mlx/parser.mly" +# 1117 "mlx/parser.mly" ( [ x ] ) -# 32449 "mlx/parser.ml" +# 48573 "mlx/parser.ml" in -# 1027 "mlx/parser.mly" +# 1125 "mlx/parser.mly" ( xs ) -# 32454 "mlx/parser.ml" +# 48578 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32487,14 +48611,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 = -# 1023 "mlx/parser.mly" +# 1121 "mlx/parser.mly" ( x :: xs ) -# 32493 "mlx/parser.ml" +# 48617 "mlx/parser.ml" in -# 1027 "mlx/parser.mly" +# 1125 "mlx/parser.mly" ( xs ) -# 32498 "mlx/parser.ml" +# 48622 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32517,14 +48641,14 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = let xs = -# 1019 "mlx/parser.mly" +# 1117 "mlx/parser.mly" ( [ x ] ) -# 32523 "mlx/parser.ml" +# 48647 "mlx/parser.ml" in -# 1027 "mlx/parser.mly" +# 1125 "mlx/parser.mly" ( xs ) -# 32528 "mlx/parser.ml" +# 48652 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32561,14 +48685,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = let xs = -# 1023 "mlx/parser.mly" +# 1121 "mlx/parser.mly" ( x :: xs ) -# 32567 "mlx/parser.ml" +# 48691 "mlx/parser.ml" in -# 1027 "mlx/parser.mly" +# 1125 "mlx/parser.mly" ( xs ) -# 32572 "mlx/parser.ml" +# 48696 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32580,34 +48704,32 @@ module Tables = struct (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 = _; - 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 = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - 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 x : (Parsetree.core_type) = Obj.magic x in - let _2 : unit = Obj.magic _2 in - let xs : (Parsetree.core_type list) = Obj.magic xs in + let _1 : (Parsetree.core_type) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_xs_ in - let _endpos = _endpos_x_ in - let _v : (Parsetree.core_type list) = -# 1050 "mlx/parser.mly" - ( x :: xs ) -# 32611 "mlx/parser.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : ((string option * Parsetree.core_type) list) = let xs = + let x = +# 3760 "mlx/parser.mly" + ( None, _1 ) +# 48722 "mlx/parser.ml" + in + +# 1117 "mlx/parser.mly" + ( [ x ] ) +# 48727 "mlx/parser.ml" + + in + +# 1125 "mlx/parser.mly" + ( xs ) +# 48733 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32620,9 +48742,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = x2; - MenhirLib.EngineTypes.startp = _startpos_x2_; - MenhirLib.EngineTypes.endp = _endpos_x2_; + MenhirLib.EngineTypes.semv = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -32630,23 +48752,39 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x1; - MenhirLib.EngineTypes.startp = _startpos_x1_; - MenhirLib.EngineTypes.endp = _endpos_x1_; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let x2 : (Parsetree.core_type) = Obj.magic x2 in + let ty : (Parsetree.core_type) = Obj.magic ty in let _2 : unit = Obj.magic _2 in - let x1 : (Parsetree.core_type) = Obj.magic x1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x1_ in - let _endpos = _endpos_x2_ in - let _v : (Parsetree.core_type list) = -# 1054 "mlx/parser.mly" - ( [ x2; x1 ] ) -# 32650 "mlx/parser.ml" + let label : ( +# 786 "mlx/parser.mly" + (string) +# 48768 "mlx/parser.ml" + ) = Obj.magic label in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_label_ in + let _endpos = _endpos_ty_ in + let _v : ((string option * Parsetree.core_type) list) = let xs = + let x = +# 3762 "mlx/parser.mly" + ( Some label, ty ) +# 48777 "mlx/parser.ml" + in + +# 1117 "mlx/parser.mly" + ( [ x ] ) +# 48782 "mlx/parser.ml" + + in + +# 1125 "mlx/parser.mly" + ( xs ) +# 48788 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32659,9 +48797,9 @@ module Tables = struct 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.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -32676,16 +48814,28 @@ module Tables = struct }; }; } = _menhir_stack in - let x : (Parsetree.expression) = Obj.magic x in + let _1 : (Parsetree.core_type) = Obj.magic _1 in let _2 : unit = Obj.magic _2 in - let xs : (Parsetree.expression list) = Obj.magic xs in + let xs : ((string option * Parsetree.core_type) 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 : (Parsetree.expression list) = -# 1050 "mlx/parser.mly" + let _endpos = _endpos__1_ in + let _v : ((string option * Parsetree.core_type) list) = let xs = + let x = +# 3760 "mlx/parser.mly" + ( None, _1 ) +# 48828 "mlx/parser.ml" + in + +# 1121 "mlx/parser.mly" ( x :: xs ) -# 32689 "mlx/parser.ml" +# 48833 "mlx/parser.ml" + + in + +# 1125 "mlx/parser.mly" + ( xs ) +# 48839 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32698,33 +48848,66 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = x2; - MenhirLib.EngineTypes.startp = _startpos_x2_; - MenhirLib.EngineTypes.endp = _endpos_x2_; + MenhirLib.EngineTypes.semv = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x1; - MenhirLib.EngineTypes.startp = _startpos_x1_; - MenhirLib.EngineTypes.endp = _endpos_x1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; } = _menhir_stack in - let x2 : (Parsetree.expression) = Obj.magic x2 in + let ty : (Parsetree.core_type) = Obj.magic ty in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let label : ( +# 786 "mlx/parser.mly" + (string) +# 48886 "mlx/parser.ml" + ) = Obj.magic label in let _2 : unit = Obj.magic _2 in - let x1 : (Parsetree.expression) = Obj.magic x1 in + let xs : ((string option * Parsetree.core_type) list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x1_ in - let _endpos = _endpos_x2_ in - let _v : (Parsetree.expression list) = -# 1054 "mlx/parser.mly" - ( [ x2; x1 ] ) -# 32728 "mlx/parser.ml" + let _startpos = _startpos_xs_ in + let _endpos = _endpos_ty_ in + let _v : ((string option * Parsetree.core_type) list) = let xs = + let x = + let _2 = _2_inlined1 in + +# 3762 "mlx/parser.mly" + ( Some label, ty ) +# 48899 "mlx/parser.ml" + + in + +# 1121 "mlx/parser.mly" + ( x :: xs ) +# 48905 "mlx/parser.ml" + + in + +# 1125 "mlx/parser.mly" + ( xs ) +# 48911 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32761,9 +48944,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = -# 1050 "mlx/parser.mly" +# 1148 "mlx/parser.mly" ( x :: xs ) -# 32767 "mlx/parser.ml" +# 48950 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32800,9 +48983,9 @@ module Tables = struct let _startpos = _startpos_x1_ in let _endpos = _endpos_x2_ in let _v : (Parsetree.core_type list) = -# 1054 "mlx/parser.mly" +# 1152 "mlx/parser.mly" ( [ x2; x1 ] ) -# 32806 "mlx/parser.ml" +# 48989 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32825,9 +49008,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.row_field) = -# 3498 "mlx/parser.mly" +# 3903 "mlx/parser.mly" ( _1 ) -# 32831 "mlx/parser.ml" +# 49014 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32853,9 +49036,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3500 "mlx/parser.mly" +# 3905 "mlx/parser.mly" ( Rf.inherit_ ~loc:(make_loc _sloc) _1 ) -# 32859 "mlx/parser.ml" +# 49042 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32868,24 +49051,36 @@ module Tables = struct 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.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : (Parsetree.expression) = Obj.magic x in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in let _v : (Parsetree.expression list) = let _2 = # 124 "" ( None ) -# 32884 "mlx/parser.ml" +# 49067 "mlx/parser.ml" in + let x = + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 49073 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 49078 "mlx/parser.ml" + + in -# 1071 "mlx/parser.mly" +# 1169 "mlx/parser.mly" ( [x] ) -# 32889 "mlx/parser.ml" +# 49084 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32898,34 +49093,280 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = x_inlined1; - MenhirLib.EngineTypes.startp = _startpos_x_inlined1_; - MenhirLib.EngineTypes.endp = _endpos_x_inlined1_; + 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 = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let x_inlined1 : unit = Obj.magic x_inlined1 in - let x : (Parsetree.expression) = Obj.magic x in + let x : unit = Obj.magic x in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_inlined1_ in - let _v : (Parsetree.expression list) = let _2 = - let x = x_inlined1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos_x_ in + let _v : (Parsetree.expression list) = let _2 = +# 126 "" + ( Some x ) +# 49116 "mlx/parser.ml" + in + let x = + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 49122 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 49127 "mlx/parser.ml" + + in + +# 1169 "mlx/parser.mly" + ( [x] ) +# 49133 "mlx/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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 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 : (Parsetree.expression list) = let _2 = +# 124 "" + ( None ) +# 49179 "mlx/parser.ml" + in + let x = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 49188 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 49193 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 49199 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 49210 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 49216 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 49236 "mlx/parser.ml" + + in +# 2446 "mlx/parser.mly" + ( _1 ) +# 49242 "mlx/parser.ml" + + in + +# 1169 "mlx/parser.mly" + ( [x] ) +# 49248 "mlx/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 = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 x : unit = Obj.magic x in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 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_x_ in + let _v : (Parsetree.expression list) = let _2 = # 126 "" ( Some x ) -# 32923 "mlx/parser.ml" +# 49301 "mlx/parser.ml" + in + let x = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 49310 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 49315 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 49321 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 49332 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 49338 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 49358 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 49364 "mlx/parser.ml" in -# 1071 "mlx/parser.mly" +# 1169 "mlx/parser.mly" ( [x] ) -# 32929 "mlx/parser.ml" +# 49370 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32948,23 +49389,160 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in let xs : (Parsetree.expression list) = Obj.magic xs in let _2 : unit = Obj.magic _2 in - let x : (Parsetree.expression) = Obj.magic x in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in + let _startpos = _startpos__1_ in let _endpos = _endpos_xs_ in - let _v : (Parsetree.expression list) = -# 1075 "mlx/parser.mly" + let _v : (Parsetree.expression list) = let x = + let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 49410 "mlx/parser.ml" + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 49415 "mlx/parser.ml" + + in + +# 1173 "mlx/parser.mly" + ( x :: xs ) +# 49421 "mlx/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 = 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 = _; + MenhirLib.EngineTypes.semv = xs_inlined1; + MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 xs : (Parsetree.expression list) = Obj.magic xs in + let _2 : unit = Obj.magic _2 in + let xs_inlined1 : (Parsetree.case list) = Obj.magic xs_inlined1 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 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 : (Parsetree.expression list) = let x = + let (_endpos_xs_, xs) = (_endpos_xs_inlined1_, xs_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 49486 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 49491 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 49497 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 49508 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 49514 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 49534 "mlx/parser.ml" + + in + +# 2446 "mlx/parser.mly" + ( _1 ) +# 49540 "mlx/parser.ml" + + in + +# 1173 "mlx/parser.mly" ( x :: xs ) -# 32968 "mlx/parser.ml" +# 49546 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32990,9 +49568,9 @@ module Tables = struct } = _menhir_stack in let oe : (Parsetree.expression option) = Obj.magic oe in let _1 : ( -# 714 "mlx/parser.mly" +# 786 "mlx/parser.mly" (string) -# 32996 "mlx/parser.ml" +# 49574 "mlx/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -33000,26 +49578,26 @@ module Tables = struct let _v : ((string Ppxlib.loc * Parsetree.expression) list) = let _2 = # 124 "" ( None ) -# 33004 "mlx/parser.ml" +# 49582 "mlx/parser.ml" in let x = let label = let _1 = -# 3562 "mlx/parser.mly" +# 3967 "mlx/parser.mly" ( _1 ) -# 33011 "mlx/parser.ml" +# 49589 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 33019 "mlx/parser.ml" +# 49597 "mlx/parser.ml" in -# 2717 "mlx/parser.mly" +# 2952 "mlx/parser.mly" ( let label, e = match oe with | None -> @@ -33029,13 +49607,13 @@ module Tables = struct label, e in label, e ) -# 33033 "mlx/parser.ml" +# 49611 "mlx/parser.ml" in -# 1071 "mlx/parser.mly" +# 1169 "mlx/parser.mly" ( [x] ) -# 33039 "mlx/parser.ml" +# 49617 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33068,9 +49646,9 @@ module Tables = struct let x : unit = Obj.magic x in let oe : (Parsetree.expression option) = Obj.magic oe in let _1 : ( -# 714 "mlx/parser.mly" +# 786 "mlx/parser.mly" (string) -# 33074 "mlx/parser.ml" +# 49652 "mlx/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -33078,26 +49656,26 @@ module Tables = struct let _v : ((string Ppxlib.loc * Parsetree.expression) list) = let _2 = # 126 "" ( Some x ) -# 33082 "mlx/parser.ml" +# 49660 "mlx/parser.ml" in let x = let label = let _1 = -# 3562 "mlx/parser.mly" +# 3967 "mlx/parser.mly" ( _1 ) -# 33089 "mlx/parser.ml" +# 49667 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 33097 "mlx/parser.ml" +# 49675 "mlx/parser.ml" in -# 2717 "mlx/parser.mly" +# 2952 "mlx/parser.mly" ( let label, e = match oe with | None -> @@ -33107,13 +49685,13 @@ module Tables = struct label, e in label, e ) -# 33111 "mlx/parser.ml" +# 49689 "mlx/parser.ml" in -# 1071 "mlx/parser.mly" +# 1169 "mlx/parser.mly" ( [x] ) -# 33117 "mlx/parser.ml" +# 49695 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33153,9 +49731,9 @@ module Tables = struct let _2 : unit = Obj.magic _2 in let oe : (Parsetree.expression option) = Obj.magic oe in let _1 : ( -# 714 "mlx/parser.mly" +# 786 "mlx/parser.mly" (string) -# 33159 "mlx/parser.ml" +# 49737 "mlx/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -33163,21 +49741,21 @@ module Tables = struct let _v : ((string Ppxlib.loc * Parsetree.expression) list) = let x = let label = let _1 = -# 3562 "mlx/parser.mly" +# 3967 "mlx/parser.mly" ( _1 ) -# 33169 "mlx/parser.ml" +# 49747 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 33177 "mlx/parser.ml" +# 49755 "mlx/parser.ml" in -# 2717 "mlx/parser.mly" +# 2952 "mlx/parser.mly" ( let label, e = match oe with | None -> @@ -33187,13 +49765,13 @@ module Tables = struct label, e in label, e ) -# 33191 "mlx/parser.ml" +# 49769 "mlx/parser.ml" in -# 1075 "mlx/parser.mly" +# 1173 "mlx/parser.mly" ( x :: xs ) -# 33197 "mlx/parser.ml" +# 49775 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33218,12 +49796,12 @@ module Tables = struct let _v : (Parsetree.pattern list) = let _2 = # 124 "" ( None ) -# 33222 "mlx/parser.ml" +# 49800 "mlx/parser.ml" in -# 1071 "mlx/parser.mly" +# 1169 "mlx/parser.mly" ( [x] ) -# 33227 "mlx/parser.ml" +# 49805 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33257,13 +49835,13 @@ module Tables = struct # 126 "" ( Some x ) -# 33261 "mlx/parser.ml" +# 49839 "mlx/parser.ml" in -# 1071 "mlx/parser.mly" +# 1169 "mlx/parser.mly" ( [x] ) -# 33267 "mlx/parser.ml" +# 49845 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33300,9 +49878,9 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_xs_ in let _v : (Parsetree.pattern list) = -# 1075 "mlx/parser.mly" +# 1173 "mlx/parser.mly" ( x :: xs ) -# 33306 "mlx/parser.ml" +# 49884 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33333,15 +49911,15 @@ module Tables = struct }; } = _menhir_stack in let eo : (Parsetree.expression option) = Obj.magic eo in - let c : ((Parsetree.core_type option * Parsetree.core_type option) option) = Obj.magic c in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let c : (Parsetree.type_constraint option) = Obj.magic c in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos_eo_ in - let _v : ((Ppxlib.longident Ppxlib.loc * Parsetree.expression) list) = let _2 = + let _v : ((Mlx_shim.Longident.t Ppxlib.loc * Parsetree.expression) list) = let _2 = # 124 "" ( None ) -# 33345 "mlx/parser.ml" +# 49923 "mlx/parser.ml" in let x = let label = @@ -33349,9 +49927,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 33355 "mlx/parser.ml" +# 49933 "mlx/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -33359,7 +49937,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2700 "mlx/parser.mly" +# 2935 "mlx/parser.mly" ( let constraint_loc, label, e = match eo with | None -> @@ -33369,13 +49947,13 @@ module Tables = struct (_startpos_c_, _endpos), label, e in label, mkexp_opt_constraint ~loc:constraint_loc e c ) -# 33373 "mlx/parser.ml" +# 49951 "mlx/parser.ml" in -# 1071 "mlx/parser.mly" +# 1169 "mlx/parser.mly" ( [x] ) -# 33379 "mlx/parser.ml" +# 49957 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33413,15 +49991,15 @@ module Tables = struct } = _menhir_stack in let x : unit = Obj.magic x in let eo : (Parsetree.expression option) = Obj.magic eo in - let c : ((Parsetree.core_type option * Parsetree.core_type option) option) = Obj.magic c in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let c : (Parsetree.type_constraint option) = Obj.magic c in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos_x_ in - let _v : ((Ppxlib.longident Ppxlib.loc * Parsetree.expression) list) = let _2 = + let _v : ((Mlx_shim.Longident.t Ppxlib.loc * Parsetree.expression) list) = let _2 = # 126 "" ( Some x ) -# 33425 "mlx/parser.ml" +# 50003 "mlx/parser.ml" in let x = let label = @@ -33429,91 +50007,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" - ( mkrhs _1 _sloc ) -# 33435 "mlx/parser.ml" - - in - let _startpos_label_ = _startpos__1_ in - let _endpos = _endpos_eo_ in - let _symbolstartpos = _startpos_label_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2700 "mlx/parser.mly" - ( let constraint_loc, label, e = - match eo with - | None -> - (* No pattern; this is a pun. Desugar it. *) - _sloc, make_ghost label, exp_of_longident label - | Some e -> - (_startpos_c_, _endpos), label, e - in - label, mkexp_opt_constraint ~loc:constraint_loc e c ) -# 33453 "mlx/parser.ml" - - in - -# 1071 "mlx/parser.mly" - ( [x] ) -# 33459 "mlx/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 = 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 = _; - MenhirLib.EngineTypes.semv = eo; - MenhirLib.EngineTypes.startp = _startpos_eo_; - MenhirLib.EngineTypes.endp = _endpos_eo_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = c; - MenhirLib.EngineTypes.startp = _startpos_c_; - MenhirLib.EngineTypes.endp = _endpos_c_; - 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 : ((Ppxlib.longident Ppxlib.loc * Parsetree.expression) list) = Obj.magic xs in - let _2 : unit = Obj.magic _2 in - let eo : (Parsetree.expression option) = Obj.magic eo in - let c : ((Parsetree.core_type option * Parsetree.core_type option) option) = Obj.magic c in - let _1 : (Ppxlib.longident) = 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 : ((Ppxlib.longident Ppxlib.loc * Parsetree.expression) list) = let x = - let label = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 33517 "mlx/parser.ml" +# 50013 "mlx/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -33521,7 +50017,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2700 "mlx/parser.mly" +# 2935 "mlx/parser.mly" ( let constraint_loc, label, e = match eo with | None -> @@ -33531,38 +50027,13 @@ module Tables = struct (_startpos_c_, _endpos), label, e in label, mkexp_opt_constraint ~loc:constraint_loc e c ) -# 33535 "mlx/parser.ml" +# 50031 "mlx/parser.ml" in -# 1075 "mlx/parser.mly" - ( x :: xs ) -# 33541 "mlx/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.expression) = 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.expression) = -# 2206 "mlx/parser.mly" - ( _1 ) -# 33566 "mlx/parser.ml" +# 1169 "mlx/parser.mly" + ( [x] ) +# 50037 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33575,26 +50046,76 @@ module Tables = struct 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.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 = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = eo; + MenhirLib.EngineTypes.startp = _startpos_eo_; + MenhirLib.EngineTypes.endp = _endpos_eo_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; + 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 : ((Mlx_shim.Longident.t Ppxlib.loc * Parsetree.expression) list) = Obj.magic xs in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let eo : (Parsetree.expression option) = Obj.magic eo in + let c : (Parsetree.type_constraint option) = Obj.magic c in + let _1 : (Mlx_shim.Longident.t) = 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) = -# 2207 "mlx/parser.mly" - ( _1 ) -# 33598 "mlx/parser.ml" + let _endpos = _endpos_xs_ in + let _v : ((Mlx_shim.Longident.t Ppxlib.loc * Parsetree.expression) list) = let x = + let label = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 978 "mlx/parser.mly" + ( mkrhs _1 _sloc ) +# 50095 "mlx/parser.ml" + + in + let _startpos_label_ = _startpos__1_ in + let _endpos = _endpos_eo_ in + let _symbolstartpos = _startpos_label_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2935 "mlx/parser.mly" + ( let constraint_loc, label, e = + match eo with + | None -> + (* No pattern; this is a pun. Desugar it. *) + _sloc, make_ghost label, exp_of_longident label + | Some e -> + (_startpos_c_, _endpos), label, e + in + label, mkexp_opt_constraint ~loc:constraint_loc e c ) +# 50113 "mlx/parser.ml" + + in + +# 1173 "mlx/parser.mly" + ( x :: xs ) +# 50119 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33606,50 +50127,25 @@ module Tables = struct (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 = _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; - }; - }; + 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 : (Parsetree.expression) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in let _1 : (Parsetree.expression) = 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 = -# 2209 "mlx/parser.mly" - ( Pexp_sequence(_1, _3) ) -# 33638 "mlx/parser.ml" - in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 934 "mlx/parser.mly" - ( mkexp ~loc:_sloc _1 ) -# 33647 "mlx/parser.ml" - - in + let _endpos = _endpos__1_ in + let _v : (Parsetree.expression) = let _1 = +# 2303 "mlx/parser.mly" + ( _1 ) +# 50144 "mlx/parser.ml" + in -# 2210 "mlx/parser.mly" - ( _1 ) -# 33653 "mlx/parser.ml" +# 2339 "mlx/parser.mly" + ( _1 ) +# 50149 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33662,52 +50158,97 @@ 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + 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; - }; + 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 : (Parsetree.expression) = Obj.magic _5 in - let _4 : (string Ppxlib.loc) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 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 : (Parsetree.expression) = let _endpos = _endpos__5_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 50198 "mlx/parser.ml" + in + +# 1194 "mlx/parser.mly" + ( xs ) +# 50203 "mlx/parser.ml" + + in + +# 2814 "mlx/parser.mly" + ( xs ) +# 50209 "mlx/parser.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4337 "mlx/parser.mly" + ( _1 ) +# 50220 "mlx/parser.ml" + + in + +# 4350 "mlx/parser.mly" + ( _1, _2 ) +# 50226 "mlx/parser.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2305 "mlx/parser.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 50246 "mlx/parser.ml" + + in -# 2212 "mlx/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)) ) -# 33711 "mlx/parser.ml" +# 2339 "mlx/parser.mly" + ( _1 ) +# 50252 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33775,18 +50316,18 @@ module Tables = struct let _v : (Parsetree.type_exception * string Ppxlib.loc option) = let attrs = let _1 = _1_inlined4 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 33781 "mlx/parser.ml" +# 50322 "mlx/parser.ml" in let _endpos_attrs_ = _endpos__1_inlined4_ in let attrs2 = let _1 = _1_inlined3 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 33790 "mlx/parser.ml" +# 50331 "mlx/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -33796,17 +50337,17 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 33802 "mlx/parser.ml" +# 50343 "mlx/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 33810 "mlx/parser.ml" +# 50351 "mlx/parser.ml" in let _endpos = _endpos_attrs_ in @@ -33814,14 +50355,14 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3170 "mlx/parser.mly" +# 3471 "mlx/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.mk_exception ~attrs ~loc (Te.decl id ~vars ~args ?res ~attrs:(attrs1 @ attrs2) ~loc ~docs) , ext ) -# 33825 "mlx/parser.ml" +# 50366 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33847,21 +50388,21 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 33851 "mlx/parser.ml" +# 50392 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 894 "mlx/parser.mly" +# 971 "mlx/parser.mly" ( extra_sig _startpos _endpos _1 ) -# 33859 "mlx/parser.ml" +# 50400 "mlx/parser.ml" in -# 1653 "mlx/parser.mly" +# 1749 "mlx/parser.mly" ( _1 ) -# 33865 "mlx/parser.ml" +# 50406 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33893,9 +50434,9 @@ module Tables = struct let _v : (Parsetree.signature_item) = let _2 = let _1 = _1_inlined1 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 33899 "mlx/parser.ml" +# 50440 "mlx/parser.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -33903,10 +50444,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1668 "mlx/parser.mly" +# 1764 "mlx/parser.mly" ( let docs = symbol_docs _sloc in mksig ~loc:_sloc (Psig_extension (_1, (add_docs_attrs docs _2))) ) -# 33910 "mlx/parser.ml" +# 50451 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33930,23 +50471,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1672 "mlx/parser.mly" +# 1768 "mlx/parser.mly" ( Psig_attribute _1 ) -# 33936 "mlx/parser.ml" +# 50477 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 942 "mlx/parser.mly" +# 1019 "mlx/parser.mly" ( mksig ~loc:_sloc _1 ) -# 33944 "mlx/parser.ml" +# 50485 "mlx/parser.ml" in -# 1674 "mlx/parser.mly" +# 1770 "mlx/parser.mly" ( _1 ) -# 33950 "mlx/parser.ml" +# 50491 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33970,23 +50511,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1677 "mlx/parser.mly" +# 1773 "mlx/parser.mly" ( psig_value _1 ) -# 33976 "mlx/parser.ml" +# 50517 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 959 "mlx/parser.mly" +# 1036 "mlx/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33984 "mlx/parser.ml" +# 50525 "mlx/parser.ml" in -# 1709 "mlx/parser.mly" +# 1805 "mlx/parser.mly" ( _1 ) -# 33990 "mlx/parser.ml" +# 50531 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34010,23 +50551,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1679 "mlx/parser.mly" +# 1775 "mlx/parser.mly" ( psig_value _1 ) -# 34016 "mlx/parser.ml" +# 50557 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 959 "mlx/parser.mly" +# 1036 "mlx/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 34024 "mlx/parser.ml" +# 50565 "mlx/parser.ml" in -# 1709 "mlx/parser.mly" +# 1805 "mlx/parser.mly" ( _1 ) -# 34030 "mlx/parser.ml" +# 50571 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34060,26 +50601,26 @@ module Tables = struct let _1 = let _1 = let _1 = -# 1132 "mlx/parser.mly" +# 1230 "mlx/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 34066 "mlx/parser.ml" +# 50607 "mlx/parser.ml" in -# 2991 "mlx/parser.mly" +# 3286 "mlx/parser.mly" ( _1 ) -# 34071 "mlx/parser.ml" +# 50612 "mlx/parser.ml" in -# 2974 "mlx/parser.mly" +# 3269 "mlx/parser.mly" ( _1 ) -# 34077 "mlx/parser.ml" +# 50618 "mlx/parser.ml" in -# 1681 "mlx/parser.mly" +# 1777 "mlx/parser.mly" ( psig_type _1 ) -# 34083 "mlx/parser.ml" +# 50624 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_bs_, _startpos_a_) in @@ -34087,15 +50628,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 959 "mlx/parser.mly" +# 1036 "mlx/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 34093 "mlx/parser.ml" +# 50634 "mlx/parser.ml" in -# 1709 "mlx/parser.mly" +# 1805 "mlx/parser.mly" ( _1 ) -# 34099 "mlx/parser.ml" +# 50640 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34129,26 +50670,26 @@ module Tables = struct let _1 = let _1 = let _1 = -# 1132 "mlx/parser.mly" +# 1230 "mlx/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 34135 "mlx/parser.ml" +# 50676 "mlx/parser.ml" in -# 2991 "mlx/parser.mly" +# 3286 "mlx/parser.mly" ( _1 ) -# 34140 "mlx/parser.ml" +# 50681 "mlx/parser.ml" in -# 2979 "mlx/parser.mly" +# 3274 "mlx/parser.mly" ( _1 ) -# 34146 "mlx/parser.ml" +# 50687 "mlx/parser.ml" in -# 1683 "mlx/parser.mly" +# 1779 "mlx/parser.mly" ( psig_typesubst _1 ) -# 34152 "mlx/parser.ml" +# 50693 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_bs_, _startpos_a_) in @@ -34156,15 +50697,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 959 "mlx/parser.mly" +# 1036 "mlx/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 34162 "mlx/parser.ml" +# 50703 "mlx/parser.ml" in -# 1709 "mlx/parser.mly" +# 1805 "mlx/parser.mly" ( _1 ) -# 34168 "mlx/parser.ml" +# 50709 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34234,7 +50775,7 @@ module Tables = struct let xs : (Parsetree.extension_constructor list) = Obj.magic xs in let priv : (Asttypes.private_flag) = Obj.magic priv in let _7 : unit = Obj.magic _7 in - let _1_inlined2 : (Ppxlib.longident) = Obj.magic _1_inlined2 in + let _1_inlined2 : (Mlx_shim.Longident.t) = 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 let ext : (string Ppxlib.loc option) = Obj.magic ext in @@ -34249,16 +50790,16 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 34255 "mlx/parser.ml" +# 50796 "mlx/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in let cs = -# 1124 "mlx/parser.mly" +# 1222 "mlx/parser.mly" ( List.rev xs ) -# 34262 "mlx/parser.ml" +# 50803 "mlx/parser.ml" in let tid = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in @@ -34266,46 +50807,47 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 34272 "mlx/parser.ml" +# 50813 "mlx/parser.ml" in let _4 = -# 3763 "mlx/parser.mly" +# 4177 "mlx/parser.mly" ( Recursive ) -# 34278 "mlx/parser.ml" +# 50819 "mlx/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 34285 "mlx/parser.ml" +# 50826 "mlx/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3244 "mlx/parser.mly" +# 3545 "mlx/parser.mly" ( let docs = symbol_docs _sloc in let attrs = attrs1 @ attrs2 in - Te.mk tid cs ~params ~priv ~attrs ~docs, + let loc = make_loc _sloc in + Te.mk tid cs ~params ~priv ~attrs ~docs ~loc, ext ) -# 34297 "mlx/parser.ml" +# 50839 "mlx/parser.ml" in -# 3231 "mlx/parser.mly" +# 3532 "mlx/parser.mly" ( _1 ) -# 34303 "mlx/parser.ml" +# 50845 "mlx/parser.ml" in -# 1685 "mlx/parser.mly" +# 1781 "mlx/parser.mly" ( psig_typext _1 ) -# 34309 "mlx/parser.ml" +# 50851 "mlx/parser.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -34313,15 +50855,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 959 "mlx/parser.mly" +# 1036 "mlx/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 34319 "mlx/parser.ml" +# 50861 "mlx/parser.ml" in -# 1709 "mlx/parser.mly" +# 1805 "mlx/parser.mly" ( _1 ) -# 34325 "mlx/parser.ml" +# 50867 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34397,7 +50939,7 @@ module Tables = struct let xs : (Parsetree.extension_constructor list) = Obj.magic xs in let priv : (Asttypes.private_flag) = Obj.magic priv in let _7 : unit = Obj.magic _7 in - let _1_inlined3 : (Ppxlib.longident) = Obj.magic _1_inlined3 in + let _1_inlined3 : (Mlx_shim.Longident.t) = 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 let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -34413,16 +50955,16 @@ module Tables = struct let attrs2 = let _1 = _1_inlined4 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 34419 "mlx/parser.ml" +# 50961 "mlx/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in let cs = -# 1124 "mlx/parser.mly" +# 1222 "mlx/parser.mly" ( List.rev xs ) -# 34426 "mlx/parser.ml" +# 50968 "mlx/parser.ml" in let tid = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in @@ -34430,9 +50972,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 34436 "mlx/parser.ml" +# 50978 "mlx/parser.ml" in let _4 = @@ -34441,41 +50983,42 @@ module Tables = struct let _startpos = _startpos__1_ in let _loc = (_startpos, _endpos) in -# 3765 "mlx/parser.mly" +# 4179 "mlx/parser.mly" ( not_expecting _loc "nonrec flag" ) -# 34447 "mlx/parser.ml" +# 50989 "mlx/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 34455 "mlx/parser.ml" +# 50997 "mlx/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3244 "mlx/parser.mly" +# 3545 "mlx/parser.mly" ( let docs = symbol_docs _sloc in let attrs = attrs1 @ attrs2 in - Te.mk tid cs ~params ~priv ~attrs ~docs, + let loc = make_loc _sloc in + Te.mk tid cs ~params ~priv ~attrs ~docs ~loc, ext ) -# 34467 "mlx/parser.ml" +# 51010 "mlx/parser.ml" in -# 3231 "mlx/parser.mly" +# 3532 "mlx/parser.mly" ( _1 ) -# 34473 "mlx/parser.ml" +# 51016 "mlx/parser.ml" in -# 1685 "mlx/parser.mly" +# 1781 "mlx/parser.mly" ( psig_typext _1 ) -# 34479 "mlx/parser.ml" +# 51022 "mlx/parser.ml" in let _endpos__1_ = _endpos__1_inlined4_ in @@ -34483,15 +51026,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 959 "mlx/parser.mly" +# 1036 "mlx/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 34489 "mlx/parser.ml" +# 51032 "mlx/parser.ml" in -# 1709 "mlx/parser.mly" +# 1805 "mlx/parser.mly" ( _1 ) -# 34495 "mlx/parser.ml" +# 51038 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34515,23 +51058,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1687 "mlx/parser.mly" +# 1783 "mlx/parser.mly" ( psig_exception _1 ) -# 34521 "mlx/parser.ml" +# 51064 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 959 "mlx/parser.mly" +# 1036 "mlx/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 34529 "mlx/parser.ml" +# 51072 "mlx/parser.ml" in -# 1709 "mlx/parser.mly" +# 1805 "mlx/parser.mly" ( _1 ) -# 34535 "mlx/parser.ml" +# 51078 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34594,9 +51137,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 34600 "mlx/parser.ml" +# 51143 "mlx/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -34606,37 +51149,37 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 34612 "mlx/parser.ml" +# 51155 "mlx/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 34620 "mlx/parser.ml" +# 51163 "mlx/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1718 "mlx/parser.mly" +# 1814 "mlx/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 ) -# 34634 "mlx/parser.ml" +# 51177 "mlx/parser.ml" in -# 1689 "mlx/parser.mly" +# 1785 "mlx/parser.mly" ( let (body, ext) = _1 in (Psig_module body, ext) ) -# 34640 "mlx/parser.ml" +# 51183 "mlx/parser.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -34644,15 +51187,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 959 "mlx/parser.mly" +# 1036 "mlx/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 34650 "mlx/parser.ml" +# 51193 "mlx/parser.ml" in -# 1709 "mlx/parser.mly" +# 1805 "mlx/parser.mly" ( _1 ) -# 34656 "mlx/parser.ml" +# 51199 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34707,7 +51250,7 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in - let _1_inlined3 : (Ppxlib.longident) = Obj.magic _1_inlined3 in + let _1_inlined3 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined3 in let _5 : unit = Obj.magic _5 in let _1_inlined2 : (string option) = Obj.magic _1_inlined2 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -34722,9 +51265,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined4 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 34728 "mlx/parser.ml" +# 51271 "mlx/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in @@ -34735,9 +51278,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 34741 "mlx/parser.ml" +# 51284 "mlx/parser.ml" in let (_endpos_id_, _startpos_id_) = (_endpos__1_, _startpos__1_) in @@ -34745,9 +51288,9 @@ module Tables = struct let _symbolstartpos = _startpos_id_ in let _sloc = (_symbolstartpos, _endpos) in -# 1757 "mlx/parser.mly" +# 1853 "mlx/parser.mly" ( Mty.alias ~loc:(make_loc _sloc) id ) -# 34751 "mlx/parser.ml" +# 51294 "mlx/parser.ml" in let name = @@ -34756,37 +51299,37 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 34762 "mlx/parser.ml" +# 51305 "mlx/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 34770 "mlx/parser.ml" +# 51313 "mlx/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1748 "mlx/parser.mly" +# 1844 "mlx/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 ) -# 34784 "mlx/parser.ml" +# 51327 "mlx/parser.ml" in -# 1691 "mlx/parser.mly" +# 1787 "mlx/parser.mly" ( let (body, ext) = _1 in (Psig_module body, ext) ) -# 34790 "mlx/parser.ml" +# 51333 "mlx/parser.ml" in let _endpos__1_ = _endpos__1_inlined4_ in @@ -34794,15 +51337,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 959 "mlx/parser.mly" +# 1036 "mlx/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 34800 "mlx/parser.ml" +# 51343 "mlx/parser.ml" in -# 1709 "mlx/parser.mly" +# 1805 "mlx/parser.mly" ( _1 ) -# 34806 "mlx/parser.ml" +# 51349 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34826,23 +51369,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1693 "mlx/parser.mly" +# 1789 "mlx/parser.mly" ( let (body, ext) = _1 in (Psig_modsubst body, ext) ) -# 34832 "mlx/parser.ml" +# 51375 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 959 "mlx/parser.mly" +# 1036 "mlx/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 34840 "mlx/parser.ml" +# 51383 "mlx/parser.ml" in -# 1709 "mlx/parser.mly" +# 1805 "mlx/parser.mly" ( _1 ) -# 34846 "mlx/parser.ml" +# 51389 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34928,9 +51471,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 34934 "mlx/parser.ml" +# 51477 "mlx/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -34940,49 +51483,49 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 34946 "mlx/parser.ml" +# 51489 "mlx/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 34954 "mlx/parser.ml" +# 51497 "mlx/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1791 "mlx/parser.mly" +# 1887 "mlx/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 ) -# 34968 "mlx/parser.ml" +# 51511 "mlx/parser.ml" in -# 1132 "mlx/parser.mly" +# 1230 "mlx/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 34974 "mlx/parser.ml" +# 51517 "mlx/parser.ml" in -# 1780 "mlx/parser.mly" +# 1876 "mlx/parser.mly" ( _1 ) -# 34980 "mlx/parser.ml" +# 51523 "mlx/parser.ml" in -# 1695 "mlx/parser.mly" +# 1791 "mlx/parser.mly" ( let (ext, l) = _1 in (Psig_recmodule l, ext) ) -# 34986 "mlx/parser.ml" +# 51529 "mlx/parser.ml" in let _endpos__1_ = _endpos_bs_ in @@ -34990,15 +51533,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 959 "mlx/parser.mly" +# 1036 "mlx/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 34996 "mlx/parser.ml" +# 51539 "mlx/parser.ml" in -# 1709 "mlx/parser.mly" +# 1805 "mlx/parser.mly" ( _1 ) -# 35002 "mlx/parser.ml" +# 51545 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35022,23 +51565,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1697 "mlx/parser.mly" +# 1793 "mlx/parser.mly" ( let (body, ext) = _1 in (Psig_modtype body, ext) ) -# 35028 "mlx/parser.ml" +# 51571 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 959 "mlx/parser.mly" +# 1036 "mlx/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 35036 "mlx/parser.ml" +# 51579 "mlx/parser.ml" in -# 1709 "mlx/parser.mly" +# 1805 "mlx/parser.mly" ( _1 ) -# 35042 "mlx/parser.ml" +# 51585 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35062,23 +51605,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1699 "mlx/parser.mly" +# 1795 "mlx/parser.mly" ( let (body, ext) = _1 in (Psig_modtypesubst body, ext) ) -# 35068 "mlx/parser.ml" +# 51611 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 959 "mlx/parser.mly" +# 1036 "mlx/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 35076 "mlx/parser.ml" +# 51619 "mlx/parser.ml" in -# 1709 "mlx/parser.mly" +# 1805 "mlx/parser.mly" ( _1 ) -# 35082 "mlx/parser.ml" +# 51625 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35096,29 +51639,30 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Ppxlib.longident Ppxlib.loc Parsetree.open_infos * string Ppxlib.loc option) = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t Ppxlib.loc Parsetree.open_infos * + string Ppxlib.loc option) = 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.signature_item) = let _1 = let _1 = -# 1701 "mlx/parser.mly" +# 1797 "mlx/parser.mly" ( let (body, ext) = _1 in (Psig_open body, ext) ) -# 35108 "mlx/parser.ml" +# 51652 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 959 "mlx/parser.mly" +# 1036 "mlx/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 35116 "mlx/parser.ml" +# 51660 "mlx/parser.ml" in -# 1709 "mlx/parser.mly" +# 1805 "mlx/parser.mly" ( _1 ) -# 35122 "mlx/parser.ml" +# 51666 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35174,38 +51718,38 @@ module Tables = struct let attrs2 = let _1 = _1_inlined2 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 35180 "mlx/parser.ml" +# 51724 "mlx/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined2_ in let attrs1 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 35189 "mlx/parser.ml" +# 51733 "mlx/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1541 "mlx/parser.mly" +# 1639 "mlx/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Incl.mk thing ~attrs ~loc ~docs, ext ) -# 35203 "mlx/parser.ml" +# 51747 "mlx/parser.ml" in -# 1703 "mlx/parser.mly" +# 1799 "mlx/parser.mly" ( psig_include _1 ) -# 35209 "mlx/parser.ml" +# 51753 "mlx/parser.ml" in let _endpos__1_ = _endpos__1_inlined2_ in @@ -35213,15 +51757,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 959 "mlx/parser.mly" +# 1036 "mlx/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 35219 "mlx/parser.ml" +# 51763 "mlx/parser.ml" in -# 1709 "mlx/parser.mly" +# 1805 "mlx/parser.mly" ( _1 ) -# 35225 "mlx/parser.ml" +# 51769 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35298,9 +51842,9 @@ module Tables = struct let cty : (Parsetree.class_type) = Obj.magic cty in let _7 : unit = Obj.magic _7 in let _1_inlined2 : ( -# 714 "mlx/parser.mly" +# 786 "mlx/parser.mly" (string) -# 35304 "mlx/parser.ml" +# 51848 "mlx/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 @@ -35318,9 +51862,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 35324 "mlx/parser.ml" +# 51868 "mlx/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -35330,24 +51874,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 35336 "mlx/parser.ml" +# 51880 "mlx/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 35344 "mlx/parser.ml" +# 51888 "mlx/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2138 "mlx/parser.mly" +# 2234 "mlx/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -35355,25 +51899,25 @@ module Tables = struct ext, Ci.mk id cty ~virt ~params ~attrs ~loc ~docs ) -# 35359 "mlx/parser.ml" +# 51903 "mlx/parser.ml" in -# 1132 "mlx/parser.mly" +# 1230 "mlx/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 35365 "mlx/parser.ml" +# 51909 "mlx/parser.ml" in -# 2126 "mlx/parser.mly" +# 2222 "mlx/parser.mly" ( _1 ) -# 35371 "mlx/parser.ml" +# 51915 "mlx/parser.ml" in -# 1705 "mlx/parser.mly" +# 1801 "mlx/parser.mly" ( let (ext, l) = _1 in (Psig_class l, ext) ) -# 35377 "mlx/parser.ml" +# 51921 "mlx/parser.ml" in let _endpos__1_ = _endpos_bs_ in @@ -35381,15 +51925,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 959 "mlx/parser.mly" +# 1036 "mlx/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 35387 "mlx/parser.ml" +# 51931 "mlx/parser.ml" in -# 1709 "mlx/parser.mly" +# 1805 "mlx/parser.mly" ( _1 ) -# 35393 "mlx/parser.ml" +# 51937 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35413,23 +51957,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1707 "mlx/parser.mly" +# 1803 "mlx/parser.mly" ( let (ext, l) = _1 in (Psig_class_type l, ext) ) -# 35419 "mlx/parser.ml" +# 51963 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 959 "mlx/parser.mly" +# 1036 "mlx/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 35427 "mlx/parser.ml" +# 51971 "mlx/parser.ml" in -# 1709 "mlx/parser.mly" +# 1805 "mlx/parser.mly" ( _1 ) -# 35433 "mlx/parser.ml" +# 51977 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35452,9 +51996,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.constant) = -# 3574 "mlx/parser.mly" +# 3982 "mlx/parser.mly" ( _1 ) -# 35458 "mlx/parser.ml" +# 52002 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35479,18 +52023,22 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 699 "mlx/parser.mly" +# 771 "mlx/parser.mly" (string * char option) -# 35485 "mlx/parser.ml" +# 52029 "mlx/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) = -# 3575 "mlx/parser.mly" - ( let (n, m) = _2 in Pconst_integer("-" ^ n, m) ) -# 35494 "mlx/parser.ml" + let _v : (Parsetree.constant) = let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3983 "mlx/parser.mly" + ( let (n, m) = _2 in + mkconst ~loc:_sloc (Pconst_integer("-" ^ n, m)) ) +# 52042 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35515,18 +52063,22 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 677 "mlx/parser.mly" +# 749 "mlx/parser.mly" (string * char option) -# 35521 "mlx/parser.ml" +# 52069 "mlx/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) = -# 3576 "mlx/parser.mly" - ( let (f, m) = _2 in Pconst_float("-" ^ f, m) ) -# 35530 "mlx/parser.ml" + let _v : (Parsetree.constant) = let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3985 "mlx/parser.mly" + ( let (f, m) = _2 in + mkconst ~loc:_sloc (Pconst_float("-" ^ f, m)) ) +# 52082 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35551,18 +52103,22 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 699 "mlx/parser.mly" +# 771 "mlx/parser.mly" (string * char option) -# 35557 "mlx/parser.ml" +# 52109 "mlx/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) = -# 3577 "mlx/parser.mly" - ( let (n, m) = _2 in Pconst_integer (n, m) ) -# 35566 "mlx/parser.ml" + let _v : (Parsetree.constant) = let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3987 "mlx/parser.mly" + ( let (n, m) = _2 in + mkconst ~loc:_sloc (Pconst_integer (n, m)) ) +# 52122 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35587,18 +52143,22 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 677 "mlx/parser.mly" +# 749 "mlx/parser.mly" (string * char option) -# 35593 "mlx/parser.ml" +# 52149 "mlx/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) = -# 3578 "mlx/parser.mly" - ( let (f, m) = _2 in Pconst_float(f, m) ) -# 35602 "mlx/parser.ml" + let _v : (Parsetree.constant) = let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3989 "mlx/parser.mly" + ( let (f, m) = _2 in + mkconst ~loc:_sloc (Pconst_float(f, m)) ) +# 52162 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35629,7 +52189,7 @@ module Tables = struct }; } = _menhir_stack in let _3 : unit = Obj.magic _3 in - let _1_inlined1 : ((Ppxlib.longident Ppxlib.loc * Parsetree.pattern) list * unit option) = Obj.magic _1_inlined1 in + let _1_inlined1 : ((Mlx_shim.Longident.t Ppxlib.loc * Parsetree.pattern) list * unit option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -35639,18 +52199,18 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 2903 "mlx/parser.mly" +# 3198 "mlx/parser.mly" ( let fields, closed = _1 in let closed = match closed with Some () -> Open | None -> Closed in fields, closed ) -# 35647 "mlx/parser.ml" +# 52207 "mlx/parser.ml" in -# 2874 "mlx/parser.mly" +# 3113 "mlx/parser.mly" ( let (fields, closed) = _2 in Ppat_record(fields, closed) ) -# 35654 "mlx/parser.ml" +# 52214 "mlx/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -35658,15 +52218,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 35664 "mlx/parser.ml" +# 52224 "mlx/parser.ml" in -# 2888 "mlx/parser.mly" +# 3127 "mlx/parser.mly" ( _1 ) -# 35670 "mlx/parser.ml" +# 52230 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35697,7 +52257,7 @@ module Tables = struct }; } = _menhir_stack in let _3 : unit = Obj.magic _3 in - let _1_inlined1 : ((Ppxlib.longident Ppxlib.loc * Parsetree.pattern) list * unit option) = Obj.magic _1_inlined1 in + let _1_inlined1 : ((Mlx_shim.Longident.t Ppxlib.loc * Parsetree.pattern) list * unit option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -35707,19 +52267,19 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 2903 "mlx/parser.mly" +# 3198 "mlx/parser.mly" ( let fields, closed = _1 in let closed = match closed with Some () -> Open | None -> Closed in fields, closed ) -# 35715 "mlx/parser.ml" +# 52275 "mlx/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2877 "mlx/parser.mly" +# 3116 "mlx/parser.mly" ( unclosed "{" _loc__1_ "}" _loc__3_ ) -# 35723 "mlx/parser.ml" +# 52283 "mlx/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -35727,15 +52287,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 35733 "mlx/parser.ml" +# 52293 "mlx/parser.ml" in -# 2888 "mlx/parser.mly" +# 3127 "mlx/parser.mly" ( _1 ) -# 35739 "mlx/parser.ml" +# 52299 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35774,15 +52334,15 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _2 = -# 2897 "mlx/parser.mly" +# 3192 "mlx/parser.mly" ( ps ) -# 35780 "mlx/parser.ml" +# 52340 "mlx/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2879 "mlx/parser.mly" +# 3118 "mlx/parser.mly" ( fst (mktailpat _loc__3_ _2) ) -# 35786 "mlx/parser.ml" +# 52346 "mlx/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -35790,15 +52350,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 35796 "mlx/parser.ml" +# 52356 "mlx/parser.ml" in -# 2888 "mlx/parser.mly" +# 3127 "mlx/parser.mly" ( _1 ) -# 35802 "mlx/parser.ml" +# 52362 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35837,16 +52397,16 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _2 = -# 2897 "mlx/parser.mly" +# 3192 "mlx/parser.mly" ( ps ) -# 35843 "mlx/parser.ml" +# 52403 "mlx/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2881 "mlx/parser.mly" +# 3120 "mlx/parser.mly" ( unclosed "[" _loc__1_ "]" _loc__3_ ) -# 35850 "mlx/parser.ml" +# 52410 "mlx/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -35854,15 +52414,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 35860 "mlx/parser.ml" +# 52420 "mlx/parser.ml" in -# 2888 "mlx/parser.mly" +# 3127 "mlx/parser.mly" ( _1 ) -# 35866 "mlx/parser.ml" +# 52426 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35901,14 +52461,14 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _2 = -# 2897 "mlx/parser.mly" +# 3192 "mlx/parser.mly" ( ps ) -# 35907 "mlx/parser.ml" +# 52467 "mlx/parser.ml" in -# 2883 "mlx/parser.mly" +# 3122 "mlx/parser.mly" ( Ppat_array _2 ) -# 35912 "mlx/parser.ml" +# 52472 "mlx/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -35916,15 +52476,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 35922 "mlx/parser.ml" +# 52482 "mlx/parser.ml" in -# 2888 "mlx/parser.mly" +# 3127 "mlx/parser.mly" ( _1 ) -# 35928 "mlx/parser.ml" +# 52488 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35955,24 +52515,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2885 "mlx/parser.mly" +# 3124 "mlx/parser.mly" ( Ppat_array [] ) -# 35961 "mlx/parser.ml" +# 52521 "mlx/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 35970 "mlx/parser.ml" +# 52530 "mlx/parser.ml" in -# 2888 "mlx/parser.mly" +# 3127 "mlx/parser.mly" ( _1 ) -# 35976 "mlx/parser.ml" +# 52536 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36011,16 +52571,16 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _2 = -# 2897 "mlx/parser.mly" +# 3192 "mlx/parser.mly" ( ps ) -# 36017 "mlx/parser.ml" +# 52577 "mlx/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2887 "mlx/parser.mly" +# 3126 "mlx/parser.mly" ( unclosed "[|" _loc__1_ "|]" _loc__3_ ) -# 36024 "mlx/parser.ml" +# 52584 "mlx/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -36028,15 +52588,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 36034 "mlx/parser.ml" +# 52594 "mlx/parser.ml" in -# 2888 "mlx/parser.mly" +# 3127 "mlx/parser.mly" ( _1 ) -# 36040 "mlx/parser.ml" +# 52600 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36076,9 +52636,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2380 "mlx/parser.mly" +# 2508 "mlx/parser.mly" ( reloc_exp ~loc:_sloc _2 ) -# 36082 "mlx/parser.ml" +# 52642 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36117,9 +52677,9 @@ module Tables = struct let _v : (Parsetree.expression) = let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2382 "mlx/parser.mly" +# 2510 "mlx/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 36123 "mlx/parser.ml" +# 52683 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36156,7 +52716,7 @@ module Tables = struct }; } = _menhir_stack in let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic _3 in + let _3 : (Parsetree.type_constraint) = 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 @@ -36166,9 +52726,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2384 "mlx/parser.mly" +# 2512 "mlx/parser.mly" ( mkexp_constraint ~loc:_sloc _2 _3 ) -# 36172 "mlx/parser.ml" +# 52732 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36220,14 +52780,14 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2385 "mlx/parser.mly" +# 2513 "mlx/parser.mly" ( None ) -# 36226 "mlx/parser.ml" +# 52786 "mlx/parser.ml" in -# 2268 "mlx/parser.mly" +# 2393 "mlx/parser.mly" ( array, d, Paren, i, r ) -# 36231 "mlx/parser.ml" +# 52791 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -36235,9 +52795,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2386 "mlx/parser.mly" +# 2514 "mlx/parser.mly" ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 36241 "mlx/parser.ml" +# 52801 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36289,14 +52849,14 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2385 "mlx/parser.mly" +# 2513 "mlx/parser.mly" ( None ) -# 36295 "mlx/parser.ml" +# 52855 "mlx/parser.ml" in -# 2270 "mlx/parser.mly" +# 2395 "mlx/parser.mly" ( array, d, Brace, i, r ) -# 36300 "mlx/parser.ml" +# 52860 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -36304,9 +52864,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2386 "mlx/parser.mly" +# 2514 "mlx/parser.mly" ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 36310 "mlx/parser.ml" +# 52870 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36358,14 +52918,14 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2385 "mlx/parser.mly" +# 2513 "mlx/parser.mly" ( None ) -# 36364 "mlx/parser.ml" +# 52924 "mlx/parser.ml" in -# 2272 "mlx/parser.mly" +# 2397 "mlx/parser.mly" ( array, d, Bracket, i, r ) -# 36369 "mlx/parser.ml" +# 52929 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -36373,9 +52933,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2386 "mlx/parser.mly" +# 2514 "mlx/parser.mly" ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 36379 "mlx/parser.ml" +# 52939 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36421,9 +52981,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 694 "mlx/parser.mly" +# 766 "mlx/parser.mly" (string) -# 36427 "mlx/parser.ml" +# 52987 "mlx/parser.ml" ) = Obj.magic _2 in let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -36431,31 +52991,31 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2387 "mlx/parser.mly" +# 2515 "mlx/parser.mly" ( None ) -# 36437 "mlx/parser.ml" +# 52997 "mlx/parser.ml" in let i = -# 2729 "mlx/parser.mly" +# 2964 "mlx/parser.mly" ( es ) -# 36442 "mlx/parser.ml" +# 53002 "mlx/parser.ml" in let d = let _1 = # 124 "" ( None ) -# 36448 "mlx/parser.ml" +# 53008 "mlx/parser.ml" in -# 2284 "mlx/parser.mly" +# 2409 "mlx/parser.mly" ( _1, _2 ) -# 36453 "mlx/parser.ml" +# 53013 "mlx/parser.ml" in -# 2268 "mlx/parser.mly" +# 2393 "mlx/parser.mly" ( array, d, Paren, i, r ) -# 36459 "mlx/parser.ml" +# 53019 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -36463,9 +53023,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2388 "mlx/parser.mly" +# 2516 "mlx/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 36469 "mlx/parser.ml" +# 53029 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36523,11 +53083,11 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 694 "mlx/parser.mly" +# 766 "mlx/parser.mly" (string) -# 36529 "mlx/parser.ml" +# 53089 "mlx/parser.ml" ) = Obj.magic _2 in - let _2_inlined1 : (Ppxlib.longident) = Obj.magic _2_inlined1 in + let _2_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _2_inlined1 in let _1 : unit = Obj.magic _1 in let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -36535,39 +53095,39 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2387 "mlx/parser.mly" +# 2515 "mlx/parser.mly" ( None ) -# 36541 "mlx/parser.ml" +# 53101 "mlx/parser.ml" in let i = -# 2729 "mlx/parser.mly" +# 2964 "mlx/parser.mly" ( es ) -# 36546 "mlx/parser.ml" +# 53106 "mlx/parser.ml" in let d = let _1 = let _2 = _2_inlined1 in let x = -# 2284 "mlx/parser.mly" +# 2409 "mlx/parser.mly" (_2) -# 36554 "mlx/parser.ml" +# 53114 "mlx/parser.ml" in # 126 "" ( Some x ) -# 36559 "mlx/parser.ml" +# 53119 "mlx/parser.ml" in -# 2284 "mlx/parser.mly" +# 2409 "mlx/parser.mly" ( _1, _2 ) -# 36565 "mlx/parser.ml" +# 53125 "mlx/parser.ml" in -# 2268 "mlx/parser.mly" +# 2393 "mlx/parser.mly" ( array, d, Paren, i, r ) -# 36571 "mlx/parser.ml" +# 53131 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -36575,9 +53135,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2388 "mlx/parser.mly" +# 2516 "mlx/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 36581 "mlx/parser.ml" +# 53141 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36623,9 +53183,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 694 "mlx/parser.mly" +# 766 "mlx/parser.mly" (string) -# 36629 "mlx/parser.ml" +# 53189 "mlx/parser.ml" ) = Obj.magic _2 in let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -36633,31 +53193,31 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2387 "mlx/parser.mly" +# 2515 "mlx/parser.mly" ( None ) -# 36639 "mlx/parser.ml" +# 53199 "mlx/parser.ml" in let i = -# 2729 "mlx/parser.mly" +# 2964 "mlx/parser.mly" ( es ) -# 36644 "mlx/parser.ml" +# 53204 "mlx/parser.ml" in let d = let _1 = # 124 "" ( None ) -# 36650 "mlx/parser.ml" +# 53210 "mlx/parser.ml" in -# 2284 "mlx/parser.mly" +# 2409 "mlx/parser.mly" ( _1, _2 ) -# 36655 "mlx/parser.ml" +# 53215 "mlx/parser.ml" in -# 2270 "mlx/parser.mly" +# 2395 "mlx/parser.mly" ( array, d, Brace, i, r ) -# 36661 "mlx/parser.ml" +# 53221 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -36665,9 +53225,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2388 "mlx/parser.mly" +# 2516 "mlx/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 36671 "mlx/parser.ml" +# 53231 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36725,11 +53285,11 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 694 "mlx/parser.mly" +# 766 "mlx/parser.mly" (string) -# 36731 "mlx/parser.ml" +# 53291 "mlx/parser.ml" ) = Obj.magic _2 in - let _2_inlined1 : (Ppxlib.longident) = Obj.magic _2_inlined1 in + let _2_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _2_inlined1 in let _1 : unit = Obj.magic _1 in let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -36737,39 +53297,39 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2387 "mlx/parser.mly" +# 2515 "mlx/parser.mly" ( None ) -# 36743 "mlx/parser.ml" +# 53303 "mlx/parser.ml" in let i = -# 2729 "mlx/parser.mly" +# 2964 "mlx/parser.mly" ( es ) -# 36748 "mlx/parser.ml" +# 53308 "mlx/parser.ml" in let d = let _1 = let _2 = _2_inlined1 in let x = -# 2284 "mlx/parser.mly" +# 2409 "mlx/parser.mly" (_2) -# 36756 "mlx/parser.ml" +# 53316 "mlx/parser.ml" in # 126 "" ( Some x ) -# 36761 "mlx/parser.ml" +# 53321 "mlx/parser.ml" in -# 2284 "mlx/parser.mly" +# 2409 "mlx/parser.mly" ( _1, _2 ) -# 36767 "mlx/parser.ml" +# 53327 "mlx/parser.ml" in -# 2270 "mlx/parser.mly" +# 2395 "mlx/parser.mly" ( array, d, Brace, i, r ) -# 36773 "mlx/parser.ml" +# 53333 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -36777,9 +53337,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2388 "mlx/parser.mly" +# 2516 "mlx/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 36783 "mlx/parser.ml" +# 53343 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36825,9 +53385,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 694 "mlx/parser.mly" +# 766 "mlx/parser.mly" (string) -# 36831 "mlx/parser.ml" +# 53391 "mlx/parser.ml" ) = Obj.magic _2 in let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -36835,31 +53395,31 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2387 "mlx/parser.mly" +# 2515 "mlx/parser.mly" ( None ) -# 36841 "mlx/parser.ml" +# 53401 "mlx/parser.ml" in let i = -# 2729 "mlx/parser.mly" +# 2964 "mlx/parser.mly" ( es ) -# 36846 "mlx/parser.ml" +# 53406 "mlx/parser.ml" in let d = let _1 = # 124 "" ( None ) -# 36852 "mlx/parser.ml" +# 53412 "mlx/parser.ml" in -# 2284 "mlx/parser.mly" +# 2409 "mlx/parser.mly" ( _1, _2 ) -# 36857 "mlx/parser.ml" +# 53417 "mlx/parser.ml" in -# 2272 "mlx/parser.mly" +# 2397 "mlx/parser.mly" ( array, d, Bracket, i, r ) -# 36863 "mlx/parser.ml" +# 53423 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -36867,9 +53427,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2388 "mlx/parser.mly" +# 2516 "mlx/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 36873 "mlx/parser.ml" +# 53433 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36927,11 +53487,11 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 694 "mlx/parser.mly" +# 766 "mlx/parser.mly" (string) -# 36933 "mlx/parser.ml" +# 53493 "mlx/parser.ml" ) = Obj.magic _2 in - let _2_inlined1 : (Ppxlib.longident) = Obj.magic _2_inlined1 in + let _2_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _2_inlined1 in let _1 : unit = Obj.magic _1 in let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -36939,39 +53499,39 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2387 "mlx/parser.mly" +# 2515 "mlx/parser.mly" ( None ) -# 36945 "mlx/parser.ml" +# 53505 "mlx/parser.ml" in let i = -# 2729 "mlx/parser.mly" +# 2964 "mlx/parser.mly" ( es ) -# 36950 "mlx/parser.ml" +# 53510 "mlx/parser.ml" in let d = let _1 = let _2 = _2_inlined1 in let x = -# 2284 "mlx/parser.mly" +# 2409 "mlx/parser.mly" (_2) -# 36958 "mlx/parser.ml" +# 53518 "mlx/parser.ml" in # 126 "" ( Some x ) -# 36963 "mlx/parser.ml" +# 53523 "mlx/parser.ml" in -# 2284 "mlx/parser.mly" +# 2409 "mlx/parser.mly" ( _1, _2 ) -# 36969 "mlx/parser.ml" +# 53529 "mlx/parser.ml" in -# 2272 "mlx/parser.mly" +# 2397 "mlx/parser.mly" ( array, d, Bracket, i, r ) -# 36975 "mlx/parser.ml" +# 53535 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -36979,9 +53539,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2388 "mlx/parser.mly" +# 2516 "mlx/parser.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 36985 "mlx/parser.ml" +# 53545 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37035,15 +53595,15 @@ module Tables = struct let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2277 "mlx/parser.mly" +# 2402 "mlx/parser.mly" ( indexop_unclosed_error _loc__p_ Paren _loc__e_ ) -# 37041 "mlx/parser.ml" +# 53601 "mlx/parser.ml" in -# 2389 "mlx/parser.mly" +# 2517 "mlx/parser.mly" ( _1 ) -# 37047 "mlx/parser.ml" +# 53607 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37097,15 +53657,15 @@ module Tables = struct let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2279 "mlx/parser.mly" +# 2404 "mlx/parser.mly" ( indexop_unclosed_error _loc__p_ Brace _loc__e_ ) -# 37103 "mlx/parser.ml" +# 53663 "mlx/parser.ml" in -# 2389 "mlx/parser.mly" +# 2517 "mlx/parser.mly" ( _1 ) -# 37109 "mlx/parser.ml" +# 53669 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37159,15 +53719,15 @@ module Tables = struct let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2281 "mlx/parser.mly" +# 2406 "mlx/parser.mly" ( indexop_unclosed_error _loc__p_ Bracket _loc__e_ ) -# 37165 "mlx/parser.ml" +# 53725 "mlx/parser.ml" in -# 2389 "mlx/parser.mly" +# 2517 "mlx/parser.mly" ( _1 ) -# 37171 "mlx/parser.ml" +# 53731 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37213,9 +53773,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _p : unit = Obj.magic _p in let _2 : ( -# 694 "mlx/parser.mly" +# 766 "mlx/parser.mly" (string) -# 37219 "mlx/parser.ml" +# 53779 "mlx/parser.ml" ) = Obj.magic _2 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -37223,34 +53783,34 @@ module Tables = struct let _endpos = _endpos__e_ in let _v : (Parsetree.expression) = let _1 = let _4 = -# 2729 "mlx/parser.mly" +# 2964 "mlx/parser.mly" ( es ) -# 37229 "mlx/parser.ml" +# 53789 "mlx/parser.ml" in let _2 = let _1 = # 124 "" ( None ) -# 37235 "mlx/parser.ml" +# 53795 "mlx/parser.ml" in -# 2284 "mlx/parser.mly" +# 2409 "mlx/parser.mly" ( _1, _2 ) -# 37240 "mlx/parser.ml" +# 53800 "mlx/parser.ml" in let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2277 "mlx/parser.mly" +# 2402 "mlx/parser.mly" ( indexop_unclosed_error _loc__p_ Paren _loc__e_ ) -# 37248 "mlx/parser.ml" +# 53808 "mlx/parser.ml" in -# 2390 "mlx/parser.mly" +# 2518 "mlx/parser.mly" ( _1 ) -# 37254 "mlx/parser.ml" +# 53814 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37308,11 +53868,11 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _p : unit = Obj.magic _p in let _2 : ( -# 694 "mlx/parser.mly" +# 766 "mlx/parser.mly" (string) -# 37314 "mlx/parser.ml" +# 53874 "mlx/parser.ml" ) = Obj.magic _2 in - let _2_inlined1 : (Ppxlib.longident) = Obj.magic _2_inlined1 in + let _2_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _2_inlined1 in let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -37320,43 +53880,43 @@ module Tables = struct let _endpos = _endpos__e_ in let _v : (Parsetree.expression) = let _1 = let _4 = -# 2729 "mlx/parser.mly" +# 2964 "mlx/parser.mly" ( es ) -# 37326 "mlx/parser.ml" +# 53886 "mlx/parser.ml" in let _2 = let _1 = _1_inlined1 in let _1 = let _2 = _2_inlined1 in let x = -# 2284 "mlx/parser.mly" +# 2409 "mlx/parser.mly" (_2) -# 37335 "mlx/parser.ml" +# 53895 "mlx/parser.ml" in # 126 "" ( Some x ) -# 37340 "mlx/parser.ml" +# 53900 "mlx/parser.ml" in -# 2284 "mlx/parser.mly" +# 2409 "mlx/parser.mly" ( _1, _2 ) -# 37346 "mlx/parser.ml" +# 53906 "mlx/parser.ml" in let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2277 "mlx/parser.mly" +# 2402 "mlx/parser.mly" ( indexop_unclosed_error _loc__p_ Paren _loc__e_ ) -# 37354 "mlx/parser.ml" +# 53914 "mlx/parser.ml" in -# 2390 "mlx/parser.mly" +# 2518 "mlx/parser.mly" ( _1 ) -# 37360 "mlx/parser.ml" +# 53920 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37402,9 +53962,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _p : unit = Obj.magic _p in let _2 : ( -# 694 "mlx/parser.mly" +# 766 "mlx/parser.mly" (string) -# 37408 "mlx/parser.ml" +# 53968 "mlx/parser.ml" ) = Obj.magic _2 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -37412,34 +53972,34 @@ module Tables = struct let _endpos = _endpos__e_ in let _v : (Parsetree.expression) = let _1 = let _4 = -# 2729 "mlx/parser.mly" +# 2964 "mlx/parser.mly" ( es ) -# 37418 "mlx/parser.ml" +# 53978 "mlx/parser.ml" in let _2 = let _1 = # 124 "" ( None ) -# 37424 "mlx/parser.ml" +# 53984 "mlx/parser.ml" in -# 2284 "mlx/parser.mly" +# 2409 "mlx/parser.mly" ( _1, _2 ) -# 37429 "mlx/parser.ml" +# 53989 "mlx/parser.ml" in let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2279 "mlx/parser.mly" +# 2404 "mlx/parser.mly" ( indexop_unclosed_error _loc__p_ Brace _loc__e_ ) -# 37437 "mlx/parser.ml" +# 53997 "mlx/parser.ml" in -# 2390 "mlx/parser.mly" +# 2518 "mlx/parser.mly" ( _1 ) -# 37443 "mlx/parser.ml" +# 54003 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37497,11 +54057,11 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _p : unit = Obj.magic _p in let _2 : ( -# 694 "mlx/parser.mly" +# 766 "mlx/parser.mly" (string) -# 37503 "mlx/parser.ml" +# 54063 "mlx/parser.ml" ) = Obj.magic _2 in - let _2_inlined1 : (Ppxlib.longident) = Obj.magic _2_inlined1 in + let _2_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _2_inlined1 in let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -37509,43 +54069,43 @@ module Tables = struct let _endpos = _endpos__e_ in let _v : (Parsetree.expression) = let _1 = let _4 = -# 2729 "mlx/parser.mly" +# 2964 "mlx/parser.mly" ( es ) -# 37515 "mlx/parser.ml" +# 54075 "mlx/parser.ml" in let _2 = let _1 = _1_inlined1 in let _1 = let _2 = _2_inlined1 in let x = -# 2284 "mlx/parser.mly" +# 2409 "mlx/parser.mly" (_2) -# 37524 "mlx/parser.ml" +# 54084 "mlx/parser.ml" in # 126 "" ( Some x ) -# 37529 "mlx/parser.ml" +# 54089 "mlx/parser.ml" in -# 2284 "mlx/parser.mly" +# 2409 "mlx/parser.mly" ( _1, _2 ) -# 37535 "mlx/parser.ml" +# 54095 "mlx/parser.ml" in let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2279 "mlx/parser.mly" +# 2404 "mlx/parser.mly" ( indexop_unclosed_error _loc__p_ Brace _loc__e_ ) -# 37543 "mlx/parser.ml" +# 54103 "mlx/parser.ml" in -# 2390 "mlx/parser.mly" +# 2518 "mlx/parser.mly" ( _1 ) -# 37549 "mlx/parser.ml" +# 54109 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37591,9 +54151,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _p : unit = Obj.magic _p in let _2 : ( -# 694 "mlx/parser.mly" +# 766 "mlx/parser.mly" (string) -# 37597 "mlx/parser.ml" +# 54157 "mlx/parser.ml" ) = Obj.magic _2 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -37601,34 +54161,34 @@ module Tables = struct let _endpos = _endpos__e_ in let _v : (Parsetree.expression) = let _1 = let _4 = -# 2729 "mlx/parser.mly" +# 2964 "mlx/parser.mly" ( es ) -# 37607 "mlx/parser.ml" +# 54167 "mlx/parser.ml" in let _2 = let _1 = # 124 "" ( None ) -# 37613 "mlx/parser.ml" +# 54173 "mlx/parser.ml" in -# 2284 "mlx/parser.mly" +# 2409 "mlx/parser.mly" ( _1, _2 ) -# 37618 "mlx/parser.ml" +# 54178 "mlx/parser.ml" in let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2281 "mlx/parser.mly" +# 2406 "mlx/parser.mly" ( indexop_unclosed_error _loc__p_ Bracket _loc__e_ ) -# 37626 "mlx/parser.ml" +# 54186 "mlx/parser.ml" in -# 2390 "mlx/parser.mly" +# 2518 "mlx/parser.mly" ( _1 ) -# 37632 "mlx/parser.ml" +# 54192 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37686,11 +54246,11 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _p : unit = Obj.magic _p in let _2 : ( -# 694 "mlx/parser.mly" +# 766 "mlx/parser.mly" (string) -# 37692 "mlx/parser.ml" +# 54252 "mlx/parser.ml" ) = Obj.magic _2 in - let _2_inlined1 : (Ppxlib.longident) = Obj.magic _2_inlined1 in + let _2_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _2_inlined1 in let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -37698,43 +54258,134 @@ module Tables = struct let _endpos = _endpos__e_ in let _v : (Parsetree.expression) = let _1 = let _4 = -# 2729 "mlx/parser.mly" +# 2964 "mlx/parser.mly" ( es ) -# 37704 "mlx/parser.ml" +# 54264 "mlx/parser.ml" in let _2 = let _1 = _1_inlined1 in let _1 = let _2 = _2_inlined1 in let x = -# 2284 "mlx/parser.mly" +# 2409 "mlx/parser.mly" (_2) -# 37713 "mlx/parser.ml" +# 54273 "mlx/parser.ml" in # 126 "" ( Some x ) -# 37718 "mlx/parser.ml" +# 54278 "mlx/parser.ml" in -# 2284 "mlx/parser.mly" +# 2409 "mlx/parser.mly" ( _1, _2 ) -# 37724 "mlx/parser.ml" +# 54284 "mlx/parser.ml" in let _loc__p_ = (_startpos__p_, _endpos__p_) in let _loc__e_ = (_startpos__e_, _endpos__e_) in -# 2281 "mlx/parser.mly" +# 2406 "mlx/parser.mly" ( indexop_unclosed_error _loc__p_ Bracket _loc__e_ ) -# 37732 "mlx/parser.ml" +# 54292 "mlx/parser.ml" in -# 2390 "mlx/parser.mly" +# 2518 "mlx/parser.mly" ( _1 ) -# 37738 "mlx/parser.ml" +# 54298 "mlx/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 = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; + 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 e : (Parsetree.expression) = Obj.magic e 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_e_ in + let _v : (Parsetree.expression) = let _1 = + let _endpos = _endpos_e_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2559 "mlx/parser.mly" + ( mkexp ~loc:_sloc (pexp_extension ~id:(mknoloc "metaocaml.escape") e) ) +# 54334 "mlx/parser.ml" + + in + +# 2519 "mlx/parser.mly" + ( _1 ) +# 54340 "mlx/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 = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; + 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 e : (Parsetree.expression) = Obj.magic e 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 _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2561 "mlx/parser.mly" + ( mkexp ~loc:_sloc (pexp_extension ~id:(mknoloc "metaocaml.bracket") e) ) +# 54383 "mlx/parser.ml" + + in + +# 2519 "mlx/parser.mly" + ( _1 ) +# 54389 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37788,15 +54439,15 @@ module Tables = struct let attrs = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 37794 "mlx/parser.ml" +# 54445 "mlx/parser.ml" in -# 2400 "mlx/parser.mly" +# 2529 "mlx/parser.mly" ( e.pexp_desc, (ext, attrs @ e.pexp_attributes) ) -# 37800 "mlx/parser.ml" +# 54451 "mlx/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -37804,10 +54455,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2392 "mlx/parser.mly" +# 2521 "mlx/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 37811 "mlx/parser.ml" +# 54462 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37856,24 +54507,24 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 37862 "mlx/parser.ml" +# 54513 "mlx/parser.ml" in -# 3935 "mlx/parser.mly" +# 4350 "mlx/parser.mly" ( _1, _2 ) -# 37868 "mlx/parser.ml" +# 54519 "mlx/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2402 "mlx/parser.mly" +# 2531 "mlx/parser.mly" ( Pexp_construct (mkloc (Lident "()") (make_loc _sloc), None), _2 ) -# 37877 "mlx/parser.ml" +# 54528 "mlx/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -37881,10 +54532,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2392 "mlx/parser.mly" +# 2521 "mlx/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 37888 "mlx/parser.ml" +# 54539 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37940,23 +54591,23 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 37946 "mlx/parser.ml" +# 54597 "mlx/parser.ml" in -# 3935 "mlx/parser.mly" +# 4350 "mlx/parser.mly" ( _1, _2 ) -# 37952 "mlx/parser.ml" +# 54603 "mlx/parser.ml" in let _loc__4_ = (_startpos__4_, _endpos__4_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2404 "mlx/parser.mly" +# 2533 "mlx/parser.mly" ( unclosed "begin" _loc__1_ "end" _loc__4_ ) -# 37960 "mlx/parser.ml" +# 54611 "mlx/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -37964,10 +54615,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2392 "mlx/parser.mly" +# 2521 "mlx/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 37971 "mlx/parser.ml" +# 54622 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38003,7 +54654,7 @@ module Tables = struct }; }; } = _menhir_stack in - let _1_inlined3 : (Ppxlib.longident) = Obj.magic _1_inlined3 in + let _1_inlined3 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined3 in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in let _1_inlined1 : (string Ppxlib.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in @@ -38017,9 +54668,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 38023 "mlx/parser.ml" +# 54674 "mlx/parser.ml" in let _2 = @@ -38027,21 +54678,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 38033 "mlx/parser.ml" +# 54684 "mlx/parser.ml" in -# 3935 "mlx/parser.mly" +# 4350 "mlx/parser.mly" ( _1, _2 ) -# 38039 "mlx/parser.ml" +# 54690 "mlx/parser.ml" in -# 2406 "mlx/parser.mly" +# 2535 "mlx/parser.mly" ( Pexp_new(_3), _2 ) -# 38045 "mlx/parser.ml" +# 54696 "mlx/parser.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -38049,10 +54700,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2392 "mlx/parser.mly" +# 2521 "mlx/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 38056 "mlx/parser.ml" +# 54707 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38115,21 +54766,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 38121 "mlx/parser.ml" +# 54772 "mlx/parser.ml" in -# 3935 "mlx/parser.mly" +# 4350 "mlx/parser.mly" ( _1, _2 ) -# 38127 "mlx/parser.ml" +# 54778 "mlx/parser.ml" in -# 2408 "mlx/parser.mly" - ( Pexp_pack _4, _3 ) -# 38133 "mlx/parser.ml" +# 2537 "mlx/parser.mly" + ( Pexp_pack (_4, None), _3 ) +# 54784 "mlx/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -38137,10 +54788,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2392 "mlx/parser.mly" +# 2521 "mlx/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 38144 "mlx/parser.ml" +# 54795 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38218,11 +54869,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3488 "mlx/parser.mly" +# 3891 "mlx/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 ) -# 38226 "mlx/parser.ml" + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 54876 "mlx/parser.ml" in let _3 = @@ -38230,24 +54880,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 38236 "mlx/parser.ml" +# 54886 "mlx/parser.ml" in -# 3935 "mlx/parser.mly" +# 4350 "mlx/parser.mly" ( _1, _2 ) -# 38242 "mlx/parser.ml" +# 54892 "mlx/parser.ml" in - let _endpos = _endpos__7_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2410 "mlx/parser.mly" - ( Pexp_constraint (ghexp ~loc:_sloc (Pexp_pack _4), _6), _3 ) -# 38251 "mlx/parser.ml" +# 2539 "mlx/parser.mly" + ( Pexp_pack (_4, Some _6), _3 ) +# 54898 "mlx/parser.ml" in let _endpos__1_ = _endpos__7_ in @@ -38255,10 +54902,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2392 "mlx/parser.mly" +# 2521 "mlx/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 38262 "mlx/parser.ml" +# 54909 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38328,23 +54975,23 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 38334 "mlx/parser.ml" +# 54981 "mlx/parser.ml" in -# 3935 "mlx/parser.mly" +# 4350 "mlx/parser.mly" ( _1, _2 ) -# 38340 "mlx/parser.ml" +# 54987 "mlx/parser.ml" in let _loc__6_ = (_startpos__6_, _endpos__6_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2412 "mlx/parser.mly" +# 2541 "mlx/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__6_ ) -# 38348 "mlx/parser.ml" +# 54995 "mlx/parser.ml" in let _endpos__1_ = _endpos__6_ in @@ -38352,10 +54999,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2392 "mlx/parser.mly" +# 2521 "mlx/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 38359 "mlx/parser.ml" +# 55006 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38420,27 +55067,27 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 38424 "mlx/parser.ml" +# 55071 "mlx/parser.ml" in -# 1954 "mlx/parser.mly" +# 2050 "mlx/parser.mly" ( _1 ) -# 38429 "mlx/parser.ml" +# 55076 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 895 "mlx/parser.mly" +# 972 "mlx/parser.mly" ( extra_cstr _startpos _endpos _1 ) -# 38438 "mlx/parser.ml" +# 55085 "mlx/parser.ml" in -# 1941 "mlx/parser.mly" +# 2037 "mlx/parser.mly" ( Cstr.mk _1 _2 ) -# 38444 "mlx/parser.ml" +# 55091 "mlx/parser.ml" in let _2 = @@ -38448,21 +55095,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 38454 "mlx/parser.ml" +# 55101 "mlx/parser.ml" in -# 3935 "mlx/parser.mly" +# 4350 "mlx/parser.mly" ( _1, _2 ) -# 38460 "mlx/parser.ml" +# 55107 "mlx/parser.ml" in -# 2414 "mlx/parser.mly" +# 2543 "mlx/parser.mly" ( Pexp_object _3, _2 ) -# 38466 "mlx/parser.ml" +# 55113 "mlx/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -38470,10 +55117,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2392 "mlx/parser.mly" +# 2521 "mlx/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 38477 "mlx/parser.ml" +# 55124 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38538,27 +55185,27 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 38542 "mlx/parser.ml" +# 55189 "mlx/parser.ml" in -# 1954 "mlx/parser.mly" +# 2050 "mlx/parser.mly" ( _1 ) -# 38547 "mlx/parser.ml" +# 55194 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 895 "mlx/parser.mly" +# 972 "mlx/parser.mly" ( extra_cstr _startpos _endpos _1 ) -# 38556 "mlx/parser.ml" +# 55203 "mlx/parser.ml" in -# 1941 "mlx/parser.mly" +# 2037 "mlx/parser.mly" ( Cstr.mk _1 _2 ) -# 38562 "mlx/parser.ml" +# 55209 "mlx/parser.ml" in let _2 = @@ -38566,23 +55213,23 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 38572 "mlx/parser.ml" +# 55219 "mlx/parser.ml" in -# 3935 "mlx/parser.mly" +# 4350 "mlx/parser.mly" ( _1, _2 ) -# 38578 "mlx/parser.ml" +# 55225 "mlx/parser.ml" in let _loc__4_ = (_startpos__4_, _endpos__4_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2416 "mlx/parser.mly" +# 2545 "mlx/parser.mly" ( unclosed "object" _loc__1_ "end" _loc__4_ ) -# 38586 "mlx/parser.ml" +# 55233 "mlx/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -38590,10 +55237,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2392 "mlx/parser.mly" +# 2521 "mlx/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 38597 "mlx/parser.ml" +# 55244 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38617,9 +55264,9 @@ module Tables = struct let _endpos = _endpos_e_ in let _v : (Parsetree.expression) = let _loc_e_ = (_startpos_e_, _endpos_e_) in -# 2394 "mlx/parser.mly" +# 2523 "mlx/parser.mly" ( Jsx_helper.mkjsxexp ~loc:_loc_e_ e ) -# 38623 "mlx/parser.ml" +# 55270 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38637,7 +55284,7 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in @@ -38648,30 +55295,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 38654 "mlx/parser.ml" +# 55301 "mlx/parser.ml" in -# 2420 "mlx/parser.mly" +# 2566 "mlx/parser.mly" ( Pexp_ident (_1) ) -# 38660 "mlx/parser.ml" +# 55307 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38669 "mlx/parser.ml" +# 55316 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 38675 "mlx/parser.ml" +# 55322 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38695,23 +55342,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2422 "mlx/parser.mly" +# 2568 "mlx/parser.mly" ( Pexp_constant _1 ) -# 38701 "mlx/parser.ml" +# 55348 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38709 "mlx/parser.ml" +# 55356 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 38715 "mlx/parser.ml" +# 55362 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38729,7 +55376,7 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in @@ -38740,30 +55387,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 38746 "mlx/parser.ml" +# 55393 "mlx/parser.ml" in -# 2424 "mlx/parser.mly" +# 2570 "mlx/parser.mly" ( Pexp_construct(_1, None) ) -# 38752 "mlx/parser.ml" +# 55399 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38761 "mlx/parser.ml" +# 55408 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 38767 "mlx/parser.ml" +# 55414 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38787,23 +55434,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2426 "mlx/parser.mly" +# 2572 "mlx/parser.mly" ( Pexp_variant(_1, None) ) -# 38793 "mlx/parser.ml" +# 55440 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38801 "mlx/parser.ml" +# 55448 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 38807 "mlx/parser.ml" +# 55454 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38829,9 +55476,9 @@ module Tables = struct } = _menhir_stack in let _2 : (Parsetree.expression) = Obj.magic _2 in let _1 : ( -# 740 "mlx/parser.mly" +# 812 "mlx/parser.mly" (string) -# 38835 "mlx/parser.ml" +# 55482 "mlx/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -38843,15 +55490,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 928 "mlx/parser.mly" +# 1005 "mlx/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 38849 "mlx/parser.ml" +# 55496 "mlx/parser.ml" in -# 2428 "mlx/parser.mly" +# 2574 "mlx/parser.mly" ( Pexp_apply(_1, [Nolabel,_2]) ) -# 38855 "mlx/parser.ml" +# 55502 "mlx/parser.ml" in let _endpos__1_ = _endpos__2_ in @@ -38859,15 +55506,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38865 "mlx/parser.ml" +# 55512 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 38871 "mlx/parser.ml" +# 55518 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38900,23 +55547,23 @@ module Tables = struct let _1 = let _1 = let _1 = -# 2429 "mlx/parser.mly" +# 2575 "mlx/parser.mly" ("!") -# 38906 "mlx/parser.ml" +# 55553 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 928 "mlx/parser.mly" +# 1005 "mlx/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 38914 "mlx/parser.ml" +# 55561 "mlx/parser.ml" in -# 2430 "mlx/parser.mly" +# 2576 "mlx/parser.mly" ( Pexp_apply(_1, [Nolabel,_2]) ) -# 38920 "mlx/parser.ml" +# 55567 "mlx/parser.ml" in let _endpos__1_ = _endpos__2_ in @@ -38924,15 +55571,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38930 "mlx/parser.ml" +# 55577 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 38936 "mlx/parser.ml" +# 55583 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38971,14 +55618,14 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _2 = -# 2712 "mlx/parser.mly" +# 2947 "mlx/parser.mly" ( xs ) -# 38977 "mlx/parser.ml" +# 55624 "mlx/parser.ml" in -# 2432 "mlx/parser.mly" +# 2578 "mlx/parser.mly" ( Pexp_override _2 ) -# 38982 "mlx/parser.ml" +# 55629 "mlx/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -38986,15 +55633,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38992 "mlx/parser.ml" +# 55639 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 38998 "mlx/parser.ml" +# 55645 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39033,16 +55680,16 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _2 = -# 2712 "mlx/parser.mly" +# 2947 "mlx/parser.mly" ( xs ) -# 39039 "mlx/parser.ml" +# 55686 "mlx/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2434 "mlx/parser.mly" +# 2580 "mlx/parser.mly" ( unclosed "{<" _loc__1_ ">}" _loc__3_ ) -# 39046 "mlx/parser.ml" +# 55693 "mlx/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -39050,15 +55697,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 39056 "mlx/parser.ml" +# 55703 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 39062 "mlx/parser.ml" +# 55709 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39089,24 +55736,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2436 "mlx/parser.mly" +# 2582 "mlx/parser.mly" ( Pexp_override [] ) -# 39095 "mlx/parser.ml" +# 55742 "mlx/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 39104 "mlx/parser.ml" +# 55751 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 39110 "mlx/parser.ml" +# 55757 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39136,7 +55783,7 @@ module Tables = struct }; }; } = _menhir_stack in - let _1_inlined1 : (Ppxlib.longident) = Obj.magic _1_inlined1 in + let _1_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -39150,15 +55797,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 39156 "mlx/parser.ml" +# 55803 "mlx/parser.ml" in -# 2438 "mlx/parser.mly" +# 2584 "mlx/parser.mly" ( Pexp_field(_1, _3) ) -# 39162 "mlx/parser.ml" +# 55809 "mlx/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -39166,15 +55813,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 39172 "mlx/parser.ml" +# 55819 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 39178 "mlx/parser.ml" +# 55825 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39220,7 +55867,7 @@ module Tables = struct let _4 : (Parsetree.expression) = Obj.magic _4 in let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.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 @@ -39232,24 +55879,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 39238 "mlx/parser.ml" +# 55885 "mlx/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1600 "mlx/parser.mly" +# 1698 "mlx/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 39247 "mlx/parser.ml" +# 55894 "mlx/parser.ml" in -# 2440 "mlx/parser.mly" +# 2586 "mlx/parser.mly" ( Pexp_open(od, _4) ) -# 39253 "mlx/parser.ml" +# 55900 "mlx/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -39257,15 +55904,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 39263 "mlx/parser.ml" +# 55910 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 39269 "mlx/parser.ml" +# 55916 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39311,16 +55958,16 @@ module Tables = struct let xs : ((string Ppxlib.loc * Parsetree.expression) list) = Obj.magic xs in let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.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 _4 = -# 2712 "mlx/parser.mly" +# 2947 "mlx/parser.mly" ( xs ) -# 39324 "mlx/parser.ml" +# 55971 "mlx/parser.ml" in let od = let _1 = @@ -39328,18 +55975,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 39334 "mlx/parser.ml" +# 55981 "mlx/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1600 "mlx/parser.mly" +# 1698 "mlx/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 39343 "mlx/parser.ml" +# 55990 "mlx/parser.ml" in let _startpos_od_ = _startpos__1_ in @@ -39347,10 +55994,10 @@ module Tables = struct let _symbolstartpos = _startpos_od_ in let _sloc = (_symbolstartpos, _endpos) in -# 2442 "mlx/parser.mly" +# 2588 "mlx/parser.mly" ( (* TODO: review the location of Pexp_override *) Pexp_open(od, mkexp ~loc:_sloc (Pexp_override _4)) ) -# 39354 "mlx/parser.ml" +# 56001 "mlx/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -39358,15 +56005,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 39364 "mlx/parser.ml" +# 56011 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 39370 "mlx/parser.ml" +# 56017 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39412,23 +56059,23 @@ module Tables = struct let xs : ((string Ppxlib.loc * Parsetree.expression) list) = Obj.magic xs in let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.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 _4 = -# 2712 "mlx/parser.mly" +# 2947 "mlx/parser.mly" ( xs ) -# 39425 "mlx/parser.ml" +# 56072 "mlx/parser.ml" in let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2445 "mlx/parser.mly" +# 2591 "mlx/parser.mly" ( unclosed "{<" _loc__3_ ">}" _loc__5_ ) -# 39432 "mlx/parser.ml" +# 56079 "mlx/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -39436,15 +56083,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 39442 "mlx/parser.ml" +# 56089 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 39448 "mlx/parser.ml" +# 56095 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39475,9 +56122,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined1 : ( -# 714 "mlx/parser.mly" +# 786 "mlx/parser.mly" (string) -# 39481 "mlx/parser.ml" +# 56128 "mlx/parser.ml" ) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : (Parsetree.expression) = Obj.magic _1 in @@ -39489,23 +56136,23 @@ module Tables = struct let _3 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3562 "mlx/parser.mly" +# 3967 "mlx/parser.mly" ( _1 ) -# 39495 "mlx/parser.ml" +# 56142 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 39503 "mlx/parser.ml" +# 56150 "mlx/parser.ml" in -# 2447 "mlx/parser.mly" +# 2593 "mlx/parser.mly" ( Pexp_send(_1, _3) ) -# 39509 "mlx/parser.ml" +# 56156 "mlx/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -39513,15 +56160,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 39519 "mlx/parser.ml" +# 56166 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 39525 "mlx/parser.ml" +# 56172 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39553,9 +56200,9 @@ module Tables = struct } = _menhir_stack in let _3 : (Parsetree.expression) = Obj.magic _3 in let _1_inlined1 : ( -# 751 "mlx/parser.mly" +# 823 "mlx/parser.mly" (string) -# 39559 "mlx/parser.ml" +# 56206 "mlx/parser.ml" ) = Obj.magic _1_inlined1 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -39569,15 +56216,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 928 "mlx/parser.mly" +# 1005 "mlx/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 39575 "mlx/parser.ml" +# 56222 "mlx/parser.ml" in -# 2449 "mlx/parser.mly" +# 2595 "mlx/parser.mly" ( mkinfix _1 _2 _3 ) -# 39581 "mlx/parser.ml" +# 56228 "mlx/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -39585,15 +56232,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 39591 "mlx/parser.ml" +# 56238 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 39597 "mlx/parser.ml" +# 56244 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39617,23 +56264,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2451 "mlx/parser.mly" +# 2597 "mlx/parser.mly" ( Pexp_extension _1 ) -# 39623 "mlx/parser.ml" +# 56270 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 39631 "mlx/parser.ml" +# 56278 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 39637 "mlx/parser.ml" +# 56284 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39672,7 +56319,7 @@ module Tables = struct let _2_inlined1 : unit = Obj.magic _2_inlined1 in let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_inlined1_ in @@ -39681,18 +56328,18 @@ module Tables = struct let _3 = let (_endpos__2_, _startpos__1_, _2, _1) = (_endpos__2_inlined1_, _startpos__1_inlined1_, _2_inlined1, _1_inlined1) in let _1 = -# 2452 "mlx/parser.mly" +# 2598 "mlx/parser.mly" (Lident "()") -# 39687 "mlx/parser.ml" +# 56334 "mlx/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 39696 "mlx/parser.ml" +# 56343 "mlx/parser.ml" in let (_endpos__3_, _startpos__3_) = (_endpos__2_inlined1_, _startpos__1_inlined1_) in @@ -39702,25 +56349,25 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 39708 "mlx/parser.ml" +# 56355 "mlx/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1600 "mlx/parser.mly" +# 1698 "mlx/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 39717 "mlx/parser.ml" +# 56364 "mlx/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2453 "mlx/parser.mly" +# 2599 "mlx/parser.mly" ( Pexp_open(od, mkexp ~loc:(_loc__3_) (Pexp_construct(_3, None))) ) -# 39724 "mlx/parser.ml" +# 56371 "mlx/parser.ml" in let _endpos__1_ = _endpos__2_inlined1_ in @@ -39728,15 +56375,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 39734 "mlx/parser.ml" +# 56381 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 39740 "mlx/parser.ml" +# 56387 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39782,7 +56429,7 @@ module Tables = struct let _4 : (Parsetree.expression) = Obj.magic _4 in let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.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 @@ -39791,9 +56438,9 @@ module Tables = struct let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2455 "mlx/parser.mly" +# 2601 "mlx/parser.mly" ( unclosed "(" _loc__3_ ")" _loc__5_ ) -# 39797 "mlx/parser.ml" +# 56444 "mlx/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -39801,15 +56448,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 39807 "mlx/parser.ml" +# 56454 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 39813 "mlx/parser.ml" +# 56460 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39841,32 +56488,32 @@ module Tables = struct } = _menhir_stack in let _3 : unit = Obj.magic _3 in let _2 : (Parsetree.expression option * - (Ppxlib.longident Ppxlib.loc * Parsetree.expression) list) = Obj.magic _2 in + (Mlx_shim.Longident.t Ppxlib.loc * Parsetree.expression) list) = 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 : (Parsetree.expression) = let _1 = let _1 = -# 2457 "mlx/parser.mly" +# 2603 "mlx/parser.mly" ( let (exten, fields) = _2 in Pexp_record(fields, exten) ) -# 39855 "mlx/parser.ml" +# 56502 "mlx/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 39864 "mlx/parser.ml" +# 56511 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 39870 "mlx/parser.ml" +# 56517 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39898,7 +56545,7 @@ module Tables = struct } = _menhir_stack in let _3 : unit = Obj.magic _3 in let _2 : (Parsetree.expression option * - (Ppxlib.longident Ppxlib.loc * Parsetree.expression) list) = Obj.magic _2 in + (Mlx_shim.Longident.t Ppxlib.loc * Parsetree.expression) list) = 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 @@ -39908,9 +56555,9 @@ module Tables = struct let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2460 "mlx/parser.mly" +# 2606 "mlx/parser.mly" ( unclosed "{" _loc__1_ "}" _loc__3_ ) -# 39914 "mlx/parser.ml" +# 56561 "mlx/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -39918,15 +56565,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 39924 "mlx/parser.ml" +# 56571 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 39930 "mlx/parser.ml" +# 56577 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39970,10 +56617,10 @@ module Tables = struct } = _menhir_stack in let _5 : unit = Obj.magic _5 in let _4 : (Parsetree.expression option * - (Ppxlib.longident Ppxlib.loc * Parsetree.expression) list) = Obj.magic _4 in + (Mlx_shim.Longident.t Ppxlib.loc * Parsetree.expression) list) = Obj.magic _4 in let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.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 @@ -39985,27 +56632,27 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 39991 "mlx/parser.ml" +# 56638 "mlx/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1600 "mlx/parser.mly" +# 1698 "mlx/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 40000 "mlx/parser.ml" +# 56647 "mlx/parser.ml" in let _endpos = _endpos__5_ in -# 2462 "mlx/parser.mly" +# 2608 "mlx/parser.mly" ( let (exten, fields) = _4 in Pexp_open(od, mkexp ~loc:(_startpos__3_, _endpos) (Pexp_record(fields, exten))) ) -# 40009 "mlx/parser.ml" +# 56656 "mlx/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -40013,15 +56660,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40019 "mlx/parser.ml" +# 56666 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 40025 "mlx/parser.ml" +# 56672 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40065,10 +56712,10 @@ module Tables = struct } = _menhir_stack in let _5 : unit = Obj.magic _5 in let _4 : (Parsetree.expression option * - (Ppxlib.longident Ppxlib.loc * Parsetree.expression) list) = Obj.magic _4 in + (Mlx_shim.Longident.t Ppxlib.loc * Parsetree.expression) list) = Obj.magic _4 in let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.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 @@ -40077,9 +56724,9 @@ module Tables = struct let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2466 "mlx/parser.mly" +# 2612 "mlx/parser.mly" ( unclosed "{" _loc__3_ "}" _loc__5_ ) -# 40083 "mlx/parser.ml" +# 56730 "mlx/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -40087,15 +56734,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40093 "mlx/parser.ml" +# 56740 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 40099 "mlx/parser.ml" +# 56746 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40134,14 +56781,14 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _2 = -# 2729 "mlx/parser.mly" +# 2964 "mlx/parser.mly" ( es ) -# 40140 "mlx/parser.ml" +# 56787 "mlx/parser.ml" in -# 2468 "mlx/parser.mly" +# 2614 "mlx/parser.mly" ( Pexp_array(_2) ) -# 40145 "mlx/parser.ml" +# 56792 "mlx/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -40149,15 +56796,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40155 "mlx/parser.ml" +# 56802 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 40161 "mlx/parser.ml" +# 56808 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40196,16 +56843,16 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _2 = -# 2729 "mlx/parser.mly" +# 2964 "mlx/parser.mly" ( es ) -# 40202 "mlx/parser.ml" +# 56849 "mlx/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2470 "mlx/parser.mly" +# 2616 "mlx/parser.mly" ( unclosed "[|" _loc__1_ "|]" _loc__3_ ) -# 40209 "mlx/parser.ml" +# 56856 "mlx/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -40213,15 +56860,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40219 "mlx/parser.ml" +# 56866 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 40225 "mlx/parser.ml" +# 56872 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40252,24 +56899,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2472 "mlx/parser.mly" +# 2618 "mlx/parser.mly" ( Pexp_array [] ) -# 40258 "mlx/parser.ml" +# 56905 "mlx/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40267 "mlx/parser.ml" +# 56914 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 40273 "mlx/parser.ml" +# 56920 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40315,16 +56962,16 @@ module Tables = struct 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 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.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 _4 = -# 2729 "mlx/parser.mly" +# 2964 "mlx/parser.mly" ( es ) -# 40328 "mlx/parser.ml" +# 56975 "mlx/parser.ml" in let od = let _1 = @@ -40332,25 +56979,25 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 40338 "mlx/parser.ml" +# 56985 "mlx/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1600 "mlx/parser.mly" +# 1698 "mlx/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 40347 "mlx/parser.ml" +# 56994 "mlx/parser.ml" in let _endpos = _endpos__5_ in -# 2474 "mlx/parser.mly" +# 2620 "mlx/parser.mly" ( Pexp_open(od, mkexp ~loc:(_startpos__3_, _endpos) (Pexp_array(_4))) ) -# 40354 "mlx/parser.ml" +# 57001 "mlx/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -40358,15 +57005,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40364 "mlx/parser.ml" +# 57011 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 40370 "mlx/parser.ml" +# 57017 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40405,7 +57052,7 @@ module Tables = struct let _4 : unit = Obj.magic _4 in let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.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 @@ -40417,26 +57064,26 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 40423 "mlx/parser.ml" +# 57070 "mlx/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1600 "mlx/parser.mly" +# 1698 "mlx/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 40432 "mlx/parser.ml" +# 57079 "mlx/parser.ml" in let _endpos = _endpos__4_ in -# 2476 "mlx/parser.mly" +# 2622 "mlx/parser.mly" ( (* TODO: review the location of Pexp_array *) Pexp_open(od, mkexp ~loc:(_startpos__3_, _endpos) (Pexp_array [])) ) -# 40440 "mlx/parser.ml" +# 57087 "mlx/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -40444,15 +57091,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40450 "mlx/parser.ml" +# 57097 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 40456 "mlx/parser.ml" +# 57103 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40498,23 +57145,23 @@ module Tables = struct 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 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.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 _4 = -# 2729 "mlx/parser.mly" +# 2964 "mlx/parser.mly" ( es ) -# 40511 "mlx/parser.ml" +# 57158 "mlx/parser.ml" in let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2480 "mlx/parser.mly" +# 2626 "mlx/parser.mly" ( unclosed "[|" _loc__3_ "|]" _loc__5_ ) -# 40518 "mlx/parser.ml" +# 57165 "mlx/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -40522,15 +57169,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40528 "mlx/parser.ml" +# 57175 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 40534 "mlx/parser.ml" +# 57181 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40569,15 +57216,15 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _2 = -# 2729 "mlx/parser.mly" +# 2964 "mlx/parser.mly" ( es ) -# 40575 "mlx/parser.ml" +# 57222 "mlx/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2482 "mlx/parser.mly" +# 2628 "mlx/parser.mly" ( fst (mktailexp _loc__3_ _2) ) -# 40581 "mlx/parser.ml" +# 57228 "mlx/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -40585,15 +57232,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40591 "mlx/parser.ml" +# 57238 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 40597 "mlx/parser.ml" +# 57244 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40632,16 +57279,16 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _2 = -# 2729 "mlx/parser.mly" +# 2964 "mlx/parser.mly" ( es ) -# 40638 "mlx/parser.ml" +# 57285 "mlx/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2484 "mlx/parser.mly" +# 2630 "mlx/parser.mly" ( unclosed "[" _loc__1_ "]" _loc__3_ ) -# 40645 "mlx/parser.ml" +# 57292 "mlx/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -40649,15 +57296,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40655 "mlx/parser.ml" +# 57302 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 40661 "mlx/parser.ml" +# 57308 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40703,16 +57350,16 @@ module Tables = struct 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 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.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 _4 = -# 2729 "mlx/parser.mly" +# 2964 "mlx/parser.mly" ( es ) -# 40716 "mlx/parser.ml" +# 57363 "mlx/parser.ml" in let od = let _1 = @@ -40720,30 +57367,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 40726 "mlx/parser.ml" +# 57373 "mlx/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1600 "mlx/parser.mly" +# 1698 "mlx/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 40735 "mlx/parser.ml" +# 57382 "mlx/parser.ml" in let _endpos = _endpos__5_ in let _loc__5_ = (_startpos__5_, _endpos__5_) in -# 2486 "mlx/parser.mly" +# 2632 "mlx/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) ) -# 40747 "mlx/parser.ml" +# 57394 "mlx/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -40751,15 +57398,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40757 "mlx/parser.ml" +# 57404 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 40763 "mlx/parser.ml" +# 57410 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40798,7 +57445,7 @@ module Tables = struct let _2_inlined1 : unit = Obj.magic _2_inlined1 in let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_inlined1_ in @@ -40807,18 +57454,18 @@ module Tables = struct let _3 = let (_endpos__2_, _startpos__1_, _2, _1) = (_endpos__2_inlined1_, _startpos__1_inlined1_, _2_inlined1, _1_inlined1) in let _1 = -# 2491 "mlx/parser.mly" +# 2637 "mlx/parser.mly" (Lident "[]") -# 40813 "mlx/parser.ml" +# 57460 "mlx/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 40822 "mlx/parser.ml" +# 57469 "mlx/parser.ml" in let (_endpos__3_, _startpos__3_) = (_endpos__2_inlined1_, _startpos__1_inlined1_) in @@ -40828,25 +57475,25 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 40834 "mlx/parser.ml" +# 57481 "mlx/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1600 "mlx/parser.mly" +# 1698 "mlx/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 40843 "mlx/parser.ml" +# 57490 "mlx/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2492 "mlx/parser.mly" +# 2638 "mlx/parser.mly" ( Pexp_open(od, mkexp ~loc:_loc__3_ (Pexp_construct(_3, None))) ) -# 40850 "mlx/parser.ml" +# 57497 "mlx/parser.ml" in let _endpos__1_ = _endpos__2_inlined1_ in @@ -40854,15 +57501,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40860 "mlx/parser.ml" +# 57507 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 40866 "mlx/parser.ml" +# 57513 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40908,23 +57555,23 @@ module Tables = struct 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 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.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 _4 = -# 2729 "mlx/parser.mly" +# 2964 "mlx/parser.mly" ( es ) -# 40921 "mlx/parser.ml" +# 57568 "mlx/parser.ml" in let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2495 "mlx/parser.mly" +# 2641 "mlx/parser.mly" ( unclosed "[" _loc__3_ "]" _loc__5_ ) -# 40928 "mlx/parser.ml" +# 57575 "mlx/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -40932,15 +57579,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 40938 "mlx/parser.ml" +# 57585 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 40944 "mlx/parser.ml" +# 57591 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41021,23 +57668,22 @@ module Tables = struct let _4 : unit = Obj.magic _4 in let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__9_ in let _v : (Parsetree.expression) = let _1 = let _1 = - let _8 = + let ptyp = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3488 "mlx/parser.mly" +# 3891 "mlx/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 ) -# 41041 "mlx/parser.ml" + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 57687 "mlx/parser.ml" in let _5 = @@ -41045,15 +57691,15 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 41051 "mlx/parser.ml" +# 57697 "mlx/parser.ml" in -# 3935 "mlx/parser.mly" +# 4350 "mlx/parser.mly" ( _1, _2 ) -# 41057 "mlx/parser.ml" +# 57703 "mlx/parser.ml" in let od = @@ -41062,31 +57708,28 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 41068 "mlx/parser.ml" +# 57714 "mlx/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1600 "mlx/parser.mly" +# 1698 "mlx/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 41077 "mlx/parser.ml" +# 57723 "mlx/parser.ml" in - let _startpos_od_ = _startpos__1_ in let _endpos = _endpos__9_ in - let _symbolstartpos = _startpos_od_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2498 "mlx/parser.mly" +# 2644 "mlx/parser.mly" ( let modexp = mkexp_attrs ~loc:(_startpos__3_, _endpos) - (Pexp_constraint (ghexp ~loc:_sloc (Pexp_pack _6), _8)) _5 in + (Pexp_pack (_6, Some ptyp)) _5 in Pexp_open(od, modexp) ) -# 41090 "mlx/parser.ml" +# 57733 "mlx/parser.ml" in let _endpos__1_ = _endpos__9_ in @@ -41094,15 +57737,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 41100 "mlx/parser.ml" +# 57743 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 41106 "mlx/parser.ml" +# 57749 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41176,7 +57819,7 @@ module Tables = struct let _4 : unit = Obj.magic _4 in let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__8_ in @@ -41187,23 +57830,23 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 41193 "mlx/parser.ml" +# 57836 "mlx/parser.ml" in -# 3935 "mlx/parser.mly" +# 4350 "mlx/parser.mly" ( _1, _2 ) -# 41199 "mlx/parser.ml" +# 57842 "mlx/parser.ml" in let _loc__8_ = (_startpos__8_, _endpos__8_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2504 "mlx/parser.mly" +# 2650 "mlx/parser.mly" ( unclosed "(" _loc__3_ ")" _loc__8_ ) -# 41207 "mlx/parser.ml" +# 57850 "mlx/parser.ml" in let _endpos__1_ = _endpos__8_ in @@ -41211,15 +57854,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 934 "mlx/parser.mly" +# 1011 "mlx/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 41217 "mlx/parser.ml" +# 57860 "mlx/parser.ml" in -# 2396 "mlx/parser.mly" +# 2525 "mlx/parser.mly" ( _1 ) -# 41223 "mlx/parser.ml" +# 57866 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41248,30 +57891,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 41254 "mlx/parser.ml" +# 57897 "mlx/parser.ml" in -# 2812 "mlx/parser.mly" +# 3051 "mlx/parser.mly" ( Ppat_var (_1) ) -# 41260 "mlx/parser.ml" +# 57903 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 41269 "mlx/parser.ml" +# 57912 "mlx/parser.ml" in -# 2813 "mlx/parser.mly" +# 3052 "mlx/parser.mly" ( _1 ) -# 41275 "mlx/parser.ml" +# 57918 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41294,9 +57937,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = -# 2814 "mlx/parser.mly" +# 3053 "mlx/parser.mly" ( _1 ) -# 41300 "mlx/parser.ml" +# 57943 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41336,9 +57979,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2819 "mlx/parser.mly" +# 3058 "mlx/parser.mly" ( reloc_pat ~loc:_sloc _2 ) -# 41342 "mlx/parser.ml" +# 57985 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41361,9 +58004,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = -# 2821 "mlx/parser.mly" +# 3060 "mlx/parser.mly" ( _1 ) -# 41367 "mlx/parser.ml" +# 58010 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41426,9 +58069,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 41432 "mlx/parser.ml" +# 58075 "mlx/parser.ml" in let _3 = @@ -41436,24 +58079,24 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 41442 "mlx/parser.ml" +# 58085 "mlx/parser.ml" in -# 3935 "mlx/parser.mly" +# 4350 "mlx/parser.mly" ( _1, _2 ) -# 41448 "mlx/parser.ml" +# 58091 "mlx/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2823 "mlx/parser.mly" +# 3062 "mlx/parser.mly" ( mkpat_attrs ~loc:_sloc (Ppat_unpack _4) _3 ) -# 41457 "mlx/parser.ml" +# 58100 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41526,15 +58169,24 @@ module Tables = struct let _endpos = _endpos__7_ in let _v : (Parsetree.pattern) = let _6 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined4_, _startpos__1_inlined4_, _1_inlined4) in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3891 "mlx/parser.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 58181 "mlx/parser.ml" + + in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3488 "mlx/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 ) -# 41538 "mlx/parser.ml" +# 3895 "mlx/parser.mly" + ( mktyp ~loc:_sloc (Ptyp_package _1) ) +# 58190 "mlx/parser.ml" in let _4 = @@ -41543,9 +58195,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 41549 "mlx/parser.ml" +# 58201 "mlx/parser.ml" in let (_endpos__4_, _startpos__4_) = (_endpos__1_inlined3_, _startpos__1_inlined3_) in @@ -41554,15 +58206,15 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 41560 "mlx/parser.ml" +# 58212 "mlx/parser.ml" in -# 3935 "mlx/parser.mly" +# 4350 "mlx/parser.mly" ( _1, _2 ) -# 41566 "mlx/parser.ml" +# 58218 "mlx/parser.ml" in let _endpos = _endpos__7_ in @@ -41570,11 +58222,11 @@ module Tables = struct let _loc__4_ = (_startpos__4_, _endpos__4_) in let _sloc = (_symbolstartpos, _endpos) in -# 2825 "mlx/parser.mly" +# 3064 "mlx/parser.mly" ( mkpat_attrs ~loc:_sloc (Ppat_constraint(mkpat ~loc:_loc__4_ (Ppat_unpack _4), _6)) _3 ) -# 41578 "mlx/parser.ml" +# 58230 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41598,23 +58250,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2833 "mlx/parser.mly" +# 3072 "mlx/parser.mly" ( Ppat_any ) -# 41604 "mlx/parser.ml" +# 58256 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 41612 "mlx/parser.ml" +# 58264 "mlx/parser.ml" in -# 2829 "mlx/parser.mly" +# 3068 "mlx/parser.mly" ( _1 ) -# 41618 "mlx/parser.ml" +# 58270 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41638,23 +58290,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2835 "mlx/parser.mly" +# 3074 "mlx/parser.mly" ( Ppat_constant _1 ) -# 41644 "mlx/parser.ml" +# 58296 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 41652 "mlx/parser.ml" +# 58304 "mlx/parser.ml" in -# 2829 "mlx/parser.mly" +# 3068 "mlx/parser.mly" ( _1 ) -# 41658 "mlx/parser.ml" +# 58310 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41692,24 +58344,24 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2837 "mlx/parser.mly" +# 3076 "mlx/parser.mly" ( Ppat_interval (_1, _3) ) -# 41698 "mlx/parser.ml" +# 58350 "mlx/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 41707 "mlx/parser.ml" +# 58359 "mlx/parser.ml" in -# 2829 "mlx/parser.mly" +# 3068 "mlx/parser.mly" ( _1 ) -# 41713 "mlx/parser.ml" +# 58365 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41727,7 +58379,7 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in @@ -41738,30 +58390,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 41744 "mlx/parser.ml" +# 58396 "mlx/parser.ml" in -# 2839 "mlx/parser.mly" +# 3078 "mlx/parser.mly" ( Ppat_construct(_1, None) ) -# 41750 "mlx/parser.ml" +# 58402 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 41759 "mlx/parser.ml" +# 58411 "mlx/parser.ml" in -# 2829 "mlx/parser.mly" +# 3068 "mlx/parser.mly" ( _1 ) -# 41765 "mlx/parser.ml" +# 58417 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41785,23 +58437,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2841 "mlx/parser.mly" +# 3080 "mlx/parser.mly" ( Ppat_variant(_1, None) ) -# 41791 "mlx/parser.ml" +# 58443 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 41799 "mlx/parser.ml" +# 58451 "mlx/parser.ml" in -# 2829 "mlx/parser.mly" +# 3068 "mlx/parser.mly" ( _1 ) -# 41805 "mlx/parser.ml" +# 58457 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41825,7 +58477,7 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _1_inlined1 : (Ppxlib.longident) = Obj.magic _1_inlined1 in + let _1_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -41838,15 +58490,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 41844 "mlx/parser.ml" +# 58496 "mlx/parser.ml" in -# 2843 "mlx/parser.mly" +# 3082 "mlx/parser.mly" ( Ppat_type (_2) ) -# 41850 "mlx/parser.ml" +# 58502 "mlx/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -41854,15 +58506,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 41860 "mlx/parser.ml" +# 58512 "mlx/parser.ml" in -# 2829 "mlx/parser.mly" +# 3068 "mlx/parser.mly" ( _1 ) -# 41866 "mlx/parser.ml" +# 58518 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41894,7 +58546,7 @@ module Tables = struct } = _menhir_stack in let _3 : (Parsetree.pattern) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.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 @@ -41905,15 +58557,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 41911 "mlx/parser.ml" +# 58563 "mlx/parser.ml" in -# 2845 "mlx/parser.mly" +# 3084 "mlx/parser.mly" ( Ppat_open(_1, _3) ) -# 41917 "mlx/parser.ml" +# 58569 "mlx/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -41921,15 +58573,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 41927 "mlx/parser.ml" +# 58579 "mlx/parser.ml" in -# 2829 "mlx/parser.mly" +# 3068 "mlx/parser.mly" ( _1 ) -# 41933 "mlx/parser.ml" +# 58585 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41968,7 +58620,7 @@ module Tables = struct let _2_inlined1 : unit = Obj.magic _2_inlined1 in let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_inlined1_ in @@ -41977,18 +58629,18 @@ module Tables = struct let _3 = let (_endpos__2_, _startpos__1_, _2, _1) = (_endpos__2_inlined1_, _startpos__1_inlined1_, _2_inlined1, _1_inlined1) in let _1 = -# 2846 "mlx/parser.mly" +# 3085 "mlx/parser.mly" (Lident "[]") -# 41983 "mlx/parser.ml" +# 58635 "mlx/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 41992 "mlx/parser.ml" +# 58644 "mlx/parser.ml" in let _endpos__3_ = _endpos__2_inlined1_ in @@ -41997,18 +58649,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 42003 "mlx/parser.ml" +# 58655 "mlx/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2847 "mlx/parser.mly" +# 3086 "mlx/parser.mly" ( Ppat_open(_1, mkpat ~loc:_sloc (Ppat_construct(_3, None))) ) -# 42012 "mlx/parser.ml" +# 58664 "mlx/parser.ml" in let _endpos__1_ = _endpos__2_inlined1_ in @@ -42016,15 +58668,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 42022 "mlx/parser.ml" +# 58674 "mlx/parser.ml" in -# 2829 "mlx/parser.mly" +# 3068 "mlx/parser.mly" ( _1 ) -# 42028 "mlx/parser.ml" +# 58680 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42063,7 +58715,7 @@ module Tables = struct let _2_inlined1 : unit = Obj.magic _2_inlined1 in let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_inlined1_ in @@ -42072,18 +58724,18 @@ module Tables = struct let _3 = let (_endpos__2_, _startpos__1_, _2, _1) = (_endpos__2_inlined1_, _startpos__1_inlined1_, _2_inlined1, _1_inlined1) in let _1 = -# 2848 "mlx/parser.mly" +# 3087 "mlx/parser.mly" (Lident "()") -# 42078 "mlx/parser.ml" +# 58730 "mlx/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 42087 "mlx/parser.ml" +# 58739 "mlx/parser.ml" in let _endpos__3_ = _endpos__2_inlined1_ in @@ -42092,18 +58744,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 42098 "mlx/parser.ml" +# 58750 "mlx/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2849 "mlx/parser.mly" +# 3088 "mlx/parser.mly" ( Ppat_open(_1, mkpat ~loc:_sloc (Ppat_construct(_3, None))) ) -# 42107 "mlx/parser.ml" +# 58759 "mlx/parser.ml" in let _endpos__1_ = _endpos__2_inlined1_ in @@ -42111,15 +58763,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 42117 "mlx/parser.ml" +# 58769 "mlx/parser.ml" in -# 2829 "mlx/parser.mly" +# 3068 "mlx/parser.mly" ( _1 ) -# 42123 "mlx/parser.ml" +# 58775 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42165,7 +58817,7 @@ module Tables = struct let _4 : (Parsetree.pattern) = Obj.magic _4 in let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.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 @@ -42176,15 +58828,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 42182 "mlx/parser.ml" +# 58834 "mlx/parser.ml" in -# 2851 "mlx/parser.mly" +# 3090 "mlx/parser.mly" ( Ppat_open (_1, _4) ) -# 42188 "mlx/parser.ml" +# 58840 "mlx/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -42192,15 +58844,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 42198 "mlx/parser.ml" +# 58850 "mlx/parser.ml" in -# 2829 "mlx/parser.mly" +# 3068 "mlx/parser.mly" ( _1 ) -# 42204 "mlx/parser.ml" +# 58856 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42246,7 +58898,7 @@ module Tables = struct let _4 : (Parsetree.pattern) = Obj.magic _4 in let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.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 @@ -42255,9 +58907,9 @@ module Tables = struct let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2853 "mlx/parser.mly" +# 3092 "mlx/parser.mly" ( unclosed "(" _loc__3_ ")" _loc__5_ ) -# 42261 "mlx/parser.ml" +# 58913 "mlx/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -42265,15 +58917,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 42271 "mlx/parser.ml" +# 58923 "mlx/parser.ml" in -# 2829 "mlx/parser.mly" +# 3068 "mlx/parser.mly" ( _1 ) -# 42277 "mlx/parser.ml" +# 58929 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42312,7 +58964,7 @@ module Tables = struct let _4 : unit = Obj.magic _4 in let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.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 @@ -42320,9 +58972,9 @@ module Tables = struct let _1 = let _loc__4_ = (_startpos__4_, _endpos__4_) in -# 2855 "mlx/parser.mly" +# 3094 "mlx/parser.mly" ( expecting _loc__4_ "pattern" ) -# 42326 "mlx/parser.ml" +# 58978 "mlx/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -42330,15 +58982,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 42336 "mlx/parser.ml" +# 58988 "mlx/parser.ml" in -# 2829 "mlx/parser.mly" +# 3068 "mlx/parser.mly" ( _1 ) -# 42342 "mlx/parser.ml" +# 58994 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42379,9 +59031,9 @@ module Tables = struct let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2857 "mlx/parser.mly" +# 3096 "mlx/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 42385 "mlx/parser.ml" +# 59037 "mlx/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -42389,15 +59041,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 42395 "mlx/parser.ml" +# 59047 "mlx/parser.ml" in -# 2829 "mlx/parser.mly" +# 3068 "mlx/parser.mly" ( _1 ) -# 42401 "mlx/parser.ml" +# 59053 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42449,24 +59101,24 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2859 "mlx/parser.mly" +# 3098 "mlx/parser.mly" ( Ppat_constraint(_2, _4) ) -# 42455 "mlx/parser.ml" +# 59107 "mlx/parser.ml" in let _endpos__1_ = _endpos__5_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 42464 "mlx/parser.ml" +# 59116 "mlx/parser.ml" in -# 2829 "mlx/parser.mly" +# 3068 "mlx/parser.mly" ( _1 ) -# 42470 "mlx/parser.ml" +# 59122 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42521,9 +59173,9 @@ module Tables = struct let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2861 "mlx/parser.mly" +# 3100 "mlx/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__5_ ) -# 42527 "mlx/parser.ml" +# 59179 "mlx/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -42531,15 +59183,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 42537 "mlx/parser.ml" +# 59189 "mlx/parser.ml" in -# 2829 "mlx/parser.mly" +# 3068 "mlx/parser.mly" ( _1 ) -# 42543 "mlx/parser.ml" +# 59195 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42586,9 +59238,9 @@ module Tables = struct let _1 = let _loc__4_ = (_startpos__4_, _endpos__4_) in -# 2863 "mlx/parser.mly" +# 3102 "mlx/parser.mly" ( expecting _loc__4_ "type" ) -# 42592 "mlx/parser.ml" +# 59244 "mlx/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -42596,15 +59248,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 42602 "mlx/parser.ml" +# 59254 "mlx/parser.ml" in -# 2829 "mlx/parser.mly" +# 3068 "mlx/parser.mly" ( _1 ) -# 42608 "mlx/parser.ml" +# 59260 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42679,15 +59331,24 @@ module Tables = struct let _1 = let _6 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3891 "mlx/parser.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 59343 "mlx/parser.ml" + + in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3488 "mlx/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 ) -# 42691 "mlx/parser.ml" +# 3895 "mlx/parser.mly" + ( mktyp ~loc:_sloc (Ptyp_package _1) ) +# 59352 "mlx/parser.ml" in let _3 = @@ -42695,23 +59356,23 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 42701 "mlx/parser.ml" +# 59362 "mlx/parser.ml" in -# 3935 "mlx/parser.mly" +# 4350 "mlx/parser.mly" ( _1, _2 ) -# 42707 "mlx/parser.ml" +# 59368 "mlx/parser.ml" in let _loc__7_ = (_startpos__7_, _endpos__7_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2866 "mlx/parser.mly" +# 3105 "mlx/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__7_ ) -# 42715 "mlx/parser.ml" +# 59376 "mlx/parser.ml" in let _endpos__1_ = _endpos__7_ in @@ -42719,15 +59380,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 42725 "mlx/parser.ml" +# 59386 "mlx/parser.ml" in -# 2829 "mlx/parser.mly" +# 3068 "mlx/parser.mly" ( _1 ) -# 42731 "mlx/parser.ml" +# 59392 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42751,23 +59412,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2868 "mlx/parser.mly" +# 3107 "mlx/parser.mly" ( Ppat_extension _1 ) -# 42757 "mlx/parser.ml" +# 59418 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 936 "mlx/parser.mly" +# 1013 "mlx/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 42765 "mlx/parser.ml" +# 59426 "mlx/parser.ml" in -# 2829 "mlx/parser.mly" +# 3068 "mlx/parser.mly" ( _1 ) -# 42771 "mlx/parser.ml" +# 59432 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42786,17 +59447,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 714 "mlx/parser.mly" +# 786 "mlx/parser.mly" (string) -# 42792 "mlx/parser.ml" +# 59453 "mlx/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) = -# 3843 "mlx/parser.mly" +# 4257 "mlx/parser.mly" ( _1 ) -# 42800 "mlx/parser.ml" +# 59461 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42815,17 +59476,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 767 "mlx/parser.mly" +# 839 "mlx/parser.mly" (string) -# 42821 "mlx/parser.ml" +# 59482 "mlx/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) = -# 3844 "mlx/parser.mly" +# 4258 "mlx/parser.mly" ( _1 ) -# 42829 "mlx/parser.ml" +# 59490 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42848,9 +59509,34 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3845 "mlx/parser.mly" +# 4259 "mlx/parser.mly" ( "and" ) -# 42854 "mlx/parser.ml" +# 59515 "mlx/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 : unit = 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) = +# 4260 "mlx/parser.mly" + ( "as" ) +# 59540 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42873,9 +59559,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3846 "mlx/parser.mly" - ( "as" ) -# 42879 "mlx/parser.ml" +# 4261 "mlx/parser.mly" + ( "assert" ) +# 59565 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42898,9 +59584,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3847 "mlx/parser.mly" - ( "assert" ) -# 42904 "mlx/parser.ml" +# 4262 "mlx/parser.mly" + ( "begin" ) +# 59590 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42923,9 +59609,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3848 "mlx/parser.mly" - ( "begin" ) -# 42929 "mlx/parser.ml" +# 4263 "mlx/parser.mly" + ( "class" ) +# 59615 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42948,9 +59634,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3849 "mlx/parser.mly" - ( "class" ) -# 42954 "mlx/parser.ml" +# 4264 "mlx/parser.mly" + ( "constraint" ) +# 59640 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42973,9 +59659,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3850 "mlx/parser.mly" - ( "constraint" ) -# 42979 "mlx/parser.ml" +# 4265 "mlx/parser.mly" + ( "do" ) +# 59665 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42998,9 +59684,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3851 "mlx/parser.mly" - ( "do" ) -# 43004 "mlx/parser.ml" +# 4266 "mlx/parser.mly" + ( "done" ) +# 59690 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43023,9 +59709,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3852 "mlx/parser.mly" - ( "done" ) -# 43029 "mlx/parser.ml" +# 4267 "mlx/parser.mly" + ( "downto" ) +# 59715 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43048,9 +59734,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3853 "mlx/parser.mly" - ( "downto" ) -# 43054 "mlx/parser.ml" +# 4268 "mlx/parser.mly" + ( "effect" ) +# 59740 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43073,9 +59759,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3854 "mlx/parser.mly" +# 4269 "mlx/parser.mly" ( "else" ) -# 43079 "mlx/parser.ml" +# 59765 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43098,9 +59784,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3855 "mlx/parser.mly" +# 4270 "mlx/parser.mly" ( "end" ) -# 43104 "mlx/parser.ml" +# 59790 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43123,9 +59809,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3856 "mlx/parser.mly" +# 4271 "mlx/parser.mly" ( "exception" ) -# 43129 "mlx/parser.ml" +# 59815 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43148,9 +59834,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3857 "mlx/parser.mly" +# 4272 "mlx/parser.mly" ( "external" ) -# 43154 "mlx/parser.ml" +# 59840 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43173,9 +59859,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3858 "mlx/parser.mly" +# 4273 "mlx/parser.mly" ( "false" ) -# 43179 "mlx/parser.ml" +# 59865 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43198,9 +59884,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3859 "mlx/parser.mly" +# 4274 "mlx/parser.mly" ( "for" ) -# 43204 "mlx/parser.ml" +# 59890 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43223,9 +59909,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3860 "mlx/parser.mly" +# 4275 "mlx/parser.mly" ( "fun" ) -# 43229 "mlx/parser.ml" +# 59915 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43248,9 +59934,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3861 "mlx/parser.mly" +# 4276 "mlx/parser.mly" ( "function" ) -# 43254 "mlx/parser.ml" +# 59940 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43273,9 +59959,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3862 "mlx/parser.mly" +# 4277 "mlx/parser.mly" ( "functor" ) -# 43279 "mlx/parser.ml" +# 59965 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43298,9 +59984,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3863 "mlx/parser.mly" +# 4278 "mlx/parser.mly" ( "if" ) -# 43304 "mlx/parser.ml" +# 59990 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43323,9 +60009,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3864 "mlx/parser.mly" +# 4279 "mlx/parser.mly" ( "in" ) -# 43329 "mlx/parser.ml" +# 60015 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43348,9 +60034,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3865 "mlx/parser.mly" +# 4280 "mlx/parser.mly" ( "include" ) -# 43354 "mlx/parser.ml" +# 60040 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43373,9 +60059,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3866 "mlx/parser.mly" +# 4281 "mlx/parser.mly" ( "inherit" ) -# 43379 "mlx/parser.ml" +# 60065 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43398,9 +60084,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3867 "mlx/parser.mly" +# 4282 "mlx/parser.mly" ( "initializer" ) -# 43404 "mlx/parser.ml" +# 60090 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43423,9 +60109,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3868 "mlx/parser.mly" +# 4283 "mlx/parser.mly" ( "lazy" ) -# 43429 "mlx/parser.ml" +# 60115 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43448,9 +60134,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3869 "mlx/parser.mly" +# 4284 "mlx/parser.mly" ( "let" ) -# 43454 "mlx/parser.ml" +# 60140 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43473,9 +60159,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3870 "mlx/parser.mly" +# 4285 "mlx/parser.mly" ( "match" ) -# 43479 "mlx/parser.ml" +# 60165 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43498,9 +60184,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3871 "mlx/parser.mly" +# 4286 "mlx/parser.mly" ( "method" ) -# 43504 "mlx/parser.ml" +# 60190 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43523,9 +60209,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3872 "mlx/parser.mly" +# 4287 "mlx/parser.mly" ( "module" ) -# 43529 "mlx/parser.ml" +# 60215 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43548,9 +60234,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3873 "mlx/parser.mly" +# 4288 "mlx/parser.mly" ( "mutable" ) -# 43554 "mlx/parser.ml" +# 60240 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43573,9 +60259,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3874 "mlx/parser.mly" +# 4289 "mlx/parser.mly" ( "new" ) -# 43579 "mlx/parser.ml" +# 60265 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43598,9 +60284,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3875 "mlx/parser.mly" +# 4290 "mlx/parser.mly" ( "nonrec" ) -# 43604 "mlx/parser.ml" +# 60290 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43623,9 +60309,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3876 "mlx/parser.mly" +# 4291 "mlx/parser.mly" ( "object" ) -# 43629 "mlx/parser.ml" +# 60315 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43648,9 +60334,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3877 "mlx/parser.mly" +# 4292 "mlx/parser.mly" ( "of" ) -# 43654 "mlx/parser.ml" +# 60340 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43673,9 +60359,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3878 "mlx/parser.mly" +# 4293 "mlx/parser.mly" ( "open" ) -# 43679 "mlx/parser.ml" +# 60365 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43698,9 +60384,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3879 "mlx/parser.mly" +# 4294 "mlx/parser.mly" ( "or" ) -# 43704 "mlx/parser.ml" +# 60390 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43723,9 +60409,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3880 "mlx/parser.mly" +# 4295 "mlx/parser.mly" ( "private" ) -# 43729 "mlx/parser.ml" +# 60415 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43748,9 +60434,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3881 "mlx/parser.mly" +# 4296 "mlx/parser.mly" ( "rec" ) -# 43754 "mlx/parser.ml" +# 60440 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43773,9 +60459,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3882 "mlx/parser.mly" +# 4297 "mlx/parser.mly" ( "sig" ) -# 43779 "mlx/parser.ml" +# 60465 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43798,9 +60484,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3883 "mlx/parser.mly" +# 4298 "mlx/parser.mly" ( "struct" ) -# 43804 "mlx/parser.ml" +# 60490 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43823,9 +60509,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3884 "mlx/parser.mly" +# 4299 "mlx/parser.mly" ( "then" ) -# 43829 "mlx/parser.ml" +# 60515 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43848,9 +60534,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3885 "mlx/parser.mly" +# 4300 "mlx/parser.mly" ( "to" ) -# 43854 "mlx/parser.ml" +# 60540 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43873,9 +60559,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3886 "mlx/parser.mly" +# 4301 "mlx/parser.mly" ( "true" ) -# 43879 "mlx/parser.ml" +# 60565 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43898,9 +60584,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3887 "mlx/parser.mly" +# 4302 "mlx/parser.mly" ( "try" ) -# 43904 "mlx/parser.ml" +# 60590 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43923,9 +60609,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3888 "mlx/parser.mly" +# 4303 "mlx/parser.mly" ( "type" ) -# 43929 "mlx/parser.ml" +# 60615 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43948,9 +60634,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3889 "mlx/parser.mly" +# 4304 "mlx/parser.mly" ( "val" ) -# 43954 "mlx/parser.ml" +# 60640 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43973,9 +60659,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3890 "mlx/parser.mly" +# 4305 "mlx/parser.mly" ( "virtual" ) -# 43979 "mlx/parser.ml" +# 60665 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43998,9 +60684,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3891 "mlx/parser.mly" +# 4306 "mlx/parser.mly" ( "when" ) -# 44004 "mlx/parser.ml" +# 60690 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44023,9 +60709,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3892 "mlx/parser.mly" +# 4307 "mlx/parser.mly" ( "while" ) -# 44029 "mlx/parser.ml" +# 60715 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44048,9 +60734,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3893 "mlx/parser.mly" +# 4308 "mlx/parser.mly" ( "with" ) -# 44054 "mlx/parser.ml" +# 60740 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44073,9 +60759,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.type_exception * string Ppxlib.loc option) = -# 3147 "mlx/parser.mly" +# 3448 "mlx/parser.mly" ( _1 ) -# 44079 "mlx/parser.ml" +# 60765 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44137,7 +60823,7 @@ module Tables = struct } = _menhir_stack in let _1_inlined5 : (Parsetree.attributes) = Obj.magic _1_inlined5 in let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in - let _1_inlined3 : (Ppxlib.longident) = Obj.magic _1_inlined3 in + let _1_inlined3 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined3 in let _5 : unit = Obj.magic _5 in let _1_inlined2 : (string) = Obj.magic _1_inlined2 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -44149,18 +60835,18 @@ module Tables = struct let _v : (Parsetree.type_exception * string Ppxlib.loc option) = let attrs = let _1 = _1_inlined5 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 44155 "mlx/parser.ml" +# 60841 "mlx/parser.ml" in let _endpos_attrs_ = _endpos__1_inlined5_ in let attrs2 = let _1 = _1_inlined4 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 44164 "mlx/parser.ml" +# 60850 "mlx/parser.ml" in let lid = @@ -44169,9 +60855,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 44175 "mlx/parser.ml" +# 60861 "mlx/parser.ml" in let id = @@ -44180,30 +60866,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 44186 "mlx/parser.ml" +# 60872 "mlx/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 44194 "mlx/parser.ml" +# 60880 "mlx/parser.ml" in let _endpos = _endpos_attrs_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3156 "mlx/parser.mly" +# 3457 "mlx/parser.mly" ( let loc = make_loc _sloc in let docs = symbol_docs _sloc in - Te.mk_exception ~attrs + Te.mk_exception ~attrs ~loc (Te.rebind id lid ~attrs:(attrs1 @ attrs2) ~loc ~docs) , ext ) -# 44207 "mlx/parser.ml" +# 60893 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44233,9 +60919,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = -# 2654 "mlx/parser.mly" +# 2793 "mlx/parser.mly" ( _2 ) -# 44239 "mlx/parser.ml" +# 60925 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44248,90 +60934,44 @@ module Tables = struct 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 : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = 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 _endpos = _endpos__2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2656 "mlx/parser.mly" - ( let (l, o, p) = _1 in ghexp ~loc:_sloc (Pexp_fun(l, o, p, _2)) ) -# 44274 "mlx/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.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 = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + 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 = _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 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let xs : (string Ppxlib.loc list) = Obj.magic xs in - let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _4 : (Parsetree.function_body) = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in + let _2 : (Parsetree.type_constraint option) = Obj.magic _2 in + let _1 : (Parsetree.function_param list) = 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 _3 = -# 2549 "mlx/parser.mly" - ( xs ) -# 44327 "mlx/parser.ml" - in - let _endpos = _endpos__5_ in + let _endpos = _endpos__4_ in + let _v : (Parsetree.expression) = let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2658 "mlx/parser.mly" - ( mk_newtypes ~loc:_sloc _3 _5 ) -# 44335 "mlx/parser.ml" +# 2795 "mlx/parser.mly" + ( ghexp ~loc:_sloc (mkfunction _1 _2 _4) + ) +# 60975 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44358,39 +60998,39 @@ module Tables = struct let ys = # 260 "" ( List.flatten xss ) -# 44362 "mlx/parser.ml" +# 61002 "mlx/parser.ml" in let xs = let items = -# 971 "mlx/parser.mly" +# 1048 "mlx/parser.mly" ( [] ) -# 44368 "mlx/parser.ml" +# 61008 "mlx/parser.ml" in -# 1401 "mlx/parser.mly" +# 1499 "mlx/parser.mly" ( items ) -# 44373 "mlx/parser.ml" +# 61013 "mlx/parser.ml" in # 267 "" ( xs @ ys ) -# 44379 "mlx/parser.ml" +# 61019 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 893 "mlx/parser.mly" +# 970 "mlx/parser.mly" ( extra_str _startpos _endpos _1 ) -# 44388 "mlx/parser.ml" +# 61028 "mlx/parser.ml" in -# 1394 "mlx/parser.mly" +# 1492 "mlx/parser.mly" ( _1 ) -# 44394 "mlx/parser.ml" +# 61034 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44431,7 +61071,7 @@ module Tables = struct let ys = # 260 "" ( List.flatten xss ) -# 44435 "mlx/parser.ml" +# 61075 "mlx/parser.ml" in let xs = let items = @@ -44439,65 +61079,65 @@ module Tables = struct let _1 = let _1 = let attrs = -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 44445 "mlx/parser.ml" +# 61085 "mlx/parser.ml" in -# 1408 "mlx/parser.mly" +# 1506 "mlx/parser.mly" ( mkstrexp e attrs ) -# 44450 "mlx/parser.ml" +# 61090 "mlx/parser.ml" in let _startpos__1_ = _startpos_e_ in let _startpos = _startpos__1_ in -# 905 "mlx/parser.mly" +# 982 "mlx/parser.mly" ( text_str _startpos @ [_1] ) -# 44458 "mlx/parser.ml" +# 61098 "mlx/parser.ml" in let _startpos__1_ = _startpos_e_ in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 924 "mlx/parser.mly" +# 1001 "mlx/parser.mly" ( mark_rhs_docs _startpos _endpos; _1 ) -# 44468 "mlx/parser.ml" +# 61108 "mlx/parser.ml" in -# 973 "mlx/parser.mly" +# 1050 "mlx/parser.mly" ( x ) -# 44474 "mlx/parser.ml" +# 61114 "mlx/parser.ml" in -# 1401 "mlx/parser.mly" +# 1499 "mlx/parser.mly" ( items ) -# 44480 "mlx/parser.ml" +# 61120 "mlx/parser.ml" in # 267 "" ( xs @ ys ) -# 44486 "mlx/parser.ml" +# 61126 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_e_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 893 "mlx/parser.mly" +# 970 "mlx/parser.mly" ( extra_str _startpos _endpos _1 ) -# 44495 "mlx/parser.ml" +# 61135 "mlx/parser.ml" in -# 1394 "mlx/parser.mly" +# 1492 "mlx/parser.mly" ( _1 ) -# 44501 "mlx/parser.ml" +# 61141 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44523,9 +61163,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1423 "mlx/parser.mly" +# 1521 "mlx/parser.mly" ( val_of_let_bindings ~loc:_sloc _1 ) -# 44529 "mlx/parser.ml" +# 61169 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44559,9 +61199,9 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 44565 "mlx/parser.ml" +# 61205 "mlx/parser.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -44569,10 +61209,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1426 "mlx/parser.mly" +# 1524 "mlx/parser.mly" ( let docs = symbol_docs _sloc in Pstr_extension (_1, add_docs_attrs docs _2) ) -# 44576 "mlx/parser.ml" +# 61216 "mlx/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -44580,15 +61220,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 940 "mlx/parser.mly" +# 1017 "mlx/parser.mly" ( mkstr ~loc:_sloc _1 ) -# 44586 "mlx/parser.ml" +# 61226 "mlx/parser.ml" in -# 1457 "mlx/parser.mly" +# 1555 "mlx/parser.mly" ( _1 ) -# 44592 "mlx/parser.ml" +# 61232 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44612,23 +61252,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1429 "mlx/parser.mly" +# 1527 "mlx/parser.mly" ( Pstr_attribute _1 ) -# 44618 "mlx/parser.ml" +# 61258 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 940 "mlx/parser.mly" +# 1017 "mlx/parser.mly" ( mkstr ~loc:_sloc _1 ) -# 44626 "mlx/parser.ml" +# 61266 "mlx/parser.ml" in -# 1457 "mlx/parser.mly" +# 1555 "mlx/parser.mly" ( _1 ) -# 44632 "mlx/parser.ml" +# 61272 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44652,23 +61292,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1433 "mlx/parser.mly" +# 1531 "mlx/parser.mly" ( pstr_primitive _1 ) -# 44658 "mlx/parser.ml" +# 61298 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 957 "mlx/parser.mly" +# 1034 "mlx/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 44666 "mlx/parser.ml" +# 61306 "mlx/parser.ml" in -# 1457 "mlx/parser.mly" +# 1555 "mlx/parser.mly" ( _1 ) -# 44672 "mlx/parser.ml" +# 61312 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44692,23 +61332,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1435 "mlx/parser.mly" +# 1533 "mlx/parser.mly" ( pstr_primitive _1 ) -# 44698 "mlx/parser.ml" +# 61338 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 957 "mlx/parser.mly" +# 1034 "mlx/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 44706 "mlx/parser.ml" +# 61346 "mlx/parser.ml" in -# 1457 "mlx/parser.mly" +# 1555 "mlx/parser.mly" ( _1 ) -# 44712 "mlx/parser.ml" +# 61352 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44742,26 +61382,26 @@ module Tables = struct let _1 = let _1 = let _1 = -# 1132 "mlx/parser.mly" +# 1230 "mlx/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 44748 "mlx/parser.ml" +# 61388 "mlx/parser.ml" in -# 2991 "mlx/parser.mly" +# 3286 "mlx/parser.mly" ( _1 ) -# 44753 "mlx/parser.ml" +# 61393 "mlx/parser.ml" in -# 2974 "mlx/parser.mly" +# 3269 "mlx/parser.mly" ( _1 ) -# 44759 "mlx/parser.ml" +# 61399 "mlx/parser.ml" in -# 1437 "mlx/parser.mly" +# 1535 "mlx/parser.mly" ( pstr_type _1 ) -# 44765 "mlx/parser.ml" +# 61405 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_bs_, _startpos_a_) in @@ -44769,15 +61409,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 957 "mlx/parser.mly" +# 1034 "mlx/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 44775 "mlx/parser.ml" +# 61415 "mlx/parser.ml" in -# 1457 "mlx/parser.mly" +# 1555 "mlx/parser.mly" ( _1 ) -# 44781 "mlx/parser.ml" +# 61421 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44847,7 +61487,7 @@ module Tables = struct let xs : (Parsetree.extension_constructor list) = Obj.magic xs in let priv : (Asttypes.private_flag) = Obj.magic priv in let _7 : unit = Obj.magic _7 in - let _1_inlined2 : (Ppxlib.longident) = Obj.magic _1_inlined2 in + let _1_inlined2 : (Mlx_shim.Longident.t) = 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 let ext : (string Ppxlib.loc option) = Obj.magic ext in @@ -44862,16 +61502,16 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 44868 "mlx/parser.ml" +# 61508 "mlx/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in let cs = -# 1124 "mlx/parser.mly" +# 1222 "mlx/parser.mly" ( List.rev xs ) -# 44875 "mlx/parser.ml" +# 61515 "mlx/parser.ml" in let tid = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in @@ -44879,46 +61519,47 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 44885 "mlx/parser.ml" +# 61525 "mlx/parser.ml" in let _4 = -# 3763 "mlx/parser.mly" +# 4177 "mlx/parser.mly" ( Recursive ) -# 44891 "mlx/parser.ml" +# 61531 "mlx/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 44898 "mlx/parser.ml" +# 61538 "mlx/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3244 "mlx/parser.mly" +# 3545 "mlx/parser.mly" ( let docs = symbol_docs _sloc in let attrs = attrs1 @ attrs2 in - Te.mk tid cs ~params ~priv ~attrs ~docs, + let loc = make_loc _sloc in + Te.mk tid cs ~params ~priv ~attrs ~docs ~loc, ext ) -# 44910 "mlx/parser.ml" +# 61551 "mlx/parser.ml" in -# 3227 "mlx/parser.mly" +# 3528 "mlx/parser.mly" ( _1 ) -# 44916 "mlx/parser.ml" +# 61557 "mlx/parser.ml" in -# 1439 "mlx/parser.mly" +# 1537 "mlx/parser.mly" ( pstr_typext _1 ) -# 44922 "mlx/parser.ml" +# 61563 "mlx/parser.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -44926,15 +61567,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 957 "mlx/parser.mly" +# 1034 "mlx/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 44932 "mlx/parser.ml" +# 61573 "mlx/parser.ml" in -# 1457 "mlx/parser.mly" +# 1555 "mlx/parser.mly" ( _1 ) -# 44938 "mlx/parser.ml" +# 61579 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45010,7 +61651,7 @@ module Tables = struct let xs : (Parsetree.extension_constructor list) = Obj.magic xs in let priv : (Asttypes.private_flag) = Obj.magic priv in let _7 : unit = Obj.magic _7 in - let _1_inlined3 : (Ppxlib.longident) = Obj.magic _1_inlined3 in + let _1_inlined3 : (Mlx_shim.Longident.t) = 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 let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -45026,16 +61667,16 @@ module Tables = struct let attrs2 = let _1 = _1_inlined4 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 45032 "mlx/parser.ml" +# 61673 "mlx/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in let cs = -# 1124 "mlx/parser.mly" +# 1222 "mlx/parser.mly" ( List.rev xs ) -# 45039 "mlx/parser.ml" +# 61680 "mlx/parser.ml" in let tid = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in @@ -45043,9 +61684,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 45049 "mlx/parser.ml" +# 61690 "mlx/parser.ml" in let _4 = @@ -45054,41 +61695,42 @@ module Tables = struct let _startpos = _startpos__1_ in let _loc = (_startpos, _endpos) in -# 3765 "mlx/parser.mly" +# 4179 "mlx/parser.mly" ( not_expecting _loc "nonrec flag" ) -# 45060 "mlx/parser.ml" +# 61701 "mlx/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 45068 "mlx/parser.ml" +# 61709 "mlx/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3244 "mlx/parser.mly" +# 3545 "mlx/parser.mly" ( let docs = symbol_docs _sloc in let attrs = attrs1 @ attrs2 in - Te.mk tid cs ~params ~priv ~attrs ~docs, + let loc = make_loc _sloc in + Te.mk tid cs ~params ~priv ~attrs ~docs ~loc, ext ) -# 45080 "mlx/parser.ml" +# 61722 "mlx/parser.ml" in -# 3227 "mlx/parser.mly" +# 3528 "mlx/parser.mly" ( _1 ) -# 45086 "mlx/parser.ml" +# 61728 "mlx/parser.ml" in -# 1439 "mlx/parser.mly" +# 1537 "mlx/parser.mly" ( pstr_typext _1 ) -# 45092 "mlx/parser.ml" +# 61734 "mlx/parser.ml" in let _endpos__1_ = _endpos__1_inlined4_ in @@ -45096,15 +61738,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 957 "mlx/parser.mly" +# 1034 "mlx/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 45102 "mlx/parser.ml" +# 61744 "mlx/parser.ml" in -# 1457 "mlx/parser.mly" +# 1555 "mlx/parser.mly" ( _1 ) -# 45108 "mlx/parser.ml" +# 61750 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45128,23 +61770,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1441 "mlx/parser.mly" +# 1539 "mlx/parser.mly" ( pstr_exception _1 ) -# 45134 "mlx/parser.ml" +# 61776 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 957 "mlx/parser.mly" +# 1034 "mlx/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 45142 "mlx/parser.ml" +# 61784 "mlx/parser.ml" in -# 1457 "mlx/parser.mly" +# 1555 "mlx/parser.mly" ( _1 ) -# 45148 "mlx/parser.ml" +# 61790 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45207,9 +61849,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 45213 "mlx/parser.ml" +# 61855 "mlx/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -45219,36 +61861,36 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 45225 "mlx/parser.ml" +# 61867 "mlx/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 45233 "mlx/parser.ml" +# 61875 "mlx/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1467 "mlx/parser.mly" +# 1565 "mlx/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 ) -# 45246 "mlx/parser.ml" +# 61888 "mlx/parser.ml" in -# 1443 "mlx/parser.mly" +# 1541 "mlx/parser.mly" ( _1 ) -# 45252 "mlx/parser.ml" +# 61894 "mlx/parser.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -45256,15 +61898,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 957 "mlx/parser.mly" +# 1034 "mlx/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 45262 "mlx/parser.ml" +# 61904 "mlx/parser.ml" in -# 1457 "mlx/parser.mly" +# 1555 "mlx/parser.mly" ( _1 ) -# 45268 "mlx/parser.ml" +# 61910 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45343,9 +61985,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 45349 "mlx/parser.ml" +# 61991 "mlx/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -45355,24 +61997,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 45361 "mlx/parser.ml" +# 62003 "mlx/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 45369 "mlx/parser.ml" +# 62011 "mlx/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1504 "mlx/parser.mly" +# 1602 "mlx/parser.mly" ( let loc = make_loc _sloc in let attrs = attrs1 @ attrs2 in @@ -45380,25 +62022,25 @@ module Tables = struct ext, Mb.mk name body ~attrs ~loc ~docs ) -# 45384 "mlx/parser.ml" +# 62026 "mlx/parser.ml" in -# 1132 "mlx/parser.mly" +# 1230 "mlx/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 45390 "mlx/parser.ml" +# 62032 "mlx/parser.ml" in -# 1492 "mlx/parser.mly" +# 1590 "mlx/parser.mly" ( _1 ) -# 45396 "mlx/parser.ml" +# 62038 "mlx/parser.ml" in -# 1445 "mlx/parser.mly" +# 1543 "mlx/parser.mly" ( pstr_recmodule _1 ) -# 45402 "mlx/parser.ml" +# 62044 "mlx/parser.ml" in let _endpos__1_ = _endpos_bs_ in @@ -45406,15 +62048,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 957 "mlx/parser.mly" +# 1034 "mlx/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 45412 "mlx/parser.ml" +# 62054 "mlx/parser.ml" in -# 1457 "mlx/parser.mly" +# 1555 "mlx/parser.mly" ( _1 ) -# 45418 "mlx/parser.ml" +# 62060 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45438,23 +62080,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1447 "mlx/parser.mly" +# 1545 "mlx/parser.mly" ( let (body, ext) = _1 in (Pstr_modtype body, ext) ) -# 45444 "mlx/parser.ml" +# 62086 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 957 "mlx/parser.mly" +# 1034 "mlx/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 45452 "mlx/parser.ml" +# 62094 "mlx/parser.ml" in -# 1457 "mlx/parser.mly" +# 1555 "mlx/parser.mly" ( _1 ) -# 45458 "mlx/parser.ml" +# 62100 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45478,23 +62120,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1449 "mlx/parser.mly" +# 1547 "mlx/parser.mly" ( let (body, ext) = _1 in (Pstr_open body, ext) ) -# 45484 "mlx/parser.ml" +# 62126 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 957 "mlx/parser.mly" +# 1034 "mlx/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 45492 "mlx/parser.ml" +# 62134 "mlx/parser.ml" in -# 1457 "mlx/parser.mly" +# 1555 "mlx/parser.mly" ( _1 ) -# 45498 "mlx/parser.ml" +# 62140 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45564,9 +62206,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 : ( -# 714 "mlx/parser.mly" +# 786 "mlx/parser.mly" (string) -# 45570 "mlx/parser.ml" +# 62212 "mlx/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 @@ -45584,9 +62226,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 45590 "mlx/parser.ml" +# 62232 "mlx/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -45596,24 +62238,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 45602 "mlx/parser.ml" +# 62244 "mlx/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 45610 "mlx/parser.ml" +# 62252 "mlx/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1848 "mlx/parser.mly" +# 1944 "mlx/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -45621,25 +62263,25 @@ module Tables = struct ext, Ci.mk id body ~virt ~params ~attrs ~loc ~docs ) -# 45625 "mlx/parser.ml" +# 62267 "mlx/parser.ml" in -# 1132 "mlx/parser.mly" +# 1230 "mlx/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 45631 "mlx/parser.ml" +# 62273 "mlx/parser.ml" in -# 1837 "mlx/parser.mly" +# 1933 "mlx/parser.mly" ( _1 ) -# 45637 "mlx/parser.ml" +# 62279 "mlx/parser.ml" in -# 1451 "mlx/parser.mly" +# 1549 "mlx/parser.mly" ( let (ext, l) = _1 in (Pstr_class l, ext) ) -# 45643 "mlx/parser.ml" +# 62285 "mlx/parser.ml" in let _endpos__1_ = _endpos_bs_ in @@ -45647,15 +62289,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 957 "mlx/parser.mly" +# 1034 "mlx/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 45653 "mlx/parser.ml" +# 62295 "mlx/parser.ml" in -# 1457 "mlx/parser.mly" +# 1555 "mlx/parser.mly" ( _1 ) -# 45659 "mlx/parser.ml" +# 62301 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45679,23 +62321,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1453 "mlx/parser.mly" +# 1551 "mlx/parser.mly" ( let (ext, l) = _1 in (Pstr_class_type l, ext) ) -# 45685 "mlx/parser.ml" +# 62327 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 957 "mlx/parser.mly" +# 1034 "mlx/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 45693 "mlx/parser.ml" +# 62335 "mlx/parser.ml" in -# 1457 "mlx/parser.mly" +# 1555 "mlx/parser.mly" ( _1 ) -# 45699 "mlx/parser.ml" +# 62341 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45751,38 +62393,38 @@ module Tables = struct let attrs2 = let _1 = _1_inlined2 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 45757 "mlx/parser.ml" +# 62399 "mlx/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined2_ in let attrs1 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 45766 "mlx/parser.ml" +# 62408 "mlx/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1541 "mlx/parser.mly" +# 1639 "mlx/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Incl.mk thing ~attrs ~loc ~docs, ext ) -# 45780 "mlx/parser.ml" +# 62422 "mlx/parser.ml" in -# 1455 "mlx/parser.mly" +# 1553 "mlx/parser.mly" ( pstr_include _1 ) -# 45786 "mlx/parser.ml" +# 62428 "mlx/parser.ml" in let _endpos__1_ = _endpos__1_inlined2_ in @@ -45790,15 +62432,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 957 "mlx/parser.mly" +# 1034 "mlx/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 45796 "mlx/parser.ml" +# 62438 "mlx/parser.ml" in -# 1457 "mlx/parser.mly" +# 1555 "mlx/parser.mly" ( _1 ) -# 45802 "mlx/parser.ml" +# 62444 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45821,9 +62463,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3828 "mlx/parser.mly" +# 4242 "mlx/parser.mly" ( "-" ) -# 45827 "mlx/parser.ml" +# 62469 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45846,9 +62488,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3829 "mlx/parser.mly" +# 4243 "mlx/parser.mly" ( "-." ) -# 45852 "mlx/parser.ml" +# 62494 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45901,9 +62543,9 @@ module Tables = struct let _v : (Parsetree.row_field) = let _5 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 45907 "mlx/parser.ml" +# 62549 "mlx/parser.ml" in let _endpos__5_ = _endpos__1_inlined1_ in @@ -45912,18 +62554,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 45916 "mlx/parser.ml" +# 62558 "mlx/parser.ml" in -# 1035 "mlx/parser.mly" +# 1133 "mlx/parser.mly" ( xs ) -# 45921 "mlx/parser.ml" +# 62563 "mlx/parser.ml" in -# 3518 "mlx/parser.mly" +# 3923 "mlx/parser.mly" ( _1 ) -# 45927 "mlx/parser.ml" +# 62569 "mlx/parser.ml" in let _1 = @@ -45931,20 +62573,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 45937 "mlx/parser.ml" +# 62579 "mlx/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3504 "mlx/parser.mly" +# 3909 "mlx/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 ) -# 45948 "mlx/parser.ml" +# 62590 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45976,9 +62618,9 @@ module Tables = struct let _v : (Parsetree.row_field) = let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 45982 "mlx/parser.ml" +# 62624 "mlx/parser.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -45987,20 +62629,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 45993 "mlx/parser.ml" +# 62635 "mlx/parser.ml" in let _endpos = _endpos__2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3508 "mlx/parser.mly" +# 3913 "mlx/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 [] ) -# 46004 "mlx/parser.ml" +# 62646 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46032,7 +62674,7 @@ module Tables = struct let _v : (Parsetree.toplevel_phrase) = let arg = # 124 "" ( None ) -# 46036 "mlx/parser.ml" +# 62678 "mlx/parser.ml" in let _endpos_arg_ = _endpos__1_inlined1_ in let dir = @@ -46041,18 +62683,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 46047 "mlx/parser.ml" +# 62689 "mlx/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3726 "mlx/parser.mly" +# 4140 "mlx/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 46056 "mlx/parser.ml" +# 62698 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46083,9 +62725,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined2 : ( -# 754 "mlx/parser.mly" +# 826 "mlx/parser.mly" (string * Location.t * string option) -# 46089 "mlx/parser.ml" +# 62731 "mlx/parser.ml" ) = Obj.magic _1_inlined2 in let _1_inlined1 : (string) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in @@ -46096,23 +62738,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3730 "mlx/parser.mly" +# 4144 "mlx/parser.mly" ( let (s, _, _) = _1 in Pdir_string s ) -# 46102 "mlx/parser.ml" +# 62744 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 962 "mlx/parser.mly" +# 1039 "mlx/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 46110 "mlx/parser.ml" +# 62752 "mlx/parser.ml" in # 126 "" ( Some x ) -# 46116 "mlx/parser.ml" +# 62758 "mlx/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -46122,18 +62764,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 46128 "mlx/parser.ml" +# 62770 "mlx/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3726 "mlx/parser.mly" +# 4140 "mlx/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 46137 "mlx/parser.ml" +# 62779 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46164,9 +62806,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined2 : ( -# 699 "mlx/parser.mly" +# 771 "mlx/parser.mly" (string * char option) -# 46170 "mlx/parser.ml" +# 62812 "mlx/parser.ml" ) = Obj.magic _1_inlined2 in let _1_inlined1 : (string) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in @@ -46177,23 +62819,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3731 "mlx/parser.mly" +# 4145 "mlx/parser.mly" ( let (n, m) = _1 in Pdir_int (n ,m) ) -# 46183 "mlx/parser.ml" +# 62825 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 962 "mlx/parser.mly" +# 1039 "mlx/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 46191 "mlx/parser.ml" +# 62833 "mlx/parser.ml" in # 126 "" ( Some x ) -# 46197 "mlx/parser.ml" +# 62839 "mlx/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -46203,18 +62845,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 46209 "mlx/parser.ml" +# 62851 "mlx/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3726 "mlx/parser.mly" +# 4140 "mlx/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 46218 "mlx/parser.ml" +# 62860 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46244,7 +62886,7 @@ module Tables = struct }; }; } = _menhir_stack in - let _1_inlined2 : (Ppxlib.longident) = Obj.magic _1_inlined2 in + let _1_inlined2 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined2 in let _1_inlined1 : (string) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -46254,23 +62896,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3732 "mlx/parser.mly" +# 4146 "mlx/parser.mly" ( Pdir_ident _1 ) -# 46260 "mlx/parser.ml" +# 62902 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 962 "mlx/parser.mly" +# 1039 "mlx/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 46268 "mlx/parser.ml" +# 62910 "mlx/parser.ml" in # 126 "" ( Some x ) -# 46274 "mlx/parser.ml" +# 62916 "mlx/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -46280,18 +62922,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 46286 "mlx/parser.ml" +# 62928 "mlx/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3726 "mlx/parser.mly" +# 4140 "mlx/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 46295 "mlx/parser.ml" +# 62937 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46321,7 +62963,7 @@ module Tables = struct }; }; } = _menhir_stack in - let _1_inlined2 : (Ppxlib.longident) = Obj.magic _1_inlined2 in + let _1_inlined2 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined2 in let _1_inlined1 : (string) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -46331,23 +62973,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3733 "mlx/parser.mly" +# 4147 "mlx/parser.mly" ( Pdir_ident _1 ) -# 46337 "mlx/parser.ml" +# 62979 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 962 "mlx/parser.mly" +# 1039 "mlx/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 46345 "mlx/parser.ml" +# 62987 "mlx/parser.ml" in # 126 "" ( Some x ) -# 46351 "mlx/parser.ml" +# 62993 "mlx/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -46357,18 +62999,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 46363 "mlx/parser.ml" +# 63005 "mlx/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3726 "mlx/parser.mly" +# 4140 "mlx/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 46372 "mlx/parser.ml" +# 63014 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46408,23 +63050,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3734 "mlx/parser.mly" +# 4148 "mlx/parser.mly" ( Pdir_bool false ) -# 46414 "mlx/parser.ml" +# 63056 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 962 "mlx/parser.mly" +# 1039 "mlx/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 46422 "mlx/parser.ml" +# 63064 "mlx/parser.ml" in # 126 "" ( Some x ) -# 46428 "mlx/parser.ml" +# 63070 "mlx/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -46434,18 +63076,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 46440 "mlx/parser.ml" +# 63082 "mlx/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3726 "mlx/parser.mly" +# 4140 "mlx/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 46449 "mlx/parser.ml" +# 63091 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46485,23 +63127,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3735 "mlx/parser.mly" +# 4149 "mlx/parser.mly" ( Pdir_bool true ) -# 46491 "mlx/parser.ml" +# 63133 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 962 "mlx/parser.mly" +# 1039 "mlx/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 46499 "mlx/parser.ml" +# 63141 "mlx/parser.ml" in # 126 "" ( Some x ) -# 46505 "mlx/parser.ml" +# 63147 "mlx/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -46511,18 +63153,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 46517 "mlx/parser.ml" +# 63159 "mlx/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3726 "mlx/parser.mly" +# 4140 "mlx/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 46526 "mlx/parser.ml" +# 63168 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46562,37 +63204,37 @@ module Tables = struct let _1 = let _1 = let attrs = -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 46568 "mlx/parser.ml" +# 63210 "mlx/parser.ml" in -# 1408 "mlx/parser.mly" +# 1506 "mlx/parser.mly" ( mkstrexp e attrs ) -# 46573 "mlx/parser.ml" +# 63215 "mlx/parser.ml" in let _startpos__1_ = _startpos_e_ in let _startpos = _startpos__1_ in -# 905 "mlx/parser.mly" +# 982 "mlx/parser.mly" ( text_str _startpos @ [_1] ) -# 46581 "mlx/parser.ml" +# 63223 "mlx/parser.ml" in let _startpos__1_ = _startpos_e_ in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 893 "mlx/parser.mly" +# 970 "mlx/parser.mly" ( extra_str _startpos _endpos _1 ) -# 46590 "mlx/parser.ml" +# 63232 "mlx/parser.ml" in -# 1172 "mlx/parser.mly" +# 1270 "mlx/parser.mly" ( Ptop_def _1 ) -# 46596 "mlx/parser.ml" +# 63238 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46625,21 +63267,21 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 46629 "mlx/parser.ml" +# 63271 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 893 "mlx/parser.mly" +# 970 "mlx/parser.mly" ( extra_str _startpos _endpos _1 ) -# 46637 "mlx/parser.ml" +# 63279 "mlx/parser.ml" in -# 1176 "mlx/parser.mly" +# 1274 "mlx/parser.mly" ( Ptop_def _1 ) -# 46643 "mlx/parser.ml" +# 63285 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46669,9 +63311,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.toplevel_phrase) = -# 1180 "mlx/parser.mly" +# 1278 "mlx/parser.mly" ( _1 ) -# 46675 "mlx/parser.ml" +# 63317 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46694,9 +63336,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.toplevel_phrase) = -# 1183 "mlx/parser.mly" +# 1281 "mlx/parser.mly" ( raise End_of_file ) -# 46700 "mlx/parser.ml" +# 63342 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46719,9 +63361,9 @@ module Tables = struct let _startpos = _startpos_ty_ in let _endpos = _endpos_ty_ in let _v : (Parsetree.core_type) = -# 3410 "mlx/parser.mly" +# 3747 "mlx/parser.mly" ( ty ) -# 46725 "mlx/parser.ml" +# 63367 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46733,50 +63375,58 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = xs; MenhirLib.EngineTypes.startp = _startpos_xs_; MenhirLib.EngineTypes.endp = _endpos_xs_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let xs : (Parsetree.core_type list) = Obj.magic xs in + let xs : ((string option * Parsetree.core_type) list) = Obj.magic xs in + let _2 : unit = Obj.magic _2 in + let ty : (Parsetree.core_type) = Obj.magic ty in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_xs_ in + let _startpos = _startpos_ty_ in let _endpos = _endpos_xs_ in let _v : (Parsetree.core_type) = let _1 = - let _1 = - let tys = - let xs = + let ltys = + let xs = # 253 "" ( List.rev xs ) -# 46753 "mlx/parser.ml" - in - -# 1063 "mlx/parser.mly" - ( xs ) -# 46758 "mlx/parser.ml" - - in +# 63408 "mlx/parser.ml" + in -# 3413 "mlx/parser.mly" - ( Ptyp_tuple tys ) -# 46764 "mlx/parser.ml" +# 1133 "mlx/parser.mly" + ( xs ) +# 63413 "mlx/parser.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_xs_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 938 "mlx/parser.mly" - ( mktyp ~loc:_sloc _1 ) -# 46774 "mlx/parser.ml" +# 3756 "mlx/parser.mly" + ( ty, ltys ) +# 63419 "mlx/parser.ml" in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_ty_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3415 "mlx/parser.mly" - ( _1 ) -# 46780 "mlx/parser.ml" +# 3749 "mlx/parser.mly" + ( let ty, ltys = _1 in + mktyp ~loc:_sloc (Ptyp_tuple ((None, ty) :: ltys)) ) +# 63430 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46805,10 +63455,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : (Parsetree.core_type option * Parsetree.core_type option) = -# 2732 "mlx/parser.mly" - ( (Some _2, None) ) -# 46812 "mlx/parser.ml" + let _v : (Parsetree.type_constraint) = +# 2967 "mlx/parser.mly" + ( Pconstraint _2 ) +# 63462 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46851,10 +63501,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in - let _v : (Parsetree.core_type option * Parsetree.core_type option) = -# 2733 "mlx/parser.mly" - ( (Some _2, Some _4) ) -# 46858 "mlx/parser.ml" + let _v : (Parsetree.type_constraint) = +# 2968 "mlx/parser.mly" + ( Pcoerce (Some _2, _4) ) +# 63508 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46883,10 +63533,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : (Parsetree.core_type option * Parsetree.core_type option) = -# 2734 "mlx/parser.mly" - ( (None, Some _2) ) -# 46890 "mlx/parser.ml" + let _v : (Parsetree.type_constraint) = +# 2969 "mlx/parser.mly" + ( Pcoerce (None, _2) ) +# 63540 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46915,10 +63565,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : (Parsetree.core_type option * Parsetree.core_type option) = -# 2735 "mlx/parser.mly" + let _v : (Parsetree.type_constraint) = +# 2970 "mlx/parser.mly" ( syntax_error() ) -# 46922 "mlx/parser.ml" +# 63572 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46947,10 +63597,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : (Parsetree.core_type option * Parsetree.core_type option) = -# 2736 "mlx/parser.mly" + let _v : (Parsetree.type_constraint) = +# 2971 "mlx/parser.mly" ( syntax_error() ) -# 46954 "mlx/parser.ml" +# 63604 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46966,9 +63616,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) = -# 3065 "mlx/parser.mly" +# 3360 "mlx/parser.mly" ( (Ptype_abstract, Public, None) ) -# 46972 "mlx/parser.ml" +# 63622 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46998,9 +63648,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) = -# 3067 "mlx/parser.mly" +# 3362 "mlx/parser.mly" ( _2 ) -# 47004 "mlx/parser.ml" +# 63654 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47018,14 +63668,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t) = 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 : (Ppxlib.longident) = -# 3687 "mlx/parser.mly" + let _v : (Mlx_shim.Longident.t) = +# 4101 "mlx/parser.mly" ( _1 ) -# 47029 "mlx/parser.ml" +# 63679 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47055,9 +63705,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) = -# 3082 "mlx/parser.mly" +# 3377 "mlx/parser.mly" ( _2, _1 ) -# 47061 "mlx/parser.ml" +# 63711 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47073,9 +63723,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) = -# 3075 "mlx/parser.mly" +# 3370 "mlx/parser.mly" ( [] ) -# 47079 "mlx/parser.ml" +# 63729 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47098,9 +63748,9 @@ module Tables = struct let _startpos = _startpos_p_ in let _endpos = _endpos_p_ in let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = -# 3077 "mlx/parser.mly" +# 3372 "mlx/parser.mly" ( [p] ) -# 47104 "mlx/parser.ml" +# 63754 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47140,18 +63790,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 47144 "mlx/parser.ml" +# 63794 "mlx/parser.ml" in -# 1035 "mlx/parser.mly" +# 1133 "mlx/parser.mly" ( xs ) -# 47149 "mlx/parser.ml" +# 63799 "mlx/parser.ml" in -# 3079 "mlx/parser.mly" +# 3374 "mlx/parser.mly" ( ps ) -# 47155 "mlx/parser.ml" +# 63805 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47182,24 +63832,24 @@ module Tables = struct let _endpos = _endpos_tyvar_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3087 "mlx/parser.mly" +# 3382 "mlx/parser.mly" ( Ptyp_var tyvar ) -# 47188 "mlx/parser.ml" +# 63838 "mlx/parser.ml" in let _endpos__1_ = _endpos_tyvar_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 938 "mlx/parser.mly" +# 1015 "mlx/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 47197 "mlx/parser.ml" +# 63847 "mlx/parser.ml" in -# 3090 "mlx/parser.mly" +# 3385 "mlx/parser.mly" ( _1 ) -# 47203 "mlx/parser.ml" +# 63853 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47223,23 +63873,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3089 "mlx/parser.mly" +# 3384 "mlx/parser.mly" ( Ptyp_any ) -# 47229 "mlx/parser.ml" +# 63879 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 938 "mlx/parser.mly" +# 1015 "mlx/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 47237 "mlx/parser.ml" +# 63887 "mlx/parser.ml" in -# 3090 "mlx/parser.mly" +# 3385 "mlx/parser.mly" ( _1 ) -# 47243 "mlx/parser.ml" +# 63893 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47255,9 +63905,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3094 "mlx/parser.mly" +# 3389 "mlx/parser.mly" ( NoVariance, NoInjectivity ) -# 47261 "mlx/parser.ml" +# 63911 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47280,9 +63930,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3095 "mlx/parser.mly" +# 3390 "mlx/parser.mly" ( Covariant, NoInjectivity ) -# 47286 "mlx/parser.ml" +# 63936 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47305,9 +63955,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3096 "mlx/parser.mly" +# 3391 "mlx/parser.mly" ( Contravariant, NoInjectivity ) -# 47311 "mlx/parser.ml" +# 63961 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47330,9 +63980,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3097 "mlx/parser.mly" +# 3392 "mlx/parser.mly" ( NoVariance, Injective ) -# 47336 "mlx/parser.ml" +# 63986 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47362,9 +64012,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3098 "mlx/parser.mly" +# 3393 "mlx/parser.mly" ( Covariant, Injective ) -# 47368 "mlx/parser.ml" +# 64018 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47394,9 +64044,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3098 "mlx/parser.mly" +# 3393 "mlx/parser.mly" ( Covariant, Injective ) -# 47400 "mlx/parser.ml" +# 64050 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47426,9 +64076,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3099 "mlx/parser.mly" +# 3394 "mlx/parser.mly" ( Contravariant, Injective ) -# 47432 "mlx/parser.ml" +# 64082 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47458,9 +64108,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3099 "mlx/parser.mly" +# 3394 "mlx/parser.mly" ( Contravariant, Injective ) -# 47464 "mlx/parser.ml" +# 64114 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47479,20 +64129,24 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 691 "mlx/parser.mly" +# 763 "mlx/parser.mly" (string) -# 47485 "mlx/parser.ml" +# 64135 "mlx/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 -# 3101 "mlx/parser.mly" +# 3396 "mlx/parser.mly" ( if _1 = "+!" then Covariant, Injective else if _1 = "-!" then Contravariant, Injective else + if _1 = "+-" then Bivariant, NoInjectivity else + if _1 = "-+" then Bivariant, NoInjectivity else + if _1 = "+-!" then Bivariant, Injective else + if _1 = "-+!" then Bivariant, Injective else expecting _loc__1_ "type_variance" ) -# 47496 "mlx/parser.ml" +# 64150 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47511,20 +64165,22 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 740 "mlx/parser.mly" +# 812 "mlx/parser.mly" (string) -# 47517 "mlx/parser.ml" +# 64171 "mlx/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 -# 3105 "mlx/parser.mly" +# 3404 "mlx/parser.mly" ( if _1 = "!+" then Covariant, Injective else if _1 = "!-" then Contravariant, Injective else + if _1 = "!+-" then Bivariant, Injective else + if _1 = "!-+" then Bivariant, Injective else expecting _loc__1_ "type_variance" ) -# 47528 "mlx/parser.ml" +# 64184 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47558,39 +64214,39 @@ module Tables = struct let ys = # 260 "" ( List.flatten xss ) -# 47562 "mlx/parser.ml" +# 64218 "mlx/parser.ml" in let xs = let _1 = -# 971 "mlx/parser.mly" +# 1048 "mlx/parser.mly" ( [] ) -# 47568 "mlx/parser.ml" +# 64224 "mlx/parser.ml" in -# 1203 "mlx/parser.mly" +# 1301 "mlx/parser.mly" ( _1 ) -# 47573 "mlx/parser.ml" +# 64229 "mlx/parser.ml" in # 267 "" ( xs @ ys ) -# 47579 "mlx/parser.ml" +# 64235 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 897 "mlx/parser.mly" +# 974 "mlx/parser.mly" ( extra_def _startpos _endpos _1 ) -# 47588 "mlx/parser.ml" +# 64244 "mlx/parser.ml" in -# 1196 "mlx/parser.mly" +# 1294 "mlx/parser.mly" ( _1 ) -# 47594 "mlx/parser.ml" +# 64250 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47638,7 +64294,7 @@ module Tables = struct let ys = # 260 "" ( List.flatten xss ) -# 47642 "mlx/parser.ml" +# 64298 "mlx/parser.ml" in let xs = let _1 = @@ -47646,61 +64302,61 @@ module Tables = struct let _1 = let _1 = let attrs = -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 47652 "mlx/parser.ml" +# 64308 "mlx/parser.ml" in -# 1408 "mlx/parser.mly" +# 1506 "mlx/parser.mly" ( mkstrexp e attrs ) -# 47657 "mlx/parser.ml" +# 64313 "mlx/parser.ml" in -# 915 "mlx/parser.mly" +# 992 "mlx/parser.mly" ( Ptop_def [_1] ) -# 47663 "mlx/parser.ml" +# 64319 "mlx/parser.ml" in let _startpos__1_ = _startpos_e_ in let _startpos = _startpos__1_ in -# 913 "mlx/parser.mly" +# 990 "mlx/parser.mly" ( text_def _startpos @ [_1] ) -# 47671 "mlx/parser.ml" +# 64327 "mlx/parser.ml" in -# 973 "mlx/parser.mly" +# 1050 "mlx/parser.mly" ( x ) -# 47677 "mlx/parser.ml" +# 64333 "mlx/parser.ml" in -# 1203 "mlx/parser.mly" +# 1301 "mlx/parser.mly" ( _1 ) -# 47683 "mlx/parser.ml" +# 64339 "mlx/parser.ml" in # 267 "" ( xs @ ys ) -# 47689 "mlx/parser.ml" +# 64345 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_e_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 897 "mlx/parser.mly" +# 974 "mlx/parser.mly" ( extra_def _startpos _endpos _1 ) -# 47698 "mlx/parser.ml" +# 64354 "mlx/parser.ml" in -# 1196 "mlx/parser.mly" +# 1294 "mlx/parser.mly" ( _1 ) -# 47704 "mlx/parser.ml" +# 64360 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47737,9 +64393,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (string) = -# 3588 "mlx/parser.mly" +# 4000 "mlx/parser.mly" ( _2 ) -# 47743 "mlx/parser.ml" +# 64399 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47778,9 +64434,9 @@ module Tables = struct let _v : (string) = let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 3589 "mlx/parser.mly" +# 4001 "mlx/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 47784 "mlx/parser.ml" +# 64440 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47811,9 +64467,9 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (string) = let _loc__2_ = (_startpos__2_, _endpos__2_) in -# 3590 "mlx/parser.mly" +# 4002 "mlx/parser.mly" ( expecting _loc__2_ "operator" ) -# 47817 "mlx/parser.ml" +# 64473 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47851,9 +64507,9 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (string) = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 3591 "mlx/parser.mly" +# 4003 "mlx/parser.mly" ( expecting _loc__3_ "module-expr" ) -# 47857 "mlx/parser.ml" +# 64513 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47872,17 +64528,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 714 "mlx/parser.mly" +# 786 "mlx/parser.mly" (string) -# 47878 "mlx/parser.ml" +# 64534 "mlx/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) = -# 3594 "mlx/parser.mly" +# 4006 "mlx/parser.mly" ( _1 ) -# 47886 "mlx/parser.ml" +# 64542 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47905,9 +64561,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3595 "mlx/parser.mly" +# 4007 "mlx/parser.mly" ( _1 ) -# 47911 "mlx/parser.ml" +# 64567 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47925,14 +64581,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Ppxlib.longident) = Obj.magic _1 in + let _1 : (Mlx_shim.Longident.t) = 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 : (Ppxlib.longident) = -# 3681 "mlx/parser.mly" + let _v : (Mlx_shim.Longident.t) = +# 4095 "mlx/parser.mly" ( _1 ) -# 47936 "mlx/parser.ml" +# 64592 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -47977,9 +64633,9 @@ module Tables = struct let ty : (Parsetree.core_type) = Obj.magic ty in let _5 : unit = Obj.magic _5 in let _1_inlined1 : ( -# 714 "mlx/parser.mly" +# 786 "mlx/parser.mly" (string) -# 47983 "mlx/parser.ml" +# 64639 "mlx/parser.ml" ) = Obj.magic _1_inlined1 in let mutable_ : (Asttypes.mutable_flag) = Obj.magic mutable_ in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -47990,33 +64646,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 = -# 3562 "mlx/parser.mly" +# 3967 "mlx/parser.mly" ( _1 ) -# 47996 "mlx/parser.ml" +# 64652 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 48004 "mlx/parser.ml" +# 64660 "mlx/parser.ml" in let attrs = -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 48010 "mlx/parser.ml" +# 64666 "mlx/parser.ml" in let _1 = -# 3821 "mlx/parser.mly" +# 4235 "mlx/parser.mly" ( Fresh ) -# 48015 "mlx/parser.ml" +# 64671 "mlx/parser.ml" in -# 1988 "mlx/parser.mly" +# 2084 "mlx/parser.mly" ( (label, mutable_, Cfk_virtual ty), attrs ) -# 48020 "mlx/parser.ml" +# 64676 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -48061,9 +64717,9 @@ module Tables = struct let _6 : (Parsetree.expression) = Obj.magic _6 in let _5 : unit = Obj.magic _5 in let _1_inlined1 : ( -# 714 "mlx/parser.mly" +# 786 "mlx/parser.mly" (string) -# 48067 "mlx/parser.ml" +# 64723 "mlx/parser.ml" ) = Obj.magic _1_inlined1 in let _3 : (Asttypes.mutable_flag) = Obj.magic _3 in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -48074,33 +64730,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 = -# 3562 "mlx/parser.mly" +# 3967 "mlx/parser.mly" ( _1 ) -# 48080 "mlx/parser.ml" +# 64736 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 48088 "mlx/parser.ml" +# 64744 "mlx/parser.ml" in let _2 = -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 48094 "mlx/parser.ml" +# 64750 "mlx/parser.ml" in let _1 = -# 3824 "mlx/parser.mly" +# 4238 "mlx/parser.mly" ( Fresh ) -# 48099 "mlx/parser.ml" +# 64755 "mlx/parser.ml" in -# 1990 "mlx/parser.mly" +# 2086 "mlx/parser.mly" ( (_4, _3, Cfk_concrete (_1, _6)), _2 ) -# 48104 "mlx/parser.ml" +# 64760 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -48151,9 +64807,9 @@ module Tables = struct let _6 : (Parsetree.expression) = Obj.magic _6 in let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 714 "mlx/parser.mly" +# 786 "mlx/parser.mly" (string) -# 48157 "mlx/parser.ml" +# 64813 "mlx/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 @@ -48165,36 +64821,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 = -# 3562 "mlx/parser.mly" +# 3967 "mlx/parser.mly" ( _1 ) -# 48171 "mlx/parser.ml" +# 64827 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 48179 "mlx/parser.ml" +# 64835 "mlx/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 48187 "mlx/parser.ml" +# 64843 "mlx/parser.ml" in let _1 = -# 3825 "mlx/parser.mly" +# 4239 "mlx/parser.mly" ( Override ) -# 48193 "mlx/parser.ml" +# 64849 "mlx/parser.ml" in -# 1990 "mlx/parser.mly" +# 2086 "mlx/parser.mly" ( (_4, _3, Cfk_concrete (_1, _6)), _2 ) -# 48198 "mlx/parser.ml" +# 64854 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -48244,11 +64900,11 @@ module Tables = struct } = _menhir_stack in let _7 : (Parsetree.expression) = Obj.magic _7 in let _6 : unit = Obj.magic _6 in - let _5 : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic _5 in + let _5 : (Parsetree.type_constraint) = Obj.magic _5 in let _1_inlined1 : ( -# 714 "mlx/parser.mly" +# 786 "mlx/parser.mly" (string) -# 48252 "mlx/parser.ml" +# 64908 "mlx/parser.ml" ) = Obj.magic _1_inlined1 in let _3 : (Asttypes.mutable_flag) = Obj.magic _3 in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -48259,30 +64915,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 = -# 3562 "mlx/parser.mly" +# 3967 "mlx/parser.mly" ( _1 ) -# 48265 "mlx/parser.ml" +# 64921 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 48273 "mlx/parser.ml" +# 64929 "mlx/parser.ml" in let _startpos__4_ = _startpos__1_inlined1_ in let _2 = -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 48280 "mlx/parser.ml" +# 64936 "mlx/parser.ml" in let (_endpos__2_, _startpos__2_) = (_endpos__1_, _startpos__1_) in let _1 = -# 3824 "mlx/parser.mly" +# 4238 "mlx/parser.mly" ( Fresh ) -# 48286 "mlx/parser.ml" +# 64942 "mlx/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__0_, _endpos__0_) in let _endpos = _endpos__7_ in @@ -48298,11 +64954,11 @@ module Tables = struct _startpos__4_ in let _sloc = (_symbolstartpos, _endpos) in -# 1993 "mlx/parser.mly" +# 2089 "mlx/parser.mly" ( let e = mkexp_constraint ~loc:_sloc _7 _5 in (_4, _3, Cfk_concrete (_1, e)), _2 ) -# 48306 "mlx/parser.ml" +# 64962 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -48358,11 +65014,11 @@ module Tables = struct } = _menhir_stack in let _7 : (Parsetree.expression) = Obj.magic _7 in let _6 : unit = Obj.magic _6 in - let _5 : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic _5 in + let _5 : (Parsetree.type_constraint) = Obj.magic _5 in let _1_inlined2 : ( -# 714 "mlx/parser.mly" +# 786 "mlx/parser.mly" (string) -# 48366 "mlx/parser.ml" +# 65022 "mlx/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 @@ -48374,33 +65030,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 = -# 3562 "mlx/parser.mly" +# 3967 "mlx/parser.mly" ( _1 ) -# 48380 "mlx/parser.ml" +# 65036 "mlx/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 48388 "mlx/parser.ml" +# 65044 "mlx/parser.ml" in let _startpos__4_ = _startpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 48397 "mlx/parser.ml" +# 65053 "mlx/parser.ml" in let (_endpos__2_, _startpos__2_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in let _1 = -# 3825 "mlx/parser.mly" +# 4239 "mlx/parser.mly" ( Override ) -# 48404 "mlx/parser.ml" +# 65060 "mlx/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = if _startpos__1_ != _endpos__1_ then @@ -48415,11 +65071,11 @@ module Tables = struct _startpos__4_ in let _sloc = (_symbolstartpos, _endpos) in -# 1993 "mlx/parser.mly" +# 2089 "mlx/parser.mly" ( let e = mkexp_constraint ~loc:_sloc _7 _5 in (_4, _3, Cfk_concrete (_1, e)), _2 ) -# 48423 "mlx/parser.ml" +# 65079 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -48486,9 +65142,9 @@ module Tables = struct let _v : (Parsetree.value_description * string Ppxlib.loc option) = let attrs2 = let _1 = _1_inlined3 in -# 3918 "mlx/parser.mly" +# 4333 "mlx/parser.mly" ( _1 ) -# 48492 "mlx/parser.ml" +# 65148 "mlx/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -48498,30 +65154,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 48504 "mlx/parser.ml" +# 65160 "mlx/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3922 "mlx/parser.mly" +# 4337 "mlx/parser.mly" ( _1 ) -# 48512 "mlx/parser.ml" +# 65168 "mlx/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2936 "mlx/parser.mly" +# 3231 "mlx/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 ) -# 48525 "mlx/parser.ml" +# 65181 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -48537,9 +65193,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.virtual_flag) = -# 3785 "mlx/parser.mly" +# 4199 "mlx/parser.mly" ( Concrete ) -# 48543 "mlx/parser.ml" +# 65199 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -48562,9 +65218,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.virtual_flag) = -# 3786 "mlx/parser.mly" +# 4200 "mlx/parser.mly" ( Virtual ) -# 48568 "mlx/parser.ml" +# 65224 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -48587,9 +65243,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.mutable_flag) = -# 3809 "mlx/parser.mly" +# 4223 "mlx/parser.mly" ( Immutable ) -# 48593 "mlx/parser.ml" +# 65249 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -48619,9 +65275,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.mutable_flag) = -# 3810 "mlx/parser.mly" +# 4224 "mlx/parser.mly" ( Mutable ) -# 48625 "mlx/parser.ml" +# 65281 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -48651,9 +65307,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.mutable_flag) = -# 3811 "mlx/parser.mly" +# 4225 "mlx/parser.mly" ( Mutable ) -# 48657 "mlx/parser.ml" +# 65313 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -48676,9 +65332,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.private_flag) = -# 3816 "mlx/parser.mly" +# 4230 "mlx/parser.mly" ( Public ) -# 48682 "mlx/parser.ml" +# 65338 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -48708,9 +65364,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.private_flag) = -# 3817 "mlx/parser.mly" +# 4231 "mlx/parser.mly" ( Private ) -# 48714 "mlx/parser.ml" +# 65370 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -48740,9 +65396,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.private_flag) = -# 3818 "mlx/parser.mly" +# 4232 "mlx/parser.mly" ( Private ) -# 48746 "mlx/parser.ml" +# 65402 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -48793,7 +65449,7 @@ module Tables = struct let xs : ((Parsetree.core_type * Parsetree.core_type * Warnings.loc) list) = Obj.magic xs in let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in let _4 : (Asttypes.private_flag) = Obj.magic _4 in - let _1_inlined1 : (Ppxlib.longident) = Obj.magic _1_inlined1 in + let _1_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined1 in let _2 : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -48804,27 +65460,27 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 48808 "mlx/parser.ml" +# 65464 "mlx/parser.ml" in -# 985 "mlx/parser.mly" +# 1062 "mlx/parser.mly" ( xs ) -# 48813 "mlx/parser.ml" +# 65469 "mlx/parser.ml" in -# 3036 "mlx/parser.mly" +# 3331 "mlx/parser.mly" ( _1 ) -# 48819 "mlx/parser.ml" +# 65475 "mlx/parser.ml" in let _endpos__6_ = _endpos_xs_ in let _5 = let _1 = _1_inlined2 in -# 3358 "mlx/parser.mly" +# 3660 "mlx/parser.mly" ( _1 ) -# 48828 "mlx/parser.ml" +# 65484 "mlx/parser.ml" in let _3 = @@ -48833,16 +65489,16 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 48839 "mlx/parser.ml" +# 65495 "mlx/parser.ml" in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3277 "mlx/parser.mly" +# 3579 "mlx/parser.mly" ( let lident = loc_last _3 in Pwith_type (_3, @@ -48852,7 +65508,7 @@ module Tables = struct ~manifest:_5 ~priv:_4 ~loc:(make_loc _sloc))) ) -# 48856 "mlx/parser.ml" +# 65512 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -48896,7 +65552,7 @@ module Tables = struct } = _menhir_stack in let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in let _4 : unit = Obj.magic _4 in - let _1_inlined1 : (Ppxlib.longident) = Obj.magic _1_inlined1 in + let _1_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined1 in let _2 : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -48905,9 +65561,9 @@ module Tables = struct let _v : (Parsetree.with_constraint) = let _5 = let _1 = _1_inlined2 in -# 3358 "mlx/parser.mly" +# 3660 "mlx/parser.mly" ( _1 ) -# 48911 "mlx/parser.ml" +# 65567 "mlx/parser.ml" in let _endpos__5_ = _endpos__1_inlined2_ in @@ -48917,16 +65573,16 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 48923 "mlx/parser.ml" +# 65579 "mlx/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3290 "mlx/parser.mly" +# 3592 "mlx/parser.mly" ( let lident = loc_last _3 in Pwith_typesubst (_3, @@ -48934,7 +65590,7 @@ module Tables = struct ~params:_2 ~manifest:_5 ~loc:(make_loc _sloc))) ) -# 48938 "mlx/parser.ml" +# 65594 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -48970,9 +65626,9 @@ module Tables = struct }; }; } = _menhir_stack in - let _1_inlined2 : (Ppxlib.longident) = Obj.magic _1_inlined2 in + let _1_inlined2 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined2 in let _3 : unit = Obj.magic _3 in - let _1_inlined1 : (Ppxlib.longident) = Obj.magic _1_inlined1 in + let _1_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -48983,9 +65639,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 48989 "mlx/parser.ml" +# 65645 "mlx/parser.ml" in let _2 = @@ -48994,15 +65650,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 49000 "mlx/parser.ml" +# 65656 "mlx/parser.ml" in -# 3298 "mlx/parser.mly" +# 3600 "mlx/parser.mly" ( Pwith_module (_2, _4) ) -# 49006 "mlx/parser.ml" +# 65662 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -49038,9 +65694,9 @@ module Tables = struct }; }; } = _menhir_stack in - let _1_inlined2 : (Ppxlib.longident) = Obj.magic _1_inlined2 in + let _1_inlined2 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined2 in let _3 : unit = Obj.magic _3 in - let _1_inlined1 : (Ppxlib.longident) = Obj.magic _1_inlined1 in + let _1_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -49051,9 +65707,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 49057 "mlx/parser.ml" +# 65713 "mlx/parser.ml" in let _2 = @@ -49062,15 +65718,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 49068 "mlx/parser.ml" +# 65724 "mlx/parser.ml" in -# 3300 "mlx/parser.mly" +# 3602 "mlx/parser.mly" ( Pwith_modsubst (_2, _4) ) -# 49074 "mlx/parser.ml" +# 65730 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -49114,7 +65770,7 @@ module Tables = struct } = _menhir_stack in let rhs : (Parsetree.module_type) = Obj.magic rhs in let _4 : unit = Obj.magic _4 in - let _1_inlined1 : (Ppxlib.longident) = Obj.magic _1_inlined1 in + let _1_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -49126,15 +65782,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 49132 "mlx/parser.ml" +# 65788 "mlx/parser.ml" in -# 3302 "mlx/parser.mly" +# 3604 "mlx/parser.mly" ( Pwith_modtype (l, rhs) ) -# 49138 "mlx/parser.ml" +# 65794 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -49178,7 +65834,7 @@ module Tables = struct } = _menhir_stack in let rhs : (Parsetree.module_type) = Obj.magic rhs in let _4 : unit = Obj.magic _4 in - let _1_inlined1 : (Ppxlib.longident) = Obj.magic _1_inlined1 in + let _1_inlined1 : (Mlx_shim.Longident.t) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -49190,15 +65846,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 901 "mlx/parser.mly" +# 978 "mlx/parser.mly" ( mkrhs _1 _sloc ) -# 49196 "mlx/parser.ml" +# 65852 "mlx/parser.ml" in -# 3304 "mlx/parser.mly" +# 3606 "mlx/parser.mly" ( Pwith_modtypesubst (l, rhs) ) -# 49202 "mlx/parser.ml" +# 65858 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -49221,9 +65877,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.private_flag) = -# 3307 "mlx/parser.mly" +# 3609 "mlx/parser.mly" ( Public ) -# 49227 "mlx/parser.ml" +# 65883 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -49253,9 +65909,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.private_flag) = -# 3308 "mlx/parser.mly" +# 3610 "mlx/parser.mly" ( Private ) -# 49259 "mlx/parser.ml" +# 65915 "mlx/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -49283,59 +65939,59 @@ end let use_file = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1885 lexer lexbuf) : (Parsetree.toplevel_phrase list)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2309 lexer lexbuf) : (Parsetree.toplevel_phrase list)) and toplevel_phrase = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1865 lexer lexbuf) : (Parsetree.toplevel_phrase)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2289 lexer lexbuf) : (Parsetree.toplevel_phrase)) and parse_val_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1860 lexer lexbuf) : (Ppxlib.longident)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2284 lexer lexbuf) : (Mlx_shim.Longident.t)) and parse_pattern = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1856 lexer lexbuf) : (Parsetree.pattern)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2280 lexer lexbuf) : (Parsetree.pattern)) and parse_mty_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1852 lexer lexbuf) : (Ppxlib.longident)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2276 lexer lexbuf) : (Mlx_shim.Longident.t)) and parse_module_type = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1848 lexer lexbuf) : (Parsetree.module_type)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2272 lexer lexbuf) : (Parsetree.module_type)) and parse_module_expr = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1844 lexer lexbuf) : (Parsetree.module_expr)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2268 lexer lexbuf) : (Parsetree.module_expr)) and parse_mod_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1840 lexer lexbuf) : (Ppxlib.longident)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2264 lexer lexbuf) : (Mlx_shim.Longident.t)) and parse_mod_ext_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1836 lexer lexbuf) : (Ppxlib.longident)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2260 lexer lexbuf) : (Mlx_shim.Longident.t)) and parse_expression = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1832 lexer lexbuf) : (Parsetree.expression)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2256 lexer lexbuf) : (Parsetree.expression)) and parse_core_type = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1828 lexer lexbuf) : (Parsetree.core_type)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2252 lexer lexbuf) : (Parsetree.core_type)) and parse_constr_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1824 lexer lexbuf) : (Ppxlib.longident)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2248 lexer lexbuf) : (Mlx_shim.Longident.t)) and parse_any_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1806 lexer lexbuf) : (Ppxlib.longident)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2230 lexer lexbuf) : (Mlx_shim.Longident.t)) and interface = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Simplified 1802 lexer lexbuf) : (Parsetree.signature)) + (Obj.magic (MenhirInterpreter.entry `Simplified 2226 lexer lexbuf) : (Parsetree.signature)) and implementation = fun lexer lexbuf -> @@ -49345,59 +66001,59 @@ module Incremental = struct let use_file = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1885 initial_position) : (Parsetree.toplevel_phrase list) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2309 initial_position) : (Parsetree.toplevel_phrase list) MenhirInterpreter.checkpoint) and toplevel_phrase = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1865 initial_position) : (Parsetree.toplevel_phrase) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2289 initial_position) : (Parsetree.toplevel_phrase) MenhirInterpreter.checkpoint) and parse_val_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1860 initial_position) : (Ppxlib.longident) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2284 initial_position) : (Mlx_shim.Longident.t) MenhirInterpreter.checkpoint) and parse_pattern = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1856 initial_position) : (Parsetree.pattern) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2280 initial_position) : (Parsetree.pattern) MenhirInterpreter.checkpoint) and parse_mty_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1852 initial_position) : (Ppxlib.longident) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2276 initial_position) : (Mlx_shim.Longident.t) MenhirInterpreter.checkpoint) and parse_module_type = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1848 initial_position) : (Parsetree.module_type) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2272 initial_position) : (Parsetree.module_type) MenhirInterpreter.checkpoint) and parse_module_expr = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1844 initial_position) : (Parsetree.module_expr) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2268 initial_position) : (Parsetree.module_expr) MenhirInterpreter.checkpoint) and parse_mod_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1840 initial_position) : (Ppxlib.longident) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2264 initial_position) : (Mlx_shim.Longident.t) MenhirInterpreter.checkpoint) and parse_mod_ext_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1836 initial_position) : (Ppxlib.longident) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2260 initial_position) : (Mlx_shim.Longident.t) MenhirInterpreter.checkpoint) and parse_expression = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1832 initial_position) : (Parsetree.expression) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2256 initial_position) : (Parsetree.expression) MenhirInterpreter.checkpoint) and parse_core_type = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1828 initial_position) : (Parsetree.core_type) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2252 initial_position) : (Parsetree.core_type) MenhirInterpreter.checkpoint) and parse_constr_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1824 initial_position) : (Ppxlib.longident) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2248 initial_position) : (Mlx_shim.Longident.t) MenhirInterpreter.checkpoint) and parse_any_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1806 initial_position) : (Ppxlib.longident) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2230 initial_position) : (Mlx_shim.Longident.t) MenhirInterpreter.checkpoint) and interface = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1802 initial_position) : (Parsetree.signature) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2226 initial_position) : (Parsetree.signature) MenhirInterpreter.checkpoint) and implementation = fun initial_position -> @@ -49405,12 +66061,12 @@ module Incremental = struct end -# 3954 "mlx/parser.mly" +# 4373 "mlx/parser.mly" -# 49412 "mlx/parser.ml" +# 66068 "mlx/parser.ml" # 269 "" -# 49417 "mlx/parser.ml" +# 66073 "mlx/parser.ml" diff --git a/mlx/parser.mli b/mlx/parser.mli index 060fb9f..11a31d7 100644 --- a/mlx/parser.mli +++ b/mlx/parser.mli @@ -49,6 +49,9 @@ type token = | MINUSDOT | MINUS | METHOD + | METAOCAML_ESCAPE + | METAOCAML_BRACKET_OPEN + | METAOCAML_BRACKET_CLOSE | MATCH | LPAREN | LIDENT of (string) @@ -103,6 +106,7 @@ type token = | EOF | END | ELSE + | EFFECT | DOWNTO | DOTOP of (string) | DOTDOT @@ -142,27 +146,27 @@ val use_file: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Parsetree.toplevel_p val toplevel_phrase: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Parsetree.toplevel_phrase) -val parse_val_longident: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ppxlib.longident) +val parse_val_longident: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Mlx_shim.Longident.t) val parse_pattern: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Parsetree.pattern) -val parse_mty_longident: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ppxlib.longident) +val parse_mty_longident: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Mlx_shim.Longident.t) val parse_module_type: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Parsetree.module_type) val parse_module_expr: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Parsetree.module_expr) -val parse_mod_longident: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ppxlib.longident) +val parse_mod_longident: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Mlx_shim.Longident.t) -val parse_mod_ext_longident: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ppxlib.longident) +val parse_mod_ext_longident: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Mlx_shim.Longident.t) val parse_expression: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Parsetree.expression) val parse_core_type: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Parsetree.core_type) -val parse_constr_longident: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ppxlib.longident) +val parse_constr_longident: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Mlx_shim.Longident.t) -val parse_any_longident: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Ppxlib.longident) +val parse_any_longident: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Mlx_shim.Longident.t) val interface: (Lexing.lexbuf -> token) -> Lexing.lexbuf -> (Parsetree.signature) @@ -185,27 +189,27 @@ module Incremental : sig val toplevel_phrase: Lexing.position -> (Parsetree.toplevel_phrase) MenhirInterpreter.checkpoint - val parse_val_longident: Lexing.position -> (Ppxlib.longident) MenhirInterpreter.checkpoint + val parse_val_longident: Lexing.position -> (Mlx_shim.Longident.t) MenhirInterpreter.checkpoint val parse_pattern: Lexing.position -> (Parsetree.pattern) MenhirInterpreter.checkpoint - val parse_mty_longident: Lexing.position -> (Ppxlib.longident) MenhirInterpreter.checkpoint + val parse_mty_longident: Lexing.position -> (Mlx_shim.Longident.t) MenhirInterpreter.checkpoint val parse_module_type: Lexing.position -> (Parsetree.module_type) MenhirInterpreter.checkpoint val parse_module_expr: Lexing.position -> (Parsetree.module_expr) MenhirInterpreter.checkpoint - val parse_mod_longident: Lexing.position -> (Ppxlib.longident) MenhirInterpreter.checkpoint + val parse_mod_longident: Lexing.position -> (Mlx_shim.Longident.t) MenhirInterpreter.checkpoint - val parse_mod_ext_longident: Lexing.position -> (Ppxlib.longident) MenhirInterpreter.checkpoint + val parse_mod_ext_longident: Lexing.position -> (Mlx_shim.Longident.t) MenhirInterpreter.checkpoint val parse_expression: Lexing.position -> (Parsetree.expression) MenhirInterpreter.checkpoint val parse_core_type: Lexing.position -> (Parsetree.core_type) MenhirInterpreter.checkpoint - val parse_constr_longident: Lexing.position -> (Ppxlib.longident) MenhirInterpreter.checkpoint + val parse_constr_longident: Lexing.position -> (Mlx_shim.Longident.t) MenhirInterpreter.checkpoint - val parse_any_longident: Lexing.position -> (Ppxlib.longident) MenhirInterpreter.checkpoint + val parse_any_longident: Lexing.position -> (Mlx_shim.Longident.t) MenhirInterpreter.checkpoint val interface: Lexing.position -> (Parsetree.signature) MenhirInterpreter.checkpoint diff --git a/mlx/parser.mly b/mlx/parser.mly index 9424460..6798980 100644 --- a/mlx/parser.mly +++ b/mlx/parser.mly @@ -24,6 +24,9 @@ %{ +[@@@ocaml.warning "-60"] module Str = Ast_helper.Str (* For ocamldep *) +[@@@ocaml.warning "+60"] + open Asttypes open Longident open Parsetree @@ -47,14 +50,15 @@ let ghost_loc (startpos, endpos) = { } let mktyp ~loc ?attrs d = Typ.mk ~loc:(make_loc loc) ?attrs d -let mkpat ~loc d = Pat.mk ~loc:(make_loc loc) d -let mkexp ~loc d = Exp.mk ~loc:(make_loc loc) d +let mkpat ~loc ?attrs d = Pat.mk ~loc:(make_loc loc) ?attrs d +let mkexp ~loc ?attrs d = Exp.mk ~loc:(make_loc loc) ?attrs d let mkmty ~loc ?attrs d = Mty.mk ~loc:(make_loc loc) ?attrs d let mksig ~loc d = Sig.mk ~loc:(make_loc loc) d let mkmod ~loc ?attrs d = Mod.mk ~loc:(make_loc loc) ?attrs d let mkstr ~loc d = Str.mk ~loc:(make_loc loc) d let mkclass ~loc ?attrs d = Cl.mk ~loc:(make_loc loc) ?attrs d let mkcty ~loc ?attrs d = Cty.mk ~loc:(make_loc loc) ?attrs d +let mkconst ~loc c = Const.mk ~loc:(make_loc loc) c let pstr_typext (te, ext) = (Pstr_typext te, ext) @@ -91,6 +95,8 @@ let mkcf ~loc ?attrs ?docs d = let mkrhs rhs loc = mkloc rhs (make_loc loc) let ghrhs rhs loc = mkloc rhs (ghost_loc loc) +let ldot lid lid_loc name loc = Ldot (mkrhs lid lid_loc, mkrhs name loc) + let push_loc x acc = if x.Location.loc_ghost then acc @@ -102,7 +108,7 @@ let reloc_pat ~loc x = let reloc_exp ~loc x = { x with pexp_loc = make_loc loc; pexp_loc_stack = push_loc x.pexp_loc x.pexp_loc_stack } -let reloc_typ ~loc x = +let _reloc_typ ~loc x = { x with ptyp_loc = make_loc loc; ptyp_loc_stack = push_loc x.ptyp_loc x.ptyp_loc_stack } @@ -116,25 +122,14 @@ let mkpatvar ~loc name = mkpat ~loc (Ppat_var (mkrhs name loc)) (* - Ghost expressions and patterns: - expressions and patterns that do not appear explicitly in the - source file they have the loc_ghost flag set to true. - Then the profiler will not try to instrument them and the - -annot option will not try to display their type. + See ./location.mli for when to use a ghost location or not. Every grammar rule that generates an element with a location must make at most one non-ghost element, the topmost one. - - How to tell whether your location must be ghost: - A location corresponds to a range of characters in the source file. - If the location contains a piece of code that is syntactically - valid (according to the documentation), and corresponds to the - AST node, then the location must be real; in all other cases, - it must be ghost. *) -let ghexp ~loc d = Exp.mk ~loc:(ghost_loc loc) d -let ghpat ~loc d = Pat.mk ~loc:(ghost_loc loc) d -let ghtyp ~loc d = Typ.mk ~loc:(ghost_loc loc) d +let ghexp ~loc ?attrs d = Exp.mk ~loc:(ghost_loc loc) ?attrs d +let ghpat ~loc ?attrs d = Pat.mk ~loc:(ghost_loc loc) ?attrs d +let ghtyp ~loc ?attrs d = Typ.mk ~loc:(ghost_loc loc) ?attrs d let ghloc ~loc d = { txt = d; loc = ghost_loc loc } let ghstr ~loc d = Str.mk ~loc:(ghost_loc loc) d let ghsig ~loc d = Sig.mk ~loc:(ghost_loc loc) d @@ -147,23 +142,37 @@ let neg_string f = then String.sub f 1 (String.length f - 1) else "-" ^ f -let mkuminus ~oploc name arg = - match name, arg.pexp_desc with - | "-", Pexp_constant(Pconst_integer (n,m)) -> - Pexp_constant(Pconst_integer(neg_string n,m)) - | ("-" | "-."), Pexp_constant(Pconst_float (f, m)) -> - Pexp_constant(Pconst_float(neg_string f, m)) +(* Pre-apply the special [-], [-.], [+] and [+.] prefix operators into + constants if possible, otherwise turn them into the corresponding prefix + operators [~-], [~-.], etc.. *) +let mkuminus ~sloc ~oploc name arg = + match name, arg.pexp_desc, arg.pexp_attributes with + | "-", + Pexp_constant({pconst_desc = Pconst_integer (n,m); pconst_loc=_}), + [] -> + Pexp_constant(mkconst ~loc:sloc (Pconst_integer(neg_string n, m))) + | ("-" | "-."), + Pexp_constant({pconst_desc = Pconst_float (f, m); pconst_loc=_}), [] -> + Pexp_constant(mkconst ~loc:sloc (Pconst_float(neg_string f, m))) | _ -> Pexp_apply(mkoperator ~loc:oploc ("~" ^ name), [Nolabel, arg]) -let mkuplus ~oploc name arg = +let mkuplus ~sloc ~oploc name arg = let desc = arg.pexp_desc in - match name, desc with - | "+", Pexp_constant(Pconst_integer _) - | ("+" | "+."), Pexp_constant(Pconst_float _) -> desc + match name, desc, arg.pexp_attributes with + | "+", + Pexp_constant({pconst_desc = Pconst_integer _ as desc; pconst_loc=_}), + [] + | ("+" | "+."), + Pexp_constant({pconst_desc = Pconst_float _ as desc; pconst_loc=_}), + [] -> + Pexp_constant(mkconst ~loc:sloc desc) | _ -> Pexp_apply(mkoperator ~loc:oploc ("~" ^ name), [Nolabel, arg]) +let mk_attr ~loc name payload = + Attr.mk ~loc name payload + (* TODO define an abstraction boundary between locations-as-pairs and locations-as-Location.t; it should be clear when we move from one world to the other *) @@ -190,7 +199,9 @@ let rec mktailexp nilloc = let open Location in function | e1 :: el -> let exp_el, el_loc = mktailexp nilloc el in let loc = (e1.pexp_loc.loc_start, snd el_loc) in - let arg = ghexp ~loc (Pexp_tuple [e1; ghexp ~loc:el_loc exp_el]) in + let arg = + ghexp ~loc (Pexp_tuple [None, e1; None, ghexp ~loc:el_loc exp_el]) + in ghexp_cons_desc loc arg, loc let rec mktailpat nilloc = let open Location in function @@ -200,17 +211,22 @@ let rec mktailpat nilloc = let open Location in function | p1 :: pl -> let pat_pl, el_loc = mktailpat nilloc pl in let loc = (p1.ppat_loc.loc_start, snd el_loc) in - let arg = ghpat ~loc (Ppat_tuple [p1; ghpat ~loc:el_loc pat_pl]) in + let arg = + ghpat ~loc + (Ppat_tuple ([None, p1; None, ghpat ~loc:el_loc pat_pl], Closed)) + in ghpat_cons_desc loc arg, loc let mkstrexp e attrs = { pstr_desc = Pstr_eval (e, attrs); pstr_loc = e.pexp_loc } -let mkexp_constraint ~loc e (t1, t2) = - match t1, t2 with - | Some t, None -> mkexp ~loc (Pexp_constraint(e, t)) - | _, Some t -> mkexp ~loc (Pexp_coerce(e, t1, t)) - | None, None -> assert false +let mkexp_desc_constraint e t = + match t with + | Pconstraint t -> Pexp_constraint(e, t) + | Pcoerce(t1, t2) -> Pexp_coerce(e, t1, t2) + +let mkexp_constraint ~loc e t = + mkexp ~loc (mkexp_desc_constraint e t) let mkexp_opt_constraint ~loc e = function | None -> e @@ -298,9 +314,12 @@ type ('dot,'index) array_family = { } -let bigarray_untuplify = function - { pexp_desc = Pexp_tuple explist; pexp_loc = _ } -> explist - | exp -> [exp] +let bigarray_untuplify exp = + match exp.pexp_desc with + | Pexp_tuple explist + when List.for_all (fun (l, _) -> Option.is_none l) explist -> + List.map snd explist + | _ -> [exp] let builtin_arraylike_name loc _ ~assign paren_kind n = let opname = if assign then "set" else "get" in @@ -316,8 +335,8 @@ let builtin_arraylike_name loc _ ~assign paren_kind n = | Two -> "Array2" | Three -> "Array3" | Many -> "Genarray" in - Ldot(Lident "Bigarray", submodule_name) in - ghloc ~loc (Ldot(prefix,opname)) + Ldot(mknoloc (Lident "Bigarray"), mknoloc submodule_name) in + ghloc ~loc (Ldot(mknoloc prefix, mknoloc opname)) let builtin_arraylike_index loc paren_kind index = match paren_kind with | Paren | Bracket -> One, [Nolabel, index] @@ -347,7 +366,7 @@ let user_indexing_operator_name loc (prefix,ext) ~assign paren_kind n = String.concat "" ["."; ext; left; mid; right; assign] in let lid = match prefix with | None -> Lident name - | Some p -> Ldot(p,name) in + | Some p -> Ldot(mknoloc p,mknoloc name) in ghloc ~loc lid let user_index loc _ index = @@ -376,9 +395,9 @@ let indexop_unclosed_error loc_s s loc_e = let left, right = paren_to_strings s in unclosed left loc_s right loc_e -let lapply ~loc p1 p2 = +let lapply ~loc p1 loc_p1 p2 loc_p2 = if !Clflags.applicative_functors - then Lapply(p1, p2) + then Lapply(mkrhs p1 loc_p1, mkrhs p2 loc_p2) else raise (Syntaxerr.Error( Syntaxerr.Applicative_path (make_loc loc))) @@ -416,33 +435,28 @@ let wrap_type_annotation ~loc newtypes core_type body = let exp = mk_newtypes newtypes exp in (exp, ghtyp(Ptyp_poly(newtypes, Typ.varify_constructors newtypes core_type))) -let wrap_exp_attrs ~loc body (ext, attrs) = - let ghexp = ghexp ~loc in +let pexp_extension ~id e = Pexp_extension (id, PStr [mkstrexp e []]) + +let mkexp_attrs ~loc desc (ext, attrs) = (* todo: keep exact location for the entire attribute *) - let body = {body with pexp_attributes = attrs @ body.pexp_attributes} in match ext with - | None -> body - | Some id -> ghexp(Pexp_extension (id, PStr [mkstrexp body []])) + | None -> mkexp ~loc ~attrs desc + | Some id -> + mkexp ~loc (pexp_extension ~id (ghexp ~loc ~attrs desc)) -let mkexp_attrs ~loc d attrs = - wrap_exp_attrs ~loc (mkexp ~loc d) attrs - -let wrap_typ_attrs ~loc typ (ext, attrs) = +let mktyp_attrs ~loc desc (ext, attrs) = (* todo: keep exact location for the entire attribute *) - let typ = {typ with ptyp_attributes = attrs @ typ.ptyp_attributes} in match ext with - | None -> typ - | Some id -> ghtyp ~loc (Ptyp_extension (id, PTyp typ)) + | None -> mktyp ~loc ~attrs desc + | Some id -> + mktyp ~loc (Ptyp_extension (id, PTyp (ghtyp ~loc ~attrs desc))) -let wrap_pat_attrs ~loc pat (ext, attrs) = +let mkpat_attrs ~loc desc (ext, attrs) = (* todo: keep exact location for the entire attribute *) - let pat = {pat with ppat_attributes = attrs @ pat.ppat_attributes} in match ext with - | None -> pat - | Some id -> ghpat ~loc (Ppat_extension (id, PPat (pat, None))) - -let mkpat_attrs ~loc d attrs = - wrap_pat_attrs ~loc (mkpat ~loc d) attrs + | None -> mkpat ~loc ~attrs desc + | Some id -> + mkpat ~loc (Ppat_extension (id, PPat (ghpat ~loc ~attrs desc, None))) let wrap_class_attrs ~loc:_ body attrs = {body with pcl_attributes = attrs @ body.pcl_attributes} @@ -451,25 +465,20 @@ let wrap_mod_attrs ~loc:_ attrs body = let wrap_mty_attrs ~loc:_ attrs body = {body with pmty_attributes = attrs @ body.pmty_attributes} -let wrap_str_ext ~loc body ext = - match ext with - | None -> body - | Some id -> ghstr ~loc (Pstr_extension ((id, PStr [body]), [])) - let wrap_mkstr_ext ~loc (item, ext) = - wrap_str_ext ~loc (mkstr ~loc item) ext - -let wrap_sig_ext ~loc body ext = match ext with - | None -> body - | Some id -> ghsig ~loc (Psig_extension ((id, PSig [body]), [])) + | None -> mkstr ~loc item + | Some id -> mkstr ~loc (Pstr_extension ((id, PStr [ghstr ~loc item]), [])) let wrap_mksig_ext ~loc (item, ext) = - wrap_sig_ext ~loc (mksig ~loc item) ext + match ext with + | None -> mksig ~loc item + | Some id -> mksig ~loc (Psig_extension ((id, PSig [ghsig ~loc item]), [])) let mk_quotedext ~loc (id, idloc, str, strloc, delim) = let exp_id = mkloc id idloc in - let e = ghexp ~loc (Pexp_constant (Pconst_string (str, strloc, delim))) in + let const = Const.mk ~loc:strloc (Pconst_string (str, strloc, delim)) in + let e = ghexp ~loc (Pexp_constant const) in (exp_id, PStr [mkstrexp e []]) let text_str pos = Str.text (rhs_text pos) @@ -581,6 +590,69 @@ let class_of_let_bindings ~loc lbs body = assert (lbs.lbs_extension = None); mkclass ~loc (Pcl_let (lbs.lbs_rec, List.rev bindings, body)) +(* If all the parameters are [Pparam_newtype x], then return [Some xs] where + [xs] is the corresponding list of values [x]. This function is optimized for + the common case, where a list of parameters contains at least one value + parameter. +*) +let all_params_as_newtypes = + let is_newtype { pparam_desc; _ } = + match pparam_desc with + | Pparam_newtype _ -> true + | Pparam_val _ -> false + in + let as_newtype { pparam_desc; pparam_loc } = + match pparam_desc with + | Pparam_newtype x -> Some (x, pparam_loc) + | Pparam_val _ -> None + in + fun params -> + if List.for_all is_newtype params + then Some (List.filter_map as_newtype params) + else None + +(* Given a construct [fun (type a b c) : t -> e], we construct + [Pexp_newtype(a, Pexp_newtype(b, Pexp_newtype(c, Pexp_constraint(e, t))))] + rather than a [Pexp_function]. +*) +let mkghost_newtype_function_body newtypes body_constraint body = + let wrapped_body = + match body_constraint with + | None -> body + | Some body_constraint -> + let loc = { body.pexp_loc with loc_ghost = true } in + Exp.mk (mkexp_desc_constraint body body_constraint) ~loc + in + let expr = + List.fold_right + (fun (newtype, newtype_loc) e -> + (* Mints a ghost location that approximates the newtype's "extent" as + being from the start of the newtype param until the end of the + function body. + *) + let loc = (newtype_loc.Location.loc_start, body.pexp_loc.loc_end) in + ghexp (Pexp_newtype (newtype, e)) ~loc) + newtypes + wrapped_body + in + expr.pexp_desc + +let mkfunction params body_constraint body = + match body with + | Pfunction_cases _ -> Pexp_function (params, body_constraint, body) + | Pfunction_body body_exp -> + (* If all the params are newtypes, then we don't create a function node; + we create nested newtype nodes. *) + match all_params_as_newtypes params with + | None -> Pexp_function (params, body_constraint, body) + | Some newtypes -> + mkghost_newtype_function_body newtypes body_constraint body_exp + +let mk_functor_typ args mty = + List.fold_left (fun acc (startpos, arg) -> + mkmty ~loc:(startpos, mty.pmty_loc.loc_end) (Pmty_functor (arg, acc))) + mty args + (* Alternatively, we could keep the generic module type in the Parsetree and extract the package type during type-checking. In that case, the assertions below should be turned into explicit checks. *) @@ -592,11 +664,11 @@ let package_type_of_module_type pmty = | Pwith_type (lid, ptyp) -> let loc = ptyp.ptype_loc in if ptyp.ptype_params <> [] then - err loc "parametrized types are not supported"; + err loc Syntaxerr.Parameterized_types; if ptyp.ptype_cstrs <> [] then - err loc "constrained types are not supported"; + err loc Syntaxerr.Constrained_types; if ptyp.ptype_private <> Public then - err loc "private types are not supported"; + err loc Syntaxerr.Private_types; (* restrictions below are checked by the 'with_constraint' rule *) assert (ptyp.ptype_kind = Ptype_abstract); @@ -608,15 +680,14 @@ let package_type_of_module_type pmty = in (lid, ty) | _ -> - err pmty.pmty_loc "only 'with type t =' constraints are supported" + err pmty.pmty_loc Not_with_type in match pmty with | {pmty_desc = Pmty_ident lid} -> (lid, [], pmty.pmty_attributes) | {pmty_desc = Pmty_with({pmty_desc = Pmty_ident lid}, cstrs)} -> (lid, List.map map_cstr cstrs, pmty.pmty_attributes) | _ -> - err pmty.pmty_loc - "only module type identifier and 'with type' constraints are supported" + err pmty.pmty_loc Neither_identifier_nor_with_type let mk_directive_arg ~loc k = { pdira_desc = k; @@ -667,6 +738,7 @@ let mk_directive ~loc name arg = %token DOT "." %token DOTDOT ".." %token DOWNTO "downto" +%token EFFECT "effect" %token ELSE "else" %token END "end" %token EOF "" @@ -680,8 +752,8 @@ let mk_directive ~loc name arg = %token FUNCTION "function" %token FUNCTOR "functor" %token GREATER ">" -%token SLASHGREATER "/>" %token GREATERRBRACE ">}" +%token SLASHGREATER "/>" %token GREATERRBRACKET ">]" %token IF "if" %token IN "in" @@ -778,6 +850,11 @@ let mk_directive ~loc name arg = %token EOL "\\n" (* not great, but EOL is unused *) +(* see the [metaocaml_expr] comment *) +%token METAOCAML_ESCAPE ".~" +%token METAOCAML_BRACKET_OPEN ".<" +%token METAOCAML_BRACKET_CLOSE ">." + /* Precedences and associativities. Tokens and rules have precedences. A reduce/reduce conflict is resolved @@ -815,7 +892,7 @@ The precedences must be listed from low to high. %nonassoc AS %left BAR /* pattern (p|p|p) */ %nonassoc below_COMMA -%left COMMA /* expr/expr_comma_list (e,e,e) */ +%left COMMA /* expr/labeled_tuple (e,e,e) */ %right MINUSGREATER /* function_type (t -> t -> t) */ %right OR BARBAR /* expr (e || e || e) */ %right AMPERSAND AMPERAMPER /* expr (e && e && e) */ @@ -840,9 +917,9 @@ The precedences must be listed from low to high. %nonassoc BACKQUOTE BANG BEGIN CHAR FALSE FLOAT INT OBJECT LBRACE LBRACELESS LBRACKET LBRACKETBAR LIDENT LPAREN NEW PREFIXOP STRING TRUE UIDENT - LBRACKETPERCENT QUOTED_STRING_EXPR JSX_LIDENT JSX_UIDENT - + LBRACKETPERCENT QUOTED_STRING_EXPR + METAOCAML_BRACKET_OPEN METAOCAML_ESCAPE /* Entry points */ @@ -1002,6 +1079,27 @@ reversed_nonempty_llist(X): xs = rev(reversed_nonempty_llist(X)) { xs } +(* [reversed_nonempty_concat(X)] recognizes a nonempty sequence of [X]s (each of + which is a list), and produces an OCaml list of their concatenation in + reverse order -- that is, the last element of the last list in the input text + appears first in the list. +*) +reversed_nonempty_concat(X): + x = X + { List.rev x } +| xs = reversed_nonempty_concat(X) x = X + { List.rev_append x xs } + +(* [nonempty_concat(X)] recognizes a nonempty sequence of [X]s + (each of which is a list), and produces an OCaml list of their concatenation + in direct order -- that is, the first element of the first list in the input + text appears first in the list. +*) + +%inline nonempty_concat(X): + xs = rev(reversed_nonempty_concat(X)) + { xs } + (* [reversed_separated_nonempty_llist(separator, X)] recognizes a nonempty list of [X]s, separated with [separator]s, and produces an OCaml list in reverse order -- that is, the last element in the input text appears first in this @@ -1616,11 +1714,11 @@ module_type: | FUNCTOR attrs = attributes args = functor_args MINUSGREATER mty = module_type %prec below_WITH - { wrap_mty_attrs ~loc:$sloc attrs ( - List.fold_left (fun acc (startpos, arg) -> - mkmty ~loc:(startpos, $endpos) (Pmty_functor (arg, acc)) - ) mty args - ) } + { wrap_mty_attrs ~loc:$sloc attrs (mk_functor_typ args mty) } + | args = functor_args + MINUSGREATER mty = module_type + %prec below_WITH + { mk_functor_typ args mty } | MODULE TYPE OF attributes module_expr %prec below_LBRACKETAT { mkmty ~loc:$sloc ~attrs:$4 (Pmty_typeof $5) } | LPAREN module_type RPAREN @@ -1632,8 +1730,6 @@ module_type: | mkmty( mkrhs(mty_longident) { Pmty_ident $1 } - | LPAREN RPAREN MINUSGREATER module_type - { Pmty_functor(Unit, $4) } | module_type MINUSGREATER module_type %prec below_WITH { Pmty_functor(Named (mknoloc None, $1), $3) } @@ -2073,8 +2169,8 @@ class_signature: class_self_type: LPAREN core_type RPAREN { $2 } - | mktyp((* empty *) { Ptyp_any }) - { $1 } + | (* empty *) + { ghtyp ~loc:$sloc Ptyp_any } ; %inline class_sig_fields: flatten(text_csig(class_sig_field)*) @@ -2202,16 +2298,45 @@ class_type_declarations: /* Core expressions */ -seq_expr: - | expr %prec below_SEMI { $1 } - | expr SEMI { $1 } - | mkexp(expr SEMI seq_expr +%inline or_function(EXPR): + | EXPR + { $1 } + | FUNCTION ext_attributes match_cases + { let loc = make_loc $sloc in + let cases = $3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:$sloc desc $2 + } +; + +(* [fun_seq_expr] (and [fun_expr]) are legal expression bodies of a function. + [seq_expr] (and [expr]) are expressions that appear in other contexts + (e.g. subexpressions of the expression body of a function). + + [fun_seq_expr] can't be a bare [function _ -> ...]. [seq_expr] can. + + This distinction exists because [function _ -> ...] is parsed as a *function + cases* body of a function, not an expression body. This so functions can be + parsed with the intended arity. +*) +fun_seq_expr: + | fun_expr %prec below_SEMI { $1 } + | fun_expr SEMI { $1 } + | mkexp(fun_expr SEMI seq_expr { Pexp_sequence($1, $3) }) { $1 } - | expr SEMI PERCENT attr_id seq_expr - { let seq = mkexp ~loc:$sloc (Pexp_sequence ($1, $5)) in - let payload = PStr [mkstrexp seq []] in - mkexp ~loc:$sloc (Pexp_extension ($4, payload)) } + | fun_expr SEMI PERCENT attr_id seq_expr + { mkexp_attrs ~loc:$sloc (Pexp_sequence ($1, $5)) (Some $4, []) } +; +seq_expr: + | or_function(fun_seq_expr) { $1 } ; labeled_simple_pattern: QUESTION LPAREN label_let_pattern opt_default RPAREN @@ -2283,10 +2408,10 @@ let_pattern: %inline qualified_dotop: ioption(DOT mod_longident {$2}) DOTOP { $1, $2 }; -expr: +fun_expr: simple_expr %prec below_HASH { $1 } - | expr_attrs + | fun_expr_attrs { let desc, attrs = $1 in mkexp_attrs ~loc:$sloc desc attrs } | mkexp(expr_) @@ -2299,8 +2424,9 @@ expr: 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}) } - | expr COLONCOLON expr - { mkexp_cons ~loc:$sloc $loc($2) (ghexp ~loc:$sloc (Pexp_tuple[$1;$3])) } + | fun_expr COLONCOLON expr + { mkexp_cons ~loc:$sloc $loc($2) + (ghexp ~loc:$sloc (Pexp_tuple[None,$1;None,$3])) } | mkrhs(label) LESSMINUS expr { mkexp ~loc:$sloc (Pexp_setinstvar($1, $3)) } | simple_expr DOT mkrhs(label_longident) LESSMINUS expr @@ -2309,14 +2435,17 @@ expr: { mk_indexop_expr builtin_indexing_operators ~loc:$sloc $1 } | indexop_expr(qualified_dotop, expr_semi_list, LESSMINUS v=expr {Some v}) { mk_indexop_expr user_indexing_operators ~loc:$sloc $1 } - | expr attribute + | fun_expr attribute { Exp.attr $1 $2 } /* BEGIN AVOID */ | UNDERSCORE { not_expecting $loc($1) "wildcard \"_\"" } /* END AVOID */ ; -%inline expr_attrs: +%inline expr: + | or_function(fun_expr) { $1 } +; +%inline fun_expr_attrs: | LET MODULE ext_attributes mkrhs(module_name) module_binding_body IN seq_expr { Pexp_letmodule($4, $5, $7), $3 } | LET EXCEPTION ext_attributes let_exception_declaration IN seq_expr @@ -2325,13 +2454,12 @@ expr: { 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 } - | FUNCTION ext_attributes match_cases - { Pexp_function $3, $2 } - | FUN ext_attributes labeled_simple_pattern fun_def - { let (l,o,p) = $3 in - Pexp_fun(l, o, p, $4), $2 } - | FUN ext_attributes LPAREN TYPE lident_list RPAREN fun_def - { (mk_newtypes ~loc:$sloc $5 $7).pexp_desc, $2 } + /* Cf #5939: we used to accept (fun p when e0 -> e) */ + | FUN ext_attributes fun_params preceded(COLON, atomic_type)? + MINUSGREATER fun_body + { let body_constraint = Option.map (fun x -> Pconstraint x) $4 in + mkfunction $3 body_constraint $6, $2 + } | MATCH ext_attributes seq_expr WITH match_cases { Pexp_match($3, $5), $2 } | TRY ext_attributes seq_expr WITH match_cases @@ -2361,18 +2489,18 @@ expr: %inline expr_: | simple_expr nonempty_llist(labeled_simple_expr) { Pexp_apply($1, $2) } - | expr_comma_list %prec below_COMMA + | labeled_tuple %prec below_COMMA { Pexp_tuple($1) } | mkrhs(constr_longident) simple_expr %prec below_HASH { Pexp_construct($1, Some $2) } | name_tag simple_expr %prec below_HASH { Pexp_variant($1, Some $2) } - | e1 = expr op = op(infix_operator) e2 = expr + | e1 = fun_expr op = op(infix_operator) e2 = expr { mkinfix e1 op e2 } | subtractive expr %prec prec_unary_minus - { mkuminus ~oploc:$loc($1) $1 $2 } + { mkuminus ~sloc:$sloc ~oploc:$loc($1) $1 $2 } | additive expr %prec prec_unary_plus - { mkuplus ~oploc:$loc($1) $1 $2 } + { mkuplus ~sloc:$sloc ~oploc:$loc($1) $1 $2 } ; simple_expr: @@ -2388,6 +2516,7 @@ simple_expr: { mk_indexop_expr user_indexing_operators ~loc:$sloc $1 } | indexop_error (DOT, seq_expr) { $1 } | indexop_error (qualified_dotop, expr_semi_list) { $1 } + | metaocaml_expr { $1 } | simple_expr_attrs { let desc, attrs = $1 in mkexp_attrs ~loc:$sloc desc attrs } @@ -2405,9 +2534,9 @@ simple_expr: | NEW ext_attributes mkrhs(class_longident) { Pexp_new($3), $2 } | LPAREN MODULE ext_attributes module_expr RPAREN - { Pexp_pack $4, $3 } - | LPAREN MODULE ext_attributes module_expr COLON package_type RPAREN - { Pexp_constraint (ghexp ~loc:$sloc (Pexp_pack $4), $6), $3 } + { Pexp_pack ($4, None), $3 } + | LPAREN MODULE ext_attributes module_expr COLON package_type_ RPAREN + { Pexp_pack ($4, Some $6), $3 } | LPAREN MODULE ext_attributes module_expr COLON error { unclosed "(" $loc($1) ")" $loc($6) } | OBJECT ext_attributes class_structure END @@ -2415,6 +2544,23 @@ simple_expr: | OBJECT ext_attributes class_structure error { unclosed "object" $loc($1) "end" $loc($4) } ; + +(* We include this parsing rule from the BER-MetaOCaml patchset + (see https://okmij.org/ftp/ML/MetaOCaml.html) + even though the lexer does *not* include any lexing rule + for the METAOCAML_* tokens, so they + will never be produced by the upstream compiler. + + The intention of this dead parsing rule is purely to ease the + future maintenance work on MetaOCaml. +*) +%inline metaocaml_expr: + | METAOCAML_ESCAPE e = simple_expr + { mkexp ~loc:$sloc (pexp_extension ~id:(mknoloc "metaocaml.escape") e) } + | METAOCAML_BRACKET_OPEN e = seq_expr METAOCAML_BRACKET_CLOSE + { mkexp ~loc:$sloc (pexp_extension ~id:(mknoloc "metaocaml.bracket") e) } +; + %inline simple_expr_: | mkrhs(val_longident) { Pexp_ident ($1) } @@ -2494,10 +2640,10 @@ simple_expr: LBRACKET expr_semi_list error { unclosed "[" $loc($3) "]" $loc($5) } | od=open_dot_declaration DOT LPAREN MODULE ext_attributes module_expr COLON - package_type RPAREN + ptyp = package_type_ RPAREN { let modexp = mkexp_attrs ~loc:($startpos($3), $endpos) - (Pexp_constraint (ghexp ~loc:$sloc (Pexp_pack $6), $8)) $5 in + (Pexp_pack ($6, Some ptyp)) $5 in Pexp_open(od, modexp) } | mod_longident DOT LPAREN MODULE ext_attributes module_expr COLON error @@ -2510,9 +2656,9 @@ jsx_element: mkexp ~loc children in Jsx_helper.make_jsx_element () ~raise ~loc:$loc(tag) ~tag ~end_tag:None ~props ~children } - | tag=jsx_longident(JSX_UIDENT, JSX_LIDENT) props=llist(jsx_prop) + | tag=jsx_longident(JSX_UIDENT, JSX_LIDENT) props=llist(jsx_prop) GREATER children=llist(simple_expr) end_tag=jsx_longident(JSX_UIDENT_E, JSX_LIDENT_E) end_tag_=GREATER { - let children = + let children = let children, loc = mktailexp $loc(children) children in mkexp ~loc children in @@ -2558,10 +2704,9 @@ let_binding_body_no_punning: { let v = $1 in (* PR#7344 *) let t = match $2 with - Some t, None -> + Pconstraint t -> Pvc_constraint { locally_abstract_univars = []; typ=t } - | ground, Some coercion -> Pvc_coercion { ground; coercion} - | _ -> assert false + | Pcoerce (ground, coercion) -> Pvc_coercion { ground; coercion} in (v, $4, Some t) } @@ -2643,19 +2788,26 @@ letop_bindings: let and_ = {pbop_op; pbop_pat; pbop_exp; pbop_loc} in let_pat, let_exp, and_ :: rev_ands } ; -fun_binding: - strict_binding - { $1 } - | type_constraint EQUAL seq_expr - { mkexp_constraint ~loc:$sloc $3 $1 } -; strict_binding: EQUAL seq_expr { $2 } - | labeled_simple_pattern fun_binding - { let (l, o, p) = $1 in ghexp ~loc:$sloc (Pexp_fun(l, o, p, $2)) } - | LPAREN TYPE lident_list RPAREN fun_binding - { mk_newtypes ~loc:$sloc $3 $5 } + | fun_params type_constraint? EQUAL fun_body + { ghexp ~loc:$sloc (mkfunction $1 $2 $4) + } +; +fun_body: + | FUNCTION ext_attributes match_cases + { let ext, attrs = $2 in + match ext with + | None -> Pfunction_cases ($3, make_loc $sloc, attrs) + | Some _ -> + (* function%foo extension nodes interrupt the arity *) + let cases = Pfunction_cases ($3, make_loc $sloc, []) in + Pfunction_body + (mkexp_attrs ~loc:$sloc (mkfunction [] None cases) $2) + } + | fun_seq_expr + { Pfunction_body $1 } ; %inline match_cases: xs = preceded_or_separated_nonempty_llist(BAR, match_case) @@ -2669,24 +2821,107 @@ match_case: | pattern MINUSGREATER DOT { Exp.case $1 (Exp.unreachable ~loc:(make_loc $loc($3)) ()) } ; -fun_def: - MINUSGREATER seq_expr - { $2 } - | mkexp(COLON atomic_type MINUSGREATER seq_expr - { Pexp_constraint ($4, $2) }) - { $1 } -/* Cf #5939: we used to accept (fun p when e0 -> e) */ - | labeled_simple_pattern fun_def - { - let (l,o,p) = $1 in - ghexp ~loc:$sloc (Pexp_fun(l, o, p, $2)) +fun_param_as_list: + | LPAREN TYPE ty_params = lident_list RPAREN + { (* We desugar (type a b c) to (type a) (type b) (type c). + If we do this desugaring, the loc for each parameter is a ghost. + *) + let loc = + match ty_params with + | [] -> assert false (* lident_list is non-empty *) + | [_] -> make_loc $sloc + | _ :: _ :: _ -> ghost_loc $sloc + in + List.map + (fun x -> { pparam_loc = loc; pparam_desc = Pparam_newtype x }) + ty_params + } + | labeled_simple_pattern + { let a, b, c = $1 in + [ { pparam_loc = make_loc $sloc; pparam_desc = Pparam_val (a, b, c) } ] } - | LPAREN TYPE lident_list RPAREN fun_def - { mk_newtypes ~loc:$sloc $3 $5 } ; -%inline expr_comma_list: - es = separated_nontrivial_llist(COMMA, expr) - { es } +fun_params: + | nonempty_concat(fun_param_as_list) { $1 } +; + +(* Parsing labeled tuple expressions: + + The grammar we want to parse is something like: + + labeled_tuple_element := expr | ~x:expr | ~x | ~(x:ty) + labeled_tuple := lt_element [, lt_element]+ + + (The last case of [labeled_tuple_element] is a punned label with a type + constraint, which is allowed for functions, so we allow it here). + + So you might think [labeled_tuple] could therefore just be: + + labeled_tuple : + separated_nontrivial_llist(COMMA, labeled_tuple_element) + + But this doesn't work: + + - If we don't mark [labeled_tuple_element] %inline, this causes many + reduce/reduce conflicts (basically just ambiguities) because + [labeled_tuple_element] trivially reduces to [expr]. + + - If we do mark [labeled_tuple_element] %inline, it is not allowed to have + %prec annotations. Menhir doesn't permit these on %inline non-terminals + that are used in non-tail position. + + To get around this, we do mark it inlined, and then because we can only use + it in tail position it is _manually_ inlined into the occurrences in + [separated_nontrivial_llist] where it doesn't appear in tail position. This + results in [labeled_tuple] and [reversed_labeled_tuple_body] below. So the + latter is just a list of comma-separated labeled tuple elements, with length + at least two, where the first element in the base case is inlined (resulting + in one base case for each case of [labeled_tuple_element]. *) +%inline labeled_tuple_element : + | expr + { None, $1 } + | LABEL simple_expr %prec below_HASH + { Some $1, $2 } + | TILDE label = LIDENT + { let loc = $loc(label) in + Some label, mkexpvar ~loc label } + | TILDE LPAREN label = LIDENT c = type_constraint RPAREN %prec below_HASH + { Some label, + mkexp_constraint ~loc:($startpos($2), $endpos) + (mkexpvar ~loc:$loc(label) label) c } +; +reversed_labeled_tuple_body: + (* > 2 elements *) + xs = reversed_labeled_tuple_body + COMMA + x = labeled_tuple_element + { x :: xs } + (* base cases (2 elements) *) +| x1 = expr + COMMA + x2 = labeled_tuple_element + { [ x2; None, x1 ] } +| l1 = LABEL x1 = simple_expr + COMMA + x2 = labeled_tuple_element + { [ x2; Some l1, x1 ] } +| TILDE l1 = LIDENT + COMMA + x2 = labeled_tuple_element + { let loc = $loc(l1) in + [ x2; Some l1, mkexpvar ~loc l1] } +| TILDE LPAREN l1 = LIDENT c = type_constraint RPAREN + COMMA + x2 = labeled_tuple_element + { let x1 = + mkexp_constraint ~loc:($startpos($2), $endpos) + (mkexpvar ~loc:$loc(l1) l1) c + in + [ x2; Some l1, x1] } +; +%inline labeled_tuple: + xs = rev(reversed_labeled_tuple_body) + { xs } ; record_expr_content: eo = ioption(terminated(simple_expr, WITH)) @@ -2729,9 +2964,9 @@ record_expr_content: { es } ; type_constraint: - COLON core_type { (Some $2, None) } - | COLON core_type COLONGREATER core_type { (Some $2, Some $4) } - | COLONGREATER core_type { (None, Some $2) } + COLON core_type { Pconstraint $2 } + | COLON core_type COLONGREATER core_type { Pcoerce (Some $2, $4) } + | COLONGREATER core_type { Pcoerce (None, $2) } | COLON error { syntax_error() } | COLONGREATER error { syntax_error() } ; @@ -2762,6 +2997,8 @@ pattern: { $1 } | EXCEPTION ext_attributes pattern %prec prec_constr_appl { mkpat_attrs ~loc:$sloc (Ppat_exception $3) $2} + | EFFECT pattern_gen COMMA simple_pattern + { mkpat ~loc:$sloc (Ppat_effect($2,$4)) } ; pattern_no_exn: @@ -2771,7 +3008,8 @@ pattern_no_exn: %inline pattern_(self): | self COLONCOLON pattern - { mkpat_cons ~loc:$sloc $loc($2) (ghpat ~loc:$sloc (Ppat_tuple[$1;$3])) } + { mkpat_cons ~loc:$sloc $loc($2) + (ghpat ~loc:$sloc (Ppat_tuple ([None, $1; None, $3], Closed))) } | self attribute { Pat.attr $1 $2 } | pattern_gen @@ -2781,8 +3019,8 @@ pattern_no_exn: { Ppat_alias($1, $3) } | self AS error { expecting $loc($3) "identifier" } - | pattern_comma_list(self) %prec below_COMMA - { Ppat_tuple(List.rev $1) } + | labeled_tuple_pattern(self) + { $1 } | self COLONCOLON error { expecting $loc($3) "pattern" } | self BAR pattern @@ -2807,6 +3045,7 @@ pattern_gen: | LAZY ext_attributes simple_pattern { mkpat_attrs ~loc:$sloc (Ppat_lazy $3) $2} ; + simple_pattern: mkpat(mkrhs(val_ident) %prec below_EQUAL { Ppat_var ($1) }) @@ -2887,10 +3126,66 @@ simple_delimited_pattern: { unclosed "[|" $loc($1) "|]" $loc($3) } ) { $1 } -pattern_comma_list(self): - pattern_comma_list(self) COMMA pattern { $3 :: $1 } - | self COMMA pattern { [$3; $1] } - | self COMMA error { expecting $loc($3) "pattern" } +(* Parsing labeled tuple patterns: + + Here we play essentially the same game we did for expressions - see the + comment beginning "Parsing labeled tuple expressions". + + One difference is that we would need to manually inline the definition of + individual elements in two places: Once in the base case for lists 2 or more + elements, and once in the special case for open patterns with just one + element (e.g., [~x, ..]). Rather than manually inlining + [labeled_tuple_pat_element] twice, we simply define it twice: once with the + [%prec] annotations needed for its occurrences in tail position, and once + without them suitable for use in other locations. +*) +%inline labeled_tuple_pat_element(self): + | self { None, $1 } + | LABEL simple_pattern %prec COMMA + { Some $1, $2 } + | TILDE label = LIDENT + { let loc = $loc(label) in + Some label, mkpatvar ~loc label } + | TILDE LPAREN label = LIDENT COLON cty = core_type RPAREN %prec COMMA + { let lbl_loc = $loc(label) in + let pat_loc = $startpos($2), $endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) } +; +(* If changing this, don't forget to change its copy just above. *) +%inline labeled_tuple_pat_element_noprec(self): + | self { None, $1 } + | LABEL simple_pattern + { Some $1, $2 } + | TILDE label = LIDENT + { let loc = $loc(label) in + Some label, mkpatvar ~loc label } + | TILDE LPAREN label = LIDENT COLON cty = core_type RPAREN + { let lbl_loc = $loc(label) in + let pat_loc = $startpos($2), $endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) } +; +labeled_tuple_pat_element_list(self): + | labeled_tuple_pat_element_list(self) COMMA labeled_tuple_pat_element(self) + { $3 :: $1 } + | labeled_tuple_pat_element_noprec(self) COMMA labeled_tuple_pat_element(self) + { [ $3; $1 ] } + | self COMMA error + { expecting $loc($3) "pattern" } +; +reversed_labeled_tuple_pattern(self): + | labeled_tuple_pat_element_list(self) %prec below_COMMA + { Closed, $1 } + | labeled_tuple_pat_element_list(self) COMMA DOTDOT + { Open, $1 } + | labeled_tuple_pat_element_noprec(self) COMMA DOTDOT + { Open, [ $1 ] } +; +labeled_tuple_pattern(self): + | reversed_labeled_tuple_pattern(self) + { let closed, pat = $1 in + Ppat_tuple(List.rev pat, closed) } ; %inline pattern_semi_list: ps = separated_or_terminated_nonempty_list(SEMI, pattern) @@ -3100,10 +3395,16 @@ type_variance: | INFIXOP2 { if $1 = "+!" then Covariant, Injective else if $1 = "-!" then Contravariant, Injective else + if $1 = "+-" then Bivariant, NoInjectivity else + if $1 = "-+" then Bivariant, NoInjectivity else + if $1 = "+-!" then Bivariant, Injective else + if $1 = "-+!" then Bivariant, Injective else expecting $loc($1) "type_variance" } | PREFIXOP { if $1 = "!+" then Covariant, Injective else if $1 = "!-" then Contravariant, Injective else + if $1 = "!+-" then Bivariant, Injective else + if $1 = "!-+" then Bivariant, Injective else expecting $loc($1) "type_variance" } ; @@ -3155,7 +3456,7 @@ str_exception_declaration: attrs = post_item_attributes { let loc = make_loc $sloc in let docs = symbol_docs $sloc in - Te.mk_exception ~attrs + Te.mk_exception ~attrs ~loc (Te.rebind id lid ~attrs:(attrs1 @ attrs2) ~loc ~docs) , ext } ; @@ -3170,7 +3471,7 @@ sig_exception_declaration: { 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.mk_exception ~attrs ~loc (Te.decl id ~vars ~args ?res ~attrs:(attrs1 @ attrs2) ~loc ~docs) , ext } ; @@ -3243,7 +3544,8 @@ label_declaration_semi: attrs2 = post_item_attributes { let docs = symbol_docs $sloc in let attrs = attrs1 @ attrs2 in - Te.mk tid cs ~params ~priv ~attrs ~docs, + let loc = make_loc $sloc in + Te.mk tid cs ~params ~priv ~attrs ~docs ~loc, ext } ; %inline extension_constructor(opening): @@ -3311,8 +3613,8 @@ with_type_binder: /* Polymorphic types */ %inline typevar: - QUOTE mkrhs(ident) - { $2 } + QUOTE ident + { mkrhs $2 $sloc } ; %inline typevar_list: nonempty_llist(typevar) @@ -3366,7 +3668,7 @@ alias_type: function_type { $1 } | mktyp( - ty = alias_type AS QUOTE tyvar = ident + ty = alias_type AS tyvar = typevar { Ptyp_alias(ty, tyvar) } ) { $1 } @@ -3390,6 +3692,34 @@ function_type: { Ptyp_arrow(label, domain, codomain) } ) { $1 } + (* The next two cases are for labled tuples - see comment on [tuple_type] + below. + + The first case is present just to resolve a shift/reduce conflict in a + module type [S with t := x:t1 * t2 -> ...] which might be the beginning of + [S with t := x:t1 * t2 -> S'] or [S with t := x:t1 * t2 -> t3] + It is the same as the previous case, but with [arg_label] specialized to + [LIDENT COLON] and the domain type specialized to [proper_tuple_type]. + Apparently, this is sufficient for menhir to be able to delay a decision + about which of the above module type cases we are in. *) + | mktyp( + label = LIDENT COLON + tuple = proper_tuple_type + MINUSGREATER + codomain = function_type + { let ty, ltys = tuple in + let tuple_loc = $loc(tuple) in + let domain = + mktyp ~loc:tuple_loc (Ptyp_tuple ((None, ty) :: ltys)) + in + let domain = extra_rhs_core_type domain ~pos:(snd tuple_loc) in + Ptyp_arrow(Labelled label, domain, codomain) } + ) + { $1 } + | label = LIDENT COLON proper_tuple_type %prec MINUSGREATER + { let ty, ltys = $3 in + mktyp ~loc:$sloc (Ptyp_tuple ((Some label, ty) :: ltys)) + } ; %inline arg_label: | label = optlabel @@ -3403,16 +3733,33 @@ function_type: - atomic types (see below); - proper tuple types: int * int * int list A proper tuple type is a star-separated list of at least two atomic types. - *) + Tuple components can also be labeled, as an [int * int list * y:bool]. + + However, the special case of labeled tuples where the first element has a + label is not parsed as a proper_tuple_type, but rather as a case of + function_type above. This resolves ambiguities around [x:t1 * t2 -> t3] + which must continue to parse as a function with one labeled argument even in + the presence of labled tuples. +*) tuple_type: | ty = atomic_type %prec below_HASH { ty } - | mktyp( - tys = separated_nontrivial_llist(STAR, atomic_type) - { Ptyp_tuple tys } - ) - { $1 } + | proper_tuple_type %prec below_WITH + { let ty, ltys = $1 in + mktyp ~loc:$sloc (Ptyp_tuple ((None, ty) :: ltys)) } +; +%inline proper_tuple_type: + | ty = atomic_type + STAR + ltys = separated_nonempty_llist(STAR, labeled_tuple_typ_element) + { ty, ltys } +; +%inline labeled_tuple_typ_element : + | atomic_type %prec STAR + { None, $1 } + | label = LIDENT COLON ty = atomic_type %prec STAR + { Some label, ty } ; (* Atomic types are the most basic level in the syntax of types. @@ -3423,44 +3770,100 @@ tuple_type: - applications of type constructors: int, int list, int option list - variant types: [`A] *) + + +(* + Delimited types: + - parenthesised type (type) + - first-class module types (module S) + - object types < x: t; ... > + - variant types [ `A ] + - extension [%foo ...] + + We support local opens on the following classes of types: + - parenthesised + - first-class module types + - variant types + + Object types are not support for local opens due to a potential + conflict with MetaOCaml syntax: + M.< x: t, y: t > + and quoted expressions: + .< e >. + + Extension types are not support for local opens merely as a precaution. +*) +delimited_type_supporting_local_open: + | LPAREN type_ = core_type RPAREN + { type_ } + | LPAREN MODULE ext_attrs = ext_attributes package_type = package_type_ RPAREN + { mktyp_attrs ~loc:$sloc (Ptyp_package package_type) ext_attrs } + | mktyp( + LBRACKET field = tag_field RBRACKET + { Ptyp_variant([ field ], Closed, None) } + | LBRACKET BAR fields = row_field_list RBRACKET + { Ptyp_variant(fields, Closed, None) } + | LBRACKET field = row_field BAR fields = row_field_list RBRACKET + { Ptyp_variant(field :: fields, Closed, None) } + | LBRACKETGREATER BAR? fields = row_field_list RBRACKET + { Ptyp_variant(fields, Open, None) } + | LBRACKETGREATER RBRACKET + { Ptyp_variant([], Open, None) } + | LBRACKETLESS BAR? fields = row_field_list RBRACKET + { Ptyp_variant(fields, Closed, Some []) } + | LBRACKETLESS BAR? fields = row_field_list + GREATER + tags = name_tag_list + RBRACKET + { Ptyp_variant(fields, Closed, Some tags) } + ) + { $1 } +; + +object_type: + | mktyp( + LESS meth_list = meth_list GREATER + { let (f, c) = meth_list in Ptyp_object (f, c) } + | LESS GREATER + { Ptyp_object ([], Closed) } + ) + { $1 } +; + +extension_type: + | mktyp ( + ext = extension + { Ptyp_extension ext } + ) + { $1 } +; + +delimited_type: + | object_type + | extension_type + | delimited_type_supporting_local_open + { $1 } +; + atomic_type: - | LPAREN core_type RPAREN - { $2 } - | LPAREN MODULE ext_attributes package_type RPAREN - { wrap_typ_attrs ~loc:$sloc (reloc_typ ~loc:$sloc $4) $3 } + | type_ = delimited_type + { type_ } | mktyp( /* begin mktyp group */ - QUOTE ident - { Ptyp_var $2 } - | UNDERSCORE - { Ptyp_any } - | tys = actual_type_parameters + tys = actual_type_parameters tid = mkrhs(type_longident) - { Ptyp_constr(tid, tys) } - | LESS meth_list GREATER - { let (f, c) = $2 in Ptyp_object (f, c) } - | LESS GREATER - { Ptyp_object ([], Closed) } + { Ptyp_constr (tid, tys) } | tys = actual_type_parameters HASH cid = mkrhs(clty_longident) - { Ptyp_class(cid, tys) } - | LBRACKET tag_field RBRACKET - (* not row_field; see CONFLICTS *) - { Ptyp_variant([$2], Closed, None) } - | LBRACKET BAR row_field_list RBRACKET - { Ptyp_variant($3, Closed, None) } - | LBRACKET row_field BAR row_field_list RBRACKET - { Ptyp_variant($2 :: $4, Closed, None) } - | LBRACKETGREATER BAR? row_field_list RBRACKET - { Ptyp_variant($3, Open, None) } - | LBRACKETGREATER RBRACKET - { Ptyp_variant([], Open, None) } - | LBRACKETLESS BAR? row_field_list RBRACKET - { Ptyp_variant($3, Closed, Some []) } - | LBRACKETLESS BAR? row_field_list GREATER name_tag_list RBRACKET - { Ptyp_variant($3, Closed, Some $5) } - | extension - { Ptyp_extension $1 } + { Ptyp_class (cid, tys) } + | mod_ident = mkrhs(mod_ext_longident) + DOT + type_ = delimited_type_supporting_local_open + { Ptyp_open (mod_ident, type_) } + | QUOTE ident = ident + { Ptyp_var ident } + | UNDERSCORE + { Ptyp_any } ) { $1 } /* end mktyp group */ ; @@ -3479,15 +3882,17 @@ atomic_type: | /* empty */ { [] } | ty = atomic_type - { [ty] } + { [ ty ] } | LPAREN tys = separated_nontrivial_llist(COMMA, core_type) RPAREN { tys } ; -%inline package_type: module_type +%inline package_type_: module_type { let (lid, cstrs, attrs) = package_type_of_module_type $1 in - let descr = Ptyp_package (lid, cstrs) in - mktyp ~loc:$sloc ~attrs descr } + Typ.package_type ~loc:(make_loc $sloc) ~attrs lid cstrs } + +%inline package_type: package_type_ + { mktyp ~loc:$sloc (Ptyp_package $1) } ; %inline row_field_list: separated_nonempty_llist(BAR, row_field) @@ -3565,17 +3970,24 @@ meth_list: /* Constants */ constant: - | INT { let (n, m) = $1 in Pconst_integer (n, m) } - | CHAR { Pconst_char $1 } - | STRING { let (s, strloc, d) = $1 in Pconst_string (s, strloc, d) } - | FLOAT { let (f, m) = $1 in Pconst_float (f, m) } + | INT { let (n, m) = $1 in + mkconst ~loc:$sloc (Pconst_integer (n, m)) } + | CHAR { mkconst ~loc:$sloc (Pconst_char $1) } + | STRING { let (s, strloc, d) = $1 in + mkconst ~loc:$sloc (Pconst_string (s,strloc,d)) } + | FLOAT { let (f, m) = $1 in + mkconst ~loc:$sloc (Pconst_float (f, m)) } ; signed_constant: constant { $1 } - | MINUS INT { let (n, m) = $2 in Pconst_integer("-" ^ n, m) } - | MINUS FLOAT { let (f, m) = $2 in Pconst_float("-" ^ f, m) } - | PLUS INT { let (n, m) = $2 in Pconst_integer (n, m) } - | PLUS FLOAT { let (f, m) = $2 in Pconst_float(f, m) } + | MINUS INT { let (n, m) = $2 in + mkconst ~loc:$sloc (Pconst_integer("-" ^ n, m)) } + | MINUS FLOAT { let (f, m) = $2 in + mkconst ~loc:$sloc (Pconst_float("-" ^ f, m)) } + | PLUS INT { let (n, m) = $2 in + mkconst ~loc:$sloc (Pconst_integer (n, m)) } + | PLUS FLOAT { let (f, m) = $2 in + mkconst ~loc:$sloc (Pconst_float(f, m)) } ; /* Identifiers and long identifiers */ @@ -3651,28 +4063,30 @@ constr_ident: ; constr_longident: mod_longident %prec below_DOT { $1 } /* A.B.x vs (A).B.x */ - | mod_longident DOT constr_extra_ident { Ldot($1,$3) } + | mod_longident DOT constr_extra_ident { ldot $1 $loc($1) $3 $loc($3) } | constr_extra_ident { Lident $1 } | constr_extra_nonprefix_ident { Lident $1 } ; mk_longident(prefix,final): | final { Lident $1 } - | prefix DOT final { Ldot($1,$3) } + | prefix DOT final { ldot $1 $loc($1) $3 $loc($3) } ; jsx_longident(uident, lident): | id = uident { `Module, $sloc, Lident id } | id = lident { `Value, $sloc, Lident id } - | prefix = uident DOT id = mod_longident { + | prefix = uident DOT id = mod_longident { let rec rebase = function - | Lident id -> Ldot (Lident prefix, id) - | Ldot (prefix', id) -> Ldot (rebase prefix', id) + | Lident id -> ldot (Lident prefix) $loc(prefix) id $loc(id) + | Ldot ({txt = prefix'; loc = prefix_loc}, {txt = id; loc = id_loc}) -> + Ldot (mkloc (rebase prefix') prefix_loc, mkloc id id_loc) | Lapply _ -> assert false in `Module, $sloc, rebase id } - | prefix = uident DOT id = val_longident { + | prefix = uident DOT id = val_longident { let rec rebase = function - | Lident id -> Ldot (Lident prefix, id) - | Ldot (prefix', id) -> Ldot (rebase prefix', id) + | Lident id -> ldot (Lident prefix) $loc(prefix) id $loc(id) + | Ldot ({txt = prefix'; loc = prefix_loc}, {txt = id; loc = id_loc}) -> + Ldot (mkloc (rebase prefix') prefix_loc, mkloc id id_loc) | Lapply _ -> assert false in `Value, $sloc, rebase id } @@ -3692,7 +4106,7 @@ mod_longident: mod_ext_longident: mk_longident(mod_ext_longident, UIDENT) { $1 } | mod_ext_longident LPAREN mod_ext_longident RPAREN - { lapply ~loc:$sloc $1 $3 } + { lapply ~loc:$sloc $1 $loc($1) $3 $loc($3) } | mod_ext_longident LPAREN error { expecting $loc($3) "module path" } ; @@ -3851,6 +4265,7 @@ single_attr_id: | DO { "do" } | DONE { "done" } | DOWNTO { "downto" } + | EFFECT { "effect" } | ELSE { "else" } | END { "end" } | EXCEPTION { "exception" } @@ -3901,17 +4316,17 @@ attr_id: ) { $1 } ; attribute: - LBRACKETAT attr_id payload RBRACKET - { Attr.mk ~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 - { Attr.mk ~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; - Attr.mk ~loc:(make_loc $sloc) $2 $3 } + mk_attr ~loc:(make_loc $sloc) $2 $3 } ; %inline post_item_attributes: post_item_attribute* @@ -3922,7 +4337,7 @@ floating_attribute: { $1 } ; ext: - | /* empty */ { None } + | /* empty */ { None } | PERCENT attr_id { Some $2 } ; %inline no_ext: @@ -3951,4 +4366,8 @@ payload: | QUESTION pattern { PPat ($2, None) } | QUESTION pattern WHEN seq_expr { PPat ($2, Some $4) } ; +attr_payload: + payload + { $1 } +; %% diff --git a/mlx/pp.ml b/mlx/pp.ml index bee5892..0aaf80a 100644 --- a/mlx/pp.ml +++ b/mlx/pp.ml @@ -10,7 +10,7 @@ let speclist = module Conv = Ppxlib_ast.Convert - (Ppxlib_ast__Versions.OCaml_501) + (Ppxlib_ast__Versions.OCaml_504) (Ppxlib_ast.Compiler_version) let () = diff --git a/mlx/syntaxerr.ml b/mlx/syntaxerr.ml index df7b8a0..8a326c1 100644 --- a/mlx/syntaxerr.ml +++ b/mlx/syntaxerr.ml @@ -15,6 +15,13 @@ (* Auxiliary type for reporting syntax errors *) +type invalid_package_type = + | Parameterized_types + | Constrained_types + | Private_types + | Not_with_type + | Neither_identifier_nor_with_type + type error = Unclosed of Location.t * string * Location.t * string | Expecting of Location.t * string @@ -23,7 +30,7 @@ type error = | Variable_in_scope of Location.t * string | Other of Location.t | Ill_formed_ast of Location.t * string - | Invalid_package_type of Location.t * string + | Invalid_package_type of Location.t * invalid_package_type | Removed_string_set of Location.t exception Error of error diff --git a/mlx/syntaxerr.mli b/mlx/syntaxerr.mli index 577d536..a84bc66 100644 --- a/mlx/syntaxerr.mli +++ b/mlx/syntaxerr.mli @@ -20,6 +20,13 @@ *) +type invalid_package_type = + | Parameterized_types + | Constrained_types + | Private_types + | Not_with_type + | Neither_identifier_nor_with_type + type error = Unclosed of Location.t * string * Location.t * string | Expecting of Location.t * string @@ -28,7 +35,7 @@ type error = | Variable_in_scope of Location.t * string | Other of Location.t | Ill_formed_ast of Location.t * string - | Invalid_package_type of Location.t * string + | Invalid_package_type of Location.t * invalid_package_type | Removed_string_set of Location.t exception Error of error diff --git a/mlx/utf8_lexeme.ml b/mlx/utf8_lexeme.ml new file mode 100644 index 0000000..2013e39 --- /dev/null +++ b/mlx/utf8_lexeme.ml @@ -0,0 +1,18 @@ +type validation_result = + | Valid + | Invalid_character of Uchar.t + | Invalid_beginning of Uchar.t + +let normalize s = Ok s + +let validate_identifier ?with_dot:_ _name = Valid + +let is_lowercase s = + String.length s > 0 && + let c = Char.code s.[0] in + (c >= 97 && c <= 122) || c = 95 + +let is_capitalized s = + String.length s > 0 && + let c = Char.code s.[0] in + c >= 65 && c <= 90 diff --git a/ocaml b/ocaml index 5717a14..907eec0 160000 --- a/ocaml +++ b/ocaml @@ -1 +1 @@ -Subproject commit 5717a14d0e3dc2b0e41ab94b82977d5761f70ea2 +Subproject commit 907eec0b75c5bcf0fe6da5f4b9f11c5c22995a16 diff --git a/ocamlmerlin-mlx.opam b/ocamlmerlin-mlx.opam index 6e68f7b..98bd626 100644 --- a/ocamlmerlin-mlx.opam +++ b/ocamlmerlin-mlx.opam @@ -8,7 +8,7 @@ doc: "https://url/to/documentation" bug-reports: "https://github.com/ocaml-mlx/mlx/issues" depends: [ "ocaml" {>= "4.14.0"} - "ppxlib" {>= "0.34.0"} + "ppxlib" {>= "0.37.0"} "dune" {>= "3.16"} "merlin-lib" "cppo" diff --git a/ocamlmerlin_mlx/extend/extend_driver.ml b/ocamlmerlin_mlx/extend/extend_driver.ml index 27cfe3c..abe0bf8 100644 --- a/ocamlmerlin_mlx/extend/extend_driver.ml +++ b/ocamlmerlin_mlx/extend/extend_driver.ml @@ -3,37 +3,35 @@ module P = Extend_protocol (** Helper for the driver (Merlin) *) -type t = { - name: string; - capabilities: P.capabilities; - stdin: out_channel; - stdout: in_channel; - mutable pid: int; - - notify: string -> unit; - debug: string -> unit; -} +type t = + { name : string; + capabilities : P.capabilities; + stdin : out_channel; + stdout : in_channel; + mutable pid : int; + notify : string -> unit; + debug : string -> unit + } exception Extension of string * string * string -let run ?(notify=ignore) ?(debug=ignore) name = +let run ?(notify = ignore) ?(debug = ignore) name = let pstdin, stdin = Unix.pipe () in let stdout, pstdout = Unix.pipe () in Unix.set_close_on_exec pstdin; Unix.set_close_on_exec stdin; Unix.set_close_on_exec pstdout; Unix.set_close_on_exec stdout; + let ocamlmerlin_name = "ocamlmerlin-" ^ name in let pid = - Unix.create_process - ("ocamlmerlin-" ^ name) [||] - pstdin pstdout Unix.stderr + Unix.create_process ocamlmerlin_name [| ocamlmerlin_name |] pstdin pstdout Unix.stderr in Unix.close pstdout; Unix.close pstdin; - let stdin = Unix.out_channel_of_descr stdin in + let stdin = Unix.out_channel_of_descr stdin in let stdout = Unix.in_channel_of_descr stdout in match Extend_main.Handshake.negotiate_driver name stdout stdin with - | capabilities -> {name; capabilities; stdin; stdout; pid; notify; debug} + | capabilities -> { name; capabilities; stdin; stdout; pid; notify; debug } | exception exn -> close_out_noerr stdin; close_in_noerr stdout; @@ -42,10 +40,9 @@ let run ?(notify=ignore) ?(debug=ignore) name = let stop t = close_out_noerr t.stdin; close_in_noerr t.stdout; - if t.pid <> -1 then ( + if t.pid <> -1 then let _, _ = Unix.waitpid [] t.pid in - t.pid <- -1; - ) + t.pid <- -1 let capabilities t = t.capabilities @@ -56,12 +53,15 @@ let reader t request = flush t.stdin; let rec aux () = match input_value t.stdout with - | P.Notify str -> t.notify str; aux () - | P.Debug str -> t.debug str; aux () + | P.Notify str -> + t.notify str; + aux () + | P.Debug str -> + t.debug str; + aux () | P.Exception (kind, msg) -> stop t; raise (Extension (t.name, kind, msg)) - | P.Reader_response response -> - response + | P.Reader_response response -> response in aux () diff --git a/ocamlmerlin_mlx/extend/extend_driver.mli b/ocamlmerlin_mlx/extend/extend_driver.mli index 955b445..348b459 100644 --- a/ocamlmerlin_mlx/extend/extend_driver.mli +++ b/ocamlmerlin_mlx/extend/extend_driver.mli @@ -12,6 +12,4 @@ val stop : t -> unit val capabilities : t -> capabilities -val reader : t -> - Reader.request -> - Reader.response +val reader : t -> Reader.request -> Reader.response diff --git a/ocamlmerlin_mlx/extend/extend_helper.ml b/ocamlmerlin_mlx/extend/extend_helper.ml index 27f227a..fba72ce 100644 --- a/ocamlmerlin_mlx/extend/extend_helper.ml +++ b/ocamlmerlin_mlx/extend/extend_helper.ml @@ -5,16 +5,15 @@ open Parsetree Merlin. *) let syntax_error msg loc : extension = let str = Location.mkloc "merlin.syntax-error" loc in - let payload = PStr [{ - pstr_loc = Location.none; - pstr_desc = Pstr_eval ( - Ast_helper.(Exp.constant (const_string msg)), [] - ); - }] + let payload = + PStr + [ { pstr_loc = Location.none; + pstr_desc = + Pstr_eval (Ast_helper.(Exp.constant (const_string msg)), []) + } + ] in (str, payload) -;; - (** Physical locations might be too precise for some features. @@ -38,8 +37,6 @@ let syntax_error msg loc : extension = let relaxed_location loc : attribute = let str = Location.mkloc "merlin.relaxed-location" loc in Ast_helper.Attr.mk str (PStr []) -;; - (** If some code should be ignored by merlin when reporting information to the user, put a hide_node attribute. @@ -73,12 +70,12 @@ let focus_node : attribute = (* Projections for merlin attributes and extensions *) -let classify_extension (id, _ : extension) : [`Other | `Syntax_error] = +let classify_extension ((id, _) : extension) : [ `Other | `Syntax_error ] = match id.Location.txt with | "merlin.syntax-error" -> `Syntax_error | _ -> `Other -let classify_attribute attr : [`Other | `Relaxed_location | `Hide | `Focus] = +let classify_attribute attr : [ `Other | `Relaxed_location | `Hide | `Focus ] = let id, _ = Ast_helper.Attr.as_tuple attr in match id.Location.txt with | "merlin.relaxed-location" -> `Relaxed_location @@ -86,18 +83,20 @@ let classify_attribute attr : [`Other | `Relaxed_location | `Hide | `Focus] = | "merlin.focus" -> `Focus | _ -> `Other -let extract_syntax_error (id, payload : extension) : string * Location.t = +let extract_syntax_error ((id, payload) : extension) : string * Location.t = if id.Location.txt <> "merlin.syntax-error" then invalid_arg "Merlin_extend.Reader_helper.extract_syntax_error"; let invalid_msg = - "Warning: extension produced an incorrect syntax-error node" in - let msg = match Ast_helper.extract_str_payload payload with - | Some (msg, _loc) -> msg - | None -> invalid_msg + "Warning: extension produced an incorrect syntax-error node" + in + let msg = + match Ast_helper.extract_str_payload payload with + | Some (msg, _loc) -> msg + | None -> invalid_msg in - msg, id.Location.loc + (msg, id.Location.loc) let extract_relaxed_location attr : Location.t = match Ast_helper.Attr.as_tuple attr with - | ({Location. txt = "merlin.relaxed-location"; loc} , _) -> loc + | { Location.txt = "merlin.relaxed-location"; loc }, _ -> loc | _ -> invalid_arg "Merlin_extend.Reader_helper.extract_relaxed_location" diff --git a/ocamlmerlin_mlx/extend/extend_helper.mli b/ocamlmerlin_mlx/extend/extend_helper.mli index 68ff619..8680d6c 100644 --- a/ocamlmerlin_mlx/extend/extend_helper.mli +++ b/ocamlmerlin_mlx/extend/extend_helper.mli @@ -56,12 +56,11 @@ val focus_node : attribute (* Projections for merlin attributes and extensions *) -val classify_extension : extension -> - [`Other | `Syntax_error] +val classify_extension : extension -> [ `Other | `Syntax_error ] val extract_syntax_error : extension -> string * Location.t -val classify_attribute : attribute -> - [`Other | `Relaxed_location | `Hide | `Focus] +val classify_attribute : + attribute -> [ `Other | `Relaxed_location | `Hide | `Focus ] val extract_relaxed_location : attribute -> Location.t diff --git a/ocamlmerlin_mlx/extend/extend_main.ml b/ocamlmerlin_mlx/extend/extend_main.ml index 1b8df10..6d6f7d3 100644 --- a/ocamlmerlin_mlx/extend/extend_main.ml +++ b/ocamlmerlin_mlx/extend/extend_main.ml @@ -5,7 +5,7 @@ module R = P.Reader module Description = struct type t = P.description - let make_v0 ~name ~version = { P. name; version } + let make_v0 ~name ~version = { P.name; version } end module Reader = struct @@ -13,7 +13,6 @@ module Reader = struct let make_v0 (x : (module R.V0)) : t = x module Make (V : R.V0) = struct - open P.Reader let buffer = ref None @@ -27,8 +26,7 @@ module Reader = struct | Req_load buf -> buffer := Some (V.load buf); Res_loaded - | Req_parse -> - Res_parse (V.parse (get_buffer ())) + | Req_parse -> Res_parse (V.parse (get_buffer ())) | Req_parse_line (pos, str) -> Res_parse (V.parse_line (get_buffer ()) pos str) | Req_parse_for_completion pos -> @@ -46,12 +44,10 @@ module Reader = struct | Req_pretty_print p -> V.pretty_print Format.str_formatter p; Res_pretty_print (Format.flush_str_formatter ()) - end end module Utils = struct - (* Postpone messages until ready *) let send, set_ready = let is_ready = ref false in @@ -64,12 +60,9 @@ module Utils = struct List.iter really_send postponed' in let send msg = - if !is_ready then - really_send msg - else - postponed := msg :: !postponed + if !is_ready then really_send msg else postponed := msg :: !postponed in - send, set_ready + (send, set_ready) let notify msg = send (P.Notify msg) let debug msg = send (P.Debug msg) @@ -78,21 +71,22 @@ end module Handshake = struct let magic_number : string = "MERLINEXTEND002" - type versions = { - ast_impl_magic_number : string; - ast_intf_magic_number : string; - cmi_magic_number : string; - cmt_magic_number : string; - } - - let versions = Config.({ - ast_impl_magic_number; - ast_intf_magic_number; - cmi_magic_number; - cmt_magic_number; - }) - - let negotiate (capabilities : P.capabilities) = + type versions = + { ast_impl_magic_number : string; + ast_intf_magic_number : string; + cmi_magic_number : string; + cmt_magic_number : string + } + + let versions = + Config. + { ast_impl_magic_number; + ast_intf_magic_number; + cmi_magic_number; + cmt_magic_number + } + + let negotiate (capabilities : P.capabilities) = output_string stdout magic_number; output_value stdout versions; output_value stdout capabilities; @@ -109,26 +103,25 @@ module Handshake = struct let () = Printexc.register_printer (function - | Error msg -> - Some (Printf.sprintf "Extend_main.Handshake.Error %S" msg) - | _ -> None - ) + | Error msg -> Some (Printf.sprintf "Extend_main.Handshake.Error %S" msg) + | _ -> None) let negotiate_driver ext_name i o = let magic' = really_input_string i (String.length magic_number) in - if magic' <> magic_number then ( - let msg = Printf.sprintf - "Extension %s has incompatible protocol version %S (expected %S)" - ext_name magic' magic_number - in - raise (Error msg) - ); + (if magic' <> magic_number then + let msg = + Printf.sprintf + "Extension %s has incompatible protocol version %S (expected %S)" + ext_name magic' magic_number + in + raise (Error msg)); let versions' : versions = input_value i in let check_v prj name = if prj versions <> prj versions' then - let msg = Printf.sprintf - "Extension %s %s has incompatible version %S (expected %S)" - ext_name name (prj versions') (prj versions) + let msg = + Printf.sprintf + "Extension %s %s has incompatible version %S (expected %S)" ext_name + name (prj versions') (prj versions) in raise (Error msg) in @@ -138,31 +131,31 @@ module Handshake = struct check_v (fun x -> x.cmt_magic_number) "typedtree (CMT)"; output_value o P.Start_communication; flush o; - let capabilities : P.capabilities = - input_value i - in + let capabilities : P.capabilities = input_value i in capabilities end (** The main entry point of an extension. *) let extension_main ?reader desc = (* Check if invoked from Merlin *) - begin match Sys.getenv "__MERLIN_MASTER_PID" with - | exception Not_found -> - Printf.eprintf "This is %s merlin extension, version %s.\n\ - This binary should be invoked from merlin and \ - cannot be used directly.\n%!" - desc.P.name - desc.P.version; - exit 1; - | _ -> () + begin + match Sys.getenv "__MERLIN_MASTER_PID" with + | exception Not_found -> + Printf.eprintf + "This is %s merlin extension, version %s.\n\ + This binary should be invoked from merlin and cannot be used directly.\n\ + %!" + desc.P.name desc.P.version; + exit 1 + | _ -> () end; (* Communication happens on stdin/stdout. *) - Handshake.negotiate {P. reader = reader <> None}; - let reader = match reader with - | None -> (fun _ -> failwith "No reader") + Handshake.negotiate { P.reader = reader <> None }; + let reader = + match reader with + | None -> fun _ -> failwith "No reader" | Some (module R : R.V0) -> - let module M = Reader.Make(R) in + let module M = Reader.Make (R) in M.exec in let respond f = diff --git a/ocamlmerlin_mlx/extend/extend_main.mli b/ocamlmerlin_mlx/extend/extend_main.mli index e22dd04..e700366 100644 --- a/ocamlmerlin_mlx/extend/extend_main.mli +++ b/ocamlmerlin_mlx/extend/extend_main.mli @@ -19,12 +19,12 @@ end module Handshake : sig val magic_number : string - type versions = { - ast_impl_magic_number : string; - ast_intf_magic_number : string; - cmi_magic_number : string; - cmt_magic_number : string; - } + type versions = + { ast_impl_magic_number : string; + ast_intf_magic_number : string; + cmi_magic_number : string; + cmt_magic_number : string + } exception Error of string diff --git a/ocamlmerlin_mlx/extend/extend_protocol.ml b/ocamlmerlin_mlx/extend/extend_protocol.ml index 8d849bd..dc509e0 100644 --- a/ocamlmerlin_mlx/extend/extend_protocol.ml +++ b/ocamlmerlin_mlx/extend/extend_protocol.ml @@ -1,57 +1,50 @@ # 1 "merlin/src/extend/extend_protocol.ml" module Reader = struct - (** Description of a buffer managed by Merlin *) - type buffer = { - - path : string; - (** Path of the buffer in the editor. + type buffer = + { path : string; + (** Path of the buffer in the editor. The path is absolute if it is backed by a file, although it might not yet have been saved in the editor. The path is relative if it is a temporary buffer. *) - - flags : string list; - (** Any flag that has been passed to the reader in .merlin file *) - - text : string; - (** Content of the buffer *) - } + flags : string list; + (** Any flag that has been passed to the reader in .merlin file *) + text : string (** Content of the buffer *) + } (** ASTs exchanged with Merlin *) type parsetree = - | Structure of Parsetree.structure - (** An implementation, usually coming from a .ml file *) - + (** An implementation, usually coming from a .ml file *) | Signature of Parsetree.signature - (** An interface, usually coming from a .mli file *) + (** An interface, usually coming from a .mli file *) (** Printing in error messages or completion items *) type outcometree = - | Out_value of Outcometree.out_value - | Out_type of Outcometree.out_type - | Out_class_type of Outcometree.out_class_type - | Out_module_type of Outcometree.out_module_type - | Out_sig_item of Outcometree.out_sig_item - | Out_signature of Outcometree.out_sig_item list + | Out_value of Outcometree.out_value + | Out_type of Outcometree.out_type + | Out_class_type of Outcometree.out_class_type + | Out_module_type of Outcometree.out_module_type + | Out_sig_item of Outcometree.out_sig_item + | Out_signature of Outcometree.out_sig_item list | Out_type_extension of Outcometree.out_type_extension - | Out_phrase of Outcometree.out_phrase + | Out_phrase of Outcometree.out_phrase (** Printing in case destruction *) type pretty_parsetree = | Pretty_toplevel_phrase of Parsetree.toplevel_phrase - | Pretty_expression of Parsetree.expression - | Pretty_core_type of Parsetree.core_type - | Pretty_pattern of Parsetree.pattern - | Pretty_signature of Parsetree.signature - | Pretty_structure of Parsetree.structure - | Pretty_case_list of Parsetree.case list + | Pretty_expression of Parsetree.expression + | Pretty_core_type of Parsetree.core_type + | Pretty_pattern of Parsetree.pattern + | Pretty_signature of Parsetree.signature + | Pretty_structure of Parsetree.structure + | Pretty_case_list of Parsetree.case list (** Additional information useful for guiding completion *) - type complete_info = { - complete_labels : bool; - (** True if it is appropriate to suggest labels for this completion. *) - } + type complete_info = + { complete_labels : bool + (** True if it is appropriate to suggest labels for this completion. *) + } module type V0 = sig (** Internal representation of a buffer for the extension. @@ -127,24 +120,16 @@ module Reader = struct | Res_get_ident_at of string Location.loc list | Res_print_outcome of string list | Res_pretty_print of string - end (* Name of the extension *) -type description = { - name : string; - version : string; -} +type description = { name : string; version : string } (* Services an extension can provide *) -type capabilities = { - reader: bool; -} +type capabilities = { reader : bool } (* Main protocol *) -type request = - | Start_communication - | Reader_request of Reader.request +type request = Start_communication | Reader_request of Reader.request type response = | Notify of string diff --git a/ocamlmerlin_mlx/kernel/dune b/ocamlmerlin_mlx/kernel/dune index 660c53d..de197f2 100644 --- a/ocamlmerlin_mlx/kernel/dune +++ b/ocamlmerlin_mlx/kernel/dune @@ -26,4 +26,4 @@ (<> %{profile} "release")) (mode promote) (files - %{project_root}/merlin/src/kernel/{msource,mconfig,mreader,mreader_parser,mreader_lexer,mreader_recover,mreader_explain,extension,mreader_extend,mocaml}.{ml,mli})) + %{project_root}/merlin/src/kernel/{msource,mconfig,mreader,mreader_parser,mreader_lexer,mreader_recover,mreader_explain,extension,mreader_extend}.{ml,mli})) diff --git a/ocamlmerlin_mlx/kernel/extension.ml b/ocamlmerlin_mlx/kernel/extension.ml index 281e709..f9562ba 100644 --- a/ocamlmerlin_mlx/kernel/extension.ml +++ b/ocamlmerlin_mlx/kernel/extension.ml @@ -1,44 +1,44 @@ # 1 "merlin/src/kernel/extension.ml" (* {{{ COPYING *( - This file is part of Merlin, an helper for ocaml editors + This file is part of Merlin, an helper for ocaml editors - Copyright (C) 2013 - 2015 Frédéric Bour - Thomas Refis - Simon Castellan + Copyright (C) 2013 - 2015 Frédéric Bour + Thomas Refis + Simon Castellan - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. - The Software is provided "as is", without warranty of any kind, express or - implied, including but not limited to the warranties of merchantability, - fitness for a particular purpose and noninfringement. In no event shall - the authors or copyright holders be liable for any claim, damages or other - liability, whether in an action of contract, tort or otherwise, arising - from, out of or in connection with the software or the use or other dealings - in the Software. + The Software is provided "as is", without warranty of any kind, express or + implied, including but not limited to the warranties of merchantability, + fitness for a particular purpose and noninfringement. In no event shall + the authors or copyright holders be liable for any claim, damages or other + liability, whether in an action of contract, tort or otherwise, arising + from, out of or in connection with the software or the use or other dealings + in the Software. -)* }}} *) + )* }}} *) open Std open Parser_raw exception Unknown -type t = { - name : string; - private_def : string list; - public_def : string list; - packages : string list; - keywords : (string * Parser_raw.token) list; -} +type t = + { name : string; + private_def : string list; + public_def : string list; + packages : string list; + keywords : (string * Parser_raw.token) list + } type set = string list @@ -47,88 +47,56 @@ type set = string list let ident = Ident.create_persistent "_" (** Definition of each extension *) -let ext_lwt = { - name = "lwt"; - private_def = [ - "module Lwt : sig - val un_lwt : 'a Lwt.t -> 'a - val in_lwt : 'a Lwt.t -> 'a Lwt.t - val to_lwt : 'a -> 'a Lwt.t - val finally' : 'a Lwt.t -> unit Lwt.t -> 'a Lwt.t - val un_stream : 'a Lwt_stream.t -> 'a - val unit_lwt : unit Lwt.t -> unit Lwt.t - end" - ]; - public_def = [ - "val (>>) : unit Lwt.t -> 'a Lwt.t -> 'a Lwt.t - val raise_lwt : exn -> 'a Lwt.t - val assert_lwt : bool -> unit Lwt.t" - ]; - keywords = [ - "lwt", LET_LWT; - "try_lwt", TRY_LWT; - "match_lwt", MATCH_LWT; - "finally", FINALLY_LWT; - "for_lwt", FOR_LWT; - "while_lwt", WHILE_LWT; - ]; - packages = ["lwt.syntax"]; -} - -let ext_nonrec = { - name = "nonrec"; - private_def = []; - public_def = []; - keywords = [ - "nonrec", NONREC; - ]; - packages = []; -} - -let ext_meta = { - name = "meta"; - private_def = [ - "module Meta : sig - val code : 'a -> 'a code - val uncode : 'a code -> 'a - end" - ]; - public_def = []; - keywords = [ - ">.", GREATERDOT; - ]; - packages = []; -} + +let ext_nonrec = + { name = "nonrec"; + private_def = []; + public_def = []; + keywords = [ ("nonrec", NONREC) ]; + packages = [] + } + +let ext_meta = + { name = "meta"; + private_def = + [ "module Meta : sig\n\ + \ val code : 'a -> 'a code\n\ + \ val uncode : 'a code -> 'a\n\ + \ end" + ]; + public_def = []; + keywords = [ (">.", METAOCAML_BRACKET_CLOSE) ]; + packages = [] + } (* Known extensions *) -let registry = [ext_lwt;ext_meta] +let registry = [ ext_meta ] let registry = - List.fold_left registry ~init:String.Map.empty - ~f:(fun map ext -> String.Map.add map ~key:ext.name ~data:ext) + List.fold_left registry ~init:String.Map.empty ~f:(fun map ext -> + String.Map.add map ~key:ext.name ~data:ext) let all = String.Map.keys registry -let lookup s = - try Some (String.Map.find s registry) - with Not_found -> None +let lookup s = try Some (String.Map.find s registry) with Not_found -> None let empty = [] (* Compute set of extensions from package names (used to enable support for - "lwt" if "lwt.syntax" is loaded by user. *) + "lwt" if "lwt.syntax" is loaded by user. *) let from ~extensions ~packages = String.Map.fold registry ~init:[] ~f:(fun ~key:name ~data:ext set -> - if List.mem name ~set:extensions || - List.exists ~f:(List.mem ~set:ext.packages) packages + if + List.mem name ~set:extensions + || List.exists ~f:(List.mem ~set:ext.packages) packages then name :: set - else set - ) + else set) (* Merlin expects a few extensions to be always enabled, otherwise error recovery may fail arbitrarily *) -let default = match Merlin_config.ocamlversion with - | `OCaml_4_02_2 | `OCaml_4_03_0 -> [ext_nonrec] - | _ -> [] +let default = + match Merlin_config.ocamlversion with + | `OCaml_4_02_2 | `OCaml_4_03_0 -> [ ext_nonrec ] + | _ -> [] let default_kw = List.concat_map ~f:(fun ext -> ext.keywords) default @@ -144,19 +112,20 @@ let keywords set = (* Register extensions in typing environment *) let parse_sig = - let keywords = Lexer_raw.keywords [] in fun str -> - let lexbuf = Lexing.from_string str in - let state = Lexer_raw.make keywords in - let rec lexer = function - | Lexer_raw.Fail _ -> assert false - | Lexer_raw.Return x -> x - | Lexer_raw.Refill k -> lexer (k ()) - in - let lexer lexbuf = lexer (Lexer_raw.token_without_comments state lexbuf) in - (Parser_raw.interface lexer lexbuf : Parsetree.signature) + let keywords = Lexer_raw.keywords [] in + fun str -> + let lexbuf = Lexing.from_string str in + let state = Lexer_raw.make keywords in + let rec lexer = function + | Lexer_raw.Fail _ -> assert false + | Lexer_raw.Return x -> x + | Lexer_raw.Refill k -> lexer (k ()) + in + let lexer lexbuf = lexer (Lexer_raw.token_without_comments state lexbuf) in + (Parser_raw.interface lexer lexbuf : Parsetree.signature) let type_sig env sg = - let sg = Typemod.transl_signature env sg in + let sg = Typemod.type_interface env sg in sg.Typedtree.sig_type (* @@ -178,18 +147,21 @@ let register exts env = (* Log errors ? *) let try_type sg' = try type_sig env sg' with _exn -> [] in let exts = List.filter_dup exts in - let exts = List.filter_map ~f:(fun ext -> - match String.Map.find ext registry with - | ext -> Some ext - | exception Not_found -> None - ) exts + let exts = + List.filter_map + ~f:(fun ext -> + match String.Map.find ext registry with + | ext -> Some ext + | exception Not_found -> None) + exts in let process_ext e = let prv = List.concat_map ~f:parse_sig e.private_def in let pub = List.concat_map ~f:parse_sig e.public_def in - try_type prv, try_type pub + (try_type prv, try_type pub) in let fakes, tops = List.split (List.map ~f:process_ext exts) in let env = Env.add_signature (List.concat tops) env in Env.add_merlin_extension_module ident - (Types.Mty_signature (List.concat fakes)) env + (Types.Mty_signature (List.concat fakes)) + env diff --git a/ocamlmerlin_mlx/kernel/extension.mli b/ocamlmerlin_mlx/kernel/extension.mli index 7ae48c8..b548e3b 100644 --- a/ocamlmerlin_mlx/kernel/extension.mli +++ b/ocamlmerlin_mlx/kernel/extension.mli @@ -1,31 +1,31 @@ # 1 "merlin/src/kernel/extension.mli" (* {{{ COPYING *( - This file is part of Merlin, an helper for ocaml editors + This file is part of Merlin, an helper for ocaml editors - Copyright (C) 2013 - 2015 Frédéric Bour - Thomas Refis - Simon Castellan + Copyright (C) 2013 - 2015 Frédéric Bour + Thomas Refis + Simon Castellan - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. - The Software is provided "as is", without warranty of any kind, express or - implied, including but not limited to the warranties of merchantability, - fitness for a particular purpose and noninfringement. In no event shall - the authors or copyright holders be liable for any claim, damages or other - liability, whether in an action of contract, tort or otherwise, arising - from, out of or in connection with the software or the use or other dealings - in the Software. + The Software is provided "as is", without warranty of any kind, express or + implied, including but not limited to the warranties of merchantability, + fitness for a particular purpose and noninfringement. In no event shall + the authors or copyright holders be liable for any claim, damages or other + liability, whether in an action of contract, tort or otherwise, arising + from, out of or in connection with the software or the use or other dealings + in the Software. -)* }}} *) + )* }}} *) open Std @@ -42,13 +42,13 @@ exception Unknown *) (** Definition of an extension (as seen from Lexer and Typer) *) -type t = { - name : string; - private_def : string list; - public_def : string list; - packages : string list; - keywords : (string * Parser_raw.token) list; -} +type t = + { name : string; + private_def : string list; + public_def : string list; + packages : string list; + keywords : (string * Parser_raw.token) list + } (* Private definitions are put in a fake module named "_" with the following * ident. Use it to test or find private definitions. *) @@ -59,6 +59,7 @@ type set = string list (* Lexer keywords needed by extensions *) val keywords : set -> Lexer_raw.keywords + (* Register extensions in typing environment *) val register : set -> Env.t -> Env.t @@ -68,7 +69,7 @@ val registry : t String.Map.t val lookup : string -> t option (* Compute set of extensions from package names (used to enable support for - "lwt" if "lwt.syntax" package is loaded by user. *) + "lwt" if "lwt.syntax" package is loaded by user. *) val from : extensions:string list -> packages:string list -> set (* Merlin expects a few extensions to be always enabled, otherwise error diff --git a/ocamlmerlin_mlx/kernel/mconfig.ml b/ocamlmerlin_mlx/kernel/mconfig.ml index f89788c..0c9d4b9 100644 --- a/ocamlmerlin_mlx/kernel/mconfig.ml +++ b/ocamlmerlin_mlx/kernel/mconfig.ml @@ -3,135 +3,142 @@ open Std (** {1 OCaml commandline parsing} *) -let {Logger. log} = Logger.for_section "Mconfig" - -type ocaml = { - include_dirs : string list; - no_std_include : bool; - unsafe : bool; - classic : bool; - principal : bool; - real_paths : bool; - threads : [ `None | `Threads | `Vmthreads ]; - recursive_types : bool; - strict_sequence : bool; - applicative_functors : bool; - nopervasives : bool; - strict_formats : bool; - open_modules : string list; - ppx : string with_workdir list; - pp : string with_workdir option; - warnings : Warnings.state; -} +let { Logger.log } = Logger.for_section "Mconfig" + +type ocaml = + { include_dirs : string list; + hidden_dirs : string list; + no_std_include : bool; + unsafe : bool; + classic : bool; + principal : bool; + real_paths : bool; + threads : [ `None | `Threads | `Vmthreads ]; + recursive_types : bool; + strict_sequence : bool; + applicative_functors : bool; + nopervasives : bool; + strict_formats : bool; + open_modules : string list; + ppx : string with_workdir list; + pp : string with_workdir option; + warnings : Warnings.state + } let dump_warnings st = let st' = Warnings.backup () in Warnings.restore st; - Misc.try_finally Warnings.dump - ~always:(fun () -> Warnings.restore st') - -let dump_ocaml x = `Assoc [ - "include_dirs" , `List (List.map ~f:Json.string x.include_dirs); - "no_std_include" , `Bool x.no_std_include; - "unsafe" , `Bool x.unsafe; - "classic" , `Bool x.classic; - "principal" , `Bool x.principal; - "real_paths" , `Bool x.real_paths; - "recursive_types" , `Bool x.recursive_types; - "strict_sequence" , `Bool x.strict_sequence; - "applicative_functors" , `Bool x.applicative_functors; - "nopervasives" , `Bool x.nopervasives; - "strict_formats" , `Bool x.strict_formats; - "open_modules" , Json.list Json.string x.open_modules; - "ppx" , Json.list (dump_with_workdir Json.string) x.ppx; - "pp" , Json.option (dump_with_workdir Json.string) x.pp; - "warnings" , dump_warnings x.warnings; - ] + Misc.try_finally Warnings.dump ~always:(fun () -> Warnings.restore st') + +let dump_ocaml x = + `Assoc + [ ("include_dirs", `List (List.map ~f:Json.string x.include_dirs)); + ("hidden_dirs", `List (List.map ~f:Json.string x.hidden_dirs)); + ("no_std_include", `Bool x.no_std_include); + ("unsafe", `Bool x.unsafe); + ("classic", `Bool x.classic); + ("principal", `Bool x.principal); + ("real_paths", `Bool x.real_paths); + ("recursive_types", `Bool x.recursive_types); + ("strict_sequence", `Bool x.strict_sequence); + ("applicative_functors", `Bool x.applicative_functors); + ("nopervasives", `Bool x.nopervasives); + ("strict_formats", `Bool x.strict_formats); + ("open_modules", Json.list Json.string x.open_modules); + ("ppx", Json.list (dump_with_workdir Json.string) x.ppx); + ("pp", Json.option (dump_with_workdir Json.string) x.pp); + ("warnings", dump_warnings x.warnings) + ] (** Some paths can be resolved relative to a current working directory *) let cwd = ref None -let unsafe_get_cwd () = match !cwd with +let unsafe_get_cwd () = + match !cwd with | None -> assert false | Some cwd -> cwd -let canonicalize_filename path = - Misc.canonicalize_filename ?cwd:!cwd path +let canonicalize_filename path = Misc.canonicalize_filename ?cwd:!cwd path let marg_path f = Marg.param "path" (fun path acc -> f (canonicalize_filename path) acc) let marg_commandline f = - Marg.param "command" - (fun workval acc -> f {workdir = unsafe_get_cwd (); workval} acc) + Marg.param "command" (fun workval acc -> + f { workdir = unsafe_get_cwd (); workval } acc) (** {1 Merlin high-level settings} *) -type merlin = { - build_path : string list; - source_path : string list; - cmi_path : string list; - cmt_path : string list; - extensions : string list; - suffixes : (string * string) list; - stdlib : string option; - reader : string list; - protocol : [`Json | `Sexp]; - log_file : string option; - log_sections : string list; - config_path : string option; - - use_ppx_cache : bool; - - exclude_query_dir : bool; - - flags_to_apply : string list with_workdir list; - - flags_applied : string list with_workdir list; - - failures : string list; - extension_to_reader : (string * string) list; - - cache_lifespan : int -} +type merlin = + { build_path : string list; + source_path : string list; + hidden_build_path : string list; + hidden_source_path : string list; + cmi_path : string list; + cmt_path : string list; + index_files : string list; + extensions : string list; + suffixes : (string * string) list; + stdlib : string option; + source_root : string option; + unit_name : string option; + wrapping_prefix : string option; + reader : string list; + protocol : [ `Json | `Sexp ]; + log_file : string option; + log_sections : string list; + config_path : string option; + use_ppx_cache : bool; + exclude_query_dir : bool; + flags_to_apply : string list with_workdir list; + flags_applied : string list with_workdir list; + failures : string list; + extension_to_reader : (string * string) list; + cache_lifespan : int + } let dump_merlin x = - let dump_flag_list flags = - dump_with_workdir (Json.list Json.string) flags - in - `Assoc [ - "build_path" , `List (List.map ~f:Json.string x.build_path); - "source_path" , `List (List.map ~f:Json.string x.source_path); - "cmi_path" , `List (List.map ~f:Json.string x.cmi_path); - "cmt_path" , `List (List.map ~f:Json.string x.cmt_path); - "flags_applied", `List (List.map ~f:dump_flag_list x.flags_applied); - "extensions" , `List (List.map ~f:Json.string x.extensions); - "suffixes" , `List ( - List.map ~f:(fun (impl,intf) -> `Assoc [ - "impl", `String impl; - "intf", `String intf; - ]) x.suffixes - ); - "stdlib" , Json.option Json.string x.stdlib; - "reader" , `List (List.map ~f:Json.string x.reader); - "protocol" , (match x.protocol with + let dump_flag_list flags = dump_with_workdir (Json.list Json.string) flags in + `Assoc + [ ("build_path", `List (List.map ~f:Json.string x.build_path)); + ("source_path", `List (List.map ~f:Json.string x.source_path)); + ("hidden_build_path", `List (List.map ~f:Json.string x.hidden_build_path)); + ( "hidden_source_path", + `List (List.map ~f:Json.string x.hidden_source_path) ); + ("cmi_path", `List (List.map ~f:Json.string x.cmi_path)); + ("cmt_path", `List (List.map ~f:Json.string x.cmt_path)); + ("index_files", `List (List.map ~f:Json.string x.index_files)); + ("flags_applied", `List (List.map ~f:dump_flag_list x.flags_applied)); + ("extensions", `List (List.map ~f:Json.string x.extensions)); + ( "suffixes", + `List + (List.map + ~f:(fun (impl, intf) -> + `Assoc [ ("impl", `String impl); ("intf", `String intf) ]) + x.suffixes) ); + ("stdlib", Json.option Json.string x.stdlib); + ("source_root", Json.option Json.string x.source_root); + ("unit_name", Json.option Json.string x.unit_name); + ("wrapping_prefix", Json.option Json.string x.wrapping_prefix); + ("reader", `List (List.map ~f:Json.string x.reader)); + ( "protocol", + match x.protocol with | `Json -> `String "json" - | `Sexp -> `String "sexp" - ); - "log_file" , Json.option Json.string x.log_file; - "log_sections" , Json.list Json.string x.log_sections; - "flags_to_apply" , `List (List.map ~f:dump_flag_list x.flags_to_apply); - - "failures" , `List (List.map ~f:Json.string x.failures); - "assoc_suffixes" , `List ( - List.map ~f:(fun (suffix,reader) -> `Assoc [ - "extension", `String suffix; - "reader", `String reader; - ]) x.extension_to_reader - ); - "cache_lifespan" , Json.string (string_of_int x.cache_lifespan) - ] + | `Sexp -> `String "sexp" ); + ("log_file", Json.option Json.string x.log_file); + ("log_sections", Json.list Json.string x.log_sections); + ("flags_to_apply", `List (List.map ~f:dump_flag_list x.flags_to_apply)); + ("failures", `List (List.map ~f:Json.string x.failures)); + ( "assoc_suffixes", + `List + (List.map + ~f:(fun (suffix, reader) -> + `Assoc + [ ("extension", `String suffix); ("reader", `String reader) ]) + x.extension_to_reader) ); + ("cache_lifespan", Json.string (string_of_int x.cache_lifespan)) + ] module Verbosity = struct type t = Smart | Lvl of int @@ -147,78 +154,84 @@ module Verbosity = struct let of_string = function | "smart" -> Smart - | maybe_int -> + | maybe_int -> ( try Lvl (int_of_string maybe_int) - with _ -> invalid_arg ("argument should be: " ^ param_spec) + with _ -> invalid_arg ("argument should be: " ^ param_spec)) let to_string = function | Smart -> "smart" - | Lvl v -> "lvl " ^ (string_of_int v) + | Lvl v -> "lvl " ^ string_of_int v let to_json t = `String (to_string t) end -type query = { - filename : string; - directory : string; - printer_width : int; - verbosity : Verbosity.t; -} - -let dump_query x = `Assoc [ - "filename" , `String x.filename; - "directory" , `String x.directory; - "printer_width", `Int x.printer_width; - "verbosity" , Verbosity.to_json x.verbosity; - ] +type query = + { filename : string; + directory : string; + printer_width : int; + verbosity : Verbosity.t + } -type t = { - ocaml : ocaml; - merlin : merlin; - query : query; -} +let dump_query x = + `Assoc + [ ("filename", `String x.filename); + ("directory", `String x.directory); + ("printer_width", `Int x.printer_width); + ("verbosity", Verbosity.to_json x.verbosity) + ] -let dump x = `Assoc [ - "ocaml" , dump_ocaml x.ocaml; - "merlin" , dump_merlin x.merlin; - "query" , dump_query x.query; - ] +type t = { ocaml : ocaml; merlin : merlin; query : query } + +let dump x = + `Assoc + [ ("ocaml", dump_ocaml x.ocaml); + ("merlin", dump_merlin x.merlin); + ("query", dump_query x.query) + ] let arguments_table = Hashtbl.create 67 let stdlib = let env = try Some (Sys.getenv "OCAMLLIB") - with Not_found -> - try Some (Sys.getenv "CAMLLIB") - with Not_found -> None + with Not_found -> ( + try Some (Sys.getenv "CAMLLIB") with Not_found -> None) in fun config -> match config.merlin.stdlib with | Some stdlib -> stdlib - | None -> match env with + | None -> ( + match env with | Some stdlib -> stdlib - | None -> Standard_library.path + | None -> Standard_library.path) let normalize_step t = let merlin = t.merlin in if merlin.flags_to_apply <> [] then let flagss = merlin.flags_to_apply in - let t = {t with merlin = { merlin with - flags_to_apply = []; - flags_applied = flagss @ merlin.flags_applied; - } } + let t = + { t with + merlin = + { merlin with + flags_to_apply = []; + flags_applied = flagss @ merlin.flags_applied + } + } in let failures = ref [] in let warning failure = failures := failure :: !failures in - let t = List.fold_left ~f:(fun t {workdir; workval} -> fst ( - let_ref cwd (Some workdir) - (Marg.parse_all ~warning arguments_table [] workval t) - )) ~init:t flagss + let t = + List.fold_left + ~f:(fun t { workdir; workval } -> + fst + (let_ref cwd (Some workdir) + (Marg.parse_all ~warning arguments_table [] workval t))) + ~init:t flagss in - {t with merlin = {t.merlin with failures = !failures @ t.merlin.failures}} - else - t + { t with + merlin = { t.merlin with failures = !failures @ t.merlin.failures } + } + else t let is_normalized t = let merlin = t.merlin in @@ -227,28 +240,34 @@ let is_normalized t = let rec normalize t = if is_normalized t then ( log ~title:"normalize" "%a" Logger.json (fun () -> dump t); - t - ) else - normalize (normalize_step t) + t) + else normalize (normalize_step t) let merge_merlin_config dot merlin ~failures ~config_path = { merlin with build_path = dot.Mconfig_dot.build_path @ merlin.build_path; source_path = dot.source_path @ merlin.source_path; + hidden_build_path = dot.hidden_build_path @ merlin.hidden_build_path; + hidden_source_path = dot.hidden_source_path @ merlin.hidden_source_path; cmi_path = dot.cmi_path @ merlin.cmi_path; cmt_path = dot.cmt_path @ merlin.cmt_path; + index_files = dot.index_files @ merlin.index_files; exclude_query_dir = dot.exclude_query_dir || merlin.exclude_query_dir; use_ppx_cache = dot.use_ppx_cache || merlin.use_ppx_cache; extensions = dot.extensions @ merlin.extensions; suffixes = dot.suffixes @ merlin.suffixes; stdlib = (if dot.stdlib = None then merlin.stdlib else dot.stdlib); - reader = - if dot.reader = [] - then merlin.reader - else dot.reader; + source_root = + (if dot.source_root = None then merlin.source_root else dot.source_root); + unit_name = + (if dot.unit_name = None then merlin.unit_name else dot.unit_name); + wrapping_prefix = + (if dot.wrapping_prefix = None then merlin.wrapping_prefix + else dot.wrapping_prefix); + reader = (if dot.reader = [] then merlin.reader else dot.reader); flags_to_apply = dot.flags @ merlin.flags_to_apply; failures = failures @ merlin.failures; - config_path = Some config_path; + config_path = Some config_path } let get_external_config path t = @@ -261,182 +280,249 @@ let get_external_config path t = let merlin = merge_merlin_config dot t.merlin ~failures ~config_path in normalize { t with merlin } -let merlin_flags = [ - ( - "-build-path", - marg_path (fun dir merlin -> - {merlin with build_path = dir :: merlin.build_path}), - " Add to merlin build path" - ); - ( - "-source-path", - marg_path (fun dir merlin -> - {merlin with source_path = dir :: merlin.source_path}), - " Add to merlin source path" - ); - ( - "-cmi-path", - marg_path (fun dir merlin -> - {merlin with cmi_path = dir :: merlin.cmi_path}), - " Add to merlin cmi path" - ); - ( - "-cmt-path", - marg_path (fun dir merlin -> - {merlin with cmt_path = dir :: merlin.cmt_path}), - " Add to merlin cmt path" - ); - ( - "-reader", - Marg.param "command" (fun reader merlin -> - {merlin with reader = Shell.split_command reader }), - " Use as a merlin reader" - ); - ( - "-assocsuffix", - Marg.param "suffix:reader" - (fun assoc_pair merlin -> - match Misc.rev_string_split ~on:':' assoc_pair with - | [reader;suffix] -> - {merlin with - extension_to_reader = (suffix,reader)::merlin.extension_to_reader} - | _ -> merlin - ), - "Associate suffix with reader" - ); - ( - "-addsuffix", - Marg.param "implementation Suffix, interface Suffix" - (fun suffix_pair merlin -> - match Misc.rev_string_split ~on:':' suffix_pair with - | [intf;impl] -> - {merlin with suffixes = (impl,intf)::merlin.suffixes} - | _ -> merlin - ), - "Add a suffix implementation,interface pair" - ); - ( - "-extension", - Marg.param "extension" (fun extension merlin -> - match Extension.lookup extension with - | None -> invalid_arg "Unknown extension" - | Some _ -> - {merlin with extensions = extension :: merlin.extensions}), - " Load merlin syntax extension" - ); - ( - "-flags", - Marg.param "string" (fun flags merlin -> - let flags = - { workdir = unsafe_get_cwd (); workval = Shell.split_command flags } - in - {merlin with flags_to_apply = flags :: merlin.flags_to_apply}), - " Unescape argument and interpret it as more flags" - ); - ( - "-protocol", - Marg.param "protocol" (fun prot merlin -> - match prot with - | "json" -> {merlin with protocol = `Json} - | "sexp" -> {merlin with protocol = `Sexp} - | _ -> invalid_arg "Valid protocols are 'json' and 'sexp'"; - ), - " Select frontend protocol ('json' or 'sexp')" - ); - ( - "-log-file", - Marg.param "file" (fun file merlin -> {merlin with log_file = Some file}), - " Log messages to specified file ('' for disabling, '-' for stderr)" - ); - ( - "-log-section", - Marg.param "file" (fun section merlin -> - let sections = String.split_on_char_ ',' section in - {merlin with log_sections = sections @ merlin.log_sections}), - " Only log specific sections (separated by comma)" - ); - ( - "-ocamllib-path", - marg_path (fun path merlin -> {merlin with stdlib = Some path}), - " Change path of ocaml standard library" - ); - ( - "-cache-lifespan", - Marg.param "int" (fun prot merlin -> - try {merlin with cache_lifespan = (int_of_string prot)} - with _ -> invalid_arg "Valid value is int"; - ), - "Change file cache retention period. It's measured in minutes. \ - Default value is 5." - ); - ( - (* Legacy support for janestreet. Ignored. To be removed soon. *) - "-attributes-allowed", - Marg.unit_ignore, - " DEPRECATED" - ); -] - -let query_flags = [ - ( - "-verbosity", - Marg.param Verbosity.param_spec (fun verbosity query -> - let verbosity = - Verbosity.of_string verbosity - in - {query with verbosity}), - "\"smart\" | Verbosity determines the number of \ - expansions of aliases in answers. \"smart\" is equivalent to \ - verbosity=0 but expands module types." - ); - ( - "-printer-width", - Marg.param "integer" (fun width query -> - let printer_width = - try int_of_string width - with _ -> invalid_arg "argument should be an integer" - in - {query with printer_width}), - " Optimal width for formatting types, signatures, etc" - ) -] - -let ocaml_ignored_flags = [ - "-a"; "-absname"; "-alias-deps"; "-annot"; "-app-funct"; "-bin-annot"; - "-c"; "-compact"; "-compat-32"; "-config"; "-custom"; "-dalloc"; - "-dclambda"; "-dcmm"; "-dcombine"; "-dcse"; "-dflambda"; - "-dflambda-no-invariants"; "-dflambda-verbose"; "-dinstr"; "-dinterf"; - "-dlambda"; "-dlinear"; "-dlive"; "-dparsetree"; "-dprefer"; "-dshape"; - "-drawclambda"; "-drawflambda"; "-drawlambda"; "-dreload"; "-dscheduling"; - "-dsel"; "-dsource"; "-dspill"; "-dsplit"; "-dstartup"; "-dtimings"; - "-dtypedtree"; "-dtypes"; "-dump-pass"; "-fno-PIC"; "-fPIC"; "-g"; "-i"; - "-inlining-report"; "-keep-docs"; "-keep-docs"; "-keep-locs"; "-linkall"; - "-make_runtime"; "-make-runtime"; "-modern"; "-no-alias-deps"; "-noassert"; - "-noautolink"; "-no-check-prims"; "-nodynlink"; "-no-float-const-prop"; - "-no-keep-locs"; "-no-principal"; "-no-rectypes"; "-no-strict-formats"; - "-no-strict-sequence"; "-no-unbox-free-vars-of-clos"; - "-no-unbox-specialised-args"; "-O2"; "-O3"; "-Oclassic"; "-opaque"; - "-output-complete-obj"; "-output-obj"; "-p"; "-pack"; - "-remove-unused-arguments"; "-S"; "-shared"; "-unbox-closures"; "-v"; - "-verbose"; "-where"; -] - -let ocaml_ignored_parametrized_flags = [ - "-cc"; "-cclib"; "-ccopt"; "-color"; "-dflambda-let"; "-dllib"; "-dllpath"; - "-for-pack"; "-impl"; "-inline-alloc-cost"; "-inline-branch-cost"; - "-inline-branch-factor"; "-inline-call-cost"; "-inline-indirect-cost"; - "-inline-lifting-benefit"; "-inline-max-depth"; "-inline-max-unroll"; - "-inline"; "-inline-prim-cost"; "-inline-toplevel"; "-intf"; - "-intf_suffix"; "-intf-suffix"; "-o"; "-rounds"; "-runtime-variant"; - "-unbox-closures-factor"; "-use-prims"; "-use_runtime"; "-use-runtime"; - "-error-style"; "-dump-dir"; "-cmi-file"; -] +let merlin_flags = + [ ( "-build-path", + marg_path (fun dir merlin -> + { merlin with build_path = dir :: merlin.build_path }), + " Add to merlin build path" ); + ( "-source-path", + marg_path (fun dir merlin -> + { merlin with source_path = dir :: merlin.source_path }), + " Add to merlin source path" ); + ( "-hidden-build-path", + marg_path (fun dir merlin -> + { merlin with hidden_build_path = dir :: merlin.hidden_build_path }), + " Add to merlin hidden build path" ); + ( "-hidden-source-path", + marg_path (fun dir merlin -> + { merlin with hidden_source_path = dir :: merlin.hidden_source_path }), + " Add to merlin hidden source path" ); + ( "-cmi-path", + marg_path (fun dir merlin -> + { merlin with cmi_path = dir :: merlin.cmi_path }), + " Add to merlin cmi path" ); + ( "-cmt-path", + marg_path (fun dir merlin -> + { merlin with cmt_path = dir :: merlin.cmt_path }), + " Add to merlin cmt path" ); + ( "-index-file", + marg_path (fun file merlin -> + { merlin with index_files = file :: merlin.index_files }), + " Add to the index files used by merlin" ); + ( "-reader", + Marg.param "command" (fun reader merlin -> + { merlin with reader = Shell.split_command reader }), + " Use as a merlin reader" ); + ( "-assocsuffix", + Marg.param "suffix:reader" (fun assoc_pair merlin -> + match Misc.rev_string_split ~on:':' assoc_pair with + | [ reader; suffix ] -> + { merlin with + extension_to_reader = + (suffix, reader) :: merlin.extension_to_reader + } + | _ -> merlin), + "Associate suffix with reader" ); + ( "-addsuffix", + Marg.param "implementation Suffix, interface Suffix" + (fun suffix_pair merlin -> + match Misc.rev_string_split ~on:':' suffix_pair with + | [ intf; impl ] -> + { merlin with suffixes = (impl, intf) :: merlin.suffixes } + | _ -> merlin), + "Add a suffix implementation,interface pair" ); + ( "-extension", + Marg.param "extension" (fun extension merlin -> + match Extension.lookup extension with + | None -> invalid_arg "Unknown extension" + | Some _ -> + { merlin with extensions = extension :: merlin.extensions }), + " Load merlin syntax extension" ); + ( "-flags", + Marg.param "string" (fun flags merlin -> + let flags = + { workdir = unsafe_get_cwd (); workval = Shell.split_command flags } + in + { merlin with flags_to_apply = flags :: merlin.flags_to_apply }), + " Unescape argument and interpret it as more flags" ); + ( "-protocol", + Marg.param "protocol" (fun prot merlin -> + match prot with + | "json" -> { merlin with protocol = `Json } + | "sexp" -> { merlin with protocol = `Sexp } + | _ -> invalid_arg "Valid protocols are 'json' and 'sexp'"), + " Select frontend protocol ('json' or 'sexp')" ); + ( "-log-file", + Marg.param "file" (fun file merlin -> + { merlin with log_file = Some file }), + " Log messages to specified file ('' for disabling, '-' for stderr)" + ); + ( "-log-section", + Marg.param "file" (fun section merlin -> + let sections = String.split_on_char_ ',' section in + { merlin with log_sections = sections @ merlin.log_sections }), + " Only log specific sections (separated by comma)" ); + ( "-ocamllib-path", + marg_path (fun path merlin -> { merlin with stdlib = Some path }), + " Change path of ocaml standard library" ); + ( "-cache-lifespan", + Marg.param "int" (fun prot merlin -> + try { merlin with cache_lifespan = int_of_string prot } + with _ -> invalid_arg "Valid value is int"), + "Change file cache retention period. It's measured in minutes. Default \ + value is 5." ); + ( (* Legacy support for janestreet. Ignored. To be removed soon. *) + "-attributes-allowed", + Marg.unit_ignore, + " DEPRECATED" ) + ] + +let query_flags = + [ ( "-verbosity", + Marg.param Verbosity.param_spec (fun verbosity query -> + let verbosity = Verbosity.of_string verbosity in + { query with verbosity }), + "\"smart\" | Verbosity determines the number of expansions of \ + aliases in answers. \"smart\" is equivalent to verbosity=0 but expands \ + module types." ); + ( "-printer-width", + Marg.param "integer" (fun width query -> + let printer_width = + try int_of_string width + with _ -> invalid_arg "argument should be an integer" + in + { query with printer_width }), + " Optimal width for formatting types, signatures, etc" ) + ] + +let ocaml_ignored_flags = + [ "-a"; + "-absname"; + "-alias-deps"; + "-annot"; + "-app-funct"; + "-bin-annot"; + "-c"; + "-compact"; + "-compat-32"; + "-config"; + "-custom"; + "-dalloc"; + "-dclambda"; + "-dcmm"; + "-dcombine"; + "-dcse"; + "-dflambda"; + "-dflambda-no-invariants"; + "-dflambda-verbose"; + "-dinstr"; + "-dinterf"; + "-dlambda"; + "-dlinear"; + "-dlive"; + "-dparsetree"; + "-dprefer"; + "-dshape"; + "-drawclambda"; + "-drawflambda"; + "-drawlambda"; + "-dreload"; + "-dscheduling"; + "-dsel"; + "-dsource"; + "-dspill"; + "-dsplit"; + "-dstartup"; + "-dtimings"; + "-dtypedtree"; + "-dtypes"; + "-dump-pass"; + "-fno-PIC"; + "-fPIC"; + "-g"; + "-i"; + "-inlining-report"; + "-keep-docs"; + "-keep-docs"; + "-keep-locs"; + "-linkall"; + "-make_runtime"; + "-make-runtime"; + "-modern"; + "-no-alias-deps"; + "-noassert"; + "-noautolink"; + "-no-check-prims"; + "-nodynlink"; + "-no-float-const-prop"; + "-no-keep-locs"; + "-no-principal"; + "-no-rectypes"; + "-no-strict-formats"; + "-no-strict-sequence"; + "-no-unbox-free-vars-of-clos"; + "-no-unbox-specialised-args"; + "-no-unboxed-types"; + "-O2"; + "-O3"; + "-Oclassic"; + "-opaque"; + "-output-complete-obj"; + "-output-obj"; + "-p"; + "-pack"; + "-remove-unused-arguments"; + "-S"; + "-shared"; + "-unbox-closures"; + "-unboxed-types"; + "-v"; + "-verbose"; + "-where" + ] + +let ocaml_ignored_parametrized_flags = + [ "-cc"; + "-cclib"; + "-ccopt"; + "-color"; + "-dflambda-let"; + "-dllib"; + "-dllpath"; + "-for-pack"; + "-impl"; + "-inline-alloc-cost"; + "-inline-branch-cost"; + "-inline-branch-factor"; + "-inline-call-cost"; + "-inline-indirect-cost"; + "-inline-lifting-benefit"; + "-inline-max-depth"; + "-inline-max-unroll"; + "-inline"; + "-inline-prim-cost"; + "-inline-toplevel"; + "-intf"; + "-intf_suffix"; + "-intf-suffix"; + "-o"; + "-rounds"; + "-runtime-variant"; + "-unbox-closures-factor"; + "-use-prims"; + "-use_runtime"; + "-use-runtime"; + "-error-style"; + "-dump-dir"; + "-cmi-file" + ] let ocaml_warnings_spec ~error = Marg.param "warning specification" (fun spec ocaml -> let b' = Warnings.backup () in Warnings.restore ocaml.warnings; - Misc.try_finally (fun () -> + Misc.try_finally + (fun () -> ignore @@ Warnings.parse_options error spec; { ocaml with warnings = Warnings.backup () }) ~always:(fun () -> Warnings.restore b')) @@ -445,268 +531,233 @@ let ocaml_alert_spec = Marg.param "alert specification" (fun spec ocaml -> let b' = Warnings.backup () in Warnings.restore ocaml.warnings; - Misc.try_finally (fun () -> + Misc.try_finally + (fun () -> Warnings.parse_alert_option spec; { ocaml with warnings = Warnings.backup () }) ~always:(fun () -> Warnings.restore b')) -let ocaml_flags = [ - ( - "-I", - marg_path (fun dir ocaml -> - {ocaml with include_dirs = dir :: ocaml.include_dirs}), - " Add to the list of include directories" - ); - ( - "-nostdlib", - Marg.unit (fun ocaml -> {ocaml with no_std_include = true}), - " Do not add default directory to the list of include directories" - ); - ( - "-unsafe", - Marg.unit (fun ocaml -> {ocaml with unsafe = true}), - " Do not compile bounds checking on array and string access" - ); - ( - "-labels", - Marg.unit (fun ocaml -> {ocaml with classic = false}), - " Use commuting label mode" - ); - ( - "-nolabels", - Marg.unit (fun ocaml -> {ocaml with classic = true}), - " Ignore non-optional labels in types" - ); - ( - "-principal", - Marg.unit (fun ocaml -> {ocaml with principal = true}), - " Check principality of type inference" - ); - ( - "-real-paths", - Marg.unit (fun ocaml -> {ocaml with real_paths = true}), - " Display real paths in types rather than short ones" - ); - ( - "-short-paths", - Marg.unit (fun ocaml -> {ocaml with real_paths = false}), - " Shorten paths in types" - ); - ( - "-rectypes", - Marg.unit (fun ocaml -> {ocaml with recursive_types = true}), - " Allow arbitrary recursive types" - ); - ( - "-strict-sequence", - Marg.unit (fun ocaml -> {ocaml with strict_sequence = true}), - " Left-hand part of a sequence must have type unit" - ); - ( - "-no-app-funct", - Marg.unit (fun ocaml -> {ocaml with applicative_functors = false}), - " Deactivate applicative functors" - ); - ( - "-thread", - Marg.unit (fun ocaml -> {ocaml with threads = `Threads}), - " Add support for system threads library" - ); - ( - "-vmthread", - Marg.unit (fun ocaml -> {ocaml with threads = `None}), - " Add support for VM-scheduled threads library" - ); - ( - "-safe-string", - Marg.unit (fun ocaml -> ocaml), - " Default to true unconditionally since 5.00" - ); - ( - "-nopervasives", - Marg.unit (fun ocaml -> {ocaml with nopervasives = true}), - " Don't open Pervasives module (advanced)" - ); - ( - "-strict-formats", - Marg.unit (fun ocaml -> {ocaml with strict_formats = true}), - " Reject invalid formats accepted by legacy implementations" - ); - ( - "-open", - Marg.param "module" (fun md ocaml -> - {ocaml with open_modules = md :: ocaml.open_modules}), - " Opens the module before typing" - ); - ( - "-ppx", - marg_commandline (fun command ocaml -> - {ocaml with ppx = command :: ocaml.ppx}), - " Pipe abstract syntax trees through preprocessor " - ); - ( - "-pp", - marg_commandline (fun pp ocaml -> {ocaml with pp = Some pp}), - " Pipe sources through preprocessor " - ); - ( "-w", - ocaml_warnings_spec ~error:false, - Printf.sprintf - " Enable or disable warnings according to :\n\ - \ + enable warnings in \n\ - \ - disable warnings in \n\ - \ @ enable warnings in and treat them as errors\n\ - \ can be:\n\ - \ a single warning number\n\ - \ .. a range of consecutive warning numbers\n\ - \ a predefined set\n\ - \ default setting is %S" - Warnings.defaults_w - ); - ( "-warn-error", - ocaml_warnings_spec ~error:true, - Printf.sprintf - " Enable or disable error status for warnings according\n\ - \ to . See option -w for the syntax of .\n\ - \ Default setting is %S" - Warnings.defaults_warn_error - ); - ( "-alert", - ocaml_alert_spec, - Printf.sprintf - " Enable or disable alerts according to :\n\ - \ + enable alert \n\ - \ - disable alert \n\ - \ ++ treat as fatal error\n\ - \ -- treat as non-fatal\n\ - \ @ enable and treat it as fatal error\n\ - \ can be 'all' to refer to all alert names" - ); -] +let ocaml_flags = + [ ( "-I", + marg_path (fun dir ocaml -> + { ocaml with include_dirs = dir :: ocaml.include_dirs }), + " Add to the list of include directories" ); + ( "-H", + marg_path (fun dir ocaml -> + { ocaml with hidden_dirs = dir :: ocaml.hidden_dirs }), + " Add to the list of \"hidden\" include directories\n\ + \ (Like -I, but the program can not directly reference these \ + dependencies)" ); + ( "-nostdlib", + Marg.unit (fun ocaml -> { ocaml with no_std_include = true }), + " Do not add default directory to the list of include directories" ); + ( "-unsafe", + Marg.unit (fun ocaml -> { ocaml with unsafe = true }), + " Do not compile bounds checking on array and string access" ); + ( "-labels", + Marg.unit (fun ocaml -> { ocaml with classic = false }), + " Use commuting label mode" ); + ( "-nolabels", + Marg.unit (fun ocaml -> { ocaml with classic = true }), + " Ignore non-optional labels in types" ); + ( "-principal", + Marg.unit (fun ocaml -> { ocaml with principal = true }), + " Check principality of type inference" ); + ( "-real-paths", + Marg.unit (fun ocaml -> { ocaml with real_paths = true }), + " Display real paths in types rather than short ones" ); + ( "-short-paths", + Marg.unit (fun ocaml -> { ocaml with real_paths = false }), + " Shorten paths in types" ); + ( "-rectypes", + Marg.unit (fun ocaml -> { ocaml with recursive_types = true }), + " Allow arbitrary recursive types" ); + ( "-strict-sequence", + Marg.unit (fun ocaml -> { ocaml with strict_sequence = true }), + " Left-hand part of a sequence must have type unit" ); + ( "-no-app-funct", + Marg.unit (fun ocaml -> { ocaml with applicative_functors = false }), + " Deactivate applicative functors" ); + ( "-thread", + Marg.unit (fun ocaml -> { ocaml with threads = `Threads }), + " Add support for system threads library" ); + ( "-vmthread", + Marg.unit (fun ocaml -> { ocaml with threads = `None }), + " Add support for VM-scheduled threads library" ); + ( "-safe-string", + Marg.unit (fun ocaml -> ocaml), + " Default to true unconditionally since 5.00" ); + ( "-nopervasives", + Marg.unit (fun ocaml -> { ocaml with nopervasives = true }), + " Don't open Pervasives module (advanced)" ); + ( "-strict-formats", + Marg.unit (fun ocaml -> { ocaml with strict_formats = true }), + " Reject invalid formats accepted by legacy implementations" ); + ( "-open", + Marg.param "module" (fun md ocaml -> + { ocaml with open_modules = md :: ocaml.open_modules }), + " Opens the module before typing" ); + ( "-ppx", + marg_commandline (fun command ocaml -> + { ocaml with ppx = command :: ocaml.ppx }), + " Pipe abstract syntax trees through preprocessor " ); + ( "-pp", + marg_commandline (fun pp ocaml -> { ocaml with pp = Some pp }), + " Pipe sources through preprocessor " ); + ( "-w", + ocaml_warnings_spec ~error:false, + Printf.sprintf + " Enable or disable warnings according to :\n\ + \ + enable warnings in \n\ + \ - disable warnings in \n\ + \ @ enable warnings in and treat them as errors\n\ + \ can be:\n\ + \ a single warning number\n\ + \ .. a range of consecutive warning numbers\n\ + \ a predefined set\n\ + \ default setting is %S" + Warnings.defaults_w ); + ( "-warn-error", + ocaml_warnings_spec ~error:true, + Printf.sprintf + " Enable or disable error status for warnings according\n\ + \ to . See option -w for the syntax of .\n\ + \ Default setting is %S" + Warnings.defaults_warn_error ); + ( "-alert", + ocaml_alert_spec, + Printf.sprintf + " Enable or disable alerts according to :\n\ + \ + enable alert \n\ + \ - disable alert \n\ + \ ++ treat as fatal error\n\ + \ -- treat as non-fatal\n\ + \ @ enable and treat it as fatal error\n\ + \ can be 'all' to refer to all alert names" ) + ] (** {1 Main configuration} *) -let initial = { - ocaml = { - include_dirs = []; - no_std_include = false; - unsafe = false; - classic = false; - principal = false; - real_paths = true; - threads = `None; - recursive_types = false; - strict_sequence = false; - applicative_functors = true; - nopervasives = false; - strict_formats = false; - open_modules = []; - ppx = []; - pp = None; - warnings = Warnings.backup (); - }; - merlin = { - build_path = []; - source_path = []; - cmi_path = []; - cmt_path = []; - extensions = []; - suffixes = [(".ml", ".mli"); (".re", ".rei")]; - stdlib = None; - reader = []; - protocol = `Json; - log_file = None; - log_sections = []; - config_path = None; - - exclude_query_dir = false; - - use_ppx_cache = false; - - flags_to_apply = []; - flags_applied = []; - - failures = []; - extension_to_reader = [(".re","reason");(".rei","reason")]; - cache_lifespan = 5; - }; - query = { - filename = "*buffer*"; - directory = Sys.getcwd (); - verbosity = Verbosity.default; - printer_width = 0; +let initial = + { ocaml = + { include_dirs = []; + hidden_dirs = []; + no_std_include = false; + unsafe = false; + classic = false; + principal = false; + real_paths = true; + threads = `None; + recursive_types = false; + strict_sequence = false; + applicative_functors = true; + nopervasives = false; + strict_formats = false; + open_modules = []; + ppx = []; + pp = None; + warnings = Warnings.backup () + }; + merlin = + { build_path = []; + source_path = []; + hidden_build_path = []; + hidden_source_path = []; + cmi_path = []; + cmt_path = []; + index_files = []; + extensions = []; + suffixes = [ (".ml", ".mli"); (".re", ".rei") ]; + stdlib = None; + source_root = None; + unit_name = None; + wrapping_prefix = None; + reader = []; + protocol = `Json; + log_file = None; + log_sections = []; + config_path = None; + exclude_query_dir = false; + use_ppx_cache = false; + flags_to_apply = []; + flags_applied = []; + failures = []; + extension_to_reader = [ (".re", "reason"); (".rei", "reason") ]; + cache_lifespan = 5 + }; + query = + { filename = "*buffer*"; + directory = Sys.getcwd (); + verbosity = Verbosity.default; + printer_width = 0 + } } -} let parse_arguments ~wd ~warning local_spec args t local = let_ref cwd (Some wd) @@ fun () -> Marg.parse_all ~warning arguments_table local_spec args t local -let global_flags = [ - ( - "-filename", - marg_path (fun path t -> - let query = t.query in - let path = Misc.canonicalize_filename path in - let filename = Filename.basename path in - let directory = Filename.dirname path in - let t = {t with query = {query with filename; directory}} in - Logger.with_log_file t.merlin.log_file - ~sections:t.merlin.log_sections @@ fun () -> - get_external_config path t), - " Path of the buffer; \ - extension determines the kind of file (interface or implementation), \ - basename is used as name of the module being definer, \ - directory is used to resolve other relative paths" - ); - ( - "-dot-merlin", - marg_path (fun dotmerlin t -> get_external_config dotmerlin t), - " Load as a .merlin; if it is a directory, \ - look for .merlin here or in a parent directory" - ); -] +let global_flags = + [ ( "-filename", + marg_path (fun path t -> + let query = t.query in + let path = Misc.canonicalize_filename path in + let filename = Filename.basename path in + let directory = Filename.dirname path in + let t = { t with query = { query with filename; directory } } in + Logger.with_log_file t.merlin.log_file ~sections:t.merlin.log_sections + @@ fun () -> get_external_config path t), + " Path of the buffer; extension determines the kind of file \ + (interface or implementation), basename is used as name of the module \ + being definer, directory is used to resolve other relative paths" ); + ( "-dot-merlin", + marg_path (fun dotmerlin t -> get_external_config dotmerlin t), + " Load as a .merlin; if it is a directory, look for .merlin \ + here or in a parent directory" ) + ] let () = - List.iter ~f:(fun name -> Hashtbl.add arguments_table name Marg.unit_ignore) + List.iter + ~f:(fun name -> Hashtbl.add arguments_table name Marg.unit_ignore) ocaml_ignored_flags; - List.iter ~f:(fun name -> Hashtbl.add arguments_table name Marg.param_ignore) + List.iter + ~f:(fun name -> Hashtbl.add arguments_table name Marg.param_ignore) ocaml_ignored_parametrized_flags; - let lens prj upd flag : _ Marg.t = fun args a -> - let cwd' = match !cwd with + let lens prj upd flag : _ Marg.t = + fun args a -> + let cwd' = + match !cwd with | None when a.query.directory <> "" -> Some a.query.directory | cwd -> cwd in let_ref cwd cwd' @@ fun () -> let args, b = flag args (prj a) in - args, (upd a b) + (args, upd a b) in - let add prj upd (name,flag,_doc) = - assert (not (Hashtbl.mem arguments_table name)); + let add prj upd (name, flag, _doc) = + if Hashtbl.mem arguments_table name then + failwith ("Duplicate flag spec: " ^ name); Hashtbl.add arguments_table name (lens prj upd flag) in List.iter - ~f:(add (fun x -> x.ocaml) (fun x ocaml -> {x with ocaml})) + ~f:(add (fun x -> x.ocaml) (fun x ocaml -> { x with ocaml })) ocaml_flags; List.iter - ~f:(add (fun x -> x.merlin) (fun x merlin -> {x with merlin})) + ~f:(add (fun x -> x.merlin) (fun x merlin -> { x with merlin })) merlin_flags; List.iter - ~f:(add (fun x -> x.query) (fun x query -> {x with query})) + ~f:(add (fun x -> x.query) (fun x query -> { x with query })) query_flags; - List.iter - ~f:(add (fun x -> x) (fun _ x -> x)) - global_flags + List.iter ~f:(add (fun x -> x) (fun _ x -> x)) global_flags let flags_for_completion () = - List.sort ~cmp:compare ( - "-dot-merlin" :: "-reader" :: - List.map ~f:(fun (x,_,_) -> x) ocaml_flags - ) + List.sort ~cmp:compare + ("-dot-merlin" :: "-reader" :: List.map ~f:(fun (x, _, _) -> x) ocaml_flags) let document_arguments oc = let print_doc flags = - List.iter ~f:(fun (name,_flag,doc) -> Printf.fprintf oc " %s\t%s\n" name doc) + List.iter + ~f:(fun (name, _flag, doc) -> Printf.fprintf oc " %s\t%s\n" name doc) flags in output_string oc "Flags affecting Merlin:\n"; @@ -714,75 +765,84 @@ let document_arguments oc = print_doc query_flags; output_string oc "Flags affecting OCaml frontend:\n"; print_doc ocaml_flags; - output_string oc "Flags accepted by ocamlc and ocamlopt but not affecting merlin will be ignored.\n" + output_string oc + "Flags accepted by ocamlc and ocamlopt but not affecting merlin will be \ + ignored.\n" let source_path config = - let stdlib = if config.ocaml.no_std_include then [] else [stdlib config] in + let stdlib = if config.ocaml.no_std_include then [] else [ stdlib config ] in List.concat - [[config.query.directory]; - stdlib; - config.merlin.source_path] + [ [ config.query.directory ]; + stdlib; + config.merlin.source_path; + config.merlin.hidden_source_path + ] |> List.filter_dup -let build_path config = ( +let collect_paths ~log_title ~config paths = let dirs = match config.ocaml.threads with | `None -> config.ocaml.include_dirs | `Threads -> "+threads" :: config.ocaml.include_dirs | `Vmthreads -> "+vmthreads" :: config.ocaml.include_dirs in - let dirs = - config.merlin.cmi_path @ - config.merlin.build_path @ - dirs - in + let dirs = paths @ dirs in let stdlib = stdlib config in - let exp_dirs = - List.map ~f:(Misc.expand_directory stdlib) dirs - in - let stdlib = if config.ocaml.no_std_include then [] else [stdlib] in + let exp_dirs = List.map ~f:(Misc.expand_directory stdlib) dirs in + let stdlib = if config.ocaml.no_std_include then [] else [ stdlib ] in let dirs = List.rev_append exp_dirs stdlib in let result = - if config.merlin.exclude_query_dir - then dirs + if config.merlin.exclude_query_dir then dirs else config.query.directory :: dirs in - let result' = List.filter_dup result in - log ~title:"build_path" "%d items in path, %d after deduplication" - (List.length result) (List.length result'); - result' -) + let result = List.filter_dup result in + log ~title:log_title "%d items in path, %d after deduplication" + (List.length result) (List.length result); + result -let cmt_path config = ( - let dirs = - match config.ocaml.threads with - | `None -> config.ocaml.include_dirs - | `Threads -> "+threads" :: config.ocaml.include_dirs - | `Vmthreads -> "+vmthreads" :: config.ocaml.include_dirs - in - let dirs = - config.merlin.cmt_path @ - config.merlin.build_path @ - dirs - in - let stdlib = stdlib config in - let exp_dirs = - List.map ~f:(Misc.expand_directory stdlib) dirs - in - let stdlib = if config.ocaml.no_std_include then [] else [stdlib] in - config.query.directory :: List.rev_append exp_dirs stdlib -) +let build_path config = + collect_paths ~log_title:"build_path" ~config + (config.merlin.cmi_path @ config.merlin.build_path) + +let hidden_build_path config = + config.merlin.hidden_build_path @ config.ocaml.hidden_dirs -let global_modules ?(include_current=false) config = ( +let cmt_path config = + collect_paths ~log_title:"cmt_path" ~config + (config.merlin.cmt_path @ config.merlin.build_path + @ config.merlin.hidden_build_path) + +let global_modules ?(include_current = false) config = let modules = Misc.modules_in_path ~ext:".cmi" (build_path config) in if include_current then modules - else match config.query.filename with + else + match config.query.filename with | "" -> modules | filename -> List.remove (Misc.unitname filename) modules -) (** {1 Accessors for other information} *) let filename t = t.query.filename -let unitname t = Misc.unitname t.query.filename +let unitname t = + match t.merlin.unit_name with + | Some name -> Misc.unitname name + | None -> + let basename = Misc.unitname t.query.filename in + begin + match t.merlin.wrapping_prefix with + | Some prefix -> prefix ^ basename + | None -> basename + end + +let intf_or_impl t = + let extension = Filename.extension t.query.filename in + try + List.find_map t.merlin.suffixes ~f:(fun (impl, intf) -> + if String.equal extension impl then Some Unit_info.Impl + else if String.equal extension intf then Some Unit_info.Intf + else None) + with Not_found -> Unit_info.Impl + +let unit_info t = + Unit_info.make ~source_file:t.query.filename (intf_or_impl t) (unitname t) diff --git a/ocamlmerlin_mlx/kernel/mconfig.mli b/ocamlmerlin_mlx/kernel/mconfig.mli index 9f9b38a..a78878c 100644 --- a/ocamlmerlin_mlx/kernel/mconfig.mli +++ b/ocamlmerlin_mlx/kernel/mconfig.mli @@ -3,61 +3,63 @@ open Std (** {1 OCaml commandline parsing} *) -type ocaml = { - include_dirs : string list; - no_std_include : bool; - unsafe : bool; - classic : bool; - principal : bool; - real_paths : bool; - threads : [ `None | `Threads | `Vmthreads ]; - recursive_types : bool; - strict_sequence : bool; - applicative_functors : bool; - nopervasives : bool; - strict_formats : bool; - open_modules : string list; - ppx : string with_workdir list; - pp : string with_workdir option; - warnings : Warnings.state; -} +type ocaml = + { include_dirs : string list; + hidden_dirs : string list; + no_std_include : bool; + unsafe : bool; + classic : bool; + principal : bool; + real_paths : bool; + threads : [ `None | `Threads | `Vmthreads ]; + recursive_types : bool; + strict_sequence : bool; + applicative_functors : bool; + nopervasives : bool; + strict_formats : bool; + open_modules : string list; + ppx : string with_workdir list; + pp : string with_workdir option; + warnings : Warnings.state + } val dump_ocaml : ocaml -> json - (** {1 Merlin high-level settings} *) -type merlin = { - build_path : string list; - source_path : string list; - cmi_path : string list; - cmt_path : string list; - extensions : string list; - suffixes : (string * string) list; - stdlib : string option; - reader : string list; - protocol : [`Json | `Sexp]; - log_file : string option; - log_sections: string list; - config_path : string option; - use_ppx_cache : bool; - - exclude_query_dir : bool; - - flags_to_apply : string list with_workdir list; - - flags_applied : string list with_workdir list; - - failures : string list; - extension_to_reader : (string * string) list; - cache_lifespan : int -} +type merlin = + { build_path : string list; + source_path : string list; + hidden_build_path : string list; + hidden_source_path : string list; + cmi_path : string list; + cmt_path : string list; + index_files : string list; + extensions : string list; + suffixes : (string * string) list; + stdlib : string option; + source_root : string option; + unit_name : string option; + wrapping_prefix : string option; + reader : string list; + protocol : [ `Json | `Sexp ]; + log_file : string option; + log_sections : string list; + config_path : string option; + use_ppx_cache : bool; + exclude_query_dir : bool; + flags_to_apply : string list with_workdir list; + flags_applied : string list with_workdir list; + failures : string list; + extension_to_reader : (string * string) list; + cache_lifespan : int + } val dump_merlin : merlin -> json (** {1 Some flags affecting queries} *) -module Verbosity : sig +module Verbosity : sig type t = Smart | Lvl of int (** the default value for verbosity, i.e., [Lvl 0] *) @@ -70,28 +72,27 @@ module Verbosity : sig val to_int : t -> for_smart:int -> int end -type query = { - filename : string; - directory : string; - printer_width : int; - verbosity : Verbosity.t; -} +type query = + { filename : string; + directory : string; + printer_width : int; + verbosity : Verbosity.t + } (** {1 Main configuration} *) -type t = { - ocaml : ocaml; - merlin : merlin; - query : query; -} +type t = { ocaml : ocaml; merlin : merlin; query : query } val initial : t val dump : t -> json val merge_merlin_config : - Mconfig_dot.config - -> merlin -> failures:(string list) -> config_path:string -> merlin + Mconfig_dot.config -> + merlin -> + failures:string list -> + config_path:string -> + merlin val get_external_config : string -> t -> t @@ -101,8 +102,12 @@ val is_normalized : t -> bool val parse_arguments : wd:string -> - warning:(string -> unit) -> 'a Marg.spec list -> string list -> - t -> 'a -> t * 'a + warning:(string -> unit) -> + 'a Marg.spec list -> + string list -> + t -> + 'a -> + t * 'a val flags_for_completion : unit -> string list @@ -114,6 +119,8 @@ val source_path : t -> string list val build_path : t -> string list +val hidden_build_path : t -> string list + val cmt_path : t -> string list val global_modules : ?include_current:bool -> t -> string list @@ -123,3 +130,7 @@ val global_modules : ?include_current:bool -> t -> string list val filename : t -> string val unitname : t -> string + +val intf_or_impl : t -> Unit_info.intf_or_impl + +val unit_info : t -> Unit_info.t diff --git a/ocamlmerlin_mlx/kernel/mconfig_dot.ml b/ocamlmerlin_mlx/kernel/mconfig_dot.ml index 0fc7edc..f1ca22a 100644 --- a/ocamlmerlin_mlx/kernel/mconfig_dot.ml +++ b/ocamlmerlin_mlx/kernel/mconfig_dot.ml @@ -10,10 +10,14 @@ type config = { hidden_source_path : string list; cmi_path : string list; cmt_path : string list; + index_files : string list; flags : string list with_workdir list; extensions : string list; suffixes : (string * string) list; stdlib : string option; + source_root : string option; + unit_name : string option; + wrapping_prefix : string option; reader : string list; exclude_query_dir : bool; use_ppx_cache : bool; diff --git a/ocamlmerlin_mlx/kernel/mocaml.ml b/ocamlmerlin_mlx/kernel/mocaml.ml index 3a3c0b8..dafab86 100644 --- a/ocamlmerlin_mlx/kernel/mocaml.ml +++ b/ocamlmerlin_mlx/kernel/mocaml.ml @@ -31,7 +31,7 @@ let setup_reader_config config = ( let open Mconfig in let open Clflags in let ocaml = config.ocaml in - Env.set_unit_name (Mconfig.unitname config); + Env.set_current_unit (Mconfig.unit_info config); Location.input_name := config.query.filename; fast := ocaml.unsafe ; classic := ocaml.classic ; @@ -47,7 +47,9 @@ let setup_reader_config config = ( let setup_typer_config config = ( setup_reader_config config; - Load_path.(init ~auto_include:no_auto_include (Mconfig.build_path config)); + let visible = Mconfig.build_path config in + let hidden = Mconfig.hidden_build_path config in + Load_path.(init ~auto_include:no_auto_include ~visible ~hidden); ) (** Switchable implementation of Oprint *) @@ -62,44 +64,49 @@ let default_out_type_extension = !Oprint.out_type_extension let default_out_phrase = !Oprint.out_phrase let replacement_printer = ref None +let replacement_printer_doc = ref None let oprint default inj ppf x = match !replacement_printer with | None -> default ppf x | Some printer -> printer ppf (inj x) +let oprint_doc default inj ppf x = match !replacement_printer_doc with + | None -> default ppf x + | Some printer -> printer ppf (inj x) + let () = let open Extend_protocol.Reader in Oprint.out_value := oprint default_out_value (fun x -> Out_value x); Oprint.out_type := - oprint default_out_type (fun x -> Out_type x); + oprint_doc default_out_type (fun x -> Out_type x); Oprint.out_class_type := - oprint default_out_class_type (fun x -> Out_class_type x); + oprint_doc default_out_class_type (fun x -> Out_class_type x); Oprint.out_module_type := - oprint default_out_module_type (fun x -> Out_module_type x); + oprint_doc default_out_module_type (fun x -> Out_module_type x); Oprint.out_sig_item := - oprint default_out_sig_item (fun x -> Out_sig_item x); + oprint_doc default_out_sig_item (fun x -> Out_sig_item x); Oprint.out_signature := - oprint default_out_signature (fun x -> Out_signature x); + oprint_doc default_out_signature (fun x -> Out_signature x); Oprint.out_type_extension := - oprint default_out_type_extension (fun x -> Out_type_extension x); + oprint_doc default_out_type_extension (fun x -> Out_type_extension x); Oprint.out_phrase := oprint default_out_phrase (fun x -> Out_phrase x) let default_printer ppf = let open Extend_protocol.Reader in function | Out_value x -> default_out_value ppf x - | Out_type x -> default_out_type ppf x - | Out_class_type x -> default_out_class_type ppf x - | Out_module_type x -> default_out_module_type ppf x - | Out_sig_item x -> default_out_sig_item ppf x - | Out_signature x -> default_out_signature ppf x - | Out_type_extension x -> default_out_type_extension ppf x + | Out_type x -> Format_doc.compat default_out_type ppf x + | Out_class_type x -> Format_doc.compat default_out_class_type ppf x + | Out_module_type x -> Format_doc.compat default_out_module_type ppf x + | Out_sig_item x -> Format_doc.compat default_out_sig_item ppf x + | Out_signature x -> Format_doc.compat default_out_signature ppf x + | Out_type_extension x -> Format_doc.compat default_out_type_extension ppf x | Out_phrase x -> default_out_phrase ppf x - let with_printer printer f = - let_ref replacement_printer (Some printer) f + let_ref replacement_printer (Some printer) @@ fun () -> + let_ref replacement_printer_doc (Some (Format_doc.deprecated printer)) f (* Cleanup caches *) let clear_caches () = ( diff --git a/ocamlmerlin_mlx/kernel/mocaml.mli b/ocamlmerlin_mlx/kernel/mocaml.mli index d584329..62b45e5 100644 --- a/ocamlmerlin_mlx/kernel/mocaml.mli +++ b/ocamlmerlin_mlx/kernel/mocaml.mli @@ -1,4 +1,3 @@ -# 1 "merlin/src/kernel/mocaml.mli" (* An instance of load path, environment cache & btype unification log *) type typer_state @@ -16,7 +15,8 @@ val default_printer : val with_printer : (Format.formatter -> Extend_protocol.Reader.outcometree -> unit) -> - (unit -> 'a) -> 'a + (unit -> 'a) -> + 'a (* Clear caches, remove all items *) val clear_caches : unit -> unit diff --git a/ocamlmerlin_mlx/kernel/mreader.ml b/ocamlmerlin_mlx/kernel/mreader.ml index 3a17df2..97932a9 100644 --- a/ocamlmerlin_mlx/kernel/mreader.ml +++ b/ocamlmerlin_mlx/kernel/mreader.ml @@ -1,21 +1,19 @@ # 1 "merlin/src/kernel/mreader.ml" open Std -type parsetree = [ - | `Interface of Parsetree.signature - | `Implementation of Parsetree.structure -] - -type comment = (string * Location.t) - -type result = { - lexer_keywords: string list; - lexer_errors : exn list; - parser_errors : exn list; - comments : comment list; - parsetree : parsetree; - no_labels_for_completion : bool; -} +type parsetree = + [ `Interface of Parsetree.signature | `Implementation of Parsetree.structure ] + +type comment = string * Location.t + +type result = + { lexer_keywords : string list; + lexer_errors : exn list; + parser_errors : exn list; + comments : comment list; + parsetree : parsetree; + no_labels_for_completion : bool + } (* Normal entry point *) @@ -27,9 +25,11 @@ let normal_parse ?for_completion config source = | exception Not_found -> "" | pos -> String.sub ~pos ~len:(String.length filename - pos) filename in - Logger.log ~section:"Mreader" ~title:"run" - "extension(%S) = %S" filename extension; - if List.exists ~f:(fun (_impl,intf) -> intf = extension) + Logger.log ~section:"Mreader" ~title:"run" "extension(%S) = %S" filename + extension; + if + List.exists + ~f:(fun (_impl, intf) -> intf = extension) Mconfig.(config.merlin.suffixes) then Mreader_parser.MLI else Mreader_parser.ML @@ -38,11 +38,12 @@ let normal_parse ?for_completion config source = let keywords = Extension.keywords Mconfig.(config.merlin.extensions) in Mreader_lexer.make Mconfig.(config.ocaml.warnings) keywords config source in - let no_labels_for_completion, lexer = match for_completion with - | None -> false, lexer + let no_labels_for_completion, lexer = + match for_completion with + | None -> (false, lexer) | Some pos -> - let pos = Msource.get_lexing_pos source - ~filename:(Mconfig.filename config) pos + let pos = + Msource.get_lexing_pos source ~filename:(Mconfig.filename config) pos in Mreader_lexer.for_completion lexer pos in @@ -51,10 +52,14 @@ let normal_parse ?for_completion config source = and lexer_errors = Mreader_lexer.errors lexer and parser_errors = Mreader_parser.errors parser and parsetree = Mreader_parser.result parser - and comments = Mreader_lexer.comments lexer - in - { lexer_keywords; lexer_errors; parser_errors; comments; parsetree; - no_labels_for_completion; } + and comments = Mreader_lexer.comments lexer in + { lexer_keywords; + lexer_errors; + parser_errors; + comments; + parsetree; + no_labels_for_completion + } (* Pretty-printing *) @@ -63,22 +68,26 @@ type outcometree = Extend_protocol.Reader.outcometree let ambient_reader = ref None -let instantiate_reader spec config source = match spec with - | [] -> ((lazy None), ignore) - | name :: args -> +let instantiate_reader spec config source = + match spec with + | [] -> (lazy None, ignore) + | name :: args -> ( let reader = lazy (Mreader_extend.start name args config source) in - (reader, (fun () -> - if Lazy.is_val reader then - match Lazy.force reader with - | None -> () - | Some reader -> Mreader_extend.stop reader)) + ( reader, + fun () -> + if Lazy.is_val reader then + match Lazy.force reader with + | None -> () + | Some reader -> Mreader_extend.stop reader )) let get_reader config = let rec find_reader assocsuffixes = match assocsuffixes with | [] -> [] - | (suffix,reader)::t -> - if Filename.check_suffix Mconfig.(config.query.filename) suffix then [reader] else find_reader t + | (suffix, reader) :: t -> + if Filename.check_suffix Mconfig.(config.query.filename) suffix then + [ reader ] + else find_reader t in match Mconfig.(config.merlin.reader) with (* if a reader flag exists then this is explicitly used disregarding suffix association *) @@ -86,8 +95,9 @@ let get_reader config = | x -> x let mocaml_printer reader ppf otree = - let str = match reader with - | lazy (Some reader) -> Mreader_extend.print_outcome otree reader + let str = + match reader with + | (lazy (Some reader)) -> Mreader_extend.print_outcome otree reader | _ -> None in match str with @@ -101,36 +111,39 @@ let with_ambient_reader config source f = ambient_reader := Some (reader, reader_spec, source); Misc.try_finally (fun () -> Mocaml.with_printer (mocaml_printer reader) f) - ~always:(fun () -> ambient_reader := ambient_reader'; stop ()) + ~always:(fun () -> + ambient_reader := ambient_reader'; + stop ()) let try_with_reader config source f = let reader_spec = get_reader config in - let lazy reader, stop = + let (lazy reader), stop = match !ambient_reader with | Some (reader, reader_spec', source') - when compare reader_spec reader_spec' = 0 && - compare source source' = 0 -> reader, ignore + when compare reader_spec reader_spec' = 0 && compare source source' = 0 -> + (reader, ignore) | _ -> instantiate_reader reader_spec config source in match reader with - | None -> stop (); None - | Some reader -> - Misc.try_finally (fun () -> f reader) ~always:stop + | None -> + stop (); + None + | Some reader -> Misc.try_finally (fun () -> f reader) ~always:stop let print_pretty config source tree = - match try_with_reader config source - (Mreader_extend.print_pretty tree) with + match try_with_reader config source (Mreader_extend.print_pretty tree) with | Some result -> result | None -> let ppf, to_string = Std.Format.to_string () in let open Extend_protocol.Reader in - begin match tree with - | Pretty_case_list x -> Pprintast.case_list ppf x - | Pretty_core_type x -> Pprintast.core_type ppf x - | Pretty_expression x -> Pprintast.expression ppf x - | Pretty_pattern x -> Pprintast.pattern ppf x - | Pretty_signature x -> Pprintast.signature ppf x - | Pretty_structure x -> Pprintast.structure ppf x + begin + match tree with + | Pretty_case_list x -> Pprintast.case_list ppf x + | Pretty_core_type x -> Pprintast.core_type ppf x + | Pretty_expression x -> Pprintast.expression ppf x + | Pretty_pattern x -> Pprintast.pattern ppf x + | Pretty_signature x -> Pprintast.signature ppf x + | Pretty_structure x -> Pprintast.structure ppf x | Pretty_toplevel_phrase x -> Pprintast.toplevel_phrase ppf x end; to_string () @@ -140,21 +153,18 @@ let default_print_outcome tree = Format.flush_str_formatter () let print_outcome config source tree = - match try_with_reader config source - (Mreader_extend.print_outcome tree) with + match try_with_reader config source (Mreader_extend.print_outcome tree) with | Some result -> result | None -> default_print_outcome tree let print_batch_outcome config source tree = - match try_with_reader config source - (Mreader_extend.print_outcomes tree) with + match try_with_reader config source (Mreader_extend.print_outcomes tree) with | Some result -> result | None -> List.map ~f:default_print_outcome tree let reconstruct_identifier config source pos = match - try_with_reader config source - (Mreader_extend.reconstruct_identifier pos) + try_with_reader config source (Mreader_extend.reconstruct_identifier pos) with | None | Some [] -> Mreader_lexer.reconstruct_identifier config source pos | Some result -> result @@ -162,20 +172,32 @@ let reconstruct_identifier config source pos = (* Entry point *) let parse ?for_completion config = function - | (source, None) -> - begin match - try_with_reader config source - (Mreader_extend.parse ?for_completion) - with - | Some (`No_labels no_labels_for_completion, parsetree) -> - let (lexer_errors, parser_errors, comments) = ([], [], []) in - let lexer_keywords = [] (* TODO? *) in - { lexer_keywords; lexer_errors; parser_errors; comments; - parsetree; no_labels_for_completion; } - | None -> normal_parse ?for_completion config source - end - | (_, Some parsetree) -> - let (lexer_errors, parser_errors, comments) = ([], [], []) in + | source, None -> begin + match + try_with_reader config source (Mreader_extend.parse ?for_completion) + with + | Some (`No_labels no_labels_for_completion, parsetree) -> + let lexer_errors, parser_errors, comments = ([], [], []) in + let lexer_keywords = + [] + (* TODO? *) + in + { lexer_keywords; + lexer_errors; + parser_errors; + comments; + parsetree; + no_labels_for_completion + } + | None -> normal_parse ?for_completion config source + end + | _, Some parsetree -> + let lexer_errors, parser_errors, comments = ([], [], []) in let lexer_keywords = [] in - { lexer_keywords; lexer_errors; parser_errors; comments; parsetree; - no_labels_for_completion = false; } + { lexer_keywords; + lexer_errors; + parser_errors; + comments; + parsetree; + no_labels_for_completion = false + } diff --git a/ocamlmerlin_mlx/kernel/mreader.mli b/ocamlmerlin_mlx/kernel/mreader.mli index 62729b6..ae84b27 100644 --- a/ocamlmerlin_mlx/kernel/mreader.mli +++ b/ocamlmerlin_mlx/kernel/mreader.mli @@ -1,19 +1,17 @@ # 1 "merlin/src/kernel/mreader.mli" -type parsetree = [ - | `Interface of Parsetree.signature - | `Implementation of Parsetree.structure -] - -type comment = (string * Location.t) - -type result = { - lexer_keywords: string list; - lexer_errors : exn list; - parser_errors : exn list; - comments : comment list; - parsetree : parsetree; - no_labels_for_completion : bool; -} +type parsetree = + [ `Interface of Parsetree.signature | `Implementation of Parsetree.structure ] + +type comment = string * Location.t + +type result = + { lexer_keywords : string list; + lexer_errors : exn list; + parser_errors : exn list; + comments : comment list; + parsetree : parsetree; + no_labels_for_completion : bool + } type pretty_parsetree = Extend_protocol.Reader.pretty_parsetree type outcometree = Extend_protocol.Reader.outcometree @@ -29,16 +27,17 @@ val with_ambient_reader : Mconfig.t -> Msource.t -> (unit -> 'a) -> 'a (* Main functions *) val parse : - ?for_completion:Msource.position -> Mconfig.t -> Msource.t * parsetree option -> result + ?for_completion:Msource.position -> + Mconfig.t -> + Msource.t * parsetree option -> + result -val print_pretty : - Mconfig.t -> Msource.t -> pretty_parsetree -> string +val print_pretty : Mconfig.t -> Msource.t -> pretty_parsetree -> string -val print_outcome : - Mconfig.t -> Msource.t -> outcometree -> string +val print_outcome : Mconfig.t -> Msource.t -> outcometree -> string val print_batch_outcome : Mconfig.t -> Msource.t -> outcometree list -> string list -val reconstruct_identifier: +val reconstruct_identifier : Mconfig.t -> Msource.t -> Lexing.position -> string Location.loc list diff --git a/ocamlmerlin_mlx/kernel/mreader_explain.ml b/ocamlmerlin_mlx/kernel/mreader_explain.ml index 6c3034e..2b9d263 100644 --- a/ocamlmerlin_mlx/kernel/mreader_explain.ml +++ b/ocamlmerlin_mlx/kernel/mreader_explain.ml @@ -3,16 +3,16 @@ open Parser_raw open MenhirInterpreter let opening (type a) : a terminal -> string option = function - | T_STRUCT -> Some "struct" - | T_SIG -> Some "sig" - | T_OBJECT -> Some "object" - | T_BEGIN -> Some "begin" - | T_LPAREN -> Some "(" - | T_LBRACKET -> Some "[" - | T_LBRACE -> Some "{" - | T_LBRACKETBAR -> Some "[|" + | T_STRUCT -> Some "struct" + | T_SIG -> Some "sig" + | T_OBJECT -> Some "object" + | T_BEGIN -> Some "begin" + | T_LPAREN -> Some "(" + | T_LBRACKET -> Some "[" + | T_LBRACE -> Some "{" + | T_LBRACKETBAR -> Some "[|" | T_LBRACKETLESS -> Some "[<" - | T_LBRACELESS -> Some "{<" + | T_LBRACELESS -> Some "{<" | _ -> None let opening_st st = @@ -21,12 +21,12 @@ let opening_st st = | _ -> None let closing (type a) : a terminal -> bool = function - | T_END -> true - | T_RPAREN -> true - | T_RBRACKET -> true - | T_RBRACE -> true - | T_BARRBRACKET -> true - | T_GREATERRBRACE -> true + | T_END -> true + | T_RPAREN -> true + | T_RBRACKET -> true + | T_RBRACE -> true + | T_BARRBRACKET -> true + | T_GREATERRBRACE -> true | T_GREATERRBRACKET -> true | _ -> false @@ -35,17 +35,17 @@ let closing_st st = | T term -> closing term | _ -> false -type explanation = { - item: (string * Location.t) option; - unclosed: (string * Location.t) option; - location: Location.t; - popped: MenhirInterpreter.xsymbol list; - shifted: MenhirInterpreter.xsymbol option; - unexpected: MenhirInterpreter.token; -} +type explanation = + { item : (string * Location.t) option; + unclosed : (string * Location.t) option; + location : Location.t; + popped : MenhirInterpreter.xsymbol list; + shifted : MenhirInterpreter.xsymbol option; + unexpected : MenhirInterpreter.token + } let explain env (unexpected, startp, endp) popped shifted = - let mkloc s e = {Location. loc_start = s; loc_end = e; loc_ghost = false} in + let mkloc s e = { Location.loc_start = s; loc_end = e; loc_ghost = false } in let open MenhirInterpreter in let location = mkloc startp endp in let closed = ref 0 in @@ -53,45 +53,52 @@ let explain env (unexpected, startp, endp) popped shifted = let return item = { item; unclosed = !unclosed; location; popped; shifted; unexpected } in - let rec process env = match top env with + let rec process env = + match top env with | None -> return None - | Some (Element (st, _, startp, endp)) -> + | Some (Element (st, _, startp, endp)) -> ( if closing_st st then incr closed; - begin match opening_st st with + begin + match opening_st st with | None -> () | Some st -> if !closed = 0 && !unclosed = None then unclosed := Some (st, mkloc startp endp) - else - decr closed + else decr closed end; match Parser_explain.named_item_at (number st) with | name -> return (Some (name, mkloc startp endp)) - | exception Not_found -> + | exception Not_found -> ( match pop env with | None -> return None - | Some env -> process env + | Some env -> process env)) in process env let to_error { item; unclosed; location; popped; shifted; unexpected = _ } = - let inside = match item with + let inside = + match item with | None -> "" - | Some (name, _) -> " inside `" ^ name ^ "'" in - let after = match unclosed with + | Some (name, _) -> " inside `" ^ name ^ "'" + in + let after = + match unclosed with | None -> "" - | Some (name, _) -> " after unclosed " ^ name in - let friendly_name sym = match sym with + | Some (name, _) -> " after unclosed " ^ name + in + let friendly_name sym = + match sym with | X (T _) -> "`" ^ Parser_printer.print_symbol sym ^ "'" | X (N _) -> Parser_printer.print_symbol sym in let popped = String.concat " " (List.rev_map friendly_name popped) in - let expecting = match shifted with + let expecting = + match shifted with | None -> if popped = "" then "" else ", maybe remove " ^ popped | Some (X (T T_EOF)) -> "" | Some sym -> - if popped = "" then ", expecting " ^ (friendly_name sym) - else ", maybe replace " ^ popped ^ " by " ^ (friendly_name sym) + if popped = "" then ", expecting " ^ friendly_name sym + else ", maybe replace " ^ popped ^ " by " ^ friendly_name sym in let msg = Printf.sprintf "Syntax error%s%s%s" inside after expecting in Location.error ~loc:location ~source:Location.Parser msg diff --git a/ocamlmerlin_mlx/kernel/mreader_extend.ml b/ocamlmerlin_mlx/kernel/mreader_extend.ml index 2699843..eef6992 100644 --- a/ocamlmerlin_mlx/kernel/mreader_extend.ml +++ b/ocamlmerlin_mlx/kernel/mreader_extend.ml @@ -2,16 +2,16 @@ open Std open Extend_protocol.Reader -let {Logger. log} = Logger.for_section "Mreader_extend" +let { Logger.log } = Logger.for_section "Mreader_extend" -type t = { - name : string; - args : string list; - config : Mconfig.t; - source : Msource.t; - driver : Extend_driver.t; - mutable stopped : bool; -} +type t = + { name : string; + args : string list; + config : Mconfig.t; + source : Msource.t; + driver : Extend_driver.t; + mutable stopped : bool + } let print () t = t.name @@ -19,26 +19,24 @@ let incorrect_behavior fn t = log ~title:fn "Extension %S has incorrect behavior" t.name let stop t = - if t.stopped then - log ~title:"stop" "%a: already closed" print t + if t.stopped then log ~title:"stop" "%a: already closed" print t else ( log ~title:"stop" "%a" print t; t.stopped <- true; - Extend_driver.stop t.driver - ) + Extend_driver.stop t.driver) let stop_finalise t = if not t.stopped then ( log ~title:"stop_finalise" "leaked process %s" t.name; - stop t - ) + stop t) let load_source t config source = - let buffer = { - path = Mconfig.filename config; - flags = t.args; - text = Msource.text source; - } in + let buffer = + { path = Mconfig.filename config; + flags = t.args; + text = Msource.text source + } + in match Extend_driver.reader t.driver (Req_load buffer) with | Res_loaded -> Some t | _ -> @@ -61,21 +59,22 @@ let parsetree = function let parse ?for_completion t = log ~title:"parse" "?for_completion:%a %a" - (Option.print Msource.print_position) for_completion - print t; + (Option.print Msource.print_position) + for_completion print t; assert (not t.stopped); match Extend_driver.reader t.driver (match for_completion with - | None -> Req_parse - | Some pos -> - let pos = Msource.get_lexing_pos t.source - ~filename:(Mconfig.filename t.config) pos - in - Req_parse_for_completion pos) + | None -> Req_parse + | Some pos -> + let pos = + Msource.get_lexing_pos t.source + ~filename:(Mconfig.filename t.config) + pos + in + Req_parse_for_completion pos) with - | Res_parse ast -> - Some (`No_labels false, parsetree ast) + | Res_parse ast -> Some (`No_labels false, parsetree ast) | Res_parse_for_completion (info, ast) -> Some (`No_labels (not info.complete_labels), parsetree ast) | _ -> @@ -83,8 +82,7 @@ let parse ?for_completion t = None let reconstruct_identifier pos t = - log ~title:"reconstruct_identifier" "%a %a" - Lexing.print_position pos print t; + log ~title:"reconstruct_identifier" "%a %a" Lexing.print_position pos print t; match Extend_driver.reader t.driver (Req_get_ident_at pos) with | Res_get_ident_at ident -> Some ident | _ -> @@ -95,23 +93,21 @@ let attr_cleaner = let open Ast_mapper in let attributes mapper attrs = let not_merlin_attribute attr = - let (name,_) = Ast_helper.Attr.as_tuple attr in - not (String.is_prefixed ~by:"merlin." name.Location.txt) in + let name, _ = Ast_helper.Attr.as_tuple attr in + not (String.is_prefixed ~by:"merlin." name.Location.txt) + in let attrs = List.filter ~f:not_merlin_attribute attrs in default_mapper.attributes mapper attrs in { default_mapper with attributes } let clean_tree = - let open Ast_mapper in function - | Pretty_case_list x -> - Pretty_case_list (attr_cleaner.cases attr_cleaner x) - | Pretty_core_type x -> - Pretty_core_type (attr_cleaner.typ attr_cleaner x) - | Pretty_expression x -> - Pretty_expression (attr_cleaner.expr attr_cleaner x) - | Pretty_pattern x -> - Pretty_pattern (attr_cleaner.pat attr_cleaner x) + let open Ast_mapper in + function + | Pretty_case_list x -> Pretty_case_list (attr_cleaner.cases attr_cleaner x) + | Pretty_core_type x -> Pretty_core_type (attr_cleaner.typ attr_cleaner x) + | Pretty_expression x -> Pretty_expression (attr_cleaner.expr attr_cleaner x) + | Pretty_pattern x -> Pretty_pattern (attr_cleaner.pat attr_cleaner x) | Pretty_signature x -> Pretty_signature (attr_cleaner.signature attr_cleaner x) | Pretty_structure x -> @@ -134,16 +130,17 @@ let print_outcomes ts t = log ~title:"print_outcomes" "TODO %a" print t; match ts with | [] -> Some [] - | ts -> match Extend_driver.reader t.driver (Req_print_outcome ts) with + | ts -> ( + match Extend_driver.reader t.driver (Req_print_outcome ts) with | Res_print_outcome ts -> Some ts | _ -> incorrect_behavior "print_batch_outcome" t; - None + None) let print_outcome o t = log ~title:"print_outcome" "TODO %a" print t; - match Extend_driver.reader t.driver (Req_print_outcome [o]) with - | Res_print_outcome [o] -> Some o + match Extend_driver.reader t.driver (Req_print_outcome [ o ]) with + | Res_print_outcome [ o ] -> Some o | _ -> incorrect_behavior "print_batch_outcome" t; None diff --git a/ocamlmerlin_mlx/kernel/mreader_extend.mli b/ocamlmerlin_mlx/kernel/mreader_extend.mli index 416b850..7f58c7a 100644 --- a/ocamlmerlin_mlx/kernel/mreader_extend.mli +++ b/ocamlmerlin_mlx/kernel/mreader_extend.mli @@ -6,19 +6,19 @@ val stop : t -> unit val start : string -> string list -> Mconfig.t -> Msource.t -> t option val parse : - ?for_completion:Msource.position -> t -> - ([`No_labels of bool ] * - [`Implementation of Parsetree.structure | `Interface of Parsetree.signature]) + ?for_completion:Msource.position -> + t -> + ([ `No_labels of bool ] + * [ `Implementation of Parsetree.structure + | `Interface of Parsetree.signature ]) option val reconstruct_identifier : Lexing.position -> t -> string Location.loc list option -val print_pretty : - Extend_protocol.Reader.pretty_parsetree -> t -> string option +val print_pretty : Extend_protocol.Reader.pretty_parsetree -> t -> string option val print_outcomes : Extend_protocol.Reader.outcometree list -> t -> string list option -val print_outcome : - Extend_protocol.Reader.outcometree -> t -> string option +val print_outcome : Extend_protocol.Reader.outcometree -> t -> string option diff --git a/ocamlmerlin_mlx/kernel/mreader_lexer.ml b/ocamlmerlin_mlx/kernel/mreader_lexer.ml index e5d3d00..72995af 100644 --- a/ocamlmerlin_mlx/kernel/mreader_lexer.ml +++ b/ocamlmerlin_mlx/kernel/mreader_lexer.ml @@ -1,31 +1,31 @@ # 1 "merlin/src/kernel/mreader_lexer.ml" (* {{{ COPYING *( - This file is part of Merlin, an helper for ocaml editors + This file is part of Merlin, an helper for ocaml editors - Copyright (C) 2013 - 2015 Frédéric Bour - Thomas Refis - Simon Castellan + Copyright (C) 2013 - 2015 Frédéric Bour + Thomas Refis + Simon Castellan - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. - The Software is provided "as is", without warranty of any kind, express or - implied, including but not limited to the warranties of merchantability, - fitness for a particular purpose and noninfringement. In no event shall - the authors or copyright holders be liable for any claim, damages or other - liability, whether in an action of contract, tort or otherwise, arising - from, out of or in connection with the software or the use or other dealings - in the Software. + The Software is provided "as is", without warranty of any kind, express or + implied, including but not limited to the warranties of merchantability, + fitness for a particular purpose and noninfringement. In no event shall + the authors or copyright holders be liable for any claim, damages or other + liability, whether in an action of contract, tort or otherwise, arising + from, out of or in connection with the software or the use or other dealings + in the Software. -)* }}} *) + )* }}} *) open Std @@ -38,12 +38,12 @@ type item = | Comment of (string * Location.t) | Error of Lexer_raw.error * Location.t -type t = { - keywords: keywords; - config: Mconfig.t; - source: Msource.t; - items: item list; -} +type t = + { keywords : keywords; + config : Mconfig.t; + source : Msource.t; + items : item list + } let get_tokens keywords pos text = let state = Lexer_raw.make keywords in @@ -56,16 +56,10 @@ let get_tokens keywords pos text = | Lexer_raw.Return t -> let triple = (t, lexbuf.Lexing.lex_start_p, lexbuf.Lexing.lex_curr_p) in let items = Triple triple :: items in - if t = Parser_raw.EOF - then items - else continue items - | Lexer_raw.Fail (err, loc) -> - continue (Error (err, loc) :: items) - - and continue items = - aux items (Lexer_raw.token state lexbuf) + if t = Parser_raw.EOF then items else continue items + | Lexer_raw.Fail (err, loc) -> continue (Error (err, loc) :: items) + and continue items = aux items (Lexer_raw.token state lexbuf) in - in function | [] -> (* First line: skip #! ... *) @@ -75,35 +69,28 @@ let get_tokens keywords pos text = continue items let initial_position config = - { Lexing. - pos_fname = (Mconfig.filename config); + { Lexing.pos_fname = Mconfig.filename config; pos_lnum = 1; pos_bol = 0; - pos_cnum = 0; + pos_cnum = 0 } let make warnings keywords config source = Msupport.catch_errors warnings (ref []) @@ fun () -> let items = - get_tokens keywords - (initial_position config) - (Msource.text source) - [] + get_tokens keywords (initial_position config) (Msource.text source) [] in { keywords; items; config; source } let item_start = function - | Triple (_,s,_) -> s - | Comment (_, l) | Error (_, l) -> - l.Location.loc_start + | Triple (_, s, _) -> s + | Comment (_, l) | Error (_, l) -> l.Location.loc_start let item_end = function - | Triple (_,_,e) -> e - | Comment (_, l) | Error (_, l) -> - l.Location.loc_end + | Triple (_, _, e) -> e + | Comment (_, l) | Error (_, l) -> l.Location.loc_end -let initial_position t = - initial_position t.config +let initial_position t = initial_position t.config let rev_filter_map ~f lst = let rec aux acc = function @@ -119,36 +106,49 @@ let rev_filter_map ~f lst = aux [] lst let tokens t = - rev_filter_map t.items - ~f:(function Triple t -> Some t | _ -> None) + rev_filter_map t.items ~f:(function + | Triple t -> Some t + | _ -> None) -let keywords t = - Lexer_raw.list_keywords t.keywords +let keywords t = Lexer_raw.list_keywords t.keywords let errors t = - rev_filter_map t.items - ~f:(function Error (err, loc) -> Some (Lexer_raw.Error (err, loc)) - | _ -> None) + rev_filter_map t.items ~f:(function + | Error (err, loc) -> Some (Lexer_raw.Error (err, loc)) + | _ -> None) let comments t = - rev_filter_map t.items - ~f:(function Comment t -> Some t | _ -> None) + rev_filter_map t.items ~f:(function + | Comment t -> Some t + | _ -> None) open Parser_raw let is_operator = function | PREFIXOP s - | LETOP s | ANDOP s - | INFIXOP0 s | INFIXOP1 s | INFIXOP2 s | INFIXOP3 s | INFIXOP4 s -> Some s + | LETOP s + | ANDOP s + | INFIXOP0 s + | INFIXOP1 s + | INFIXOP2 s + | INFIXOP3 s + | INFIXOP4 s -> Some s | BANG -> Some "!" | PERCENT -> Some "%" - | PLUS -> Some "+" | PLUSDOT -> Some "+." - | MINUS -> Some "-" | MINUSDOT -> Some "-." - | STAR -> Some "*" | EQUAL -> Some "=" - | LESS -> Some "<" | GREATER -> Some ">" - | OR -> Some "or" | BARBAR -> Some "||" - | AMPERSAND -> Some "&" | AMPERAMPER -> Some "&&" - | COLONEQUAL -> Some ":=" | PLUSEQ -> Some "+=" + | PLUS -> Some "+" + | PLUSDOT -> Some "+." + | MINUS -> Some "-" + | MINUSDOT -> Some "-." + | STAR -> Some "*" + | EQUAL -> Some "=" + | LESS -> Some "<" + | GREATER -> Some ">" + | OR -> Some "or" + | BARBAR -> Some "||" + | AMPERSAND -> Some "&" + | AMPERAMPER -> Some "&&" + | COLONEQUAL -> Some ":=" + | PLUSEQ -> Some "+=" | _ -> None (* [reconstruct_identifier] is impossible to read at the moment, here is a @@ -226,60 +226,51 @@ let is_operator = function let reconstruct_identifier_from_tokens tokens pos = let rec look_for_component acc = function - (* Skip 'a and `A *) - | ((LIDENT _ | UIDENT _), _, _) :: - ((BACKQUOTE | QUOTE), _, _) :: items -> + | ((LIDENT _ | UIDENT _), _, _) :: ((BACKQUOTE | QUOTE), _, _) :: items -> check acc items - (* UIDENT is a regular a component *) - | (UIDENT _, _, _) as item :: items -> - look_for_dot (item :: acc) items - + | ((UIDENT _, _, _) as item) :: items -> look_for_dot (item :: acc) items (* LIDENT always begin a new identifier *) - | (LIDENT _, _, _) as item :: items -> - if acc = [] - then look_for_dot [item] items - else check acc (item :: items) - + | ((LIDENT _, _, _) as item) :: items -> + if acc = [] then look_for_dot [ item ] items else check acc (item :: items) (* Reified operators behave like LIDENT *) - | (RPAREN, _, _) :: (token, _, _ as item) :: (LPAREN, _, _) :: items - when is_operator token <> None && acc = [] -> - look_for_dot [item] items - + | (RPAREN, _, _) :: ((token, _, _) as item) :: (LPAREN, _, _) :: items + when is_operator token <> None && acc = [] -> look_for_dot [ item ] items (* An operator alone is an identifier on its own *) - | (token, _, _ as item) :: items - when is_operator token <> None && acc = [] -> - check [item] items - + | ((token, _, _) as item) :: items + when is_operator token <> None && acc = [] -> check [ item ] items (* Otherwise, check current accumulator and scan the rest of the input *) - | _ :: items -> - check acc items - + | _ :: items -> check acc items | [] -> raise Not_found - and look_for_dot acc = function - | (DOT,_,_) :: items -> look_for_component acc items + | (DOT, _, _) :: items -> look_for_component acc items | items -> check acc items - and check acc items = - if acc <> [] && - (let startp = match acc with - | (_, startp, _) :: _ -> startp - | _ -> assert false in - Lexing.compare_pos startp pos <= 0) && - (let endp = match List.last acc with - | Some ((_, _, endp)) -> endp - | _ -> assert false in - Lexing.compare_pos pos endp <= 0) + if + acc <> [] + && (let startp = + match acc with + | (_, startp, _) :: _ -> startp + | _ -> assert false + in + Lexing.compare_pos startp pos <= 0) + && + let endp = + match List.last acc with + | Some (_, _, endp) -> endp + | _ -> assert false + in + Lexing.compare_pos pos endp <= 0 then acc - else match items with + else + match items with | [] -> raise Not_found | (_, _, endp) :: _ when Lexing.compare_pos endp pos < 0 -> raise Not_found | _ -> look_for_component [] items - in + match look_for_component [] tokens with | exception Not_found -> [] | acc -> @@ -287,15 +278,15 @@ let reconstruct_identifier_from_tokens tokens pos = let id = match token with | UIDENT s | LIDENT s -> s - | _ -> match is_operator token with + | _ -> ( + match is_operator token with | Some t -> t - | None -> assert false + | None -> assert false) in - Location.mkloc id {Location. loc_start; loc_end; loc_ghost = false} + Location.mkloc id { Location.loc_start; loc_end; loc_ghost = false } in let before_pos = function - | (_, s, _) -> - Lexing.compare_pos s pos <= 0 + | _, s, _ -> Lexing.compare_pos s pos <= 0 in List.map ~f:fmt (List.filter ~f:before_pos acc) @@ -304,9 +295,9 @@ let reconstruct_identifier config source pos = let token = Lexer_ident.token lexbuf in let item = (token, lexbuf.Lexing.lex_start_p, lexbuf.Lexing.lex_curr_p) in match token with - | EOF -> (item :: acc) + | EOF -> item :: acc | EOL when Lexing.compare_pos lexbuf.Lexing.lex_curr_p pos > 0 -> - (item :: acc) + item :: acc | EOL -> lex [] lexbuf | _ -> lex (item :: acc) lexbuf in @@ -315,11 +306,10 @@ let reconstruct_identifier config source pos = let tokens = lex [] lexbuf in reconstruct_identifier_from_tokens tokens pos -let is_uppercase {Location. txt = x; _} = - x <> "" && Char.is_uppercase x.[0] +let is_uppercase { Location.txt = x; _ } = x <> "" && Char.is_uppercase x.[0] let rec drop_lowercase acc = function - | [x] -> List.rev (x :: acc) + | [ x ] -> List.rev (x :: acc) | x :: xs when not (is_uppercase x) -> drop_lowercase [] xs | x :: xs -> drop_lowercase (x :: acc) xs | [] -> List.rev acc @@ -334,30 +324,29 @@ let for_completion t pos = (* Cursor is before item: continue *) | item :: items when Lexing.compare_pos (item_start item) pos >= 0 -> aux (item :: acc) items - (* Cursor is in the middle of item: stop *) | item :: _ when Lexing.compare_pos (item_end item) pos > 0 -> check_label item; raise Exit - (* Cursor is at the end *) - | ((Triple (token, _, loc_end) as item) :: _) as items + | (Triple (token, _, loc_end) as item) :: _ as items when Lexing.compare_pos pos loc_end = 0 -> check_label item; - begin match token with + begin + match token with (* Already on identifier, no need to introduce *) | UIDENT _ | LIDENT _ -> raise Exit - | _ -> acc, items + | _ -> (acc, items) end - - | items -> acc, items + | items -> (acc, items) in let t = match aux [] t.items with | exception Exit -> t | acc, items -> - {t with items = - List.rev_append acc (Triple (LIDENT "", pos, pos) :: items)} + { t with + items = List.rev_append acc (Triple (LIDENT "", pos, pos) :: items) + } in (!no_labels, t) diff --git a/ocamlmerlin_mlx/kernel/mreader_lexer.mli b/ocamlmerlin_mlx/kernel/mreader_lexer.mli index cfc0b20..29ad44b 100644 --- a/ocamlmerlin_mlx/kernel/mreader_lexer.mli +++ b/ocamlmerlin_mlx/kernel/mreader_lexer.mli @@ -1,31 +1,31 @@ # 1 "merlin/src/kernel/mreader_lexer.mli" (* {{{ COPYING *( - This file is part of Merlin, an helper for ocaml editors + This file is part of Merlin, an helper for ocaml editors - Copyright (C) 2013 - 2015 Frédéric Bour - Thomas Refis - Simon Castellan + Copyright (C) 2013 - 2015 Frédéric Bour + Thomas Refis + Simon Castellan - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. - The Software is provided "as is", without warranty of any kind, express or - implied, including but not limited to the warranties of merchantability, - fitness for a particular purpose and noninfringement. In no event shall - the authors or copyright holders be liable for any claim, damages or other - liability, whether in an action of contract, tort or otherwise, arising - from, out of or in connection with the software or the use or other dealings - in the Software. + The Software is provided "as is", without warranty of any kind, express or + implied, including but not limited to the warranties of merchantability, + fitness for a particular purpose and noninfringement. In no event shall + the authors or copyright holders be liable for any claim, damages or other + liability, whether in an action of contract, tort or otherwise, arising + from, out of or in connection with the software or the use or other dealings + in the Software. -)* }}} *) + )* }}} *) type keywords = Lexer_raw.keywords @@ -35,17 +35,17 @@ type t val make : Warnings.state -> keywords -> Mconfig.t -> Msource.t -> t -val for_completion: t -> Lexing.position -> - bool (* complete labels or not *) * t +val for_completion : + t -> Lexing.position -> bool (* complete labels or not *) * t val initial_position : t -> Lexing.position -val tokens : t -> triple list +val tokens : t -> triple list val keywords : t -> string list -val errors : t -> exn list +val errors : t -> exn list val comments : t -> (string * Location.t) list -val reconstruct_identifier: +val reconstruct_identifier : Mconfig.t -> Msource.t -> Lexing.position -> string Location.loc list -val identifier_suffix: string Location.loc list -> string Location.loc list +val identifier_suffix : string Location.loc list -> string Location.loc list diff --git a/ocamlmerlin_mlx/kernel/mreader_parser.ml b/ocamlmerlin_mlx/kernel/mreader_parser.ml index d4c8c2d..28976c3 100644 --- a/ocamlmerlin_mlx/kernel/mreader_parser.ml +++ b/ocamlmerlin_mlx/kernel/mreader_parser.ml @@ -1,46 +1,45 @@ # 1 "merlin/src/kernel/mreader_parser.ml" (* {{{ COPYING *( - This file is part of Merlin, an helper for ocaml editors + This file is part of Merlin, an helper for ocaml editors - Copyright (C) 2013 - 2015 Frédéric Bour - Thomas Refis - Simon Castellan + Copyright (C) 2013 - 2015 Frédéric Bour + Thomas Refis + Simon Castellan - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. - The Software is provided "as is", without warranty of any kind, express or - implied, including but not limited to the warranties of merchantability, - fitness for a particular purpose and noninfringement. In no event shall - the authors or copyright holders be liable for any claim, damages or other - liability, whether in an action of contract, tort or otherwise, arising - from, out of or in connection with the software or the use or other dealings - in the Software. + The Software is provided "as is", without warranty of any kind, express or + implied, including but not limited to the warranties of merchantability, + fitness for a particular purpose and noninfringement. In no event shall + the authors or copyright holders be liable for any claim, damages or other + liability, whether in an action of contract, tort or otherwise, arising + from, out of or in connection with the software or the use or other dealings + in the Software. -)* }}} *) + )* }}} *) open Std module I = Parser_raw.MenhirInterpreter -type kind = - | ML - | MLI - (*| MLL | MLY*) +type kind = ML | MLI +(*| MLL | MLY*) module Dump = struct let symbol () = Parser_printer.print_symbol end -module R = Mreader_recover.Make +module R = + Mreader_recover.Make (I) (struct include Parser_recover @@ -57,29 +56,24 @@ module R = Mreader_recover.Make let nullable = Parser_explain.nullable end) - (Dump) - -type 'a step = - | Correct of 'a I.checkpoint - | Recovering of 'a R.candidates - -type tree = [ - | `Interface of Parsetree.signature - | `Implementation of Parsetree.structure -] - -type steps =[ - | `Signature of (Parsetree.signature step * Mreader_lexer.triple) list - | `Structure of (Parsetree.structure step * Mreader_lexer.triple) list -] - -type t = { - kind: kind; - tree: tree; - steps: steps; - errors: exn list; - lexer: Mreader_lexer.t; -} + (Dump) + +type 'a step = Correct of 'a I.checkpoint | Recovering of 'a R.candidates + +type tree = + [ `Interface of Parsetree.signature | `Implementation of Parsetree.structure ] + +type steps = + [ `Signature of (Parsetree.signature step * Mreader_lexer.triple) list + | `Structure of (Parsetree.structure step * Mreader_lexer.triple) list ] + +type t = + { kind : kind; + tree : tree; + steps : steps; + errors : exn list; + lexer : Mreader_lexer.t + } let eof_token = (Parser_raw.EOF, Lexing.dummy_pos, Lexing.dummy_pos) @@ -88,81 +82,72 @@ let errors_ref = ref [] let resume_parse = let rec normal acc tokens = function | I.InputNeeded env as checkpoint -> - let token, tokens = match tokens with - | token :: tokens -> token, tokens - | [] -> eof_token, [] + let token, tokens = + match tokens with + | token :: tokens -> (token, tokens) + | [] -> (eof_token, []) in check_for_error acc token tokens env (I.offer checkpoint token) - - | I.Shifting (_,env,_) | I.AboutToReduce (env,_) as checkpoint -> - begin match I.resume checkpoint with - | checkpoint' -> normal acc tokens checkpoint' - | exception exn -> - Msupport.raise_error exn; - let token = match acc with - | [] -> assert false - (* Parser raised error before parsing anything *) - | (_, token) :: _ -> token - in - enter_error acc token tokens env - end - - | I.Accepted v -> acc, v - - | I.Rejected | I.HandlingError _ -> - assert false - + | (I.Shifting (_, env, _) | I.AboutToReduce (env, _)) as checkpoint -> begin + match I.resume checkpoint with + | checkpoint' -> normal acc tokens checkpoint' + | exception exn -> + Msupport.raise_error exn; + let token = + match acc with + | [] -> assert false + (* Parser raised error before parsing anything *) + | (_, token) :: _ -> token + in + enter_error acc token tokens env + end + | I.Accepted v -> (acc, v) + | I.Rejected | I.HandlingError _ -> assert false and check_for_error acc token tokens env = function - | I.HandlingError _ -> - enter_error acc token tokens env - - | I.Shifting _ | I.AboutToReduce _ as checkpoint -> - begin match I.resume checkpoint with - | checkpoint' -> check_for_error acc token tokens env checkpoint' - | exception exn -> - Msupport.raise_error exn; - enter_error acc token tokens env - end - + | I.HandlingError _ -> enter_error acc token tokens env + | (I.Shifting _ | I.AboutToReduce _) as checkpoint -> begin + match I.resume checkpoint with + | checkpoint' -> check_for_error acc token tokens env checkpoint' + | exception exn -> + Msupport.raise_error exn; + enter_error acc token tokens env + end | checkpoint -> normal ((Correct checkpoint, token) :: acc) tokens checkpoint - and enter_error acc token tokens env = let candidates = R.generate env in let explanation = - Mreader_explain.explain env token - candidates.R.popped candidates.R.shifted + Mreader_explain.explain env token candidates.R.popped candidates.R.shifted in errors_ref := Mreader_explain.Syntax_explanation explanation :: !errors_ref; recover acc (token :: tokens) candidates - and recover acc tokens candidates = - let token, tokens = match tokens with - | token :: tokens -> token, tokens - | [] -> eof_token, [] + let token, tokens = + match tokens with + | token :: tokens -> (token, tokens) + | [] -> (eof_token, []) in - let acc' = ((Recovering candidates, token) :: acc) in + let acc' = (Recovering candidates, token) :: acc in match R.attempt candidates token with | `Fail -> if tokens = [] then match candidates.R.final with | None -> failwith "Empty file" - | Some v -> acc', v - else - recover acc tokens candidates - | `Accept v -> acc', v + | Some v -> (acc', v) + else recover acc tokens candidates + | `Accept v -> (acc', v) | `Ok (checkpoint, _) -> normal ((Correct checkpoint, token) :: acc) tokens checkpoint in fun acc tokens -> function - | Correct checkpoint -> normal acc tokens checkpoint - | Recovering candidates -> recover acc tokens candidates + | Correct checkpoint -> normal acc tokens checkpoint + | Recovering candidates -> recover acc tokens candidates let seek_step steps tokens = let rec aux acc = function - | (step :: steps), (token :: tokens) when snd step = token -> + | step :: steps, token :: tokens when snd step = token -> aux (step :: acc) (steps, tokens) - | _, tokens -> acc, tokens + | _, tokens -> (acc, tokens) in aux [] (steps, tokens) @@ -174,38 +159,42 @@ let parse initial steps tokens initial_pos = | [] -> Correct (initial initial_pos) in let acc, result = resume_parse acc tokens step in - List.rev acc, result + (List.rev acc, result) let run_parser warnings lexer previous kind = Msupport.catch_errors warnings errors_ref @@ fun () -> let tokens = Mreader_lexer.tokens lexer in let initial_pos = Mreader_lexer.initial_position lexer in match kind with - | ML -> - let steps = match previous with + | ML -> + let steps = + match previous with | `Structure steps -> steps | _ -> [] in let steps, result = let state = Parser_raw.Incremental.implementation in - parse state steps tokens initial_pos in - `Structure steps, `Implementation result + parse state steps tokens initial_pos + in + (`Structure steps, `Implementation result) | MLI -> - let steps = match previous with + let steps = + match previous with | `Signature steps -> steps | _ -> [] in let steps, result = let state = Parser_raw.Incremental.interface in - parse state steps tokens initial_pos in - `Signature steps, `Interface result + parse state steps tokens initial_pos + in + (`Signature steps, `Interface result) let make warnings lexer kind = errors_ref := []; let steps, tree = run_parser warnings lexer `None kind in let errors = !errors_ref in errors_ref := []; - {kind; steps; tree; errors; lexer} + { kind; steps; tree; errors; lexer } let result t = t.tree diff --git a/ocamlmerlin_mlx/kernel/mreader_parser.mli b/ocamlmerlin_mlx/kernel/mreader_parser.mli index be2dce4..033c496 100644 --- a/ocamlmerlin_mlx/kernel/mreader_parser.mli +++ b/ocamlmerlin_mlx/kernel/mreader_parser.mli @@ -1,45 +1,41 @@ # 1 "merlin/src/kernel/mreader_parser.mli" (* {{{ COPYING *( - This file is part of Merlin, an helper for ocaml editors + This file is part of Merlin, an helper for ocaml editors - Copyright (C) 2013 - 2015 Frédéric Bour - Thomas Refis - Simon Castellan + Copyright (C) 2013 - 2015 Frédéric Bour + Thomas Refis + Simon Castellan - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. - The Software is provided "as is", without warranty of any kind, express or - implied, including but not limited to the warranties of merchantability, - fitness for a particular purpose and noninfringement. In no event shall - the authors or copyright holders be liable for any claim, damages or other - liability, whether in an action of contract, tort or otherwise, arising - from, out of or in connection with the software or the use or other dealings - in the Software. + The Software is provided "as is", without warranty of any kind, express or + implied, including but not limited to the warranties of merchantability, + fitness for a particular purpose and noninfringement. In no event shall + the authors or copyright holders be liable for any claim, damages or other + liability, whether in an action of contract, tort or otherwise, arising + from, out of or in connection with the software or the use or other dealings + in the Software. -)* }}} *) + )* }}} *) -type kind = - | ML - | MLI - (*| MLL | MLY*) +type kind = ML | MLI +(*| MLL | MLY*) type t val make : Warnings.state -> Mreader_lexer.t -> kind -> t -type tree = [ - | `Interface of Parsetree.signature - | `Implementation of Parsetree.structure -] +type tree = + [ `Interface of Parsetree.signature | `Implementation of Parsetree.structure ] val result : t -> tree diff --git a/ocamlmerlin_mlx/kernel/mreader_recover.ml b/ocamlmerlin_mlx/kernel/mreader_recover.ml index bf5cae6..cfb870a 100644 --- a/ocamlmerlin_mlx/kernel/mreader_recover.ml +++ b/ocamlmerlin_mlx/kernel/mreader_recover.ml @@ -1,52 +1,47 @@ # 1 "merlin/src/kernel/mreader_recover.ml" open Std -let {Logger. log} = Logger.for_section "Mreader_recover" +let { Logger.log } = Logger.for_section "Mreader_recover" module Make (Parser : MenhirLib.IncrementalEngine.EVERYTHING) (Recovery : sig - val default_value : Location.t -> 'a Parser.symbol -> 'a + val default_value : Location.t -> 'a Parser.symbol -> 'a - type action = - | Abort - | R of int - | S : 'a Parser.symbol -> action - | Sub of action list + type action = + | Abort + | R of int + | S : 'a Parser.symbol -> action + | Sub of action list - type decision = - | Nothing - | One of action list - | Select of (int -> action list) + type decision = + | Nothing + | One of action list + | Select of (int -> action list) - val depth : int array + val depth : int array - val recover : int -> decision + val recover : int -> decision - val guide : 'a Parser.symbol -> bool + val guide : 'a Parser.symbol -> bool - val token_of_terminal : 'a Parser.terminal -> 'a -> Parser.token + val token_of_terminal : 'a Parser.terminal -> 'a -> Parser.token - val nullable : 'a Parser.nonterminal -> bool - end) + val nullable : 'a Parser.nonterminal -> bool + end) (Dump : sig - val symbol : unit -> Parser.xsymbol -> string - end) = + val symbol : unit -> Parser.xsymbol -> string + end) = struct + type 'a candidate = + { line : int; min_col : int; max_col : int; env : 'a Parser.env } - type 'a candidate = { - line: int; - min_col: int; - max_col: int; - env: 'a Parser.env; - } - - type 'a candidates = { - popped: Parser.xsymbol list; - shifted: Parser.xsymbol option; - final: 'a option; - candidates: 'a candidate list; - } + type 'a candidates = + { popped : Parser.xsymbol list; + shifted : Parser.xsymbol option; + final : 'a option; + candidates : 'a candidate list + } module T = struct (* FIXME: this is a bit ugly. We should ask for the type to be exported @@ -75,41 +70,41 @@ struct | Parser.HandlingError _ | Parser.Rejected -> `Fail | Parser.AboutToReduce _ when not allow_reduction -> `Fail | Parser.Accepted v -> `Accept v - | Parser.Shifting _ | Parser.AboutToReduce _ as checkpoint -> + | (Parser.Shifting _ | Parser.AboutToReduce _) as checkpoint -> aux true (Parser.resume checkpoint) | Parser.InputNeeded env as checkpoint -> `Recovered (checkpoint, env) in aux allow_reduction (Parser.offer (T.inj (T.InputNeeded env)) token) - let rec follow_guide col env = match Parser.top env with + let rec follow_guide col env = + match Parser.top env with | None -> col | Some (Parser.Element (state, _, pos, _)) -> if Recovery.guide (Parser.incoming_symbol state) then match Parser.pop env with | None -> col | Some env -> follow_guide (snd (Lexing.split_pos pos)) env - else - col + else col let candidate env = let line, min_col, max_col = match Parser.top env with - | None -> 1, 0, 0 + | None -> (1, 0, 0) | Some (Parser.Element (state, _, pos, _)) -> let depth = Recovery.depth.(Parser.number state) in let line, col = Lexing.split_pos pos in - if depth = 0 then - line, col, col + if depth = 0 then (line, col, col) else - let col' = match Parser.pop_many depth env with + let col' = + match Parser.pop_many depth env with | None -> max_int - | Some env -> + | Some env -> ( match Parser.top env with | None -> max_int | Some (Parser.Element (_, _, pos, _)) -> - follow_guide (snd (Lexing.split_pos pos)) env + follow_guide (snd (Lexing.split_pos pos)) env) in - line, min col col', max col col' + (line, min col col', max col col') in { line; min_col; max_col; env } @@ -117,27 +112,29 @@ struct let _, startp, _ = token in let line, col = Lexing.split_pos startp in let more_indented candidate = - line <> candidate.line && candidate.min_col > col in + line <> candidate.line && candidate.min_col > col + in let recoveries = List.drop_while ~f:more_indented r.candidates in let same_indented candidate = - line = candidate.line || - (candidate.min_col <= col && col <= candidate.max_col) + line = candidate.line + || (candidate.min_col <= col && col <= candidate.max_col) in let recoveries = List.take_while ~f:same_indented recoveries in let rec aux = function | [] -> `Fail - | x :: xs -> match feed_token ~allow_reduction:true token x.env with + | x :: xs -> ( + match feed_token ~allow_reduction:true token x.env with | `Fail -> (*if not (is_closed k) then printf k "Couldn't resume %d with %S.\n" (env_state x.env) (let (t,_,_) = token in Dump.token t);*) aux xs | `Recovered (checkpoint, _) -> `Ok (checkpoint, x.env) - | `Accept v -> - begin match aux xs with - | `Fail -> `Accept v - | x -> x - end + | `Accept v -> begin + match aux xs with + | `Fail -> `Accept v + | x -> x + end) in aux recoveries @@ -149,7 +146,9 @@ struct | Some (Parser.Element (state, _, _, _)) -> Parser.number state else match Parser.pop env with - | None -> assert (n = 1); -1 + | None -> + assert (n = 1); + -1 | Some env -> nth_state env (n - 1) in let st = nth_state env 0 in @@ -165,13 +164,14 @@ struct let shifted = ref None in let rec aux acc env = match Parser.top env with - | None -> None, acc - | Some (Parser.Element (state, _, _startp, endp)) -> + | None -> (None, acc) + | Some (Parser.Element (state, _, _startp, endp)) -> ( (*Dump.element k elt;*) log ~title:"decide state" "%d" (Parser.number state); let actions = decide env in let candidate0 = candidate env in - let rec eval (env : a Parser.env) : Recovery.action -> a Parser.env = function + let rec eval (env : a Parser.env) : Recovery.action -> a Parser.env = + function | Recovery.Abort -> log ~title:"eval Abort" ""; raise Not_found @@ -186,20 +186,25 @@ struct log ~title:"eval Shift N" "%a" Dump.symbol xsym; (* FIXME: if this is correct remove the fixme, otherwise use [startp] *) - let loc = {Location. loc_start = endp; loc_end = endp; loc_ghost = true} in + let loc = + { Location.loc_start = endp; loc_end = endp; loc_ghost = true } + in let v = Recovery.default_value loc sym in Parser.feed sym endp v endp env | Recovery.S (Parser.T t as sym) -> let xsym = Parser.X sym in if !shifted = None then shifted := Some xsym; log ~title:"eval Shift T" "%a" Dump.symbol xsym; - let loc = {Location. loc_start = endp; loc_end = endp; loc_ghost = true} in + let loc = + { Location.loc_start = endp; loc_end = endp; loc_ghost = true } + in let v = Recovery.default_value loc sym in let token = (Recovery.token_of_terminal t v, endp, endp) in - begin match feed_token ~allow_reduction:true token env with + begin + match feed_token ~allow_reduction:true token env with | `Fail -> assert false | `Accept v -> raise (E.Result v) - | `Recovered (_,env) -> env + | `Recovered (_, env) -> env end | Recovery.Sub actions -> log ~title:"enter Sub" ""; @@ -209,13 +214,12 @@ struct in match List.rev_scan_left [] ~f:eval ~init:env actions - |> List.map ~f:(fun env -> {candidate0 with env}) + |> List.map ~f:(fun env -> { candidate0 with env }) with - | exception Not_found -> None, acc - | exception (E.Result v) -> Some v, acc - | [] -> None, acc - | (candidate :: _) as candidates -> - aux (candidates @ acc) candidate.env + | exception Not_found -> (None, acc) + | exception E.Result v -> (Some v, acc) + | [] -> (None, acc) + | candidate :: _ as candidates -> aux (candidates @ acc) candidate.env) in let popped = ref [] in (*let should_pop stack = @@ -251,10 +255,11 @@ struct let generate env = let popped, shifted, final, candidates = generate env in - let candidates = List.rev_filter candidates - ~f:(fun t -> not (Parser.env_has_default_reduction t.env)) + let candidates = + List.rev_filter candidates ~f:(fun t -> + not (Parser.env_has_default_reduction t.env)) in - { popped; shifted; final; candidates = (candidate env) :: candidates } + { popped; shifted; final; candidates = candidate env :: candidates } (*let dump {Nav. nav; body; _} ~wrong:(t,s,_ as token) ~rest:tokens env = if not (is_closed body) then ( diff --git a/ocamlmerlin_mlx/kernel/mreader_recover.mli b/ocamlmerlin_mlx/kernel/mreader_recover.mli index e17f632..7358dc0 100644 --- a/ocamlmerlin_mlx/kernel/mreader_recover.mli +++ b/ocamlmerlin_mlx/kernel/mreader_recover.mli @@ -2,56 +2,48 @@ module Make (Parser : MenhirLib.IncrementalEngine.EVERYTHING) (Recovery : sig - val default_value : Location.t -> 'a Parser.symbol -> 'a + val default_value : Location.t -> 'a Parser.symbol -> 'a - type action = - | Abort - | R of int - | S : 'a Parser.symbol -> action - | Sub of action list + type action = + | Abort + | R of int + | S : 'a Parser.symbol -> action + | Sub of action list - type decision = - | Nothing - | One of action list - | Select of (int -> action list) + type decision = + | Nothing + | One of action list + | Select of (int -> action list) - val depth : int array + val depth : int array - val can_pop : 'a Parser.terminal -> bool + val can_pop : 'a Parser.terminal -> bool - val recover : int -> decision + val recover : int -> decision - val guide : 'a Parser.symbol -> bool + val guide : 'a Parser.symbol -> bool - val token_of_terminal : 'a Parser.terminal -> 'a -> Parser.token + val token_of_terminal : 'a Parser.terminal -> 'a -> Parser.token - val nullable : 'a Parser.nonterminal -> bool - end) + val nullable : 'a Parser.nonterminal -> bool + end) (Dump : sig - val symbol : unit -> Parser.xsymbol -> string - end) : -sig - - type 'a candidate = { - line: int; - min_col: int; - max_col: int; - env: 'a Parser.env; - } - - type 'a candidates = { - popped: Parser.xsymbol list; - shifted: Parser.xsymbol option; - final: 'a option; - candidates: 'a candidate list; - } - - val attempt : 'a candidates -> + val symbol : unit -> Parser.xsymbol -> string + end) : sig + type 'a candidate = + { line : int; min_col : int; max_col : int; env : 'a Parser.env } + + type 'a candidates = + { popped : Parser.xsymbol list; + shifted : Parser.xsymbol option; + final : 'a option; + candidates : 'a candidate list + } + + val attempt : + 'a candidates -> Parser.token * Lexing.position * Lexing.position -> - [> `Accept of 'a - | `Fail - | `Ok of 'a Parser.checkpoint * 'a Parser.env ] + [> `Accept of 'a | `Fail | `Ok of 'a Parser.checkpoint * 'a Parser.env ] val generate : 'a Parser.env -> 'a candidates - end diff --git a/ocamlmerlin_mlx/kernel/msource.ml b/ocamlmerlin_mlx/kernel/msource.ml index c6cb6cf..0126da8 100644 --- a/ocamlmerlin_mlx/kernel/msource.ml +++ b/ocamlmerlin_mlx/kernel/msource.ml @@ -2,11 +2,9 @@ (* Merlin representation of a textual source code *) open Std -let {Logger. log} = Logger.for_section "Msource" +let { Logger.log } = Logger.for_section "Msource" -type t = { - text: string; -} +type t = { text : string } module Digest = struct type t = Digest.t @@ -15,64 +13,56 @@ module Digest = struct let equal = Digest.equal end -let dump t = `Assoc [ - "text" , `String t.text; - ] +let dump t = `Assoc [ ("text", `String t.text) ] let print_position () = function | `Start -> "start" | `Offset o -> string_of_int o - | `Logical (l,c) -> string_of_int l ^ ":" ^ string_of_int c + | `Logical (l, c) -> string_of_int l ^ ":" ^ string_of_int c | `End -> "end" -let make text = {text} +let make text = { text } (* Position management *) -type position = [ - | `Start - | `Offset of int - | `Logical of int * int - | `End -] +type position = [ `Start | `Offset of int | `Logical of int * int | `End ] exception Found of int -let find_line line {text} = +let find_line line { text } = if line <= 0 then Printf.ksprintf invalid_arg - "Msource.find_line: invalid line number %d. \ - Numbering starts from 1" line; - if line = 1 then 0 else + "Msource.find_line: invalid line number %d. Numbering starts from 1" line; + if line = 1 then 0 + else let line' = ref line in try for i = 0 to String.length text - 1 do if text.[i] = '\n' then begin decr line'; - if !line' = 1 then - raise (Found i); + if !line' = 1 then raise (Found i) end done; - log ~title:"find_line" "line %d out of bounds (max = %d)" - line (line - !line'); + log ~title:"find_line" "line %d out of bounds (max = %d)" line + (line - !line'); String.length text - with Found n -> - n + 1 + with Found n -> n + 1 -let find_offset ({text} as t) line col = +let find_offset ({ text } as t) line col = assert (col >= 0); let offset = find_line line t in - if col = 0 then offset else + if col = 0 then offset + else try for i = offset to min (offset + col) (String.length text) - 1 do if text.[i] = '\n' then begin log ~title:"find_offset" - "%d:%d out of line bounds, line %d only has %d columns" - line col line (i - offset); + "%d:%d out of line bounds, line %d only has %d columns" line col + line (i - offset); raise (Found i) end done; - if (offset + col) > (String.length text) then begin + if offset + col > String.length text then begin log ~title:"find_offset" "%d:%d out of file bounds" line col end; offset + col @@ -82,24 +72,22 @@ let get_offset t = function | `Start -> `Offset 0 | `Offset x -> assert (x >= 0); - if x <= String.length t.text then - (`Offset x) + if x <= String.length t.text then `Offset x else begin - log ~title:"get_offset" - "offset %d out of bounds (size is %d)" x (String.length t.text); - (`Offset (String.length t.text)) + log ~title:"get_offset" "offset %d out of bounds (size is %d)" x + (String.length t.text); + `Offset (String.length t.text) end - | `End -> - `Offset (String.length t.text) - | `Logical (line, col) -> - `Offset (find_offset t line col) + | `End -> `Offset (String.length t.text) + | `Logical (line, col) -> `Offset (find_offset t line col) -let get_logical {text} = function +let get_logical { text } = function | `Start -> `Logical (1, 0) | `Logical _ as p -> p - | `Offset _ | `End as r -> + | (`Offset _ | `End) as r -> let len = String.length text in - let offset = match r with + let offset = + match r with | `Offset x when x > len -> log ~title:"get_logical" "offset %d out of bounds (size is %d)" x len; len @@ -113,29 +101,33 @@ let get_logical {text} = function for i = 0 to offset - 1 do if text.[i] = '\n' then begin incr line; - cnum := i + 1; - end; + cnum := i + 1 + end done; `Logical (!line, offset - !cnum) +let compare_position t x y = + let `Offset ox = get_offset t x in + let `Offset oy = get_offset t y in + compare ox oy + let get_lexing_pos t ~filename pos = - let `Offset o = get_offset t pos in - let `Logical (line, col) = get_logical t pos in - { Lexing. - pos_fname = filename; + let (`Offset o) = get_offset t pos in + let (`Logical (line, col)) = get_logical t pos in + { Lexing.pos_fname = filename; pos_lnum = line; - pos_bol = o - col; - pos_cnum = o; + pos_bol = o - col; + pos_cnum = o } let substitute t starting ending text = let len = String.length t.text in - let `Offset starting = get_offset t starting in - let `Offset ending = match ending with + let (`Offset starting) = get_offset t starting in + let (`Offset ending) = + match ending with | `End -> `Offset len | `Length l -> - if starting + l <= len then - `Offset (starting + l) + if starting + l <= len then `Offset (starting + l) else begin log ~title:"substitute" "offset %d + length %d out of bounds (size is %d)" starting l len; @@ -143,14 +135,13 @@ let substitute t starting ending text = end | #position as p -> get_offset t p in - if ending < starting then - invalid_arg "Source.substitute: ending < starting"; + if ending < starting then invalid_arg "Source.substitute: ending < starting"; let text = - String.sub t.text ~pos:0 ~len:starting ^ - text ^ - String.sub t.text ~pos:ending ~len:(len - ending) + String.sub t.text ~pos:0 ~len:starting + ^ text + ^ String.sub t.text ~pos:ending ~len:(len - ending) in - {text} + { text } (* Accessing content *) diff --git a/ocamlmerlin_mlx/kernel/msource.mli b/ocamlmerlin_mlx/kernel/msource.mli index e3f9007..e47b768 100644 --- a/ocamlmerlin_mlx/kernel/msource.mli +++ b/ocamlmerlin_mlx/kernel/msource.mli @@ -22,27 +22,25 @@ val make : string -> t (** {1 Position management} *) -type position = [ - | `Start - | `Offset of int - | `Logical of int * int - | `End -] +type position = [ `Start | `Offset of int | `Logical of int * int | `End ] -val get_offset : t -> [< position] -> [> `Offset of int] +val get_offset : t -> [< position ] -> [> `Offset of int ] -val get_logical : t -> [< position] -> [> `Logical of int * int] +val get_logical : t -> [< position ] -> [> `Logical of int * int ] -val get_lexing_pos : t -> filename:string -> [< position] -> Lexing.position +val compare_position : t -> position -> position -> int + +val get_lexing_pos : t -> filename:string -> [< position ] -> Lexing.position (** {1 Managing content} *) (** Updating content *) -val substitute : t -> [< position] -> [< position | `Length of int] -> string -> t +val substitute : + t -> [< position ] -> [< position | `Length of int ] -> string -> t (** Source code of the file *) val text : t -> string val dump : t -> Std.json -val print_position : unit -> [< position] -> string +val print_position : unit -> [< position ] -> string diff --git a/ocamlmerlin_mlx/ocaml/parsing/ast_helper.ml b/ocamlmerlin_mlx/ocaml/parsing/ast_helper.ml index ce4c272..eae144c 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/ast_helper.ml +++ b/ocamlmerlin_mlx/ocaml/parsing/ast_helper.ml @@ -30,21 +30,29 @@ type attrs = attribute list let default_loc = ref Location.none -let const_string s = Pconst_string (s, !default_loc, None) +let const_string s = + let pconst_desc = Pconst_string (s, !default_loc, None) in + let pconst_loc = !default_loc in + {pconst_loc; pconst_desc} let with_default_loc l f = Misc.protect_refs [Misc.R (default_loc, l)] f module Const = struct - let integer ?suffix i = Pconst_integer (i, suffix) - let int ?suffix i = integer ?suffix (Int.to_string i) - let int32 ?(suffix='l') i = integer ~suffix (Int32.to_string i) - let int64 ?(suffix='L') i = integer ~suffix (Int64.to_string i) - let nativeint ?(suffix='n') i = integer ~suffix (Nativeint.to_string i) - let float ?suffix f = Pconst_float (f, suffix) - let char c = Pconst_char c + let mk ?(loc = !default_loc) d = + {pconst_desc = d; + pconst_loc = loc} + + let integer ?loc ?suffix i = mk ?loc (Pconst_integer (i, suffix)) + let int ?loc ?suffix i = integer ?loc ?suffix (Int.to_string i) + let int32 ?loc ?(suffix='l') i = integer ?loc ~suffix (Int32.to_string i) + let int64 ?loc ?(suffix='L') i = integer ?loc ~suffix (Int64.to_string i) + let nativeint ?loc ?(suffix='n') i = + integer ?loc ~suffix (Nativeint.to_string i) + let float ?loc ?suffix f = mk ?loc (Pconst_float (f, suffix)) + let char ?loc c = mk ?loc (Pconst_char c) let string ?quotation_delimiter ?(loc= !default_loc) s = - Pconst_string (s, loc, quotation_delimiter) + mk ~loc (Pconst_string (s, loc, quotation_delimiter)) end module Attr = struct @@ -75,8 +83,9 @@ module Typ = struct let alias ?loc ?attrs a b = mk ?loc ?attrs (Ptyp_alias (a, b)) let variant ?loc ?attrs a b c = mk ?loc ?attrs (Ptyp_variant (a, b, c)) let poly ?loc ?attrs a b = mk ?loc ?attrs (Ptyp_poly (a, b)) - let package ?loc ?attrs a b = mk ?loc ?attrs (Ptyp_package (a, b)) + let package ?loc ?attrs a = mk ?loc ?attrs (Ptyp_package a) let extension ?loc ?attrs a = mk ?loc ?attrs (Ptyp_extension a) + let open_ ?loc ?attrs mod_ident t = mk ?loc ?attrs (Ptyp_open (mod_ident, t)) let force_poly t = match t.ptyp_desc with @@ -97,7 +106,8 @@ module Typ = struct Ptyp_var x | Ptyp_arrow (label,core_type,core_type') -> Ptyp_arrow(label, loop core_type, loop core_type') - | Ptyp_tuple lst -> Ptyp_tuple (List.map loop lst) + | Ptyp_tuple lst -> + Ptyp_tuple (List.map (fun (l, t) -> l, loop t) lst) | Ptyp_constr( { txt = Longident.Lident s }, []) when List.mem s var_names -> Ptyp_var s @@ -107,9 +117,9 @@ module Typ = struct Ptyp_object (List.map loop_object_field lst, o) | Ptyp_class (longident, lst) -> Ptyp_class (longident, List.map loop lst) - | Ptyp_alias(core_type, string) -> - check_variable var_names t.ptyp_loc string; - Ptyp_alias(loop core_type, string) + | Ptyp_alias(core_type, alias) -> + check_variable var_names alias.loc alias.txt; + Ptyp_alias(loop core_type, alias) | Ptyp_variant(row_field_list, flag, lbl_lst_option) -> Ptyp_variant(List.map loop_row_field row_field_list, flag, lbl_lst_option) @@ -117,8 +127,10 @@ module Typ = struct List.iter (fun v -> check_variable var_names t.ptyp_loc v.txt) string_lst; Ptyp_poly(string_lst, loop core_type) - | Ptyp_package(longident,lst) -> - Ptyp_package(longident,List.map (fun (n,typ) -> (n,loop typ) ) lst) + | Ptyp_package ptyp -> + Ptyp_package (loop_package_type ptyp) + | Ptyp_open (mod_ident, core_type) -> + Ptyp_open (mod_ident, loop core_type) | Ptyp_extension (s, arg) -> Ptyp_extension (s, arg) in @@ -139,9 +151,17 @@ module Typ = struct Oinherit (loop t) in { field with pof_desc; } + and loop_package_type ptyp = + { ptyp with + ppt_cstrs = List.map (fun (n,typ) -> (n,loop typ) ) ptyp.ppt_cstrs } in loop t + let package_type ?(loc = !default_loc) ?(attrs = []) p c = + {ppt_loc = loc; + ppt_path = p; + ppt_cstrs = c; + ppt_attrs = attrs} end module Pat = struct @@ -157,7 +177,7 @@ module Pat = struct let alias ?loc ?attrs a b = mk ?loc ?attrs (Ppat_alias (a, b)) let constant ?loc ?attrs a = mk ?loc ?attrs (Ppat_constant a) let interval ?loc ?attrs a b = mk ?loc ?attrs (Ppat_interval (a, b)) - let tuple ?loc ?attrs a = mk ?loc ?attrs (Ppat_tuple a) + let tuple ?loc ?attrs a b = mk ?loc ?attrs (Ppat_tuple (a, b)) let construct ?loc ?attrs a b = mk ?loc ?attrs (Ppat_construct (a, b)) let variant ?loc ?attrs a b = mk ?loc ?attrs (Ppat_variant (a, b)) let record ?loc ?attrs a b = mk ?loc ?attrs (Ppat_record (a, b)) @@ -169,6 +189,7 @@ module Pat = struct let unpack ?loc ?attrs a = mk ?loc ?attrs (Ppat_unpack a) let open_ ?loc ?attrs a b = mk ?loc ?attrs (Ppat_open (a, b)) let exception_ ?loc ?attrs a = mk ?loc ?attrs (Ppat_exception a) + let effect_ ?loc ?attrs a b = mk ?loc ?attrs (Ppat_effect(a, b)) let extension ?loc ?attrs a = mk ?loc ?attrs (Ppat_extension a) end @@ -186,8 +207,7 @@ module Exp = struct let ident ?loc ?attrs a = mk ?loc ?attrs (Pexp_ident a) let constant ?loc ?attrs a = mk ?loc ?attrs (Pexp_constant a) let let_ ?loc ?attrs a b c = mk ?loc ?attrs (Pexp_let (a, b, c)) - let fun_ ?loc ?attrs a b c d = mk ?loc ?attrs (Pexp_fun (a, b, c, d)) - let function_ ?loc ?attrs a = mk ?loc ?attrs (Pexp_function a) + let function_ ?loc ?attrs a b c = mk ?loc ?attrs (Pexp_function (a, b, c)) let apply ?loc ?attrs a b = mk ?loc ?attrs (Pexp_apply (a, b)) let match_ ?loc ?attrs a b = mk ?loc ?attrs (Pexp_match (a, b)) let try_ ?loc ?attrs a b = mk ?loc ?attrs (Pexp_try (a, b)) @@ -218,7 +238,7 @@ module Exp = struct let poly ?loc ?attrs a b = mk ?loc ?attrs (Pexp_poly (a, b)) let object_ ?loc ?attrs a = mk ?loc ?attrs (Pexp_object a) let newtype ?loc ?attrs a b = mk ?loc ?attrs (Pexp_newtype (a, b)) - let pack ?loc ?attrs a = mk ?loc ?attrs (Pexp_pack a) + let pack ?loc ?attrs a b = mk ?loc ?attrs (Pexp_pack (a, b)) let open_ ?loc ?attrs a b = mk ?loc ?attrs (Pexp_open (a, b)) let letop ?loc ?attrs let_ ands body = mk ?loc ?attrs (Pexp_letop {let_; ands; body}) @@ -617,7 +637,6 @@ module Te = struct pext_loc = loc; pext_attributes = add_docs_attrs docs (add_info_attrs info attrs); } - end module Csig = struct @@ -689,7 +708,7 @@ let no_label = Nolabel let extract_str_payload = function | PStr [{ pstr_desc = Pstr_eval ( {Parsetree. pexp_loc; pexp_desc = - Parsetree.Pexp_constant (Parsetree.Pconst_string (msg, _, _)) ; _ }, _ + Parsetree.Pexp_constant ({pconst_desc = Parsetree.Pconst_string (msg, _, _); _}) ; _ }, _ ); _ }] -> Some (msg, pexp_loc) | _ -> None diff --git a/ocamlmerlin_mlx/ocaml/parsing/ast_helper.mli b/ocamlmerlin_mlx/ocaml/parsing/ast_helper.mli index 8ac40ed..d5f38d7 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/ast_helper.mli +++ b/ocamlmerlin_mlx/ocaml/parsing/ast_helper.mli @@ -46,15 +46,16 @@ val with_default_loc: loc -> (unit -> 'a) -> 'a (** {1 Constants} *) module Const : sig - val char : char -> constant + val mk : ?loc:loc -> constant_desc -> constant + val char : ?loc:loc -> char -> constant val string : ?quotation_delimiter:string -> ?loc:Location.t -> string -> constant - val integer : ?suffix:char -> string -> constant - val int : ?suffix:char -> int -> constant - val int32 : ?suffix:char -> int32 -> constant - val int64 : ?suffix:char -> int64 -> constant - val nativeint : ?suffix:char -> nativeint -> constant - val float : ?suffix:char -> string -> constant + val integer : ?loc:loc -> ?suffix:char -> string -> constant + val int : ?loc:loc -> ?suffix:char -> int -> constant + val int32 : ?loc:loc -> ?suffix:char -> int32 -> constant + val int64 : ?loc:loc -> ?suffix:char -> int64 -> constant + val nativeint : ?loc:loc -> ?suffix:char -> nativeint -> constant + val float : ?loc:loc -> ?suffix:char -> string -> constant end (** {1 Attributes} *) @@ -76,17 +77,19 @@ module Typ : val var: ?loc:loc -> ?attrs:attrs -> string -> core_type val arrow: ?loc:loc -> ?attrs:attrs -> arg_label -> core_type -> core_type -> core_type - val tuple: ?loc:loc -> ?attrs:attrs -> core_type list -> core_type + val tuple: ?loc:loc -> ?attrs:attrs -> (string option * core_type) list + -> core_type val constr: ?loc:loc -> ?attrs:attrs -> lid -> core_type list -> core_type val object_: ?loc:loc -> ?attrs:attrs -> object_field list -> closed_flag -> core_type val class_: ?loc:loc -> ?attrs:attrs -> lid -> core_type list -> core_type - val alias: ?loc:loc -> ?attrs:attrs -> core_type -> string -> core_type + val alias: ?loc:loc -> ?attrs:attrs -> core_type -> string with_loc + -> core_type val variant: ?loc:loc -> ?attrs:attrs -> row_field list -> closed_flag -> label list option -> core_type val poly: ?loc:loc -> ?attrs:attrs -> str list -> core_type -> core_type - val package: ?loc:loc -> ?attrs:attrs -> lid -> (lid * core_type) list - -> core_type + val package: ?loc:loc -> ?attrs:attrs -> package_type -> core_type + val open_ : ?loc:loc -> ?attrs:attrs -> lid -> core_type -> core_type val extension: ?loc:loc -> ?attrs:attrs -> extension -> core_type val force_poly: core_type -> core_type @@ -99,6 +102,10 @@ module Typ : appears in [newtypes]. @since 4.05 *) + + val package_type: ?loc:loc -> ?attrs:attrs -> lid -> (lid * core_type) list + -> package_type + (** @since 5.4 *) end (** Patterns *) @@ -112,7 +119,8 @@ module Pat: val alias: ?loc:loc -> ?attrs:attrs -> pattern -> str -> pattern val constant: ?loc:loc -> ?attrs:attrs -> constant -> pattern val interval: ?loc:loc -> ?attrs:attrs -> constant -> constant -> pattern - val tuple: ?loc:loc -> ?attrs:attrs -> pattern list -> pattern + val tuple: ?loc:loc -> ?attrs:attrs -> (string option * pattern) list + -> closed_flag -> pattern val construct: ?loc:loc -> ?attrs:attrs -> lid -> (str list * pattern) option -> pattern val variant: ?loc:loc -> ?attrs:attrs -> label -> pattern option -> pattern @@ -126,6 +134,7 @@ module Pat: val unpack: ?loc:loc -> ?attrs:attrs -> str_opt -> pattern val open_: ?loc:loc -> ?attrs:attrs -> lid -> pattern -> pattern val exception_: ?loc:loc -> ?attrs:attrs -> pattern -> pattern + val effect_: ?loc:loc -> ?attrs:attrs -> pattern -> pattern -> pattern val extension: ?loc:loc -> ?attrs:attrs -> extension -> pattern end @@ -139,15 +148,16 @@ module Exp: val constant: ?loc:loc -> ?attrs:attrs -> constant -> expression val let_: ?loc:loc -> ?attrs:attrs -> rec_flag -> value_binding list -> expression -> expression - val fun_: ?loc:loc -> ?attrs:attrs -> arg_label -> expression option - -> pattern -> expression -> expression - val function_: ?loc:loc -> ?attrs:attrs -> case list -> expression + val function_ : ?loc:loc -> ?attrs:attrs -> function_param list + -> type_constraint option -> function_body + -> expression val apply: ?loc:loc -> ?attrs:attrs -> expression -> (arg_label * expression) list -> expression val match_: ?loc:loc -> ?attrs:attrs -> expression -> case list -> expression val try_: ?loc:loc -> ?attrs:attrs -> expression -> case list -> expression - val tuple: ?loc:loc -> ?attrs:attrs -> expression list -> expression + val tuple: ?loc:loc -> ?attrs:attrs -> (string option * expression) list + -> expression val construct: ?loc:loc -> ?attrs:attrs -> lid -> expression option -> expression val variant: ?loc:loc -> ?attrs:attrs -> label -> expression option @@ -188,7 +198,8 @@ module Exp: -> expression val object_: ?loc:loc -> ?attrs:attrs -> class_structure -> expression val newtype: ?loc:loc -> ?attrs:attrs -> str -> expression -> expression - val pack: ?loc:loc -> ?attrs:attrs -> module_expr -> expression + val pack: ?loc:loc -> ?attrs:attrs -> module_expr -> package_type option + -> expression val open_: ?loc:loc -> ?attrs:attrs -> open_declaration -> expression -> expression val letop: ?loc:loc -> ?attrs:attrs -> binding_op diff --git a/ocamlmerlin_mlx/ocaml/parsing/ast_iterator.ml b/ocamlmerlin_mlx/ocaml/parsing/ast_iterator.ml index 2398e77..638bbc6 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/ast_iterator.ml +++ b/ocamlmerlin_mlx/ocaml/parsing/ast_iterator.ml @@ -40,6 +40,7 @@ type iterator = { class_type_declaration: iterator -> class_type_declaration -> unit; class_type_field: iterator -> class_type_field -> unit; constructor_declaration: iterator -> constructor_declaration -> unit; + directive_argument: iterator -> directive_argument -> unit; expr: iterator -> expression -> unit; extension: iterator -> extension -> unit; extension_constructor: iterator -> extension_constructor -> unit; @@ -55,12 +56,15 @@ type iterator = { module_type_declaration: iterator -> module_type_declaration -> unit; open_declaration: iterator -> open_declaration -> unit; open_description: iterator -> open_description -> unit; + package_type: iterator -> package_type -> unit; pat: iterator -> pattern -> unit; payload: iterator -> payload -> unit; signature: iterator -> signature -> unit; signature_item: iterator -> signature_item -> unit; structure: iterator -> structure -> unit; structure_item: iterator -> structure_item -> unit; + toplevel_directive: iterator -> toplevel_directive -> unit; + toplevel_phrase: iterator -> toplevel_phrase -> unit; typ: iterator -> core_type -> unit; row_field: iterator -> row_field -> unit; object_field: iterator -> object_field -> unit; @@ -85,6 +89,20 @@ let iter_opt f = function None -> () | Some x -> f x let iter_loc sub {loc; txt = _} = sub.location sub loc +let rec iter_lid sub lid = + let open Longident in + match lid with + | Lident _ -> () + | Ldot (lid, id) -> + iter_loc sub lid; iter_lid sub lid.txt; iter_loc sub id + | Lapply (lid, lid') -> + iter_loc sub lid; iter_lid sub lid.txt; + iter_loc sub lid'; iter_lid sub lid'.txt + +let iter_loc_lid sub {loc; txt} = + iter_loc sub {loc; txt}; + iter_lid sub txt + module T = struct (* Type expressions for the core language *) @@ -118,20 +136,22 @@ module T = struct | Ptyp_var _ -> () | Ptyp_arrow (_lab, t1, t2) -> sub.typ sub t1; sub.typ sub t2 - | Ptyp_tuple tyl -> List.iter (sub.typ sub) tyl + | Ptyp_tuple tyl -> List.iter (fun (_, e) -> sub.typ sub e) tyl | Ptyp_constr (lid, tl) -> - iter_loc sub lid; List.iter (sub.typ sub) tl + iter_loc_lid sub lid; List.iter (sub.typ sub) tl | Ptyp_object (ol, _o) -> List.iter (object_field sub) ol | Ptyp_class (lid, tl) -> - iter_loc sub lid; List.iter (sub.typ sub) tl + iter_loc_lid sub lid; List.iter (sub.typ sub) tl | Ptyp_alias (t, _) -> sub.typ sub t | Ptyp_variant (rl, _b, _ll) -> List.iter (row_field sub) rl | Ptyp_poly (_, t) -> sub.typ sub t - | Ptyp_package (lid, l) -> - iter_loc sub lid; - List.iter (iter_tuple (iter_loc sub) (sub.typ sub)) l + | Ptyp_package ptyp -> + sub.package_type sub ptyp + | Ptyp_open (mod_ident, t) -> + iter_loc_lid sub mod_ident; + sub.typ sub t | Ptyp_extension x -> sub.extension sub x let iter_type_declaration sub @@ -169,7 +189,7 @@ module T = struct ptyext_private = _; ptyext_loc; ptyext_attributes} = - iter_loc sub ptyext_path; + iter_loc_lid sub ptyext_path; List.iter (sub.extension_constructor sub) ptyext_constructors; List.iter (iter_fst (sub.typ sub)) ptyext_params; sub.location sub ptyext_loc; @@ -187,7 +207,7 @@ module T = struct iter_constructor_arguments sub ctl; iter_opt (sub.typ sub) cto | Pext_rebind li -> - iter_loc sub li + iter_loc_lid sub li let iter_extension_constructor sub {pext_name; @@ -199,6 +219,12 @@ module T = struct sub.location sub pext_loc; sub.attributes sub pext_attributes + let iter_package_type sub {ppt_path; ppt_cstrs; ppt_loc; ppt_attrs} = + sub.location sub ppt_loc; + iter_loc_lid sub ppt_path; + List.iter (iter_tuple (iter_loc_lid sub) (sub.typ sub)) ppt_cstrs; + sub.attributes sub ppt_attrs + end module CT = struct @@ -209,7 +235,7 @@ module CT = struct sub.attributes sub attrs; match desc with | Pcty_constr (lid, tys) -> - iter_loc sub lid; List.iter (sub.typ sub) tys + iter_loc_lid sub lid; List.iter (sub.typ sub) tys | Pcty_signature x -> sub.class_signature sub x | Pcty_arrow (_lab, t, ct) -> sub.typ sub t; sub.class_type sub ct @@ -248,8 +274,8 @@ module MT = struct sub.location sub loc; sub.attributes sub attrs; match desc with - | Pmty_ident s -> iter_loc sub s - | Pmty_alias s -> iter_loc sub s + | Pmty_ident s -> iter_loc_lid sub s + | Pmty_alias s -> iter_loc_lid sub s | Pmty_signature sg -> sub.signature sub sg | Pmty_functor (param, mt2) -> iter_functor_param sub param; @@ -262,17 +288,17 @@ module MT = struct let iter_with_constraint sub = function | Pwith_type (lid, d) -> - iter_loc sub lid; sub.type_declaration sub d + iter_loc_lid sub lid; sub.type_declaration sub d | Pwith_module (lid, lid2) -> - iter_loc sub lid; iter_loc sub lid2 + iter_loc_lid sub lid; iter_loc_lid sub lid2 | Pwith_modtype (lid, mty) -> - iter_loc sub lid; sub.module_type sub mty + iter_loc_lid sub lid; sub.module_type sub mty | Pwith_typesubst (lid, d) -> - iter_loc sub lid; sub.type_declaration sub d + iter_loc_lid sub lid; sub.type_declaration sub d | Pwith_modsubst (s, lid) -> - iter_loc sub s; iter_loc sub lid + iter_loc_lid sub s; iter_loc_lid sub lid | Pwith_modtypesubst (lid, mty) -> - iter_loc sub lid; sub.module_type sub mty + iter_loc_lid sub lid; sub.module_type sub mty let iter_signature_item sub {psig_desc = desc; psig_loc = loc} = sub.location sub loc; @@ -307,7 +333,7 @@ module M = struct sub.location sub loc; sub.attributes sub attrs; match desc with - | Pmod_ident x -> iter_loc sub x + | Pmod_ident x -> iter_loc_lid sub x | Pmod_structure str -> sub.structure sub str | Pmod_functor (param, body) -> iter_functor_param sub param; @@ -348,37 +374,62 @@ end module E = struct (* Value expressions for the core language *) + let iter_function_param sub { pparam_loc = loc; pparam_desc = desc } = + sub.location sub loc; + match desc with + | Pparam_val (_lab, def, p) -> + iter_opt (sub.expr sub) def; + sub.pat sub p + | Pparam_newtype ty -> + iter_loc sub ty + + let iter_body sub body = + match body with + | Pfunction_body e -> + sub.expr sub e + | Pfunction_cases (cases, loc, attrs) -> + sub.cases sub cases; + sub.location sub loc; + sub.attributes sub attrs + + let iter_constraint sub constraint_ = + match constraint_ with + | Pconstraint ty -> + sub.typ sub ty + | Pcoerce (ty1, ty2) -> + iter_opt (sub.typ sub) ty1; + sub.typ sub ty2 + let iter sub {pexp_loc = loc; pexp_desc = desc; pexp_attributes = attrs} = sub.location sub loc; sub.attributes sub attrs; match desc with - | Pexp_ident x -> iter_loc sub x + | Pexp_ident x -> iter_loc_lid sub x | Pexp_constant _ -> () | Pexp_let (_r, vbs, e) -> List.iter (sub.value_binding sub) vbs; sub.expr sub e - | Pexp_fun (_lab, def, p, e) -> - iter_opt (sub.expr sub) def; - sub.pat sub p; - sub.expr sub e - | Pexp_function pel -> sub.cases sub pel + | Pexp_function (params, constraint_, body) -> + List.iter (iter_function_param sub) params; + iter_opt (iter_constraint sub) constraint_; + iter_body sub body | Pexp_apply (e, l) -> sub.expr sub e; List.iter (iter_snd (sub.expr sub)) l | Pexp_match (e, pel) -> sub.expr sub e; sub.cases sub pel | Pexp_try (e, pel) -> sub.expr sub e; sub.cases sub pel - | Pexp_tuple el -> List.iter (sub.expr sub) el + | Pexp_tuple el -> List.iter (fun (_, e) -> sub.expr sub e) el | Pexp_construct (lid, arg) -> - iter_loc sub lid; iter_opt (sub.expr sub) arg + iter_loc_lid sub lid; iter_opt (sub.expr sub) arg | Pexp_variant (_lab, eo) -> iter_opt (sub.expr sub) eo | Pexp_record (l, eo) -> - List.iter (iter_tuple (iter_loc sub) (sub.expr sub)) l; + List.iter (iter_tuple (iter_loc_lid sub) (sub.expr sub)) l; iter_opt (sub.expr sub) eo | Pexp_field (e, lid) -> - sub.expr sub e; iter_loc sub lid + sub.expr sub e; iter_loc_lid sub lid | Pexp_setfield (e1, lid, e2) -> - sub.expr sub e1; iter_loc sub lid; + sub.expr sub e1; iter_loc_lid sub lid; sub.expr sub e2 | Pexp_array el -> List.iter (sub.expr sub) el | Pexp_ifthenelse (e1, e2, e3) -> @@ -397,7 +448,7 @@ module E = struct | Pexp_constraint (e, t) -> sub.expr sub e; sub.typ sub t | Pexp_send (e, _s) -> sub.expr sub e - | Pexp_new lid -> iter_loc sub lid + | Pexp_new lid -> iter_loc_lid sub lid | Pexp_setinstvar (s, e) -> iter_loc sub s; sub.expr sub e | Pexp_override sel -> @@ -414,7 +465,9 @@ module E = struct sub.expr sub e; iter_opt (sub.typ sub) t | Pexp_object cls -> sub.class_structure sub cls | Pexp_newtype (_s, e) -> sub.expr sub e - | Pexp_pack me -> sub.module_expr sub me + | Pexp_pack (me, optyp) -> + sub.module_expr sub me; + Option.iter (sub.package_type sub) optyp | Pexp_open (o, e) -> sub.open_declaration sub o; sub.expr sub e | Pexp_letop {let_; ands; body} -> @@ -444,9 +497,9 @@ module P = struct | Ppat_alias (p, s) -> sub.pat sub p; iter_loc sub s | Ppat_constant _ -> () | Ppat_interval _ -> () - | Ppat_tuple pl -> List.iter (sub.pat sub) pl + | Ppat_tuple (pl, _) -> List.iter (fun (_, p) -> sub.pat sub p) pl | Ppat_construct (l, p) -> - iter_loc sub l; + iter_loc_lid sub l; iter_opt (fun (vl,p) -> List.iter (iter_loc sub) vl; @@ -454,18 +507,19 @@ module P = struct p | Ppat_variant (_l, p) -> iter_opt (sub.pat sub) p | Ppat_record (lpl, _cf) -> - List.iter (iter_tuple (iter_loc sub) (sub.pat sub)) lpl + List.iter (iter_tuple (iter_loc_lid sub) (sub.pat sub)) lpl | Ppat_array pl -> List.iter (sub.pat sub) pl | Ppat_or (p1, p2) -> sub.pat sub p1; sub.pat sub p2 | Ppat_constraint (p, t) -> sub.pat sub p; sub.typ sub t - | Ppat_type s -> iter_loc sub s + | Ppat_type s -> iter_loc_lid sub s | Ppat_lazy p -> sub.pat sub p | Ppat_unpack s -> iter_loc sub s + | Ppat_effect (p1,p2) -> sub.pat sub p1; sub.pat sub p2 | Ppat_exception p -> sub.pat sub p | Ppat_extension x -> sub.extension sub x | Ppat_open (lid, p) -> - iter_loc sub lid; sub.pat sub p + iter_loc_lid sub lid; sub.pat sub p end @@ -477,7 +531,7 @@ module CE = struct sub.attributes sub attrs; match desc with | Pcl_constr (lid, tys) -> - iter_loc sub lid; List.iter (sub.typ sub) tys + iter_loc_lid sub lid; List.iter (sub.typ sub) tys | Pcl_structure s -> sub.class_structure sub s | Pcl_fun (_lab, e, p, ce) -> @@ -560,6 +614,7 @@ let default_iterator = type_extension = T.iter_type_extension; type_exception = T.iter_type_exception; extension_constructor = T.iter_extension_constructor; + package_type = T.iter_package_type; value_description = (fun this {pval_name; pval_type; pval_prim = _; pval_loc; pval_attributes} -> @@ -584,7 +639,7 @@ let default_iterator = module_substitution = (fun this {pms_name; pms_manifest; pms_attributes; pms_loc} -> iter_loc this pms_name; - iter_loc this pms_manifest; + iter_loc_lid this pms_manifest; this.location this pms_loc; this.attributes this pms_attributes; ); @@ -613,7 +668,7 @@ let default_iterator = open_description = (fun this {popen_expr; popen_override = _; popen_attributes; popen_loc} -> - iter_loc this popen_expr; + iter_loc_lid this popen_expr; this.location this popen_loc; this.attributes this popen_attributes ); @@ -694,4 +749,25 @@ let default_iterator = | PTyp x -> this.typ this x | PPat (x, g) -> this.pat this x; iter_opt (this.expr this) g ); + + directive_argument = + (fun this a -> + this.location this a.pdira_loc; + match a.pdira_desc with + | Pdir_ident lid -> iter_lid this lid + | Pdir_int _ | Pdir_string _ | Pdir_bool _ -> () + ); + + toplevel_directive = + (fun this d -> + iter_loc this d.pdir_name; + iter_opt (this.directive_argument this) d.pdir_arg; + this.location this d.pdir_loc + ); + + toplevel_phrase = + (fun this -> function + | Ptop_def s -> this.structure this s + | Ptop_dir d -> this.toplevel_directive this d + ); } diff --git a/ocamlmerlin_mlx/ocaml/parsing/ast_iterator.mli b/ocamlmerlin_mlx/ocaml/parsing/ast_iterator.mli index 638ac5e..fb61969 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/ast_iterator.mli +++ b/ocamlmerlin_mlx/ocaml/parsing/ast_iterator.mli @@ -43,6 +43,7 @@ type iterator = { class_type_declaration: iterator -> class_type_declaration -> unit; class_type_field: iterator -> class_type_field -> unit; constructor_declaration: iterator -> constructor_declaration -> unit; + directive_argument: iterator -> directive_argument -> unit; expr: iterator -> expression -> unit; extension: iterator -> extension -> unit; extension_constructor: iterator -> extension_constructor -> unit; @@ -58,12 +59,15 @@ type iterator = { module_type_declaration: iterator -> module_type_declaration -> unit; open_declaration: iterator -> open_declaration -> unit; open_description: iterator -> open_description -> unit; + package_type: iterator -> package_type -> unit; pat: iterator -> pattern -> unit; payload: iterator -> payload -> unit; signature: iterator -> signature -> unit; signature_item: iterator -> signature_item -> unit; structure: iterator -> structure -> unit; structure_item: iterator -> structure_item -> unit; + toplevel_directive: iterator -> toplevel_directive -> unit; + toplevel_phrase: iterator -> toplevel_phrase -> unit; typ: iterator -> core_type -> unit; row_field: iterator -> row_field -> unit; object_field: iterator -> object_field -> unit; diff --git a/ocamlmerlin_mlx/ocaml/parsing/ast_mapper.ml b/ocamlmerlin_mlx/ocaml/parsing/ast_mapper.ml index 12d9018..0168abb 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/ast_mapper.ml +++ b/ocamlmerlin_mlx/ocaml/parsing/ast_mapper.ml @@ -20,6 +20,9 @@ (* Ensure that record patterns don't miss any field. *) *) +[@@@ocaml.warning "-60"] module Str = Ast_helper.Str (* For ocamldep *) +[@@@ocaml.warning "+60"] + open Parsetree open Ast_helper open Location @@ -45,6 +48,7 @@ type mapper = { constant: mapper -> constant -> constant; constructor_declaration: mapper -> constructor_declaration -> constructor_declaration; + directive_argument: mapper -> directive_argument -> directive_argument; expr: mapper -> expression -> expression; extension: mapper -> extension -> extension; extension_constructor: mapper -> extension_constructor @@ -62,12 +66,15 @@ type mapper = { -> module_type_declaration; open_declaration: mapper -> open_declaration -> open_declaration; open_description: mapper -> open_description -> open_description; + package_type: mapper -> package_type -> package_type; pat: mapper -> pattern -> pattern; payload: mapper -> payload -> payload; signature: mapper -> signature -> signature; signature_item: mapper -> signature_item -> signature_item; structure: mapper -> structure -> structure; structure_item: mapper -> structure_item -> structure_item; + toplevel_directive: mapper -> toplevel_directive -> toplevel_directive; + toplevel_phrase: mapper -> toplevel_phrase -> toplevel_phrase; typ: mapper -> core_type -> core_type; type_declaration: mapper -> type_declaration -> type_declaration; type_extension: mapper -> type_extension -> type_extension; @@ -86,17 +93,37 @@ let map_opt f = function None -> None | Some x -> Some (f x) let map_loc sub {loc; txt} = {loc = sub.location sub loc; txt} +let rec map_lid sub lid = + let open Longident in + match lid with + | Lident id -> Lident id + | Ldot (lid, id) -> + let lid = { lid with txt = map_lid sub lid.txt } in + Ldot (map_loc sub lid, map_loc sub id) + | Lapply (lid, lid') -> + let lid = { lid with txt = map_lid sub lid.txt } in + let lid' = { lid' with txt = map_lid sub lid'.txt } in + Lapply(map_loc sub lid, map_loc sub lid') + +let map_loc_lid sub {loc; txt} = + let txt = map_lid sub txt in + map_loc sub {loc; txt} + module C = struct (* Constants *) - let map sub c = match c with - | Pconst_integer _ - | Pconst_char _ - | Pconst_float _ - -> c - | Pconst_string (s, loc, quotation_delimiter) -> - let loc = sub.location sub loc in - Const.string ~loc ?quotation_delimiter s + let map sub { pconst_desc; pconst_loc } = + let loc = sub.location sub pconst_loc in + let desc = + match pconst_desc with + | Pconst_integer _ + | Pconst_char _ + | Pconst_float _ -> + pconst_desc + | Pconst_string (s, loc, quotation_delimiter) -> + Pconst_string (s, sub.location sub loc, quotation_delimiter) + in + Const.mk ~loc desc end module T = struct @@ -137,21 +164,25 @@ module T = struct | Ptyp_var s -> var ~loc ~attrs s | Ptyp_arrow (lab, t1, t2) -> arrow ~loc ~attrs lab (sub.typ sub t1) (sub.typ sub t2) - | Ptyp_tuple tyl -> tuple ~loc ~attrs (List.map (sub.typ sub) tyl) + | Ptyp_tuple tyl -> + tuple ~loc ~attrs (List.map (fun (l, t) -> l, sub.typ sub t) tyl) | Ptyp_constr (lid, tl) -> - constr ~loc ~attrs (map_loc sub lid) (List.map (sub.typ sub) tl) + constr ~loc ~attrs (map_loc_lid sub lid) (List.map (sub.typ sub) tl) | Ptyp_object (l, o) -> object_ ~loc ~attrs (List.map (object_field sub) l) o | Ptyp_class (lid, tl) -> - class_ ~loc ~attrs (map_loc sub lid) (List.map (sub.typ sub) tl) - | Ptyp_alias (t, s) -> alias ~loc ~attrs (sub.typ sub t) s + class_ ~loc ~attrs (map_loc_lid sub lid) (List.map (sub.typ sub) tl) + | Ptyp_alias (t, s) -> + let s = map_loc sub s in + alias ~loc ~attrs (sub.typ sub t) s | Ptyp_variant (rl, b, ll) -> variant ~loc ~attrs (List.map (row_field sub) rl) b ll | Ptyp_poly (sl, t) -> poly ~loc ~attrs (List.map (map_loc sub) sl) (sub.typ sub t) - | Ptyp_package (lid, l) -> - package ~loc ~attrs (map_loc sub lid) - (List.map (map_tuple (map_loc sub) (sub.typ sub)) l) + | Ptyp_package ptyp -> + package ~loc ~attrs (sub.package_type sub ptyp) + | Ptyp_open (mod_ident, t) -> + open_ ~loc ~attrs (map_loc_lid sub mod_ident) (sub.typ sub t) | Ptyp_extension x -> extension ~loc ~attrs (sub.extension sub x) let map_type_declaration sub @@ -193,7 +224,7 @@ module T = struct let loc = sub.location sub ptyext_loc in let attrs = sub.attributes sub ptyext_attributes in Te.mk ~loc ~attrs - (map_loc sub ptyext_path) + (map_loc_lid sub ptyext_path) (List.map (sub.extension_constructor sub) ptyext_constructors) ~params:(List.map (map_fst (sub.typ sub)) ptyext_params) ~priv:ptyext_private @@ -211,7 +242,7 @@ module T = struct map_constructor_arguments sub ctl, map_opt (sub.typ sub) cto) | Pext_rebind li -> - Pext_rebind (map_loc sub li) + Pext_rebind (map_loc_lid sub li) let map_extension_constructor sub {pext_name; @@ -224,6 +255,12 @@ module T = struct (map_loc sub pext_name) (map_extension_constructor_kind sub pext_kind) + let map_package_type sub {ppt_loc; ppt_path; ppt_cstrs; ppt_attrs} = + let loc = sub.location sub ppt_loc in + let attrs = sub.attributes sub ppt_attrs in + Typ.package_type ~loc ~attrs (map_loc_lid sub ppt_path) + (List.map (map_tuple (map_loc_lid sub) (sub.typ sub)) ppt_cstrs) + end module CT = struct @@ -235,7 +272,7 @@ module CT = struct let attrs = sub.attributes sub attrs in match desc with | Pcty_constr (lid, tys) -> - constr ~loc ~attrs (map_loc sub lid) (List.map (sub.typ sub) tys) + constr ~loc ~attrs (map_loc_lid sub lid) (List.map (sub.typ sub) tys) | Pcty_signature x -> signature ~loc ~attrs (sub.class_signature sub x) | Pcty_arrow (lab, t, ct) -> arrow ~loc ~attrs lab (sub.typ sub t) (sub.class_type sub ct) @@ -277,8 +314,8 @@ module MT = struct let loc = sub.location sub loc in let attrs = sub.attributes sub attrs in match desc with - | Pmty_ident s -> ident ~loc ~attrs (map_loc sub s) - | Pmty_alias s -> alias ~loc ~attrs (map_loc sub s) + | Pmty_ident s -> ident ~loc ~attrs (map_loc_lid sub s) + | Pmty_alias s -> alias ~loc ~attrs (map_loc_lid sub s) | Pmty_signature sg -> signature ~loc ~attrs (sub.signature sub sg) | Pmty_functor (param, mt) -> functor_ ~loc ~attrs @@ -292,17 +329,17 @@ module MT = struct let map_with_constraint sub = function | Pwith_type (lid, d) -> - Pwith_type (map_loc sub lid, sub.type_declaration sub d) + Pwith_type (map_loc_lid sub lid, sub.type_declaration sub d) | Pwith_module (lid, lid2) -> - Pwith_module (map_loc sub lid, map_loc sub lid2) + Pwith_module (map_loc_lid sub lid, map_loc_lid sub lid2) | Pwith_modtype (lid, mty) -> - Pwith_modtype (map_loc sub lid, sub.module_type sub mty) + Pwith_modtype (map_loc_lid sub lid, sub.module_type sub mty) | Pwith_typesubst (lid, d) -> - Pwith_typesubst (map_loc sub lid, sub.type_declaration sub d) + Pwith_typesubst (map_loc_lid sub lid, sub.type_declaration sub d) | Pwith_modsubst (s, lid) -> - Pwith_modsubst (map_loc sub s, map_loc sub lid) + Pwith_modsubst (map_loc_lid sub s, map_loc_lid sub lid) | Pwith_modtypesubst (lid, mty) -> - Pwith_modtypesubst (map_loc sub lid, sub.module_type sub mty) + Pwith_modtypesubst (map_loc_lid sub lid, sub.module_type sub mty) let map_signature_item sub {psig_desc = desc; psig_loc = loc} = let open Sig in @@ -342,7 +379,7 @@ module M = struct let loc = sub.location sub loc in let attrs = sub.attributes sub attrs in match desc with - | Pmod_ident x -> ident ~loc ~attrs (map_loc sub x) + | Pmod_ident x -> ident ~loc ~attrs (map_loc_lid sub x) | Pmod_structure str -> structure ~loc ~attrs (sub.structure sub str) | Pmod_functor (param, body) -> functor_ ~loc ~attrs @@ -387,37 +424,69 @@ end module E = struct (* Value expressions for the core language *) + let map_function_param sub { pparam_loc = loc; pparam_desc = desc } = + let loc = sub.location sub loc in + let desc = + match desc with + | Pparam_val (lab, def, p) -> + Pparam_val + (lab, + map_opt (sub.expr sub) def, + sub.pat sub p) + | Pparam_newtype ty -> + Pparam_newtype (map_loc sub ty) + in + { pparam_loc = loc; pparam_desc = desc } + + let map_function_body sub body = + match body with + | Pfunction_body e -> + Pfunction_body (sub.expr sub e) + | Pfunction_cases (cases, loc, attributes) -> + let cases = sub.cases sub cases in + let loc = sub.location sub loc in + let attributes = sub.attributes sub attributes in + Pfunction_cases (cases, loc, attributes) + + let map_constraint sub c = + match c with + | Pconstraint ty -> Pconstraint (sub.typ sub ty) + | Pcoerce (ty1, ty2) -> Pcoerce (map_opt (sub.typ sub) ty1, sub.typ sub ty2) + let map sub {pexp_loc = loc; pexp_desc = desc; pexp_attributes = attrs} = let open Exp in let loc = sub.location sub loc in let attrs = sub.attributes sub attrs in match desc with - | Pexp_ident x -> ident ~loc ~attrs (map_loc sub x) + | Pexp_ident x -> ident ~loc ~attrs (map_loc_lid sub x) | Pexp_constant x -> constant ~loc ~attrs (sub.constant sub x) | Pexp_let (r, vbs, e) -> let_ ~loc ~attrs r (List.map (sub.value_binding sub) vbs) (sub.expr sub e) - | Pexp_fun (lab, def, p, e) -> - fun_ ~loc ~attrs lab (map_opt (sub.expr sub) def) (sub.pat sub p) - (sub.expr sub e) - | Pexp_function pel -> function_ ~loc ~attrs (sub.cases sub pel) + | Pexp_function (ps, c, b) -> + function_ ~loc ~attrs + (List.map (map_function_param sub) ps) + (map_opt (map_constraint sub) c) + (map_function_body sub b) | Pexp_apply (e, l) -> apply ~loc ~attrs (sub.expr sub e) (List.map (map_snd (sub.expr sub)) l) | Pexp_match (e, pel) -> match_ ~loc ~attrs (sub.expr sub e) (sub.cases sub pel) | Pexp_try (e, pel) -> try_ ~loc ~attrs (sub.expr sub e) (sub.cases sub pel) - | Pexp_tuple el -> tuple ~loc ~attrs (List.map (sub.expr sub) el) + | Pexp_tuple el -> + tuple ~loc ~attrs (List.map (fun (l, e) -> l, sub.expr sub e) el) | Pexp_construct (lid, arg) -> - construct ~loc ~attrs (map_loc sub lid) (map_opt (sub.expr sub) arg) + construct ~loc ~attrs (map_loc_lid sub lid) (map_opt (sub.expr sub) arg) | Pexp_variant (lab, eo) -> variant ~loc ~attrs lab (map_opt (sub.expr sub) eo) | Pexp_record (l, eo) -> - record ~loc ~attrs (List.map (map_tuple (map_loc sub) (sub.expr sub)) l) + record ~loc ~attrs + (List.map (map_tuple (map_loc_lid sub) (sub.expr sub)) l) (map_opt (sub.expr sub) eo) | Pexp_field (e, lid) -> - field ~loc ~attrs (sub.expr sub e) (map_loc sub lid) + field ~loc ~attrs (sub.expr sub e) (map_loc_lid sub lid) | Pexp_setfield (e1, lid, e2) -> - setfield ~loc ~attrs (sub.expr sub e1) (map_loc sub lid) + setfield ~loc ~attrs (sub.expr sub e1) (map_loc_lid sub lid) (sub.expr sub e2) | Pexp_array el -> array ~loc ~attrs (List.map (sub.expr sub) el) | Pexp_ifthenelse (e1, e2, e3) -> @@ -437,7 +506,7 @@ module E = struct constraint_ ~loc ~attrs (sub.expr sub e) (sub.typ sub t) | Pexp_send (e, s) -> send ~loc ~attrs (sub.expr sub e) (map_loc sub s) - | Pexp_new lid -> new_ ~loc ~attrs (map_loc sub lid) + | Pexp_new lid -> new_ ~loc ~attrs (map_loc_lid sub lid) | Pexp_setinstvar (s, e) -> setinstvar ~loc ~attrs (map_loc sub s) (sub.expr sub e) | Pexp_override sel -> @@ -457,7 +526,9 @@ module E = struct | Pexp_object cls -> object_ ~loc ~attrs (sub.class_structure sub cls) | Pexp_newtype (s, e) -> newtype ~loc ~attrs (map_loc sub s) (sub.expr sub e) - | Pexp_pack me -> pack ~loc ~attrs (sub.module_expr sub me) + | Pexp_pack (me, optyp) -> + let optyp = Option.map (sub.package_type sub) optyp in + pack ~loc ~attrs (sub.module_expr sub me) optyp | Pexp_open (o, e) -> open_ ~loc ~attrs (sub.open_declaration sub o) (sub.expr sub e) | Pexp_letop {let_; ands; body} -> @@ -490,25 +561,29 @@ module P = struct | Ppat_constant c -> constant ~loc ~attrs (sub.constant sub c) | Ppat_interval (c1, c2) -> interval ~loc ~attrs (sub.constant sub c1) (sub.constant sub c2) - | Ppat_tuple pl -> tuple ~loc ~attrs (List.map (sub.pat sub) pl) + | Ppat_tuple (pl,c) -> + tuple ~loc ~attrs (List.map (fun (l, p) -> l, sub.pat sub p) pl) c | Ppat_construct (l, p) -> - construct ~loc ~attrs (map_loc sub l) + construct ~loc ~attrs (map_loc_lid sub l) (map_opt (fun (vl, p) -> List.map (map_loc sub) vl, sub.pat sub p) p) | Ppat_variant (l, p) -> variant ~loc ~attrs l (map_opt (sub.pat sub) p) | Ppat_record (lpl, cf) -> record ~loc ~attrs - (List.map (map_tuple (map_loc sub) (sub.pat sub)) lpl) cf + (List.map (map_tuple (map_loc_lid sub) (sub.pat sub)) lpl) cf | Ppat_array pl -> array ~loc ~attrs (List.map (sub.pat sub) pl) | Ppat_or (p1, p2) -> or_ ~loc ~attrs (sub.pat sub p1) (sub.pat sub p2) | Ppat_constraint (p, t) -> constraint_ ~loc ~attrs (sub.pat sub p) (sub.typ sub t) - | Ppat_type s -> type_ ~loc ~attrs (map_loc sub s) + | Ppat_type s -> type_ ~loc ~attrs (map_loc_lid sub s) | Ppat_lazy p -> lazy_ ~loc ~attrs (sub.pat sub p) | Ppat_unpack s -> unpack ~loc ~attrs (map_loc sub s) - | Ppat_open (lid,p) -> open_ ~loc ~attrs (map_loc sub lid) (sub.pat sub p) + | Ppat_open (lid,p) -> + open_ ~loc ~attrs (map_loc_lid sub lid) (sub.pat sub p) | Ppat_exception p -> exception_ ~loc ~attrs (sub.pat sub p) + | Ppat_effect(p1, p2) -> + effect_ ~loc ~attrs (sub.pat sub p1) (sub.pat sub p2) | Ppat_extension x -> extension ~loc ~attrs (sub.extension sub x) end @@ -521,7 +596,7 @@ module CE = struct let attrs = sub.attributes sub attrs in match desc with | Pcl_constr (lid, tys) -> - constr ~loc ~attrs (map_loc sub lid) (List.map (sub.typ sub) tys) + constr ~loc ~attrs (map_loc_lid sub lid) (List.map (sub.typ sub) tys) | Pcl_structure s -> structure ~loc ~attrs (sub.class_structure sub s) | Pcl_fun (lab, e, p, ce) -> @@ -611,6 +686,7 @@ let default_mapper = type_extension = T.map_type_extension; type_exception = T.map_type_exception; extension_constructor = T.map_extension_constructor; + package_type = T.map_package_type; value_description = (fun this {pval_name; pval_type; pval_prim; pval_loc; pval_attributes} -> @@ -639,7 +715,7 @@ let default_mapper = (fun this {pms_name; pms_manifest; pms_attributes; pms_loc} -> Ms.mk (map_loc this pms_name) - (map_loc this pms_manifest) + (map_loc_lid this pms_manifest) ~attrs:(this.attributes this pms_attributes) ~loc:(this.location this pms_loc) ); @@ -671,7 +747,7 @@ let default_mapper = open_description = (fun this {popen_expr; popen_override; popen_attributes; popen_loc} -> - Opn.mk (map_loc this popen_expr) + Opn.mk (map_loc_lid this popen_expr) ~override:popen_override ~loc:(this.location this popen_loc) ~attrs:(this.attributes this popen_attributes) @@ -767,26 +843,45 @@ let default_mapper = | PTyp x -> PTyp (this.typ this x) | PPat (x, g) -> PPat (this.pat this x, map_opt (this.expr this) g) ); + + directive_argument = + (fun this a -> + { pdira_desc= begin match a.pdira_desc with + | Pdir_ident lid -> Pdir_ident (map_lid this lid) + | Pdir_int _ | Pdir_bool _ | Pdir_string _ as x -> x + end + ; pdira_loc= this.location this a.pdira_loc} ); + + toplevel_directive = + (fun this d -> + { pdir_name= map_loc this d.pdir_name + ; pdir_arg= map_opt (this.directive_argument this) d.pdir_arg + ; pdir_loc= this.location this d.pdir_loc } ); + + toplevel_phrase = + (fun this -> function + | Ptop_def s -> Ptop_def (this.structure this s) + | Ptop_dir d -> Ptop_dir (this.toplevel_directive this d) ); } let extension_of_error {kind; main; sub} = if kind <> Location.Report_error then raise (Invalid_argument "extension_of_error: expected kind Report_error"); - let str_of_pp pp_msg = Format.asprintf "%t" pp_msg in + let str_of_msg msg = Format.asprintf "%a" Format_doc.Doc.format msg in let extension_of_sub sub = { loc = sub.loc; txt = "ocaml.error" }, PStr ([Str.eval (Exp.constant - (Pconst_string (str_of_pp sub.txt, sub.loc, None)))]) + (Const.string ~loc:sub.loc (str_of_msg sub.txt)))]) in { loc = main.loc; txt = "ocaml.error" }, PStr (Str.eval (Exp.constant - (Pconst_string (str_of_pp main.txt, main.loc, None))) :: + (Const.string ~loc:main.loc (str_of_msg main.txt))) :: List.map (fun msg -> Str.extension (extension_of_sub msg)) sub) let attribute_of_warning loc s = Attr.mk {loc; txt = "ocaml.ppwarning" } - (PStr ([Str.eval ~loc (Exp.constant (Pconst_string (s, loc, None)))])) + (PStr ([Str.eval ~loc (Exp.constant (Const.string ~loc s))])) let cookies = ref String.Map.empty @@ -807,7 +902,7 @@ module PpxContext = struct open Asttypes open Ast_helper - let lid name = { txt = Lident name; loc = Location.none } + let lid name = mknoloc (Lident name) let make_string s = Exp.constant (Const.string s) @@ -819,12 +914,13 @@ module PpxContext = struct let rec make_list f lst = match lst with | x :: rest -> - Exp.construct (lid "::") (Some (Exp.tuple [f x; make_list f rest])) + Exp.construct (lid "::") + (Some (Exp.tuple [None, f x; None, make_list f rest])) | [] -> Exp.construct (lid "[]") None let make_pair f1 f2 (x1, x2) = - Exp.tuple [f1 x1; f2 x2] + Exp.tuple [None, f1 x1; None, f2 x2] let make_option f opt = match opt with @@ -844,11 +940,16 @@ module PpxContext = struct } let make ~tool_name () = + let Load_path.{ visible; hidden } = Load_path.get_paths () in let fields = [ lid "tool_name", make_string tool_name; - lid "include_dirs", make_list make_string !Clflags.include_dirs; - lid "load_path", make_list make_string (Load_path.get_paths ()); + lid "include_dirs", make_list make_string (!Clflags.include_dirs); + lid "hidden_include_dirs", + make_list make_string (!Clflags.hidden_include_dirs); + lid "load_path", + make_pair (make_list make_string) (make_list make_string) + (visible, hidden); lid "open_modules", make_list make_string !Clflags.open_modules; lid "for_package", make_option make_string !Clflags.for_package; lid "debug", make_bool !Clflags.debug; @@ -856,7 +957,7 @@ module PpxContext = struct lid "use_vmthreads", make_bool false; lid "recursive_types", make_bool !Clflags.recursive_types; lid "principal", make_bool !Clflags.principal; - lid "transparent_modules", make_bool !Clflags.transparent_modules; + lid "no_alias_deps", make_bool !Clflags.no_alias_deps; lid "unboxed_types", make_bool !Clflags.unboxed_types; lid "unsafe_string", make_bool false; (* kept for compatibility *) get_cookies () @@ -874,7 +975,8 @@ module PpxContext = struct let restore fields = let field name payload = let rec get_string = function - | { pexp_desc = Pexp_constant (Pconst_string (str, _, None)) } -> str + | {pexp_desc = Pexp_constant + {pconst_desc = Pconst_string (str, _, None); _}} -> str | _ -> raise_errorf "Internal error: invalid [@@@ocaml.ppx.context \ { %s }] string syntax" name and get_bool pexp = @@ -890,7 +992,8 @@ module PpxContext = struct and get_list elem = function | {pexp_desc = Pexp_construct ({txt = Longident.Lident "::"}, - Some {pexp_desc = Pexp_tuple [exp; rest]}) } -> + Some {pexp_desc = Pexp_tuple [None, exp; + None, rest]}) } -> elem exp :: get_list elem rest | {pexp_desc = Pexp_construct ({txt = Longident.Lident "[]"}, None)} -> @@ -898,16 +1001,18 @@ module PpxContext = struct | _ -> raise_errorf "Internal error: invalid [@@@ocaml.ppx.context \ { %s }] list syntax" name and get_pair f1 f2 = function - | {pexp_desc = Pexp_tuple [e1; e2]} -> + | {pexp_desc = Pexp_tuple [None, e1; None, e2]} -> (f1 e1, f2 e2) | _ -> raise_errorf "Internal error: invalid [@@@ocaml.ppx.context \ { %s }] pair syntax" name and get_option elem = function | { pexp_desc = - Pexp_construct ({ txt = Longident.Lident "Some" }, Some exp) } -> + Pexp_construct ({ txt = Longident.Lident "Some" }, + Some exp) } -> Some (elem exp) | { pexp_desc = - Pexp_construct ({ txt = Longident.Lident "None" }, None) } -> + Pexp_construct ({ txt = Longident.Lident "None" }, + None) } -> None | _ -> raise_errorf "Internal error: invalid [@@@ocaml.ppx.context \ { %s }] option syntax" name @@ -917,6 +1022,8 @@ module PpxContext = struct tool_name_ref := get_string payload | "include_dirs" -> Clflags.include_dirs := get_list get_string payload + | "hidden_include_dirs" -> + Clflags.hidden_include_dirs := get_list get_string payload | "load_path" -> (* Duplicates Compmisc.auto_include, since we can't reference Compmisc from this module. *) @@ -927,8 +1034,11 @@ module PpxContext = struct let alert = Location.auto_include_alert in Load_path.auto_include_otherlibs alert find_in_dir fn in *) - Load_path.(init - ~auto_include:no_auto_include (get_list get_string payload)) + let visible, hidden = + get_pair (get_list get_string) (get_list get_string) payload + in + let auto_include = Load_path.no_auto_include in + Load_path.init ~auto_include ~visible ~hidden | "open_modules" -> Clflags.open_modules := get_list get_string payload | "for_package" -> @@ -945,8 +1055,8 @@ module PpxContext = struct Clflags.recursive_types := get_bool payload | "principal" -> Clflags.principal := get_bool payload - | "transparent_modules" -> - Clflags.transparent_modules := get_bool payload + | "no_alias_deps" -> + Clflags.no_alias_deps := get_bool payload | "unboxed_types" -> Clflags.unboxed_types := get_bool payload | "cookies" -> diff --git a/ocamlmerlin_mlx/ocaml/parsing/ast_mapper.mli b/ocamlmerlin_mlx/ocaml/parsing/ast_mapper.mli index 69f6b01..d77e1d6 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/ast_mapper.mli +++ b/ocamlmerlin_mlx/ocaml/parsing/ast_mapper.mli @@ -36,7 +36,7 @@ let test_mapper argv = expr = fun mapper expr -> match expr with | { pexp_desc = Pexp_extension ({ txt = "test" }, PStr [])} -> - Ast_helper.Exp.constant (Const_int 42) + Ast_helper.Exp.constant (Pconst_integer ("42", None)) | other -> default_mapper.expr mapper other; } let () = @@ -74,6 +74,7 @@ type mapper = { constant: mapper -> constant -> constant; constructor_declaration: mapper -> constructor_declaration -> constructor_declaration; + directive_argument: mapper -> directive_argument -> directive_argument; expr: mapper -> expression -> expression; extension: mapper -> extension -> extension; extension_constructor: mapper -> extension_constructor @@ -91,12 +92,15 @@ type mapper = { -> module_type_declaration; open_declaration: mapper -> open_declaration -> open_declaration; open_description: mapper -> open_description -> open_description; + package_type: mapper -> package_type -> package_type; pat: mapper -> pattern -> pattern; payload: mapper -> payload -> payload; signature: mapper -> signature -> signature; signature_item: mapper -> signature_item -> signature_item; structure: mapper -> structure -> structure; structure_item: mapper -> structure_item -> structure_item; + toplevel_directive: mapper -> toplevel_directive -> toplevel_directive; + toplevel_phrase: mapper -> toplevel_phrase -> toplevel_phrase; typ: mapper -> core_type -> core_type; type_declaration: mapper -> type_declaration -> type_declaration; type_extension: mapper -> type_extension -> type_extension; @@ -122,8 +126,8 @@ val tool_name: unit -> string ["ocaml"], ... Some global variables that reflect command-line options are automatically synchronized between the calling tool and the ppx preprocessor: {!Clflags.include_dirs}, - {!Load_path}, {!Clflags.open_modules}, {!Clflags.for_package}, - {!Clflags.debug}. *) + {!Clflags.hidden_include_dirs}, {!Load_path}, {!Clflags.open_modules}, + {!Clflags.for_package}, {!Clflags.debug}. *) val apply: source:string -> target:string -> mapper -> unit diff --git a/ocamlmerlin_mlx/ocaml/parsing/asttypes.ml b/ocamlmerlin_mlx/ocaml/parsing/asttypes.ml new file mode 100644 index 0000000..bf631bf --- /dev/null +++ b/ocamlmerlin_mlx/ocaml/parsing/asttypes.ml @@ -0,0 +1,75 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) +(* *) +(* Copyright 1996 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(** Auxiliary AST types used by parsetree and typedtree. + + {b Warning:} this module is unstable and part of + {{!Compiler_libs}compiler-libs}. + +*) + +type constant = + Const_int of int + | Const_char of char + | Const_string of string * Location.t * string option + | Const_float of string + | Const_int32 of int32 + | Const_int64 of int64 + | Const_nativeint of nativeint + +type rec_flag = Nonrecursive | Recursive + +type direction_flag = Upto | Downto + +(* Order matters, used in polymorphic comparison *) +type private_flag = Private | Public + +type mutable_flag = Immutable | Mutable + +type atomic_flag = Nonatomic | Atomic + +type virtual_flag = Virtual | Concrete + +type override_flag = Override | Fresh + +type closed_flag = Closed | Open + +type label = string + +type arg_label = + Nolabel + | Labelled of string (** [label:T -> ...] *) + | Optional of string (** [?label:T -> ...] *) + +type 'a loc = 'a Location.loc = { + txt : 'a; + loc : Location.t; +} + + +type variance = + | Covariant + | Contravariant + | NoVariance + | Bivariant + +type injectivity = + | Injective + | NoInjectivity + +let string_of_label = function + Nolabel -> "" + | Labelled s -> s + | Optional s -> "?"^s diff --git a/ocamlmerlin_mlx/ocaml/parsing/asttypes.mli b/ocamlmerlin_mlx/ocaml/parsing/asttypes.mli index 7a4f1c1..de104b1 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/asttypes.mli +++ b/ocamlmerlin_mlx/ocaml/parsing/asttypes.mli @@ -38,6 +38,8 @@ type private_flag = Private | Public type mutable_flag = Immutable | Mutable +type atomic_flag = Nonatomic | Atomic + type virtual_flag = Virtual | Concrete type override_flag = Override | Fresh @@ -61,7 +63,10 @@ type variance = | Covariant | Contravariant | NoVariance + | Bivariant type injectivity = | Injective | NoInjectivity + +val string_of_label: arg_label -> string diff --git a/ocamlmerlin_mlx/ocaml/parsing/attr_helper.ml b/ocamlmerlin_mlx/ocaml/parsing/attr_helper.ml index 0a616cd..f531cf9 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/attr_helper.ml +++ b/ocamlmerlin_mlx/ocaml/parsing/attr_helper.ml @@ -16,14 +16,17 @@ open Asttypes open Parsetree +module Style = Misc.Style + type error = | Multiple_attributes of string | No_payload_expected of string exception Error of Location.t * error -let get_no_payload_attribute alt_names attrs = - match List.filter (fun a -> List.mem a.attr_name.txt alt_names) attrs with +let get_no_payload_attribute nm attrs = + let actions = [(nm, Builtin_attributes.Return)] in + match Builtin_attributes.select_attributes actions attrs with | [] -> None | [ {attr_name = name; attr_payload = PStr []; attr_loc = _} ] -> Some name | [ {attr_name = name; _} ] -> @@ -36,19 +39,21 @@ let has_no_payload_attribute alt_names attrs = | None -> false | Some _ -> true -open Format +open Format_doc -let report_error ppf = function +let report_error_doc ppf = function | Multiple_attributes name -> - fprintf ppf "Too many `%s' attributes" name + fprintf ppf "Too many %a attributes" Style.inline_code name | No_payload_expected name -> - fprintf ppf "Attribute `%s' does not accept a payload" name + fprintf ppf "Attribute %a does not accept a payload" Style.inline_code name let () = Location.register_error_of_exn (function | Error (loc, err) -> - Some (Location.error_of_printer ~loc report_error err) + Some (Location.error_of_printer ~loc report_error_doc err) | _ -> None ) + +let report_error = Format_doc.compat report_error_doc diff --git a/ocamlmerlin_mlx/ocaml/parsing/attr_helper.mli b/ocamlmerlin_mlx/ocaml/parsing/attr_helper.mli index a3ddc0c..2782cba 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/attr_helper.mli +++ b/ocamlmerlin_mlx/ocaml/parsing/attr_helper.mli @@ -27,15 +27,13 @@ type error = | Multiple_attributes of string | No_payload_expected of string -(** The [string list] argument of the following functions is a list of - alternative names for the attribute we are looking for. For instance: - - {[ - ["foo"; "ocaml.foo"] - ]} *) -val get_no_payload_attribute : string list -> attributes -> string loc option -val has_no_payload_attribute : string list -> attributes -> bool +(** The [string] argument of the following functions is the name of the + attribute we are looking for. If the argument is ["foo"], these functions + will find attributes with the name ["foo"] or ["ocaml.foo"] *) +val get_no_payload_attribute : string -> attributes -> string loc option +val has_no_payload_attribute : string -> attributes -> bool exception Error of Location.t * error -val report_error: Format.formatter -> error -> unit +val report_error: error Format_doc.format_printer +val report_error_doc: error Format_doc.printer diff --git a/ocamlmerlin_mlx/ocaml/parsing/builtin_attributes.ml b/ocamlmerlin_mlx/ocaml/parsing/builtin_attributes.ml index 0db2133..43e03a5 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/builtin_attributes.ml +++ b/ocamlmerlin_mlx/ocaml/parsing/builtin_attributes.ml @@ -15,8 +15,97 @@ open Asttypes open Parsetree +open Ast_helper -let string_of_cst = function + +module Attribute_table = Hashtbl.Make (struct + type t = string with_loc + + let hash : t -> int = Hashtbl.hash + let equal : t -> t -> bool = (=) +end) +let unused_attrs = Attribute_table.create 128 +let mark_used t = Attribute_table.remove unused_attrs t + +(* [attr_order] is used to issue unused attribute warnings in the order the + attributes occur in the file rather than the random order of the hash table +*) +let attr_order a1 a2 = + match String.compare a1.loc.loc_start.pos_fname a2.loc.loc_start.pos_fname + with + | 0 -> Int.compare a1.loc.loc_start.pos_cnum a2.loc.loc_start.pos_cnum + | n -> n + +let compiler_stops_before_attributes_consumed () = + let stops_before_lambda = + match !Clflags.stop_after with + | None -> false + | Some pass -> Clflags.Compiler_pass.(compare pass Lambda) < 0 + in + stops_before_lambda || !Clflags.print_types + +let warn_unused () = + let keys = List.of_seq (Attribute_table.to_seq_keys unused_attrs) in + Attribute_table.clear unused_attrs; + if not (compiler_stops_before_attributes_consumed ()) then + let keys = List.sort attr_order keys in + List.iter (fun sloc -> + Location.prerr_warning sloc.loc (Warnings.Misplaced_attribute sloc.txt)) + keys + +(* These are the attributes that are tracked in the builtin_attrs table for + misplaced attribute warnings. *) +let builtin_attrs = + [ "alert" + ; "atomic" + ; "boxed" + ; "deprecated" + ; "deprecated_mutable" + ; "explicit_arity" + ; "immediate" + ; "immediate64" + ; "inline" + ; "inlined" + ; "noalloc" + ; "poll" + ; "ppwarning" + ; "specialise" + ; "specialised" + ; "tailcall" + ; "tail_mod_cons" + ; "unboxed" + ; "untagged" + ; "unrolled" + ; "warnerror" + ; "warning" + ; "warn_on_literal_pattern" + ] + +let builtin_attrs = + let tbl = Hashtbl.create 128 in + List.iter (fun attr -> Hashtbl.add tbl attr ()) builtin_attrs; + tbl + +let drop_ocaml_attr_prefix s = + let len = String.length s in + if String.starts_with ~prefix:"ocaml." s && len > 6 then + String.sub s 6 (len - 6) + else + s + +let is_builtin_attr s = Hashtbl.mem builtin_attrs (drop_ocaml_attr_prefix s) + +type current_phase = Parser | Invariant_check + +let register_attr current_phase name = + match current_phase with + | Parser when !Clflags.all_ppx <> [] -> () + | Parser | Invariant_check -> + if is_builtin_attr name.txt then + Attribute_table.replace unused_attrs name () + +let string_of_cst const = + match const.pconst_desc with | Pconst_string(s, _, _) -> Some s | _ -> None @@ -30,50 +119,88 @@ let string_of_opt_payload p = | Some s -> s | None -> "" +module Style = Misc.Style let error_of_extension ext = let submessage_from main_loc main_txt = function | {pstr_desc=Pstr_extension (({txt = ("ocaml.error"|"error"); loc}, p), _)} -> begin match p with | PStr([{pstr_desc=Pstr_eval - ({pexp_desc=Pexp_constant(Pconst_string(msg,_,_))}, _)} + ({pexp_desc=Pexp_constant + {pconst_desc=Pconst_string(msg, _, _); _}}, _)} ]) -> - { Location.loc; txt = fun ppf -> Format.pp_print_text ppf msg } + Location.msg ~loc "%a" Format_doc.pp_print_text msg | _ -> - { Location.loc; txt = fun ppf -> - Format.fprintf ppf - "Invalid syntax for sub-message of extension '%s'." main_txt } + Location.msg ~loc "Invalid syntax for sub-message of extension %a." + Style.inline_code main_txt end | {pstr_desc=Pstr_extension (({txt; loc}, _), _)} -> - { Location.loc; txt = fun ppf -> - Format.fprintf ppf "Uninterpreted extension '%s'." txt } + Location.msg ~loc "Uninterpreted extension '%a'." + Style.inline_code txt | _ -> - { Location.loc = main_loc; txt = fun ppf -> - Format.fprintf ppf - "Invalid syntax for sub-message of extension '%s'." main_txt } + Location.msg ~loc:main_loc + "Invalid syntax for sub-message of extension %a." + Style.inline_code main_txt in match ext with | ({txt = ("ocaml.error"|"error") as txt; loc}, p) -> begin match p with | PStr [] -> raise Location.Already_displayed_error | PStr({pstr_desc=Pstr_eval - ({pexp_desc=Pexp_constant(Pconst_string(msg,_,_))}, _)}:: + ({pexp_desc=Pexp_constant + {pconst_desc=Pconst_string(msg, _, _)}}, _)}:: inner) -> let sub = List.map (submessage_from loc txt) inner in - Location.error_of_printer ~loc ~sub Format.pp_print_text msg + Location.error_of_printer ~loc ~sub Format_doc.pp_print_text msg | _ -> Location.errorf ~loc "Invalid syntax for extension '%s'." txt end | ({txt; loc}, _) -> Location.errorf ~loc "Uninterpreted extension '%s'." txt +let attr_equals_builtin {attr_name = {txt; _}; _} s = + (* Check for attribute s or ocaml.s. Avoid allocating a fresh string. *) + txt = s || + ( String.length txt = 6 + String.length s + && String.starts_with ~prefix:"ocaml." txt + && String.ends_with ~suffix:s txt) + +let mark_alert_used a = + if attr_equals_builtin a "deprecated" || attr_equals_builtin a "alert" + then mark_used a.attr_name + +let mark_alerts_used l = List.iter mark_alert_used l + +let mark_warn_on_literal_pattern_used l = + List.iter (fun a -> + if attr_equals_builtin a "warn_on_literal_pattern" + then mark_used a.attr_name) + l + +let mark_deprecated_mutable_used l = + List.iter (fun a -> + if attr_equals_builtin a "deprecated_mutable" + then mark_used a.attr_name) + 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 kind_and_message = function | PStr[ {pstr_desc= Pstr_eval ({pexp_desc=Pexp_apply ({pexp_desc=Pexp_ident{txt=Longident.Lident id}}, - [Nolabel,{pexp_desc=Pexp_constant (Pconst_string(s,_,_))}]) + [Nolabel,{pexp_desc=Pexp_constant + {pconst_desc=Pconst_string(s,_,_); _}}]) },_)}] -> Some (id, s) | PStr[ @@ -87,15 +214,14 @@ let cat s1 s2 = if s2 = "" then s1 else s1 ^ "\n" ^ s2 let alert_attr x = - match x.attr_name.txt with - | "ocaml.deprecated"|"deprecated" -> - Some (x, "deprecated", string_of_opt_payload x.attr_payload) - | "ocaml.alert"|"alert" -> - begin match kind_and_message x.attr_payload with - | Some (kind, message) -> Some (x, kind, message) - | None -> None (* note: bad payloads detected by warning_attribute *) - end - | _ -> None + if attr_equals_builtin x "deprecated" then + Some (x, "deprecated", string_of_opt_payload x.attr_payload) + else if attr_equals_builtin x "alert" then + begin match kind_and_message x.attr_payload with + | Some (kind, message) -> Some (x, kind, message) + | None -> None (* note: bad payloads detected by warning_attribute *) + end + else None let alert_attrs l = List.filter_map alert_attr l @@ -128,9 +254,8 @@ let check_alerts_inclusion ~def ~use loc attrs1 attrs2 s = let rec deprecated_mutable_of_attrs = function | [] -> None - | {attr_name = {txt = "ocaml.deprecated_mutable"|"deprecated_mutable"; _}; - attr_payload = p} :: _ -> - Some (string_of_opt_payload p) + | attr :: _ when attr_equals_builtin attr "deprecated_mutable" -> + Some (string_of_opt_payload attr.attr_payload) | _ :: tl -> deprecated_mutable_of_attrs tl let check_deprecated_mutable loc attrs s = @@ -154,7 +279,10 @@ let rec attrs_of_sig = function | _ -> [] -let alerts_of_sig sg = alerts_of_attrs (attrs_of_sig sg) +let alerts_of_sig ~mark sg = + let a = attrs_of_sig sg in + if mark then mark_alerts_used a; + alerts_of_attrs a let rec attrs_of_str = function | {pstr_desc = Pstr_attribute a} :: tl -> @@ -162,75 +290,76 @@ let rec attrs_of_str = function | _ -> [] -let alerts_of_str str = alerts_of_attrs (attrs_of_str str) - -let check_no_alert attrs = - List.iter - (fun (a, _, _) -> - Location.prerr_warning a.attr_loc - (Warnings.Misplaced_attribute a.attr_name.txt) - ) - (alert_attrs attrs) +let alerts_of_str ~mark str = + let a = attrs_of_str str in + if mark then mark_alerts_used a; + alerts_of_attrs a let warn_payload loc txt msg = Location.prerr_warning loc (Warnings.Attribute_payload (txt, msg)) let warning_attribute ?(ppwarning = true) = - let process loc txt errflag payload = + let process loc name errflag payload = + mark_used name; match string_of_payload payload with | Some s -> begin try Option.iter (Location.prerr_alert loc) (Warnings.parse_options errflag s) - with Arg.Bad msg -> warn_payload loc txt msg + with Arg.Bad msg -> warn_payload loc name.txt msg end | None -> - warn_payload loc txt "A single string literal is expected" + warn_payload loc name.txt "A single string literal is expected" in - let process_alert loc txt = function + let process_alert loc name = function | PStr[{pstr_desc= Pstr_eval( - {pexp_desc=Pexp_constant(Pconst_string(s,_,_))}, + {pexp_desc=Pexp_constant {pconst_desc=Pconst_string(s,_,_); _}}, _) }] -> - begin try Warnings.parse_alert_option s - with Arg.Bad msg -> warn_payload loc txt msg + begin + mark_used name; + try Warnings.parse_alert_option s + with Arg.Bad msg -> warn_payload loc name.txt msg end | k -> match kind_and_message k with | Some ("all", _) -> - warn_payload loc txt "The alert name 'all' is reserved" - | Some _ -> () - | None -> warn_payload loc txt "Invalid payload" + warn_payload loc name.txt "The alert name 'all' is reserved" + | Some _ -> + (* Do [mark_used] in the [Some] case only if Warning 53 is + disabled. Later, they will be marked used (provided they are in a + valid place) in [compile_common], when they are extracted to be + persisted inside the [.cmi] file. *) + if not (Warnings.is_active (Misplaced_attribute "")) + then mark_used name + | None -> begin + (* Do [mark_used] in the [None] case, which is just malformed and + covered by the "Invalid payload" warning. *) + mark_used name; + warn_payload loc name.txt "Invalid payload" + end in - function - | {attr_name = {txt = ("ocaml.warning"|"warning") as txt; _}; - attr_loc; - attr_payload; - } -> - process attr_loc txt false attr_payload - | {attr_name = {txt = ("ocaml.warnerror"|"warnerror") as txt; _}; - attr_loc; - attr_payload - } -> - process attr_loc txt true attr_payload - | {attr_name = {txt="ocaml.ppwarning"|"ppwarning"; _}; - attr_loc = _; - attr_payload = - PStr [ - { pstr_desc= - Pstr_eval({pexp_desc=Pexp_constant (Pconst_string (s, _, _))},_); - pstr_loc } - ]; - } when ppwarning -> - Location.prerr_warning pstr_loc (Warnings.Preprocessor s) - | {attr_name = {txt = ("ocaml.alert"|"alert") as txt; _}; - attr_loc; - attr_payload; - } -> - process_alert attr_loc txt attr_payload - | _ -> - () + fun ({attr_name; attr_loc; attr_payload} as attr) -> + if attr_equals_builtin attr "warning" then + process attr_loc attr_name false attr_payload + else if attr_equals_builtin attr "warnerror" then + process attr_loc attr_name true attr_payload + else if attr_equals_builtin attr "alert" then + process_alert attr_loc attr_name attr_payload + else if ppwarning && attr_equals_builtin attr "ppwarning" then + begin match attr_payload with + | PStr [{ pstr_desc= + Pstr_eval({pexp_desc=Pexp_constant + {pconst_desc=Pconst_string (s, _, _); _}},_); + pstr_loc }] -> + (mark_used attr_name; + Location.prerr_warning pstr_loc (Warnings.Preprocessor s)) + | _ -> + (mark_used attr_name; + warn_payload attr_loc attr_name.txt + "A single string literal is expected") + end let warning_scope ?ppwarning attrs f = let prev = Warnings.backup () in @@ -244,33 +373,34 @@ let warning_scope ?ppwarning attrs f = raise exn -let warn_on_literal_pattern = +let has_attribute nm attrs = List.exists - (fun a -> match a.attr_name.txt with - | "ocaml.warn_on_literal_pattern"|"warn_on_literal_pattern" -> true - | _ -> false - ) + (fun a -> + if attr_equals_builtin a nm + then (mark_used a.attr_name; true) + else false) + attrs -let explicit_arity = - List.exists - (fun a -> match a.attr_name.txt with - | "ocaml.explicit_arity"|"explicit_arity" -> true - | _ -> false - ) +type attr_action = Mark_used_only | Return +let select_attributes actions attrs = + List.filter (fun a -> + List.exists (fun (nm, action) -> + attr_equals_builtin a nm && + begin + mark_used a.attr_name; + action = Return + end) + actions + ) attrs -let immediate = - List.exists - (fun a -> match a.attr_name.txt with - | "ocaml.immediate"|"immediate" -> true - | _ -> false - ) +let warn_on_literal_pattern attrs = + has_attribute "warn_on_literal_pattern" attrs -let immediate64 = - List.exists - (fun a -> match a.attr_name.txt with - | "ocaml.immediate64"|"immediate64" -> true - | _ -> false - ) +let explicit_arity attrs = has_attribute "explicit_arity" attrs + +let immediate attrs = has_attribute "immediate" attrs + +let immediate64 attrs = has_attribute "immediate64" attrs (* The "ocaml.boxed (default)" and "ocaml.unboxed (default)" attributes cannot be input by the user, they are added by the @@ -279,11 +409,8 @@ let immediate64 = source file because the default can change between compiler invocations. *) -let check l a = List.mem a.attr_name.txt l +let has_unboxed attrs = has_attribute "unboxed" attrs -let has_unboxed attr = - List.exists (check ["ocaml.unboxed"; "unboxed"]) - attr +let has_boxed attrs = has_attribute "boxed" attrs -let has_boxed attr = - List.exists (check ["ocaml.boxed"; "boxed"]) attr +let has_atomic attrs = has_attribute "atomic" attrs diff --git a/ocamlmerlin_mlx/ocaml/parsing/builtin_attributes.mli b/ocamlmerlin_mlx/ocaml/parsing/builtin_attributes.mli index 6200fd7..eae3702 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/builtin_attributes.mli +++ b/ocamlmerlin_mlx/ocaml/parsing/builtin_attributes.mli @@ -13,33 +13,111 @@ (* *) (**************************************************************************) -(** Support for some of the builtin attributes +(** Support for the builtin attributes: - - ocaml.deprecated - ocaml.alert - - ocaml.error - - ocaml.ppwarning - - ocaml.warning - - ocaml.warnerror - - ocaml.explicit_arity (for camlp4/camlp5) - - ocaml.warn_on_literal_pattern + - ocaml.boxed + - ocaml.deprecated - ocaml.deprecated_mutable + - ocaml.explicit_arity - ocaml.immediate - ocaml.immediate64 - - ocaml.boxed / ocaml.unboxed + - ocaml.inline + - ocaml.inlined + - ocaml.noalloc + - ocaml.poll + - ocaml.ppwarning + - ocaml.specialise + - ocaml.specialised + - ocaml.tailcall + - ocaml.tail_mod_cons + - ocaml.unboxed + - ocaml.untagged + - ocaml.unrolled + - ocaml.warnerror + - ocaml.warning + - ocaml.warn_on_literal_pattern {b Warning:} this module is unstable and part of {{!Compiler_libs}compiler-libs}. *) +(** {2 Attribute tracking for warning 53} *) + +(** [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 [current_phase] argument indicates when this function is being called + - either when an attribute is created in the parser or when we see an + attribute while running the check in the [Ast_invariants] module. This is + used to ensure that we track only attributes from the final version of the + parse tree: we skip adding attributes seen 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 current_phase = Parser | Invariant_check +val register_attr : current_phase -> string Location.loc -> unit + +(** Marks the attributes hiding in the payload of another attribute used, for + the purposes of misplaced attribute warnings (see comment on + [current_phase] 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. Does nothing if compilation + is stopped before lambda due to command-line flags. *) +val warn_unused : unit -> unit + +(** {3 Warning 53 helpers for environment attributes} + + Some attributes, like deprecation markers, do not affect the compilation of + the definition on which they appear, but rather result in warnings on future + uses of that definition. This is implemented by moving the raw attributes + into the environment, where they will be noticed on future accesses. + + To make misplaced attribute warnings work appropriately for these + attributes, we mark them "used" when they are moved into the environment. + This is done with the helper functions in this section. +*) + +(** Marks the attribute used for the purposes of misplaced attribute warnings if + it is an alert. Call this when moving things allowed to have alert + attributes into the environment. *) +val mark_alert_used : Parsetree.attribute -> unit + +(** The same as [List.iter mark_alert_used]. *) +val mark_alerts_used : Parsetree.attributes -> unit + +(** Marks "warn_on_literal_pattern" attributes used for the purposes of + misplaced attribute warnings. Call this when moving constructors into the + environment. *) +val mark_warn_on_literal_pattern_used : Parsetree.attributes -> unit + +(** Marks "deprecated_mutable" attributes used for the purposes of misplaced + attribute warnings. Call this when moving labels of mutable fields into the + environment. *) +val mark_deprecated_mutable_used : Parsetree.attributes -> unit + +(** {2 Helpers for alert and warning attributes} *) + val check_alerts: Location.t -> Parsetree.attributes -> string -> unit val check_alerts_inclusion: def:Location.t -> use:Location.t -> Location.t -> Parsetree.attributes -> Parsetree.attributes -> string -> unit val alerts_of_attrs: Parsetree.attributes -> Misc.alerts -val alerts_of_sig: Parsetree.signature -> Misc.alerts -val alerts_of_str: Parsetree.structure -> Misc.alerts +val alerts_of_sig: mark:bool -> Parsetree.signature -> Misc.alerts +val alerts_of_str: mark:bool -> Parsetree.structure -> Misc.alerts val check_deprecated_mutable: Location.t -> Parsetree.attributes -> string -> unit @@ -47,14 +125,12 @@ val check_deprecated_mutable_inclusion: def:Location.t -> use:Location.t -> Location.t -> Parsetree.attributes -> Parsetree.attributes -> string -> unit -val check_no_alert: Parsetree.attributes -> unit - val error_of_extension: Parsetree.extension -> Location.error val warning_attribute: ?ppwarning:bool -> Parsetree.attribute -> unit (** Apply warning settings from the specified attribute. - "ocaml.warning"/"ocaml.warnerror" (and variants without the prefix) - are processed and other attributes are ignored. + "ocaml.warning"/"ocaml.warnerror" (and variants without the prefix) are + processed and marked used for warning 53. Other attributes are ignored. Also implement ocaml.ppwarning (unless ~ppwarning:false is passed). @@ -73,12 +149,41 @@ val warning_scope: is executed. *) +(** {2 Helpers for searching for particular attributes} *) + +(** [has_attribute name attrs] is true if an attribute with name [name] or + ["ocaml." ^ name] is present in [attrs]. It marks that attribute used for + the purposes of misplaced attribute warnings. *) +val has_attribute : string -> Parsetree.attributes -> bool + +(** [select_attributes actions attrs] finds the elements of [attrs] that appear + in [actions] and either returns them or just marks them used, according to + the corresponding [attr_action]. + + Each element [(nm, action)] of the [actions] list is an attribute along with + an [attr_action] specifying what to do with that attribute. The action is + used to accommodate different compiler configurations. If an attribute is + used only in some compiler configurations, it's important that we still look + for it and mark it used when compiling with other configurations. + Otherwise, we would issue spurious misplaced attribute warnings. *) +type attr_action = Mark_used_only | Return +val select_attributes : + (string * attr_action) list -> Parsetree.attributes -> Parsetree.attributes + +(** [attr_equals_builtin attr s] is true if the name of the attribute is [s] or + ["ocaml." ^ s]. This is useful for manually inspecting attribute names, but + note that doing so will not result in marking the attribute used for the + purpose of warning 53, so it is usually preferable to use [has_attribute] + or [select_attributes]. *) +val attr_equals_builtin : Parsetree.attribute -> string -> bool + val warn_on_literal_pattern: Parsetree.attributes -> bool val explicit_arity: Parsetree.attributes -> bool - val immediate: Parsetree.attributes -> bool val immediate64: Parsetree.attributes -> bool val has_unboxed: Parsetree.attributes -> bool val has_boxed: Parsetree.attributes -> bool + +val has_atomic: Parsetree.attributes -> bool diff --git a/ocamlmerlin_mlx/ocaml/parsing/docstrings.ml b/ocamlmerlin_mlx/ocaml/parsing/docstrings.ml index a39f75d..32b8e8c 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/docstrings.ml +++ b/ocamlmerlin_mlx/ocaml/parsing/docstrings.ml @@ -91,8 +91,9 @@ let docs_attr ds = let open Parsetree in let body = ds.ds_body in let loc = ds.ds_loc in + let const = { pconst_desc= Pconst_string(body,loc,None); pconst_loc= loc } in let exp = - { pexp_desc = Pexp_constant (Pconst_string(body, loc, None)); + { pexp_desc = Pexp_constant const; pexp_loc = loc; pexp_loc_stack = []; pexp_attributes = []; } @@ -143,8 +144,9 @@ let text_attr ds = let open Parsetree in let body = ds.ds_body in let loc = ds.ds_loc in + let const = { pconst_desc= Pconst_string(body,loc,None); pconst_loc= loc } in let exp = - { pexp_desc = Pexp_constant (Pconst_string(body, loc, None)); + { pexp_desc = Pexp_constant const; pexp_loc = loc; pexp_loc_stack = []; pexp_attributes = []; } diff --git a/ocamlmerlin_mlx/ocaml/parsing/dune b/ocamlmerlin_mlx/ocaml/parsing/dune index 82309d5..0939a2a 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/dune +++ b/ocamlmerlin_mlx/ocaml/parsing/dune @@ -4,19 +4,8 @@ (flags -open=Mlx_utils -open=Mlx_ocaml_utils - -open=Astlib.Ast_501 + -open=Astlib.Ast_504 (:standard -w -9)) - (modules_without_implementation asttypes parsetree) + (modules_without_implementation parsetree) (libraries ppxlib mlx_utils mlx_ocaml_utils)) -(copy_files - (enabled_if - (<> %{profile} "release")) - (mode promote) - (files %{project_root}/merlin/src/ocaml/parsing/*.{ml,mli})) - -(copy_files - (enabled_if - (<> %{profile} "release")) - (mode promote) - (files %{project_root}/merlin/extend_helper.{ml,mli})) diff --git a/ocamlmerlin_mlx/ocaml/parsing/extend_helper.ml b/ocamlmerlin_mlx/ocaml/parsing/extend_helper.ml new file mode 100644 index 0000000..8c751d3 --- /dev/null +++ b/ocamlmerlin_mlx/ocaml/parsing/extend_helper.ml @@ -0,0 +1,101 @@ +open Parsetree + +(** Generate an extension node that will be reported as a syntax error by + Merlin. *) +let syntax_error msg loc : extension = + let str = Location.mkloc "merlin.syntax-error" loc in + let payload = + PStr + [ { pstr_loc = Location.none; + pstr_desc = + Pstr_eval (Ast_helper.(Exp.constant (const_string msg)), []) + } + ] + in + (str, payload) + +(** Physical locations might be too precise for some features. + + For instance in: + let x = f in y + ^1 ^2 + + Merlin cannot distinguish position ^1 from ^2 in the normal AST, + because IN doesn't appear in abstract syntax. This is a problem when + completing, because a different environment should be selected for both + positions. + + One can add relaxed_location attributes to make some locations closer to + the concrete syntax. + + Here is the same line annotated with physical and relaxed locations: + let x = f in y + [ ] [ ] -- physical locations for f and y nodes + [ ][ ] -- relaxed locations for f and y nodes +*) +let relaxed_location loc : attribute = + let str = Location.mkloc "merlin.relaxed-location" loc in + Ast_helper.Attr.mk str (PStr []) + +(** If some code should be ignored by merlin when reporting information to + the user, put a hide_node attribute. + + This is useful for generated/desugared code which doesn't correspond to + anything in concrete syntax (example use-case: encoding of some + js_of_ocaml constructs). +*) +let hide_node : attribute = + Ast_helper.Attr.mk (Location.mknoloc "merlin.hide") (PStr []) + +(** The converse: when merlin should focus on a specific node of the AST. + The main use case is also for js_of_ocaml. + + Assuming is translated to: + + let module M = struct + let prolog = ... (* boilerplate *) + + let code = + + let epilog = ... (* boilerplate *) + end + in M.boilerplate + + To make merlin focus on [M.code] and ignore the boilerplate ([M.prolog] + and [M.epilog]), add a [focus_node] attribute to the [M.code] item. +*) +let focus_node : attribute = + Ast_helper.Attr.mk (Location.mknoloc "merlin.focus") (PStr []) + +(* Projections for merlin attributes and extensions *) + +let classify_extension ((id, _) : extension) : [ `Other | `Syntax_error ] = + match id.Location.txt with + | "merlin.syntax-error" -> `Syntax_error + | _ -> `Other + +let classify_attribute attr : [ `Other | `Relaxed_location | `Hide | `Focus ] = + let id, _ = Ast_helper.Attr.as_tuple attr in + match id.Location.txt with + | "merlin.relaxed-location" -> `Relaxed_location + | "merlin.hide" -> `Hide + | "merlin.focus" -> `Focus + | _ -> `Other + +let extract_syntax_error ((id, payload) : extension) : string * Location.t = + if id.Location.txt <> "merlin.syntax-error" then + invalid_arg "Merlin_extend.Reader_helper.extract_syntax_error"; + let invalid_msg = + "Warning: extension produced an incorrect syntax-error node" + in + let msg = + match Ast_helper.extract_str_payload payload with + | Some (msg, _loc) -> msg + | None -> invalid_msg + in + (msg, id.Location.loc) + +let extract_relaxed_location attr : Location.t = + match Ast_helper.Attr.as_tuple attr with + | { Location.txt = "merlin.relaxed-location"; loc }, _ -> loc + | _ -> invalid_arg "Merlin_extend.Reader_helper.extract_relaxed_location" diff --git a/ocamlmerlin_mlx/ocaml/parsing/extend_helper.mli b/ocamlmerlin_mlx/ocaml/parsing/extend_helper.mli new file mode 100644 index 0000000..638ce64 --- /dev/null +++ b/ocamlmerlin_mlx/ocaml/parsing/extend_helper.mli @@ -0,0 +1,65 @@ +open Parsetree + +(** Generate an extension node that will be reported as a syntax error by + Merlin. *) +val syntax_error : string -> Location.t -> extension + +(** Physical locations might be too precise for some features. + + For instance in: + let x = f in y + ^1 ^2 + + Merlin cannot distinguish position ^1 from ^2 in the normal AST, + because IN doesn't appear in abstract syntax. This is a problem when + completing, because a different environment should be selected for both + positions. + + One can add relaxed_location attributes to make some locations closer to + the concrete syntax. + + Here is the same line annotated with physical and relaxed locations: + let x = f in y + [ ] [ ] -- physical locations for f and y nodes + [ ][ ] -- relaxed locations for f and y nodes +*) +val relaxed_location : Location.t -> attribute + +(** If some code should be ignored by merlin when reporting information to + the user, put a hide_node attribute. + + This is useful for generated/desugared code which doesn't correspond to + anything in concrete syntax (example use-case: encoding of some + js_of_ocaml constructs). +*) +val hide_node : attribute + +(** The converse: when merlin should focus on a specific node of the AST. + The main use case is also for js_of_ocaml. + + Assuming is translated to: + + let module M = struct + let prolog = ... (* boilerplate *) + + let code = + + let epilog = ... (* boilerplate *) + end + in M.boilerplate + + To make merlin focus on [M.code] and ignore the boilerplate ([M.prolog] + and [M.epilog]), add a [focus_node] attribute to the [M.code] item. +*) +val focus_node : attribute + +(* Projections for merlin attributes and extensions *) + +val classify_extension : extension -> [ `Other | `Syntax_error ] + +val extract_syntax_error : extension -> string * Location.t + +val classify_attribute : + attribute -> [ `Other | `Relaxed_location | `Hide | `Focus ] + +val extract_relaxed_location : attribute -> Location.t diff --git a/ocamlmerlin_mlx/ocaml/parsing/lexer.ml b/ocamlmerlin_mlx/ocaml/parsing/lexer.ml new file mode 100644 index 0000000..3ebda68 --- /dev/null +++ b/ocamlmerlin_mlx/ocaml/parsing/lexer.ml @@ -0,0 +1,3 @@ +(* This forward reference is filled in Lexer_raw.mll *) +let is_keyword_ref : (string -> bool) ref = ref (fun _ -> false) +let is_keyword txt = !is_keyword_ref txt diff --git a/ocamlmerlin_mlx/ocaml/parsing/location.ml b/ocamlmerlin_mlx/ocaml/parsing/location.ml index 1b8b5f1..d86e86c 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/location.ml +++ b/ocamlmerlin_mlx/ocaml/parsing/location.ml @@ -122,13 +122,6 @@ let echo_eof () = print_newline (); incr num_loc_lines -(* This is used by the toplevel and the report printers below. *) -let separate_new_message ppf = - if not (is_first_message ()) then begin - Format.pp_print_newline ppf (); - incr num_loc_lines - end - (* Code printing errors and warnings must be wrapped using this function, in order to update [num_loc_lines]. @@ -150,6 +143,11 @@ let print_updating_num_loc_lines ppf f arg = pp_print_flush ppf (); pp_set_formatter_out_functions ppf out_functions +(* +let setup_tags () = + Misc.Style.setup !Clflags.color +*) + (******************************************************************************) (* Printing locations, e.g. 'File "foo.ml", line 3, characters 10-12' *) @@ -209,8 +207,19 @@ let absolute_path s = (* This function could go into Filename *) let show_filename file = (* if !Clflags.absname then absolute_path file else *) file -let print_filename ppf file = - Format.pp_print_string ppf (show_filename file) +module Fmt = Format_doc + +module Doc = struct + + (* This is used by the toplevel and the report printers below. *) + let separate_new_message ppf () = + if not (is_first_message ()) then begin + Fmt.pp_print_newline ppf (); + incr num_loc_lines + end + + let filename ppf file = + Fmt.pp_print_string ppf (show_filename file) (* Best-effort printing of the text describing a location, of the form 'File "foo.ml", line 3, characters 10-12'. @@ -218,58 +227,73 @@ let print_filename ppf file = Some of the information (filename, line number or characters numbers) in the location might be invalid; in which case we do not print it. *) -let print_loc ppf loc = - let file_valid = function - | "_none_" -> - (* This is a dummy placeholder, but we print it anyway to please editors - that parse locations in error messages (e.g. Emacs). *) - true - | "" | "//toplevel//" -> false - | _ -> true - in - let line_valid line = line > 0 in - let chars_valid ~startchar ~endchar = startchar <> -1 && endchar <> -1 in - - let file = - (* According to the comment in location.mli, if [pos_fname] is "", we must - use [!input_name]. *) - if loc.loc_start.pos_fname = "" then !input_name - else loc.loc_start.pos_fname - in - let line = loc.loc_start.pos_lnum in - let startchar = loc.loc_start.pos_cnum - loc.loc_start.pos_bol in - let endchar = loc.loc_end.pos_cnum - loc.loc_start.pos_bol in - - let first = ref true in - let capitalize s = - if !first then (first := false; String.capitalize_ascii s) - else s in - let comma () = - if !first then () else Format.fprintf ppf ", " in - - Format.fprintf ppf "@{"; - - if file_valid file then - Format.fprintf ppf "%s \"%a\"" (capitalize "file") print_filename file; - - (* Print "line 1" in the case of a dummy line number. This is to please the - existing setup of editors that parse locations in error messages (e.g. - Emacs). *) - comma (); - Format.fprintf ppf "%s %i" (capitalize "line") - (if line_valid line then line else 1); - - if chars_valid ~startchar ~endchar then ( + let loc ppf loc = + let file_valid = function + | "_none_" -> + (* This is a dummy placeholder, but we print it anyway to please + editors that parse locations in error messages (e.g. Emacs). *) + true + | "" | "//toplevel//" -> false + | _ -> true + in + let line_valid line = line > 0 in + let chars_valid ~startchar ~endchar = startchar <> -1 && endchar <> -1 in + + let file = + (* According to the comment in location.mli, if [pos_fname] is "", we must + use [!input_name]. *) + if loc.loc_start.pos_fname = "" then !input_name + else loc.loc_start.pos_fname + in + let startline = loc.loc_start.pos_lnum in + let endline = loc.loc_end.pos_lnum in + let startchar = loc.loc_start.pos_cnum - loc.loc_start.pos_bol in + let endchar = loc.loc_end.pos_cnum - loc.loc_end.pos_bol in + + let first = ref true in + let capitalize s = + if !first then (first := false; String.capitalize_ascii s) + else s in + let comma () = + if !first then () else Fmt.fprintf ppf ", " in + + Fmt.fprintf ppf "@{"; + + if file_valid file then + Fmt.fprintf ppf "%s \"%a\"" (capitalize "file") filename file; + + (* Print "line 1" in the case of a dummy line number. This is to please the + existing setup of editors that parse locations in error messages (e.g. + Emacs). *) comma (); - Format.fprintf ppf "%s %i-%i" (capitalize "characters") startchar endchar - ); + let startline = if line_valid startline then startline else 1 in + let endline = if line_valid endline then endline else startline in + begin if startline = endline then + Fmt.fprintf ppf "%s %i" (capitalize "line") startline + else + Fmt.fprintf ppf "%s %i-%i" (capitalize "lines") startline endline + end; + + if chars_valid ~startchar ~endchar then ( + comma (); + Fmt.fprintf ppf "%s %i-%i" (capitalize "characters") startchar endchar + ); - Format.fprintf ppf "@}" + Fmt.fprintf ppf "@}" + + (* Print a comma-separated list of locations *) + let locs ppf locs = + Fmt.pp_print_list ~pp_sep:(fun ppf () -> Fmt.fprintf ppf ",@ ") + loc ppf locs + let quoted_filename ppf f = Misc.Style.as_inline_code filename ppf f + +end + +let print_filename = Fmt.compat Doc.filename +let print_loc = Fmt.compat Doc.loc +let print_locs = Fmt.compat Doc.locs +let separate_new_message ppf = Fmt.compat Doc.separate_new_message ppf () -(* Print a comma-separated list of locations *) -let print_locs ppf locs = - Format.pp_print_list ~pp_sep:(fun ppf () -> Format.fprintf ppf ",@ ") - print_loc ppf locs (******************************************************************************) (* An interval set structure; additionally, it stores user-provided information @@ -283,7 +307,6 @@ let print_locs ppf locs = overlap). *) -(* module ISet : sig type 'a bound = 'a * int type 'a t @@ -333,33 +356,26 @@ struct List.exists (fun ((_, s), (_, e)) -> s <= pos && pos <= e) iset let find_bound_in iset ~range:(start, end_) = - try Some ( - List.find_map ~f:(fun ((a, x), (b, y)) -> + List.find_map (fun ((a, x), (b, y)) -> if start <= x && x <= end_ then Some (a, x) else if start <= y && y <= end_ then Some (b, y) else None ) iset - ) with Not_found -> None let is_start iset ~pos = - try Some ( - List.find_map ~f:(fun ((a, x), _) -> + List.find_map (fun ((a, x), _) -> if pos = x then Some a else None ) iset - ) with Not_found -> None let is_end iset ~pos = - try Some ( - List.find_map ~f:(fun (_, (b, y)) -> + List.find_map (fun (_, (b, y)) -> if pos = y then Some b else None ) iset - ) with Not_found -> None let extrema iset = if iset = [] then None else Some (fst (List.hd iset), snd (List.hd (List.rev iset))) end -*) (* Highlight the location by printing it again. @@ -393,12 +409,12 @@ end If [locs] is empty then this function is a no-op. *) -(* + type input_line = { text : string; start_pos : int; } -*) + (* Takes a list of lines with possibly missing line numbers. @@ -407,7 +423,7 @@ type input_line = { This is not always the case, typically if lexer line directives are involved... *) -(* + let infer_line_numbers (lines: (int option * input_line) list): (int option * input_line) list @@ -425,14 +441,14 @@ let infer_line_numbers List.mapi (fun i (_, line) -> (Some (m + i), line)) lines | _, _ -> lines -*) + (* [get_lines] must return the lines to highlight, given starting and ending positions. See [lines_around_from_current_input] below for an instantiation of [get_lines] that reads from the current input. *) -(* + let highlight_quote ppf ~(get_lines: start_pos:position -> end_pos:position -> input_line list) ?(max_lines = 10) @@ -463,13 +479,13 @@ let highlight_quote ppf Option.fold ~some:Int.to_string ~none:"" lnum, start_pos)) in - Format.fprintf ppf "@["; + Fmt.fprintf ppf "@["; begin match lines with | [] | [("", _, _)] -> () | [(line, line_nb, line_start_cnum)] -> (* Single-line error *) - Format.fprintf ppf "%s | %s@," line_nb line; - Format.fprintf ppf "%*s " (String.length line_nb) ""; + Fmt.fprintf ppf "%s | %s@," line_nb line; + Fmt.fprintf ppf "%*s " (String.length line_nb) ""; (* Iterate up to [rightmost], which can be larger than the length of the line because we may point to a location after the end of the last token on the line, for instance: @@ -481,21 +497,21 @@ let highlight_quote ppf for i = 0 to rightmost.pos_cnum - line_start_cnum - 1 do let pos = line_start_cnum + i in if ISet.is_start iset ~pos <> None then - Format.fprintf ppf "@{<%s>" highlight_tag; - if ISet.mem iset ~pos then Format.pp_print_char ppf '^' + Fmt.fprintf ppf "@{<%s>" highlight_tag; + if ISet.mem iset ~pos then Fmt.pp_print_char ppf '^' else if i < String.length line then begin (* For alignment purposes, align using a tab for each tab in the source code *) - if line.[i] = '\t' then Format.pp_print_char ppf '\t' - else Format.pp_print_char ppf ' ' + if line.[i] = '\t' then Fmt.pp_print_char ppf '\t' + else Fmt.pp_print_char ppf ' ' end; if ISet.is_end iset ~pos <> None then - Format.fprintf ppf "@}" + Fmt.fprintf ppf "@}" done; - Format.fprintf ppf "@}@," + Fmt.fprintf ppf "@}@," | _ -> (* Multi-line error *) - Misc.pp_two_columns ~sep:"|" ~max_lines ppf + Fmt.pp_two_columns ~sep:"|" ~max_lines ppf @@ List.map (fun (line, line_nb, line_start_cnum) -> let line = String.mapi (fun i car -> if ISet.mem iset ~pos:(line_start_cnum + i) then car else '.' @@ -503,12 +519,9 @@ let highlight_quote ppf (line_nb, line) ) lines end; - Format.fprintf ppf "@]" -*) - + Fmt.fprintf ppf "@]" -(* let lines_around ~(start_pos: position) ~(end_pos: position) ~(seek: int -> unit) @@ -545,10 +558,8 @@ let lines_around in loop (); List.rev !lines -*) -(* -(* Try to get lines from a lexbuf *) +(* Attempt to get lines from the lexing buffer. *) let lines_around_from_lexbuf ~(start_pos: position) ~(end_pos: position) (lb: lexbuf): @@ -571,9 +582,7 @@ let lines_around_from_lexbuf in lines_around ~start_pos ~end_pos ~seek ~read_char end -*) -(* (* Attempt to get lines from the phrase buffer *) let lines_around_from_phrasebuf ~(start_pos: position) ~(end_pos: position) @@ -590,67 +599,26 @@ let lines_around_from_phrasebuf end in lines_around ~start_pos ~end_pos ~seek ~read_char -*) - -(* -(* Get lines from a file *) -let lines_around_from_file - ~(start_pos: position) ~(end_pos: position) - (filename: string): - input_line list - = - try - let cin = open_in_bin filename in - let read_char () = - try Some (input_char cin) with End_of_file -> None - in - let lines = - lines_around ~start_pos ~end_pos ~seek:(seek_in cin) ~read_char - in - close_in cin; - lines - with Sys_error _ -> [] -*) -(* (* A [get_lines] function for [highlight_quote] that reads from the current - input. - - It first tries to read from [!input_lexbuf], then if that fails (because the - lexbuf no longer contains the input we want), it reads from [!input_name] - directly *) + input. *) let lines_around_from_current_input ~start_pos ~end_pos = - (* Be a bit defensive, and do not try to open one of the possible - [!input_name] values that we know do not denote valid filenames. *) - let file_valid = function - | "//toplevel//" | "_none_" | "" -> false - | _ -> true - in - let from_file () = - if file_valid !input_name then - lines_around_from_file !input_name ~start_pos ~end_pos - else + match !input_lexbuf, !input_phrase_buffer, !input_name with + | _, Some pb, "//toplevel//" -> + lines_around_from_phrasebuf pb ~start_pos ~end_pos + | Some lb, _, _ -> + lines_around_from_lexbuf lb ~start_pos ~end_pos + | None, _, _ -> [] - in - match !input_lexbuf with - | Some lb -> - begin match lines_around_from_lexbuf lb ~start_pos ~end_pos with - | [] -> (* The input is likely not in the lexbuf anymore *) - from_file () - | lines -> - lines - end - | None -> - from_file () -*) (******************************************************************************) (* Reporting errors and warnings *) -type msg = (Format.formatter -> unit) loc + +type msg = Fmt.t loc let msg ?(loc = none) fmt = - Format.kdprintf (fun txt -> { loc; txt }) fmt + Fmt.kdoc_printf (fun txt -> { loc; txt }) fmt type report_kind = | Report_error @@ -665,11 +633,12 @@ type report = { kind : report_kind; main : msg; sub : msg list; + footnote: Fmt.t option; source : error_source; } let loc_of_report { main; _ } = main.loc -let print_msg fmt msg = msg.txt fmt +let print_msg fmt msg = Fmt.Doc.format fmt msg.txt let print_main fmt { main; _ } = print_msg fmt main let print_sub_msg = print_msg @@ -684,7 +653,7 @@ type report_printer = { pp_main_loc : report_printer -> report -> Format.formatter -> t -> unit; pp_main_txt : report_printer -> report -> - Format.formatter -> (Format.formatter -> unit) -> unit; + Format.formatter -> Fmt.t -> unit; pp_submsgs : report_printer -> report -> Format.formatter -> msg list -> unit; pp_submsg : report_printer -> report -> @@ -692,10 +661,9 @@ type report_printer = { pp_submsg_loc : report_printer -> report -> Format.formatter -> t -> unit; pp_submsg_txt : report_printer -> report -> - Format.formatter -> (Format.formatter -> unit) -> unit; + Format.formatter -> Fmt.t -> unit; } -(* let is_dummy_loc loc = (* Fixme: this should be just [loc.loc_ghost] and the function should be inlined below. However, currently, the compiler emits in some places ghost @@ -703,7 +671,6 @@ let is_dummy_loc loc = should be made non-ghost -- in the meantime we just check if the ranges are valid. *) loc.loc_start.pos_cnum = -1 || loc.loc_end.pos_cnum = -1 -*) (* It only makes sense to highlight (i.e. quote or underline the corresponding source code) locations that originate from the current input. @@ -721,7 +688,7 @@ let is_dummy_loc loc = in particular this is not what happens when using -pp or -ppx or a ppx driver. *) - (* + let is_quotable_loc loc = not (is_dummy_loc loc) && loc.loc_start.pos_fname = !input_name @@ -732,11 +699,11 @@ let error_style () = match !Clflags.error_style with | Some Contextual | None -> Contextual | Some Short -> Short - *) + | Some Merlin -> Merlin let batch_mode_printer : report_printer = - let pp_loc _self _report _ppf _loc = - (* + let pp_loc _self report ppf loc = + if error_style () = Merlin then () else let tag = match report.kind with | Report_warning_as_error _ | Report_alert_as_error _ @@ -746,6 +713,7 @@ let batch_mode_printer : report_printer = in let highlight ppf loc = match error_style () with + | Misc.Error_style.Merlin -> assert false | Misc.Error_style.Contextual -> if is_quotable_loc loc then highlight_quote ppf @@ -754,27 +722,47 @@ let batch_mode_printer : report_printer = | Misc.Error_style.Short -> () in - Format.fprintf ppf "@[%a:@ %a@]" print_loc loc highlight loc - *) - () + Format.fprintf ppf "%a:@ %a" print_loc loc + (Fmt.compat highlight) loc in - let pp_txt ppf txt = Format.fprintf ppf "@[%t@]" txt in - let pp self ppf report = - separate_new_message ppf; - (* Make sure we keep [num_loc_lines] updated. - The tabulation box is here to give submessage the option - to be aligned with the main message box - *) - print_updating_num_loc_lines ppf (fun ppf () -> - Format.fprintf ppf "@[%a%a%a: %a%a%a%a@]@." + let pp_txt ppf txt = Format.fprintf ppf "%a" Fmt.Doc.format txt in + let pp_footnote ppf f = + Option.iter (Format.fprintf ppf "@,%a" pp_txt) f + in + let error_format self ppf report = + Format.fprintf ppf "@[%a%a%a: %a@[%a@]%a%a%a@]@." Format.pp_open_tbox () (self.pp_main_loc self report) report.main.loc (self.pp_report_kind self report) report.kind Format.pp_set_tab () (self.pp_main_txt self report) report.main.txt (self.pp_submsgs self report) report.sub + pp_footnote report.footnote Format.pp_close_tbox () - ) () + in + let warning_format self ppf report = + Format.fprintf ppf "@[%a@[%a: %a@]%a%a@]@." + (self.pp_main_loc self report) report.main.loc + (self.pp_report_kind self report) report.kind + (self.pp_main_txt self report) report.main.txt + (self.pp_submsgs self report) report.sub + pp_footnote report.footnote + in + let pp self ppf report = + (* setup_tags (); *) + separate_new_message ppf; + let printer ppf () = match report.kind with + | Report_warning _ + | Report_warning_as_error _ + | Report_alert _ | Report_alert_as_error _ -> + warning_format self ppf report + | Report_error -> error_format self ppf report + in + (* Make sure we keep [num_loc_lines] updated. + The tabulation box is here to give submessage the option + to be aligned with the main message box + *) + print_updating_num_loc_lines ppf printer () in let pp_report_kind _self _ ppf = function | Report_error -> Format.fprintf ppf "@{Error@}" @@ -797,9 +785,12 @@ let batch_mode_printer : report_printer = ) msgs in let pp_submsg self report ppf { loc; txt } = - Format.fprintf ppf "@[%a %a@]" - (self.pp_submsg_loc self report) loc - (self.pp_submsg_txt self report) txt + if loc.loc_ghost then + Format.fprintf ppf "@[%a@]" (self.pp_submsg_txt self report) txt + else + Format.fprintf ppf "%a @[%a@]" + (self.pp_submsg_loc self report) loc + (self.pp_submsg_txt self report) txt in let pp_submsg_loc self report ppf loc = if not loc.loc_ghost then @@ -814,7 +805,7 @@ let batch_mode_printer : report_printer = (* let terminfo_toplevel_printer (lb: lexbuf): report_printer = let pp self ppf err = - setup_colors (); + setup_tags (); (* Highlight all toplevel locations of the report, instead of displaying the main location. Do it now instead of in [pp_main_loc], to avoid messing with Format boxes. *) @@ -853,24 +844,35 @@ let print_report ppf report = (* Reporting errors *) type error = report +type delayed_msg = unit -> Fmt.t option let report_error ppf err = print_report ppf err -let mkerror loc sub txt source = - { kind = Report_error; main = { loc; txt }; sub; source } +let mkerror loc sub footnote source txt = + { kind = Report_error; main = { loc; txt }; sub; footnote=footnote (); source } + +let errorf ?(loc = none) ?(sub = []) ?(footnote=Fun.const None) ?(source = Typer) = + Fmt.kdoc_printf (mkerror loc sub footnote source) -let errorf ?(loc = none) ?(sub = []) ?(source=Typer) = - Format.kdprintf (fun msg -> mkerror loc sub msg source) +let aligned_error_hint + ?(loc = none) ?(sub = []) ?(footnote=Fun.const None) ?(source = Typer) fmt = + Fmt.kdoc_printf (fun main hint -> + match hint with + | None -> mkerror loc sub footnote source main + | Some hint -> + let main, hint = Misc.align_error_hint ~main ~hint in + mkerror loc (mknoloc hint :: sub) footnote source main + ) fmt -let error ?(loc = none) ?(sub = []) ?(source=Typer) msg_str = - mkerror loc sub (fun ppf -> Format.pp_print_string ppf msg_str) source +let error ?(loc = none) ?(sub = []) ?(footnote=Fun.const None) ?(source = Typer) msg_str = + mkerror loc sub footnote source Fmt.Doc.(string msg_str empty) -let error_of_printer ?(loc = none) ?(sub = []) ?(source=Typer) pp x = - mkerror loc sub (fun ppf -> pp ppf x) source +let error_of_printer ?(loc = none) ?(sub = []) ?(footnote=Fun.const None) ?(source = Typer) pp x = + mkerror loc sub footnote source (Fmt.doc_printf "%a" pp x) -let error_of_printer_file ?source print x = - error_of_printer ?source ~loc:(in_file !input_name) print x +let error_of_printer_file ?(source = Typer) print x = + error_of_printer ~source ~loc:(in_file !input_name) print x (******************************************************************************) (* Reporting warnings: generating a report from a warning number using the @@ -880,14 +882,12 @@ let default_warning_alert_reporter ?(source = Typer) report mk (loc: t) w : repo match report w with | `Inactive -> None | `Active { Warnings.id; message; is_error; sub_locs } -> - let msg_of_str str = fun ppf -> Format.pp_print_string ppf str in let kind = mk is_error id in - let main = { loc; txt = msg_of_str message } in + let main = { loc; txt = message } in let sub = List.map (fun (loc, sub_message) -> - { loc; txt = msg_of_str sub_message } + { loc; txt = sub_message } ) sub_locs in - Some { kind; main; sub; source } - + Some { kind; main; sub; footnote=None; source } let default_warning_reporter = default_warning_alert_reporter @@ -939,13 +939,21 @@ let deprecated ?def ?use loc message = alert ?def ?use ~kind:"deprecated" loc message +module Style = Misc.Style + let auto_include_alert lib = - let message = Printf.sprintf "\ - OCaml's lib directory layout changed in 5.0. The %s subdirectory has been \ - automatically added to the search path, but you should add -I +%s to the \ - command-line to silence this alert (e.g. by adding %s to the list of \ - libraries in your dune file, or adding use_%s to your _tags file for \ - ocamlbuild, or using -package %s for ocamlfind)." lib lib lib lib lib in + let message = Fmt.asprintf "\ + OCaml's lib directory layout changed in 5.0. The %a subdirectory has been \ + automatically added to the search path, but you should add %a to the \ + command-line to silence this alert (e.g. by adding %a to the list of \ + libraries in your dune file, or adding %a to your %a file for \ + ocamlbuild, or using %a for ocamlfind)." + Style.inline_code lib + Style.inline_code ("-I +" ^lib) + Style.inline_code lib + Style.inline_code ("use_"^lib) + Style.inline_code "_tags" + Style.inline_code ("-package " ^ lib) in let alert = {Warnings.kind="ocaml_deprecated_auto_include"; use=none; def=none; message = Format.asprintf "@[@\n%a@]" Format.pp_print_text message} @@ -953,11 +961,14 @@ let auto_include_alert lib = prerr_alert none alert let deprecated_script_alert program = - let message = Printf.sprintf "\ - Running %s where the first argument is an implicit basename with no \ - extension (e.g. %s script-file) is deprecated. Either rename the script \ - (%s script-file.ml) or qualify the basename (%s ./script-file)" - program program program program + let message = Fmt.asprintf "\ + Running %a where the first argument is an implicit basename with no \ + extension (e.g. %a) is deprecated. Either rename the script \ + (%a) or qualify the basename (%a)" + Style.inline_code program + Style.inline_code (program ^ " script-file") + Style.inline_code (program ^ " script-file.ml") + Style.inline_code (program ^ " ./script-file") in let alert = {Warnings.kind="ocaml_deprecated_cli"; use=none; def=none; @@ -987,6 +998,7 @@ let error_of_exn exn = in loop !error_of_exn + let () = register_error_of_exn (function @@ -1016,5 +1028,5 @@ let () = | _ -> None ) -let raise_errorf ?(loc = none) ?(sub = []) ?(source = Typer)= - Format.kdprintf (fun txt -> raise (Error (mkerror loc sub txt source))) +let raise_errorf ?(loc = none) ?(sub = []) ?(footnote=Fun.const None) ?(source = Typer) = + Fmt.kdoc_printf (fun txt -> raise (Error (mkerror loc sub footnote source txt))) diff --git a/ocamlmerlin_mlx/ocaml/parsing/location.mli b/ocamlmerlin_mlx/ocaml/parsing/location.mli index 6681309..2605cb8 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/location.mli +++ b/ocamlmerlin_mlx/ocaml/parsing/location.mli @@ -26,7 +26,31 @@ type t = Warnings.loc = { loc_start: Lexing.position; loc_end: Lexing.position; loc_ghost: bool; -} + } +(** [t] represents a range of characters in the source code. + + loc_ghost=false whenever the AST described by the location can be parsed + from the location. In all other cases, loc_ghost must be true. Most + locations produced by the parser have loc_ghost=false. + When loc_ghost=true, the location is usually a best effort approximation. + + This info is used by tools like merlin that want to relate source code with + parsetrees or later asts. ocamlprof skips instrumentation of ghost nodes. + + Example: in `let f x = x`, we have: + - a structure item at location "let f x = x" + - a pattern "f" at location "f" + - an expression "fun x -> x" at location "x = x" with loc_ghost=true + - a pattern "x" at location "x" + - an expression "x" at location "x" + In this case, every node has loc_ghost=false, except the node "fun x -> x", + since [Parser.expression (Lexing.from_string "x = x")] would fail to parse. + By contrast, in `let f = fun x -> x`, every node has loc_ghost=false. + + Line directives can modify the filenames and line numbers arbitrarily, + which is orthogonal to loc_ghost, which describes the range of characters + from loc_start.pos_cnum to loc_end.pos_cnum in the parsed string. + *) (** Note on the use of Lexing.position in this module. If [pos_fname = ""], then use [!input_name] instead. @@ -84,10 +108,10 @@ val input_lexbuf: Lexing.lexbuf option ref toplevel phrase. *) val input_phrase_buffer: Buffer.t option ref + (** {1 Toplevel-specific functions} *) val echo_eof: unit -> unit -val separate_new_message: formatter -> unit val reset: unit -> unit @@ -173,11 +197,20 @@ val show_filename: string -> string Otherwise, returns the filename unchanged. *) val print_filename: formatter -> string -> unit - val print_loc: formatter -> t -> unit val print_locs: formatter -> t list -> unit +val separate_new_message: formatter -> unit + +module Doc: sig + val separate_new_message: unit Format_doc.printer + val filename: string Format_doc.printer + val quoted_filename: string Format_doc.printer + val loc: t Format_doc.printer + val locs: t list Format_doc.printer +end (** {1 Toplevel-specific location highlighting} *) + (* val highlight_terminfo: Lexing.lexbuf -> formatter -> t list -> unit @@ -187,9 +220,9 @@ val highlight_terminfo: (** {2 The type of reports and report printers} *) -type msg = (Format.formatter -> unit) loc +type msg = Format_doc.t loc -val msg: ?loc:t -> ('a, Format.formatter, unit, msg) format4 -> 'a +val msg: ?loc:t -> ('a, Format_doc.formatter, unit, msg) format4 -> 'a type report_kind = | Report_error @@ -204,9 +237,11 @@ type report = { kind : report_kind; main : msg; sub : msg list; + footnote: Format_doc.t option; source : error_source; } + (* Exposed for Merlin *) val loc_of_report: report -> t val print_main : formatter -> report -> unit @@ -222,7 +257,7 @@ type report_printer = { pp_main_loc : report_printer -> report -> Format.formatter -> t -> unit; pp_main_txt : report_printer -> report -> - Format.formatter -> (Format.formatter -> unit) -> unit; + Format.formatter -> Format_doc.t -> unit; pp_submsgs : report_printer -> report -> Format.formatter -> msg list -> unit; pp_submsg : report_printer -> report -> @@ -230,7 +265,7 @@ type report_printer = { pp_submsg_loc : report_printer -> report -> Format.formatter -> t -> unit; pp_submsg_txt : report_printer -> report -> - Format.formatter -> (Format.formatter -> unit) -> unit; + Format.formatter -> Format_doc.t -> unit; } (** A printer for [report]s, defined using open-recursion. The goal is to make it easy to define new printers by re-using code from @@ -240,6 +275,7 @@ type report_printer = { (** {2 Report printers used in the compiler} *) val batch_mode_printer: report_printer + (* val terminfo_toplevel_printer: Lexing.lexbuf -> report_printer @@ -309,7 +345,7 @@ val default_alert_reporter: t -> Warnings.alert -> report option val print_alert: t -> formatter -> Warnings.alert -> unit (** Prints an alert. This is simply the composition of [report_alert] and - [print_report]. *) + [print_report]. *) val prerr_alert_ref: (t -> Warnings.alert -> unit) ref @@ -336,15 +372,26 @@ val deprecated_script_alert: string -> unit type error = report (** An [error] is a [report] which [report_kind] must be [Report_error]. *) -val error: ?loc:t -> ?sub:msg list -> ?source:error_source -> string -> error +type delayed_msg = unit -> Format_doc.t option + +val error: ?loc:t -> ?sub:msg list -> ?footnote:delayed_msg -> + ?source:error_source -> string -> error + +val errorf: ?loc:t -> ?sub:msg list -> ?footnote:delayed_msg -> + ?source:error_source -> ('a, Format_doc.formatter, unit, error) format4 -> 'a -val errorf: ?loc:t -> ?sub:msg list -> ?source:error_source -> - ('a, Format.formatter, unit, error) format4 -> 'a +val aligned_error_hint: + ?loc:t -> ?sub:msg list -> ?footnote:delayed_msg -> ?source:error_source -> + ('a, Format_doc.formatter, unit, Format_doc.t option -> error) format4 -> 'a +(** [aligned_error_hint ?loc ?sub ?footnote fmt ... aligned_hint] produces an + error report where the potential [aligned_hint] message has been aligned + with the main error message before being added to the list of submessages.*) -val error_of_printer: ?loc:t -> ?sub:msg list -> ?source:error_source -> - (formatter -> 'a -> unit) -> 'a -> error +val error_of_printer: ?loc:t -> ?sub:msg list -> ?footnote:delayed_msg -> + ?source:error_source -> (Format_doc.formatter -> 'a -> unit) -> 'a -> error -val error_of_printer_file: ?source:error_source -> (formatter -> 'a -> unit) -> 'a -> error +val error_of_printer_file: ?source:error_source -> + (Format_doc.formatter -> 'a -> unit) -> 'a -> error (** {1 Automatically reporting errors for raised exceptions} *) @@ -367,8 +414,8 @@ exception Already_displayed_error (** Raising [Already_displayed_error] signals an error which has already been printed. The exception will be caught, but nothing will be printed *) -val raise_errorf: ?loc:t -> ?sub:msg list -> ?source:error_source -> - ('a, Format.formatter, unit, 'b) format4 -> 'a +val raise_errorf: ?loc:t -> ?sub:msg list -> ?footnote:delayed_msg -> + ?source:error_source -> ('a, Format_doc.formatter, unit, 'b) format4 -> 'a val report_exception: formatter -> exn -> unit (** Reraise the exception if it is unknown. *) diff --git a/ocamlmerlin_mlx/ocaml/parsing/location_aux.ml b/ocamlmerlin_mlx/ocaml/parsing/location_aux.ml index 966ebdd..e7e215b 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/location_aux.ml +++ b/ocamlmerlin_mlx/ocaml/parsing/location_aux.ml @@ -46,6 +46,15 @@ let compare_pos pos loc = else 0 +let included ~into:parent_loc child_loc = +Lexing.compare_pos child_loc.loc_start parent_loc.loc_start >= 0 && + Lexing.compare_pos parent_loc.loc_end child_loc.loc_end >= 0 + +let overlap_with_range (start, stop) loc = + let a = Lexing.compare_pos start loc.loc_end + and b = Lexing.compare_pos stop loc.loc_start in + a <= 0 && b >= 0 || a >= 0 && b <= 0 + let union l1 l2 = if l1 = Location.none then l2 else if l2 = Location.none then l1 diff --git a/ocamlmerlin_mlx/ocaml/parsing/location_aux.mli b/ocamlmerlin_mlx/ocaml/parsing/location_aux.mli index 7d99d36..b3804d1 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/location_aux.mli +++ b/ocamlmerlin_mlx/ocaml/parsing/location_aux.mli @@ -42,6 +42,14 @@ val union : t -> t -> t (** Like location_union, but keep loc_ghost'ness of first argument *) val extend : t -> t -> t +(** [included ~into:parent child] returns [true] if [child] is included + in [parent]. Otherwise returns [false]. *) +val included : into:t -> t -> bool + +(** [overlap_with_range (pos_start, pos_end) loc] returns [true] if + [loc] overlap with the range defined by [pos_start] and [pos_end]. *) +val overlap_with_range : (Lexing.position * Lexing.position) -> t -> bool + (** Filter valid errors, log invalid ones *) val prepare_errors : exn list -> Location.error list diff --git a/ocamlmerlin_mlx/ocaml/parsing/longident.ml b/ocamlmerlin_mlx/ocaml/parsing/longident.ml index 837c6a9..03540e5 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/longident.ml +++ b/ocamlmerlin_mlx/ocaml/parsing/longident.ml @@ -12,27 +12,46 @@ (* special exception on linking described in the file LICENSE. *) (* *) (**************************************************************************) +open Location type t = Lident of string - | Ldot of t * string - | Lapply of t * t + | Ldot of t loc * string loc + | Lapply of t loc * t loc + + +let rec same t t' = + t == t' + || match t, t' with + | Lident s, Lident s' -> + String.equal s s' + | Ldot ({ txt = t; _ }, { txt = s; _ }), + Ldot ({ txt = t'; _ }, { txt = s'; _ }) -> + if String.equal s s' then + same t t' + else + false + | Lapply ({ txt = tl; _ }, { txt = tr; _ }), + Lapply ({ txt = tl'; _ }, { txt = tr'; _ }) -> + same tl tl' && same tr tr' + | _, _ -> false + let rec flat accu = function Lident s -> s :: accu - | Ldot(lid, s) -> flat (s :: accu) lid + | Ldot({ txt = lid; _ }, { txt = s; _ }) -> flat (s :: accu) lid | Lapply(_, _) -> Misc.fatal_error "Longident.flat" let flatten lid = flat [] lid let rec head = function Lident s -> s - | Ldot(lid, _) -> head lid + | Ldot(lid, _) -> head lid.txt | Lapply(_, _) -> assert false let last = function Lident s -> s - | Ldot(_, s) -> s + | Ldot(_, s) -> s.txt | Lapply(_, _) -> Misc.fatal_error "Longident.last" @@ -46,7 +65,9 @@ let rec split_at_dots s pos = let unflatten l = match l with | [] -> None - | hd :: tl -> Some (List.fold_left (fun p s -> Ldot(p, s)) (Lident hd) tl) + | hd :: tl -> + Some (List.fold_left (fun p s -> Ldot(mknoloc p, mknoloc s)) + (Lident hd) tl) let parse s = match unflatten (split_at_dots s 0) with @@ -56,16 +77,16 @@ let parse s = let keep_suffix = let rec aux = function - | Lident str -> + | { txt = Lident str; _ } as t -> if String.uncapitalize_ascii str <> str then - Some (Lident str, false) + Some (t, false) else None - | Ldot (t, str) -> - if String.uncapitalize_ascii str <> str then + | { txt = Ldot (t, str); loc } -> + if String.uncapitalize_ascii str.txt <> str.txt then match aux t with - | None -> Some (Lident str, true) - | Some (t, is_label) -> Some (Ldot (t, str), is_label) + | None -> Some ({ txt = Lident str.txt; loc = str.loc }, true) + | Some (t, is_label) -> Some ({ txt = Ldot (t, str); loc }, is_label) else None | t -> Some (t, false) (* Can be improved... *) @@ -74,7 +95,7 @@ let keep_suffix = | Lident s -> Lident s, false | Ldot (t, s) -> begin match aux t with - | None -> Lident s, true + | None -> Lident s.txt, true | Some (t, is_label) -> Ldot (t, s), is_label end | otherwise -> otherwise, false diff --git a/ocamlmerlin_mlx/ocaml/parsing/longident.mli b/ocamlmerlin_mlx/ocaml/parsing/longident.mli index 72c5964..9d8f4fd 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/longident.mli +++ b/ocamlmerlin_mlx/ocaml/parsing/longident.mli @@ -23,10 +23,16 @@ *) +open Location + type t = Lident of string - | Ldot of t * string - | Lapply of t * t + | Ldot of t loc * string loc + | Lapply of t loc * t loc + +(** [same t t'] compares the longidents [t] and [t'] without taking locations + into account. *) +val same: t -> t -> bool val flatten: t -> string list val unflatten: string list -> t option diff --git a/ocamlmerlin_mlx/ocaml/parsing/parsetree.mli b/ocamlmerlin_mlx/ocaml/parsing/parsetree.mli index 7bb1313..fcf5287 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/parsetree.mli +++ b/ocamlmerlin_mlx/ocaml/parsing/parsetree.mli @@ -22,7 +22,12 @@ open Asttypes -type constant = +type constant = { + pconst_desc : constant_desc; + pconst_loc : Location.t; +} + +and constant_desc = | Pconst_integer of string * char option (** Integer constants such as [3] [3l] [3L] [3n]. @@ -96,9 +101,14 @@ and core_type_desc = - [?l:T1 -> T2] when [lbl] is {{!Asttypes.arg_label.Optional}[Optional]}. *) - | Ptyp_tuple of core_type list - (** [Ptyp_tuple([T1 ; ... ; Tn])] - represents a product type [T1 * ... * Tn]. + | Ptyp_tuple of (string option * core_type) list + (** [Ptyp_tuple(tl)] represents a product type: + - [T1 * ... * Tn] + when [tl] is [(None, T1); ...; (None, Tn)] + - [L1:T1 * ... * Ln:Tn] + when [tl] is [(Some L1, T1); ...; (Some Ln, Tn)] + - A mix, e.g., [L1:T1 * T2] + when [tl] is [(Some L1, T1); (None, T2)] Invariant: [n >= 2]. *) @@ -121,7 +131,7 @@ and core_type_desc = - [T #tconstr] when [l=[T]], - [(T1, ..., Tn) #tconstr] when [l=[T1 ; ... ; Tn]]. *) - | Ptyp_alias of core_type * string (** [T as 'a]. *) + | Ptyp_alias of core_type * string loc (** [T as 'a]. *) | Ptyp_variant of row_field list * closed_flag * label list option (** [Ptyp_variant([`A;`B], flag, labels)] represents: - [[ `A|`B ]] @@ -166,12 +176,19 @@ and core_type_desc = {!value_description}. *) | Ptyp_package of package_type (** [(module S)]. *) + | Ptyp_open of Longident.t loc * core_type (** [M.(T)] *) | Ptyp_extension of extension (** [[%id]]. *) -and package_type = Longident.t loc * (Longident.t loc * core_type) list +and package_type = + { + ppt_path: Longident.t loc; + ppt_cstrs: (Longident.t loc * core_type) list; + ppt_loc: Location.t; + ppt_attrs: attributes; + } (** As {!package_type} typed values: - - [(S, [])] represents [(module S)], - - [(S, [(t1, T1) ; ... ; (tn, Tn)])] + - [{ppt_path: S; ppt_cstrs: []}] represents [(module S)], + - [{ppt_path: S; ppt_cstrs: [(t1, T1) ; ... ; (tn, Tn)]}] represents [(module S with type t1 = T1 and ... and tn = Tn)]. *) @@ -228,11 +245,22 @@ and pattern_desc = Other forms of interval are recognized by the parser but rejected by the type-checker. *) - | Ppat_tuple of pattern list - (** Patterns [(P1, ..., Pn)]. - - Invariant: [n >= 2] - *) + | Ppat_tuple of (string option * pattern) list * Asttypes.closed_flag + (** [Ppat_tuple(pl, Closed)] represents + - [(P1, ..., Pn)] + when [pl] is [(None, P1); ...; (None, Pn)] + - [(~L1:P1, ..., ~Ln:Pn)] + when [pl] is [(Some L1, P1); ...; (Some Ln, Pn)] + - A mix, e.g. [(~L1:P1, P2)] + when [pl] is [(Some L1, P1); (None, P2)] + + [Ppat_tuple(pl, Open)] is similar, but indicates the pattern + additionally ends in a [..]. + + Invariant: + - If Closed, [n >= 2]. + - If Open, [n >= 1]. + *) | Ppat_construct of Longident.t loc * (string loc list * pattern) option (** [Ppat_construct(C, args)] represents: - [C] when [args] is [None], @@ -269,6 +297,7 @@ and pattern_desc = [Ppat_constraint(Ppat_unpack(Some "P"), Ptyp_package S)] *) | Ppat_exception of pattern (** Pattern [exception P] *) + | Ppat_effect of pattern * pattern (* Pattern [effect P P] *) | Ppat_extension of extension (** Pattern [[%id]] *) | Ppat_open of Longident.t loc * pattern (** Pattern [M.(P)] *) @@ -296,30 +325,22 @@ and expression_desc = - [let rec P1 = E1 and ... and Pn = EN in E] when [flag] is {{!Asttypes.rec_flag.Recursive}[Recursive]}. *) - | Pexp_function of case list (** [function P1 -> E1 | ... | Pn -> En] *) - | Pexp_fun of arg_label * expression option * pattern * expression - (** [Pexp_fun(lbl, exp0, P, E1)] represents: - - [fun P -> E1] - when [lbl] is {{!Asttypes.arg_label.Nolabel}[Nolabel]} - and [exp0] is [None] - - [fun ~l:P -> E1] - when [lbl] is {{!Asttypes.arg_label.Labelled}[Labelled l]} - and [exp0] is [None] - - [fun ?l:P -> E1] - when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} - and [exp0] is [None] - - [fun ?l:(P = E0) -> E1] - when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} - and [exp0] is [Some E0] - - Notes: - - If [E0] is provided, only - {{!Asttypes.arg_label.Optional}[Optional]} is allowed. - - [fun P1 P2 .. Pn -> E1] is represented as nested - {{!expression_desc.Pexp_fun}[Pexp_fun]}. - - [let f P = E] is represented using - {{!expression_desc.Pexp_fun}[Pexp_fun]}. - *) + | Pexp_function of + function_param list * type_constraint option * function_body + (** [Pexp_function ([P1; ...; Pn], C, body)] represents any construct + involving [fun] or [function], including: + - [fun P1 ... Pn -> E] + when [body = Pfunction_body E] + - [fun P1 ... Pn -> function p1 -> e1 | ... | pm -> em] + when [body = Pfunction_cases [ p1 -> e1; ...; pm -> em ]] + + [C] represents a type constraint or coercion placed immediately before the + arrow, e.g. [fun P1 ... Pn : ty -> ...] when [C = Some (Pconstraint ty)]. + + A function must have parameters: in [Pexp_function (params, _, body)], + if [params] does not contain a [Pparam_val _], [body] must be + [Pfunction_cases _]. + *) | Pexp_apply of expression * (arg_label * expression) list (** [Pexp_apply(E0, [(l1, E1) ; ... ; (ln, En)])] represents [E0 ~l1:E1 ... ~ln:En] @@ -335,8 +356,14 @@ and expression_desc = (** [match E0 with P1 -> E1 | ... | Pn -> En] *) | Pexp_try of expression * case list (** [try E0 with P1 -> E1 | ... | Pn -> En] *) - | Pexp_tuple of expression list - (** Expressions [(E1, ..., En)] + | Pexp_tuple of (string option * expression) list + (** [Pexp_tuple(el)] represents + - [(E1, ..., En)] + when [el] is [(None, E1); ...; (None, En)] + - [(~L1:E1, ..., ~Ln:En)] + when [el] is [(Some L1, E1); ...; (Some Ln, En)] + - A mix, e.g., [(~L1:E1, E2)] + when [el] is [(Some L1, E1); (None, E2)] Invariant: [n >= 2] *) @@ -402,11 +429,8 @@ and expression_desc = values). *) | Pexp_object of class_structure (** [object ... end] *) | Pexp_newtype of string loc * expression (** [fun (type t) -> E] *) - | Pexp_pack of module_expr - (** [(module ME)]. - - [(module ME : S)] is represented as - [Pexp_constraint(Pexp_pack ME, Ptyp_package S)] *) + | Pexp_pack of module_expr * package_type option + (** [(module ME)] or [(module ME : S)]. *) | Pexp_open of open_declaration * expression (** - [M.(E)] - [let open M in E] @@ -440,6 +464,66 @@ and binding_op = pbop_loc : Location.t; } +and function_param_desc = + | Pparam_val of arg_label * expression option * pattern + (** [Pparam_val (lbl, exp0, P)] represents the parameter: + - [P] + when [lbl] is {{!Asttypes.arg_label.Nolabel}[Nolabel]} + and [exp0] is [None] + - [~l:P] + when [lbl] is {{!Asttypes.arg_label.Labelled}[Labelled l]} + and [exp0] is [None] + - [?l:P] + when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} + and [exp0] is [None] + - [?l:(P = E0)] + when [lbl] is {{!Asttypes.arg_label.Optional}[Optional l]} + and [exp0] is [Some E0] + + Note: If [E0] is provided, only + {{!Asttypes.arg_label.Optional}[Optional]} is allowed. + *) + | Pparam_newtype of string loc + (** [Pparam_newtype x] represents the parameter [(type x)]. + [x] carries the location of the identifier, whereas the [pparam_loc] + on the enclosing [function_param] node is the location of the [(type x)] + as a whole. + + Multiple parameters [(type a b c)] are represented as multiple + [Pparam_newtype] nodes, let's say: + + {[ [ { pparam_kind = Pparam_newtype a; pparam_loc = loc1 }; + { pparam_kind = Pparam_newtype b; pparam_loc = loc2 }; + { pparam_kind = Pparam_newtype c; pparam_loc = loc3 }; + ] + ]} + + Here, the first loc [loc1] is the location of [(type a b c)], and the + subsequent locs [loc2] and [loc3] are the same as [loc1], except marked as + ghost locations. The locations on [a], [b], [c], correspond to the + variables [a], [b], and [c] in the source code. + *) + +and function_param = + { pparam_loc : Location.t; + pparam_desc : function_param_desc; + } + +and function_body = + | Pfunction_body of expression + | Pfunction_cases of case list * Location.t * attributes + (** In [Pfunction_cases (_, loc, attrs)], the location extends from the + start of the [function] keyword to the end of the last case. The compiler + will only use typechecking-related attributes from [attrs], e.g. enabling + or disabling a warning. + *) +(** See the comment on {{!expression_desc.Pexp_function}[Pexp_function]}. *) + +and type_constraint = + | Pconstraint of core_type + | Pcoerce of core_type option * core_type +(** See the comment on {{!expression_desc.Pexp_function}[Pexp_function]}. *) + (** {2 Value descriptions} *) and value_description = diff --git a/ocamlmerlin_mlx/ocaml/parsing/pprintast.ml b/ocamlmerlin_mlx/ocaml/parsing/pprintast.ml index ce6fc4f..8ba460e 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/pprintast.ml +++ b/ocamlmerlin_mlx/ocaml/parsing/pprintast.ml @@ -81,35 +81,161 @@ let last_is c str = let first_is_in cs str = str <> "" && List.mem str.[0] cs +(** The OCaml grammar generates [longident]s from five different rules: + - module longident (a sequence of uppercase identifiers [A.B.C]) + - constructor longident, either + - a module [longident] + - [[]], [()], [true], [false] + - an optional module [longident] followed by [(::)] ([A.B.(::)]) + - class longident, an optional module [longident] followed by a lowercase + identifier. + - value longident, an optional module [longident] followed by either: + - a lowercase identifier ([A.x]) + - an operator (and in particular the [mod] keyword), ([A.(+), B.(mod)]) + - type [longident]: a tree of applications and projections of + uppercase identifiers followed by a projection ending with + a lowercase identifier (for ordinary types), or any identifier + (for module types) (e.g [A.B(C.D(E.F).K)(G).X.Y.t]) +All these [longident]s share a common core and optionally add some extensions. +Unfortunately, these extensions intersect while having different escaping +and parentheses rules depending on the kind of [longident]: + - [true] or [false] can be either constructor [longident]s, + or value, type or class [longident]s using the raw identifier syntax. + - [mod] can be either an operator value [longident], or a class or type + [longident] using the raw identifier syntax. +Thus in order to print correctly [longident]s, we need to keep track of their +kind using the context in which they appear. +*) +type longindent_kind = + | Constr (** variant constructors *) + | Type (** core types, module types, class types, and classes *) + | Other (** values and modules *) + (* which identifiers are in fact operators needing parentheses *) -let needs_parens txt = - let fix = fixity_of_string txt in - is_infix fix - || is_mixfix fix - || is_kwdop fix - || first_is_in prefix_symbols txt +let needs_parens ~kind txt = + match kind with + | Type -> false + | Constr | Other -> + let fix = fixity_of_string txt in + is_infix fix + || is_mixfix fix + || is_kwdop fix + || first_is_in prefix_symbols txt (* some infixes need spaces around parens to avoid clashes with comment syntax *) let needs_spaces txt = first_is '*' txt || last_is '*' txt -let string_loc ppf x = fprintf ppf "%s" x.txt +let tyvar_of_name s = + if String.length s >= 2 && s.[1] = '\'' then + (* without the space, this would be parsed as + a character literal *) + "' " ^ s + else if Lexer.is_keyword s then + "'\\#" ^ s + else if String.equal s "_" then + s + else + "'" ^ s + +module Doc = struct +(* Turn an arbitrary variable name into a valid OCaml identifier by adding \# + in case it is a keyword, or parenthesis when it is an infix or prefix + operator. *) + let ident_of_name ~kind ppf txt = + let format : (_, _, _) format = + if Lexer.is_keyword txt then begin + match kind, txt with + | Constr, ("true"|"false") -> "%s" + | _ -> "\\#%s" + end + else if not (needs_parens ~kind txt) then "%s" + else if needs_spaces txt then "(@;%s@;)" + else "(%s)" + in Format_doc.fprintf ppf format txt + + let protect_longident ~kind ppf print_longident longprefix txt = + if not (needs_parens ~kind txt) then + Format_doc.fprintf ppf "%a.%a" + print_longident longprefix + (ident_of_name ~kind) txt + else if needs_spaces txt then + Format_doc.fprintf ppf "%a.(@;%s@;)" print_longident longprefix txt + else + Format_doc.fprintf ppf "%a.(%s)" print_longident longprefix txt + + let rec any_longident ~kind f = function + | Lident s -> ident_of_name ~kind f s + | Ldot(y,s) -> + protect_longident ~kind f (any_longident ~kind:Other) y.txt s.txt + | Lapply (y,s) -> + Format_doc.fprintf f "%a(%a)" + (any_longident ~kind:Other) y.txt + (any_longident ~kind:Other) s.txt + + let value_longident ppf l = any_longident ~kind:Other ppf l + let longident = value_longident + let constr ppf l = any_longident ~kind:Constr ppf l + let type_longident ppf l = any_longident ~kind:Type ppf l + + let tyvar ppf s = + Format_doc.fprintf ppf "%s" (tyvar_of_name s) + + (* Expressions are considered nominal if they can be used as the subject of a + sentence or action. In practice, we consider that an expression is nominal + if they satisfy one of: + - Similar to an identifier: words separated by '.' or '#'. + - Do not contain spaces when printed. + - Is a constant that is short enough. + *) + let nominal_exp t = + let open Format_doc.Doc in + let longident ?(is_constr=false) l = + let kind= if is_constr then Constr else Other in + Format_doc.doc_printer (any_longident ~kind) l.Location.txt in + let rec nominal_exp doc exp = + match exp.pexp_desc with + | _ when exp.pexp_attributes <> [] -> None + | Pexp_ident l -> + Some (longident l doc) + | Pexp_variant (lbl, None) -> + Some (printf "`%s" lbl doc) + | Pexp_construct (l, None) -> + Some (longident ~is_constr:true l doc) + | Pexp_field (parent, lbl) -> + Option.map + (printf ".%t" (longident lbl)) + (nominal_exp doc parent) + | Pexp_send (parent, meth) -> + Option.map + (printf "#%s" meth.txt) + (nominal_exp doc parent) + (* String constants are syntactically too complex. For example, the + quotes conflict with the 'inline_code' style and they might contain + spaces. *) + | Pexp_constant { pconst_desc = Pconst_string _; _ } -> None + (* Char, integer and float constants are nominal. *) + | Pexp_constant { pconst_desc = Pconst_char c; _ } -> + Some (msg "%C" c) + | Pexp_constant + { pconst_desc = Pconst_integer (cst, suf) | Pconst_float (cst, suf); + _ } -> + Some (msg "%s%t" cst (option char suf)) + | _ -> None + in + nominal_exp empty t +end + +let value_longident ppf l = Format_doc.compat Doc.value_longident ppf l +let type_longident ppf l = Format_doc.compat Doc.type_longident ppf l + +let ident_of_name ppf i = + Format_doc.compat (Doc.ident_of_name ~kind:Other) ppf i -(* add parentheses to binders when they are in fact infix or prefix operators *) -let protect_ident ppf txt = - let format : (_, _, _) format = - if not (needs_parens txt) then "%s" - else if needs_spaces txt then "(@;%s@;)" - else "(%s)" - in fprintf ppf format txt +let constr ppf l = Format_doc.compat Doc.constr ppf l -let protect_longident ppf print_longident longprefix txt = - let format : (_, _, _) format = - if not (needs_parens txt) then "%a.%s" - else if needs_spaces txt then "%a.(@;%s@;)" - else "%a.(%s)" in - fprintf ppf format print_longident longprefix txt +let ident_of_name_loc ppf s = ident_of_name ppf s.txt type space_formatter = (unit, Format.formatter, unit) format @@ -122,6 +248,7 @@ let type_variance = function | NoVariance -> "" | Covariant -> "+" | Contravariant -> "-" + | Bivariant -> "+-" let type_injectivity = function | NoInjectivity -> "" @@ -133,12 +260,16 @@ type construct = | `nil | `normal | `simple of Longident.t - | `tuple ] + | `tuple + | `btrue + | `bfalse ] let view_expr x = match x.pexp_desc with - | Pexp_construct ( {txt= Lident "()"; _},_) -> `tuple - | Pexp_construct ( {txt= Lident "[]";_},_) -> `nil + | Pexp_construct ( {txt= Lident "()"; _},None) -> `tuple + | Pexp_construct ( {txt= Lident "true"; _},None) -> `btrue + | Pexp_construct ( {txt= Lident "false"; _},None) -> `bfalse + | Pexp_construct ( {txt= Lident "[]";_},None) -> `nil | Pexp_construct ( {txt= Lident"::";_},Some _) -> let rec loop exp acc = match exp with | {pexp_desc=Pexp_construct ({txt=Lident "[]";_},_); @@ -146,7 +277,7 @@ let view_expr x = (List.rev acc,true) | {pexp_desc= Pexp_construct ({txt=Lident "::";_}, - Some ({pexp_desc= Pexp_tuple([e1;e2]); + Some ({pexp_desc= Pexp_tuple([None, e1; None, e2]); pexp_attributes = []})); pexp_attributes = []} -> @@ -160,7 +291,7 @@ let view_expr x = | _ -> `normal let is_simple_construct :construct -> bool = function - | `nil | `tuple | `list _ | `simple _ -> true + | `nil | `tuple | `list _ | `simple _ | `btrue | `bfalse -> true | `cons _ | `normal -> false let pp = fprintf @@ -169,12 +300,14 @@ type ctxt = { pipe : bool; semi : bool; ifthenelse : bool; + functionrhs : bool; } -let reset_ctxt = { pipe=false; semi=false; ifthenelse=false } +let reset_ctxt = { pipe=false; semi=false; ifthenelse=false; functionrhs=false } let under_pipe ctxt = { ctxt with pipe=true } let under_semi ctxt = { ctxt with semi=true } let under_ifthenelse ctxt = { ctxt with ifthenelse=true } +let under_functionrhs ctxt = { ctxt with functionrhs = true } (* let reset_semi ctxt = { ctxt with semi=false } let reset_ifthenelse ctxt = { ctxt with ifthenelse=false } @@ -215,15 +348,10 @@ let paren: 'a . ?first:space_formatter -> ?last:space_formatter -> if b then (pp f "("; pp f first; fu f x; pp f last; pp f ")") else fu f x -let rec longident f = function - | Lident s -> protect_ident f s - | Ldot(y,s) -> protect_longident f longident y s - | Lapply (y,s) -> - pp f "%a(%a)" longident y longident s +let with_loc pr ppf x = pr ppf x.txt +let value_longident_loc = with_loc value_longident -let longident_loc f x = pp f "%a" longident x.txt - -let constant f = function +let constant_desc f = function | Pconst_char i -> pp f "%C" i | Pconst_string (i, _, None) -> @@ -239,6 +367,8 @@ let constant f = function | Pconst_float (i, Some m) -> paren (first_is '-' i) (fun f (i,m) -> pp f "%s%c" i m) f (i,m) +let constant f const = constant_desc f const.pconst_desc + (* trailing space*) let mutable_flag f = function | Immutable -> () @@ -267,16 +397,12 @@ let iter_loc f ctxt {txt; loc = _} = f ctxt txt let constant_string f s = pp f "%S" s -let tyvar ppf s = - if String.length s >= 2 && s.[1] = '\'' then - (* without the space, this would be parsed as - a character literal *) - Format.fprintf ppf "' %s" s - else - Format.fprintf ppf "'%s" s + + +let tyvar ppf v = Format_doc.compat Doc.tyvar ppf v let tyvar_loc f str = tyvar f str.txt -let string_quot f x = pp f "`%s" x +let string_quot f x = pp f "`%a" ident_of_name x (* c ['a,'b] *) let rec class_params_def ctxt f = function @@ -288,8 +414,8 @@ let rec class_params_def ctxt f = function and type_with_label ctxt f (label, c) = match label with | Nolabel -> core_type1 ctxt f c (* otherwise parenthesize *) - | Labelled s -> pp f "%s:%a" s (core_type1 ctxt) c - | Optional s -> pp f "?%s:%a" s (core_type1 ctxt) c + | Labelled s -> pp f "%a:%a" ident_of_name s (core_type1 ctxt) c + | Optional s -> pp f "?%a:%a" ident_of_name s (core_type1 ctxt) c and core_type ctxt f x = if x.ptyp_attributes <> [] then begin @@ -301,7 +427,7 @@ and core_type ctxt f x = pp f "@[<2>%a@;->@;%a@]" (* FIXME remove parens later *) (type_with_label ctxt) (l,ct1) (core_type ctxt) ct2 | Ptyp_alias (ct, s) -> - pp f "@[<2>%a@;as@;%a@]" (core_type1 ctxt) ct tyvar s + pp f "@[<2>%a@;as@;%a@]" (core_type1 ctxt) ct tyvar s.txt | Ptyp_poly ([], ct) -> core_type ctxt f ct | Ptyp_poly (sl, ct) -> @@ -314,19 +440,27 @@ and core_type ctxt f x = sl (core_type ctxt) ct | _ -> pp f "@[<2>%a@]" (core_type1 ctxt) x +and tuple_type_component ctxt f (label, ty) = + begin match label with + | None -> () + | Some s -> pp f "%s:" s + end; + core_type1 ctxt f ty + and core_type1 ctxt f x = if x.ptyp_attributes <> [] then core_type ctxt f x else match x.ptyp_desc with | Ptyp_any -> pp f "_"; | Ptyp_var s -> tyvar f s; - | Ptyp_tuple l -> pp f "(%a)" (list (core_type1 ctxt) ~sep:"@;*@;") l + | Ptyp_tuple l -> + pp f "(%a)" (list (tuple_type_component ctxt) ~sep:"@;*@;") l | Ptyp_constr (li, l) -> pp f (* "%a%a@;" *) "%a%a" (fun f l -> match l with |[] -> () |[x]-> pp f "%a@;" (core_type1 ctxt) x | _ -> list ~first:"(" ~last:")@;" (core_type ctxt) ~sep:",@;" f l) - l longident_loc li + l (with_loc type_longident) li | Ptyp_variant (l, closed, low) -> let first_is_inherit = match l with | {Parsetree.prf_desc = Rinherit _}::_ -> true @@ -362,7 +496,7 @@ and core_type1 ctxt f x = let core_field_type f x = match x.pof_desc with | Otag (l, ct) -> (* Cf #7200 *) - pp f "@[%s: %a@ %a@ @]" l.txt + pp f "@[%a: %a@ %a@ @]" ident_of_name l.txt (core_type ctxt) ct (attributes ctxt) x.pof_attributes | Oinherit ct -> pp f "@[%a@ @]" (core_type ctxt) ct @@ -380,17 +514,25 @@ and core_type1 ctxt f x = | Ptyp_class (li, l) -> (*FIXME*) pp f "@[%a#%a@]" (list (core_type ctxt) ~sep:"," ~first:"(" ~last:")") l - longident_loc li - | Ptyp_package (lid, cstrs) -> - let aux f (s, ct) = - pp f "type %a@ =@ %a" longident_loc s (core_type ctxt) ct in - (match cstrs with - |[] -> pp f "@[(module@ %a)@]" longident_loc lid - |_ -> - pp f "@[(module@ %a@ with@ %a)@]" longident_loc lid - (list aux ~sep:"@ and@ ") cstrs) + (with_loc type_longident) li + | Ptyp_package pck_ty -> + pp f "@[(module@ %a)@]" (package_type ctxt) pck_ty + | Ptyp_open(li, ct) -> + pp f "@[%a.(%a)@]" value_longident_loc li (core_type ctxt) ct | Ptyp_extension e -> extension ctxt f e - | _ -> paren true (core_type ctxt) f x + | (Ptyp_arrow _ | Ptyp_alias _ | Ptyp_poly _) -> + paren true (core_type ctxt) f x + +and package_type ctxt f ptyp = + let aux f (s, ct) = + pp f "type %a@ =@ %a" (with_loc type_longident) s (core_type ctxt) ct + in + match ptyp.ppt_cstrs with + | [] -> with_loc type_longident f ptyp.ppt_path + | _ -> + pp f "%a@ with@ %a" + (with_loc type_longident) ptyp.ppt_path + (list aux ~sep:"@ and@ ") ptyp.ppt_cstrs (********************pattern********************) (* be cautious when use [pattern], [pattern1] is preferred *) @@ -401,7 +543,7 @@ and pattern ctxt f x = end else match x.ppat_desc with | Ppat_alias (p, s) -> - pp f "@[<2>%a@;as@;%a@]" (pattern ctxt) p protect_ident s.txt + pp f "@[<2>%a@;as@;%a@]" (pattern ctxt) p ident_of_name s.txt | _ -> pattern_or ctxt f x and pattern_or ctxt f x = @@ -417,45 +559,59 @@ and pattern_or ctxt f x = pp f "@[%a@]" (list ~sep:"@ | " (pattern1 ctxt)) orpats and pattern1 ctxt (f:Format.formatter) (x:pattern) : unit = - let rec pattern_list_helper f = function - | {ppat_desc = - Ppat_construct - ({ txt = Lident("::") ;_}, - Some ([], {ppat_desc = Ppat_tuple([pat1; pat2]);_})); - ppat_attributes = []} - - -> - pp f "%a::%a" (simple_pattern ctxt) pat1 pattern_list_helper pat2 (*RA*) - | p -> pattern1 ctxt f p - in if x.ppat_attributes <> [] then pattern ctxt f x else match x.ppat_desc with | Ppat_variant (l, Some p) -> - pp f "@[<2>`%s@;%a@]" l (simple_pattern ctxt) p - | Ppat_construct (({txt=Lident("()"|"[]");_}), _) -> + pp f "@[<2>`%a@;%a@]" ident_of_name l (simple_pattern ctxt) p + | Ppat_construct (({txt=Lident("()"|"[]"|"true"|"false");_}), _) -> simple_pattern ctxt f x - | Ppat_construct (({txt;_} as li), po) -> + | Ppat_construct ({txt=Lident("::");_}, Some ([], + {ppat_desc = Ppat_tuple([None, pat1; None, pat2], Closed);_})) -> + (* Right associative*) + pp f "%a::%a" (simple_pattern ctxt) pat1 (pattern1 ctxt) pat2 + | Ppat_construct (li, po) -> (* FIXME The third field always false *) - if txt = Lident "::" then - pp f "%a" pattern_list_helper x - else - (match po with - | Some ([], x) -> - pp f "%a@;%a" longident_loc li (simple_pattern ctxt) x - | Some (vl, x) -> - pp f "%a@ (type %a)@;%a" longident_loc li - (list ~sep:"@ " string_loc) vl - (simple_pattern ctxt) x - | None -> pp f "%a" longident_loc li) + (match po with + | Some ([], x) -> + (* [true] and [false] are handled above *) + pp f "%a@;%a" value_longident_loc li (simple_pattern ctxt) x + | Some (vl, x) -> + pp f "%a@ (type %a)@;%a" value_longident_loc li + (list ~sep:"@ " ident_of_name_loc) vl + (simple_pattern ctxt) x + | None -> pp f "%a" value_longident_loc li) | _ -> simple_pattern ctxt f x +and tuple_pattern_component ctxt (f:Format.formatter) (label, x) : unit = + let simple_name = match x with + | {ppat_desc = Ppat_var { txt=s; _ }; ppat_attributes = []; _} -> Some s + | _ -> None + in + match label, simple_name with + (* Labeled component can be represented with pun *) + | Some lbl, Some simple_name when String.equal simple_name lbl -> + pp f "~%s" lbl + (* Labeled component general case *) + | Some lbl, _ -> pp f "~%s:%a" lbl (pattern1 ctxt) x + (* Unlabeled component *) + | None, _ -> pattern1 ctxt f x + +and tuple_pattern ctxt f l closed = + let closed_flag ppf = function + | Closed -> () + | Open -> pp ppf ",@;.." + in + pp f "@[<1>(%a%a)@]" + (list ~sep:",@;" (tuple_pattern_component ctxt)) l + closed_flag closed + 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 - | Ppat_construct (({txt=Lident ("()"|"[]" as x);_}), None) -> + | Ppat_construct (({txt=Lident ("()"|"[]"|"true"|"false" as x);_}), None) -> pp f "%s" x | Ppat_any -> pp f "_"; - | Ppat_var ({txt = txt;_}) -> protect_ident f txt + | Ppat_var ({txt = txt;_}) -> ident_of_name f txt | Ppat_array l -> pp f "@[<2>[|%a|]@]" (list (pattern1 ctxt) ~sep:";") l | Ppat_unpack { txt = None } -> @@ -463,7 +619,7 @@ and simple_pattern ctxt (f:Format.formatter) (x:pattern) : unit = | Ppat_unpack { txt = Some s } -> pp f "(module@ %s)@ " s | Ppat_type li -> - pp f "#%a" longident_loc li + pp f "#%a" (with_loc type_longident) li | Ppat_record (l, closed) -> let longident_x_pattern f (li, p) = match (li,p) with @@ -471,9 +627,9 @@ and simple_pattern ctxt (f:Format.formatter) (x:pattern) : unit = {ppat_desc=Ppat_var {txt;_}; ppat_attributes=[]; _}) when s = txt -> - pp f "@[<2>%a@]" longident_loc li + pp f "@[<2>%a@]" value_longident_loc li | _ -> - pp f "@[<2>%a@;=@;%a@]" longident_loc li (pattern1 ctxt) p + pp f "@[<2>%a@;=@;%a@]" value_longident_loc li (pattern1 ctxt) p in begin match closed with | Closed -> @@ -481,25 +637,27 @@ and simple_pattern ctxt (f:Format.formatter) (x:pattern) : unit = | _ -> pp f "@[<2>{@;%a;_}@]" (list longident_x_pattern ~sep:";@;") l end - | Ppat_tuple l -> - pp f "@[<1>(%a)@]" (list ~sep:",@;" (pattern1 ctxt)) l (* level1*) + | Ppat_tuple (l,c) -> tuple_pattern ctxt f l c | Ppat_constant (c) -> pp f "%a" constant c | Ppat_interval (c1, c2) -> pp f "%a..%a" constant c1 constant c2 - | Ppat_variant (l,None) -> pp f "`%s" l + | Ppat_variant (l,None) -> pp f "`%a" ident_of_name l | Ppat_constraint (p, ct) -> pp f "@[<2>(%a@;:@;%a)@]" (pattern1 ctxt) p (core_type ctxt) ct | Ppat_lazy p -> pp f "@[<2>(lazy@;%a)@]" (simple_pattern ctxt) p | Ppat_exception p -> pp f "@[<2>exception@;%a@]" (pattern1 ctxt) p + | Ppat_effect(p1, p2) -> + pp f "@[<2>effect@;%a, @;%a@]" (pattern1 ctxt) p1 (pattern1 ctxt) p2 | Ppat_extension e -> extension ctxt f e | Ppat_open (lid, p) -> let with_paren = match p.ppat_desc with | Ppat_array _ | Ppat_record _ - | Ppat_construct (({txt=Lident ("()"|"[]");_}), None) -> false + | Ppat_construct (({txt=Lident ("()"|"[]"|"true"|"false");_}), None) -> + false | _ -> true in - pp f "@[<2>%a.%a @]" longident_loc lid + pp f "@[<2>%a.%a @]" value_longident_loc lid (paren with_paren @@ pattern1 ctxt) p | _ -> paren true (pattern ctxt) f x @@ -513,20 +671,21 @@ and label_exp ctxt f (l,opt,p) = | {ppat_desc = Ppat_var {txt;_}; ppat_attributes = []} when txt = rest -> (match opt with - | Some o -> pp f "?(%s=@;%a)@;" rest (expression ctxt) o - | None -> pp f "?%s@ " rest) + | Some o -> + pp f "?(%a=@;%a)@;" ident_of_name rest (expression ctxt) o + | None -> pp f "?%a@ " ident_of_name rest) | _ -> (match opt with | Some o -> - pp f "?%s:(%a=@;%a)@;" - rest (pattern1 ctxt) p (expression ctxt) o - | None -> pp f "?%s:%a@;" rest (simple_pattern ctxt) p) + pp f "?%a:(%a=@;%a)@;" + ident_of_name rest (pattern1 ctxt) p (expression ctxt) o + | None -> pp f "?%a:%a@;" ident_of_name rest (simple_pattern ctxt) p) end | Labelled l -> match p with | {ppat_desc = Ppat_var {txt;_}; ppat_attributes = []} when txt = l -> - pp f "~%s@;" l - | _ -> pp f "~%s:%a@;" l (simple_pattern ctxt) p + pp f "~%a@;" ident_of_name l + | _ -> pp f "~%a:%a@;" ident_of_name l (simple_pattern ctxt) p and sugar_expr ctxt f e = if e.pexp_attributes <> [] then false @@ -538,7 +697,7 @@ and sugar_expr ctxt f e = rem_args = let print_path ppf = function | None -> () - | Some m -> pp ppf ".%a" longident m in + | Some m -> pp ppf ".%a" value_longident m in match assign, rem_args with | false, [] -> pp f "@[%a%a%s%a%s@]" @@ -553,7 +712,8 @@ and sugar_expr ctxt f e = match id, List.map snd args with | Lident "!", [e] -> pp f "@[!%a@]" (simple_expr ctxt) e; true - | Ldot (path, ("get"|"set" as func)), a :: other_args -> begin + | Ldot ({txt=path;_}, {txt=("get"|"set" as func);_}), a :: other_args -> + begin let assign = func = "set" in let print = print_indexop a None assign in match path, other_args with @@ -561,18 +721,20 @@ and sugar_expr ctxt f e = print ".(" "" ")" (expression ctxt) [i] rest | Lident "String", i :: rest -> print ".[" "" "]" (expression ctxt) [i] rest - | Ldot (Lident "Bigarray", "Array1"), i1 :: rest -> + | Ldot ({txt=Lident "Bigarray";_}, {txt="Array1";_}), i1 :: rest -> print ".{" "," "}" (simple_expr ctxt) [i1] rest - | Ldot (Lident "Bigarray", "Array2"), i1 :: i2 :: rest -> + | Ldot ({txt=Lident "Bigarray";_}, {txt="Array2";_}), + i1 :: i2 :: rest -> print ".{" "," "}" (simple_expr ctxt) [i1; i2] rest - | Ldot (Lident "Bigarray", "Array3"), i1 :: i2 :: i3 :: rest -> + | Ldot ({txt=Lident "Bigarray";_}, {txt="Array3";_}), + i1 :: i2 :: i3 :: rest -> print ".{" "," "}" (simple_expr ctxt) [i1; i2; i3] rest - | Ldot (Lident "Bigarray", "Genarray"), + | Ldot ({txt=Lident "Bigarray";_}, {txt="Genarray";_}), {pexp_desc = Pexp_array indexes; pexp_attributes = []} :: rest -> print ".{" "," "}" (simple_expr ctxt) indexes rest | _ -> false end - | (Lident s | Ldot(_,s)) , a :: i :: rest + | (Lident s | Ldot(_,{txt=s;_})) , a :: i :: rest when first_is '.' s -> (* extract operator: assignment operators end with [right_bracket ^ "<-"], @@ -594,7 +756,7 @@ and sugar_expr ctxt f e = | '}' -> '{', "}" | _ -> assert false in let path_prefix = match id with - | Ldot(m,_) -> Some m + | Ldot(m,_) -> Some m.txt | _ -> None in let left = String.sub s 0 (1+String.index s left) in print_indexop a path_prefix assign left ";" right @@ -604,18 +766,41 @@ and sugar_expr ctxt f e = end | _ -> false -and uncurry params e = - match e.pexp_desc with - | Pexp_fun (l, e0, p, e) -> - uncurry ((l, e0, p) :: params) e - | _ -> List.rev params, e +and function_param ctxt f param = + match param.pparam_desc with + | Pparam_val (a, b, c) -> label_exp ctxt f (a, b, c) + | Pparam_newtype ty -> pp f "(type %a)@;" ident_of_name ty.txt + +and function_body ctxt f function_body = + match function_body with + | Pfunction_body body -> expression ctxt f body + | Pfunction_cases (cases, _, attrs) -> + pp f "@[function%a%a@]" + (item_attributes ctxt) attrs + (case_list ctxt) cases + +and type_constraint ctxt f constraint_ = + match constraint_ with + | Pconstraint ty -> + pp f ":@;%a" (core_type ctxt) ty + | Pcoerce (ty1, ty2) -> + pp f "%a:>@;%a" + (option ~first:":@;" (core_type ctxt)) ty1 + (core_type ctxt) ty2 + +and function_params_then_body ctxt f params constraint_ body ~delimiter = + pp f "%a%a%s@;%a" + (list (function_param ctxt) ~sep:"") params + (option (type_constraint ctxt)) constraint_ + delimiter + (function_body (under_functionrhs ctxt)) body 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 - | Pexp_function _ | Pexp_fun _ | Pexp_match _ | Pexp_try _ | Pexp_sequence _ + | Pexp_function _ | Pexp_match _ | Pexp_try _ | Pexp_sequence _ | Pexp_newtype _ when ctxt.pipe || ctxt.semi -> paren true (expression reset_ctxt) f x @@ -625,16 +810,34 @@ and expression ctxt f x = | Pexp_letexception _ | Pexp_letop _ when ctxt.semi -> paren true (expression reset_ctxt) f x - | Pexp_fun (l, e0, p, e) -> - let params, body = uncurry [l, e0, p] e in - pp f "@[<2>fun@;%a->@;%a@]" - (pp_print_list (label_exp ctxt)) params - (expression ctxt) body | Pexp_newtype (lid, e) -> - pp f "@[<2>fun@;(type@;%s)@;->@;%a@]" lid.txt + pp f "@[<2>fun@;(type@;%a)@;->@;%a@]" ident_of_name lid.txt (expression ctxt) e - | Pexp_function l -> - pp f "@[function%a@]" (case_list ctxt) l + | Pexp_function (params, c, body) -> + begin match params, c with + (* Omit [fun] if there are no params. *) + | [], None -> + (* If function cases are a direct body of a function, + the function node should be wrapped in parens so + it doesn't become part of the enclosing function. *) + let should_paren = + match body with + | Pfunction_cases _ -> ctxt.functionrhs + | Pfunction_body _ -> false + in + let ctxt' = if should_paren then reset_ctxt else ctxt in + pp f "@[<2>%a@]" (paren should_paren (function_body ctxt')) body + | [], Some c -> + pp f "@[<2>(%a@;%a)@]" + (function_body ctxt) body + (type_constraint ctxt) c + | _ :: _, _ -> + pp f "@[<2>fun@;%a@]" + (fun f () -> + function_params_then_body ctxt f params c body ~delimiter:"->") + (); + + end | Pexp_match (e, l) -> pp f "@[@[@[<2>match %a@]@ with@]%a@]" (expression reset_ctxt) e (case_list ctxt) l @@ -696,12 +899,12 @@ and expression ctxt f x = (match view_expr x with | `cons ls -> list (simple_expr ctxt) f ls ~sep:"@;::@;" | `normal -> - pp f "@[<2>%a@;%a@]" longident_loc li + pp f "@[<2>%a@;%a@]" (with_loc constr) li (simple_expr ctxt) eo | _ -> assert false) | Pexp_setfield (e1, li, e2) -> pp f "@[<2>%a.%a@ <-@ %a@]" - (simple_expr ctxt) e1 longident_loc li (simple_expr ctxt) e2 + (simple_expr ctxt) e1 value_longident_loc li (simple_expr ctxt) e2 | Pexp_ifthenelse (e1, e2, eo) -> (* @;@[<2>else@ %a@]@] *) let fmt:(_,_,_)format ="@[@[<2>if@ %a@]@;@[<2>then@ %a@]%a@]" in @@ -720,12 +923,12 @@ and expression ctxt f x = pp f "@[%a@]" (list (expression (under_semi ctxt)) ~sep:";@;") lst | Pexp_new (li) -> - pp f "@[new@ %a@]" longident_loc li; + pp f "@[new@ %a@]" (with_loc type_longident) li; | Pexp_setinstvar (s, e) -> - pp f "@[%s@ <-@ %a@]" s.txt (expression ctxt) e + pp f "@[%a@ <-@ %a@]" ident_of_name s.txt (expression ctxt) e | Pexp_override l -> (* FIXME *) let string_x_expression f (s, e) = - pp f "@[%s@ =@ %a@]" s.txt (expression ctxt) e in + pp f "@[%a@ =@ %a@]" ident_of_name s.txt (expression ctxt) e in pp f "@[{<%a>}@]" (list string_x_expression ~sep:";" ) l; | Pexp_letmodule (s, me, e) -> @@ -752,7 +955,7 @@ and expression ctxt f x = (override o.popen_override) (module_expr ctxt) o.popen_expr (expression ctxt) e | Pexp_variant (l,Some eo) -> - pp f "@[<2>`%s@;%a@]" l (simple_expr ctxt) eo + pp f "@[<2>`%a@;%a@]" ident_of_name l (simple_expr ctxt) eo | Pexp_letop {let_; ands; body} -> pp f "@[<2>@[%a@,%a@] in@;<1 -2>%a@]" (binding_op ctxt) let_ @@ -775,8 +978,9 @@ and expression2 ctxt f x = if x.pexp_attributes <> [] then expression ctxt f x else match x.pexp_desc with | Pexp_field (e, li) -> - pp f "@[%a.%a@]" (simple_expr ctxt) e longident_loc li - | Pexp_send (e, s) -> pp f "@[%a#%s@]" (simple_expr ctxt) e s.txt + pp f "@[%a.%a@]" (simple_expr ctxt) e value_longident_loc li + | Pexp_send (e, s) -> + pp f "@[%a#%a@]" (simple_expr ctxt) e ident_of_name s.txt | _ -> simple_expr ctxt f x @@ -787,36 +991,42 @@ and simple_expr ctxt f x = (match view_expr x with | `nil -> pp f "[]" | `tuple -> pp f "()" + | `btrue -> pp f "true" + | `bfalse -> pp f "false" | `list xs -> pp f "@[[%a]@]" (list (expression (under_semi ctxt)) ~sep:";@;") xs - | `simple x -> longident f x + | `simple x -> constr f x | _ -> assert false) | Pexp_ident li -> - longident_loc f li + value_longident_loc f li (* (match view_fixity_of_exp x with *) (* |`Normal -> longident_loc f li *) (* | `Prefix _ | `Infix _ -> pp f "( %a )" longident_loc li) *) | Pexp_constant c -> constant f c; - | Pexp_pack me -> - pp f "(module@;%a)" (module_expr ctxt) me + | Pexp_pack (me, opty) -> + pp f "(module@;%a" (module_expr ctxt) me; + Option.iter (pp f " :@ %a" (package_type ctxt)) opty; + pp f ")" | Pexp_tuple l -> - pp f "@[(%a)@]" (list (simple_expr ctxt) ~sep:",@;") l + pp f "@[(%a)@]" (list (tuple_expr_component ctxt) ~sep:",@;") l | Pexp_constraint (e, ct) -> pp f "(%a : %a)" (expression ctxt) e (core_type ctxt) ct | Pexp_coerce (e, cto1, ct) -> pp f "(%a%a :> %a)" (expression ctxt) e (option (core_type ctxt) ~first:" : " ~last:" ") cto1 (* no sep hint*) (core_type ctxt) ct - | Pexp_variant (l, None) -> pp f "`%s" l + | Pexp_variant (l, None) -> pp f "`%a" ident_of_name l | Pexp_record (l, eo) -> let longident_x_expression f ( li, e) = match e with | {pexp_desc=Pexp_ident {txt;_}; - pexp_attributes=[]; _} when li.txt = txt -> - pp f "@[%a@]" longident_loc li + pexp_attributes=[]; _} when Longident.same li.txt txt -> + pp f "@[%a@]" value_longident_loc li | _ -> - pp f "@[%a@;=@;%a@]" longident_loc li (simple_expr ctxt) e + pp f "@[%a@;=@;%a@]" + value_longident_loc li + (simple_expr ctxt) e in pp f "@[@[{@;%a%a@]@;}@]"(* "@[{%a%a}@]" *) (option ~last:" with@;" (simple_expr ctxt)) eo @@ -878,12 +1088,14 @@ and class_type_field ctxt f x = pp f "@[<2>inherit@ %a@]%a" (class_type ctxt) ct (item_attributes ctxt) x.pctf_attributes | Pctf_val (s, mf, vf, ct) -> - pp f "@[<2>val @ %a%a%s@ :@ %a@]%a" - mutable_flag mf virtual_flag vf s.txt (core_type ctxt) ct + pp f "@[<2>val @ %a%a%a@ :@ %a@]%a" + mutable_flag mf virtual_flag vf + ident_of_name s.txt (core_type ctxt) ct (item_attributes ctxt) x.pctf_attributes | Pctf_method (s, pf, vf, ct) -> - pp f "@[<2>method %a %a%s :@;%a@]%a" - private_flag pf virtual_flag vf s.txt (core_type ctxt) ct + pp f "@[<2>method %a %a%a :@;%a@]%a" + private_flag pf virtual_flag vf + ident_of_name s.txt (core_type ctxt) ct (item_attributes ctxt) x.pctf_attributes | Pctf_constraint (ct1, ct2) -> pp f "@[<2>constraint@ %a@ =@ %a@]%a" @@ -912,7 +1124,7 @@ and class_type ctxt f x = (fun f l -> match l with | [] -> () | _ -> pp f "[%a]@ " (list (core_type ctxt) ~sep:"," ) l) l - longident_loc li + (with_loc type_longident) li (attributes ctxt) x.pcty_attributes | Pcty_arrow (l, co, cl) -> pp f "@[<2>%a@;->@;%a@]" (* FIXME remove parens later *) @@ -923,16 +1135,17 @@ and class_type ctxt f x = attributes ctxt f x.pcty_attributes | Pcty_open (o, e) -> pp f "@[<2>let open%s %a in@;%a@]" - (override o.popen_override) longident_loc o.popen_expr + (override o.popen_override) value_longident_loc o.popen_expr (class_type ctxt) e (* [class type a = object end] *) and class_type_declaration_list ctxt f l = let class_type_declaration kwd f x = let { pci_params=ls; pci_name={ txt; _ }; _ } = x in - pp f "@[<2>%s %a%a%s@ =@ %a@]%a" kwd + pp f "@[<2>%s %a%a%a@ =@ %a@]%a" kwd virtual_flag x.pci_virt - (class_params_def ctxt) ls txt + (class_params_def ctxt) ls + ident_of_name txt (class_type ctxt) x.pci_expr (item_attributes ctxt) x.pci_attributes in @@ -951,21 +1164,24 @@ and class_field ctxt f x = (class_expr ctxt) ce (fun f so -> match so with | None -> (); - | Some (s) -> pp f "@ as %s" s.txt ) so + | Some (s) -> pp f "@ as %a" ident_of_name s.txt ) so (item_attributes ctxt) x.pcf_attributes | Pcf_val (s, mf, Cfk_concrete (ovf, e)) -> - pp f "@[<2>val%s %a%s =@;%a@]%a" (override ovf) - mutable_flag mf s.txt + pp f "@[<2>val%s %a%a =@;%a@]%a" (override ovf) + mutable_flag mf + ident_of_name s.txt (expression ctxt) e (item_attributes ctxt) x.pcf_attributes | Pcf_method (s, pf, Cfk_virtual ct) -> - pp f "@[<2>method virtual %a %s :@;%a@]%a" - private_flag pf s.txt + pp f "@[<2>method virtual %a %a :@;%a@]%a" + private_flag pf + ident_of_name s.txt (core_type ctxt) ct (item_attributes ctxt) x.pcf_attributes | Pcf_val (s, mf, Cfk_virtual ct) -> - pp f "@[<2>val virtual %a%s :@ %a@]%a" - mutable_flag mf s.txt + pp f "@[<2>val virtual %a%a :@ %a@]%a" + mutable_flag mf + ident_of_name s.txt (core_type ctxt) ct (item_attributes ctxt) x.pcf_attributes | Pcf_method (s, pf, Cfk_concrete (ovf, e)) -> @@ -987,8 +1203,8 @@ and class_field ctxt f x = private_flag pf (fun f -> function | {pexp_desc=Pexp_poly (e, Some ct); pexp_attributes=[]; _} -> - pp f "%s :@;%a=@;%a" - s.txt (core_type ctxt) ct (expression ctxt) e + pp f "%a :@;%a=@;%a" + ident_of_name s.txt (core_type ctxt) ct (expression ctxt) e | {pexp_desc=Pexp_poly (e, None); pexp_attributes=[]; _} -> bind e | _ -> bind e) e @@ -1039,7 +1255,7 @@ and class_expr ctxt f x = (fun f l-> if l <>[] then pp f "[%a]@ " (list (core_type ctxt) ~sep:",") l) l - longident_loc li + (with_loc type_longident) li | Pcl_constraint (ce, ct) -> pp f "(%a@ :@ %a)" (class_expr ctxt) ce @@ -1047,7 +1263,7 @@ and class_expr ctxt f x = | Pcl_extension e -> extension ctxt f e | Pcl_open (o, e) -> pp f "@[<2>let open%s %a in@;%a@]" - (override o.popen_override) longident_loc o.popen_expr + (override o.popen_override) value_longident_loc o.popen_expr (class_expr ctxt) e and module_type ctxt f x = @@ -1064,7 +1280,7 @@ and module_type ctxt f x = pp f "@[%a@ ->@ %a@]" (module_type1 ctxt) mt1 (module_type ctxt) mt2 | Some name -> - pp f "@[functor@ (%s@ :@ %a)@ ->@ %a@]" name + pp f "@[(%s@ :@ %a)@ ->@ %a@]" name (module_type ctxt) mt1 (module_type ctxt) mt2 end | Pmty_with (mt, []) -> module_type ctxt f mt @@ -1078,29 +1294,33 @@ and with_constraint ctxt f = function | Pwith_type (li, ({ptype_params= ls ;_} as td)) -> pp f "type@ %a %a =@ %a" (type_params ctxt) ls - longident_loc li (type_declaration ctxt) td + (with_loc type_longident) li (type_declaration ctxt) td | Pwith_module (li, li2) -> - pp f "module %a =@ %a" longident_loc li longident_loc li2; + pp f "module %a =@ %a" value_longident_loc li value_longident_loc li2; | Pwith_modtype (li, mty) -> - pp f "module type %a =@ %a" longident_loc li (module_type ctxt) mty; + pp f "module type %a =@ %a" + (with_loc type_longident) li + (module_type ctxt) mty; | Pwith_typesubst (li, ({ptype_params=ls;_} as td)) -> pp f "type@ %a %a :=@ %a" (type_params ctxt) ls - longident_loc li + (with_loc type_longident) li (type_declaration ctxt) td | Pwith_modsubst (li, li2) -> - pp f "module %a :=@ %a" longident_loc li longident_loc li2 + pp f "module %a :=@ %a" value_longident_loc li value_longident_loc li2 | Pwith_modtypesubst (li, mty) -> - pp f "module type %a :=@ %a" longident_loc li (module_type ctxt) mty; + pp f "module type %a :=@ %a" + (with_loc type_longident) li + (module_type ctxt) mty; and module_type1 ctxt f x = if x.pmty_attributes <> [] then module_type ctxt f x else match x.pmty_desc with | Pmty_ident li -> - pp f "%a" longident_loc li; + pp f "%a" (with_loc type_longident) li; | Pmty_alias li -> - pp f "(module %a)" longident_loc li; + pp f "(module %a)" (with_loc type_longident) li; | Pmty_signature (s) -> pp f "@[@[sig@ %a@]@ end@]" (* "@[sig@ %a@ end@]" *) (list (signature_item ctxt)) s (* FIXME wrong indentation*) @@ -1123,7 +1343,7 @@ and signature_item ctxt f x : unit = | Psig_value vd -> let intro = if vd.pval_prim = [] then "val" else "external" in pp f "@[<2>%s@ %a@ :@ %a@]%a" intro - protect_ident vd.pval_name.txt + ident_of_name vd.pval_name.txt (value_description ctxt) vd (item_attributes ctxt) vd.pval_attributes | Psig_typext te -> @@ -1132,9 +1352,10 @@ and signature_item ctxt f x : unit = exception_declaration ctxt f ed | Psig_class l -> let class_description kwd f ({pci_params=ls;pci_name={txt;_};_} as x) = - pp f "@[<2>%s %a%a%s@;:@;%a@]%a" kwd + pp f "@[<2>%s %a%a%a@;:@;%a@]%a" kwd virtual_flag x.pci_virt - (class_params_def ctxt) ls txt + (class_params_def ctxt) ls + ident_of_name txt (class_type ctxt) x.pci_expr (item_attributes ctxt) x.pci_attributes in begin @@ -1150,7 +1371,7 @@ and signature_item ctxt f x : unit = pmty_attributes=[]; _};_} as pmd) -> pp f "@[module@ %s@ =@ %a@]%a" (Option.value pmd.pmd_name.txt ~default:"_") - longident_loc alias + value_longident_loc alias (item_attributes ctxt) pmd.pmd_attributes | Psig_module pmd -> pp f "@[module@ %s@ :@ %a@]%a" @@ -1159,20 +1380,20 @@ and signature_item ctxt f x : unit = (item_attributes ctxt) pmd.pmd_attributes | Psig_modsubst pms -> pp f "@[module@ %s@ :=@ %a@]%a" pms.pms_name.txt - longident_loc pms.pms_manifest + value_longident_loc pms.pms_manifest (item_attributes ctxt) pms.pms_attributes | Psig_open od -> pp f "@[open%s@ %a@]%a" (override od.popen_override) - longident_loc od.popen_expr + value_longident_loc od.popen_expr (item_attributes ctxt) od.popen_attributes | Psig_include incl -> pp f "@[include@ %a@]%a" (module_type ctxt) incl.pincl_mod (item_attributes ctxt) incl.pincl_attributes | Psig_modtype {pmtd_name=s; pmtd_type=md; pmtd_attributes=attrs} -> - pp f "@[module@ type@ %s%a@]%a" - s.txt + pp f "@[module@ type@ %a%a@]%a" + ident_of_name s.txt (fun f md -> match md with | None -> () | Some mt -> @@ -1224,7 +1445,7 @@ and module_expr ctxt f x = (module_expr ctxt) me (module_type ctxt) mt | Pmod_ident (li) -> - pp f "%a" longident_loc li; + pp f "%a" value_longident_loc li; | Pmod_functor (Unit, me) -> pp f "functor ()@;->@;%a" (module_expr ctxt) me | Pmod_functor (Named (s, mt), me) -> @@ -1263,14 +1484,10 @@ and binding ctxt f {pvb_pat=p; pvb_expr=x; pvb_constraint = ct; _} = let rec pp_print_pexp_function f x = if x.pexp_attributes <> [] then pp f "=@;%a" (expression ctxt) x else match x.pexp_desc with - | Pexp_fun (label, eo, p, e) -> - if label=Nolabel then - pp f "%a@ %a" (simple_pattern ctxt) p pp_print_pexp_function e - else - pp f "%a@ %a" - (label_exp ctxt) (label,eo,p) pp_print_pexp_function e + | Pexp_function (params, c, body) -> + function_params_then_body ctxt f params c body ~delimiter:"=" | Pexp_newtype (str,e) -> - pp f "(type@ %s)@ %a" str.txt pp_print_pexp_function e + pp f "(type@ %a)@ %a" ident_of_name str.txt pp_print_pexp_function e | _ -> pp f "=@;%a" (expression ctxt) x in match ct with @@ -1279,7 +1496,7 @@ and binding ctxt f {pvb_pat=p; pvb_expr=x; pvb_constraint = ct; _} = (simple_pattern ctxt) p (core_type ctxt) typ (expression ctxt) x | Some (Pvc_constraint { locally_abstract_univars = vars; typ }) -> pp f "%a@;: type@;%a.@;%a@;=@;%a" - (simple_pattern ctxt) p (list pp_print_string ~sep:"@;") + (simple_pattern ctxt) p (list ident_of_name ~sep:"@;") (List.map (fun x -> x.txt) vars) (core_type ctxt) typ (expression ctxt) x | Some (Pvc_coercion {ground=None; coercion }) -> @@ -1370,8 +1587,8 @@ and structure_item ctxt f x = (module_expr ctxt) od.popen_expr (item_attributes ctxt) od.popen_attributes | Pstr_modtype {pmtd_name=s; pmtd_type=md; pmtd_attributes=attrs} -> - pp f "@[module@ type@ %s%a@]%a" - s.txt + pp f "@[module@ type@ %a%a@]%a" + ident_of_name s.txt (fun f md -> match md with | None -> () | Some mt -> @@ -1399,9 +1616,10 @@ and structure_item ctxt f x = let class_declaration kwd f ({pci_params=ls; pci_name={txt;_}; _} as x) = let args, constr, cl = extract_class_args x.pci_expr in - pp f "@[<2>%s %a%a%s %a%a=@;%a@]%a" kwd + pp f "@[<2>%s %a%a%a %a%a=@;%a@]%a" kwd virtual_flag x.pci_virt - (class_params_def ctxt) ls txt + (class_params_def ctxt) ls + ident_of_name txt (list (label_exp ctxt)) args (option class_constraint) constr (class_expr ctxt) cl @@ -1418,7 +1636,7 @@ and structure_item ctxt f x = | Pstr_class_type l -> class_type_declaration_list ctxt f l | Pstr_primitive vd -> pp f "@[external@ %a@ :@ %a@]%a" - protect_ident vd.pval_name.txt + ident_of_name vd.pval_name.txt (value_description ctxt) vd (item_attributes ctxt) vd.pval_attributes | Pstr_include incl -> @@ -1475,10 +1693,11 @@ and type_def_list ctxt f (rf, exported, l) = else if exported then " =" else " :=" in - pp f "@[<2>%s %a%a%s%s%a@]%a" kwd + pp f "@[<2>%s %a%a%a%s%a@]%a" kwd nonrec_flag rf (type_params ctxt) x.ptype_params - x.ptype_name.txt eq + ident_of_name x.ptype_name.txt + eq (type_declaration ctxt) x (item_attributes ctxt) x.ptype_attributes in @@ -1491,9 +1710,9 @@ and type_def_list ctxt f (rf, exported, l) = and record_declaration ctxt f lbls = let type_record_field f pld = - pp f "@[<2>%a%s:@;%a@;%a@]" + pp f "@[<2>%a%a:@;%a@;%a@]" mutable_flag pld.pld_mutable - pld.pld_name.txt + ident_of_name pld.pld_name.txt (core_type ctxt) pld.pld_type (attributes ctxt) pld.pld_attributes in @@ -1558,7 +1777,7 @@ and type_extension ctxt f x = | l -> pp f "%a@;" (list (type_param ctxt) ~first:"(" ~last:")" ~sep:",") l) x.ptyext_params - longident_loc x.ptyext_path + (with_loc type_longident) x.ptyext_path private_flag x.ptyext_private (* Cf: #7200 *) (list ~sep:"" extension_constructor) x.ptyext_constructors @@ -1605,7 +1824,7 @@ and extension_constructor ctxt f x = (x.pext_name.txt, v, l, r, x.pext_attributes) | Pext_rebind li -> pp f "%s@;=@;%a%a" x.pext_name.txt - longident_loc li + (with_loc constr) li (attributes ctxt) x.pext_attributes and case_list ctxt f l : unit = @@ -1625,21 +1844,34 @@ and label_x_expression_param ctxt f (l,e) = | Nolabel -> expression2 ctxt f e (* level 2*) | Optional str -> if Some str = simple_name then - pp f "?%s" str + pp f "?%a" ident_of_name str else - pp f "?%s:%a" str (simple_expr ctxt) e + pp f "?%a:%a" ident_of_name str (simple_expr ctxt) e | Labelled lbl -> if Some lbl = simple_name then - pp f "~%s" lbl + pp f "~%a" ident_of_name lbl else - pp f "~%s:%a" lbl (simple_expr ctxt) e + pp f "~%a:%a" ident_of_name lbl (simple_expr ctxt) e + +and tuple_expr_component ctxt f (l,e) = + let simple_name = match e with + | {pexp_desc=Pexp_ident {txt=Lident l;_}; pexp_attributes=[]} -> Some l + | _ -> None + in match (simple_name, l) with + (* Labeled component can be represented with pun *) + | Some simple_name, Some lbl when String.equal simple_name lbl -> + pp f "~%s" lbl + (* Labeled component general case *) + | _, Some lbl -> pp f "~%s:%a" lbl (simple_expr ctxt) e + (* Unlabeled component *) + | _, None -> expression2 ctxt f e and directive_argument f x = match x.pdira_desc with | Pdir_string (s) -> pp f "@ %S" s | Pdir_int (n, None) -> pp f "@ %s" n | Pdir_int (n, Some m) -> pp f "@ %s%c" n m - | Pdir_ident (li) -> pp f "@ %a" longident li + | Pdir_ident (li) -> pp f "@ %a" value_longident li | Pdir_bool (b) -> pp f "@ %s" (string_of_bool b) let toplevel_phrase f x = @@ -1689,7 +1921,11 @@ let signature_item = signature_item reset_ctxt let binding = binding reset_ctxt let payload = payload reset_ctxt let case_list = case_list reset_ctxt +let longident = value_longident +module Style = Misc.Style + +(* merlin: moved from parse.ml *) let prepare_error err = let source = Location.Parser in let open Syntaxerr in @@ -1700,37 +1936,58 @@ let prepare_error err = ~loc:closing_loc ~sub:[ Location.msg ~loc:opening_loc - "This '%s' might be unmatched" opening + "This %a might be unmatched" Style.inline_code opening ] - "Syntax error: '%s' expected" closing + "Syntax error: %a expected" Style.inline_code closing | Expecting (loc, nonterm) -> - Location.errorf ~source ~loc "Syntax error: %s expected." nonterm + Location.errorf ~source ~loc "Syntax error: %a expected." + Style.inline_code nonterm | Not_expecting (loc, nonterm) -> - Location.errorf ~source ~loc "Syntax error: %s not expected." nonterm + Location.errorf ~source ~loc "Syntax error: %a not expected." + Style.inline_code nonterm | Applicative_path loc -> Location.errorf ~source ~loc - "Syntax error: applicative paths of the form F(X).t \ - are not supported when the option -no-app-func is set." + "Syntax error: applicative paths of the form %a \ + are not supported when the option %a is set." + Style.inline_code "F(X).t" + Style.inline_code "-no-app-func" | Variable_in_scope (loc, var) -> Location.errorf ~source ~loc "In this scoped type, variable %a \ - is reserved for the local type %s." - tyvar var var + is reserved for the local type %a." + (Style.as_inline_code Doc.tyvar) var + Style.inline_code var | Other loc -> Location.errorf ~source ~loc "Syntax error" | Ill_formed_ast (loc, s) -> Location.errorf ~loc "broken invariant in parsetree: %s" s - | Invalid_package_type (loc, s) -> - Location.errorf ~source ~loc "invalid package type: %s" s + | Invalid_package_type (loc, ipt) -> + let invalid ppf ipt = match ipt with + | Syntaxerr.Parameterized_types -> + Format_doc.fprintf ppf "parametrized types are not supported" + | Constrained_types -> + Format_doc.fprintf ppf "constrained types are not supported" + | Private_types -> + Format_doc.fprintf ppf "private types are not supported" + | Not_with_type -> + Format_doc.fprintf ppf "only %a constraints are supported" + Style.inline_code "with type t =" + | Neither_identifier_nor_with_type -> + Format_doc.fprintf ppf + "only module type identifier and %a constraints are supported" + Style.inline_code "with type" + in + Location.errorf ~source ~loc "Syntax error: invalid package type: %a" invalid ipt | Removed_string_set loc -> - Location.errorf ~loc + Location.errorf ~source ~loc "Syntax error: strings are immutable, there is no assignment \ - syntax for them.\n\ - Hint: Mutable sequences of bytes are available in the Bytes module.\n\ - Hint: Did you mean to use 'Bytes.set'?" - + syntax for them.\n\ + @{Hint@}: Mutable sequences of bytes are available in \ + the Bytes module.\n\ + @{Hint@}: Did you mean to use %a?" + Style.inline_code "Bytes.set" let () = Location.register_error_of_exn (function diff --git a/ocamlmerlin_mlx/ocaml/parsing/pprintast.mli b/ocamlmerlin_mlx/ocaml/parsing/pprintast.mli index 4ceb5bb..ae32930 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/pprintast.mli +++ b/ocamlmerlin_mlx/ocaml/parsing/pprintast.mli @@ -24,6 +24,8 @@ type space_formatter = (unit, Format.formatter, unit) format val longident : Format.formatter -> Longident.t -> unit +val constr : Format.formatter -> Longident.t -> unit + val expression : Format.formatter -> Parsetree.expression -> unit val string_of_expression : Parsetree.expression -> string @@ -50,10 +52,35 @@ val signature_item: Format.formatter -> Parsetree.signature_item -> unit val binding: Format.formatter -> Parsetree.value_binding -> unit val payload: Format.formatter -> Parsetree.payload -> unit +val tyvar_of_name : string -> string + (** Turn a type variable name into a valid identifier, taking care of the + special treatment required for the single quote character in second + position, or for keywords by escaping them with \#. No-op on "_". *) + val tyvar: Format.formatter -> string -> unit - (** Print a type variable name, taking care of the special treatment - required for the single quote character in second position. *) + (** Print a type variable name as a valid identifier, taking care of the + special treatment required for the single quote character in second + position, or for keywords by escaping them with \#. No-op on "_". *) (* merlin *) +type longindent_kind = +| Constr (** variant constructors *) +| Type (** core types, module types, class types, and classes *) +| Other (** values and modules *) + val case_list : Format.formatter -> Parsetree.case list -> unit -val protect_ident : Format.formatter -> string -> unit +val ident_of_name : Format.formatter -> string -> unit +val needs_parens : kind:longindent_kind -> string -> bool + + +(** {!Format_doc} functions for error messages *) +module Doc:sig + val longident: Longident.t Format_doc.printer + val constr: Longident.t Format_doc.printer + val tyvar: string Format_doc.printer + + (** Returns a format document if the expression reads nicely as the subject + of a sentence in a error message. *) + val nominal_exp : Parsetree.expression -> Format_doc.t option +end + diff --git a/ocamlmerlin_mlx/ocaml/parsing/printast.ml b/ocamlmerlin_mlx/ocaml/parsing/printast.ml index 4b5612e..1a60dc2 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/printast.ml +++ b/ocamlmerlin_mlx/ocaml/parsing/printast.ml @@ -40,9 +40,9 @@ let fmt_location f loc = let rec fmt_longident_aux f x = match x with | Longident.Lident (s) -> fprintf f "%s" s - | Longident.Ldot (y, s) -> fprintf f "%a.%s" fmt_longident_aux y s + | Longident.Ldot (y, s) -> fprintf f "%a.%s" fmt_longident_aux y.txt s.txt | Longident.Lapply (y, z) -> - fprintf f "%a(%a)" fmt_longident_aux y fmt_longident_aux z + fprintf f "%a(%a)" fmt_longident_aux y.txt fmt_longident_aux z.txt let fmt_longident f x = fprintf f "\"%a\"" fmt_longident_aux x @@ -59,16 +59,6 @@ let fmt_char_option f = function | None -> fprintf f "None" | Some c -> fprintf f "Some %c" c -let fmt_constant f x = - match x with - | Pconst_integer (i,m) -> fprintf f "PConst_int (%s,%a)" i fmt_char_option m; - | Pconst_char (c) -> fprintf f "PConst_char %02x" (Char.code c) - | Pconst_string (s, strloc, None) -> - fprintf f "PConst_string(%S,%a,None)" s fmt_location strloc - | Pconst_string (s, strloc, Some delim) -> - fprintf f "PConst_string (%S,%a,Some %S)" s fmt_location strloc delim - | Pconst_float (s,m) -> fprintf f "PConst_float (%s,%a)" s fmt_char_option m - let fmt_mutable_flag f x = match x with | Immutable -> fprintf f "Immutable" @@ -108,6 +98,18 @@ let line i f s (*...*) = fprintf f "%s" (String.make ((2*i) mod 72) ' '); fprintf f s (*...*) +let fmt_constant i f x = + line i f "constant %a\n" fmt_location x.pconst_loc; + let i = i+1 in + match x.pconst_desc with + | Pconst_integer (j,m) -> line i f "PConst_int (%s,%a)\n" j fmt_char_option m + | Pconst_char c -> line i f "PConst_char %02x\n" (Char.code c) + | Pconst_string (s, strloc, None) -> + line i f "PConst_string(%S,%a,None)\n" s fmt_location strloc + | Pconst_string (s, strloc, Some delim) -> + line i f "PConst_string (%S,%a,Some %S)\n" s fmt_location strloc delim + | Pconst_float (s,m) -> line i f "PConst_float (%s,%a)\n" s fmt_char_option m + let list i f ppf l = match l with | [] -> line i ppf "[]\n" @@ -136,6 +138,10 @@ let arg_label i ppf = function let typevars ppf vs = List.iter (fun x -> fprintf ppf " %a" Pprintast.tyvar x.txt) vs +let labeled_tuple_element f i ppf (l, ct) = + option i string ppf l; + f i ppf ct + let rec core_type i ppf x = line i ppf "core_type %a\n" fmt_location x.ptyp_loc; attributes i ppf x.ptyp_attributes; @@ -150,7 +156,7 @@ let rec core_type i ppf x = core_type i ppf ct2; | Ptyp_tuple l -> line i ppf "Ptyp_tuple\n"; - list i core_type ppf l; + list i (labeled_tuple_element core_type) ppf l; | Ptyp_constr (li, l) -> line i ppf "Ptyp_constr %a\n" fmt_longident_loc li; list i core_type ppf l; @@ -175,18 +181,27 @@ let rec core_type i ppf x = line i ppf "Ptyp_class %a\n" fmt_longident_loc li; list i core_type ppf l | Ptyp_alias (ct, s) -> - line i ppf "Ptyp_alias \"%s\"\n" s; + line i ppf "Ptyp_alias \"%s\"\n" s.txt; core_type i ppf ct; | Ptyp_poly (sl, ct) -> line i ppf "Ptyp_poly%a\n" typevars sl; core_type i ppf ct; - | Ptyp_package (s, l) -> - line i ppf "Ptyp_package %a\n" fmt_longident_loc s; - list i package_with ppf l; + | Ptyp_package ptyp -> + line i ppf "Ptyp_package\n"; + package_type i ppf ptyp; + | Ptyp_open (mod_ident, t) -> + line i ppf "Ptyp_open \"%a\"\n" fmt_longident_loc mod_ident; + core_type i ppf t | Ptyp_extension (s, arg) -> line i ppf "Ptyp_extension \"%s\"\n" s.txt; payload i ppf arg +and package_type i ppf ptyp = + let i = i + 1 in + line i ppf "package_type %a\n" fmt_longident_loc ptyp.ppt_path; + list i package_with ppf ptyp.ppt_cstrs; + attributes i ppf ptyp.ppt_attrs + and package_with i ppf (s, t) = line i ppf "with type %a\n" fmt_longident_loc s; core_type i ppf t @@ -201,12 +216,16 @@ and pattern i ppf x = | Ppat_alias (p, s) -> line i ppf "Ppat_alias %a\n" fmt_string_loc s; pattern i ppf p; - | Ppat_constant (c) -> line i ppf "Ppat_constant %a\n" fmt_constant c; + | Ppat_constant (c) -> + line i ppf "Ppat_constant\n"; + fmt_constant i ppf c; | Ppat_interval (c1, c2) -> - line i ppf "Ppat_interval %a..%a\n" fmt_constant c1 fmt_constant c2; - | Ppat_tuple (l) -> - line i ppf "Ppat_tuple\n"; - list i pattern ppf l; + line i ppf "Ppat_interval\n"; + fmt_constant i ppf c1; + fmt_constant i ppf c2; + | Ppat_tuple (l, c) -> + line i ppf "Ppat_tuple\n %a\n" fmt_closed_flag c; + list i (labeled_tuple_element pattern) ppf l; | Ppat_construct (li, po) -> line i ppf "Ppat_construct %a\n" fmt_longident_loc li; option i @@ -242,6 +261,10 @@ and pattern i ppf x = | Ppat_exception p -> line i ppf "Ppat_exception\n"; pattern i ppf p + | Ppat_effect(p1, p2) -> + line i ppf "Ppat_effect\n"; + pattern i ppf p1; + pattern i ppf p2 | Ppat_open (m,p) -> line i ppf "Ppat_open \"%a\"\n" fmt_longident_loc m; pattern i ppf p @@ -255,20 +278,18 @@ and expression i ppf x = let i = i+1 in match x.pexp_desc with | Pexp_ident (li) -> line i ppf "Pexp_ident %a\n" fmt_longident_loc li; - | Pexp_constant (c) -> line i ppf "Pexp_constant %a\n" fmt_constant c; + | Pexp_constant (c) -> + line i ppf "Pexp_constant\n"; + fmt_constant i ppf c; | Pexp_let (rf, l, e) -> line i ppf "Pexp_let %a\n" fmt_rec_flag rf; list i value_binding ppf l; expression i ppf e; - | Pexp_function l -> + | Pexp_function (params, c, body) -> line i ppf "Pexp_function\n"; - list i case ppf l; - | Pexp_fun (l, eo, p, e) -> - line i ppf "Pexp_fun\n"; - arg_label i ppf l; - option i expression ppf eo; - pattern i ppf p; - expression i ppf e; + list i function_param ppf params; + option i type_constraint ppf c; + function_body i ppf body | Pexp_apply (e, l) -> line i ppf "Pexp_apply\n"; expression i ppf e; @@ -283,7 +304,7 @@ and expression i ppf x = list i case ppf l; | Pexp_tuple (l) -> line i ppf "Pexp_tuple\n"; - list i expression ppf l; + list i (labeled_tuple_element expression) ppf l; | Pexp_construct (li, eo) -> line i ppf "Pexp_construct %a\n" fmt_longident_loc li; option i expression ppf eo; @@ -368,9 +389,10 @@ and expression i ppf x = | Pexp_newtype (s, e) -> line i ppf "Pexp_newtype \"%s\"\n" s.txt; expression i ppf e - | Pexp_pack me -> + | Pexp_pack (me, optyp) -> line i ppf "Pexp_pack\n"; - module_expr i ppf me + module_expr i ppf me; + option i package_type ppf optyp | Pexp_open (o, e) -> line i ppf "Pexp_open %a\n" fmt_override_flag o.popen_override; module_expr i ppf o.popen_expr; @@ -386,6 +408,36 @@ and expression i ppf x = | Pexp_unreachable -> line i ppf "Pexp_unreachable" +and function_param i ppf { pparam_desc = desc; pparam_loc = loc } = + match desc with + | Pparam_val (l, eo, p) -> + line i ppf "Pparam_val %a\n" fmt_location loc; + arg_label (i+1) ppf l; + option (i+1) expression ppf eo; + pattern (i+1) ppf p + | Pparam_newtype ty -> + line i ppf "Pparam_newtype \"%s\" %a\n" ty.txt fmt_location loc + +and function_body i ppf body = + match body with + | Pfunction_body e -> + line i ppf "Pfunction_body\n"; + expression (i+1) ppf e + | Pfunction_cases (cases, loc, attrs) -> + line i ppf "Pfunction_cases %a\n" fmt_location loc; + attributes (i+1) ppf attrs; + list (i+1) case ppf cases + +and type_constraint i ppf constraint_ = + match constraint_ with + | Pconstraint ty -> + line i ppf "Pconstraint\n"; + core_type (i+1) ppf ty + | Pcoerce (ty1, ty2) -> + line i ppf "Pcoerce\n"; + option (i+1) core_type ppf ty1; + core_type (i+1) ppf ty2 + and value_description i ppf x = line i ppf "value_description %a %a\n" fmt_string_loc x.pval_name fmt_location x.pval_loc; diff --git a/ocamlmerlin_mlx/ocaml/parsing/printast.mli b/ocamlmerlin_mlx/ocaml/parsing/printast.mli index 5bc4961..87b87a5 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/printast.mli +++ b/ocamlmerlin_mlx/ocaml/parsing/printast.mli @@ -27,6 +27,7 @@ val interface : formatter -> signature_item list -> unit val implementation : formatter -> structure_item list -> unit val top_phrase : formatter -> toplevel_phrase -> unit +val pattern: int -> formatter -> pattern -> unit val expression: int -> formatter -> expression -> unit val structure: int -> formatter -> structure -> unit val payload: int -> formatter -> payload -> unit diff --git a/ocamlmerlin_mlx/ocaml/parsing/syntaxerr.ml b/ocamlmerlin_mlx/ocaml/parsing/syntaxerr.ml index df7b8a0..8a326c1 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/syntaxerr.ml +++ b/ocamlmerlin_mlx/ocaml/parsing/syntaxerr.ml @@ -15,6 +15,13 @@ (* Auxiliary type for reporting syntax errors *) +type invalid_package_type = + | Parameterized_types + | Constrained_types + | Private_types + | Not_with_type + | Neither_identifier_nor_with_type + type error = Unclosed of Location.t * string * Location.t * string | Expecting of Location.t * string @@ -23,7 +30,7 @@ type error = | Variable_in_scope of Location.t * string | Other of Location.t | Ill_formed_ast of Location.t * string - | Invalid_package_type of Location.t * string + | Invalid_package_type of Location.t * invalid_package_type | Removed_string_set of Location.t exception Error of error diff --git a/ocamlmerlin_mlx/ocaml/parsing/syntaxerr.mli b/ocamlmerlin_mlx/ocaml/parsing/syntaxerr.mli index 577d536..a84bc66 100644 --- a/ocamlmerlin_mlx/ocaml/parsing/syntaxerr.mli +++ b/ocamlmerlin_mlx/ocaml/parsing/syntaxerr.mli @@ -20,6 +20,13 @@ *) +type invalid_package_type = + | Parameterized_types + | Constrained_types + | Private_types + | Not_with_type + | Neither_identifier_nor_with_type + type error = Unclosed of Location.t * string * Location.t * string | Expecting of Location.t * string @@ -28,7 +35,7 @@ type error = | Variable_in_scope of Location.t * string | Other of Location.t | Ill_formed_ast of Location.t * string - | Invalid_package_type of Location.t * string + | Invalid_package_type of Location.t * invalid_package_type | Removed_string_set of Location.t exception Error of error diff --git a/ocamlmerlin_mlx/ocaml/parsing/unit_info.ml b/ocamlmerlin_mlx/ocaml/parsing/unit_info.ml new file mode 100644 index 0000000..3844a1a --- /dev/null +++ b/ocamlmerlin_mlx/ocaml/parsing/unit_info.ml @@ -0,0 +1,142 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Florian Angeletti, projet Cambium, Inria Paris *) +(* *) +(* Copyright 2023 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +type intf_or_impl = Intf | Impl +type modname = string +type filename = string +type file_prefix = string +type error = Invalid_encoding of string + +exception Error of error + +type t = { + source_file : filename; + prefix : file_prefix; + modname : modname; + kind : intf_or_impl; +} + +let source_file (x : t) = x.source_file +let modname (x : t) = x.modname +let kind (x : t) = x.kind +let prefix (x : t) = x.prefix + +let basename_chop_extensions basename = + match String.index basename '.' with + | dot_pos -> String.sub basename 0 dot_pos + | exception Not_found -> basename + +let strict_modulize s = + match Misc.Utf8_lexeme.capitalize s with + | Ok x -> x + | Error _ -> raise (Error (Invalid_encoding s)) + +let modulize s = + match Misc.Utf8_lexeme.capitalize s with Ok x | Error x -> x + +(* We re-export the [Misc] definition, and ignore encoding errors under the + assumption that we should focus our effort on not *producing* badly encoded + module names *) +let normalize x = Misc.normalized_unit_filename x + +let stem source_file = + source_file |> Filename.basename |> basename_chop_extensions + +let strict_modname_from_source source_file = + source_file |> stem |> strict_modulize + +let lax_modname_from_source source_file = source_file |> stem |> modulize + +(* Check validity of module name *) +let is_unit_name name = Misc.Utf8_lexeme.is_valid_identifier name + +let check_unit_name file = + if not (is_unit_name (modname file)) then + Location.prerr_warning + (Location.in_file (source_file file)) + (Warnings.Bad_module_name (modname file)) + +let make ?(check_modname = true) ~source_file kind prefix = + let modname = strict_modname_from_source prefix in + let p = { modname; prefix; source_file; kind } in + if check_modname then check_unit_name p; + p + +module Artifact = struct + type t = { + source_file : filename option; + filename : filename; + modname : modname; + } + + let source_file x = x.source_file + let filename x = x.filename + let modname x = x.modname + let prefix x = Filename.remove_extension (filename x) + + let from_filename filename = + let modname = lax_modname_from_source filename in + { modname; filename; source_file = None } +end + +let mk_artifact ext u = + { + Artifact.filename = u.prefix ^ ext; + modname = u.modname; + source_file = Some u.source_file; + } + +let companion_artifact ext x = + { x with Artifact.filename = Artifact.prefix x ^ ext } + +let cmi f = mk_artifact ".cmi" f +let cmo f = mk_artifact ".cmo" f +let cmx f = mk_artifact ".cmx" f +let obj f = mk_artifact ".o" f +let cmt f = mk_artifact ".cmt" f +let cmti f = mk_artifact ".cmti" f +let annot f = mk_artifact ".annot" f +let companion_obj f = companion_artifact ".o" f +let companion_cmt f = companion_artifact ".cmt" f + +let companion_cmi f = + let prefix = Misc.chop_extensions f.Artifact.filename in + { f with Artifact.filename = prefix ^ ".cmi" } + +let mli_from_artifact f = Artifact.prefix f ^ ".mli" + +let mli_from_source u = + let prefix = Filename.remove_extension (source_file u) in + prefix ^ ".mli" + +let is_cmi f = Filename.check_suffix (Artifact.filename f) ".cmi" + +let find_normalized_cmi f = + let filename = modname f ^ ".cmi" in + let filename = Load_path.find_normalized filename in + { + Artifact.filename; + modname = modname f; + source_file = Some f.source_file; + } + +let report_error = function + | Invalid_encoding name -> + Location.errorf "Invalid encoding of output name: %s." name + +let () = + Location.register_error_of_exn (function + | Error err -> Some (report_error err) + | _ -> None) diff --git a/ocamlmerlin_mlx/ocaml/parsing/unit_info.mli b/ocamlmerlin_mlx/ocaml/parsing/unit_info.mli new file mode 100644 index 0000000..4117d24 --- /dev/null +++ b/ocamlmerlin_mlx/ocaml/parsing/unit_info.mli @@ -0,0 +1,173 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Florian Angeletti, projet Cambium, Inria Paris *) +(* *) +(* Copyright 2023 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(** This module centralize the handling of compilation files and their metadata. + + Maybe more importantly, this module provides functions for deriving module + names from strings or filenames. +*) + +(** {1:modname_from_strings Module name convention and computation} *) + +type intf_or_impl = Intf | Impl +type modname = string +type filename = string +type file_prefix = string + +type error = Invalid_encoding of filename +exception Error of error + +(** [modulize s] capitalizes the first letter of [s]. *) +val modulize: string -> modname + +(** [normalize s] uncapitalizes the first letter of [s]. *) +val normalize: string -> string + +(** [lax_modname_from_source filename] is [modulize stem] where [stem] is the + basename of the filename [filename] stripped from all its extensions. + For instance, [lax_modname_from_source "/pa.th/x.ml.pp"] is ["X"]. *) +val lax_modname_from_source: filename -> modname + +(** Same as {!lax_modname_from_source} but raises an {!error.Invalid_encoding} + error on filename with invalid utf8 encoding. *) +val strict_modname_from_source: filename -> modname + +(** {2:module_name_validation Module name validation function}*) + +(** [is_unit_name name] is true only if [name] can be used as a + valid module name. *) +val is_unit_name : modname -> bool + + +(** {1:unit_info Metadata for compilation unit} *) + +type t +(** Metadata for a compilation unit: + - the module name associated to the unit + - the filename prefix (dirname + basename with all extensions stripped) + for compilation artifacts + - the input source file + For instance, when calling [ocamlopt dir/x.mli -o target/y.cmi], + - the input source file is [dir/x.mli] + - the module name is [Y] + - the prefix is [target/y] +*) + +(** [source_file u] is the source file of [u]. *) +val source_file: t -> filename + +(** [prefix u] is the filename prefix of the unit. *) +val prefix: t -> file_prefix + +(** [modname u] or [artifact_modname a] is the module name of the unit + or compilation artifact.*) +val modname: t -> modname + +(** [kind u] is the kind (interface or implementation) of the unit. *) +val kind: t -> intf_or_impl + +(** [check_unit_name u] prints a warning if the derived module name [modname u] + should not be used as a module name as specified + by {!is_unit_name}[ ~strict:true]. *) +val check_unit_name : t -> unit + +(** [make ~check ~source_file kind prefix] associates both the + [source_file] and the module name {!lax_modname_from_source}[ target_prefix] + to the prefix filesystem path [prefix]. + + If [check_modname=true], this function emits a warning if the derived module + name is not valid according to {!check_unit_name}. +*) +val make: + ?check_modname:bool -> source_file:filename -> + intf_or_impl -> file_prefix -> t + +(** {1:artifact_function Build artifacts }*) +module Artifact: sig + type t +(** Metadata for a single compilation artifact: + - the module name associated to the artifact + - the filesystem path + - the input source file if it exists +*) + + (** [source_file a] is the source file of [a] if it exists. *) + val source_file: t -> filename option + + (** [prefix a] is the filename prefix of the compilation artifact. *) + val prefix: t -> file_prefix + + (** [filename u] is the filesystem path for a compilation artifact. *) + val filename: t -> filename + + (** [modname a] is the module name of the compilation artifact.*) + val modname: t -> modname + + (** [from_filename filename] reconstructs the module name + [lax_modname_from_source filename] associated to the artifact + [filename]. *) + val from_filename: filename -> t + +end + +(** {1:info_build_artifacts Derived build artifact metadata} *) + +(** Those functions derive a specific [artifact] metadata from an [unit] + metadata.*) +val cmi: t -> Artifact.t +val cmo: t -> Artifact.t +val cmx: t -> Artifact.t +val obj: t -> Artifact.t +val cmt: t -> Artifact.t +val cmti: t -> Artifact.t +val annot: t -> Artifact.t + +(** The functions below change the type of an artifact by updating the + extension of its filename. + Those functions purposefully do not cover all artifact kinds because we want + to track which artifacts are assumed to be bundled together. *) +val companion_obj: Artifact.t -> Artifact.t +val companion_cmt: Artifact.t -> Artifact.t + +val companion_cmi: Artifact.t -> Artifact.t +(** Beware that [companion_cmi a] strips all extensions from the + filename of [a] before adding the [".cmi"] suffix contrarily to + the other functions which only remove the rightmost extension. + In other words, the companion cmi of a file [something.d.cmo] is + [something.cmi] and not [something.d.cmi]. +*) + +(** {1:ml_mli_cmi_interaction Mli and cmi derived from implementation files } *) + +(** The compilation of module implementation changes in presence of mli and cmi + files, the function belows help to handle this. *) + +(** [mli_from_source u] is the interface source filename associated to the unit + [u]. The actual suffix depends on {!Config.interface_suffix}. +*) +val mli_from_source: t -> filename + +(** [mli_from_artifact t] is the name of the interface source file derived from + the artifact [t]. This variant is necessary when handling artifacts derived + from an unknown source files (e.g. packed modules). *) +val mli_from_artifact: Artifact.t -> filename + +(** Check if the artifact is a cmi *) +val is_cmi: Artifact.t -> bool + +(** [find_normalized_cmi u] finds in the load_path a file matching the module + name [modname u]. + @raise Not_found if no such cmi exists *) +val find_normalized_cmi: t -> Artifact.t diff --git a/ocamlmerlin_mlx/ocaml/preprocess/jsx_helper.ml b/ocamlmerlin_mlx/ocaml/preprocess/jsx_helper.ml index 1f94854..f1ab1d0 100644 --- a/ocamlmerlin_mlx/ocaml/preprocess/jsx_helper.ml +++ b/ocamlmerlin_mlx/ocaml/preprocess/jsx_helper.ml @@ -20,14 +20,6 @@ let mkjsxexp ~loc:loc' e = let pexp_attributes = [ Attr.mk ~loc { txt = "JSX"; loc } (PStr []) ] in { e with pexp_attributes } -let rec equal_longindent a b = - match a, b with - | Longident.Lident a, Longident.Lident b -> String.equal a b - | Ldot (pa, a), Ldot (pb, b) -> - String.equal a b && equal_longindent pa pb - | Lapply _, _ | _, Lapply _ -> assert false - | _ -> false - let make_jsx_element ~raise ~loc:_ ~tag ~end_tag ~props ~children () = let () = match end_tag with @@ -35,8 +27,8 @@ let make_jsx_element ~raise ~loc:_ ~tag ~end_tag ~props ~children () = | Some (end_tag, (_, end_loc_e)) -> let eq = match tag, end_tag with - | (`Module, _, s), (`Module, _, e) -> equal_longindent s e - | (`Value, _, s), (`Value, _, e) -> equal_longindent s e + | (`Module, _, s), (`Module, _, e) -> Longident.same s e + | (`Value, _, s), (`Value, _, e) -> Longident.same s e | _ -> false in if not eq then @@ -58,8 +50,12 @@ let make_jsx_element ~raise ~loc:_ ~tag ~end_tag ~props ~children () = | `Value, loc, txt -> mkexp ~loc (Pexp_ident { loc = make_loc loc; txt }) | `Module, loc, txt -> - let txt = Longident.Ldot (txt, "createElement") in - mkexp ~loc (Pexp_ident { loc = make_loc loc; txt }) + let loc' = make_loc loc in + let txt = + Longident.Ldot + ({ txt; loc = loc' }, { txt = "createElement"; loc = loc' }) + in + mkexp ~loc (Pexp_ident { loc = loc'; txt }) in let props = let prop_exp ~loc name = diff --git a/ocamlmerlin_mlx/ocaml/preprocess/lexer_raw.mli b/ocamlmerlin_mlx/ocaml/preprocess/lexer_raw.mli index 67965e9..3942ee7 100644 --- a/ocamlmerlin_mlx/ocaml/preprocess/lexer_raw.mli +++ b/ocamlmerlin_mlx/ocaml/preprocess/lexer_raw.mli @@ -22,7 +22,14 @@ type error = | Unterminated_string_in_comment of Location.t * Location.t | Empty_character_literal | Keyword_as_label of string + | Capitalized_label of string | Invalid_literal of string + | Invalid_directive of string * string option + | Invalid_encoding of string + | Invalid_char_in_ident of Uchar.t + | Non_lowercase_delimiter of string + | Capitalized_raw_identifier of string + | Unknown_keyword of string exception Error of error * Location.t (* Keywords, manipulated by extensions *) diff --git a/ocamlmerlin_mlx/ocaml/preprocess/lexer_raw.mll b/ocamlmerlin_mlx/ocaml/preprocess/lexer_raw.mll index a13899d..6d9d4a4 100644 --- a/ocamlmerlin_mlx/ocaml/preprocess/lexer_raw.mll +++ b/ocamlmerlin_mlx/ocaml/preprocess/lexer_raw.mll @@ -29,7 +29,14 @@ type error = | Unterminated_string_in_comment of Location.t * Location.t | Empty_character_literal | Keyword_as_label of string + | Capitalized_label of string | Invalid_literal of string + | Invalid_directive of string * string option + | Invalid_encoding of string + | Invalid_char_in_ident of Uchar.t + | Non_lowercase_delimiter of string + | Capitalized_raw_identifier of string + | Unknown_keyword of string exception Error of error * Location.t @@ -51,6 +58,9 @@ let rec (>>=) (m : 'a result) (f : 'a -> 'b result) : 'b result = Refill (fun () -> u () >>= f) | Fail _ as e -> e +let (let*) = (>>=) +let (let+) = fun m f -> (>>=) m (fun x -> return (f x)) + type preprocessor = (Lexing.lexbuf -> Parser_raw.token) -> Lexing.lexbuf -> Parser_raw.token type state = { @@ -79,68 +89,97 @@ let rec catch m f = match m with (* The table of keywords *) -let keyword_table : keywords = - create_hashtable 149 [ - "and", AND; - "as", AS; - "assert", ASSERT; - "begin", BEGIN; - "class", CLASS; - "constraint", CONSTRAINT; - "do", DO; - "done", DONE; - "downto", DOWNTO; - "else", ELSE; - "end", END; - "exception", EXCEPTION; - "external", EXTERNAL; - "false", FALSE; - "for", FOR; - "fun", FUN; - "function", FUNCTION; - "functor", FUNCTOR; - "if", IF; - "in", IN; - "include", INCLUDE; - "inherit", INHERIT; - "initializer", INITIALIZER; - "lazy", LAZY; - "let", LET; - "match", MATCH; - "method", METHOD; - "module", MODULE; - "mutable", MUTABLE; - "new", NEW; - "nonrec", NONREC; - "object", OBJECT; - "of", OF; - "open", OPEN; - "or", OR; +let all_keywords = + let v5_3 = Some (5,3) in + let v1_0 = Some (1,0) in + let v1_6 = Some (1,6) in + let v4_2 = Some (4,2) in + let always = None in + [ + "and", AND, always; + "as", AS, always; + "assert", ASSERT, v1_6; + "begin", BEGIN, always; + "class", CLASS, v1_0; + "constraint", CONSTRAINT, v1_0; + "do", DO, always; + "done", DONE, always; + "downto", DOWNTO, always; + "effect", EFFECT, v5_3; + "else", ELSE, always; + "end", END, always; + "exception", EXCEPTION, always; + "external", EXTERNAL, always; + "false", FALSE, always; + "for", FOR, always; + "fun", FUN, always; + "function", FUNCTION, always; + "functor", FUNCTOR, always; + "if", IF, always; + "in", IN, always; + "include", INCLUDE, always; + "inherit", INHERIT, v1_0; + "initializer", INITIALIZER, v1_0; + "lazy", LAZY, v1_6; + "let", LET, always; + "match", MATCH, always; + "method", METHOD, v1_0; + "module", MODULE, always; + "mutable", MUTABLE, always; + "new", NEW, v1_0; + "nonrec", NONREC, v4_2; + "object", OBJECT, v1_0; + "of", OF, always; + "open", OPEN, always; + "or", OR, always; (* "parser", PARSER; *) - "private", PRIVATE; - "rec", REC; - "sig", SIG; - "struct", STRUCT; - "then", THEN; - "to", TO; - "true", TRUE; - "try", TRY; - "type", TYPE; - "val", VAL; - "virtual", VIRTUAL; - "when", WHEN; - "while", WHILE; - "with", WITH; - - "lor", INFIXOP3("lor"); (* Should be INFIXOP2 *) - "lxor", INFIXOP3("lxor"); (* Should be INFIXOP2 *) - "mod", INFIXOP3("mod"); - "land", INFIXOP3("land"); - "lsl", INFIXOP4("lsl"); - "lsr", INFIXOP4("lsr"); - "asr", INFIXOP4("asr"); + "private", PRIVATE, v1_0; + "rec", REC, always; + "sig", SIG, always; + "struct", STRUCT, always; + "then", THEN, always; + "to", TO, always; + "true", TRUE, always; + "try", TRY, always; + "type", TYPE, always; + "val", VAL, always; + "virtual", VIRTUAL, v1_0; + "when", WHEN, always; + "while", WHILE, always; + "with", WITH, always; + + "lor", INFIXOP3("lor"), always; (* Should be INFIXOP2 *) + "lxor", INFIXOP3("lxor"), always; (* Should be INFIXOP2 *) + "mod", INFIXOP3("mod"), always; + "land", INFIXOP3("land"), always; + "lsl", INFIXOP4("lsl"), always; + "lsr", INFIXOP4("lsr"), always; + "asr", INFIXOP4("asr"), always ] +let keyword_table = Hashtbl.create 149 + +let populate_keywords (version,keywords) = + let greater (x:(int*int) option) (y:(int*int) option) = + match x, y with + | None, _ | _, None -> true + | Some x, Some y -> x >= y + in + let tbl = keyword_table in + Hashtbl.clear tbl; + let add_keyword (name, token, since) = + if greater version since then Hashtbl.replace tbl name (Some token) + in + List.iter ~f:add_keyword all_keywords; + List.iter ~f:(fun name -> + match List.find ~f:(fun (n,_,_) -> n = name) all_keywords with + | (_,tok,_) -> Hashtbl.replace tbl name (Some tok) + | exception Not_found -> Hashtbl.replace tbl name None + ) keywords + +(* FIXME: Merlin: this could be made configurable *) +let () = populate_keywords (None,[]) + let keywords l = create_hashtable 11 l let list_keywords = @@ -149,15 +188,52 @@ let list_keywords = fun keywords -> Hashtbl.fold add_kw keywords init +let store_string_char buf c = Buffer.add_char buf c +let store_string_utf_8_uchar buf u = Buffer.add_utf_8_uchar buf u +let store_string buf s = Buffer.add_string buf s +let store_substring buf s ~pos ~len = Buffer.add_substring buf s pos len + +let store_lexeme buf lexbuf = store_string buf (Lexing.lexeme lexbuf) +let store_normalized_newline buf newline = + (* #12502: we normalize "\r\n" to "\n" at lexing time, + to avoid behavior difference due to OS-specific + newline characters in string literals. + + (For example, Git for Windows will translate \n in versioned + files into \r\n sequences when checking out files on Windows. If + your code contains multiline quoted string literals, the raw + content of the string literal would be different between Git for + Windows users and all other users. Thanks to newline + normalization, the value of the literal as a string constant will + be the same no matter which programming tools are used.) + + Many programming languages use the same approach, for example + Java, Javascript, Kotlin, Python, Swift and C++. + *) + (* Our 'newline' regexp accepts \r*\n, but we only wish + to normalize \r?\n into \n -- see the discussion in #12502. + All carriage returns except for the (optional) last one + are reproduced in the output. We implement this by skipping + the first carriage return, if any. *) + let len = String.length newline in + if len = 1 + then store_string_char buf '\n' + else store_substring buf newline ~pos:1 ~len:(len - 1) + (* To store the position of the beginning of a string and comment *) let in_comment state = state.comment_start_loc <> [] +let print_warnings = ref true (* Escaped chars are interpreted in strings unless they are in comments. *) -let store_escaped_uchar state lexbuf u = +let store_escaped_char state lexbuf c = if in_comment state - then Buffer.add_string state.buffer (Lexing.lexeme lexbuf) - else Buffer.add_utf_8_uchar state.buffer u + then store_lexeme state.buffer lexbuf + else store_string_char state.buffer c +let store_escaped_uchar state lexbuf u = + if in_comment state + then store_lexeme state.buffer lexbuf + else store_string_utf_8_uchar state.buffer u let compute_quoted_string_idloc {Location.loc_start = orig_loc; _ } shift id = let id_start_pos = orig_loc.Lexing.pos_cnum + shift in @@ -184,6 +260,16 @@ let wrap_string_lexer f state lexbuf = state.string_start_loc <- Location.none; return (Buffer.contents state.buffer, loc) +let wrap_comment_lexer state comment lexbuf = + let start_loc = Location.curr lexbuf in + state.comment_start_loc <- [start_loc]; + Buffer.reset state.buffer; + let+ end_loc = comment state lexbuf in + let s = Buffer.contents state.buffer in + Buffer.reset state.buffer; + s, + { start_loc with Location.loc_end = end_loc.Location.loc_end } + (* to translate escape sequences *) let digit_value c = @@ -257,16 +343,65 @@ let uchar_for_uchar_escape lexbuf = illegal_escape lexbuf (Printf.sprintf "%X is not a Unicode scalar value" cp) +let validate_encoding lexbuf raw_name = + match Utf8_lexeme.normalize raw_name with + | Error _ -> fail lexbuf (Invalid_encoding raw_name) + | Ok name -> return name + +let ident_for_extended lexbuf raw_name = + let* name = validate_encoding lexbuf raw_name in + match Utf8_lexeme.validate_identifier name with + | Utf8_lexeme.Valid -> return name + | Utf8_lexeme.Invalid_character u -> fail lexbuf (Invalid_char_in_ident u) + | Utf8_lexeme.Invalid_beginning _ -> + assert false (* excluded by the regexps *) + +let validate_delim lexbuf raw_name = + let* name = validate_encoding lexbuf raw_name in + if Utf8_lexeme.is_lowercase name then return name + else fail lexbuf (Non_lowercase_delimiter name) + +let validate_ext lexbuf name = + let* name = validate_encoding lexbuf name in + match Utf8_lexeme.validate_identifier ~with_dot:true name with + | Utf8_lexeme.Valid -> return name + | Utf8_lexeme.Invalid_character u -> fail lexbuf (Invalid_char_in_ident u) + | Utf8_lexeme.Invalid_beginning _ -> + assert false (* excluded by the regexps *) + +let lax_delim raw_name = + match Utf8_lexeme.normalize raw_name with + | Error _ -> None + | Ok name -> + if Utf8_lexeme.is_lowercase name then Some name + else None + let keyword_or state s default = try Hashtbl.find state.keywords s - with Not_found -> try Hashtbl.find keyword_table s - with Not_found -> default + with Not_found -> + try Option.value ~default @@ Hashtbl.find keyword_table s + with Not_found -> default + +let is_keyword name = + Hashtbl.mem keyword_table name + +let () = Lexer.is_keyword_ref := is_keyword -let is_keyword name = Hashtbl.mem keyword_table name +let find_keyword lexbuf name default = + match Hashtbl.find keyword_table name with + | Some x -> return x + | None -> fail lexbuf (Unknown_keyword name) + | exception Not_found -> return default -let check_label_name lexbuf name = - if is_keyword name - then fail lexbuf (Keyword_as_label name) +let find_keyword state lexbuf ~name ~default = + try return @@ Hashtbl.find state.keywords name + with Not_found -> find_keyword lexbuf name default + +let check_label_name ?(raw_escape=false) lexbuf name = + if Utf8_lexeme.is_capitalized name then + fail lexbuf (Capitalized_label name) + else if not raw_escape && is_keyword name then + fail lexbuf (Keyword_as_label name) else return name (* Update the current location with file name and line number. *) @@ -284,15 +419,13 @@ let update_loc lexbuf _file line absolute chars = pos_bol = pos.pos_cnum - chars; } -(* Warn about Latin-1 characters used in idents *) -let warn_latin1 lexbuf = - Location.deprecated (Location.curr lexbuf) - "ISO-Latin1 characters in identifiers" +(* TODO Merlin should we support this ?*) +let handle_docstrings = ref false (* Error report *) -open Format +open Format_doc let prepare_error loc = function | Illegal_character c -> @@ -321,13 +454,44 @@ let prepare_error loc = function let msg = "Illegal empty character literal ''" in let sub = [Location.msg - "Hint: Did you mean ' ' or a type variable 'a?"] in + "@{Hint@}: Did you mean %a or a type variable %a?" + Style.inline_code "' '" + Style.inline_code "'a" + ] in Location.error ~loc ~sub msg | Keyword_as_label kwd -> Location.errorf ~loc - "`%s' is a keyword, it cannot be used as label name" kwd + "%a is a keyword, it cannot be used as label name" Style.inline_code kwd + | Capitalized_label lbl -> + Location.errorf ~loc + "%a cannot be used as label name, \ + it must start with a lowercase letter" Style.inline_code lbl | Invalid_literal s -> Location.errorf ~loc "Invalid literal %s" s + | Invalid_directive (dir, explanation) -> + Location.errorf ~loc "Invalid lexer directive %S%t" dir + (fun ppf -> match explanation with + | None -> () + | Some expl -> fprintf ppf ": %s" expl) + | Invalid_encoding s -> + Location.errorf ~loc "Invalid encoding of identifier %s." s + | Invalid_char_in_ident u -> + Location.errorf ~loc "Invalid character U+%04X in identifier" + (Uchar.to_int u) + | Capitalized_raw_identifier lbl -> + Location.errorf ~loc + "%a cannot be used as a raw identifier, \ + it must start with a lowercase letter" Style.inline_code lbl + | Non_lowercase_delimiter name -> + Location.errorf ~loc + "%a cannot be used as a quoted string delimiter,@ \ + it must contain only lowercase letters." + Style.inline_code name + | Unknown_keyword name -> + Location.errorf ~loc + "%a has been defined as an additional keyword.@ \ + This version of OCaml does not support this keyword." + Style.inline_code name (* FIXME: Invalid_directive? *) let () = @@ -345,30 +509,42 @@ let newline = ('\013'* '\010') let blank = [' ' '\009' '\012'] let lowercase = ['a'-'z' '_'] let uppercase = ['A'-'Z'] -let identchar = ['A'-'Z' 'a'-'z' '_' '\'' '0'-'9' '\128'-'\255'] +let identstart = lowercase | uppercase +let identchar = ['A'-'Z' 'a'-'z' '_' '\'' '0'-'9'] +let utf8 = ['\192'-'\255'] ['\128'-'\191']* +let identstart_ext = identstart | utf8 +let identchar_ext = identchar | utf8 +let delim_ext = (lowercase | uppercase | utf8)* +(* ascii uppercase letters in quoted string delimiters ({delim||delim}) are + rejected by the delimiter validation function, we accept them temporarily to + have the same error message for ascii and non-ascii uppercase letters *) + +(* TODO REMOVE *) let lowercase_latin1 = ['a'-'z' '\223'-'\246' '\248'-'\255' '_'] let uppercase_latin1 = ['A'-'Z' '\192'-'\214' '\216'-'\222'] let identchar_latin1 = identchar (*['A'-'Z' 'a'-'z' '_' '\192'-'\214' '\216'-'\246' '\248'-'\255' '\'' '0'-'9']*) +(* END TODO REMOVE *) + let symbolchar = ['!' '$' '%' '&' '*' '+' '-' '.' '/' ':' '<' '=' '>' '?' '@' '^' '|' '~'] -let symbolcharnopercent = +let symbolcharnopercent = (* TODO ???? *) ['!' '$' '&' '*' '+' '-' '.' '/' ':' '<' '=' '>' '?' '@' '^' '|' '~'] +let dotsymbolchar = + ['!' '$' '%' '&' '*' '+' '-' '/' ':' '=' '>' '?' '@' '^' '|'] +let symbolchar_or_hash = + symbolchar | '#' let symbolchar_no_prefix = ['$' '%' '&' '*' '+' '-' '.' '/' ':' '<' '=' '>' '?' '@' '^' '|' '~'] let symbolchar_no_greater = ['!' '$' '%' '&' '*' '+' '-' '.' '/' ':' '<' '=' '?' '@' '^' '|' '~'] let symbolchar_no_less = ['!' '$' '%' '&' '*' '+' '-' '.' '/' ':' '=' '>' '?' '@' '^' '|' '~'] -let dotsymbolchar = - ['!' '$' '%' '&' '*' '+' '-' '/' ':' '=' '>' '?' '@' '^' '|'] -let symbolchar_or_hash = - symbolchar | '#' let kwdopchar = ['$' '&' '*' '+' '-' '/' '<' '=' '>' '@' '^' '|'] -let ident = (lowercase | uppercase) identchar* -let extattrident = ident ('.' ident)* +let ident_ext = identstart_ext identchar_ext* +let extattrident = ident_ext ('.' ident_ext)* let decimal_literal = ['0'-'9'] ['0'-'9' '_']* @@ -392,10 +568,12 @@ let hex_float_literal = ('.' ['0'-'9' 'A'-'F' 'a'-'f' '_']* )? (['p' 'P'] ['+' '-']? ['0'-'9'] ['0'-'9' '_']* )? let literal_modifier = ['G'-'Z' 'g'-'z'] +let raw_ident_escape = "\\#" refill {fun k lexbuf -> Refill (fun () -> k lexbuf)} + rule token state = parse | ("\\" as bs) newline { match state.preprocessor with @@ -412,11 +590,11 @@ rule token state = parse | blank + { token state lexbuf } | ".<" - { return DOTLESS } + { return METAOCAML_BRACKET_OPEN } | ">." { return (keyword_or state (Lexing.lexeme lexbuf) (INFIXOP0 ">.")) } | ".~" - { return (keyword_or state (Lexing.lexeme lexbuf) DOTTILDE) } + { return (keyword_or state (Lexing.lexeme lexbuf) METAOCAML_ESCAPE) } | "_" { return UNDERSCORE } | "~" @@ -426,42 +604,44 @@ rule token state = parse { fail lexbuf (Reserved_sequence (".~", Some "is reserved for use in MetaOCaml")) } *) - | "~" (lowercase identchar * as name) ':' + | "~" (identstart identchar * as name) ':' { lABEL (check_label_name lexbuf name) } - | "~" (lowercase_latin1 identchar_latin1 * as name) ':' - { warn_latin1 lexbuf; - return (LABEL name) } + | "~" (raw_ident_escape? as escape) (ident_ext as raw_name) ':' + { ident_for_extended lexbuf raw_name + >>= check_label_name ~raw_escape:(escape<>"") lexbuf + |> lABEL } | "?" { return QUESTION } | "?" (lowercase identchar * as name) ':' { oPTLABEL (check_label_name lexbuf name) } - | "?" (lowercase_latin1 identchar_latin1 * as name) ':' - { warn_latin1 lexbuf; return (OPTLABEL name) } + | "?" (raw_ident_escape? as escape) (ident_ext as raw_name) ':' + { ident_for_extended lexbuf raw_name + >>= check_label_name ~raw_escape:(escape<>"") lexbuf + |> oPTLABEL } + (* | raw_ident_escape (lowercase identchar * as name) + { return (LIDENT name) } *) | lowercase identchar * as name - { return (try Hashtbl.find state.keywords name - with Not_found -> - try Hashtbl.find keyword_table name - with Not_found -> - LIDENT name) } - | lowercase_latin1 identchar_latin1 * as name - { warn_latin1 lexbuf; return (LIDENT name) } + { (find_keyword state lexbuf ~name ~default:(LIDENT name)) } | "<" (lowercase identchar * as name) { return (JSX_LIDENT name) } | "<" "/" (lowercase identchar * as name) { return (JSX_LIDENT_E name) } | uppercase identchar * as name { (* Capitalized keywords for OUnit *) - return (try Hashtbl.find state.keywords name - with Not_found -> - try Hashtbl.find keyword_table name - with Not_found -> - UIDENT name) } - | uppercase_latin1 identchar_latin1 * as name - { warn_latin1 lexbuf; return (UIDENT name) } + (find_keyword state lexbuf ~name ~default:(UIDENT name))} | "<" (uppercase identchar * as name) { return (JSX_UIDENT name) } | "<" "/" (uppercase identchar * as name) { return (JSX_UIDENT_E name) } + | (raw_ident_escape? as escape) (ident_ext as raw_name) + { let* name = ident_for_extended lexbuf raw_name in + if Utf8_lexeme.is_capitalized name then begin + if escape="" then return (UIDENT name) + else return (UIDENT name) + (* we don't have capitalized keywords, and thus no needs for + capitalized raw identifiers. *) + (*fail lexbuf (Capitalized_raw_identifier name)*) + end else return (LIDENT name) } | int_literal as lit { return (INT (lit, None)) } | (int_literal as lit) (literal_modifier as modif) { return (INT (lit, Some modif)) } @@ -474,37 +654,36 @@ rule token state = parse | "\"" { wrap_string_lexer string state lexbuf >>= fun (str, loc) -> return (STRING (str, loc, None)) } - | "\'\'" - { wrap_string_lexer string state lexbuf >>= fun (str, loc) -> - return (STRING (str, loc, None)) } - | "{" (lowercase* as delim) "|" - { wrap_string_lexer (quoted_string delim) state lexbuf - >>= fun (str, loc) -> - return (STRING (str, loc, Some delim)) } - | "{%" (extattrident as id) "|" + | "{" (delim_ext as raw_name) '|' + { let* delim = validate_delim lexbuf raw_name in + let+ s, loc = wrap_string_lexer (quoted_string delim) state lexbuf in + STRING (s, loc, Some delim) } + | "{%" (extattrident as raw_id) "|" { let orig_loc = Location.curr lexbuf in - wrap_string_lexer (quoted_string "") state lexbuf - >>= fun (str, loc) -> + let* id = validate_ext lexbuf raw_id in + let+ s, loc =wrap_string_lexer (quoted_string "") state lexbuf in let idloc = compute_quoted_string_idloc orig_loc 2 id in - return (QUOTED_STRING_EXPR (id, idloc, str, loc, Some "")) } - | "{%" (extattrident as id) blank+ (lowercase* as delim) "|" + QUOTED_STRING_EXPR (id, idloc, s, loc, Some "") } + | "{%" (extattrident as raw_id) blank+ (delim_ext as raw_delim) "|" { let orig_loc = Location.curr lexbuf in - wrap_string_lexer (quoted_string delim) state lexbuf - >>= fun (str, loc) -> + let* id = validate_ext lexbuf raw_id in + let* delim = validate_delim lexbuf raw_delim in + let+ s, loc = wrap_string_lexer (quoted_string delim) state lexbuf in let idloc = compute_quoted_string_idloc orig_loc 2 id in - return (QUOTED_STRING_EXPR (id, idloc, str, loc, Some delim)) } - | "{%%" (extattrident as id) "|" + QUOTED_STRING_EXPR (id, idloc, s, loc, Some delim) } + | "{%%" (extattrident as raw_id) "|" { let orig_loc = Location.curr lexbuf in - wrap_string_lexer (quoted_string "") state lexbuf - >>= fun (str, loc) -> + let* id = validate_ext lexbuf raw_id in + let+ s, loc = wrap_string_lexer (quoted_string "") state lexbuf in let idloc = compute_quoted_string_idloc orig_loc 3 id in - return (QUOTED_STRING_ITEM (id, idloc, str, loc, Some "")) } - | "{%%" (extattrident as id) blank+ (lowercase* as delim) "|" + QUOTED_STRING_ITEM (id, idloc, s, loc, Some "") } + | "{%%" (extattrident as raw_id) blank+ (delim_ext as raw_delim) "|" { let orig_loc = Location.curr lexbuf in - wrap_string_lexer (quoted_string delim) state lexbuf - >>= fun (str, loc) -> + let* id = validate_ext lexbuf raw_id in + let* delim = validate_delim lexbuf raw_delim in + let+ s, loc = wrap_string_lexer (quoted_string delim) state lexbuf in let idloc = compute_quoted_string_idloc orig_loc 3 id in - return (QUOTED_STRING_ITEM (id, idloc, str, loc, Some delim)) } + QUOTED_STRING_ITEM (id, idloc, s, loc, Some delim) } | "\'" newline "\'" { update_loc lexbuf None 1 false 1; (* newline is ('\013'* '\010') *) @@ -513,34 +692,45 @@ rule token state = parse { return (CHAR c) } | "\'\\" (['\\' '\'' '\"' 'n' 't' 'b' 'r' ' '] as c) "\'" { return (CHAR (char_for_backslash c)) } - | "\'\\" 'o' ['0'-'3'] ['0'-'7'] ['0'-'7'] "\'" - { char_for_octal_code state lexbuf 3 >>= fun c -> return (CHAR c) } | "\'\\" ['0'-'9'] ['0'-'9'] ['0'-'9'] "\'" { char_for_decimal_code state lexbuf 2 >>= fun c -> return (CHAR c) } + | "\'\\" 'o' ['0'-'3'] ['0'-'7'] ['0'-'7'] "\'" + { char_for_octal_code state lexbuf 3 >>= fun c -> return (CHAR c) } | "\'\\" 'x' ['0'-'9' 'a'-'f' 'A'-'F'] ['0'-'9' 'a'-'f' 'A'-'F'] "\'" { return (CHAR (char_for_hexadecimal_code lexbuf 3)) } - | "\'" ("\\" _ as esc) + | "\'" ("\\" [^ '#'] as esc) { fail lexbuf (Illegal_escape (esc, None)) } | "(*" - { let start_loc = Location.curr lexbuf in - state.comment_start_loc <- [start_loc]; - Buffer.reset state.buffer; - comment state lexbuf >>= fun end_loc -> - let s = Buffer.contents state.buffer in - Buffer.reset state.buffer; - return (COMMENT (s, { start_loc with - Location.loc_end = end_loc.Location.loc_end })) + { let+ s, loc = wrap_comment_lexer state comment lexbuf in + COMMENT (s, loc) } + | "(**" + { let+ s, loc = wrap_comment_lexer state comment lexbuf in + if !handle_docstrings then + DOCSTRING (Docstrings.docstring s loc) + else + COMMENT ("*" ^ s, loc) } + | "(**" (('*'+) as stars) + { let+ s, loc = + wrap_comment_lexer + state + (fun state lexbuf -> + store_string state.buffer ("*" ^ stars); + comment state lexbuf) + lexbuf + in + COMMENT (s, loc) } | "(*)" - { let loc = Location.curr lexbuf in - Location.prerr_warning loc Warnings.Comment_start; - state.comment_start_loc <- [loc]; - Buffer.reset state.buffer; - comment state lexbuf >>= fun end_loc -> - let s = Buffer.contents state.buffer in - Buffer.reset state.buffer; - return (COMMENT (s, { loc with Location.loc_end = end_loc.Location.loc_end })) - } + { if !print_warnings then + Location.prerr_warning (Location.curr lexbuf) Warnings.Comment_start; + let+ s, loc = wrap_comment_lexer state comment lexbuf in + COMMENT (s, loc) } + | "(*" (('*'*) as stars) "*)" + { if !handle_docstrings && stars="" then + (* (**) is an empty docstring *) + return (DOCSTRING(Docstrings.docstring "" (Location.curr lexbuf))) + else + return (COMMENT (stars, Location.curr lexbuf)) } | "*)" { let loc = Location.curr lexbuf in Location.prerr_warning loc Warnings.Comment_not_end; @@ -549,13 +739,12 @@ rule token state = parse lexbuf.lex_curr_p <- { curpos with pos_cnum = curpos.pos_cnum - 1 }; return STAR } - | "#" [' ' '\t']* (['0'-'9']+ as num) [' ' '\t']* - ("\"" ([^ '\010' '\013' '\"' ] * as name) "\"")? - [^ '\010' '\013'] * newline - { update_loc lexbuf name (int_of_string num) true 0; - token state lexbuf + | "#" + { let at_beginning_of_line pos = (pos.pos_cnum = pos.pos_bol) in + if not (at_beginning_of_line lexbuf.lex_start_p) + then return HASH + else try directive state lexbuf with Failure _ -> return HASH } - | "#" { return HASH } | "&" { return AMPERSAND } | "&&" { return AMPERAMPER } | "`" { return BACKQUOTE } @@ -575,7 +764,6 @@ rule token state = parse | ";" { return SEMI } | ";;" { return SEMISEMI } | "<" { return LESS } - | "" { return GREATER } | "/>" { return SLASHGREATER } + | "}" { return GREATERRBRACE } | "[@" { return LBRACKETAT } @@ -642,18 +831,35 @@ rule token state = parse | _ as illegal_char { fail lexbuf (Illegal_character illegal_char) } +and directive state = parse + | ([' ' '\t']* (['0'-'9']+ as num) [' ' '\t']* + ("\"" ([^ '\010' '\013' '\"' ] * as name) "\"") as directive) + [^ '\010' '\013'] * + { + match int_of_string num with + | exception _ -> + (* PR#7165 *) + let explanation = "line number out of range" in + fail lexbuf (Invalid_directive ("#" ^ directive, Some explanation)) + | line_num -> + (* Documentation says that the line number should be + positive, but we have never guarded against this and it + might have useful hackish uses. *) + update_loc lexbuf (Some name) (line_num - 1) true 0; + token state lexbuf + } and comment state = parse "(*" { state.comment_start_loc <- (Location.curr lexbuf) :: state.comment_start_loc; - Buffer.add_string state.buffer (Lexing.lexeme lexbuf); - comment state lexbuf - } + store_lexeme state.buffer lexbuf; + comment state lexbuf + } | "*)" { match state.comment_start_loc with | [] -> assert false | [_] -> state.comment_start_loc <- []; return (Location.curr lexbuf) | _ :: l -> state.comment_start_loc <- l; - Buffer.add_string state.buffer (Lexing.lexeme lexbuf); + store_lexeme state.buffer lexbuf; comment state lexbuf } | "\"" @@ -674,52 +880,54 @@ and comment state = parse | e -> fail_loc e l ) ) >>= fun _loc -> - state.string_start_loc <- Location.none; - Buffer.add_string buffer (String.escaped (Buffer.contents state.buffer)); - state.buffer <- buffer; - Buffer.add_char state.buffer '\"'; - comment state lexbuf } - | "{" ('%' '%'? extattrident blank*)? lowercase* "|" - { - let delim = Lexing.lexeme lexbuf in - let delim = String.sub delim ~pos:1 ~len:(String.length delim - 2) in - state.string_start_loc <- Location.curr lexbuf; - Buffer.add_string state.buffer (Lexing.lexeme lexbuf); - (catch (quoted_string delim state lexbuf) (fun e l -> match e with - | Unterminated_string -> - begin match state.comment_start_loc with - | [] -> assert false - | loc :: _ -> - let start = List.hd (List.rev state.comment_start_loc) in - state.comment_start_loc <- []; - fail_loc (Unterminated_string_in_comment (start, l)) loc - end - | e -> fail_loc e l - ) - ) >>= fun _loc -> state.string_start_loc <- Location.none; - Buffer.add_char state.buffer '|'; - Buffer.add_string state.buffer delim; - Buffer.add_char state.buffer '}'; + Buffer.add_string buffer (String.escaped (Buffer.contents state.buffer)); + state.buffer <- buffer; + store_string_char state.buffer '\"'; comment state lexbuf } + | "{" ('%' '%'? extattrident blank*)? (delim_ext as raw_delim) "|" + { match lax_delim raw_delim with + | None -> store_lexeme state.buffer lexbuf; comment state lexbuf + | Some delim -> + state.string_start_loc <- Location.curr lexbuf; + Buffer.add_string state.buffer (Lexing.lexeme lexbuf); + (catch (quoted_string delim state lexbuf) (fun e l -> match e with + | Unterminated_string -> + begin match state.comment_start_loc with + | [] -> assert false + | loc :: _ -> + let start = List.hd (List.rev state.comment_start_loc) in + state.comment_start_loc <- []; + fail_loc (Unterminated_string_in_comment (start, l)) loc + end + | e -> fail_loc e l + ) + ) >>= fun _loc -> + state.string_start_loc <- Location.none; + Buffer.add_char state.buffer '|'; + Buffer.add_string state.buffer delim; + Buffer.add_char state.buffer '}'; + comment state lexbuf } - | "''" - { Buffer.add_string state.buffer (Lexing.lexeme lexbuf); comment state lexbuf } - | "'" newline "'" + | "\'\'" + { store_lexeme state.buffer lexbuf; comment state lexbuf } + | "\'" (newline as nl) "\'" { update_loc lexbuf None 1 false 1; - Buffer.add_string state.buffer (Lexing.lexeme lexbuf); + store_string_char state.buffer '\''; + store_normalized_newline state.buffer nl; + store_string_char state.buffer '\''; comment state lexbuf } - | "'" [^ '\\' '\'' '\010' '\013' ] "'" - { Buffer.add_string state.buffer (Lexing.lexeme lexbuf); comment state lexbuf } - | "'\\" ['\\' '\"' '\'' 'n' 't' 'b' 'r' ' '] "'" - { Buffer.add_string state.buffer (Lexing.lexeme lexbuf); comment state lexbuf } - | "'\\" ['0'-'9'] ['0'-'9'] ['0'-'9'] "'" - { Buffer.add_string state.buffer (Lexing.lexeme lexbuf); comment state lexbuf } + | "\'" [^ '\\' '\'' '\010' '\013' ] "\'" + { store_lexeme state.buffer lexbuf; comment state lexbuf } + | "\'\\" ['\\' '\"' '\'' 'n' 't' 'b' 'r' ' '] "\'" + { store_lexeme state.buffer lexbuf; comment state lexbuf } + | "\'\\" ['0'-'9'] ['0'-'9'] ['0'-'9'] "\'" + { store_lexeme state.buffer lexbuf; comment state lexbuf } | "\'\\" 'o' ['0'-'3'] ['0'-'7'] ['0'-'7'] "\'" - { Buffer.add_string state.buffer (Lexing.lexeme lexbuf); comment state lexbuf } - | "'\\" 'x' ['0'-'9' 'a'-'f' 'A'-'F'] ['0'-'9' 'a'-'f' 'A'-'F'] "'" - { Buffer.add_string state.buffer (Lexing.lexeme lexbuf); comment state lexbuf } + { store_lexeme state.buffer lexbuf; comment state lexbuf } + | "\'\\" 'x' ['0'-'9' 'a'-'f' 'A'-'F'] ['0'-'9' 'a'-'f' 'A'-'F'] "\'" + { store_lexeme state.buffer lexbuf; comment state lexbuf } | eof { match state.comment_start_loc with | [] -> assert false @@ -728,34 +936,42 @@ and comment state = parse state.comment_start_loc <- []; fail_loc (Unterminated_comment start) loc } - | newline + | newline as nl { update_loc lexbuf None 1 false 0; - Buffer.add_string state.buffer (Lexing.lexeme lexbuf); + store_normalized_newline state.buffer nl; comment state lexbuf } - | (lowercase | uppercase) identchar * - { Buffer.add_string state.buffer (Lexing.lexeme lexbuf); comment state lexbuf } + | ident_ext + { store_lexeme state.buffer lexbuf; comment state lexbuf } | _ - { Buffer.add_string state.buffer (Lexing.lexeme lexbuf); comment state lexbuf } + { store_lexeme state.buffer lexbuf; comment state lexbuf } and string state = parse '\"' { return lexbuf.lex_start_p } - | '\\' newline ([' ' '\t'] * as space) + | '\\' (newline as nl) ([' ' '\t'] * as space) { update_loc lexbuf None 1 false (String.length space); + if in_comment state then begin + store_string_char state.buffer '\\'; + store_normalized_newline state.buffer nl; + store_string state.buffer space; + end; string state lexbuf } - | '\\' ['\\' '\'' '\"' 'n' 't' 'b' 'r' ' '] - { Buffer.add_char state.buffer - (char_for_backslash (Lexing.lexeme_char lexbuf 1)); + | '\\' (['\\' '\'' '\"' 'n' 't' 'b' 'r' ' '] as c) + { store_escaped_char state lexbuf (char_for_backslash c); string state lexbuf } | '\\' ['0'-'9'] ['0'-'9'] ['0'-'9'] { char_for_decimal_code state lexbuf 1 >>= fun c -> - Buffer.add_char state.buffer c; - string state lexbuf } + store_escaped_char state lexbuf c; + string state lexbuf } + | '\\' 'o' ['0'-'7'] ['0'-'7'] ['0'-'7'] + { char_for_octal_code state lexbuf 2 >>= fun c -> + store_escaped_char state lexbuf c; + string state lexbuf } | '\\' 'x' ['0'-'9' 'a'-'f' 'A'-'F'] ['0'-'9' 'a'-'f' 'A'-'F'] - { Buffer.add_char state.buffer (char_for_hexadecimal_code lexbuf 2); - string state lexbuf } + { store_escaped_char state lexbuf (char_for_hexadecimal_code lexbuf 2); + string state lexbuf } | '\\' 'u' '{' hex_digit+ '}' { store_escaped_uchar state lexbuf (uchar_for_uchar_escape lexbuf); string state lexbuf } @@ -764,21 +980,17 @@ and string state = parse then string state lexbuf else begin (* Should be an error, but we are very lax. - fail (Illegal_escape (Lexing.lexeme lexbuf), - (Location.curr lexbuf) + error lexbuf (Illegal_escape (Lexing.lexeme lexbuf, None)) *) let loc = Location.curr lexbuf in Location.prerr_warning loc Warnings.Illegal_backslash; - Buffer.add_char state.buffer (Lexing.lexeme_char lexbuf 0); - Buffer.add_char state.buffer (Lexing.lexeme_char lexbuf 1); + store_lexeme state.buffer lexbuf; string state lexbuf end } - | newline - { if not (in_comment state) then - Location.prerr_warning (Location.curr lexbuf) Warnings.Eol_in_string; - update_loc lexbuf None 1 false 0; - Buffer.add_string state.buffer (Lexing.lexeme lexbuf); + | newline as nl + { update_loc lexbuf None 1 false 0; + store_normalized_newline state.buffer nl; string state lexbuf } | eof @@ -790,25 +1002,24 @@ and string state = parse string state lexbuf } and quoted_string delim state = parse - | newline + | newline as nl { update_loc lexbuf None 1 false 0; - Buffer.add_string state.buffer (Lexing.lexeme lexbuf); + store_normalized_newline state.buffer nl; quoted_string delim state lexbuf } | eof { let loc = state.string_start_loc in state.string_start_loc <- Location.none; fail_loc Unterminated_string loc } - | "|" lowercase* "}" + | "|" (ident_ext? as raw_edelim) "}" { - let edelim = Lexing.lexeme lexbuf in - let edelim = String.sub edelim ~pos:1 ~len:(String.length edelim - 2) in + let* edelim = validate_encoding lexbuf raw_edelim in if delim = edelim then return lexbuf.lex_start_p - else (Buffer.add_string state.buffer (Lexing.lexeme lexbuf); + else (store_lexeme state.buffer lexbuf; quoted_string delim state lexbuf) } - | _ - { Buffer.add_char state.buffer (Lexing.lexeme_char lexbuf 0); + | (_ as c) + { store_string_char state.buffer c; quoted_string delim state lexbuf } and skip_sharp_bang state = parse @@ -827,8 +1038,6 @@ and skip_sharp_bang state = parse let token state lexbuf = match token state lexbuf with | Return LBRACKETLESS -> - (* Check if the next character (if any) could start an identifier. - UIDENT starts with A-Z, LIDENT starts with a-z or _ *) let should_split = lexbuf.Lexing.lex_curr_pos < lexbuf.Lexing.lex_buffer_len && begin @@ -837,7 +1046,6 @@ and skip_sharp_bang state = parse end in if should_split then begin - (* Backtrack one character to before the "<" so it will be lexed separately *) lexbuf.Lexing.lex_curr_pos <- lexbuf.Lexing.lex_curr_pos - 1; let lex_curr_p = lexbuf.lex_curr_p in lexbuf.lex_curr_p <- { lex_curr_p with pos_cnum = lex_curr_p.pos_cnum - 1 }; diff --git a/ocamlmerlin_mlx/ocaml/preprocess/parser_explain.ml b/ocamlmerlin_mlx/ocaml/preprocess/parser_explain.ml index f801269..639d081 100644 --- a/ocamlmerlin_mlx/ocaml/preprocess/parser_explain.ml +++ b/ocamlmerlin_mlx/ocaml/preprocess/parser_explain.ml @@ -22,6 +22,7 @@ let nullable (type a) : a MenhirInterpreter.nonterminal -> bool = | N_option_preceded_EQUAL_module_type__ -> true | N_option_preceded_EQUAL_expr__ -> true | N_option_preceded_COLON_core_type__ -> true + | N_option_preceded_COLON_atomic_type__ -> true | N_option_preceded_AS_mkrhs_LIDENT___ -> true | N_option_SEMI_ -> true | N_option_BAR_ -> true @@ -49,4 +50,5 @@ let nullable (type a) : a MenhirInterpreter.nonterminal -> bool = | N_ext -> true | N_class_self_type -> true | N_class_self_pattern -> true + | N_attr_payload -> true | _ -> false diff --git a/ocamlmerlin_mlx/ocaml/preprocess/parser_printer.ml b/ocamlmerlin_mlx/ocaml/preprocess/parser_printer.ml index 59aa7da..4088df7 100644 --- a/ocamlmerlin_mlx/ocaml/preprocess/parser_printer.ml +++ b/ocamlmerlin_mlx/ocaml/preprocess/parser_printer.ml @@ -20,7 +20,6 @@ open Parser_raw let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_error) -> "error" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_WITH) -> "with" - | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_WHILE_LWT) -> "while_lwt" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_WHILE) -> "while" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_WHEN) -> "when" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_VIRTUAL) -> "virtual" @@ -28,7 +27,6 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_UNDERSCORE) -> "_" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_UIDENT) -> "UIDENT" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_TYPE) -> "type" - | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_TRY_LWT) -> "try_lwt" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_TRY) -> "try" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_TRUE) -> "true" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_TO) -> "to" @@ -68,11 +66,12 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_MINUSDOT) -> "-." | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_MINUS) -> "-" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_METHOD) -> "method" - | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_MATCH_LWT) -> "match_lwt" + | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_METAOCAML_ESCAPE) -> ".~" + | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_METAOCAML_BRACKET_OPEN) -> ".<" + | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_METAOCAML_BRACKET_CLOSE) -> ">." | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_MATCH) -> "match" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_LPAREN) -> ")" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_LIDENT) -> "LIDENT" - | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_LET_LWT) -> "lwt" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_LETOP) -> "LETOP" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_LET) -> "let" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_LESSSLASH) -> " "#" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_GREATERRBRACKET) -> ">]" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_GREATERRBRACE) -> ">}" - | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_GREATERDOT) -> ">." | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_GREATER) -> ">" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_FUNCTOR) -> "functor" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_FUNCTION) -> "function" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_FUN) -> "fun" - | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_FOR_LWT) -> "for_lwt" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_FOR) -> "for" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_FLOAT) -> "FLOAT" - | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_FINALLY_LWT) -> "finally" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_FALSE) -> "false" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_EXTERNAL) -> "external" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_EXCEPTION) -> "exception" @@ -127,10 +123,9 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_EOF) -> "EOF" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_END) -> "end" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_ELSE) -> "else" + | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_EFFECT) -> "effect" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_DOWNTO) -> "downto" - | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_DOTTILDE) -> ".~" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_DOTOP) -> "DOTOP" - | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_DOTLESS) -> ".<" | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_DOTDOT) -> ".." | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_DOT) -> "." | MenhirInterpreter.X (MenhirInterpreter.T MenhirInterpreter.T_DONE) -> "done" @@ -199,9 +194,8 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_separated_or_terminated_nonempty_list_SEMI_object_expr_field_) -> "separated_or_terminated_nonempty_list_SEMI_object_expr_field_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_separated_or_terminated_nonempty_list_SEMI_expr_) -> "separated_or_terminated_nonempty_list_SEMI_expr_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_row_field) -> "row_field" - | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_reversed_separated_nontrivial_llist_STAR_atomic_type_) -> "reversed_separated_nontrivial_llist_STAR_atomic_type_" - | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_reversed_separated_nontrivial_llist_COMMA_expr_) -> "reversed_separated_nontrivial_llist_COMMA_expr_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_reversed_separated_nontrivial_llist_COMMA_core_type_) -> "reversed_separated_nontrivial_llist_COMMA_core_type_" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_reversed_separated_nonempty_llist_STAR_labeled_tuple_typ_element_) -> "reversed_separated_nonempty_llist_STAR_labeled_tuple_typ_element_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_reversed_separated_nonempty_llist_STAR_atomic_type_) -> "reversed_separated_nonempty_llist_STAR_atomic_type_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_reversed_separated_nonempty_llist_COMMA_type_parameter_) -> "reversed_separated_nonempty_llist_COMMA_type_parameter_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_reversed_separated_nonempty_llist_COMMA_core_type_) -> "reversed_separated_nonempty_llist_COMMA_core_type_" @@ -213,9 +207,13 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_reversed_nonempty_llist_name_tag_) -> "reversed_nonempty_llist_name_tag_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_reversed_nonempty_llist_labeled_simple_expr_) -> "reversed_nonempty_llist_labeled_simple_expr_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_reversed_nonempty_llist_functor_arg_) -> "reversed_nonempty_llist_functor_arg_" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_reversed_nonempty_concat_fun_param_as_list_) -> "reversed_nonempty_concat_fun_param_as_list_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_reversed_llist_simple_expr_) -> "reversed_llist_simple_expr_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_reversed_llist_preceded_CONSTRAINT_constrain__) -> "reversed_llist_preceded_CONSTRAINT_constrain__" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_reversed_llist_jsx_prop_) -> "reversed_llist_jsx_prop_" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_reversed_labeled_tuple_pattern_pattern_no_exn_) -> "reversed_labeled_tuple_pattern_pattern_no_exn_" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_reversed_labeled_tuple_pattern_pattern_) -> "reversed_labeled_tuple_pattern_pattern_" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_reversed_labeled_tuple_body) -> "reversed_labeled_tuple_body" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_reversed_bar_llist_extension_constructor_declaration_) -> "reversed_bar_llist_extension_constructor_declaration_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_reversed_bar_llist_extension_constructor_) -> "reversed_bar_llist_extension_constructor_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_reversed_bar_llist_constructor_declaration_) -> "reversed_bar_llist_constructor_declaration_" @@ -231,8 +229,6 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_pattern_var) -> "pattern_var" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_pattern_no_exn) -> "pattern_no_exn" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_pattern_gen) -> "pattern_gen" - | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_pattern_comma_list_pattern_no_exn_) -> "pattern_comma_list_pattern_no_exn_" - | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_pattern_comma_list_pattern_) -> "pattern_comma_list_pattern_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_pattern) -> "pattern" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_parse_val_longident) -> "parse_val_longident" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_parse_pattern) -> "parse_pattern" @@ -253,6 +249,7 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_preceded_EQUAL_module_type__) -> "option_preceded_EQUAL_module_type__" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_preceded_EQUAL_expr__) -> "option_preceded_EQUAL_expr__" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_preceded_COLON_core_type__) -> "option_preceded_COLON_core_type__" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_preceded_COLON_atomic_type__) -> "option_preceded_COLON_atomic_type__" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_preceded_AS_mkrhs_LIDENT___) -> "option_preceded_AS_mkrhs_LIDENT___" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_SEMI_) -> "option_SEMI_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_option_BAR_) -> "option_BAR_" @@ -260,6 +257,7 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_operator) -> "operator" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_open_description) -> "open_description" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_open_declaration) -> "open_declaration" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_object_type) -> "object_type" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_nonempty_type_kind) -> "nonempty_type_kind" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_nonempty_list_raw_string_) -> "nonempty_list_raw_string_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_nonempty_list_mkrhs_LIDENT__) -> "nonempty_list_mkrhs_LIDENT__" @@ -281,14 +279,12 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_mk_longident_mod_longident_UIDENT_) -> "mk_longident_mod_longident_UIDENT_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_mk_longident_mod_longident_LIDENT_) -> "mk_longident_mod_longident_LIDENT_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_mk_longident_mod_ext_longident_ident_) -> "mk_longident_mod_ext_longident_ident_" - | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_mk_longident_mod_ext_longident___anonymous_41_) -> "mk_longident_mod_ext_longident___anonymous_41_" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_mk_longident_mod_ext_longident___anonymous_42_) -> "mk_longident_mod_ext_longident___anonymous_42_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_mk_longident_mod_ext_longident_UIDENT_) -> "mk_longident_mod_ext_longident_UIDENT_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_mk_longident_mod_ext_longident_LIDENT_) -> "mk_longident_mod_ext_longident_LIDENT_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_method_) -> "method_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_meth_list) -> "meth_list" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_match_case) -> "match_case" - | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_lwt_bindings) -> "lwt_bindings" - | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_lwt_binding) -> "lwt_binding" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_listx_SEMI_record_pat_field_UNDERSCORE_) -> "listx_SEMI_record_pat_field_UNDERSCORE_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_list_use_file_element_) -> "list_use_file_element_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_list_text_str_structure_item__) -> "list_text_str_structure_item__" @@ -312,6 +308,10 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_let_bindings_ext_) -> "let_bindings_ext_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_let_binding_body_no_punning) -> "let_binding_body_no_punning" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_let_binding_body) -> "let_binding_body" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_labeled_tuple_pattern_pattern_no_exn_) -> "labeled_tuple_pattern_pattern_no_exn_" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_labeled_tuple_pattern_pattern_) -> "labeled_tuple_pattern_pattern_" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_labeled_tuple_pat_element_list_pattern_no_exn_) -> "labeled_tuple_pat_element_list_pattern_no_exn_" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_labeled_tuple_pat_element_list_pattern_) -> "labeled_tuple_pat_element_list_pattern_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_labeled_simple_pattern) -> "labeled_simple_pattern" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_labeled_simple_expr) -> "labeled_simple_expr" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_label_longident) -> "label_longident" @@ -336,16 +336,21 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_functor_args) -> "functor_args" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_functor_arg) -> "functor_arg" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_function_type) -> "function_type" - | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_fun_def) -> "fun_def" - | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_fun_binding) -> "fun_binding" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_fun_seq_expr) -> "fun_seq_expr" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_fun_params) -> "fun_params" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_fun_param_as_list) -> "fun_param_as_list" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_fun_expr) -> "fun_expr" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_fun_body) -> "fun_body" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_formal_class_parameters) -> "formal_class_parameters" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_floating_attribute) -> "floating_attribute" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_extension_type) -> "extension_type" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_extension_constructor_rebind_epsilon_) -> "extension_constructor_rebind_epsilon_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_extension_constructor_rebind_BAR_) -> "extension_constructor_rebind_BAR_" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_extension) -> "extension" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_ext) -> "ext" - | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_expr) -> "expr" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_direction_flag) -> "direction_flag" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_delimited_type_supporting_local_open) -> "delimited_type_supporting_local_open" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_delimited_type) -> "delimited_type" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_core_type) -> "core_type" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_constructor_declarations) -> "constructor_declarations" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_constructor_arguments) -> "constructor_arguments" @@ -368,6 +373,7 @@ let print_symbol = function | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_class_field) -> "class_field" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_class_expr) -> "class_expr" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_attribute) -> "attribute" + | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_attr_payload) -> "attr_payload" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_attr_id) -> "attr_id" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_atomic_type) -> "atomic_type" | MenhirInterpreter.X (MenhirInterpreter.N MenhirInterpreter.N_any_longident) -> "any_longident" @@ -378,7 +384,6 @@ let print_symbol = function let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.T MenhirInterpreter.T_error -> (fun _ -> "error") | MenhirInterpreter.T MenhirInterpreter.T_WITH -> (fun _ -> "with") - | MenhirInterpreter.T MenhirInterpreter.T_WHILE_LWT -> (fun _ -> "while_lwt") | MenhirInterpreter.T MenhirInterpreter.T_WHILE -> (fun _ -> "while") | MenhirInterpreter.T MenhirInterpreter.T_WHEN -> (fun _ -> "when") | MenhirInterpreter.T MenhirInterpreter.T_VIRTUAL -> (fun _ -> "virtual") @@ -386,7 +391,6 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.T MenhirInterpreter.T_UNDERSCORE -> (fun _ -> "_") | MenhirInterpreter.T MenhirInterpreter.T_UIDENT -> (Printf.sprintf "UIDENT(%S)") | MenhirInterpreter.T MenhirInterpreter.T_TYPE -> (fun _ -> "type") - | MenhirInterpreter.T MenhirInterpreter.T_TRY_LWT -> (fun _ -> "try_lwt") | MenhirInterpreter.T MenhirInterpreter.T_TRY -> (fun _ -> "try") | MenhirInterpreter.T MenhirInterpreter.T_TRUE -> (fun _ -> "true") | MenhirInterpreter.T MenhirInterpreter.T_TO -> (fun _ -> "to") @@ -426,11 +430,12 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.T MenhirInterpreter.T_MINUSDOT -> (fun _ -> "-.") | MenhirInterpreter.T MenhirInterpreter.T_MINUS -> (fun _ -> "-") | MenhirInterpreter.T MenhirInterpreter.T_METHOD -> (fun _ -> "method") - | MenhirInterpreter.T MenhirInterpreter.T_MATCH_LWT -> (fun _ -> "match_lwt") + | MenhirInterpreter.T MenhirInterpreter.T_METAOCAML_ESCAPE -> (fun _ -> ".~") + | MenhirInterpreter.T MenhirInterpreter.T_METAOCAML_BRACKET_OPEN -> (fun _ -> ".<") + | MenhirInterpreter.T MenhirInterpreter.T_METAOCAML_BRACKET_CLOSE -> (fun _ -> ">.") | MenhirInterpreter.T MenhirInterpreter.T_MATCH -> (fun _ -> "match") | MenhirInterpreter.T MenhirInterpreter.T_LPAREN -> (fun _ -> ")") | MenhirInterpreter.T MenhirInterpreter.T_LIDENT -> (Printf.sprintf "LIDENT(%S)") - | MenhirInterpreter.T MenhirInterpreter.T_LET_LWT -> (fun _ -> "lwt") | MenhirInterpreter.T MenhirInterpreter.T_LETOP -> (fun _ -> "LETOP") | MenhirInterpreter.T MenhirInterpreter.T_LET -> (fun _ -> "let") | MenhirInterpreter.T MenhirInterpreter.T_LESSSLASH -> (fun _ -> " a -> string = function | MenhirInterpreter.T MenhirInterpreter.T_HASH -> (fun _ -> "#") | MenhirInterpreter.T MenhirInterpreter.T_GREATERRBRACKET -> (fun _ -> ">]") | MenhirInterpreter.T MenhirInterpreter.T_GREATERRBRACE -> (fun _ -> ">}") - | MenhirInterpreter.T MenhirInterpreter.T_GREATERDOT -> (fun _ -> ">.") | MenhirInterpreter.T MenhirInterpreter.T_GREATER -> (fun _ -> ">") | MenhirInterpreter.T MenhirInterpreter.T_FUNCTOR -> (fun _ -> "functor") | MenhirInterpreter.T MenhirInterpreter.T_FUNCTION -> (fun _ -> "function") | MenhirInterpreter.T MenhirInterpreter.T_FUN -> (fun _ -> "fun") - | MenhirInterpreter.T MenhirInterpreter.T_FOR_LWT -> (fun _ -> "for_lwt") | MenhirInterpreter.T MenhirInterpreter.T_FOR -> (fun _ -> "for") | MenhirInterpreter.T MenhirInterpreter.T_FLOAT -> (string_of_FLOAT) - | MenhirInterpreter.T MenhirInterpreter.T_FINALLY_LWT -> (fun _ -> "finally") | MenhirInterpreter.T MenhirInterpreter.T_FALSE -> (fun _ -> "false") | MenhirInterpreter.T MenhirInterpreter.T_EXTERNAL -> (fun _ -> "external") | MenhirInterpreter.T MenhirInterpreter.T_EXCEPTION -> (fun _ -> "exception") @@ -485,10 +487,9 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.T MenhirInterpreter.T_EOF -> (fun _ -> "EOF") | MenhirInterpreter.T MenhirInterpreter.T_END -> (fun _ -> "end") | MenhirInterpreter.T MenhirInterpreter.T_ELSE -> (fun _ -> "else") + | MenhirInterpreter.T MenhirInterpreter.T_EFFECT -> (fun _ -> "effect") | MenhirInterpreter.T MenhirInterpreter.T_DOWNTO -> (fun _ -> "downto") - | MenhirInterpreter.T MenhirInterpreter.T_DOTTILDE -> (fun _ -> ".~") | MenhirInterpreter.T MenhirInterpreter.T_DOTOP -> (fun _ -> "DOTOP") - | MenhirInterpreter.T MenhirInterpreter.T_DOTLESS -> (fun _ -> ".<") | MenhirInterpreter.T MenhirInterpreter.T_DOTDOT -> (fun _ -> "..") | MenhirInterpreter.T MenhirInterpreter.T_DOT -> (fun _ -> ".") | MenhirInterpreter.T MenhirInterpreter.T_DONE -> (fun _ -> "done") @@ -557,9 +558,8 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.N MenhirInterpreter.N_separated_or_terminated_nonempty_list_SEMI_object_expr_field_ -> (fun _ -> "separated_or_terminated_nonempty_list_SEMI_object_expr_field_") | MenhirInterpreter.N MenhirInterpreter.N_separated_or_terminated_nonempty_list_SEMI_expr_ -> (fun _ -> "separated_or_terminated_nonempty_list_SEMI_expr_") | MenhirInterpreter.N MenhirInterpreter.N_row_field -> (fun _ -> "row_field") - | MenhirInterpreter.N MenhirInterpreter.N_reversed_separated_nontrivial_llist_STAR_atomic_type_ -> (fun _ -> "reversed_separated_nontrivial_llist_STAR_atomic_type_") - | MenhirInterpreter.N MenhirInterpreter.N_reversed_separated_nontrivial_llist_COMMA_expr_ -> (fun _ -> "reversed_separated_nontrivial_llist_COMMA_expr_") | MenhirInterpreter.N MenhirInterpreter.N_reversed_separated_nontrivial_llist_COMMA_core_type_ -> (fun _ -> "reversed_separated_nontrivial_llist_COMMA_core_type_") + | MenhirInterpreter.N MenhirInterpreter.N_reversed_separated_nonempty_llist_STAR_labeled_tuple_typ_element_ -> (fun _ -> "reversed_separated_nonempty_llist_STAR_labeled_tuple_typ_element_") | MenhirInterpreter.N MenhirInterpreter.N_reversed_separated_nonempty_llist_STAR_atomic_type_ -> (fun _ -> "reversed_separated_nonempty_llist_STAR_atomic_type_") | MenhirInterpreter.N MenhirInterpreter.N_reversed_separated_nonempty_llist_COMMA_type_parameter_ -> (fun _ -> "reversed_separated_nonempty_llist_COMMA_type_parameter_") | MenhirInterpreter.N MenhirInterpreter.N_reversed_separated_nonempty_llist_COMMA_core_type_ -> (fun _ -> "reversed_separated_nonempty_llist_COMMA_core_type_") @@ -571,9 +571,13 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.N MenhirInterpreter.N_reversed_nonempty_llist_name_tag_ -> (fun _ -> "reversed_nonempty_llist_name_tag_") | MenhirInterpreter.N MenhirInterpreter.N_reversed_nonempty_llist_labeled_simple_expr_ -> (fun _ -> "reversed_nonempty_llist_labeled_simple_expr_") | MenhirInterpreter.N MenhirInterpreter.N_reversed_nonempty_llist_functor_arg_ -> (fun _ -> "reversed_nonempty_llist_functor_arg_") + | MenhirInterpreter.N MenhirInterpreter.N_reversed_nonempty_concat_fun_param_as_list_ -> (fun _ -> "reversed_nonempty_concat_fun_param_as_list_") | MenhirInterpreter.N MenhirInterpreter.N_reversed_llist_simple_expr_ -> (fun _ -> "reversed_llist_simple_expr_") | MenhirInterpreter.N MenhirInterpreter.N_reversed_llist_preceded_CONSTRAINT_constrain__ -> (fun _ -> "reversed_llist_preceded_CONSTRAINT_constrain__") | MenhirInterpreter.N MenhirInterpreter.N_reversed_llist_jsx_prop_ -> (fun _ -> "reversed_llist_jsx_prop_") + | MenhirInterpreter.N MenhirInterpreter.N_reversed_labeled_tuple_pattern_pattern_no_exn_ -> (fun _ -> "reversed_labeled_tuple_pattern_pattern_no_exn_") + | MenhirInterpreter.N MenhirInterpreter.N_reversed_labeled_tuple_pattern_pattern_ -> (fun _ -> "reversed_labeled_tuple_pattern_pattern_") + | MenhirInterpreter.N MenhirInterpreter.N_reversed_labeled_tuple_body -> (fun _ -> "reversed_labeled_tuple_body") | MenhirInterpreter.N MenhirInterpreter.N_reversed_bar_llist_extension_constructor_declaration_ -> (fun _ -> "reversed_bar_llist_extension_constructor_declaration_") | MenhirInterpreter.N MenhirInterpreter.N_reversed_bar_llist_extension_constructor_ -> (fun _ -> "reversed_bar_llist_extension_constructor_") | MenhirInterpreter.N MenhirInterpreter.N_reversed_bar_llist_constructor_declaration_ -> (fun _ -> "reversed_bar_llist_constructor_declaration_") @@ -589,8 +593,6 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.N MenhirInterpreter.N_pattern_var -> (fun _ -> "pattern_var") | MenhirInterpreter.N MenhirInterpreter.N_pattern_no_exn -> (fun _ -> "pattern_no_exn") | MenhirInterpreter.N MenhirInterpreter.N_pattern_gen -> (fun _ -> "pattern_gen") - | MenhirInterpreter.N MenhirInterpreter.N_pattern_comma_list_pattern_no_exn_ -> (fun _ -> "pattern_comma_list_pattern_no_exn_") - | MenhirInterpreter.N MenhirInterpreter.N_pattern_comma_list_pattern_ -> (fun _ -> "pattern_comma_list_pattern_") | MenhirInterpreter.N MenhirInterpreter.N_pattern -> (fun _ -> "pattern") | MenhirInterpreter.N MenhirInterpreter.N_parse_val_longident -> (fun _ -> "parse_val_longident") | MenhirInterpreter.N MenhirInterpreter.N_parse_pattern -> (fun _ -> "parse_pattern") @@ -611,6 +613,7 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.N MenhirInterpreter.N_option_preceded_EQUAL_module_type__ -> (fun _ -> "option_preceded_EQUAL_module_type__") | MenhirInterpreter.N MenhirInterpreter.N_option_preceded_EQUAL_expr__ -> (fun _ -> "option_preceded_EQUAL_expr__") | MenhirInterpreter.N MenhirInterpreter.N_option_preceded_COLON_core_type__ -> (fun _ -> "option_preceded_COLON_core_type__") + | MenhirInterpreter.N MenhirInterpreter.N_option_preceded_COLON_atomic_type__ -> (fun _ -> "option_preceded_COLON_atomic_type__") | MenhirInterpreter.N MenhirInterpreter.N_option_preceded_AS_mkrhs_LIDENT___ -> (fun _ -> "option_preceded_AS_mkrhs_LIDENT___") | MenhirInterpreter.N MenhirInterpreter.N_option_SEMI_ -> (fun _ -> "option_SEMI_") | MenhirInterpreter.N MenhirInterpreter.N_option_BAR_ -> (fun _ -> "option_BAR_") @@ -618,6 +621,7 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.N MenhirInterpreter.N_operator -> (fun _ -> "operator") | MenhirInterpreter.N MenhirInterpreter.N_open_description -> (fun _ -> "open_description") | MenhirInterpreter.N MenhirInterpreter.N_open_declaration -> (fun _ -> "open_declaration") + | MenhirInterpreter.N MenhirInterpreter.N_object_type -> (fun _ -> "object_type") | MenhirInterpreter.N MenhirInterpreter.N_nonempty_type_kind -> (fun _ -> "nonempty_type_kind") | MenhirInterpreter.N MenhirInterpreter.N_nonempty_list_raw_string_ -> (fun _ -> "nonempty_list_raw_string_") | MenhirInterpreter.N MenhirInterpreter.N_nonempty_list_mkrhs_LIDENT__ -> (fun _ -> "nonempty_list_mkrhs_LIDENT__") @@ -639,14 +643,12 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.N MenhirInterpreter.N_mk_longident_mod_longident_UIDENT_ -> (fun _ -> "mk_longident_mod_longident_UIDENT_") | MenhirInterpreter.N MenhirInterpreter.N_mk_longident_mod_longident_LIDENT_ -> (fun _ -> "mk_longident_mod_longident_LIDENT_") | MenhirInterpreter.N MenhirInterpreter.N_mk_longident_mod_ext_longident_ident_ -> (fun _ -> "mk_longident_mod_ext_longident_ident_") - | MenhirInterpreter.N MenhirInterpreter.N_mk_longident_mod_ext_longident___anonymous_41_ -> (fun _ -> "mk_longident_mod_ext_longident___anonymous_41_") + | MenhirInterpreter.N MenhirInterpreter.N_mk_longident_mod_ext_longident___anonymous_42_ -> (fun _ -> "mk_longident_mod_ext_longident___anonymous_42_") | MenhirInterpreter.N MenhirInterpreter.N_mk_longident_mod_ext_longident_UIDENT_ -> (fun _ -> "mk_longident_mod_ext_longident_UIDENT_") | MenhirInterpreter.N MenhirInterpreter.N_mk_longident_mod_ext_longident_LIDENT_ -> (fun _ -> "mk_longident_mod_ext_longident_LIDENT_") | MenhirInterpreter.N MenhirInterpreter.N_method_ -> (fun _ -> "method_") | MenhirInterpreter.N MenhirInterpreter.N_meth_list -> (fun _ -> "meth_list") | MenhirInterpreter.N MenhirInterpreter.N_match_case -> (fun _ -> "match_case") - | MenhirInterpreter.N MenhirInterpreter.N_lwt_bindings -> (fun _ -> "lwt_bindings") - | MenhirInterpreter.N MenhirInterpreter.N_lwt_binding -> (fun _ -> "lwt_binding") | MenhirInterpreter.N MenhirInterpreter.N_listx_SEMI_record_pat_field_UNDERSCORE_ -> (fun _ -> "listx_SEMI_record_pat_field_UNDERSCORE_") | MenhirInterpreter.N MenhirInterpreter.N_list_use_file_element_ -> (fun _ -> "list_use_file_element_") | MenhirInterpreter.N MenhirInterpreter.N_list_text_str_structure_item__ -> (fun _ -> "list_text_str_structure_item__") @@ -670,6 +672,10 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.N MenhirInterpreter.N_let_bindings_ext_ -> (fun _ -> "let_bindings_ext_") | MenhirInterpreter.N MenhirInterpreter.N_let_binding_body_no_punning -> (fun _ -> "let_binding_body_no_punning") | MenhirInterpreter.N MenhirInterpreter.N_let_binding_body -> (fun _ -> "let_binding_body") + | MenhirInterpreter.N MenhirInterpreter.N_labeled_tuple_pattern_pattern_no_exn_ -> (fun _ -> "labeled_tuple_pattern_pattern_no_exn_") + | MenhirInterpreter.N MenhirInterpreter.N_labeled_tuple_pattern_pattern_ -> (fun _ -> "labeled_tuple_pattern_pattern_") + | MenhirInterpreter.N MenhirInterpreter.N_labeled_tuple_pat_element_list_pattern_no_exn_ -> (fun _ -> "labeled_tuple_pat_element_list_pattern_no_exn_") + | MenhirInterpreter.N MenhirInterpreter.N_labeled_tuple_pat_element_list_pattern_ -> (fun _ -> "labeled_tuple_pat_element_list_pattern_") | MenhirInterpreter.N MenhirInterpreter.N_labeled_simple_pattern -> (fun _ -> "labeled_simple_pattern") | MenhirInterpreter.N MenhirInterpreter.N_labeled_simple_expr -> (fun _ -> "labeled_simple_expr") | MenhirInterpreter.N MenhirInterpreter.N_label_longident -> (fun _ -> "label_longident") @@ -694,16 +700,21 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.N MenhirInterpreter.N_functor_args -> (fun _ -> "functor_args") | MenhirInterpreter.N MenhirInterpreter.N_functor_arg -> (fun _ -> "functor_arg") | MenhirInterpreter.N MenhirInterpreter.N_function_type -> (fun _ -> "function_type") - | MenhirInterpreter.N MenhirInterpreter.N_fun_def -> (fun _ -> "fun_def") - | MenhirInterpreter.N MenhirInterpreter.N_fun_binding -> (fun _ -> "fun_binding") + | MenhirInterpreter.N MenhirInterpreter.N_fun_seq_expr -> (fun _ -> "fun_seq_expr") + | MenhirInterpreter.N MenhirInterpreter.N_fun_params -> (fun _ -> "fun_params") + | MenhirInterpreter.N MenhirInterpreter.N_fun_param_as_list -> (fun _ -> "fun_param_as_list") + | MenhirInterpreter.N MenhirInterpreter.N_fun_expr -> (fun _ -> "fun_expr") + | MenhirInterpreter.N MenhirInterpreter.N_fun_body -> (fun _ -> "fun_body") | MenhirInterpreter.N MenhirInterpreter.N_formal_class_parameters -> (fun _ -> "formal_class_parameters") | MenhirInterpreter.N MenhirInterpreter.N_floating_attribute -> (fun _ -> "floating_attribute") + | MenhirInterpreter.N MenhirInterpreter.N_extension_type -> (fun _ -> "extension_type") | MenhirInterpreter.N MenhirInterpreter.N_extension_constructor_rebind_epsilon_ -> (fun _ -> "extension_constructor_rebind_epsilon_") | MenhirInterpreter.N MenhirInterpreter.N_extension_constructor_rebind_BAR_ -> (fun _ -> "extension_constructor_rebind_BAR_") | MenhirInterpreter.N MenhirInterpreter.N_extension -> (fun _ -> "extension") | MenhirInterpreter.N MenhirInterpreter.N_ext -> (fun _ -> "ext") - | MenhirInterpreter.N MenhirInterpreter.N_expr -> (fun _ -> "expr") | MenhirInterpreter.N MenhirInterpreter.N_direction_flag -> (fun _ -> "direction_flag") + | MenhirInterpreter.N MenhirInterpreter.N_delimited_type_supporting_local_open -> (fun _ -> "delimited_type_supporting_local_open") + | MenhirInterpreter.N MenhirInterpreter.N_delimited_type -> (fun _ -> "delimited_type") | MenhirInterpreter.N MenhirInterpreter.N_core_type -> (fun _ -> "core_type") | MenhirInterpreter.N MenhirInterpreter.N_constructor_declarations -> (fun _ -> "constructor_declarations") | MenhirInterpreter.N MenhirInterpreter.N_constructor_arguments -> (fun _ -> "constructor_arguments") @@ -726,6 +737,7 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function | MenhirInterpreter.N MenhirInterpreter.N_class_field -> (fun _ -> "class_field") | MenhirInterpreter.N MenhirInterpreter.N_class_expr -> (fun _ -> "class_expr") | MenhirInterpreter.N MenhirInterpreter.N_attribute -> (fun _ -> "attribute") + | MenhirInterpreter.N MenhirInterpreter.N_attr_payload -> (fun _ -> "attr_payload") | MenhirInterpreter.N MenhirInterpreter.N_attr_id -> (fun _ -> "attr_id") | MenhirInterpreter.N MenhirInterpreter.N_atomic_type -> (fun _ -> "atomic_type") | MenhirInterpreter.N MenhirInterpreter.N_any_longident -> (fun _ -> "any_longident") @@ -735,7 +747,6 @@ let print_value (type a) : a MenhirInterpreter.symbol -> a -> string = function let print_token = function | WITH -> print_value (MenhirInterpreter.T MenhirInterpreter.T_WITH) () - | WHILE_LWT -> print_value (MenhirInterpreter.T MenhirInterpreter.T_WHILE_LWT) () | WHILE -> print_value (MenhirInterpreter.T MenhirInterpreter.T_WHILE) () | WHEN -> print_value (MenhirInterpreter.T MenhirInterpreter.T_WHEN) () | VIRTUAL -> print_value (MenhirInterpreter.T MenhirInterpreter.T_VIRTUAL) () @@ -743,7 +754,6 @@ let print_token = function | UNDERSCORE -> print_value (MenhirInterpreter.T MenhirInterpreter.T_UNDERSCORE) () | UIDENT v -> print_value (MenhirInterpreter.T MenhirInterpreter.T_UIDENT) v | TYPE -> print_value (MenhirInterpreter.T MenhirInterpreter.T_TYPE) () - | TRY_LWT -> print_value (MenhirInterpreter.T MenhirInterpreter.T_TRY_LWT) () | TRY -> print_value (MenhirInterpreter.T MenhirInterpreter.T_TRY) () | TRUE -> print_value (MenhirInterpreter.T MenhirInterpreter.T_TRUE) () | TO -> print_value (MenhirInterpreter.T MenhirInterpreter.T_TO) () @@ -783,11 +793,12 @@ let print_token = function | MINUSDOT -> print_value (MenhirInterpreter.T MenhirInterpreter.T_MINUSDOT) () | MINUS -> print_value (MenhirInterpreter.T MenhirInterpreter.T_MINUS) () | METHOD -> print_value (MenhirInterpreter.T MenhirInterpreter.T_METHOD) () - | MATCH_LWT -> print_value (MenhirInterpreter.T MenhirInterpreter.T_MATCH_LWT) () + | METAOCAML_ESCAPE -> print_value (MenhirInterpreter.T MenhirInterpreter.T_METAOCAML_ESCAPE) () + | METAOCAML_BRACKET_OPEN -> print_value (MenhirInterpreter.T MenhirInterpreter.T_METAOCAML_BRACKET_OPEN) () + | METAOCAML_BRACKET_CLOSE -> print_value (MenhirInterpreter.T MenhirInterpreter.T_METAOCAML_BRACKET_CLOSE) () | MATCH -> print_value (MenhirInterpreter.T MenhirInterpreter.T_MATCH) () | LPAREN -> print_value (MenhirInterpreter.T MenhirInterpreter.T_LPAREN) () | LIDENT v -> print_value (MenhirInterpreter.T MenhirInterpreter.T_LIDENT) v - | LET_LWT -> print_value (MenhirInterpreter.T MenhirInterpreter.T_LET_LWT) () | LETOP v -> print_value (MenhirInterpreter.T MenhirInterpreter.T_LETOP) v | LET -> print_value (MenhirInterpreter.T MenhirInterpreter.T_LET) () | LESSSLASH -> print_value (MenhirInterpreter.T MenhirInterpreter.T_LESSSLASH) () @@ -825,15 +836,12 @@ let print_token = function | HASH -> print_value (MenhirInterpreter.T MenhirInterpreter.T_HASH) () | GREATERRBRACKET -> print_value (MenhirInterpreter.T MenhirInterpreter.T_GREATERRBRACKET) () | GREATERRBRACE -> print_value (MenhirInterpreter.T MenhirInterpreter.T_GREATERRBRACE) () - | GREATERDOT -> print_value (MenhirInterpreter.T MenhirInterpreter.T_GREATERDOT) () | GREATER -> print_value (MenhirInterpreter.T MenhirInterpreter.T_GREATER) () | FUNCTOR -> print_value (MenhirInterpreter.T MenhirInterpreter.T_FUNCTOR) () | FUNCTION -> print_value (MenhirInterpreter.T MenhirInterpreter.T_FUNCTION) () | FUN -> print_value (MenhirInterpreter.T MenhirInterpreter.T_FUN) () - | FOR_LWT -> print_value (MenhirInterpreter.T MenhirInterpreter.T_FOR_LWT) () | FOR -> print_value (MenhirInterpreter.T MenhirInterpreter.T_FOR) () | FLOAT v -> print_value (MenhirInterpreter.T MenhirInterpreter.T_FLOAT) v - | FINALLY_LWT -> print_value (MenhirInterpreter.T MenhirInterpreter.T_FINALLY_LWT) () | FALSE -> print_value (MenhirInterpreter.T MenhirInterpreter.T_FALSE) () | EXTERNAL -> print_value (MenhirInterpreter.T MenhirInterpreter.T_EXTERNAL) () | EXCEPTION -> print_value (MenhirInterpreter.T MenhirInterpreter.T_EXCEPTION) () @@ -842,10 +850,9 @@ let print_token = function | EOF -> print_value (MenhirInterpreter.T MenhirInterpreter.T_EOF) () | END -> print_value (MenhirInterpreter.T MenhirInterpreter.T_END) () | ELSE -> print_value (MenhirInterpreter.T MenhirInterpreter.T_ELSE) () + | EFFECT -> print_value (MenhirInterpreter.T MenhirInterpreter.T_EFFECT) () | DOWNTO -> print_value (MenhirInterpreter.T MenhirInterpreter.T_DOWNTO) () - | DOTTILDE -> print_value (MenhirInterpreter.T MenhirInterpreter.T_DOTTILDE) () | DOTOP v -> print_value (MenhirInterpreter.T MenhirInterpreter.T_DOTOP) v - | DOTLESS -> print_value (MenhirInterpreter.T MenhirInterpreter.T_DOTLESS) () | DOTDOT -> print_value (MenhirInterpreter.T MenhirInterpreter.T_DOTDOT) () | DOT -> print_value (MenhirInterpreter.T MenhirInterpreter.T_DOT) () | DONE -> print_value (MenhirInterpreter.T MenhirInterpreter.T_DONE) () @@ -877,7 +884,6 @@ let token_of_terminal (type a) (t : a MenhirInterpreter.terminal) (v : a) : toke match t with | MenhirInterpreter.T_error -> assert false | MenhirInterpreter.T_WITH -> WITH - | MenhirInterpreter.T_WHILE_LWT -> WHILE_LWT | MenhirInterpreter.T_WHILE -> WHILE | MenhirInterpreter.T_WHEN -> WHEN | MenhirInterpreter.T_VIRTUAL -> VIRTUAL @@ -885,7 +891,6 @@ let token_of_terminal (type a) (t : a MenhirInterpreter.terminal) (v : a) : toke | MenhirInterpreter.T_UNDERSCORE -> UNDERSCORE | MenhirInterpreter.T_UIDENT -> UIDENT v | MenhirInterpreter.T_TYPE -> TYPE - | MenhirInterpreter.T_TRY_LWT -> TRY_LWT | MenhirInterpreter.T_TRY -> TRY | MenhirInterpreter.T_TRUE -> TRUE | MenhirInterpreter.T_TO -> TO @@ -925,11 +930,12 @@ let token_of_terminal (type a) (t : a MenhirInterpreter.terminal) (v : a) : toke | MenhirInterpreter.T_MINUSDOT -> MINUSDOT | MenhirInterpreter.T_MINUS -> MINUS | MenhirInterpreter.T_METHOD -> METHOD - | MenhirInterpreter.T_MATCH_LWT -> MATCH_LWT + | MenhirInterpreter.T_METAOCAML_ESCAPE -> METAOCAML_ESCAPE + | MenhirInterpreter.T_METAOCAML_BRACKET_OPEN -> METAOCAML_BRACKET_OPEN + | MenhirInterpreter.T_METAOCAML_BRACKET_CLOSE -> METAOCAML_BRACKET_CLOSE | MenhirInterpreter.T_MATCH -> MATCH | MenhirInterpreter.T_LPAREN -> LPAREN | MenhirInterpreter.T_LIDENT -> LIDENT v - | MenhirInterpreter.T_LET_LWT -> LET_LWT | MenhirInterpreter.T_LETOP -> LETOP v | MenhirInterpreter.T_LET -> LET | MenhirInterpreter.T_LESSSLASH -> LESSSLASH @@ -967,15 +973,12 @@ let token_of_terminal (type a) (t : a MenhirInterpreter.terminal) (v : a) : toke | MenhirInterpreter.T_HASH -> HASH | MenhirInterpreter.T_GREATERRBRACKET -> GREATERRBRACKET | MenhirInterpreter.T_GREATERRBRACE -> GREATERRBRACE - | MenhirInterpreter.T_GREATERDOT -> GREATERDOT | MenhirInterpreter.T_GREATER -> GREATER | MenhirInterpreter.T_FUNCTOR -> FUNCTOR | MenhirInterpreter.T_FUNCTION -> FUNCTION | MenhirInterpreter.T_FUN -> FUN - | MenhirInterpreter.T_FOR_LWT -> FOR_LWT | MenhirInterpreter.T_FOR -> FOR | MenhirInterpreter.T_FLOAT -> FLOAT v - | MenhirInterpreter.T_FINALLY_LWT -> FINALLY_LWT | MenhirInterpreter.T_FALSE -> FALSE | MenhirInterpreter.T_EXTERNAL -> EXTERNAL | MenhirInterpreter.T_EXCEPTION -> EXCEPTION @@ -984,10 +987,9 @@ let token_of_terminal (type a) (t : a MenhirInterpreter.terminal) (v : a) : toke | MenhirInterpreter.T_EOF -> EOF | MenhirInterpreter.T_END -> END | MenhirInterpreter.T_ELSE -> ELSE + | MenhirInterpreter.T_EFFECT -> EFFECT | MenhirInterpreter.T_DOWNTO -> DOWNTO - | MenhirInterpreter.T_DOTTILDE -> DOTTILDE | MenhirInterpreter.T_DOTOP -> DOTOP v - | MenhirInterpreter.T_DOTLESS -> DOTLESS | MenhirInterpreter.T_DOTDOT -> DOTDOT | MenhirInterpreter.T_DOT -> DOT | MenhirInterpreter.T_DONE -> DONE diff --git a/ocamlmerlin_mlx/ocaml/preprocess/parser_raw.cmly b/ocamlmerlin_mlx/ocaml/preprocess/parser_raw.cmly index 0409851..c7aedde 100644 Binary files a/ocamlmerlin_mlx/ocaml/preprocess/parser_raw.cmly and b/ocamlmerlin_mlx/ocaml/preprocess/parser_raw.cmly differ diff --git a/ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml b/ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml index 9d229ef..e63be40 100644 --- a/ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml +++ b/ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml @@ -10,19 +10,17 @@ module MenhirBasics = struct type token = | WITH - | WHILE_LWT | WHILE | WHEN | VIRTUAL | VAL | UNDERSCORE | UIDENT of ( -# 856 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 901 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 23 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 22 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) | TYPE - | TRY_LWT | TRY | TRUE | TO @@ -30,9 +28,9 @@ module MenhirBasics = struct | THEN | STRUCT | STRING of ( -# 842 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 887 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string * Location.t * string option) -# 36 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 34 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) | STAR | SLASHGREATER @@ -44,22 +42,22 @@ module MenhirBasics = struct | RBRACKET | RBRACE | QUOTED_STRING_ITEM of ( -# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string * Location.t * string * Location.t * string option) -# 50 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) | QUOTED_STRING_EXPR of ( -# 844 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 889 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string * Location.t * string * Location.t * string option) -# 55 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) | QUOTE | QUESTION | PRIVATE | PREFIXOP of ( -# 828 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 873 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 63 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) | PLUSEQ | PLUSDOT @@ -67,9 +65,9 @@ module MenhirBasics = struct | PERCENT | OR | OPTLABEL of ( -# 821 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 866 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 73 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 71 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) | OPEN | OF @@ -82,19 +80,20 @@ module MenhirBasics = struct | MINUSDOT | MINUS | METHOD - | MATCH_LWT + | METAOCAML_ESCAPE + | METAOCAML_BRACKET_OPEN + | METAOCAML_BRACKET_CLOSE | MATCH | LPAREN | LIDENT of ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) # 92 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) - | LET_LWT | LETOP of ( -# 783 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 828 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 98 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 97 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) | LET | LESSSLASH @@ -113,86 +112,83 @@ module MenhirBasics = struct | LBRACE | LAZY | LABEL of ( -# 788 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 119 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 118 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) | JSX_UIDENT_E of ( -# 858 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 903 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 124 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 123 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) | JSX_UIDENT of ( -# 857 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 902 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 129 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 128 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) | JSX_LIDENT_E of ( -# 804 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 849 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 134 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 133 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) | JSX_LIDENT of ( -# 803 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 848 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 139 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 138 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) | INT of ( -# 787 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 832 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string * char option) -# 144 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 143 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) | INITIALIZER | INHERIT | INFIXOP4 of ( -# 781 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 826 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 151 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 150 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) | INFIXOP3 of ( -# 780 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 825 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 156 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 155 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) | INFIXOP2 of ( -# 779 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 824 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 161 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 160 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) | INFIXOP1 of ( -# 778 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 823 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 166 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 165 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) | INFIXOP0 of ( -# 777 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 822 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 171 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 170 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) | INCLUDE | IN | IF | HASHOP of ( -# 839 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 884 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 179 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 178 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) | HASH | GREATERRBRACKET | GREATERRBRACE - | GREATERDOT | GREATER | FUNCTOR | FUNCTION | FUN - | FOR_LWT | FOR | FLOAT of ( -# 765 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 810 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string * char option) -# 194 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 191 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) - | FINALLY_LWT | FALSE | EXTERNAL | EXCEPTION @@ -201,28 +197,27 @@ module MenhirBasics = struct | EOF | END | ELSE + | EFFECT | DOWNTO - | DOTTILDE | DOTOP of ( -# 782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 210 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 206 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) - | DOTLESS | DOTDOT | DOT | DONE | DOCSTRING of ( -# 866 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 911 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (Docstrings.docstring) -# 219 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 214 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) | DO | CONSTRAINT | COMMENT of ( -# 865 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 910 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string * Location.t) -# 226 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 221 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) | COMMA | COLONGREATER @@ -231,9 +226,9 @@ module MenhirBasics = struct | COLON | CLASS | CHAR of ( -# 745 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 789 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (char) -# 237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 232 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) | BEGIN | BARRBRACKET @@ -244,9 +239,9 @@ module MenhirBasics = struct | ASSERT | AS | ANDOP of ( -# 784 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 829 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 250 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 245 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) | AND | AMPERSAND @@ -264,6 +259,8 @@ let _eRR = [@@@ocaml.warning "-9"] +[@@@ocaml.warning "-60"] module Str = Ast_helper.Str (* For ocamldep *) +[@@@ocaml.warning "+60"] open Asttypes open Longident @@ -289,14 +286,15 @@ let ghost_loc (startpos, endpos) = { } let mktyp ~loc ?attrs d = Typ.mk ~loc:(make_loc loc) ?attrs d -let mkpat ~loc d = Pat.mk ~loc:(make_loc loc) d -let mkexp ~loc d = Exp.mk ~loc:(make_loc loc) d +let mkpat ~loc ?attrs d = Pat.mk ~loc:(make_loc loc) ?attrs d +let mkexp ~loc ?attrs d = Exp.mk ~loc:(make_loc loc) ?attrs d let mkmty ~loc ?attrs d = Mty.mk ~loc:(make_loc loc) ?attrs d let mksig ~loc d = Sig.mk ~loc:(make_loc loc) d let mkmod ~loc ?attrs d = Mod.mk ~loc:(make_loc loc) ?attrs d let mkstr ~loc d = Str.mk ~loc:(make_loc loc) d let mkclass ~loc ?attrs d = Cl.mk ~loc:(make_loc loc) ?attrs d let mkcty ~loc ?attrs d = Cty.mk ~loc:(make_loc loc) ?attrs d +let mkconst ~loc c = Const.mk ~loc:(make_loc loc) c let pstr_typext (te, ext) = (Pstr_typext te, ext) @@ -333,6 +331,8 @@ let mkcf ~loc ?attrs ?docs d = let mkrhs rhs loc = mkloc rhs (make_loc loc) let ghrhs rhs loc = mkloc rhs (ghost_loc loc) +let ldot lid lid_loc name loc = Ldot (mkrhs lid lid_loc, mkrhs name loc) + let push_loc x acc = if x.Location.loc_ghost then acc @@ -344,7 +344,7 @@ let reloc_pat ~loc x = let reloc_exp ~loc x = { x with pexp_loc = make_loc loc; pexp_loc_stack = push_loc x.pexp_loc x.pexp_loc_stack } -let reloc_typ ~loc x = +let _reloc_typ ~loc x = { x with ptyp_loc = make_loc loc; ptyp_loc_stack = push_loc x.ptyp_loc x.ptyp_loc_stack } @@ -358,25 +358,14 @@ let mkpatvar ~loc name = mkpat ~loc (Ppat_var (mkrhs name loc)) (* - Ghost expressions and patterns: - expressions and patterns that do not appear explicitly in the - source file they have the loc_ghost flag set to true. - Then the profiler will not try to instrument them and the - -annot option will not try to display their type. + See ./location.mli for when to use a ghost location or not. Every grammar rule that generates an element with a location must make at most one non-ghost element, the topmost one. - - How to tell whether your location must be ghost: - A location corresponds to a range of characters in the source file. - If the location contains a piece of code that is syntactically - valid (according to the documentation), and corresponds to the - AST node, then the location must be real; in all other cases, - it must be ghost. *) -let ghexp ~loc d = Exp.mk ~loc:(ghost_loc loc) d -let ghpat ~loc d = Pat.mk ~loc:(ghost_loc loc) d -let ghtyp ~loc d = Typ.mk ~loc:(ghost_loc loc) d +let ghexp ~loc ?attrs d = Exp.mk ~loc:(ghost_loc loc) ?attrs d +let ghpat ~loc ?attrs d = Pat.mk ~loc:(ghost_loc loc) ?attrs d +let ghtyp ~loc ?attrs d = Typ.mk ~loc:(ghost_loc loc) ?attrs d let ghloc ~loc d = { txt = d; loc = ghost_loc loc } let ghstr ~loc d = Str.mk ~loc:(ghost_loc loc) d let ghsig ~loc d = Sig.mk ~loc:(ghost_loc loc) d @@ -389,23 +378,38 @@ let neg_string f = then String.sub f 1 (String.length f - 1) else "-" ^ f -let mkuminus ~oploc name arg = - match name, arg.pexp_desc with - | "-", Pexp_constant(Pconst_integer (n,m)) -> - Pexp_constant(Pconst_integer(neg_string n,m)) - | ("-" | "-."), Pexp_constant(Pconst_float (f, m)) -> - Pexp_constant(Pconst_float(neg_string f, m)) +(* Pre-apply the special [-], [-.], [+] and [+.] prefix operators into + constants if possible, otherwise turn them into the corresponding prefix + operators [~-], [~-.], etc.. *) +let mkuminus ~sloc ~oploc name arg = + match name, arg.pexp_desc, arg.pexp_attributes with + | "-", + Pexp_constant({pconst_desc = Pconst_integer (n,m); pconst_loc=_}), + [] -> + Pexp_constant(mkconst ~loc:sloc (Pconst_integer(neg_string n, m))) + | ("-" | "-."), + Pexp_constant({pconst_desc = Pconst_float (f, m); pconst_loc=_}), [] -> + Pexp_constant(mkconst ~loc:sloc (Pconst_float(neg_string f, m))) | _ -> Pexp_apply(mkoperator ~loc:oploc ("~" ^ name), [Nolabel, arg]) -let mkuplus ~oploc name arg = +let mkuplus ~sloc ~oploc name arg = let desc = arg.pexp_desc in - match name, desc with - | "+", Pexp_constant(Pconst_integer _) - | ("+" | "+."), Pexp_constant(Pconst_float _) -> desc + match name, desc, arg.pexp_attributes with + | "+", + Pexp_constant({pconst_desc = Pconst_integer _ as desc; pconst_loc=_}), + [] + | ("+" | "+."), + Pexp_constant({pconst_desc = Pconst_float _ as desc; pconst_loc=_}), + [] -> + Pexp_constant(mkconst ~loc:sloc desc) | _ -> Pexp_apply(mkoperator ~loc:oploc ("~" ^ name), [Nolabel, arg]) +let mk_attr ~loc name payload = + Builtin_attributes.(register_attr Parser name); + Attr.mk ~loc name payload + (* TODO define an abstraction boundary between locations-as-pairs and locations-as-Location.t; it should be clear when we move from one world to the other *) @@ -432,7 +436,9 @@ let rec mktailexp nilloc = let open Location in function | e1 :: el -> let exp_el, el_loc = mktailexp nilloc el in let loc = (e1.pexp_loc.loc_start, snd el_loc) in - let arg = ghexp ~loc (Pexp_tuple [e1; ghexp ~loc:el_loc exp_el]) in + let arg = + ghexp ~loc (Pexp_tuple [None, e1; None, ghexp ~loc:el_loc exp_el]) + in ghexp_cons_desc loc arg, loc let rec mktailpat nilloc = let open Location in function @@ -442,17 +448,22 @@ let rec mktailpat nilloc = let open Location in function | p1 :: pl -> let pat_pl, el_loc = mktailpat nilloc pl in let loc = (p1.ppat_loc.loc_start, snd el_loc) in - let arg = ghpat ~loc (Ppat_tuple [p1; ghpat ~loc:el_loc pat_pl]) in + let arg = + ghpat ~loc + (Ppat_tuple ([None, p1; None, ghpat ~loc:el_loc pat_pl], Closed)) + in ghpat_cons_desc loc arg, loc let mkstrexp e attrs = { pstr_desc = Pstr_eval (e, attrs); pstr_loc = e.pexp_loc } -let mkexp_constraint ~loc e (t1, t2) = - match t1, t2 with - | Some t, None -> mkexp ~loc (Pexp_constraint(e, t)) - | _, Some t -> mkexp ~loc (Pexp_coerce(e, t1, t)) - | None, None -> assert false +let mkexp_desc_constraint e t = + match t with + | Pconstraint t -> Pexp_constraint(e, t) + | Pcoerce(t1, t2) -> Pexp_coerce(e, t1, t2) + +let mkexp_constraint ~loc e t = + mkexp ~loc (mkexp_desc_constraint e t) let mkexp_opt_constraint ~loc e = function | None -> e @@ -544,9 +555,12 @@ type ('dot,'index) array_family = { } -let bigarray_untuplify = function - { pexp_desc = Pexp_tuple explist; pexp_loc = _ } -> explist - | exp -> [exp] +let bigarray_untuplify exp = + match exp.pexp_desc with + | Pexp_tuple explist + when List.for_all (fun (l, _) -> Option.is_none l) explist -> + List.map snd explist + | _ -> [exp] let builtin_arraylike_name loc _ ~assign paren_kind n = let opname = if assign then "set" else "get" in @@ -562,8 +576,8 @@ let builtin_arraylike_name loc _ ~assign paren_kind n = | Two -> "Array2" | Three -> "Array3" | Many -> "Genarray" in - Ldot(Lident "Bigarray", submodule_name) in - ghloc ~loc (Ldot(prefix,opname)) + Ldot(mknoloc (Lident "Bigarray"), mknoloc submodule_name) in + ghloc ~loc (Ldot(mknoloc prefix, mknoloc opname)) let builtin_arraylike_index loc paren_kind index = match paren_kind with | Paren | Bracket -> One, [Nolabel, index] @@ -593,7 +607,7 @@ let user_indexing_operator_name loc (prefix,ext) ~assign paren_kind n = String.concat "" ["."; ext; left; mid; right; assign] in let lid = match prefix with | None -> Lident name - | Some p -> Ldot(p,name) in + | Some p -> Ldot(mknoloc p,mknoloc name) in ghloc ~loc lid let user_index loc _ index = @@ -624,9 +638,9 @@ let indexop_unclosed_error loc_s s loc_e = unclosed left loc_s right loc_e *) -let lapply ~loc p1 p2 = +let lapply ~loc p1 loc_p1 p2 loc_p2 = if !Clflags.applicative_functors - then Lapply(p1, p2) + then Lapply(mkrhs p1 loc_p1, mkrhs p2 loc_p2) else raise (Syntaxerr.Error( Syntaxerr.Applicative_path (make_loc loc))) @@ -664,33 +678,28 @@ let wrap_type_annotation ~loc newtypes core_type body = let exp = mk_newtypes newtypes exp in (exp, ghtyp(Ptyp_poly(newtypes, Typ.varify_constructors newtypes core_type))) -let wrap_exp_attrs ~loc body (ext, attrs) = - let ghexp = ghexp ~loc in +let pexp_extension ~id e = Pexp_extension (id, PStr [mkstrexp e []]) + +let mkexp_attrs ~loc desc (ext, attrs) = (* todo: keep exact location for the entire attribute *) - let body = {body with pexp_attributes = attrs @ body.pexp_attributes} in match ext with - | None -> body - | Some id -> ghexp(Pexp_extension (id, PStr [mkstrexp body []])) + | None -> mkexp ~loc ~attrs desc + | Some id -> + mkexp ~loc (pexp_extension ~id (ghexp ~loc ~attrs desc)) -let mkexp_attrs ~loc d attrs = - wrap_exp_attrs ~loc (mkexp ~loc d) attrs - -let wrap_typ_attrs ~loc typ (ext, attrs) = +let mktyp_attrs ~loc desc (ext, attrs) = (* todo: keep exact location for the entire attribute *) - let typ = {typ with ptyp_attributes = attrs @ typ.ptyp_attributes} in match ext with - | None -> typ - | Some id -> ghtyp ~loc (Ptyp_extension (id, PTyp typ)) + | None -> mktyp ~loc ~attrs desc + | Some id -> + mktyp ~loc (Ptyp_extension (id, PTyp (ghtyp ~loc ~attrs desc))) -let wrap_pat_attrs ~loc pat (ext, attrs) = +let mkpat_attrs ~loc desc (ext, attrs) = (* todo: keep exact location for the entire attribute *) - let pat = {pat with ppat_attributes = attrs @ pat.ppat_attributes} in match ext with - | None -> pat - | Some id -> ghpat ~loc (Ppat_extension (id, PPat (pat, None))) - -let mkpat_attrs ~loc d attrs = - wrap_pat_attrs ~loc (mkpat ~loc d) attrs + | None -> mkpat ~loc ~attrs desc + | Some id -> + mkpat ~loc (Ppat_extension (id, PPat (ghpat ~loc ~attrs desc, None))) let wrap_class_attrs ~loc:_ body attrs = {body with pcl_attributes = attrs @ body.pcl_attributes} @@ -699,25 +708,20 @@ let wrap_mod_attrs ~loc:_ attrs body = let wrap_mty_attrs ~loc:_ attrs body = {body with pmty_attributes = attrs @ body.pmty_attributes} -let wrap_str_ext ~loc body ext = - match ext with - | None -> body - | Some id -> ghstr ~loc (Pstr_extension ((id, PStr [body]), [])) - let wrap_mkstr_ext ~loc (item, ext) = - wrap_str_ext ~loc (mkstr ~loc item) ext - -let wrap_sig_ext ~loc body ext = match ext with - | None -> body - | Some id -> ghsig ~loc (Psig_extension ((id, PSig [body]), [])) + | None -> mkstr ~loc item + | Some id -> mkstr ~loc (Pstr_extension ((id, PStr [ghstr ~loc item]), [])) let wrap_mksig_ext ~loc (item, ext) = - wrap_sig_ext ~loc (mksig ~loc item) ext + match ext with + | None -> mksig ~loc item + | Some id -> mksig ~loc (Psig_extension ((id, PSig [ghsig ~loc item]), [])) let mk_quotedext ~loc (id, idloc, str, strloc, delim) = let exp_id = mkloc id idloc in - let e = ghexp ~loc (Pexp_constant (Pconst_string (str, strloc, delim))) in + let const = Const.mk ~loc:strloc (Pconst_string (str, strloc, delim)) in + let e = ghexp ~loc (Pexp_constant const) in (exp_id, PStr [mkstrexp e []]) let text_str pos = Str.text (rhs_text pos) @@ -836,6 +840,69 @@ let class_of_let_bindings ~loc lbs body = assert (lbs.lbs_extension = None); mkclass ~loc (Pcl_let (lbs.lbs_rec, List.rev bindings, body)) +(* If all the parameters are [Pparam_newtype x], then return [Some xs] where + [xs] is the corresponding list of values [x]. This function is optimized for + the common case, where a list of parameters contains at least one value + parameter. +*) +let all_params_as_newtypes = + let is_newtype { pparam_desc; _ } = + match pparam_desc with + | Pparam_newtype _ -> true + | Pparam_val _ -> false + in + let as_newtype { pparam_desc; pparam_loc } = + match pparam_desc with + | Pparam_newtype x -> Some (x, pparam_loc) + | Pparam_val _ -> None + in + fun params -> + if List.for_all is_newtype params + then Some (List.filter_map as_newtype params) + else None + +(* Given a construct [fun (type a b c) : t -> e], we construct + [Pexp_newtype(a, Pexp_newtype(b, Pexp_newtype(c, Pexp_constraint(e, t))))] + rather than a [Pexp_function]. +*) +let mkghost_newtype_function_body newtypes body_constraint body = + let wrapped_body = + match body_constraint with + | None -> body + | Some body_constraint -> + let loc = { body.pexp_loc with loc_ghost = true } in + Exp.mk (mkexp_desc_constraint body body_constraint) ~loc + in + let expr = + List.fold_right + (fun (newtype, newtype_loc) e -> + (* Mints a ghost location that approximates the newtype's "extent" as + being from the start of the newtype param until the end of the + function body. + *) + let loc = (newtype_loc.Location.loc_start, body.pexp_loc.loc_end) in + ghexp (Pexp_newtype (newtype, e)) ~loc) + newtypes + wrapped_body + in + expr.pexp_desc + +let mkfunction params body_constraint body = + match body with + | Pfunction_cases _ -> Pexp_function (params, body_constraint, body) + | Pfunction_body body_exp -> + (* If all the params are newtypes, then we don't create a function node; + we create nested newtype nodes. *) + match all_params_as_newtypes params with + | None -> Pexp_function (params, body_constraint, body) + | Some newtypes -> + mkghost_newtype_function_body newtypes body_constraint body_exp + +let mk_functor_typ args mty = + List.fold_left (fun acc (startpos, arg) -> + mkmty ~loc:(startpos, mty.pmty_loc.loc_end) (Pmty_functor (arg, acc))) + mty args + (* Alternatively, we could keep the generic module type in the Parsetree and extract the package type during type-checking. In that case, the assertions below should be turned into explicit checks. *) @@ -847,11 +914,11 @@ let package_type_of_module_type pmty = | Pwith_type (lid, ptyp) -> let loc = ptyp.ptype_loc in if ptyp.ptype_params <> [] then - err loc "parametrized types are not supported"; + err loc Syntaxerr.Parameterized_types; if ptyp.ptype_cstrs <> [] then - err loc "constrained types are not supported"; + err loc Syntaxerr.Constrained_types; if ptyp.ptype_private <> Public then - err loc "private types are not supported"; + err loc Syntaxerr.Private_types; (* restrictions below are checked by the 'with_constraint' rule *) (* assert (ptyp.ptype_kind = Ptype_abstract); *) @@ -861,7 +928,7 @@ let package_type_of_module_type pmty = | None -> None end | _ -> - err pmty.pmty_loc "only 'with type t =' constraints are supported"; + err pmty.pmty_loc Not_with_type; None in match pmty with @@ -869,8 +936,7 @@ let package_type_of_module_type pmty = | {pmty_desc = Pmty_with({pmty_desc = Pmty_ident lid}, cstrs)} -> (lid, List.filter_map map_cstr cstrs, pmty.pmty_attributes) | _ -> - err pmty.pmty_loc - "only module type identifier and 'with type' constraints are supported" + err pmty.pmty_loc Neither_identifier_nor_with_type ; (Location.mkloc (Lident "_") pmty.pmty_loc, [], []) let mk_directive_arg ~loc k = @@ -895,35 +961,8 @@ let merloc startpos ?endpos x = let attr = { attr_name = str; attr_loc = loc; attr_payload = PStr [] } in { x with pexp_attributes = attr :: x.pexp_attributes } -let val_of_lwt_bindings ~loc lbs = - let bindings = - List.map - (fun lb -> - Vb.mk ~loc:lb.lb_loc ~attrs:lb.lb_attributes - ~docs:(Lazy.force lb.lb_docs) - ~text:(Lazy.force lb.lb_text) - lb.lb_pattern (Fake.app Fake.Lwt.un_lwt lb.lb_expression)) - lbs.lbs_bindings - in - let str = mkstr ~loc (Pstr_value(lbs.lbs_rec, List.rev bindings)) in - match lbs.lbs_extension with - | None -> str - | Some id -> ghstr ~loc (Pstr_extension((id, PStr [str]), [])) -let expr_of_lwt_bindings ~loc lbs body = - let bindings = - List.map - (fun lb -> - Vb.mk ~loc:lb.lb_loc ~attrs:lb.lb_attributes - lb.lb_pattern (Fake.app Fake.Lwt.un_lwt lb.lb_expression)) - lbs.lbs_bindings - in - Fake.app Fake.Lwt.in_lwt - (mkexp_attrs ~loc (Pexp_let(lbs.lbs_rec, List.rev bindings, body)) - (lbs.lbs_extension, [])) - - -# 927 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 966 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" module Tables = struct @@ -933,174 +972,164 @@ module Tables = struct fun _tok -> match _tok with | AMPERAMPER -> - 138 - | AMPERSAND -> - 137 - | AND -> - 136 - | ANDOP _ -> - 135 - | AS -> - 134 - | ASSERT -> 133 - | BACKQUOTE -> + | AMPERSAND -> 132 - | BANG -> + | AND -> 131 - | BAR -> + | ANDOP _ -> 130 - | BARBAR -> + | AS -> 129 - | BARRBRACKET -> + | ASSERT -> 128 - | BEGIN -> + | BACKQUOTE -> 127 - | CHAR _ -> + | BANG -> 126 - | CLASS -> + | BAR -> 125 - | COLON -> + | BARBAR -> 124 - | COLONCOLON -> + | BARRBRACKET -> 123 - | COLONEQUAL -> + | BEGIN -> 122 - | COLONGREATER -> + | CHAR _ -> 121 - | COMMA -> + | CLASS -> 120 - | COMMENT _ -> + | COLON -> 119 - | CONSTRAINT -> + | COLONCOLON -> 118 - | DO -> + | COLONEQUAL -> 117 - | DOCSTRING _ -> + | COLONGREATER -> 116 - | DONE -> + | COMMA -> 115 - | DOT -> + | COMMENT _ -> 114 - | DOTDOT -> + | CONSTRAINT -> 113 - | DOTLESS -> + | DO -> 112 - | DOTOP _ -> + | DOCSTRING _ -> 111 - | DOTTILDE -> + | DONE -> 110 - | DOWNTO -> + | DOT -> 109 - | ELSE -> + | DOTDOT -> 108 - | END -> + | DOTOP _ -> 107 - | EOF -> + | DOWNTO -> 106 - | EOL -> + | EFFECT -> 105 - | EQUAL -> + | ELSE -> 104 - | EXCEPTION -> + | END -> 103 - | EXTERNAL -> + | EOF -> 102 - | FALSE -> + | EOL -> 101 - | FINALLY_LWT -> + | EQUAL -> 100 - | FLOAT _ -> + | EXCEPTION -> 99 - | FOR -> + | EXTERNAL -> 98 - | FOR_LWT -> + | FALSE -> 97 - | FUN -> + | FLOAT _ -> 96 - | FUNCTION -> + | FOR -> 95 - | FUNCTOR -> + | FUN -> 94 - | GREATER -> + | FUNCTION -> 93 - | GREATERDOT -> + | FUNCTOR -> 92 - | GREATERRBRACE -> + | GREATER -> 91 - | GREATERRBRACKET -> + | GREATERRBRACE -> 90 - | HASH -> + | GREATERRBRACKET -> 89 - | HASHOP _ -> + | HASH -> 88 - | IF -> + | HASHOP _ -> 87 - | IN -> + | IF -> 86 - | INCLUDE -> + | IN -> 85 - | INFIXOP0 _ -> + | INCLUDE -> 84 - | INFIXOP1 _ -> + | INFIXOP0 _ -> 83 - | INFIXOP2 _ -> + | INFIXOP1 _ -> 82 - | INFIXOP3 _ -> + | INFIXOP2 _ -> 81 - | INFIXOP4 _ -> + | INFIXOP3 _ -> 80 - | INHERIT -> + | INFIXOP4 _ -> 79 - | INITIALIZER -> + | INHERIT -> 78 - | INT _ -> + | INITIALIZER -> 77 - | JSX_LIDENT _ -> + | INT _ -> 76 - | JSX_LIDENT_E _ -> + | JSX_LIDENT _ -> 75 - | JSX_UIDENT _ -> + | JSX_LIDENT_E _ -> 74 - | JSX_UIDENT_E _ -> + | JSX_UIDENT _ -> 73 - | LABEL _ -> + | JSX_UIDENT_E _ -> 72 - | LAZY -> + | LABEL _ -> 71 - | LBRACE -> + | LAZY -> 70 - | LBRACELESS -> + | LBRACE -> 69 - | LBRACKET -> + | LBRACELESS -> 68 - | LBRACKETAT -> + | LBRACKET -> 67 - | LBRACKETATAT -> + | LBRACKETAT -> 66 - | LBRACKETATATAT -> + | LBRACKETATAT -> 65 - | LBRACKETBAR -> + | LBRACKETATATAT -> 64 - | LBRACKETGREATER -> + | LBRACKETBAR -> 63 - | LBRACKETLESS -> + | LBRACKETGREATER -> 62 - | LBRACKETPERCENT -> + | LBRACKETLESS -> 61 - | LBRACKETPERCENTPERCENT -> + | LBRACKETPERCENT -> 60 - | LESS -> + | LBRACKETPERCENTPERCENT -> 59 - | LESSMINUS -> + | LESS -> 58 - | LESSSLASH -> + | LESSMINUS -> 57 - | LET -> + | LESSSLASH -> 56 - | LETOP _ -> + | LET -> 55 - | LET_LWT -> + | LETOP _ -> 54 | LIDENT _ -> 53 @@ -1108,103 +1137,103 @@ module Tables = struct 52 | MATCH -> 51 - | MATCH_LWT -> + | METAOCAML_BRACKET_CLOSE -> 50 - | METHOD -> + | METAOCAML_BRACKET_OPEN -> 49 - | MINUS -> + | METAOCAML_ESCAPE -> 48 - | MINUSDOT -> + | METHOD -> 47 - | MINUSGREATER -> + | MINUS -> 46 - | MODULE -> + | MINUSDOT -> 45 - | MUTABLE -> + | MINUSGREATER -> 44 - | NEW -> + | MODULE -> 43 - | NONREC -> + | MUTABLE -> 42 - | OBJECT -> + | NEW -> 41 - | OF -> + | NONREC -> 40 - | OPEN -> + | OBJECT -> 39 - | OPTLABEL _ -> + | OF -> 38 - | OR -> + | OPEN -> 37 - | PERCENT -> + | OPTLABEL _ -> 36 - | PLUS -> + | OR -> 35 - | PLUSDOT -> + | PERCENT -> 34 - | PLUSEQ -> + | PLUS -> 33 - | PREFIXOP _ -> + | PLUSDOT -> 32 - | PRIVATE -> + | PLUSEQ -> 31 - | QUESTION -> + | PREFIXOP _ -> 30 - | QUOTE -> + | PRIVATE -> 29 - | QUOTED_STRING_EXPR _ -> + | QUESTION -> 28 - | QUOTED_STRING_ITEM _ -> + | QUOTE -> 27 - | RBRACE -> + | QUOTED_STRING_EXPR _ -> 26 - | RBRACKET -> + | QUOTED_STRING_ITEM _ -> 25 - | REC -> + | RBRACE -> 24 - | RPAREN -> + | RBRACKET -> 23 - | SEMI -> + | REC -> 22 - | SEMISEMI -> + | RPAREN -> 21 - | SIG -> + | SEMI -> 20 - | SLASHGREATER -> + | SEMISEMI -> 19 - | STAR -> + | SIG -> 18 - | STRING _ -> + | SLASHGREATER -> 17 - | STRUCT -> + | STAR -> 16 - | THEN -> + | STRING _ -> 15 - | TILDE -> + | STRUCT -> 14 - | TO -> + | THEN -> 13 - | TRUE -> + | TILDE -> 12 - | TRY -> + | TO -> 11 - | TRY_LWT -> + | TRUE -> 10 - | TYPE -> + | TRY -> 9 - | UIDENT _ -> + | TYPE -> 8 - | UNDERSCORE -> + | UIDENT _ -> 7 - | VAL -> + | UNDERSCORE -> 6 - | VIRTUAL -> + | VAL -> 5 - | WHEN -> + | VIRTUAL -> 4 - | WHILE -> + | WHEN -> 3 - | WHILE_LWT -> + | WHILE -> 2 | WITH -> 1 @@ -1267,14 +1296,12 @@ module Tables = struct Obj.repr () | DOTDOT -> Obj.repr () - | DOTLESS -> - Obj.repr () | DOTOP _v -> Obj.repr _v - | DOTTILDE -> - Obj.repr () | DOWNTO -> Obj.repr () + | EFFECT -> + Obj.repr () | ELSE -> Obj.repr () | END -> @@ -1291,14 +1318,10 @@ module Tables = struct Obj.repr () | FALSE -> Obj.repr () - | FINALLY_LWT -> - Obj.repr () | FLOAT _v -> Obj.repr _v | FOR -> Obj.repr () - | FOR_LWT -> - Obj.repr () | FUN -> Obj.repr () | FUNCTION -> @@ -1307,8 +1330,6 @@ module Tables = struct Obj.repr () | GREATER -> Obj.repr () - | GREATERDOT -> - Obj.repr () | GREATERRBRACE -> Obj.repr () | GREATERRBRACKET -> @@ -1383,15 +1404,17 @@ module Tables = struct Obj.repr () | LETOP _v -> Obj.repr _v - | LET_LWT -> - Obj.repr () | LIDENT _v -> Obj.repr _v | LPAREN -> Obj.repr () | MATCH -> Obj.repr () - | MATCH_LWT -> + | METAOCAML_BRACKET_CLOSE -> + Obj.repr () + | METAOCAML_BRACKET_OPEN -> + Obj.repr () + | METAOCAML_ESCAPE -> Obj.repr () | METHOD -> Obj.repr () @@ -1471,8 +1494,6 @@ module Tables = struct Obj.repr () | TRY -> Obj.repr () - | TRY_LWT -> - Obj.repr () | TYPE -> Obj.repr () | UIDENT _v -> @@ -1487,28 +1508,26 @@ module Tables = struct Obj.repr () | WHILE -> Obj.repr () - | WHILE_LWT -> - Obj.repr () | WITH -> Obj.repr () and default_reduction = - (16, "\000\000\000\000\000\000\002\241\002\240\002\239\002\238\002\237\002\192\002\236\002\235\002\234\002\233\002\232\002\231\002\230\002\229\002\228\002\227\002\226\002\225\002\224\002\223\002\222\002\221\002\220\002\219\002\218\002\191\002\217\002\216\002\215\002\214\002\213\002\212\002\211\002\210\002\209\002\208\002\207\002\206\002\205\002\204\002\203\002\202\002\201\002\200\002\199\002\198\002\197\002\196\002\195\002\194\002\193\000\000\000\000\000,\000\189\000\000\000\000\000\000\000\000\000\000\000\000\002\161\001i\000\000\000\000\000\000\000\000\000\000\000\000\000h\000c\000\191\000\000\000\000\000\000\000\000\000\000\002\179\000\000\002y\002z\000\000\002w\002x\000\000\001\193\000f\001\172\001\190\001\189\000\000\001\194\001\198\000\000\000\000\000\000\001\127\001~\000\000\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\188\001\192\001\191\001\173\001\196\001\187\001\186\001\185\001\184\001\183\001\181\001\197\001\195\000\000\000\000\000\000\000\226\000\000\000\000\001\176\000\000\000\000\000\000\001\178\000\000\000\000\000\000\001\180\001\202\001\199\001\182\001\174\001\200\001\201\000\000\0033\0034\000\000\000\000\000\026\001]\000\000\000\222\000\223\000\000\000\000\000\000\001\224\001\223\000\000\000\000\000\025\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\0030\000\000\003+\000\000\000\000\003-\000\000\003/\000\000\003,\003.\000\000\003&\000\000\003%\003!\002E\000\000\003$\000\000\002F\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\229\000\017\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001g\000\000\000\000\001j\001h\001o\000C\002\142\000\000\001*\003\011\003\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\002\029\000\000\000\000\000\000\000e\000\000\000\251\000\000\002{\000\000\000\000\000\000\001\206\000\000\000\000\000'\000\000\000\000\000\000\000\000\000\000\000\000\001n\000\000\001^\001m\000\000\001\\\000`\000 \000\000\000\000\001\149\000\027\000\000\000\000\000\000\000\000\003 \000*\000\000\000\000\000!\000\028\000\000\000\000\000\000\000\204\000\000\000\000\000\000\000\206\002O\002A\000\000\000$\000\000\002B\000\000\000\000\001\203\000\000\000\000\000\000\000\018\000\000\000\000\000\000\000\019\003\012\000\000\003\r\000\000\000w\000\000\000\000\000#\000\000\000\000\000\000\000%\000\000\000&\000\000\000(\000\000\000\000\000)\0027\0026\000\000\000\000\000\000\000\000\000\000\000\000\000a\000\000\002\184\000d\000g\000b\002\173\0035\002\174\002\001\002\176\000\000\000\000\002\181\002v\002\183\000\000\000\000\000\000\002\187\000\000\000\000\000\000\001\253\001\244\000\000\000\000\000\000\000\000\000\000\001\243\000\000\002\000\002\190\000\000\000\000\000\000\000\000\001\151\000\000\000\000\001\255\002\182\000o\000\000\000\000\000n\000\000\002\175\000\000\000\000\000\000\000\000\002\189\000\000\000\000\000\000\001\245\001\254\001\248\000\000\000m\000\000\002\188\000\000\002\186\000\000\002|\000\000\000\000\002Y\002\185\000\000\000\000\000\000\000\000\001\208\001E\001F\002~\000\000\002}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\006\001\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\t\000\000\000\000\000\000\000\000\000\000\000\000\001\004\002\b\001\005\000\000\000\000\000\000\000\000\000\000\001\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\207\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0023\000\000\000\000\001\134\000\000\000\000\000\000\000\000\000\000\000\000\003L\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\001\133\000\000\000\000\000\000\001f\001\141\001e\001\138\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@\0022\000\000\000\000\001\132\000\000\000\208\000\000\000\000\001w\000\000\000\000\001{\000\000\001\226\000\000\000\000\001\225\001z\001x\000\000\001|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\235\001k\000\000\000\000\001l\0036\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\147\002\152\002\150\000\000\000\000\000\000\002\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\000\254\000\000\001\000\000\000\000\000\000\000\002\158\000\000\000\000\000\000\002\131\000\000\000\000\000\000\000\000\002,\000\000\000\230\000\000\000\000\000\000\000\000\002\146\002\160\002\149\002\148\000\000\000\000\000\000\0020\000\000\000\000\000\000\000\239\000\000\000\237\000\000\000\000\000\231\002-\000\000\000\000\000z\001H\000\000\000\000\000\173\000\000\000\000\000\000\000\000\000\000\000\187\000\000\000\000\000\000\000\172\000\000\000\000\000\000\002`\002_\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\017\000\000\000\000\001\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\005\002\003\002\004\000\000\000\000\000\000\001\n\000\000\000\000\000\000\000\000\000\000\000\000\002\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0010\001\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\001&\000\000\001r\003\004\000\000\000\000\003\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0029\000\000\000\000\000\000\000\000\000\000\001\153\000\000\002\020\000\000\000\000\000\000\000\000\000i\000\000\000\000\000j\000\000\000\000\000\000\000\000\001\143\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\245\000\000\000\000\000s\000\000\000\248\000\246\000\000\000\000\000\000\000\211\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\243\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002a\000k\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\164\001\160\000\000\000\000\000\000\000\216\000\000\000\000\002\"\002.\000\000\000\219\002 \002!\000\000\000\000\000\000\000\000\000\000\001\167\001\163\001\159\000\000\000\000\000\217\000\000\000\000\001\166\001\162\001\158\001\156\002.\000\000\000\221\000\000\000\000\002\022\000\000\000\000\002j\002+\002)\002*\000\000\000\000\000\000\002.\000\000\000\218\002.\000\000\000\220\000\000\000\000\000\000\000\000\002i\000\000\000\000\000\000\000\000\000\000\000\000\001\171\000\000\000\000\000\000\001\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\140\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\001(\002o\000\000\000\000\000\000\002m\000\000\000\000\000\000\002l\000\000\001t\000\000\000\000\000\000\000\000\002s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003>\000\000\000\000\000\000\000\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000G\000\000\000\000\000\000\000\000\001\148\000\000\001\147\000\000\000\000\000\000\000\000\000J\000\000\000\000\000\000\002\027\000\000\002\026\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\000S\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\000R\000\000\000M\000N\000\000\0019\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\000\000\000\000\000\000\001\"\002t\002e\000\000\002k\002f\002r\002q\002p\002n\0013\000\000\002c\000\000\000\000\000\000\000\000\000\000\002.\000\000\000\000\001,\002g\000\000\000\000\000\000\000\000\000\000\000\000\002.\000\000\000\000\001.\002h\002d\002u\0012\002\011\002b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0039\000\000\000\000\003;\000\000\0008\000\000\000\000\003A\000\000\003@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0038\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\001Z\000\000\000\000\001X\001V\001\t\000\000\000\000\000\000\000\198\000\197\002\245\000\000\0009\000\000\000\000\003D\000\000\003C\000\000\000\000\000\000\001T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001Y\000\000\000\000\001W\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\000\000\000\001\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000X\000\000\000\000\000\000\000\000\000\000\000\000\0005\000\000\000\000\000\000\000\000\000\000\0025\0024\000W\000\000\0003\001\022\000\000\000B\000/\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\020\000\000\000V\000\000\000\000\000Y\000\000\000\000\001\210\000\000\0007\000\000\000\000\000\000\0006\000\000\000\000\000\000\000:\000\000\000Z\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\001 \003\007\002\254\000\000\000\000\000\000\000\000\000\000\000\000\001\018\003\002\002\242\002\253\003\006\003\005\000\000\001I\0017\000\000\001\019\000\000\002\251\000\000\002\255\002\252\003\b\002\n\000\000\000\000\002\248\000\000\000\194\000\000\002\247\000\000\000\000\000\228\000\000\002\019\000\020\000\000\000\000\000\000\002\133\000\000\000\000\002\132\000\000\000\000\000\000\000\000\002\135\000\000\000\000\002S\000\000\000\000\002\139\000\000\000\000\002\137\002\155\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\171\000\000\002\134\000\000\000\000\002\138\000\000\000\000\002\136\001\027\000\000\000\000\001\028\000\000\000\000\000\174\000\000\001\030\001\029\000\000\000\000\002\156\000\000\002\168\000\000\002\167\000\000\002\171\000\000\002\170\000\000\000\000\002\157\000\000\000\000\000\000\002\031\000\000\001\222\000\000\000\000\000\000\002\\\002\030\000\000\002\164\000\000\000\000\000\000\000\000\000x\000y\000\000\000\000\000\000\000\000\000\144\000\000\000\000\000\000\000\130\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000\199\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\200\000\000\000\201\000\202\000\138\000\000\000\137\000\000\000\000\001K\000\000\001L\001J\002;\000\000\000\000\002<\002:\000\000\000\000\000\000\000\000\000\000\002\141\000\000\002\140\000\000\000\000\002\127\000\000\000\000\002\163\000\000\000\000\000\000\002V\002\154\000\000\002\153\000\000\002\169\000\135\000\000\000\000\000\000\000\000\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\002\244\002\246\001\025\001\220\000\000\001\002\001\003\000\000\000\000\000\000\000\000\000\000\000\000\001\015\000\000\000\000\000\000\000\000\001\014\000\000\000\000\001\r\001\012\000\000\001G\000\000\002\166\000\000\002\165\002\151\000\000\000\000\000\000\000\000\002\143\000\000\000\000\002\144\000\000\002\129\000\000\002\130\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\227\000\000\000\000\001\230\000\000\000\000\001\228\000\000\000\000\001\229\000\000\001\169\000\000\000\000\000\000\001\168\000\000\000\000\0016\0015\000\000\000\190\000\000\000\000\000\000\000\000\001S\001M\000\000\000\000\001N\000\031\000\000\000\030\000\000\000\000\000\205\000\000\000\000\000\000\000\"\000\029\000\000\000\000\000\000\000\023\000\000\000\000\000\000\000\000\001\165\001\161\000\000\001\157\003\031\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\192\000\000\003\001\002'\002(\002#\002%\002$\002&\000\000\000\000\000\000\000\193\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\001u\000\000\000\000\000\024\000\000\003<\000\000\001\129\000\000\002\178\000\000\000D\000\000\000\000\000E\000\000\000\000\002\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\127\000\000\000~\000\000\000\000\000\000\000\143\000\000\000-\000\000\000\000\000\000\000\000\000\128\000\000\000\224\000\001\000\000\000\000\000\227\000\002\000\000\000\000\000\000\001`\001a\000\003\000\000\000\000\000\000\000\000\001c\001d\001b\000\021\001_\000\022\000\000\001\231\000\000\000\004\000\000\001\232\000\000\000\005\000\000\001\233\000\000\000\000\001\234\000\006\000\000\000\007\000\000\001\235\000\000\000\b\000\000\001\236\000\000\000\t\000\000\001\237\000\000\000\n\000\000\001\238\000\000\000\011\000\000\001\239\000\000\000\000\001\240\000\012\000\000\000\000\001\241\000\r\000\000\000\000\000\000\000\000\003\020\003\015\003\016\003\019\003\017\000\000\003\024\000\014\000\000\003\023\000\000\001=\000\000\000\000\003\021\000\000\003\022\000\000\000\000\000\000\000\000\001A\001B\000\000\000\000\001@\001?\000\015\000\000\000\000\000\000\0032\000\000\0031") + (16, "\000\000\000\000\000\000\003p\003o\003n\003m\003l\003>\003k\003j\003i\003h\003g\003f\003e\003d\003c\003b\003a\003`\003_\003^\003]\003\\\003[\003Z\003Y\003=\003X\003W\003V\003U\003T\003S\003R\003Q\003P\003O\003N\003M\003L\003K\003J\003I\003H\003G\003F\003E\003D\003C\003B\003A\003@\003?\000\000\000\000\000\"\000~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\014\001\249\002\011\002\n\002\t\002\015\002\019\002\r\002\012\001\250\002\017\002\b\002\007\002\006\002\005\002\004\002\002\002\018\002\016\000\000\000\000\000\000\001\006\000\000\000\000\001\253\000\000\000\000\000\000\001\255\000\000\000\000\000\000\002\001\002\023\002\020\002\003\001\251\002\021\002\022\000\000\003\176\003\177\000\000\000\000\000 \001\168\000\128\000\000\001\002\001\003\000\000\000\000\000\000\0020\002/\000\000\000\000\000\031\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\173\000\000\003\168\000\000\000\000\003\170\000\000\003\172\000\000\003\169\003\171\000\000\003\163\000\000\003\162\003\158\002\194\000\000\003\161\000\000\002\195\000\000\000\000\000\000\000\000\000_\000\000\000\000\000]\000\000\000\000\001\166\000\000\000\000\000\000\000\000\000\000\003\031\001\180\000\000\000\000\000\000\000\000\000\000\000\000\002\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\027\000\000\000\000\000x\000\000\000\000\000\000\000\000\000\000\000\000\001\185\000\000\001\169\001\184\000\000\001\167\000W\000\027\000\000\000\000\001\224\000\024\000\000\000\000\000\000\000\000\000\000\000o\000\000\000\000\000\000\003\157\000\018\000p\000\131\000q\000\023\000\000\000r\000n\000\000\000\000\000\000\000\000\000\000\000\000\000\028\000\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\019\000\030\000\238\000\240\002\204\002\190\000\000\000u\000\000\002\191\000\000\000\000\002\024\000\000\000\000\000\000\000\000\003\137\000\000\001x\000\000\003\138\000\000\000\000\000t\000\000\000\000\000\000\000v\000\000\000w\000\000\000y\000\000\000\000\000z\002\180\002\179\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\154\002\153\000Z\000\000\000\000\000\000\000\000\000\000\0031\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001A\001@\000\000\002\247\002\248\000\000\002\245\002\246\000\000\000\000\000\000\000\000\000\000\001\202\001\201\000\000\003/\000\000\000\000\000\000\000\000\000\000\001\200\000\000\000\000\000\000\001\t\000\017\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\178\000\000\000\000\001\181\001\179\001\186\000:\003\012\003\136\003\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001U\001T\000\000\000\000\000\\\000\000\001\031\000\000\002\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000X\000\000\0036\000[\000^\000Y\003+\003\178\003,\002R\003.\000\000\000\000\0033\002\244\0035\000\000\000\000\000\000\0039\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0019\0018\000\000\0017\003<\0034\000f\000\000\000\000\000\000\000\000\002N\000\000\000\000\002M\000\000\001V\002H\002Q\002G\002J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0011\0010\000\000\001/\002\156\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\226\000\000\000\000\002P\000\000\000\000\000e\000\000\003-\000\000\000\000\000\000\000\000\000\000\000\000\0015\0014\000\000\0013\002\157\000\000\000\000\000\000\003;\000\000\000\000\000\000\002I\002O\002L\002\158\000\000\000\000\000d\000\000\003:\000\000\0038\000\000\002\250\000\000\000\000\002\217\0037\000\000\000\000\000\000\000\000\002\029\001\147\001\148\002\252\000\000\002\251\000\000\001S\002\166\001W\000\000\000\000\000\000\002T\002U\002W\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001E\001D\000\000\001C\002\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001Q\001P\000\000\001O\002\165\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001M\001L\000\000\001K\002\164\000\000\000\000\000\000\000\000\000\000\000\000\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\243\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\176\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003\201\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\160\000\000\000\000\000\000\000\000\000\000\001\209\000\000\000\000\000\000\001\177\001\216\001\176\000\000\000\000\000\000\000\000\000\000\002\175\001\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\188\000\000\000\000\002\189\000\000\001\208\000\000\000\244\000\000\000\000\001\194\000\000\000\000\001\198\000\000\0022\000\000\000\000\0021\001\197\001\195\000\000\001\199\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\015\001\182\000\000\000\000\001\183\003\179\001\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\017\003\022\003\020\000\000\000\000\000\000\003 \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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002Z\000\000\000\000\000\000\000\000\000\000\000\000\001(\002Y\001)\000\000\000\000\000\000\000\230\000\000\001,\001-\000\000\000\231\002\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\139\002\138\000\000\000\000\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\002\167\000\000\001\n\000\000\000\000\000\000\000\000\003\016\003\030\003\019\003\018\000\000\000\000\000\000\002\171\000\000\000\000\000\000\001\019\000\000\001\017\000\000\000\000\001\011\002\168\000\000\000\000\000\000\000\000\000\200\002\183\000\000\000\000\000\000\000\000\000\000\001#\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\002\211\000\000\000\000\000\000\000\000\000\000\000\000\002\129\002\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\185\000\000\000\000\000\000\000\000\000\203\002\221\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\229\000\000\000\000\000\000\000\000\000\000\000\000\000\202\000\201\000\000\000\000\000\000\000\236\000\235\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\134\002\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003s\000\000\000\000\000\000\000\000\000\000\000\000\001]\000\000\000\000\002\182\000\000\000\000\000\000\001\\\000\000\000\000\001[\001Z\000\000\002.\000\000\000\000\000\136\003t\002\173\000\000\000\000\000\000\000\000\001_\000\000\000\000\001^\000\000\000\000\000\000\000\000\000\000\000\000\001I\001H\000\000\001G\002\163\000\000\000\000\000\000\000\000\002V\001X\000\000\000\000\001~\000\020\001a\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\178\002\177\000\199\000\000\000{\000|\000\000\000\000\000\000\000\000\000\152\000\000\002\255\000\000\000\000\003\001\000\000\000\000\003\000\000\000\000\000\000\000\000\000\003\003\000\000\000\000\003\007\000\000\000\000\003\005\003\025\000\000\000\000\000\000\000\000\000\000\000\142\000\000\000\000\001\150\000\000\001\151\001\149\002\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\000\000\000\000\000\003\002\000\000\000\000\003\006\000\000\000\000\003\004\000\000\000\000\000\000\000\000\000\000\002\144\002\143\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001i\000\000\000\000\001j\000\000\000\000\000\204\000\000\001l\001k\000\000\000\000\003\026\000\000\003&\000\000\003%\000\000\003)\000\000\003(\000\000\000\000\003\027\000\000\000\000\000\000\002p\000\000\000\000\000\000\000\000\002\220\002o\000\000\003\"\000\000\000\000\000\000\000\000\003\011\000\000\003\n\000\000\003!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\214\003\024\000\000\003\023\000\000\003'\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\189\000\000\000\000\000\000\000`\000\000\000\000\000a\000\000\000\000\000\000\000\000\001\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\025\000\000\000\000\000j\000\000\001\028\001\026\000\000\000\000\000\000\000\247\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\139\000b\000\000\000\000\002n\000\000\000\000\001`\002,\000\000\001&\001'\001g\000\000\000\000\000\000\000\000\000\000\003$\000\000\003#\003\021\000\000\000\000\000\000\000\000\003\r\000\000\000\000\003\014\000\000\002\253\000\000\002\254\000\000\000\000\000\000\000\000\003\t\003\b\000\000\000\000\000\000\000\000\0024\000\000\000\000\002:\000\000\000\000\0026\000\000\000\000\0028\000\000\0023\000\000\000\000\0029\000\000\000\000\0025\000\000\000\000\0027\000\000\001\246\000\000\000\000\000\000\001\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001t\003\129\000\000\000\000\003\128\000\000\000\000\000\000\000\000\000\000\002_\000\000\000\000\000\000\000\000\000\000\000\000\003\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\228\000\000\002e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003r\000\000\000\000\002\223\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\248\000\000\000\000\000\000\001\247\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\215\000\000\000\000\000\000\000\000\000\000\001\203\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001v\002\237\000\000\000\000\000\000\002\235\000\000\000\000\000\000\002\234\000\000\001\191\000\000\000\000\000\000\000\000\002\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\187\000\000\000\000\000\000\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000>\000\000\000\000\000\000\000\000\001\223\000\000\001\222\000\000\000\000\000\000\000\000\000A\000\000\000\000\000\000\002l\000\000\002k\000\000\000\000\000\000\000\000\000B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000G\000\000\000\000\000\000\000H\000F\000\000\000J\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000C\000\000\000I\000\000\000D\000E\000\000\001\135\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001r\000V\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000U\000T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001p\002\242\002\227\000\000\002\233\002\228\002\240\002\239\002\238\002\236\001\129\000\000\002\225\000\000\000\000\000\000\000\000\000\000\002\169\000\000\000\000\001z\002\229\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\239\001\235\000\000\000\000\000\000\000\252\000\000\000\000\002s\002\169\000\000\000\000\001|\002q\002r\000\000\000\000\000\000\000\000\000\000\001\242\001\238\001\234\000\000\000\000\000\253\000\000\000\000\001\241\001\237\001\233\001\231\002\230\002\226\002\243\001\128\002\\\002\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\003\182\000\000\000\000\003\184\000\000\000/\000\000\000\000\003\190\000\000\003\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\181\000\000\000\000\003\183\000\000\000\000\000\000\002g\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\165\000\000\000\000\001\163\001\161\000\000\0000\000\000\000\000\003\193\000\000\003\192\000\000\000\000\000\000\001\159\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\164\000\000\000\000\001\162\001\160\000\000\000\000\000\000\0002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001c\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000O\000\000\000\000\000\000\000\000\000\000\000\000\000,\000\000\000\000\000N\000\000\000*\001d\000\000\0009\000&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001b\000\000\000M\000\000\000\000\000P\000\000\000\000\002\031\000\000\000.\000\000\000\000\000\000\000-\000\000\000\000\000\000\0001\000\000\000Q\000\000\0003\0004\000\000\001\137\000\000\000\000\000\000\000\000\000\000\000\000\0007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001n\003\132\003{\000\000\000\000\003\127\003q\003z\003\131\003\130\001\133\000\000\000\000\003x\000\000\003|\003y\003\133\002[\000\000\000\000\003v\000#\003u\000\000\000\000\000\132\000\000\001\b\000\000\000\000\001\132\001\131\000\000\001\192\000\000\000\000\0030\000\000\001?\002\160\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001=\001<\000\000\001;\002\159\000\000\000\000\000;\000\000\000\000\000<\000\000\000\000\003\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\002\149\002\148\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002d\001\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000\000\003~\002x\002y\002t\002v\002u\002w\000\000\000\000\000\000\000\130\000\000\000\000\002\169\000\000\001\000\000\000\000\000\000\000\000\000\003}\000\000\000\127\000\000\000\000\000\000\000\000\001\158\001\152\000\000\000\000\001\153\001\244\000\000\001\243\000\000\000\000\000\239\000\000\000\000\000\000\000\000\000\241\000\000\000\000\000\000\000\029\000\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\240\001\236\000\000\001\232\003\156\000\000\002\169\000\000\000\255\000\000\000\000\000\000\000\000\002\232\002|\002z\002{\000\000\000\000\000\000\002\169\000\000\000\254\000\000\000\000\000\000\000\000\002\231\000\000\001\204\000\000\000s\000\000\003\185\000\000\000$\000\000\000\000\000\000\000\000\000\151\000\000\001\004\000\001\000\000\000\000\001\007\000\002\000\000\000\000\000\000\001\171\001\172\000\003\000\000\000\000\000\000\000\000\001\174\001\175\001\173\000\021\001\170\000\022\000\000\002;\000\000\000\004\000\000\002<\000\000\000\005\000\000\002=\000\000\000\000\002>\000\006\000\000\000\007\000\000\002?\000\000\000\b\000\000\002@\000\000\000\t\000\000\002A\000\000\000\n\000\000\002B\000\000\000\011\000\000\002C\000\000\000\000\002D\000\012\000\000\000\000\002E\000\r\000\000\000\000\000\000\000\000\003\145\003\140\003\141\003\144\003\142\000\000\003\149\000\014\000\000\003\148\000\000\001\139\000\000\000\000\003\146\000\000\003\147\000\000\000\000\000\000\000\000\001\143\001\144\000\000\000\000\001\142\001\141\000\015\000\000\000\000\000\000\003\175\000\000\003\174") and error = - (139, "3\248D\024\177U\191\140\207,\005\001\247\"\128\007\028\0067\b\001\023\n7\240\147\229\128 >\128P\000c\129{v\"\004\023\241R\000\004\012\028\014\156pX\020\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\254\1797\172\221\127\2277\235\201P\253\196\168\131\207\002\246\236D\b/\226\164\000\b\0248\0298\224\176(4\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\198\225\000\"\193F\254\018|\176\004\007\208\n\000\012p/n\196@\130\254*@\000\129\131\129\211\142\011\002\131C?\132E\171\021[\248\204\242\192P\031p(\000\241\192cp\128\017p\163\127\t>X\002\003\232\005\000\0068\012n\016\002,\020o\225'\203\000@}\000\160\000\199\001\141\194\000E\130\141\252$y`\b\015\160\020\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\198\225\000\"\225F\254\018|\176\004\007\208\n\000\012p\024\220 \004X(\223\194O\150\000\128\250\001@\001\142\003\027\132\000\139\005\027\248H\242\192\016\031@(\0001\192cp\128\017p\163\127\t>X\002\003\232\005\000\0068\012n\016\002,\020o\225'\203\000@}\000\160\000\199\001\141\194\000E\130\141\252$y`\b\015\160\020\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\196 \004@(\006\002G\022\000\000\n\001@\001\140\000 \000\001\000\128\004\128\133\0000\000\000\001\000 \000\000\004\000\000 \000\000\144\016\160\006\000\000\000 \004\000\000\000\128\000\004\000\000\018\002\016\000\192\000\000\004\000\128\000\000\012B\000@\128\004`$X \002\000\168\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\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\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\012C\bG\224,h\164X'\198 \172\b\001\146\203\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\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\001\128\000\000\b\000\000\000\016\000\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\002\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\002\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\004\000@@\000 ` \000\000\000\016\000\000\000\000\000B@\005P\001\006\n\136p\000\004@\003\176 d\000\128H\000\130\000 \128\001\n\000\000\128\000b\000\000\128\000\t\000\016@\004\016\000!\000\000\016\000\012@\000\016\000\000\000\000\000\004\000\006\000\b\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\000\000\000\024\000\000\000\000\000\000\000\000\000\000\000\000\b\000?\000`D\000\000>!\000 @\b\020X\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\160\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\016\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\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\001 \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\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\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\003\000\000\028\004\000\024.\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\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\000\000\000\000\000\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`\019:\000\131#D8\001\131\"\001\216\017\"\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\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\001\128\000\014\002\004\012\023\b\000\000@\000\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\000\000\000\000\000\000\000\000\000\000\000@\004\004\004\002\006\002\b\000\000\001\000\000\000\000\000\000\b\000\128\128\000@\192A\000\000\000 \000\000\000\000\000\001\000\016\016\000\b\024\b\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\004\000\000\000\000\000\000\000\000\000\000\000\000\001\128\128\b\000\000\b\004\016\000\000\002\000\000\000\000\000\0000\016\001\000\000\001\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\025\252\"\012X\170\223\198o\150\002\128\251\137@\003\142\003?\132A\139\021[\248\204\242\192P\031q(\000q\192\003\000\000\t0A\024\000 \000@\000\000\000\000\000 \000`\000\001$\b#\000\004\000\b\000\000\000\000\000\004\000\012\000\000$\129\004`\000\000\001\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\128\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\192\000\002H\000F\000\000\000\016\000\000\000\000\000\b\000\016\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$\000 \000\000\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\000\001\000\000\004\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\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\001\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\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\002H\000@\000\000\000\016\000\000\000\000\000\b\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\000\000\000\000\000\000\000\000\000\000\144\001\020\016A\000\162\024\000\001\016\000\236\000\129\000 \012@\000x\016\000`\184P\000\002\000 \002\000\001\000\002@\004P\001\132\n\136p\000\004@\0030\"\012 \1281\000\001\192@\001\130\225@\000\b\000\128\b\000\004\000\006\000\0048\b\0160\\ \000\001\000\000\000\000@\000!`\019\184\000\131#D8\001\130\"\001\216\001f\017`\024\000\000\192\000\000\193p\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\003\000\000\003\005\194\000\000\017\000\000\016\000\000\000\004\000\016\000\000\000 \000\000\000\002 \000\000\000@\000\001\128\000\014\002\000\012\023\b\000\000@\000\000\000\000\000\011\219\177\016 \191\138\144\000 `\224t\227\130\192\160\208\207\225\017j\197V\2543<\176\020\007\220\n\000X\002\003\232\005\000\0068\012n\016\002,\020o\225'\203\000@}\000\160\000\199\001\141\194\000E\130\141\252$y`\b\015\160\020\000\024\2241\184@\b\184Q\191\132\159,\001\001\244\002\128\003\028\0067\b\001\022\n7\240\147\229\128 >\128P\000c\128\198\225\000\"\193F\254\018<\176\004\007\208\n\000\012p\024\2200\132~*\223\202G\150|\194\250A\192\025\174\176\024\132\016\136\005\000\192H\226\192\000\001@(\0001\128cp\128\017`\163\127\t\030X\002\003\232\005\000\0078\016\243\217\222\191\213\243\175?\171\255\183\007\239\237\191\254y\141\194\000E\130\141\252$y`\b\015\160\020\000\024\224\001\136@\136\024\000\140\004\155\004\000@\020\000\000\002\b\0001\b\017\002\000\017\128\147`\128\b\002\128\000\000A\000\006!\002 @\0020\018,\016\001\000P\000\000\b \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\132\000\129\000\b\192H\176@\004\001@\000\000 \128\003\016\128\016 \001\024\t\022\b\000\128*\000\000\005\016\000b\016\018\004\000#\001\"\193\000\016\005@\000\000\130\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\000\000\000\000\000\000\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\b\000\000\128\000\003\000\000\028\004\000\024.\016\000\000\128\000\000\000\000\000\000`\000\003\128\128\003\005\194\000\000\016\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\000\014\002\000\012\023\b\000\000@\000\000\000\000\b\0000\000\t\192@\001\130\225\000\000\b\000\000\000\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\192\000\007\001\000\006\011\132\000\000 \000\000\000\000\004\000\024\000\000\224 \000\193p\128\000\004\000\000\000\000\002\128\001\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\b\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\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\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\001\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\0000\000\001\192@\001\130\225\000\000\b\000\000\000\000\001\000\002\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\132\128\014\224\002\012\133\016\224\006\b\136\007`\005\136E\128`\000\003\128\128\003\005\194\000\000\016\000\000\000\000\000\002\018\001;\128\b2\020C\128\024\" \029\128\022!\022\001\128\000\012\000\000\012\023\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!`\019\184\000\131#D8\001\130\"\001\216\001b\017`\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\012\000\000`\000\000`\184@\000\002\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\0000\000\001\192@\001\130\225\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!`\019\184\000\131#D8\001\130\"\001\216\001b\017`\024\000\000\192\000\000\193p\128\000\004\000\000\000\000\000\000\133\128N\224\002\012\141\016\224\006\b\136\007`\005\136E\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\b\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\192\000\007\001\000\006\011\132\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\128\001\000\000\000 \000\000\b\000\000\000\000@\000`\000\003\128\128\003\005\194\000\000\016\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\000\014\002\000\012\023\b\000\000@\000\000\000\000\000\000\000\000\b\000\000\000\000\002\000\000\000\128\000\000\000\004\b\006\000\0008\b\0000\\ \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\001\000\000\000@\000\000\000\002$\000\000\000\b\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\b\000\000\000\000\002\000\000\000\128\000\000\000\004H\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\002\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\014\224\002\012\133\016\224\006\b\136\007`\005\136E\000\000\000\016\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 \0000\000\001\192@\001\130\225\000\000\b\000\000\000\000\001\000\000\000\001\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\004\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\016\000\000\000\000\000\000\000\001\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\b\000\000\000\b\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\004@\000\000\000\000 \000\000\000\001\000\000\000\000\000\000\000\136\000\000\000\000\000\000\000\000\000 \000\000\000\000\012B\000@\128\004`$X \002\000\168\000\000\016@\001\136@\b\024\000\140\004\154\004\000@\020\000\000\002\b\0001\b\001\002\000\017\128\147@\128\b\002\128\000\000A\000\006!\000 @\0020\018(\016\001\000P\000\000\b \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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\144\218\132\128\163\001&\161\000\144\005(\0166\170\128\000\002\000\000\128\004\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\197!\181\t\001F\002M\194\001 \n\208\016mU\000\b\000\000\000\000\000\128\b\160\000\000\000\000\000\000\000\000\003\016\130\016 \001\024\t\022\b\000\128*\000\000$\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012B\000@\192\004`$\216 \002\000\168\000\000\016@\001\136@\b\016\000\140\004\155\004\000@\021\000\000\002\b\0001\b\001\002\000\017\128\145`\128\b\002\160\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\000\000\000\000\000\000\000\000\000\000\000\000\128\0006\000\000 \000\001\000\000 \000\n\000\t\138 \003\016\128\016 \001\024\t\022\b\000\128*\000\000\004\016\002\000\000\216\000\000\128\000\004\000\000\128\000(\000&(\128\012B\000@\128\004`$X \002\000\168\000\000\016@\b\000\003`\000\002\000\000\016\000\002\000\000\160\000\152\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000&!\r\160@\n0\018l\016\t\000V\128\002j\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\000\000\000\019\016\134\208 \005\024\t6\b\004\128+@\0015T\000r\024B?\001cE\"\193>1\005`@\012\150X\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\001\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\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196 \004\b\000F\002E\002\000 \n\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\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\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\004\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\024\132\000\129\000\b\192H\176@\004\001P\000\000 \128\016\000\006\192\000\004\000\000 \000\004\000\001@\0011D\000`\000\003\128\128\003\005\194\000\000\016\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\0001\b\001\002\000\017\128\145`\128\b\002\160\000\000A\000 \000\r\128\000\b\000\000@\000\b\000\002\128\002b\136\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\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\002\000\000\000\000\000\000\018\004@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196 $\b\000F\002E\130\000 \n\128\000\001\004\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\018\000\000\000\000\000\128\000\000\000\000\000\004\133\016\001\136@H\016\000\140\004\139\004\000@\021\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\000\000\000\000\000\001\016\000\000\000\000\b\000\000\000\000\000\000H\017\000\000\000\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000@\000\000\b\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\148\136\180&\t\029\025\245\b\012\128/`\001\188U\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\000\000\000\001\000\000\000\000\000\000\000\000\000\000\128\000\b\000\0000\000\001\192@\001\130\225\000\000\b\000\000\000\000\000\000\000\000\004\000\000\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\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\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\128\000\000\000\0067\b\001\022\n7\240\145\229\128 >\128P\000c\128\006!\000 @\0020\018,\016\001\000P\000\000\b \000\197 \005\t\000F\002MB\001 \n@\000M\021\128\016\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\000b\016\002\004\000#\001\"\193\000\016\005@\000\000\130\000\000\000\b\000\000\000\000\000\128\000\000\000\004\000\004\193\016\001\128\000\014\002\000\012\023\b\000\000@\000\000\000\000\000\000\000\000 \000\000\000\000\002\000\000\000\000\016\000\000\000\000\000\000\004\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014C\bG\224,h\164X'\198 \172\b\001\146\203\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\006)\000(H\0020\018*\016\001\000R\000\001( \000\196 \004\b\000F\002E\002\000 \n\000\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000cp\128\017`\163\127\t\030X\002\003\232\005\000\0068\000b\016\"\006A#\001&\193\000\016\005@\000\000\130\000\012\004\000@@\000@ \128\000\000\016\000\000\000\000\128\001\128\128\b\b\000\b\004\016\000\000\002\000\000\000\000\000\0000\016\001\000\000\001\000\130\000\000\000@\000\000\000\000\000\006\002\000 \000\000 \016\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\004\000\b\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\003\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\128\b\b\000\004\012\004\000\000\000\002\000\000\000\000\000\000\016\001!\000\000\129\128\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@\004\004\000\002\006\002\000\000\000\001\000\000\000\000\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\016\000\000\000\000\000\000\000\000\000\000\000\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\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\016\001\001\000\000\129\128\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! \002\168\000\131\001D8\000\002 \001\216\000\"\000@\004\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\003\000\000\t \001\024\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\004\000\001\000\000\001\128\000\015\002\000\012\023\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\006\000\0008\b\0000\\ \000\001\000\000\000\000\000\000! \002\168\000\131\001D8\000\002 \001\216\000\"\001@\024\000\000\224 \000\193p\128\000\004\000\000\000\000\000\000\132\128\n\160\002\012\005\016\224\000\b\128\007`\004\136\005\016\144\001T\000A\128\162\028\000\001\016\000\236\000\145\000 \012\000\000p\016\000`\184@\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\128\000\000\000\0000\000\001\192@\001\130\225\000\000\b\000\000\000\000\000\001\t\000\021@\004\024\n!\192\000\017\000\014\192\t\016\002\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\000\001\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\b\000\000\004\000@@\000 ` \000\000\000\016\000\000\000\000\000B@\005P\001\006\002\136p\000\004@\003\176\000D\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\128\000\000\000@\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\004$\000U\000\016`\168\135\000\000D\000;\002\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\000\000\000\000\000\016\001\001\000\000\129\128\128\000\000\000@\000\000\000\000\001\t\000\021@\004\024\n!\192\000\017\000\014\192\001\016\002\000@\004\004\000\002\006\002\000\000\000\001\000\000\000\000\000\004$\000U\000\016`(\135\000\000D\000;\000\004@\b\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\002\018\000*\128\b0TC\128\000\"\000\029\129\002 \004\000\128\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\t\000\021@\004\024*!\192\000\017\000\014\192\129\016\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004$\000U\000\016`(\135\000\000D\000;\000\004@\b\000\128\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\000B@\005P\001\006\002\136p\000\004@\003\176\000D\000\136\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\128\000\001\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\004\000\000\000\000\000\000\000\000\000\000\000\000` \002\000\000\002\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\000\000B@\005P\001\006\n\136p\000\006@\003\176\000L\000\128p\016!\000\000\001\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\128\000\000\004\000\b\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\001\000\016\016\000\b\024\b\000\000\000\004\000\000\000\000\000\016\000\000@\000\000\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\001\t\000\021@\004\024*!\192\000\025\000\014\192\1290\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\128\001\000\000 \000\000\000\000\000\000cp\128\017`\163\127\t\030X\002\003\232\005\000\0068\012n\016\018,\020o\225#\203\000@}\000\160\000\199\000\000\000\000\000\000\000 \000\000\000\000\128\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\016\000\128\000\000\000\0067\b\001\022\n7\240\145\229\128 >\128P\000c\128\006!\000\"\001@0\0188\176\000\000P\n\000\012` \000\001\016\000\000\000\000\000\000\000`\000@\144$\000\000\000\001\000 \000\000@\000\000\000\000@\000\002\000\000\000\001\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\000\000\000\000\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\002\000\000\004\000\000\000\000\004\000\000 \000\000\000\016\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\000\000\000\000\000\000\000\000\000\000\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\016\128\017\000\160\024\t\028X\000\000(\005\000\0060\012n\016\002,\020o\225#\203\000@}\000\160\000\199\000\012B\000DB\128`$\241`\000\000\160\020\000\024\192\001\136@\b\128P\012\004\158,\000\000\020\002\128\003\024\0001\b\001\016\n\001\128\145\197\128\000\002\128P\000c\000\198\225\000\"\225F\254\018|\176\004\007\208J\000\012p\024\220 \004X(\223\194O\150\000\128\250\t@\001\142\003\027\132\000\139\005\027\248H\242\192\016\031A(\0001\192cp\128\017p\163\127\t>X\002\003\232\005\000\0068\012n\016\002,\020o\225'\203\000@}\000\160\000\199\001\141\194\000E\130\141\252$y`\b\015\160\020\000\024\224\001\136@\b\024\000\140\004\155\004\000@\021\000\000\002(\0001\b\001\002\000\017\128\147`\128\b\002\160\000\000E\000\006!\000 @\0020\018,\016\001\000T\000\000\b\160\000\196 \004\b\000F\002E\130\000 \n\128\000\001\004\000\128\000\000\000\000 \000\001\000\000\000\000\000\000\t\002 cp\128\017`\163\127\t\030X\002\003\232\005\000\0068\000b\144\002\134\128#\001&\161\000\016\005\000\000\000\130\000\012R\000P\144\004`$\212 \002\000\160\000\000\016@\001\138@\n\018\000\140\004\138\132\000@\020\000\000\002\b\0009\012!\031\128\177\162\145`\159\024\130\176 \006K,\000\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\000\000\000\000\024\164\000\161 (\192H\168@\004\001@\000\000\160\128cp\128\017`\163\127\t\030X\002\003\232\005\000\0068\000b\016\002\006\000#\001&\193\000\016\005@\000\000\130\000\012B\000@\128\004`$\216 \002\000\168\000\000\016@\001\136@\b\016\000\140\004\139\004\000@\021\000\000\002\b\000\000\000\000\000\000\000\000\002\000\000@\000\016\000\018\004@\198\225\000\"\193F\254\018<\176\004\007\208\n\000\012p\000\196 \004\012\000F\002M\130\000 \n\128\000\001\004\000\024\132\000\129\000\b\192I\176@\004\001P\000\000 \128\003\016\128\016 \001\024\t\022\b\000\128*\000\000\004\016\000\000\000\000\000\000\000\000\004\000\000\000\000 \000$\b\129\141\194\000E\130\141\252$y`\b\015\160\020\000\024\224\001\136@\b\128P\012\004\142,\000\000\020\002\128\003\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004<\247w\175\245|\233\207\239\255\237\193\251\251o\255\190\001\000\000\000\000\000\024\001\028\000\000\000\000\000\000\000\000\012n\024B?\021o\229#\203>a} \224\012\215X\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001\184A\b\176Q\191\132\143,\001\001\244\002\128\003\028\0067\b!\022\n7\240\145\229\128 >\128P\000c\128\006\002\000 \000 \016@\000\000\b\000\000\000\000\000\000\192@\004\000\000\004\002\b\000\000\001\000\000\000\000\000\000\024\b\000\128\000\000\128@\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\016\000 \000\000\000\000\000\000\016\000\000 \002\002\000\001\003\001\000\000\000\000\128\000\000\000\000\002\000\000\b\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\0067\b!\022\n7\240\145\229\128 >\128P\000c\128\198\225\004\"\193F\254\018<\176\004\007\208\n\000\012p\000\196 \132\b\000F\002E\130\000 \n\000\000\001\004\000\000\000\000\000\000\000\000\001\000\000\000\000\b\000\t\130 \003\000\000\028\004\000\024.\016\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000 \000\000\000\001\141\194\000E\130\141\252$y`\b\015\160\020\000\024\224\001\136@\b\136P\012\004\158,\000\000\020\002\128\003\024\0001\b\001\016\n\001\128\147\197\128\000\002\128P\000c\000\006!\000\"\001@0\0188\176\000\000P\n\000\012`!\"\147\184>\131\225L8\001\255n\005\222\155~p\240\024\132\000\136\005\000\192H\226\192\000\001@(\0001\128\135\158\238\245\254\175\1579\253\255\253\184?\127m\255\247\192\000\000\000\000\000\002\000\002\128\000\000\000\000\000\000\000\001\141\194\000E\130\141\252$y`\b\015\160\020\000\024\2241\184@\b\176Q\191\132\143,\001\001\244\002\128\003\028\by\236\239_\234\249\211\159\213\255\219\131\247\246\223\255<\000\000\000\000\000\0000\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\004\128\000\003\000\000\028\004\000\024.\016\000\000\128\000\000\000\000\000\000\000\000\200\000\000\000\000\004\000\000\000\000 \000\000\000\000\012\000\000p\016\000`\184@\000\002\000\000\000\000\000\000\000\000\003 \000\000\000\000\016\000\000\000\000\128\000@\000\0000\000\001\192@\001\130\225\000\000\b\000\000\000\000\000\000\000\000\012\128\000\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\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\001\136@\b\128P\012\004\142,\000\000\020\002\128\003\024\by\236\239_\234\249\211\159\213\255\219\131\247\246\223\255|\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\b\000\000\000\000\000\192\000\160\000\000\000\000\000\000\000\000cp\128\017`\163\127\t\030X\002\003\232\005\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\000BE'p}\007\194\152p\003\254\\\011\188\022\252\225\2307\b\001\022\n7\240\145\229\128 >\128P\000c\129\015=\157\235\253_:s\250\191\251p~\254\219\255\231\161\"\147\184>\131\225L8\001\255n\005\222\155~p\240\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \004\000\000\b\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\016\002\000\000\004\000\000\000\000\004\000\128\000\000\000\0001\b\001\016\n\001\128\145\197\128\000\002\128P\000c\000\000\000@\b\000\000\016\000\000\000\003\016\000\004\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\128\016\000\000 \000\000\000\000 \004\000\000\000\000\001\136@\b\128P\012\004\142,\000\000\020\002\128\003\024\000\000\002\000@\000\000\128\000\000\000\024\128\000$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196 \004@(\006\002G>\000\000\n\001@\001\140\000\000\000\000\000\000\000\000\000\000\000\000@\000\002\000\000\000\001\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\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\0001\b\001\016\n\001\128\145\207\128\024\002\128t\000c\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\004\000\000\000\000\000\001\012n\016\002,\020o\225#\203\000@}\000\160\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\016\198\225\000\"\193F\254\018<\176\004\007\208\n\000\012p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004$Rw\007\208|)\135\000?\229\192\187\193o\206\030cp\128\017`\163\127\t\030X\002\003\232\005\000\0068\016\145I\220\031A\240\166\028\000\255\151\002\239\005\1918y\141\194\000E\130\141\252$y`\b\015\160\020\000\024\224BE'p}\007\194\152p\003\254\\\011\188\022\252\225\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\015=\157\235\253_:s\250\191\251p~\254\219\255\231\161\"\147\184>\131\225L8\001\255n\005\222\155~p\243\027\132\000\139\005\027\248H\242\192\016\031@(\0001\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\028\255Y\222?U\255\231?\203\255\215\127\239\165\191\255z\246\236D\b/\226\164\000\b\0248\0298\224\176(41\184@\b\176Q\191\132\143,\001\001\244\002\128\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\024\220 \004X(\223\194G\150\000\128\250\001@\001\142\004$Rw\007\208|)\135\000?\229\192\187\193o\206\030cp\128\017`\163\127\t\030X\002\003\232\005\000\0068\016\145I\220\031A\240\166\028\000\255\151\002\239\005\1918y\141\194\000E\130\141\252$y`\b\015\160\020\000\024\224BE'p}\007\194\152p\003\254\\\011\188\022\252\225\2307\b\001\022\n7\240\145\229\128 >\128P\000c\129\t\020\157\193\244\031\na\192\015\249p.\240[\243\135\152\220 \004X(\223\194G\150\000\128\250\001@\001\142\004$Rw\007\208|)\135\000?\229\192\187\193o\206\030cp\128\017`\163\127\t\030X\002\003\232\005\000\0068\016\145I\220\031A\240\166\028\000\255\151\002\239\005\1918y\141\194\000E\130\141\252$y`\b\015\160\020\000\024\224BE'p}\007\194\152p\003\254\\\011\188\022\252\225\2307\b\001\022\n7\240\145\229\128 >\128P\000c\129\t\020\157\193\244\031\na\192\015\249p.\240[\243\135\152\220 \004X(\223\194G\150\000\128\250\001@\001\142\004$Rw\007\208|)\135\000?\229\192\187\193o\206\030cp\128\017`\163\127\t\030X\002\003\232\005\000\0068\016\145I\220\031A\240\166\028\000\255\151\002\239\005\1918y\141\194\000E\130\141\252$y`\b\015\160\020\000\024\224BE'p}\007\194\152p\003\254\\\011\188\022\252\225\2307\b\001\022\n7\240\145\229\128 >\128P\000c\129\t\020\157\193\244\031\na\192\015\249p.\240[\243\135\152\220 \004X(\223\194G\150\000\128\250\001@\001\142\004$Rw\007\208|)\135\000?\229\192\187\193o\206\030cp\128\017`\163\127\t\030X\002\003\232\005\000\0068\016\145I\220\031A\240\166\028\000\255\151\002\239\005\1918y\141\194\000E\130\141\252$y`\b\015\160\020\000\024\224BE'p}\007\194\152p\003\254\\\011\188\022\252\225\2307\b\001\022\n7\240\145\229\128 >\128P\000c\129\t\020\157\193\244\031\na\192\015\249p.\240[\243\135\152\220 \004X(\223\194G\150\000\128\250\001@\001\142\004$Rw\007\208|)\135\000?\229\192\187\193o\206\030cp\128\017`\163\127\t\030X\002\003\232\005\000\0068\016\145I\220\031A\240\166\028\000\255\151\002\239\005\1918y\141\194\000E\130\141\252$y`\b\015\160\020\000\024\224BE'p}\007\194\152p\003\254\\\011\188\022\252\225\2307\b\001\022\n7\240\145\229\128 >\128P\000c\129\t\020\157\193\244\031\na\192\015\249p.\240[\243\135\128\196 \004\b\000F\002M\130\000 \n\000\000\001\004\000\024\132\000\129\000\b\192H\176@\004\001@\000\000 \128\000\000\000\000\000\000\000\000 \000\000\000\001\000\0010D\000`\000\003\128\128\003\005\194\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\004\000\000\000\0001\184@\b\176Q\191\132\143,\001\001\244\002\128\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\002\000\002@\136\024\220 \004X(\223\194G\150\000\128\250\001@\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\016\128\016 \001\024\t\022\b\000\128*\000\000\004\016\000\000\000\000\000\000\000\000\004\000\000\000\000 \000$\b\128\012B\000@\128\004`$X \002\000\168\000\000\016@\000\000\000\000\000\000\000\000\016\000\000\000\000\128\000\144\"\0001\b\001\002\000\017\128\145`\128\b\002\160\000\000A\000\000\000\000\000\000\000\000\000@\000\000\000\002\000\002@\136\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\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\004\000\004\129\016\001\136@\b\016\000\140\004\139\004\000@\021\000\000\002\b\000\000\000\000\000\000\000\000\002\000\000\000\000\016\000\018\004@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \002(\000\130\001D0\000\003 \001\152\000\002\000E\237\216\136\016_\197H\000\0160p:q\193`Phg\240\136\181b\171\127\025\158X\n\003\238\005\000\0308\000b\016\002\004\000#\001\"\193\000\016\005@\000\000\130\000@\000\002\000\000\000\000\000\128\000\000\000\000\000\004\129\0161\184@\b\176Q\191\132\143,\001\001\244\002\128\003\028\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\000\002\000 \000\000\000@\000\000\000\000\000\000\000\000\000@\000\000\004\000\002\000\b\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000@\001\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\144\001\020\000A\000\162\024\000\001\016\000\236\000\001\000\000\004\000@@\000 ` \000\000\000\016\000\000\000\000\000B@\004P\001\006\002\136p\000\004@\0030\000\004\000\000H\000\138\000 \128Q\012\000\000\136\000f\000\000\128\000\t\000\017@\004\017\n!\128\012\025\000\012\192\b\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\003\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\012\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\128\000\b\000\0000\016\001\000\000\001\000\128\000\000\000@\000\000\000\000\000\t\000\017@\004\016*!\192\000\025\000\012\192\000\016\002\000@\004\004\000\002\006\002\000\000\000\001\000\000\000\000\000\004\000\000\000\000\000 \000\001\000\000\000\000\b\000\000\000\000\003\001\000\016\000\000\016\b\000\000\000\004\000\000\000\000\000\000\144\001\020\000A\002\162\028\000\001\144\000\204\000\001\000 \018\000\"\128\b \020C\000\000\"\000\025\128\000 \004\002@\004P\001\004\002\136@\000\004@\0030\000\004\000\1280\000\000\000\000\000\000\002\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\004\000\000\000\000\000\000@\000\004\000\000$\000E\000\016@(\134\000\000D\0003\000\000@\b\004\128\b\160\002\b\005\016\128\000\b\128\006`\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\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\001 \002(\000\130\001D0\000\002 \001\152\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\189\187\017\002\011\248\169\000\002\006\014\007N8,\n\r\012\254\017\022\172Uo\2273\203\001@}\192\160\003\199\002\246\236D\b/\226\164\000\b\0248\0298\224\176(43\248DZ\177U\191\140\207,\005\001\247\002\128\015\028\0000\016\001\001\000\001\000\130\000\000\000@\000\000\000\000\000\006\002\000 \000\000 \016@\000\000\b\000\000\000\000\000\000\192@\004\000\000\004\002\000\000\000\001\000\000\000\000\000\000$\000E\000\016@\168\135\000\000D\0003\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\003\000\004\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\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\001\000\000\006\000\0008\b\0000\\ \000\001\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\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\003\128\128\003\005\194\000\000\016\000\000\000\000\000\000\018\000\"\128\b\"\020C\128\024\"\000\029\128\016 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\001\017@\004\016\n!\128\000\017\000\012\192\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000E\000\016@(\134\000\000D\0003\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\001\020\000A\016\162\028\000\193\016\000\236\000\129\000\000\004@\000\000@\000@\000\192\000\000\000 \000\000\000\000\000\136\000\000\000\000\b\000\024\000\000\000\004\000\000\000\000\000\017\000\000\000\000\001\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\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\b\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\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\"\128\012 \020C\128\000\"\000\029\128\000`\000\001\128\000\012\000\000\012\023\n\000\000@\000\000\000\000\000\000\000\000\000\000\001\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\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\003\000\000\028\004\000\024.\016\000\000\128\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\b\000\000\000\012\000\000p\016\000`\184@\000\002\000\000\000\000\000\000\000\000\002 \000\000\000\000\016\000\000\004\000\000\000\000\002\000\000\000D\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\b\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\004\002\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\004@\000\000\000\000 \000\000\b\000\000\000\000\004\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\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\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\024\000\000\192\000\000\193p\128\000\004\000\000\000\000\000\000\005\128H\160\002\012\r\016\224\000\012\128\006`\004\bA\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\001\"\128\b 4C\128\0002\000\025\128\016!\004\000\136\000\000\000\000\b\000\b\000\000\000\004\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\002\000\000\t\000\017@\004\016\n!\192\000\017\000\012\192\128\016\128\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\001\000\000\004\128\b\160\002\b\005\016\224\000\b\128\006`\000\b\000\000\144\001\020\000A\000\162\024\000\001\016\000\204\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\000\012\000\000\012\023\n\000\000@\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\004\000\000\000\006\000\0000\000\0000\\(\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\024\000\000\192\000\000\193p\128\000\004\000\000\000\000\000\000\005\128\b\160\002\b\r\016\224\000\012\128\006`\004\bA\000\176\t\020\000A\129\162\028\000\001\144\000\204\000\129\b \000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\001\128\000\012\000\000\012\023\b\000\000@\000\000\000\000\000\000X\000\138\000 \128\209\014\000\000\200\000f\000@\132\016\011\000\145@\004\024\026!\192\000\025\000\012\192\b\016\130\001 \002(\000\130\001D8\000\002 \001\152\000\002\000\000$\000E\000\016@(\134\000\000D\0003\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\030\000\"\240\024 `\250@\000\"\000\024\000\000 \000\001\128\000\004\152 \140\000\016\000 \000\000\000\000\000\016\0000\000\000\146\004\017\128\002\000\004\000\000\000\000\000\002\000\006\000\000\018@\1300\000\000\000\128\000\000\000\000\000@\000\192\000\002H\000F\000\000\000\016\000\000\000\000\000\b\000\b\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\004\128\b\160\130\b\000\016\192\000\b\000\007`\004H\001\000b\000\003\192\128\003\005\194\128\000\016\001\000\016\000\b\000\012\000\002p\016\000`\184@\000\002\000\000\000\000\001@\000\000\000\000\000\b\004\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,\128E\000\016@\168\134\128\000D\000s\000 @\b\004\128\b\160\003\b\005\016\224\000\b\128\006`\004\024A\000\144\001\020\000A\000\162\028\000\001\016\000\204\000\129\b \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002@\004P\001\004\002\136`\000\004@\0030\002\004 \128\017\000\000\000\000\001\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000E\000\016@\000\134\000\000@\0003\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\002@\004P\001\004\002\136p\000\004@\003\176\002\004\000\128\017\000\000 \000\001\000\001@\000\000\000\128\b\000\004\000\002 \000\000\000\000 \000(\000\000\000\016\001\000\000\128\000\000\000\000\000\004\002\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\002@\004P\001\132\002\136p\000\004@\0030\002\012 \128H\000\138\000 \128Q\014\000\000\136\000f\000@\132\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\002\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\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\017@\004\016\n!\128\000\017\000\012\192\b\016\002\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\001\016\000\002\000\000\016\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\004@\000\000\000\000@\000@\000\000\000 \000\000\001\000\002@\004P\001\004\000\b`\000\004\000\0030\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\001\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\144\001\020\016A\000\002\024\000\001\000\000\236\000\137\000 \012@\000x\016\000`\184P\000\002\000 \002\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000\138\000 \128\001\012\000\000\128\000f\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$\000E\000\016@(\134\000\000D\0003\000 @\b\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\004@\000\b\000\000@\000@\000\000\000 \000\000\001\000\000\136\000\000\000\000\b\000\b\000\000\000\004\000\000\000 \000H\000\138\000 \128\001\012\000\000\128\000f\000\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \002(\000\130\000\004 \000\002\000\001\152\000\002\000\000\b\000\000\000\128\000\000\001\000\000\000\000\000\000\000\001\000\001\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\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002@\004P\001\004\b\b`\000\004\000\0030 \004\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$\000E\000\016@\128\134\000\000@\0003\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000p\000 \002\000\000\000\004\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\128\000\000\000\000\004\000\016\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\t\000\017@\004\016\000!\128\000\016\000\014\192\000\144\000\000@\004\004\000\002\006\002\000\000\000\001\000\000\000\000\000\004$\000E\000\016`\000\135\000\000@\0003\000\000@\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\012\000\004\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\128\000(\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\017@\004\016 !\128\000\016\000\012\192\128\016\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000 \002\002\000\001\003\001\000\000\000\000\128\000\000\000\000\002\018\000\"\128\b0\000C\128\000 \000\025\128\000 \004\002@\004P\001\004\000\b@\000\004\000\0030\000\004\000\1280\000\000\000\000\000\000\002\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\004\000\000\b\000\128\128\000@\192@\000\000\000 \000\000\000\000\000\132\128\b\160\002\012\000\016\224\000\b\000\006`\000\b\001\000\144\001\020\000A\000\002\016\000\001\000\000\204\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\000\000\000\000\016\000\001\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \002(\000\130\000\0040\000\002\000\001\152\016\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\016\000\b\024\b\000\000\000\004\000\000\000\000\000\016\144\001\020\000A\128\002\028\000\001\000\000\204\000\001\000\000\018\000\"\128\b \000C\000\000 \000\025\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\001\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@\004\004\004\002\006\002\b\000\000\001\000\000\000\000\000\000\b\000\128\128\000@\192A\000\000\000 \000\000\000\000\000\001\000\016\016\000\b\024\b\000\000\000\004\000\000\000\000\000\016\144\001\020\000A\128\002\028\000\001\000\000\204\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\000\000\b\000\b\000\024\000\000\000\004\000\000\000\000\000\017\000\000\000\000\001\000\003\000\000\000\000\128\000\000\000\000\002 \000\000\000\000 \000 \000\000\000\016\000\000\000\000\001 \002(\000\194\000\0048\000\002\000\001\152\000\006\000\000D\000\000\000\128\000@\001\128\000\000\000\000\000\000\000\000\b\000\000\000\016\000\b\0000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\001\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\128\001\000\000\000\000\000\000\000\000\000\004\000\000\018@\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\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\004\000\000@\002\000$ @\000\000\000\000\000\000\000\000\002\000\000\016\000\000H\bP\001\000\000\000\016\002\000\000\000@\000\002\000\000\t\001\b\000 \000\000\002\000@\000\000\006\000\0008\b\0000\\ \000\001\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\004\000\000 \000\000\128\016\128\002\000\000\000 \004\000\000\001\000\000\000\000\002\001\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\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\000\000\000\016\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\016\000\000`\000\003\128\128\003\005\194\000\000\016\000\000\000\000\000\000\016\000\000\128\000\002\000C\128\b\000\000\000\128\016\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\002\000\000\000\000\000\000\000\000\000\016\000\000\004\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\b\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\b\000\0000\000\001\192@\001\130\225\000\000\b\000\000\000\000\000\000\b\000\000@\000\001\000!\128\004\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\128\004\000HA\128\000\000\000\000\000\000\000\000\001\000\000\016\000\128\t\b\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\000\000\000\128\000\000\000\000\000\000\000\128\000\128\000\000\000\000\000\000\016\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\b\000\000\000\128\000\000\000@\000\004\000 \002B\004\000\000\000\000\000\000\000\000\000\024\000\000\224 \000\193p\128\000\004\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\001\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\001\128\000\014\002\000\012\023\b\000\000@\000\000\000\000\000\000\000\000\b\000\000\000\000\002\000\000\000\000\000\000\016\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\004\128\n\160\002\b\133\016\224\002\b\128\007`\004\b\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000 \000\000\000\016\000\001\000\b\000\144\129\000\000\000\000\000\000\000\000\000\t\000\021@\004\017\n!\192\004\017\000\014\192\b\016\002\001\000\000\b\000\000 \0048\000\128\000\000\b\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\028\004\000\024.0\000\000\128\000\000\000\000\000\000`\000\003\128\128\003\005\194\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\004\000\000\000\000\001\128\000\014\002\000\012\023\b\000\000@\000\000\000\000\000\000@\000\002\000\000\b\001\014\000`\000\000\002\000@\000\000\b\000\000@\000\001\000!\128\004\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\000\000\000\000\000\000\000\000\000\000\000\128\000\004\000\000\016\002\024\000@\000\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\000\000\000\000\000\000\000@\000\002\000\000\b\001\b\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 \002(\000\130\001D8\000\002 \001\152\000\002\000@$\000E\000\016@(\132\000\000D\0003\000\000@\b\b\000\000\000\000\000\b\0000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\001\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\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\002\000\000 \001\000\018\016 \000\000\000\000\000\000\000\000\001 \002(\000\130\001D8\000\002 \001\152\000\002\000@$\000E\000\016@(\132\000\000D\0003\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\192\000\000\000\000\000\000\000\000\004\000\000\000\000\000\004\000\b\000\000\000\000\000\000\000\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\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\024\000\000\224$\000\201p\128\000\004\000\000\000\000\000\000\005\128J\160\002\012\b\016\224\000\b\128\007`\000\024\001\000`\000\003\000\000\003\005\194\000\000\016\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\001\128\000\014\002@\012\151\b\000\000@\000\000\000\000\000\0000\000\001\192@\001\130\225\000\000\b\000\000\000\000\005\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\002\000\128\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\024\000\000\224$\000\201p\128\000\004\000\000\000\000\000\000\003\000\000\024\000\000\024.\016\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\012\000\000p\018\000d\184@\000\002\000\000\000\000\000\000\002\192%P\001\006\004\bp\000\004@\003\176\000\004\000\128X\004\170\000 \192\129\014\000\000\136\000v\000\000\128\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \002\168\000\130\000\0048\000\002\000\001\216\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\144\001\020\000A\000\002\024\000\001\000\000\204\000\001\000 \018\000\"\128\b \000B\000\000 \000\025\128\000 \004\004\000\000\000\000\000\004\000\024\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\128\001\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\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\003\000\000\028\004\128\025.\016\000\000\128\000\000\000\000\000\000\144\001\020\000A\000\002\024\000\001\000\000\204\000\001\000 \018\000\"\128\b \000B\000\000 \000\025\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\001 \002(\000\130\000\004 \000\002\000\001\152\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\001 \002(\000\130\000\0040\000\002\000\001\152\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\b\160\002\b\000\016\128\000\b\000\006`\000\b\001\000@\000\001$\000#\000\004\000\b\000\000\000\000\000\004\000\b\000\000$\128\004`\000\000\001\000\000\000\000\000\000\128\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000H\000\138\000 \128Q\012\000\000\136\000v\000@\128\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \002(\000\130\001D0\000\002 \001\152\001\002\000@$\000E\000\016@(\132\000\000D\0003\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\018\000\"\128\b \000B\000\000 \000\025\128\000 \004\001\000\000\004\144\000\140\000\016\000 \000\000\000\000\000\016\000 \000\000\146\000\017\128\000\000\004\000\000\000\000\000\002\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\016\000\000\024\128\000\240 \000\193p\160\000\004\000@\004\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\001\020\000A\000\002\024\000\001\000\000\204\000\129\000 \018\000\"\128\b \000B\000\000 \000\025\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\128\000\000\000\000\000\000\000\000\004@\000\000\b\000\004\000\024\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\128\003\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\016\000 \000\000\000\000\000\000\000\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@\000\000\000\000\000\000\000\000\000\000\003\020\128\020$\001\024\t\021\b\000\128)\000\000\020\016\000 \000\002\000\016\003!\002\000\000\000 \000\000\000\000\000\016\000\000\128\000\002@B\128\024\000\000\000\128\016\000\000\002\000\000\016\000\000H\b@\003\000\000\000\016\002\000\000\000@\000\002\000\000\b\001\b\000`\000\000\002\000@\000\000\016\000\000\000\000 \016\000@\000\000\000\000\000\000\000@\000\000\000\000\000\004\002\000\b\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\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\018\000\001\141\194\000E\130\141\252$y`\b\015\160\020\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\016\000\000\000\000\198\225\000\"\193F\254\018<\176\004\007\208\n\000\012p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\001\000\000\004\000\134\0000\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\000\000\002\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\128\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\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\003\000\000\028\004\000\024.\016\000\000\128\000\000\000\000\000\000\128\000\004\000\000\016\002\028\000\192\000\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\000\128\000H\000\0067\b\001\022\n7\240\145\229\128 >\128P\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\003\027\132\000\139\005\027\248H\242\192\016\031@(\0001\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000@\000\001\000\004\000\000\000\000\000\000\000\004\000\000\000\000\b\000\000 \000\128\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\128\000\000\000\000\000\000\000\000\000\000\006)\000(H\0020\018*\016\001\000R\000\000( \000\224\000\007\001\000\006\011\132\000\000 \000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000`\000\003\128\128\003\005\194\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\004\000\000\000\0001\184@\b\176Q\191\132\143,\001\001\244\002\128\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\002\000\000\000\000\024\220 \004X(\223\194G\150\000\128\250\001@\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012R\000P\144\004`$T \002\000\164\000\002P@\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\0067\b\001\022\n7\240\145\229\128 >\128P\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\004\000\000 \000\000\128\016\192\006\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\b\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\016\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\016\000\000`\000\003\128\128\003\005\194\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\004\000\000\000\000\000\000\000\000\000\000\0001H\001B@\017\128\145P\128\b\002\144\000\001A\000\007\000\0008\b\0000\\ \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\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\003\000\000\028\004\000\024.\016\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000 \000\000\000\001\141\194\000E\130\141\252$y`\b\015\160\020\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\016\000\000\000\000\198\225\000\"\193F\254\018<\176\004\007\208\n\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\000\000\000cp\128\017`\163\127\t>X\002\003\232\005\000\0068\012n\016\002,\020o\225#\203\000@}\000\160\000\199\000\016\000\000\128\000\002\000C\000\024\000\000\000\128\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\001\000\b\001\144\131\000\000\000\016\000\000\000\002\000\002\000\000 \001\0002\016`\000\000\002\000\000\000\000\000\000@\000\004\000 \006B\004\000\000\000@\000\000\000\000\000\b\000\000\128\004\000\200@\128\000\000\b\000\000\000\000\000\003\016\129\0162\001\024\t6\b\000\128(\000\000\004\016\023\183b A\127\021 \000@\193\192\233\199\005\129A\160\012B\004@\128\004`$\216 \002\000\160\000\000\016@\001\136@\136\016\000\140\004\139\004\000@\020\000\000\002\b\0001\b\001\002\000\017\128\145`\128\b\002\128\000\000A\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\000\000\002\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\001\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\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\001\000\000\000\000\128\000\b\000@\012\132\b\000\000\000\128\000\000\000\000\0000\000\001\192@\001\130\225\000\000\b\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\002\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\003\020\128\020$\001\024\t5\b\000\128(\000\000\004\016\000b\144\002\132\128#\001\"\161\000\016\005\000\000\000\130\000\012R\000P\144\020`$T \002\000\160\000\000\016@\000\128\000\b\000@\012\132\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\016\002\000\000 \001\0002\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<\164U\1685D\232\207\234\240D\001s( \241\168\003\016\128\017\000\160\024\t\028X\000\000(\005\000\0060\016\243\217\222\191\213\243\167?\171\255\183\007\239\237\191\254\250\030{;\215\250\190t\231\245\127\246\224\253\253\183\255\223\003\202EZ\131TN\140\254\175\004@\0232\130\015\026\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$\000U\000\016D(\135\0000D\0003\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\000\018\000*\128\b\"\020C\128\024\"\000\025\128\016`\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\021@\004\017\n!\192\012\017\000\012\192\b0\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\002\000\000\000\001\000\000\016\000\128\025\b\016\000\000\001\000\000\000\000\000\000\144\001T\000A\016\162\028\000\193\016\000\204\000\131\000\160\012B\004@\128\004`$X \002\000\160\000\000\016@\001\136@\b\016\000\140\004\139\004\000@\020\000\000\002\b\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\128\000\000\000\000\b\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\003\000\000\028\004\128\025.\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\000\000\000\000\002\000\000\016\000\000@\bp\003\000\000\000\016\002\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\001\000\000\b\000\000 \0040\001\128\000\000\b\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\128\025\b\016\000\000\001\000\000\000\000\000\000\128\000\004\000\000\016\002\028\000\192\000\000\004\000\128\000\128\016\000\000\128\000\002\000C\000\024\000\000\000\128\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\001\192@\001\130\227\000\000\b\000\000\000\000\000\000\006\000\0008\b\0000\\ \000\001\000\000\000\000\000\000\001\000\000\b\000\000 \0040\001\128\000\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\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\002\000C\000\024\000\000\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\b\000\000@\000\001\000!\000\012\000\000\000@\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000$\000E\000\016@(\135\000\000D\0003\000\000@\b\003\000\000\028\004\128\025.\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\004\000\000@\002\000d @\000\000\004\000\000\000\000\000\002@\004P\001\004\002\136p\000\004@\0030\000\004\000\1281H\001B@\017\128\145P\128\b\002\144\000\001A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \002(\000\130\001D0\000\002 \001\152\000\002\000@$\000E\000\016@(\132\000\000D\0003\000\000@\b\b\000\000\000\000\000\b\0000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\001\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\004\000\000\000\000\000\000\000\000\000\000\0001H\001B@\017\128\145P\128\b\002\144\000\001A\000\t\000\017@\004\016\n!\128\000\017\000\012\192\000\016\002\001 \002(\000\130\001D \000\002 \001\152\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\018\000\"\128\b \020B\000\000 \000\025\128\000 \000\001\136@\136\024\000\140\004\155\004\000@\020\000\000\002\b\0001\b\017\002\000\017\128\147`\128\b\002\128\000\000A\000\006!\002 @\0020\018,\016\001\000P\000\000\b \000\196 \004\b\000F\002E\130\000 \n\000\000\001\004\000$\000E\000\016@(\134\000\000d\0003\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\001 \002(\000\130\001D \000\002 \001\152\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\144\001\020\000A\000\162\016\000\001\016\000\204\000\001\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002@\004P\001\004\002\136`\000\004@\0030\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\017@\004\016\n!\000\000\017\000\012\192\000\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\000\000\000\000\000\000\000\000\000\000\018\000\"\128\b \020C\000\000 \000\025\128\000 \000\002@\004P\001\004\002\136@\000\004\000\0030\000\004\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$\000E\000\016@(\132\000\000d\0003\000\000@\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\001\020\000A\000\162\016\000\001\144\000\204\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\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\004$Rw\007\208|)\135\000?\229\192\187\193o\206\030cp\128\017`\163\127\t\030X\002\003\232\005\000\0068\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\0001\184@\b\176Q\191\132\143,\001\001\244\002\128\003\028\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\144\000\000\000\000\000\000\000\000\000\128\000\160\000\000\000\000\000\000\000\000cp\128\017`\163\127\t\030X\002\003\232\005\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#`|\001\128\016\016\000\248\004\000\128\000\176\192f7\b-\022\n7\240\145\229\128 >\128P\000s\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\220 \004X(\223\194G\150\000\128\250\001@\001\142\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\012n\016\002,\020o\225#\203\000@}\000\160\000\199\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\024\220 \004X(\223\194G\150\000\128\250\001@\001\142\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\135\158\206\245\254\175\157y\253_\253\184?\127m\255\243\204n\016\002,\020o\225#\203\000@}\000\160\000\199\002\018);\131\232>\020\195\128\031\242\224]\224\183\231\0151\184@\b\176Q\191\132\143,\001\001\244\002\128\003\028\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\001\015=\157\235\253_:\243\250\191\251p~\254\219\255\231\152\220 \004X(\223\194G\150\000\128\250\001@\001\142\004$Rw\007\208|)\135\000?\229\192\187\193o\206\030cp\128\017`\163\127\t\030X\002\003\232\005\000\0068\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\002\030{;\215\250\190u\231\245\127\246\224\253\253\183\255\2071\184@\b\176Q\191\132\143,\001\001\244\002\128\003\028\bH\164\238\015\160\248S\014\000\127\203\129w\130\223\156<\002\000\000\000\000\0000\000(\000\000\000\000\000\000\000\000\024\220 \004X(\223\194G\150\000\128\250\001@\001\142\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\135\158\206\245\254\175\157y\253_\253\184?\127m\255\243\204n\016\002,\020o\225#\203\000@}\000\160\000\199\002\018);\131\232>\020\195\128\031\242\224]\224\183\231\0151\184@\b\176Q\191\132\143,\001\001\244\002\128\003\028\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\001\015=\157\235\253_:\243\250\191\251p~\254\219\255\231\152\220 \004X(\223\194G\150\000\128\250\001@\001\142\004$Rw\007\208|)\135\000?\229\192\187\193o\206\030cp\128\017`\163\127\t\030X\002\003\232\005\000\0068\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\002\030{;\215\250\190u\231\245\127\246\224\253\253\183\255\2071\184@\b\176Q\191\132\143,\001\001\244\002\128\003\028\bH\164\238\015\160\248S\014\000\127\203\129w\130\223\156<\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\000\000\000\000\000\000\000\000\004\000\005\000\000\000\000\000\000\000\000\003\027\132\000\139\005\027\248H\242\192\016\031@(\0001\192\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\243\217\222\191\213\243\175?\171\255\183\007\239\237\191\254y\141\194\000E\130\141\252$y`\b\015\160\020\000\024\224BE'p}\007\194\152p\003\254\\\011\188\022\252\225\2307\b\001\022\n7\240\145\229\128 >\128P\000c\128\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000!\231\179\189\127\171\231^\127W\255n\015\223\219\127\252\243\027\132\000\139\005\027\248H\242\192\016\031@(\0001\192\132\138N\224\250\015\1330\224\007\252\184\023x-\249\195\204n\016\002,\020o\225#\203\000@}\000\160\000\199\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000C\207gz\255W\206\188\254\175\254\220\031\191\182\255\249\2307\b\001\022\n7\240\145\229\128 >\128P\000c\129\t\020\157\193\244\031\na\192\015\249p.\240[\243\135\161\231\179\189\127\171\231^\127W\255n\015\223\219\127\252\243\027\132\000\139\005\027\248H\242\192\016\031@(\0001\192\132\138N\224\250\015\1330\224\007\252\184\023x-\249\195\208\243\217\222\191\213\243\167?\171\255\151\007\239\165\191\254x\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\198\225\000\"\193F\254\018<\176\004\007\208\n\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\000\000cp\128\017`\163\127\t\030X\002\003\232\005\000\0068\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\002\000\000\000\000\016\000\018\004@\198\225\000\"\193F\254\018<\176\004\007\208\n\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\000\016cp\128\017`\163\127\t\030X\002\003\232\005\000\0068\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012B\000@\128\004`$X \002\000\160\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\006!\004\"\001@0\0188\176\000\000P\n\000\012`\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\000cp\128\017`\163\127\t\030X\002\003\232\005\000\0078\000\000\000\000\000\000\000\000\000\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\0067\b\t\022\n7\240\145\229\128 >\128P\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\b\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\001\136@\b\128P\012\004\142,\000\000\020\002\128\003\024\b\000\000\000\000\000\000\000\000\000\000\024\000\000$\000\000\000\002\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\b\000\004\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\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\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\128\000\000\000\000\000\000\000\000\000\001\128\000\002@\000\000\000 \000\000\000\000\003\000#\128\000\000\000\000\000\000\000\002\000\000\017\000\000\000\000\000\000\000\006\000\004\t\002@\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\000\000\000\000\000\000\000\024\220 \004X(\223\194G\150\000\128\250\001@\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000cp\128\017`\163\127\t\030X\002\003\232\005\000\0068\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\004\000\000\0067\b\001\022\n7\240\145\229\128 >\128P\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\003\027\132\000\139\005\027\248H\242\192\016\031@(\0001\192\000\b\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\012n\016\002,\020o\225#\203\000@}\000\160\000\199\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\0001\184@\b\176Q\191\132\143,\001\001\244\002\128\003\028\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\028\134\016\143\192X\209H\176O\140AX\016\003%\150\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\012R\000P\144\020`$T \002\000\160\000\000P@\001\128\000\012\000\000\012\023\b\000\000@\000\000\000\000\000\000\016\000\000\000\000@\128\000\000\000\b\000\000\000\000\000\000\198\225\000\"\193F\254\018<\176\004\007\208\n\000\012p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\164\000\161 (\192H\168@\004\001@\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\000\000\000\001\138@\n\018\002\140\004\138\132\000@\020\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\000\b\000\000\000\000\000\000\000\000\000\000\000\024\220 \004X(\223\194G\150\000\128\250\001@\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000cp\128\017`\163\127\t\030X\002\003\232\005@\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\bH\164\238\015\160\248S\014\000\127\203\129w\130\223\156<\006!\000 @\0020\018,\016\001\000T\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\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012n\016\002,\020o\225#\203\000@}\000\160\000\199\002\018);\131\232>\020\195\128\031\242\224]\224\183\231\0151\184@\b\176Q\191\132\143,\001\001\244\002\128\003\028\bH\164\238\015\160\248S\014\000\127\203\129w\130\223\156<\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\138N\224\250\015\1330\224\007\253\184\023zm\249\195\192\000\b\000\031\000`\004\004\000>\003\000 \000,\016\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000C\207wz\255W\206\156\254\255\254\220\031\191\182\255\251\224\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\017\016>\000\192\b\b\000|\n\000@\000X 0\000\000 \000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\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\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\003\001\000\016\000\000\016\b \000\000\004\000\000\000\000\000\000` \002\000\000\002\001\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000@\000\128\000\016\000\000\000\000\000\0001\184@\b\176Q\191\132\143,\001\001\244\002\128\003\028\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\192\000\000\000\000\000\000\b\000\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\000\000\000\016\000\000\000\000\000\001\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\001\141\194\000E\130\141\252$y`\b\015\160\020\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\000\001\000\001\000\003\000\000\000\000\128\000\000\000\000\002 \000\000\000\000 \000`\000\000\000\016\000\000\000\000\000D\000\000\000\000\004\000\004\000\000\000\002\000\000\000\000\000\000\000\000\000\b\000\000\001\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\128\000\000\000\000\000\001\141\194\000E\130\141\252$y`\b\015\160\020\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\000\000\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\001\192\000\014\002\000\012\023\b\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\128\000\000\000\192\000\007\001\000\006\011\132\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\b\000\000\000\000cp\128\017`\163\127\t\030X\002\003\232\005\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\001\000\000\000\001\128\000\014\002\000\012\023\b\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\016\000\000\000\000\198\225\000\"\193F\254\018<\176\004\007\208\n\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\b\000\000\000\000cp\128\017`\163\127\t\030X\002\003\232\005\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\002@\004P\001\004\002\136`\000\006@\0030\000\004\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\t\020\157\193\244\031\na\192\015\249p.\240[\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\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\012\004\000@@\000@ \128\000\000\016\000\000\000\000\000\001\128\128\b\000\000\b\004\016\000\000\002\000\000\000\000\000\0000\016\001\000\000\001\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\b\000\128\128\000@\192@\000\000\000 \000\000\000\000\000\128\000\002\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\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\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\132\000\129\000\b\192H\176@\004\001P\000\000\"\128\132\138N\224\250\015\1330\224\007\252\184\023x-\249\195\208\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012B\000@\128\004`$X \002\000\168\000\000\017@BE'p}\007\194\152p\003\254\\\011\188\022\252\225\224\000\004 \015\1280\002\002\000\031\000\128\016\000\031\b\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\004\004\000\002\006\002\000\000\000\001\000\000\000\000\000\004\000\000\016\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 \002\002\000\001\003\001\000\000\000\000\128\000\000\000\000\002\000\000\b\000\000\016\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\016\001\001\000\000\129\128\128\000\000\000@\000\000\000\000\001\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$\000E\000\016@\168\135\000\000D\0003\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\001\004\000\000\000\128\000\000\000\000\000\012\004\000@\000\000@ \000\000\000\016\000\000\000\000\000\002@\004P\001\004\n\136p\000\004@\0030\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\017@\004\016\n!\128\000\016\000\012\192\000\016\000\001 \002(\000\130\001D \000\002\000\001\152\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\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\016\000\000\004\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\128\000\000\000\000\000\006\000\0000\000\0000\\`\000\001\016\000\001\000\000\000\000\192\000\006\000\000\006\011\132\000\000\"\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\128\000\000\001\000\000\000\000\017\000\000\000\000\000\000\012\000\000`\000\000`\184@\000\002 \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\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\003\000\000\028\004\000\024.\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\b\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\128\000\000\000\000\004\000\000\000\000@\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\000\224 \000\193p\128\000\004\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\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\001\128\000\014\002\000\012\023\b\000\000@\000\000\000\000\000\000\000\000 \000\000\000\000\002\000\000\000\000\000\000\016\000\000\000\000\000\000\000 \016\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\144\001\020\000A\000\162\028\000\001\016\000\204\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\002 \000\004\000\000 \000 \000\000\000\016\000\000\000\128\000D\000\000\000\000\004\000\004\000\000\000\002\000\000\000\016\000\b\128\000\000\000\000\128\000\128\000\000\000@\000\000\000\000\004\128\b\160\003\b\005\016\224\000\b\128\007`\000\024@\000\"\000\000\000\000\002\000\002\000\000\000\001\000\000\000\000\000\018\000\"\128\b \020C\128\000\"\000\025\128\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000\138\000 \128Q\012\000\000\136\000f\000\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000\138\0000\128Q\014\000\000\136\000v\000\001\132\000\002 \000\000\000\000 \000 \000\000\000\016\000\000\000\000\001 \002(\000\130\001D8\000\002 \001\152\000\002\016\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\000\000\000\000\000\000\000\000\000\000\144\001\020\016A\000\162\024\000\001\016\000\236\000\129\000 \000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\000\001\000\000\b\000\b\000\000\000\004\000\000\000 \000\017\000\000\000\000\001\000\001\000\000\000\000\128\000\000\004\000\t\000\017@\004\016\n!\128\000\017\000\012\192\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\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\016\144\001T\000A\130\162\028\000\001\016\000\236\000\017\000\"\000\000\b\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\000H\000\138\000 \128Q\012\000\000\136\000f\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\b\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\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\b\000\000\000\000\000\128\000\000\000\000\000\004\193\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\001\192@\001\130\225\000\000\b\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\001\000\000\004\000\132\0000\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\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\136@\b\016\000\140\004\139\004\000@\021\000\000\002(\bH\164\238\015\160\248S\014\000\127\203\129w\130\223\156=\t\020\157\193\244\031\na\192\015\249p.\240[\243\135\128\196 \004\b\000F\002E\130\000 \n\128\000\001\020\004$Rw\007\208|)\135\000?\229\192\187\193o\206\030cp\128\017`\163\127\t\030X\002\003\232\005\000\0068\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\141\194\000E\130\141\252$y`\b\015\160\020\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\128\000\000\198\225\000\"\193F\254\018<\176\004\007\208\n\000\012p\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\000\000\000\000\000\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\141\194\000E\130\141\252$y`\b\015\160\020\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\0067\b\001\022\n7\240\145\229\128 >\128P\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\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\018\000 \128\b \000B\000\000 \000\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\000\000\000\000D\000\000\000\000\006\000\004\000\000\000\002\000\000\000\000\000\000\002\016\015\192\024\017\000\000\015\136@\b\016\003\005\022\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\001\000\000\000\000\000\000\000\004\000\000\000\002\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\016\000~\000\192\136\000\000|B\000@\128\024(\176\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\016\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\016\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\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\001\192@\001\130\225\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\b\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\000cp\128\017`\163\127\t\030X\002\003\232\005\000\0068\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\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\004\000\000\000\000\000\000\016\016\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\001\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\016\001\000\000\001\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\004\000\b\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\001\000\016\016\000\b\024\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\000\000\002\000\000\000\000\000\016\000\000\128\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\016\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\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\016\128\016 \001\024\t\022\b\000\128*\000\000\004\016\000\000\000\000\000\000\000\000\004\000\000\000\000\b\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\000\000\016\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\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\012\254\017\006,Uo\2273\203\001P}\200\160\001\199\000\004\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\002\200D\016\001\004\014\136@\004\004@\007 \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\144\001\004\000A\000\162\016\000\001\016\000\200\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\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\001 \002\b\000\130\001D \000\002\000\001\128\000\002\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\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\207\225\016b\197V\2543<\176\021\007\220\138\000\028p\025\252\"\012X\170\223\198g\150\002\160\251\145@\003\142\000$\000A\000\016@(\132\000\000D\0002\000\000@\000\004\128\b \002\b\005\016\128\000\b\128\006@\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\002@\004\016\001\004\002\136`\000\004@\003 \000\004\000\000H\000\130\000 \128Q\b\000\000\136\000d\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\004\128\b \002\b\005\016\192\000\b\128\006@\000\b\000\000\144\001\004\000A\000\162\016\000\001\016\000\200\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\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") + (134, "'\233\016b\197V\223\025\159X\n\007\242\000\000\227\128\141\164\000\139\133\027|$\253`\b\031\000\000\001\142\007\223b A\127\017P\000 `\224\247\030,\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\250\204\222\179u\247\198o\215\146\163\252Q\016y\224}\246\"\004\023\241\021\000\002\006\014\015q\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\000\000\b\218@\b\176Q\183\194O\214\000\129\240\000\000\024\224}\246\"\004\023\241\021\000\002\006\014\015q\226\192\160\208\159\164E\171\021[|f}`(\031\192\000\007\142\000\000\000\000\002\000\000\192\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\b\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\002\000\015\192\024\b\128\000\007\196@ @\016(\176\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\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\002\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\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\t\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\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\b\128\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\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\003\128\128\000\194\225\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\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\022\002g@\016d\020C\128\0242@\236\017\"\017@\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\003\128\129\000\194\225\000\000\b\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\004\000\128\128\128@0 \128\000\000 \000\000\000\000\000\016\002\002\000\001\000\192\130\000\000\000\128\000\000\000\000\000@\b\b\000\004\003\002\000\000\000\002\000\000\000\000\000D\128\021@\004\024\t\016\224\000\b\128;\004\012\128\016\018\000A\000\016@\000B\128\000 \000\196\000\002\000\000H\001\004\000A\000\001\b\000\000\128\003\016\000\b\000\000\192\000\004\152 \131\000\b\000\016\000\000\000\000\000\128\003\000\000\018@\130\012\000 \000@\000\000\000\000\002\000\012\000\000I\002\b0\000\000\001\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\004\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\012\000\000I\000\b0\000\000\001\000\000\000\000\000\b\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\002\000\000\018@\002\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\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\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000I\000\b\000\000\000\001\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\001\000\000\000\000\000\000\000\000\000\000\004\128\017A\004\016\000\016\192\000\b\000;\000D\128\016\012\128\000\240 \0000\184P\000\002\001\000 \000\016\000H\001\020\000a\000\145\014\000\000\136\0030D\024A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003 \0008\b\000\012.\020\000\000\128@\b\000\004\000\012\000\016\224 @0\184@\000\002\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017`'p\001\006AD8\001\130$\014\192\022a\022\003\000\0000\000\000\012.\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\0000\000\003\000\000\000\194\225\000\000\t\000\000\128\000\000\000@\002\000\000\000\001\000\000\000\000$\000\000\000@\000\003\000\0008\b\000\012.\016\000\000\128\000\000\000\000\001\247\216\136\016_\196T\000\b\0248=\199\139\002\131B~\145\022\172Um\241\153\245\128\160\127\000\000\0308\000\000\000\000\000\000\000\000\000\000\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\000I\130\b0\000\128\001\000\000\000\000\000\b\0000\000\001$\b \192\002\000\004\000\000\000\000\000 \000\192\000\004\144 \131\000\000\000\016\000\000\000\000\000\128\003\000\000\018@\002\012\000\000\000@\000\000\000\000\002\000\004\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000H\001\020\016A\000\017\012\000\000\136\003\176\004\b\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\017@\004\016\001\016\192\000\b\1283\000@\128\017\247\216\136\016_\196T\000\b\0248=\199\139\002\131B~\145\022\172Um\241\153\245\128\160\127\000\000\0308\b\218@\b\184Q\183\194O\214\000\129\240\000\000\024\224#i\000\"\193F\223\t?X\002\007\192\000\000c\128\141\164\000\139\005\027|$}`\b\031\000\000\001\142\000\000\000\000\000\000\000\192\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\t\000\000\012\000\000\224 \0000\184@\000\002\000\000\000\000\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\0008\b\000\012.\016\000\000\128\000\000\000\001\000\012\000\004\224 \0000\184@\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\192\000\014\002\000\003\011\132\000\000 \000\000\000\000@\003\000\0008\b\000\012.\016\000\000\128\000\000\000\005\000\004\000\000\000\000\000\016\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\004\000\000\000\b\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\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\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\224 \0000\184@\000\002\000\000\000\000\004\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\001\018\000w\000\016d\004C\128\024\"@\236\001b\017`0\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\192\000\012\000\000\003\011\132\000\000 \000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\012\000\000\224 \0000\184@\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\002\000\000\000\000\000\000\001\000\000\000\001\000\000\000\000\000\012\006\016\000\000\000\000\000\000\000\000\012\000\000\224 @0\184@\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\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\017`'p\001\006AD8\001\130$\014\192\022!\022\003\000\0000\000\000\012.\016\000\000\128\000\000\000\000\001\022\002w\000\016d\020C\128\024\"@\236\001f\017`0\000\003\000\000\000\194\225\000\000\b\000\000\000\000\000\017`'p\001\006AD8\001\130$\014\192\022!\022\001\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\017 'p\001\006@D8\001\130$\014\192\022!\022\003\000\0000\000\000\012.\016\000\000\128\000\000\000\000\001\022\002w\000\016d\020C\128\024\"@\236\001f\017`0\000\003\000\000\000\194\225\000\000\b\000\000\000\000\000\017`'p\001\006AD8\001\130$\014\192\022!\022E\128\157\192\004\025\005\016\224\006\b\144;\000X\132Y\022\002w\000\016d\020C\128\024\"@\236\001b\017dH\001\220\000A\144\017\014\000`\137\003\176\005\136E\000\000\000\004\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\012\000\000\224 \0000\184@\000\002\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\128\000\000\b\000\000\004\000\000\000\001\000\003\000\0008\b\000\012.\016\000\000\128\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\000\000@\000\000\000\000\b\000\000\004\000\000\000\001\002\003\000\0008\b\000\012.\016\000\000\128\000\000\000\000\000\000\000\004\000\000\000\000\000\128\000\000@\000\000\000\017 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\250\206\255\179}\247\207\255\215\147\167\252\210\0169\228\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\017 \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\004\000\000\000\001\000\000\000\001\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\192\000\014\002\000\003\011\132\000\000 \000\000\000\000@\000\000\001\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\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\001\000\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\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\003 \000\000\000\000\b\000\000\000\002\000\000\000\000\003\000\0008\b\000\012.\016\000\000\128\000\000\000\000\000\000\0002\000\000\000\000\000\128\000\000\000 \000 \000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\000\003 \000\000\000\000\b\000\000\000\002\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\0026\144\002,\020m\240\145\245\128 |\000\000\0068\000\000\000\000\000\000\003\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\000\000\000\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\002 \020\012\192\145\197\128\000\012\000\000\0060\001\000\000\016\b\000B\004(\001\128\000\000@\016\000\000\004\000\000@\000\001\b\016\160\006\000\000\001\000@\000\000\016\000\001\000\000\004 B\000\024\000\000\004\001\000\000\0002\144\002\004\000 \192\145p\128\b\r\004\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\012\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\016\000\000\192\000\014\002\000\003\011\132\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\0002\144\002\004\000 \192\145p\128\b\r\004\128\004\016\000\000\000\000\000\000\003\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\004\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\000\001\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\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\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\003)\132#\240\022\014)\023\t\241\144\216P\006K,\000\000\016\000\000\000\000\000\000 \000\002\000\000\000\000\0000\000\000\002\000\000\000\002\000\000\000\000\000\000\000\000\000\192\000\000\000\000\000\000\b\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\000\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\004\000\128\128\000@0 \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\128\000\000\000\000\000\000\000\000\000\000\000\003\002\000 \000\000\b\b \000\000\b\000\000\000\000\000\012\b\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\t\250D\024\177U\183\198o\214\002\129\252@\0008\224'\233\016b\197V\223\025\159X\n\007\241\000\000\227\128\159\164E\139\021[|f}`(\031\204\000\003\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\b\000\128\128\000 \128\000\000 \000\000\000\b\0000 \002\002\000\000\128\130\000\000\000\128\000\000\000\000\000\192\128\b\000\000\002\002\b\000\000\002\000\000\000\000\000\003\002\000 \000\000\b\b\000\000\000\b\000\000\000\000\000\028\b\000\128\000\000 \000\000\000 \000\000\000\000\0026\144\002,\020m\240\147\245\128 |\000\000\0068\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\001\000\000\000 \000\004\000 \000\000\000\000\000\000\000\000\004\000\000\000\000\000\016\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\004\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\136\005\0030$q`\000\003\000\000\001\140\0026\144\002,\020m\240\145\245\128 |\000\000\0068\b\218@\b\184Q\183\194O\214\000\129\240\000\000\024\224#i\000\"\193F\223\t?X\002\007\192\000\000c\128\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0026\152B?\021m\242\145\245\1591|\129\000f\186\192\200A\b\128P3\002G\022\000\0000\000\000\024\192#i\000\"\193F\223\t\031X\002\007\192\000\000s\129\030\246w\175\245\127\181\231\245\127\246\195\238\219\127\252\2426\144\002,\020m\240\145\245\128 |\000\000\0068\000\202@\b\016\000\131\002E\194\000 0\000\000\016@\000\000\000\000\000\000\012\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\016\000\000\192\000\014\002\000\003\011\132\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\0002\144\002\004\000 \192\145p\128\b\012\000\128\004\016\000\000\000\000\000\000\003\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\004\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\000\001\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\0002\144\002\004\000 \192\145p\128\b\r\004\000\005\016\000\202@H\016\000\131\002E\194\000 4\016\000\016@\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\000\002 \000\000\000\000\b\000\000\000\002\000\000\000\000\000\000\b\128\000\000\000\000\000\000\000\000\b\000\000\000\000\012\164\000\129\000\b0$\\ \002\003A\000\001\004\0002\016\002\006\000 \192\147@\128\b\012\000\000\004\016\000\200@\b\016\000\131\002M\002\000 0\000\000\016@\003!\000 @\002\012\t\020\b\000\128\192\000\000A\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\019)\r\168H\n\012\t5\b\000\128\202\b\027U@\000\004\000\001\000\b\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\000\000\000L\1646\161 (0$\220 \002\003i\016mU\000\016\000\000\000\000\000\128\017@\000\000\000\000\000\000\000\000\202A\b\016\000\131\002E\194\000 4\016\000\144@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\132\000\129\000\b0$P \002\003\000\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\202@\b\016\000\131\002E\194\000 4\018\000\016@\000\000\000\000\000\000\012\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\016\000\000\192\000\014\002\000\003\011\132\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\200@\b\016\000\131\002E\002\000 0\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\003)\000 `\002\012\t7\b\000\128\208@\000A\000\012\164\000\129\000\b0$\220 \002\003A\000\001\004\0002\144\002\004\000 \192\145p\128\b\r\004\000\004\016\000\200@\b\016\000\131\002E\130\000 0\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\002\004\000 \192\145@\128\b\012\000\000\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\019)\r\160@\n\012\t7\b\000\128\218@\019U@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\216\000\000\128\000\002\000\000\000\000\160\0011D\000\202@\b\016\000\131\002E\194\000 4\018\000\016@\000\000\000\000\000\000\012\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\016\000\000\192\000\014\002\000\003\011\132\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\200@\b\016\000\131\002E\002\000 0\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\001\000\000\216\000\000\128\000\002\000\000\000\000\160\0011D\000\202@\b\016\000\131\002E\194\000 4\016\000\016@\016\000\r\128\000\b\000\000 \000\000\000\n\000\019\020@L\1646\129\000(0$\220 \002\003i\000MU\000:\152B?\001`\226\145p\159\025\r\133\000d\178\192\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\004\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\200@\b\016\000\131\002E\002\000 0\000\000\016@\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\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\004\000\000\000\000\000 \000\000\000\000\000\019\004@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\144\002\004\000 \192\145p\128\b\r\004\128\004\016\000\000\000\000\000\000\003\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\004\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\000\001\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\0002\016\002\004\000 \192\145@\128\b\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@\0006\000\000 \000\000\128\000\000\000(\000LQ\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\000\001\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\012\164\000\129\000\b0$\\ \002\003A\000\001\004\001\000\000\216\000\000\128\000\002\000\000\000\000\160\0011D\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\r\128\000\b\000\000 \000\000\000\n\000\019\020@\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\001\000\000\000\000\000\b\000\000\000\000\000\004\129\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\164\004\129\000\b0$\\ \002\003A\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\000\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\000HQ\0002\144\018\004\000 \192\145p\128\b\r\004\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\000\000\000\000\"\000\000\000\000\000\128\000\000\000\000\000H\017\000\000\000\136\000\000\000\000\000\000\000\000\000\000\000\000\000\000\192\000 \000\000\001\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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@\b\016\000\131\002E\002\000 0\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\b\000\000\000\002\000\004\129\016\003)\000 @\002\012\t\023\b\000\128\208@\000A\000\000\000\000\000\000\000\000\000\128\000\000\000 \000H\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000 \000H\017\0002\144\002\004\000 \192\145p\128\b\012\000\128\004\016\000\000\000\000\000\000\003\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\004\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\000\001\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\0002\016\002\004\000 \192\145@\128\b\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\128\000\000\000 \000H\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\202@\b\016\000\131\002E\194\000 0\002\000\016@\000\000\000\000\000\000\012\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\016\000\000\192\000\014\002\000\003\011\132\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\200@\b\016\000\131\002E\002\000 0\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\002\000\000\000\000\128\001 D\000\200@\b\016\000\131\002E\002\000 0\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\012\164\000\129\000\b0$\\ \002\003\000 \001\004\000\000\000\000\000\000\000\192\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\001\000\000\012\000\000\224 \0000\184@\000\002\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\012\132\000\129\000\b0$P \002\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\000\000\000\000\000\000\000\000\000\000 \000\000\000\b\000\018\004@\012\164\000\161 \b0$\212 \018\003 \000M\021\128\000\000\000\000\000\000\192\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\004\000\000\000\000\000\000\000\000\000\b\000\001\000\000\012\000\000\224 \0000\184@\000\002\000\000\000\000\000\000\000\000@\000\000\000\000\002\000\000\000\000\128\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\192\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\004\000\000\000\000\000\000\000\000\000\b\000\000\000\000\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\"\006A \192\147p\128\b\r\000\000\004\016\000\192\128\b\b\000\002\002\b\000\000\002\000\000\000\000\128\003\002\000 \000\b\b \000\000\b\000\000\000\000\000\012\b\000\128\000\000 \128\000\000 \000\000\000\000\0000 \002\000\000\000\128\128\000\000\000\128\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\000\b\000\000\000\000\000\000\000\000\000\000\012\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\001\000 \000\016\012\b\000\000\000\b\000\000\000\000\000\012\000\144\128\000@0 \000\000\000 \000\000\000\000\004\000\000@\000\000\128\128\002\000\000\000\000\000@\016\000\000\000\000\000\000\000\002\000\b\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\002\000\000\000\000\000\000\000\000\000\000\000\001\000 \000\016\012\b\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\004H\001T\000A\128\017\014\000\000\136\003\176\000\136\001\000 \000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\003\000\000\018@\002\012\000\000\000@\000\000\000\000\002\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\000\000\000\000\128\000@\000\000\192\000\015\002\000\003\011\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\012\000\000\224 \0000\184@\000\002\000\000\000\000\000\004H\001T\000A\128\017\014\000\000\136\003\176\000\136\005\000\192\000\014\002\000\003\011\132\000\000 \000\000\000\000\000D\128\021@\004\024\001\016\224\000\b\128;\000H\128Q\018\000U\000\016`\004C\128\000\"\000\236\001\"\000@0\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\002\000\000\000\000\003\000\0008\b\000\012.\016\000\000\128\000\000\000\000\001\018\000U\000\016`\004C\128\000\"\000\236\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\001\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\016\000\000\016\002\002\000\001\000\192\128\000\000\000\128\000\000\000\000\017 \005P\001\006\000D8\000\002 \014\192\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\016\000\000\000\016\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\017 \005P\001\006\002D8\000\002 \014\193\003 \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\002\000\000\000\000\000\000\000\000\000\000\000\001\000 \000\016\012\b\000\000\000\b\000\000\000\000\001\018\000U\000\016`\004C\128\000\"\000\236\000\"\000@\016\002\002\000\001\000\192\128\000\000\000\128\000\000\000\000\017 \005P\001\006\000D8\000\002 \014\192\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\000\016\002\002\000\001\000\192\128\000\000\000\128\000\000\000\000\017 \005P\001\006\000D8\000\002 \014\192\002 \004\000\000\000\000\000\000\000\000\000\000\000\000\b\004\004\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004H\001T\000A\128\145\014\000\000\136\003\176@\136\001\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\001\018\000U\000\016`$C\128\000\"\000\236\016\"\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017 \005P\001\006\000D8\000\002 \014\192\002 \004\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\004\000\000@\000\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\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\128\000\000\000\000\000\000\000\000\000\000\000\192\128\b\000\000\002\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\001\018\000U\000\016`$C\128\0002\000\236\000&\000@p B\000\000\000\128\128\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\b\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\016\002\002\000\001\000\192\128\000\000\000\128\000\000\000\000\016\000\001\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017 \005P\001\006\002D8\000\003 \014\193\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\016\000\000\000\000\000\0026\144\002,\020m\240\145\245\128 |\000\000\0068\b\218@H\176Q\183\194G\214\000\129\240\000\000\024\224\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\128 \000\000\000\0026\144\002,\020m\240\145\245\128 |\000\000\0068\000\200@\b\128P3\002G\022\000\0000\000\000\024\192@\000\b\128\000\000\000\000\000\000\001\128\b\020\t\000\000\000\001\000 \000\000\016\000\000\000\000@\000\016\000\000\000\016\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\000\000\000\000\000\000\000\000\000\000\001\000 \000\000\016\000\000\000\000@\000\016\000\000\000\016\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\000\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\144\002.\020m\240\147\245\128 |\016\000\0068\b\218@\b\176Q\183\194O\214\000\129\240@\000\024\224#i\000\"\193F\223\t\031X\002\007\193\000\000c\128\012\132\000\136\133\0030$\241`\000\003\000\000\001\140\0002\016\002 \020\012\192\147\197\128\000\012\000\000\0060\000\200@\b\128P3\002G\022\000\0000\000\000\024\192\003!\000\"\001@\204\t\028X\000\000\192\000\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\000\000\000\000\000\000\000\000\000\000G\189\221\235\253_\2379\253\255\253\176\251\182\223\255|\004\000\000\000\000\0000\004p\000\000\000\000\000\000\000\0026\152B?\021m\242\145\245\1591|\129\000f\186\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#i\004\"\193F\223\t\031X\002\007\192\000\000c\128\141\164\016\139\005\027|$}`\b\031\000\000\001\142\0000 \002\002\000\000\128\130\000\000\000\128\000\000\000\000\000\192\128\b\000\000\002\002\b\000\000\002\000\000\000\000\000\003\002\000 \000\000\b\b\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000 \000\128\000\000\000\000\000\004\000\000\016\002\002\000\001\000\192\128\000\000\000\128\000\000\000\000\016\000\001\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\141\164\016\139\005\027|$}`\b\031\000\000\001\142\0026\144B,\020m\240\145\245\128 |\000\000\0068\000\202A\b\016\000\131\002E\194\000 0\000\000\016@\000\000\000\000\000\000\000\000 \000\000\000\b\000\019\004@\012\000\000\224 \0000\184@\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\128\000\000\000\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003!\000\"\001@\204\t\028X\000\000\192\000\000c\000\000\000\000\000\000\000\000\000\000\000\006\000\000P@\000\0002\016\002 \020\012\192\145\197\128\000\012\000\000\0060\017\239wz\255W\251N\127\127\255l>\237\183\255\223\000\000\000\000\000\000\b\000\020\000\000\000\000\000\000\000\000\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0026\144\002.\020m\240\147\245\128 |\000\000\0068\b\218@\b\176Q\183\194O\214\000\129\240\000\000\024\224#i\000\"\193F\223\t\031X\002\007\192\000\000c\128\012\164\000\129\128\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002E\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000A\000@\000\000\000\000 \000\000\128\000\000\000\000\000H\017\0026\144\002,\020m\240\145\245\128 |\000\000\0068\000\202@\n\026\000\131\002MB\000 0\000\000\016@\003)\000(H\002\012\t5\b\000\128\192\000\000A\000\012\164\000\161 \b0$T \002\003\000\000\001\004\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\003)\000 @\002\012\t\023\b\000\128\208@\000A\000\000\000\016\000\000\000\000\000\128\000\000\000 \000L\017\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\000\001\000\000\000\000\000\b\000\000\000\002\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\b\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\014\166\016\143\192X8\164\\'\198Ca@\025,\176\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\012\132\000\129\000\b0$P \002\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\000\000\003)\000(H\n\012\t\021\b\000\128\200\000\tA\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\003\000\0000\000\000\012.\016\000\000\128\000\000\000\000\000\004\000\000\000\000 \016\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\017%'p}\007\200L8\001\255,\014\232\183\231\015#i\000\"\193F\223\t\031X\002\007\192\000\000c\128\000\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\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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@\b\128P3\002G\022\000\0000\000\000\024\192D\148\157\193\244\031!0\224\007\253\176;\182\223\156<\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\003\000\005\000\000\000\000\000\000\000\000#i\000\"\193F\223\t\031X\002\007\192\000\000c\128\012\164\000\129\128\b0$\220 \002\003A\000\001\004\0002\144\002\004\000 \192\147p\128\b\r\004\000\004\016\000\202@\b\016\000\131\002E\194\000 4\016\000\016@\000\000\000\000\000\000\000\000 \000\000\000\b\000\018\004@\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\016\002\"\020\012\192\147\197\128\000\012\000\000\0060\000\200@\b\128P3\002O\022\000\0000\000\000\024\192\003!\000\"\001@\204\t\028X\000\000\192\000\000c\001\018Rw\007\208|\132\195\128\031\246\192\238\219~p\240\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\002\000\000\001\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\000\000\000\000\000\000\000\000\000\000\004\000\128\000\000@\000\000\000\001\000\128\000\000\000\000\200@\b\128P3\002G\022\000\0000\000\000\024\192\000\000@\b\000\000\004\000\000\000\001\144\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000 \000\000\016\000\000\000\000@ \000\000\000\0002\016\002 \020\012\192\145\197\128\000\012\000\000\0060\000\000\016\002\000\000\001\000\000\000\000d\000\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\132\000\136\005\0030$s\224\000\003\000\000\001\140\000\000\000\000\000\000\000\000\000\000\000\001\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\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\200@\b\128P3\002G>\000`0\005\000\024\192\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\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\000\000\000\000\000\000\000\000\000\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\246w\175\245\127\180\231\245\127\246\195\238\219\127\252\240\000\000\000\000\000\000\192\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\t\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\000\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\002 \020\012\192\145\197\128\000\012\000\000\0060\017\239gz\255W\251N\127W\255l>\237\183\255\223\003!\000\"\001@\204\t\028X\000\000\192\000\000c\001\030\246w\175\245\127\180\231\245\127\246\195\238\219\127\253\240\000\000\000\000\000\000\128\001@\000\000\000\000\000\000\000\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\000\000\003`\000\000\000\000\000\000\000\000\000\000\004\005\000#i\005\162\193F\223\t\031X\002\007\192\000\000s\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\000\000\000\000\000\000\012\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\144\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\0002\016\002 \020\012\192\145\197\128\000\012\000\000\0060\017%'p}\007\200L8\001\255l\014\237\183\231\015\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\017%'p}\007\200L8\001\255,\014\232\183\231\015\003)\000 @\002\012\t\023\b\000\128\208@\000A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004{\217\222\191\213\254\211\159\213\255\219\015\187m\255\243\209%'p}\007\200L8\001\255l\014\237\183\231\015\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\016\141\164\000\139\005\027|$}`\b\031\000\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\000D\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\001\018Rw\007\208|\132\195\128\031\242\192\238\139~p\244II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\017%'p}\007\200L8\001\255,\014\232\183\231\015D\148\157\193\244\031!0\224\007\252\176;\162\223\156<\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004{\217\222\191\213\254\211\159\213\255\219\015\187m\255\243\209%'p}\007\200L8\001\255l\014\237\183\231\015#i\000\"\193F\223\t\031X\002\007\192\000\000c\128\012\164\000\129\128\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002E\194\000 4\016\000\017@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\127\217\222?U\255\243\159\245\255\235\127\186-\255\251\223}\136\129\005\252E@\000\129\131\131\220x\176(4#i\000\"\193F\223\t\031X\002\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\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\017%'p}\007\200L8\001\255,\014\232\183\231\015D\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\001\018Rw\007\208|\132\195\128\031\242\192\238\139~p\244II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\017%'p}\007\200L8\001\255,\014\232\183\231\015D\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\001\018Rw\007\208|\132\195\128\031\242\192\238\139~p\244II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\017%'p}\007\200L8\001\255,\014\232\183\231\015D\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\001\018Rw\007\208|\132\195\128\031\242\192\238\139~p\244II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\017%'p}\007\200L8\001\255,\014\232\183\231\015D\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\001\018Rw\007\208|\132\195\128\031\242\192\238\139~p\244II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\017%'p}\007\200L8\001\255,\014\232\183\231\015D\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\001\018Rw\007\208|\132\195\128\031\242\192\238\139~p\244II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\017%'p}\007\200L8\001\255,\014\232\183\231\015D\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\001\018Rw\007\208|\132\195\128\031\242\192\238\139~p\244II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\017%'p}\007\200L8\001\255,\014\232\183\231\015D\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\001\018Rw\007\208|\132\195\128\031\242\192\238\139~p\244II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\017%'p}\007\200L8\001\255,\014\232\183\231\015D\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\001\018Rw\007\208|\132\195\128\031\242\192\238\139~p\244II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\017%'p}\007\200L8\001\255,\014\232\183\231\015D\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\001\018Rw\007\208|\132\195\128\031\242\192\238\139~p\244II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\000\000\000\000\000\000\012\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\144\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\0002\016\002 \020\012\192\145\197\128\000\012\000\000\0060\017%'p}\007\200L8\001\255l\014\237\183\231\015\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\017%'p}\007\200L8\001\255,\014\232\183\231\015D\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\001\018Rw\007\208|\132\195\128\031\242\192\238\139~p\244II\220\031A\242\019\014\000\127\203\003\186-\249\195\192\202@\b\016\000\131\002M\194\000 0\000\000\016@\003)\000 @\002\012\t\023\b\000\128\192\000\000A\000\030\164E\1610H4g\212 2\003\236\000o\021B6\144\002,\020m\240\145\245\128 |\000\000\0068\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\128\0008\b\000\012.\016\000\000\128\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\192\000\014\002\000\003\011\132\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\b\000\000\000\000\141\164\000\139\005\027|$}`\b\031\000\000\001\142\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\001\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\000\000\000\000\000\000\000\000\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\002\000\000\000\000#i\000\"\193F\223\t\031X\002\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\128\000\000\000\b\218@\b\176Q\183\194G\214\000\129\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\000\000\000\000\000\000\000\000\000\000\000\000\000\128\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\b\000\000\000\000\141\164\000\139\005\027|$}`\b\031\000\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\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 \000L\017\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\002\000\000\000\000#i\000\"\193F\223\t\031X\002\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\002\000\000\000\000\128\001 D\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\164\000\129\000\b0$\\ \002\003\000 \001\004\000\000\000\000\000\000\000\192\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\001\000\000\012\000\000\224 \0000\184@\000\002\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\012\132\000\129\000\b0$P \002\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\000\000\000\000\000\000\000\000\000\000 \000\000\000\b\000\018\004@\012\164\000\129\000\b0$\\ \002\003A\000\001\004\000\000\000\000\000\000\000\000\002\000\000\000\000\128\001 D\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\001\020\000A\000\017\012\000\000\200\0030\000\b\001\001 \004P\001\004@D0\001\131 \012\192\016 \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\017%'p}\007\200L8\001\255,\014\232\183\231\015\000\000\141\129\240\006\000 \001\240\016\b\000\022\024\012\141\164\022\139\005\027|$}`\b\031\000\000\001\206\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\000G\189\157\235\253_\237y\253_\253\176\251\182\223\255<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\001\018Rw\007\208|\132\195\128\031\242\192\238\139~p\244II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\001\030\246w\175\245\127\181\231\245\127\246\195\238\219\127\252\2426\144\002,\020m\240\145\245\128 |\000\000\0068\000\202@\b\024\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\\ \002\003A\000\001\020\004II\220\031A\242\019\014\000\127\203\003\186-\249\195\209%'p}\007\200L8\001\255,\014\232\183\231\015#i\000\"\193F\223\t\031X\002\007\192\000\000c\128\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004{\217\222\191\213\254\215\159\213\255\219\015\187m\255\243\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\017%'p}\007\200L8\001\255,\014\232\183\231\015D\148\157\193\244\031!0\224\007\252\176;\162\223\156<\004\000\000\000\000\0000\000P\000\000\000\000\000\000\000\0026\144\002,\020m\240\145\245\128 |\000\000\0068\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000G\189\157\235\253_\237y\253_\253\176\251\182\223\255<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\001\018Rw\007\208|\132\195\128\031\242\192\238\139~p\244II\220\031A\242\019\014\000\127\203\003\186-\249\195\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\001\030\246w\175\245\127\181\231\245\127\246\195\238\219\127\252\2426\144\002,\020m\240\145\245\128 |\000\000\0068\000\202@\b\024\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\\ \002\003A\000\001\020\004II\220\031A\242\019\014\000\127\203\003\186-\249\195\209%'p}\007\200L8\001\255,\014\232\183\231\015#i\000\"\193F\223\t\031X\002\007\192\000\000c\128\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004{\217\222\191\213\254\215\159\213\255\219\015\187m\255\243\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\017%'p}\007\200L8\001\255,\014\232\183\231\015D\148\157\193\244\031!0\224\007\252\176;\162\223\156<\000\000\000\000\000\000\000\000\000\000\000\000\000P\000\000\000\000\000\000\000\000\000\128\001@\000\000\000\000\000\000\000\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\001\030\246w\175\245\127\181\231\245\127\246\195\238\219\127\252\2426\144\002,\020m\240\145\245\128 |\000\000\0068\000\202@\b\024\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\\ \002\003A\000\001\020\004II\220\031A\242\019\014\000\127\203\003\186-\249\195\209%'p}\007\200L8\001\255,\014\232\183\231\015#i\000\"\193F\223\t\031X\002\007\192\000\000c\128\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\004{\217\222\191\213\254\215\159\213\255\219\015\187m\255\243\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\017%'p}\007\200L8\001\255,\014\232\183\231\015D\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\017\239gz\255W\251^\127W\255l>\237\183\255\207#i\000\"\193F\223\t\031X\002\007\192\000\000c\128\012\164\000\129\128\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002E\194\000 4\016\000\017@D\148\157\193\244\031!0\224\007\252\176;\162\223\156=\018Rw\007\208|\132\195\128\031\242\192\238\139~p\244{\217\222\191\213\254\215\159\213\255\219\015\187m\255\243\200\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\017%'p}\007\200L8\001\255,\014\232\183\231\015D\148\157\193\244\031!0\224\007\252\176;\162\223\156=\030\246w\175\245\127\180\231\245\127\246\195\238\219\127\253\244{\217\222\191\213\254\211\159\213\255\203\015\186-\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\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\141\164\000\139\005\027|$}`\b\031\000\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\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#i\000\"\193F\223\t\031X\002\007\192\000\000c\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\000\000\000\000\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\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\001@\000\000\000\000\000\000\000\000\002\000\005\000\000\000\000\000\000\000\000#i\000\"\193F\223\t\031X\002\007\192\000\000c\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\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\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\0026\144\002,\020m\240\145\245\128 |\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\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\001\018Rw\007\208|\132\195\128\031\242\192\238\139~p\244II\220\031A\242\019\014\000\127\203\003\186-\249\195\192\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\141\164\000\139\005\027|$}`\b\031\000\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\218@\b\176Q\183\194G\214\000\129\240\001\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\017%'p}\007\200L8\001\255,\014\232\183\231\015\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\001\018Rw\007\208|\132\195\128\031\242\192\238\139~p\2426\144\002,\020m\240\145\245\128 |\000\000\0068\000\202@\b\024\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\\ \002\003A\000\001\020\004II\220\031A\242\019\014\000\127\203\003\186-\249\195\209%'p}\007\200L8\001\255,\014\232\183\231\015D\148\157\193\244\031!0\224\007\252\176;\162\223\156<\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0002\144\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\001\018Rw\007\208|\132\195\128\031\242\192\238\139~p\244II\220\031A\242\019\014\000\127\203\003\186-\249\195\192\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\141\164\000\139\005\027|$}`\b\031\000\000\001\142\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#i\000\"\193F\223\t\031X\002\007\192\000\000c\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\000\000\000\000\000\000\000\000\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\000\000\000\000\000\000\012\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\144\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\0002\016\002 \020\012\192\145\197\128\000\012\000\000\0060\017%'p}\007\200L8\001\255l\014\237\183\231\015\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\017%'p}\007\200L8\001\255,\014\232\183\231\015D\148\157\193\244\031!0\224\007\252\176;\162\223\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\002\000\000\000\000\128\001 D\b\218@\b\176Q\183\194G\214\000\129\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\016\000\000\000\000\000\1306\144\002,\020m\240\145\245\128 |\000\000\0068\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003)\000 @\002\012\t\023\b\000\128\192\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\000\000\000\000\000\000\000\000\000\000\000\200A\b\128P3\002G\022\000\0000\000\000\024\192\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\0026\144\002,\020m\240\145\245\128 |\000\000\0078\000\000\000\000\000\000\000\000\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\0026\144\018,\020m\240\145\245\128 |\000\000\0068\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\132\000\136\005\0030$q`\000\003\000\000\001\140\004\000\000\000\000\000\000\000\000\000\000\024\000\001@\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\136\000\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\001\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\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\006\000\000P\000\000\000\016\000\000\000\000\000\192\017\192\000\000\000\000\000\000\000\016\000\002 \000\000\000\000\000\000\000`\002\005\002@\000D\148\157\193\244\031!0\224\007\253\176;\182\223\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\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\000\000\000\000\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\002\006\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t\023\b\000\128\208@\000E\000\000\000\"\000\000\000\000\000\000\000\000\128\000\000@\016\000\000\b\136\031\000`\002\002\000\031\003\000\128\001`\128\192\000\002\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\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\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\003\002\000 \000\000\b\b \000\000\b\000\000\000\000\000\012\b\000\128\000\000 \000\000\000 \000\000\000\000\000\000\000\000\000\000\000\128\002\000\000@\000\000\000\000\000\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\128\000\000\000\128\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\002\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\b\000\000\000\000\000\b\000\001\000\000\012\b\000\128\000\000 \000\000\000 \000\000\000\000\000H\001\020\000A\000\145\014\000\000\200\0030\000\b\001\000@\b\b\000\004\003\002\000\000\000\002\000\000\000\000\000@\000\000\000\000\b\000\000 \000\000\000\b\000\000\000\000\012\b\000\128\000\000 \000\000\000 \000\000\000\000\000H\001\020\000A\000\145\014\000\000\200\0030\000\b\001\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000#i\000\"\193F\223\t\031X\002\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\128\000\000\000\000\000\128\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\000 \000\b\0000\000\000\000@\000\000\000\000\004\128\000\000\000\000 \000\192\000\000\001\000\000\000\000\000\018\000\000\000\000\000\128\001\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\004\000\000\000\000\000\000\000\000\000\000\000\002\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\002\000\000\000 \000\004\000\000\000\001\000\000\012\000\000\192\000\0000\184P\000\002\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\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\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\001\000\000\000\003\000\0008\b\000\012.\016\000\000\128\000\000\000\000\000\000\000\"\000\000\000\000\000\128\000\000@\000\000\000\001\000\000\000\136\000\000\000\000\002\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\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\136\000\000\000\000\002\000\000\001\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\002\000\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\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\192\000\0000\184@\000\002\000\000\000\000\000\000X\t\020\000A\128Q\014\000\000\200\0030\004\bA\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\128\145@\004\016\005\016\224\000\012\1283\000@\132\016\012\000\000\192\000\0000\184P\000\002\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000@\000\000\000\192\000\012\000\000\003\011\133\000\000 \000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\012\000\000\192\000\0000\184@\000\002\000\000\000\000\000\000X\001\020\000A\000Q\014\000\000\200\0030\004\bA\001`$P\001\006\001D8\000\003 \012\192\016!\004\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\012\000\000\192\000\0000\184@\000\002\000\000\000\000\000\000X\001\020\000A\000Q\014\000\000\200\0030\004\bA\001`$P\001\006\001D8\000\003 \012\192\016!\004\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\016\000\000\000\000\000\0026\144\002,\020m\240\145\245\128 |\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\012\164\b\129\000\b0$\220 \002\003\000\000\001\004\0002\144\"\004\000 \192\145p\128\b\012\000\000\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003)\000 @\002\012\t\023\b\000\128\192\000\000A\000\018\000E\000\016@\004C\000\0002\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\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\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\017%'p}\007\200L8\001\255,\014\232\183\231\015D\148\157\193\244\031!0\224\007\252\176;\162\223\156<\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\012\b\000\128\128\000 \128\000\000 \000\000\000\000\0000 \002\000\000\000\128\130\000\000\000\128\000\000\000\000\000\192\128\b\000\000\002\002\000\000\000\002\000\000\000\000\000\000\000\004\000\000\000\b\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\016\002\002\000\001\000\192\128\000\000\000\128\000\000\000\000\016\000\001\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\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\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\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\017%'p}\007\200L8\001\255,\014\232\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\202@\b\024\000\131\002M\194\000 4\016\000\017@\003)\000 @\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\\ \002\003A\000\001\020\000\000\000@\000\000\000\000\000\000\000\000\000\000\001\144@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000 \000\016\012\b\000\000\000\b\000\000\000\000\001\000\000\016\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@\b\b\000\004\003\002\000\000\000\002\000\000\000\000\000@\000\004\000\000\b\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\016\002\002\000\001\000\192\128\000\000\000\128\000\000\000\000\016\000\001\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\002\016\007\192\024\000\128\128\007\192@ \000| 0\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\b\b\000\004\003\002\000\000\000\002\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\016\002\002\000\001\000\192\128\000\000\000\128\000\000\000\000\016\000\001\000\000\002\000\000\b\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\004\000\128\128\000@0 \000\000\000 \000\000\000\000\004\000\000@\000\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\000\000\004\128\017@\004\016\t\016\224\000\b\1283\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000 \002\000\000\000\128\130\000\000\000\128\000\000\000\000\000\192\128\b\000\000\002\002\000\000\000\002\000\000\000\000\000\004\128\017@\004\016\t\016\224\000\b\1283\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0008\000 \002\000\000\000\002\000\000\000\000\000\000\000\000\000@\000\000\b\000\001\000\b\000\000\000\000\000\000\000\000\001\000\000\000\000\000\004\000 \000\000\000\000\000\000\000\000\004\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000H\001\020\000A\000\017\012\000\000\136\003\176\000\b\000\000@\b\b\000\004\003\002\000\000\000\002\000\000\000\000\000D\128\017@\004\024\001\016\224\000\b\1283\000\000\128\000\018\000E\000\016@\004C\000\000\"\000\204\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\192\000\128\000\000\000\000\b\000\000\000\000\000\000\000\000\003\000\002\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\000\000\000\000\000\000\000\128\000\000\000\000\000\128\000\016\000\001 \004P\001\004\000D0\000\002 \012\192\000 \004\004\128\017@\004\016\001\016\128\000\b\1283\000\000\128\016\012\000\000\000\000\000\000\000\128\000\000\000\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\000\002\000\000\000\000\000\002\000\000@\000\004\128\017@\004\016\001\016\192\000\b\1283\000\000\128\016\018\000E\000\016@\004B\000\000\"\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\000\000\b\000\000\000\000\000\b\000\001\000\000\018\000E\000\016@\004C\000\000\"\000\204\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\031}\136\129\005\252E@\000\129\131\131\220x\176(4'\233\017j\197V\223\025\159X\n\007\240\000\001\227\128\012\164\000\129\000\b0$\\ \002\003A\000\001\004\001\000\000\016\000\000\000\000\002\000\000\000\000\000\001 D\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\247\216\136\016_\196T\000\b\0248=\199\139\002\131B~\145\022\172Um\241\153\245\128\160\127\000\000\0308\000\192\128\b\b\000\002\002\b\000\000\002\000\000\000\000\000\003\002\000 \000\000\b\b \000\000\b\000\000\000\000\000\012\b\000\128\000\000 \000\000\000 \000\000\000\000\000H\001\020\000A\000\145\014\000\000\136\0030\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 \000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\128\000\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\003\000\0008\b\000\012.\016\000\000\128\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\016\000\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\001 \004P\001\004@D8\001\130 \014\192\016 \000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\017\020\000A\000\017\012\000\000\136\0030\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\017@\004\016\001\016\192\000\b\1283\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\001\020\000A\016\017\014\000`\136\003\176\004\b\000\000H\000\000\b\000\002\000\012\000\000\000\016\000\000\000\000\001 \000\000\000\000\b\0000\000\000\000@\000\000\000\000\004\128\000\000\000\000 \000@\000\000\001\000\000\000\000\000H\001\020\000a\000\017\014\000\000\136\003\176\000\024\000\000H\000\000\000\000\002\000\004\000\000\000\016\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\002\000\000\018\000E\000\016@\004C\128\000\"\000\204\016\002\016\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\000\000\000\000\000\000\000\128\000\004\128\017@\004\016\001\016\224\000\b\1283\000\000\128\000\018\000E\000\016@\004C\000\000\"\000\204\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \004P\001\004\000D8\000\002 \012\192\000 \000\004\128\017@\004\016\001\016\192\000\b\1283\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000x\001\023\128\193\000\195\233\000\000\136\003\000\000\b\000\001 \004P\001\004\000\004 \000\002\000\012\192\000 \000\001\000\000\000 \000\000\000 \000\000\000\000\000\000\002\000\004\000\000\000\128\000\000\000\128\000\000\000\000\000\000\000\000\016\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\004\128\017@\004\016\b\016\192\000\b\0003\004\000\128\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\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\004\128\017@\004\016\b\016\192\000\b\0003\004\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0008\000 \002\000\000\000\002\000\000\000\000\000\000\000\000\000@\000\000\b\000\001\000\b\000\000\000\000\000\000\000\000\001\000\000\000\000\000\004\000 \000\000\000\000\000\000\000\000\004\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000H\001\020\000A\000\001\012\000\000\128\003\176\000H\000\000@\b\b\000\004\003\002\000\000\000\002\000\000\000\000\000D\128\017@\004\024\000\016\224\000\b\0003\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000 \000\000\000\000\002\000\000\000\000\000\000\000\000\000\192\000\128\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\b\000\005\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\001\020\000A\000\129\012\000\000\128\0030@\b\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\016\002\002\000\001\000\192\128\000\000\000\128\000\000\000\000\017 \004P\001\006\000\0048\000\002\000\012\192\000 \004\004\128\017@\004\016\000\016\128\000\b\0003\000\000\128\016\012\000\000\000\000\000\000\000\128\000\000\000\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\000\000\000\000\000\000\000\000\000\000@\000\001\000 \000\016\012\b\000\000\000\b\000\000\000\000\001\018\000E\000\016`\000C\128\000 \000\204\000\002\000@H\001\020\000A\000\001\b\000\000\128\0030\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\000\000\000\000\000\000 \000\000\000\000\000 \000\004\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \004P\001\004\000\0040\000\002\000\012\193\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\128\128\000@0 \000\000\000 \000\000\000\000\004H\001\020\000A\128\001\014\000\000\128\0030\000\b\000\001 \004P\001\004\000\0040\000\002\000\012\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\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\b\b\b\004\003\002\b\000\000\002\000\000\000\000\000\001\000 \000\016\012\b \000\000\b\000\000\000\000\000\004\000\128\128\000@0 \000\000\000 \000\000\000\000\004H\001\020\000A\128\001\014\000\000\128\0030\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\000 \000\b\0000\000\000\000@\000\000\000\000\004\128\000\000\000\000 \000\192\000\000\001\000\000\000\000\000\018\000\000\000\000\000\128\001\000\000\000\004\000\000\000\000\001 \004P\001\132\000\0048\000\002\000\012\192\000`\000\b\128\000\000 \000\004\0000\000\000\000\000\000\000\000\000 \000\000\000\128\000\016\000\192\000\000\000\000\000\000\000\000\128\000\000\000\000\000@\003\000\000\000\000\000\000\000\000\002\000\000\000\000\000\001\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\000@\000\000\000\000\000\000\000\000 \000\001$\000 \000\000\000\004\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\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\000\000\000@\000\b\000@\001B\004\000\000\000\000\000\000\000\000\004\000\000@\000\001\b\016\160\002\000\000\001\000@\000\000\016\000\001\000\000\004 B\000\b\000\000\004\001\000\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\000\001\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\016\000\001\000\000\004\000B\000\b\000\000\004\001\000\000\000\128\000\000\000\002\000@\002\000\000\000\000\000\000\000\000\002\000\000\000\000\b\001\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\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\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\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\001\000\000\016\000\000@\0048\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\016\000\000\016\000\128\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\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\000\000\000\000\000\000\000\000\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\001\000\000\012\000\000\224 \0000\184@\000\002\000\000\000\000\000\000@\000\004\000\000\016\001\012\000 \000\000\016\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000 \001\000\005\b0\000\000\000\000\000\000\000\000\004\000\000\128\004\000\020 @\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\b\000\000\000\000\000\000\000\128\001\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\b\000@\001B\004\000\000\000\000\000\000\000\000\003\000\0008\b\000\012.\016\000\000\128\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\003\000\0008\b\000\012.\016\000\000\128\000\000\000\000\000\000\000\004\000\000\000\000\000\128\000\000\000\000\000@\000\000\000\000\016\000\000\000\000\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\000\000\018\000U\000\016D\004C\128\b\"\000\236\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\004\000\000\004\000\000\000\004\000\000\128\004\000\020 @\000\000\000\000\000\000\000\000H\001T\000A\016\017\014\000 \136\003\176\004\b\001\001\000\000\016\000\000@\0048\000\128\000\000@\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\224 \0000\184\192\000\002\000\000\000\000\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\002\000\000\000\000\003\000\0008\b\000\012.\016\000\000\128\000\000\000\000\000\016\000\001\000\000\004\000C\128\024\000\000\004\001\000\000\000@\000\004\000\000\016\001\012\000 \000\000\016\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\004\000\000\016\001\012\000 \000\000\016\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\016\000\001\000\000\004\000B\000\b\000\000\004\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \004P\001\004\000D8\000\002 \012\192\000 \004\004\128\017@\004\016\001\016\128\000\b\1283\000\000\128\016 \000\000\000\000\000\016\000\192\000\000\000\000\000\000\000\000\128\000\000\000\000\000@\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\004\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\016\000\002\000\016\000P\129\000\000\000\000\000\000\000\000\001 \004P\001\004\000D8\000\002 \012\192\000 \004\004\128\017@\004\016\001\016\128\000\b\1283\000\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\002\000\000\000\000\000\001\000\012\000\000\000\000\000\000\000\000\b\000\000\000\000\000\004\000\016\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\003\000\0008\t\000\r.\016\000\000\128\000\000\000\000\000\022\002U\000\016`\016C\128\000\"\000\236\000\006\000@0\000\003\000\000\000\194\225\000\000\b\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\003\000\0008\t\000\r.\016\000\000\128\000\000\000\000\000\012\000\000\224 \0000\184@\000\002\000\000\000\000\020\000\000\000\016\000\000\000\000\002\000\000\000\000\000\001\000@\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\003\000\0008\t\000\r.\016\000\000\128\000\000\000\000\000\012\000\000\192\000\0000\184@\000\002\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\192\000\014\002@\003K\132\000\000 \000\000\000\000\000\005\128\149@\004\024\004\016\224\000\b\128;\000\000\128\016\022\002U\000\016`\016C\128\000\"\000\236\000\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \005P\001\004\000\0048\000\002\000\014\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\000H\001\020\000A\000\001\012\000\000\128\0030\000\b\001\001 \004P\001\004\000\004 \000\002\000\012\192\000 \004\b\000\000\000\000\000\004\0000\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\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\001\000\000\012\000\000\224$\0004\184@\000\002\000\000\000\000\000\000H\001\020\000A\000\001\012\000\000\128\0030\000\b\001\001 \004P\001\004\000\004 \000\002\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \004P\001\004\000\004 \000\002\000\012\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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 \004P\001\004\000\0040\000\002\000\012\192\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000E\000\016@\000B\000\000 \000\204\000\002\000@ \000\001$\000 \192\002\000\004\000\000\000\000\000 \000\128\000\004\144\000\131\000\000\000\016\000\000\000\000\000\128\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\018\000E\000\016@\004C\000\000\"\000\236\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \004P\001\004\000D0\000\002 \012\192\016 \004\004\128\017@\004\016\001\016\128\000\b\1283\000\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\001 \004P\001\004\000\004 \000\002\000\012\192\000 \004\002\000\000\018@\002\012\000 \000@\000\000\000\000\002\000\b\000\000I\000\b0\000\000\001\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\003 \000<\b\000\012.\020\000\000\128@\b\000\004\000\012\000\004\224 \0000\184@\000\002\000\000\000\000\020\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\000Z\001\020\000A\000\145\r\000\000\136\0070\004\b\001\001 \004P\001\132\000D8\000\002 \012\192\016a\004\004\128\017@\004\016\001\016\224\000\b\1283\000@\132\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\001\020\000A\000\017\012\000\000\136\0030\004\bA\000H\000\000\000\000\002\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\000\000\000\000\000H\001\020\000A\000\001\012\000\000\128\0030\004\b\001\001 \004P\001\004\000\004 \000\002\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \004P\001\004\000D8\000\002 \014\192\016 \004\001 \000\004\000\000\b\000\020\000\000\000@\b\000\004\000\004\128\000\000\000\000 \000P\000\000\001\000 \000\016\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\001 \004P\001\132\000D8\000\002 \012\192\016a\004\004\128\017@\004\016\001\016\224\000\b\1283\000@\132\016\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\002\000\000\000\000\000\000\000\000\002 \000\000\b\000\001\000\012\000\000\000\000\000\000\000\000\b\000\000\000\000\000\004\0000\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\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\003)\000(H\002\012\t\021\b\000\128\200\000\001A\000\004\000\000\128\004\0004 @\000\000\b\000\000\000\000\000@\000\004\000\000\016\129\n\000`\000\000\016\004\000\000\001\000\000\016\000\000B\004 \001\128\000\000@\016\000\000\004\000\000@\000\001\000\016\128\006\000\000\001\000@\000\000 \000\000\000\000\128\016\000\128\000\000\000\000\000\000\b\000\000\000\000\000\002\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\b\001\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\0026\144\002,\020m\240\145\245\128 |\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\b\000\000\000\000\141\164\000\139\005\027|$}`\b\031\000\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\016\000\000@\0040\001\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\128\016\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\b\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\003\000\0008\b\000\012.\016\000\000\128\000\000\000\000\000\016\000\001\000\000\004\000C\128\024\000\000\004\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\002@\000#i\000\"\193F\223\t\031X\002\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\128\000\000\000\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\016\000\000\016\000\128\000\000\000\000\000\000\b\000\000\000\000@\000\000@\002\000\000\000\000\000\000\000\000\000\000\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\016\000\000\000\000\000\000\000\000\000\0002\144\002\132\128 \192\145P\128\b\012\128\000\020\016\000\224\000\014\002\000\003\011\132\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\016\000\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\002\000\000\000\000#i\000\"\193F\223\t\031X\002\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\128\000\000\000\b\218@\b\176Q\183\194G\214\000\129\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\000@\000\004\000\000\016\001\012\000`\000\000\016\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\004\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\016\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\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\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\016\000\000\192\000\014\002\000\003\011\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\016\000\000\000\000\000\000\000\000\000\0002\144\002\132\128 \192\145P\128\b\012\128\000\020\016\000\224\000\014\002\000\003\011\132\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\016\000\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\002\000\000\000\000#i\000\"\193F\223\t\031X\002\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\128\000\000\000\b\218@\b\176Q\183\194G\214\000\129\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\0026\144\002,\020m\240\147\245\128 |\000\000\0068\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\004\000\000@\000\001\000\016\192\006\000\000\001\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\002\000\016\000\208\131\000\000\000 \000\000\000 \000@\000\b\000@\003B\012\000\000\000\128\000\000\000\000\001\000\000 \001\000\r\b\016\000\000\002\000\000\000\000\000\004\000\000\128\004\0004 @\000\000\b\000\000\000\000\0002\144\"\006@ \192\147p\128\b\012\000\000\004\016\031}\136\129\005\252E@\000\129\131\131\220x\176(4\003)\002 @\002\012\t7\b\000\128\192\000\000A\000\012\164\b\129\000\b0$\\ \002\003\000\000\001\004\0002\144\002\004\000 \192\145p\128\b\012\000\000\004\016\000\000\000\000\000\000\000\000\016\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\128\000\000\000\000\000\000\b\000\016\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\004\000\000\004\000\000\000\004\000\000\128\004\0004 @\000\000\b\000\000\000\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\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\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\0002\144\002\132\128 \192\147P\128\b\012\000\000\004\016\000\202@\n\018\000\131\002EB\000 0\000\000\016@\003)\000(H\n\012\t\021\b\000\128\192\000\000A\000\004\000\000\128\004\0004 @\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\001\000@\000\b\000@\003B\004\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\030\164U\1685G4g\245x\"\003\204\001\007\141@z\145V\160\213\028\209\159\213\224\136\0150\004\0305\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\021@\004\017\001\016\224\006\b\1283\000A\128P\000\000\000\000\000\000\000\000\000\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 \005P\001\004@D8\001\130 \012\192\016`\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\001T\000A\016\017\014\000`\136\0030\004\024\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\004\000\000\004\000\000\000\004\000\000\128\004\0004 @\000\000\b\000\000\000\000\000H\001T\000A\016\017\014\000`\136\0030\004\024\005\000\202@\136\016\000\131\002E\194\000 0\000\000\016@\003)\000 @\002\012\t\023\b\000\128\192\000\000A\000\000\000\000\000\000\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\001\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\012\000\000\224$\0004\184@\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\004\000\000@\000\001\000\016\224\006\000\000\001\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\001\000\000\016\000\000@\0040\001\128\000\000@\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\128\004\0004 @\000\000\b\000\000\000\000\000@\000\004\000\000\016\001\014\000`\000\000\016\004\000\004\001\000\000\016\000\000@\0040\001\128\000\000@\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\224 \0000\184\192\000\002\000\000\000\000\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\001\000\000\016\000\000@\0040\001\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\004\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@\0040\001\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\000\000\000@\000\004\000\000\016\001\b\000`\000\000\016\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\017@\004\016\001\016\224\000\b\1283\000\000\128\016\012\000\000\224$\0004\184@\000\002\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\000@\003B\004\000\000\000\128\000\000\000\000\004\128\017@\004\016\001\016\224\000\b\1283\000\000\128\016\012\164\000\161 \b0$T \002\003 \000\005\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \004P\001\004\000D0\000\002 \012\192\000 \004\004\128\017@\004\016\001\016\128\000\b\1283\000\000\128\016 \000\000\000\000\000\016\000\192\000\000\000\000\000\000\000\000\128\000\000\000\000\000@\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\004\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\012\164\000\161 \b0$T \002\003 \000\005\004\000H\001\020\000A\000\017\012\000\000\136\0030\000\b\001\001 \004P\001\004\000D \000\002 \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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \004P\001\004\000D \000\002\000\012\192\000 \000\003)\002 `\002\012\t7\b\000\128\192\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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 \004P\001\004\000D \000\002 \012\192\000 \004\004\128\017@\004\016\001\016\192\000\b\1283\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\001\020\000A\000\017\b\000\000\136\0030\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\000\000\000\000\000\000\000\000\000\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 \004P\001\004\000D0\000\002\000\012\192\000 \000\004\128\017@\004\016\001\016\128\000\b\0003\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\004\128\017@\004\016\001\016\128\000\012\1283\000\000\128\016\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\018\000E\000\016@\004C\000\000 \000\204\000\002\000\000H\001\020\000A\000\017\b\000\000\128\0030\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\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017 \005P\001\006\002D8\000\002 \014\192\002 \004@\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\0002\016\002\004\000 \192\145@\128\b\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@\0006\000\000 \000\000\128\000\000\000(\000LQ\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\202@\b\016\000\131\002E\194\000 4\018\000\016@\000\000\000\000\000\000\012\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\016\000\000\192\000\014\002\000\003\011\132\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\200@\b\016\000\131\002E\002\000 0\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\001\000\000\216\000\000\128\000\002\000\000\000\000\160\0011D\000\000\001\000\000\000\000\000\b\000\000\000\000\000\004\193\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\224 \0000\184@\000\002\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\004\000\000@\000\001\000\016\128\006\000\000\001\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\200@\b\128P3\002G\022\000\0000\000\000\024\192D\148\157\193\244\031!0\224\007\253\176;\182\223\156<\012\164\000\129\128\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\147p\128\b\r\004\000\004P\000\202@\b\016\000\131\002E\194\000 4\016\000\017@D\148\157\193\244\031!0\224\007\252\176;\162\223\156=\018Rw\007\208|\132\195\128\031\242\192\238\139~p\240\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\000\000\000\000\000\000\012\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\144\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\0002\016\002 \020\012\192\145\197\128\000\012\000\000\0060\017%'p}\007\200L8\001\255l\014\237\183\231\015\003)\000 `\002\012\t7\b\000\128\208@\000E\000\012\164\000\129\000\b0$\220 \002\003A\000\001\020\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\017%'p}\007\200L8\001\255,\014\232\183\231\015D\148\157\193\244\031!0\224\007\252\176;\162\223\156=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\144\002\004\000 \192\145p\128\b\r\004\000\004P\017%'p}\007\200L8\001\255,\014\232\183\231\015\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\001 \000\004\000\000\b\000\016\000\000\000@\000\000\004\000\004\128\000\000\000\000 \000@\000\000\001\000\000\000\016\000\018\000\000\000\000\000\128\001\000\000\000\004\000\000\000\000\001 \004P\001\132\000D8\000\002 \014\192\000a\000\001 \000\000\000\000\b\000\016\000\000\000@\000\000\000\000\018\000E\000\016@\004C\128\000\"\000\204\000\002\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \004P\001\004\000D0\000\002 \012\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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 \004P\001\132\000D8\000\002 \014\192\000a\000\001 \000\000\000\000\b\000\016\000\000\000@\000\000\000\000\018\000E\000\016@\004C\128\000\"\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\001\000\000\000\000\000\000\000\000\000\000\004\128\017A\004\016\001\016\192\000\b\128;\000@\128\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\001\020\000A\000\017\012\000\000\136\0030\004\b\001\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\004\128\000\016\000\000 \000@\000\000\001\000\000\000\016\000\018\000\000\000\000\000\128\001\000\000\000\004\000\000\000@\001 \004P\001\004\000D0\000\002 \012\192\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\002\000\000\000\000\000\b\000\000\004\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\016\000\000\000\000\000\012\000\000\192\000\0000\184\192\000\002@\000 \000\000\0000\000\003\000\000\000\194\225\000\000\t\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\004\000 \000\000\000\016\000\000\000\002@\000\000\000\000\0000\000\003\000\000\000\194\225\000\000\t\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\002\000\000\000\000\000\000\000\000\000\000\000\003\000\0008\b\000\012.\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\016\b\000\000\000\128@\000\000\000\b\000\000\000\000\000\000\192\000\012\000\000\003\011\132\000\000 \000\000\000\000\000D\128\157\192\004\025\001\016\224\006\b\144;\000X\132X\012\000\000\224 \0000\184@\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\000\000\000\000\000\000\000\000\000\000\000\004\000\000\001\000\000\000\000\000\004\000\000\000\000\128\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\000\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\0008\b\000\012.\016\000\000\128\000\000\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\002\000\000\000\000\000\001\000\000\000\192\000\014\002\000\003\011\132\000\000 \000\000\000\000\000\000\000\004\000\000\000\000\000 \000\000\000\000\000\016\000\000\000\000\000\000\000\128\016\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\018\000E\000\016@\004C\128\000\"\000\204\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\003 \000<\b\000\012.\020\000\000\128@\b\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\001\020\000A\000\001\012\000\000\128\0030\004\b\001\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\004\128\000\016\000\000 \000@\000\000\001\000\000\000\016\000\018\000\000\000\000\000\128\001\000\000\000\004\000\000\000@\001 \004P\001\004\000\0040\000\002\000\012\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\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\000\000\000\000\000\000\000\000\018\000E\004\016@\000C\000\000 \000\236\001\018\000@2\000\003\192\128\000\194\225@\000\b\004\000\128\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\017@\004\016\000\016\192\000\b\0003\000@\128\016\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\000H\000\001\000\000\002\000\004\000\000\000\016\000\000\001\000\001 \000\000\000\000\b\000\016\000\000\000@\000\000\004\000\018\000E\000\016@\000C\000\000 \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\001\000\000\016\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 \004P\001\004\000D0\000\002 \012\192\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\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\141\164\000\139\005\027|$}`\b\031\000\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\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\001 \004\016\001\004\000\004 \000\002\000\012\128\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\000H\000\000\000\000\003\000\004\000\000\000\016\000\000\000\000\000\000\132\003\240\006\002 \000\001\241\016\b\016\006\n,\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\016\000\000\000\016\000\000\000\000\000\192\000\000\000\000\000\000\000\000\000\000\000 \000\252\001\128\136\000\000|D\002\004\001\130\139\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\004\128\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\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\224 \0000\184@\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\b\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\141\164\000\139\005\027|$}`\b\031\000\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\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\002\000\000\000\000\000\000\129\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\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\b\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\002\000\b\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\004\000\128\128\000@0 \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\002\000\000\b\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\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\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\012\164\000\129\000\b0$\\ \002\003A\000\001\004\000\000\000\000\000\000\000\000\002\000\000\000\000 \001 D\000\000\000\000\000\000\000\000\000\000\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\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\002~\145\006,Um\241\153\245\128\168\127 \000\0148\000@\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\005\161\016@\004\016\r\016\128\b\b\128r\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\000\000\000H\001\004\000A\000\017\b\000\000\136\003 @\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\001 \004\016\001\004\000D \000\002\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\001\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\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\002~\145\006,Um\241\153\245\128\168\127 \000\0148\t\250D\024\177U\183\198g\214\002\161\252\128\0008\224\004\128\016@\004\016\001\016\128\000\b\1282\000\000\128\000\018\000A\000\016@\004B\000\000\"\000\200\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\004\128\016@\004\016\001\016\192\000\b\1282\000\000\128\000\018\000A\000\016@\004B\000\000\"\000\200\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\018\000A\000\016@\004C\000\000\"\000\200\000\002\000\000H\001\004\000A\000\017\b\000\000\136\003 \000\b\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\b\000\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, "M2V.RT\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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&RT\000\000\000\000\023\030RTM2V.\023\030\000\003\000\000\000\000V.\023\030\000\003V.\023\030\000\003\000\000\000\000\000\000\018\238P\154\022\226\0284e\014\000\000\000u\000\000\000\000\003R\000\000\000\000T\020\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\002\018\000,\000\128\000\000\000\000\003V\000\000\0310h\162\023\030`\004\024\150\000c\001\188p\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\001\228\004,\000\181\000\000\000\n\002\220\000\000\003\178\001R\007\"\000\000\005\222\002\\\b6\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002l\000\000\000\000\002\144\148\n\000\000\000\000\007\186\000\000\000\000b(\004\n\003\176\000\000\000\000\145\002\007\186\000\000R\144\023\030\0310\004\244\0058\023\030\027:\000\000\023\030M2Tj\023\030Ur\000\000\004^\000\000Ur\b\164\000\000T\180\000\000\000\016\000\000\000\000\007\162\000\000\007\186\000\000\000\000\000\000\0046\000\000T\180\000\000\t>\131x\138\246p\250\142D\145\002]^_z\000\000O\176\031\156\148\nRTM2M2\000\000\000\000\000\000R\188R\188\023\030\027:M\026\023\030\000\003\027\178\004\248\002\202\000\000\005\214\nr\000\000\000\000\000\000\000\000\000\000\023\030\000\000\000\000\000\000V.\023\030\000\003V.\023\030\000\003\029Vq\170M2\004D\000\003V$\023\030\136\154\000\000e\014\134\172\129>\000\000\002\202\000\000\007V\000\000\004~t\166\145&\000\000\145\002\145&\000\000\145\002\145\002\011R\004\138\b\246\001N\000\000\t(\000\000\000\000\011\236\000\000\000\000\000\000\145\002\007\186\000\000\000\000d\bt\166c\028_z\000\000\000\000_h\011R\000\000\000\000_z\b\234t\166\000\000`^_zaT\000\000\000\000\000\000\005\142\000\000\145\002\000\000\022\020\147~\000\000t\166\022\020t\166\000\000\030>\t\178\007\186\000\000\000\000N\234\000\000\024\148\000\000f\170\005\220\000\000\t\014\145\002\b\176\000\000\t\012\000\000\005\178\000\000\000\003\003\140\000\000\000\000\000\000\002V\002\016e\014V$\023\030e\014\000\000\011R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000^d\024v\000\000\000\000\000\000\001\012\027\244\129>\000\000V$\023\030e\014\000\000\000\000`\022e\014a\012e\014b\212\000\000e\014\000\000\000\000e\194T\020\002`\002`\000\000\n\026e\014\000\000\000\000\000\000\003R\n\226\000\000V\222\000\000e\014fpt\166\b\130\000\000e\014mT\001\188\000\000\000\000\000\000\n\238\000\000 \178\000\000\134\172\000\000\011\002\000\000\"\026\132\024\000\000\000\000\023\234\t\206\002\202\t\246\000\000\000\000\000\000\000\000\nR\000\000S8\006l\011\212\004\210t\166\b\n\r\000\000\000\000\000\b*\011\212\b\234\000\003e\014g|\001`\000\000e\014TBt\166\026\030\b\234\r\142\000\000\000\000\000\000U\028\002`\r\190v\182e\014\000\000\000\003V.T\136R\188\023\030\027:\000c\002\024\000\128\000\000\r\020\0310U\206\r\222\0310\000c\002\024\002\024\000\000\r\242\0310\000\000wH\bnUr\002\202\006\246\147\150\000\000t\166r\028t\166i\234r\172t\166\003\030t\166s@\000\000\b\142\012\\\t\228\0310w\216\000\000\t\218\012\246h\198\000\000\000\000\000\000\000\000\0310xh\0310x\248\005<\b\246j\152\007\202\b\246k(\000\000y\136\bn\000\000\000\000z\024\025\136\000\000\028\172\000\000\014\014\027:\000\000iZ\\2\000\000!\174\000\000\0310\030d\000\000\000\000\000\000h\014\000\000\001\170\000\003OB\000*\004\214\000\003\0260X\016\023\154\001\188\000\000\000\000$:\007\202\000\000\000\000\000\000\018\238\000\003V.\023\030\018\238V.\023\030N:V.\023\030\000\003V$\023\030\129>e\014\030\212\000\003V$\023\030\132\190W\002\002`\014\232}\236\000\003V$\023\030e\014 \178\000\003V$\023\030e\014!\188\000\003\018\238\000\000\000\000\000\000\001\b\028\246\030h\000\000Y\028Y\240R\188\023\030\027:\007\194\0310 \228\000\000Z\196[\152\134\172V\238t\166\006@\000\003V.\023\030\018\238\025&\018\238\002\028\006h\000\003\000\003\018\238\n\\\014\180\004\202t\166\026\146t\166#\"t\166\029\212\014\254\000\000\000\000\014\202\000\000\018\238\005N\014\218\000\000\030\026\000\003\015&\000\000\031r\000\003\019\248\0260\000\000 \166\000\000\014\242\023\152\018\238P6\000\000\000\000\000\000\000\000\027\218\018\238Q\222\000\000\018\238\t\020\001\188\000\000\tl\000\000\025&\014\192\000\000\000\000\n\252\000\003\000\000\000\000\011L\000\003\000\000 |\000\003!\134\000\003\"\144\000\000\021\002\027:\000\003\000\000\000\003RT\000\003\000\000\000\000\000\003#\154\000\003$\164\000\003%\174\000\003&\184\000\003'\194\000\003(\204\000\003)\214\000\003*\224\000\003+\234\000\003,\244\000\003-\254\000\003/\b\000\0030\018\000\0031\028\000\0032&\000\00330\000\0034:\000\0035D\000\0036N\000\0037X\023\030e\014Wjt\166\n|\000\003\000\000\"\198\000\003\000\000e\014#\208e\014$\218e\014%\228\001\188\000\000\000\000\000\000&\238e\014'\248\000\000~^RTM2e\014!\188\000\003\000\000\004:\027\178\004\248\007\186\139D\0310\135T~^~^\000\000\000\000\003(\t<\000\128\006\188\027:\133\030\0310\b\236\027:\133\162~^\142\184\000,\000\128\006\188~^\142\184\000\000\006\188\000\000\000\000\006\188~^\000\000RTM2RTM2R\188\023\030\027:\136\250\000\000\024\150\000c\001\188\014\140\148\n\012\142\007\186\000\000t\166~\204\014\184\015v\139\132\000\000~^\000\000\127PM\\\023\030\028\232\000\000\004\168\015z\000\000\015\180\131h\148\210\000\216\000\000\015\134\014\254\148\n\012\160t\166*\236\004\166\011\156\022\226\000\000+\246\015\196\000\000\007\154\000\000\000\000\015\220_zk\172\000\000s\196\031&\006T\001\018\011\174\015\020\023\030~^\000\000\148\234\r,\148\210\015\196_zz\156l\026\015\200_z{\nl\200\023\030~^\000\000\000\000t\166Tj\023\030WXUr\rf\131x\138\246\145\132\000\216\015\244\000\000\000\000{\184\127`\023\030\000\000\135\148\028\232\000\000\000\000\136\250\000\000\000\000\000\000\133\178\028\232\0300\000\216\016\000\000\000\000\000\000\000\127`\023\030\000\000\000\216\016\002\000\000\000\000\000\000\000\000\000\000\136\250\000\000\015\252\027\186\000\000\031\242s\128\000\000\000\000\000\000\000\000\r\144\137\\\138\246\000\000\136\250\000\000\000\000\136\250\000\000\016\000\027\186\031\242s\128\000\000\147\216\tL\002\018\000\011\b\246~^\000\000\000\011\b\246~^\000\000\006X\027\178\004\248\007\186\144|\0310\1406\000\000\003(\nF\002v\b\246~^\000\000\000\128\015T\0310\1406^\214\000,\000\128\015V\0310\1406^\214\000\000\000\000\t\254\000\003s\128\000\000\0310\142\210s\128\000\000\t\254\000\000R\144\023\030\0310\1406\000\000M\\\023\030\028\232Y\028\028\186\028\186\007\022\003\138\000\000\002fT\180\n\232\000\000\015\244\015\146\027>\022\226 lt\166\011\180\000\000#8\003\152\007\020\012\152\000\000\014\022\000\000\015\252\015\134t\166St\000\000\005\210\011\"\b\134\000\000\014$\000\000\016\026\015\148\148\n \026\000\000\023\030\027>\016@\000\192\000\011\000\003\012&\027>t\166\011\242\011R\000\000t\166\006\244\b\b\000\000\000\000{x\000\000\000\003\012@\027>|hSt\000\000\023\030t\166\r\246t\166\030\024 \026\000\000\015\186\000\000 \026\000\000\000\000#8\000\000\136\250\143f\007\022\003\138\002f\016(\015\196\027>\136\250\143f\000\000\000\000\007\022\003\138\002f\0168\015\186\146\158]\030_z\016\\\146\158\145\002\nl\016b\146\158_z\016~\146\158\128D\128\178\000\000\140J\000\000\000\000tl\127\228\007\022\003\138\002f\016\132\015\248\146\158tl\127\228\000\000\000\000\000\000\147\216\000\000\000\000\000\000\000\000\000\000\000\000\000\000s\128\000\000\143\212\023\030Ur\016\144\131x\000\000\136\250\143\212\000\000\000\000\146\158\023\030Ur\016\150\016\014\138\246\000\000\136\250\146\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\180\028\186\007\022\003\138\002f\016\160\129>Q<\022\226\0284!$\004\172\003\152\000\216\016\170\007f\000\003\000\000\016H\000\003\000\000 \026\000\000\012\016\rz\000\000\014@\000\000\016\192\0166t\166N\160\016\200\n\142\000\003\000\000\016n\000\003\000\000\023\012\005v\n\198\016\214\129\196\148\n\002`\016dt\166\014\030\000\003\000\000\016|\000\003\000\000\000\000\000\000v\182\016\134\000\003\000\000\000\000\000\000 \026\000\000\012,\012\218\000\000\014p\000\000\016\238\016p\148\n\000\000\017\002\130J\148^\002`\016\140t\166\014\164\000\003\000\000\016\184\000\003\000\000\000\000\023\030\000\003 \026\000\000\023>\023\030QQ<\011TQ<\000\000PB\018\238\006b\007vQH\000\000\000\000\000\000m6\000\000\000\000m\230\000\000\000\000n\150\000\003\r\140Q\000\000~^\144\020\007\022\003\138\002f\0172\129>~^\144\020\000\000\000\000\000\000\145\210V$\023\030\136\154e\014~^\000\000\000\000\000\000\000\000\000\000\000\000\140\220\000\000\000\000\141J\000\000~^\000\000\143\212\000\000\000\000\000\000\000\000s\128\145\210\000\000\017l\000\000\140\220\000\000\141J\017z\000\000\017\138\000\000\000\0008b\000\003\017\144\000\000\000\003\017\148\000\000\r\154\007\128\000\003\017\182\000\000p\002N:\000\000\000\003\017\198\000\000\000\003\017\198\000\000\000\000\b\148\000\003\017\214\b\138\000\0039l\000\003\017\216\t\148\000\003:v\000\003\017\216\n\158\000\003;\128#\240\000\003\017\230\011\168\000\003<\138\000\003\017\236\012\178\000\003=\148\000\003\017\238\r\188\000\003>\158\014\b\t\\\000\003\018\006\014\198\000\003?\168\000\003\018\006\015\208\000\003@\178\000\003\018\b\016\218\000\003A\188\017\228\000\003B\198\022\012\000\000\018\026\000\000\000\003\018\024\000\000\000\003\018\030\000\000\000\000)\002\000\003\000\000\012\232\000\003\000\000e\014\000\000\000\000u$\018(\000\000OB\000\000\017`\000\000\\v\000\000\0180\000\000\000*\017\188\000\000\0260!:\002\202\000\000\023\218\000\000\003j\r\246\nH\000\000\000\000\018B\000\000\000x\031r[\224\001\208\000\000\000\000\000\003\017\144\000\003\017\172\000\000\017\174\000\003\017\186\000\000\000\003\001\208\000\003\017\184\000\003\017\190\000\000\000\000X\n\002`\018x}\236_z\027Z\000\003\000\000}\236\000\000\000\000\000\000}\236\000\000\018L\000\003\000\000\000\003\000\000\000\000\000\000C\208e\014\000\000\000\000\018\152\000\003D\218\000\003E\228\000\000\017\240\000\000\028Dp\002\000\000\0030\018\152\000\000|\228\014&\014\140\000\000\000\000\018\028\000\000\018\188\000\000\000\000\023\030\027:\004\022\000\003\000\000\002\018\000,\000\128\006\188\018V\000\003\000\000M\\\023\030\028\232\002\180\005\240\018X\000\003\000\000\000\000\000\000\000\000\000\000\018\224\000\000\000\000\148\176\002`\0180t\166\014\178\000\003\000\000\014\202t\166\015\000\000\003\000\000\018F\000\003\000\000\000\000~^\000\000F\238\000\000\018\030\000\000\000\000R\188\023\030\027:\"\242\000\000\0310!\238\000\000\004\202\000\000\018\250\000\000\019*\129>G\248\019<\129>I\002}L\000\000\0310\"\156\000\000\0310\024H\000\000\0310\"\162\000\000\136\250\000\000\023\030\027:\136\250\000\000s\128\145\210\000\000\000\000\019\016\000\000\000\192\tL\023\030nl\000\000\000\000\026\242o\028\000\000\000\000\018\140\000\000\018\246t\166\000\000\012\132\r0\011R\000\000\000\000t\166\000\021\005F\000\000t\166\011\160\000\216\019 \000\000\000\000\136\002\000\000\000\000\019\026\027\186 \252\028\232\127`\031&\023\030\000\000\141\184\000\000\000\000\000\000\000\000\000\000\000\000\000\000\131\n\031&\023\030\000\000\015z\131x\019\030\027\186 \252\141\184\000\000\018\140\000\000u\150#\172\000\000~^\000\000\018\148\000\000$\134\000\000XL\000\000t\166\014\210\000\000!$\018\150\000\000\019z\129>J\012K\022\129>L \000\003\000\000\000\003\000\000\018\178\000\003\018\188\000\000\019x\000\000\000\003\018\194\000\003\018\200\000\000\018\220\000\000\000\000`\004\018\222\000\000\000\000#\154p\156\019\146\000\000\000\000\000\000\0146\r\006u\242\019\162\000\000\000\000\000\000\000\000\000\000\000\000\019\002\000\000\031&\000\000\019\b\000\000t\166\000\000\003\030\000\000\000\003\019$\000\000\000\000\b\246\000\000\006`\000\000\000\003\000\000\012L\000\000\027:\000\000\n\134\000\000\0310\000\000\007 \000\000\012\\\000\000\0198\000\000e\014!\188\000\000\000\000\001\188\019:\000\000\000\000\tlN:\007\186\134~\000\000\000\000\000\000\000\000\000\000\146\018\000\000\000\000\019\238\000\000|T\000\000\015\138\019\244\000\000\019\246\000\000OBOB\146\248\146\248\000\000\000\000~^\146\248\000\000\000\000\000\000~^\146\248\019T\000\000\019^\000\000"), (16, "\tu\000\006\000\246\004\161\004\161\tu\001\002\001\006\tu\001\n\001\022\001\"\tu\t!\tu\012\165\001&\tu\000\238\001J\tu\tu\tu\001\254\tu\tu\tu\001*\002\006\004\161\004\161\001.\tu\003V\003Z\n\254\tu\012\165\tu\006\237\0012\001N\003z\002\230\tu\tu\003\174\003\178\tu\003\182\003\194\003\206\003\218\003\226\006\234\007:\002\234\000\238\tu\tu\003F\001\173\000\238\003\214\tu\tu\tu\b\154\b\158\b\170\b\222\001\142\001\146\b\178\b\162\b\210\005n\tu\tu\tu\tu\tu\tu\tu\tu\tu\b\246\007Z\tu\000\238\tu\tu\tu\001J\t\002\t\026\t:\tN\005z\tu\005~\tu\tu\tu\004\161\tu\tu\tu\tu\b\214\t!\b\218\024\222\024z\tu\001N\tu\tu\004\161\tu\tu\tu\tu\tu\tu\005\130\b\234\tu\tu\tu\tb\004j\t\194\001\173\tu\tu\tu\tu\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\rJ\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\0065\001\173\000\238\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\023\218\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\006\246\001\173\001\173\001\173\001\173\001\173\004\161\004F\001\173\001\173\001\173\002\022\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\004>\001\173\001\173\001\173\001\173\001\173\001\173\001\173\016\162\006\250\007\022\001\006\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\023\230\tv\001\173\005\178\001\173\001\173\r\174\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\001\173\bf\001\173\001\173\001\173\001\173\001\173\ny\002\237\002\237\001\186\002N\ny\ny\ny\ny\000\238\004J\ny\ny\ny\ny\007a\ny\ny\ny\007a\ny\ny\ny\001\246\ny\ny\ny\ny\b\150\ny\000\n\ny\ny\ny\ny\ny\ny\ny\ny\002\014\ny\002\030\ny\003A\ny\ny\ny\ny\ny\007V\007M\ny\ny\ny\007M\ny\006U\002&\ny\ny\ny\002\237\002J\ny\ny\ny\ny\ny\ny\ny\023\234\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\006\002\ny\ny\003\t\ny\ny\ny\006\154\001\006\000\238\005\245\005^\ny\ny\ny\ny\ny\ny\016\n\ny\ny\ny\ny\ny\t\218\ny\005\r\n2\ny\rB\ny\ny\006\185\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\ny\007M\ny\ny\ny\ny\ny\t\253\003\134\004\161\004\161\003E\t\253\t\253\t\253\t\253\006U\005\245\t\253\t\253\t\253\t\253\002\n\t\253\t\253\t\253\004\161\t\253\t\253\t\253\003E\t\253\t\253\t\253\t\253\015f\t\253\005\245\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\006\249\t\253\001\154\t\253\002V\t\253\t\253\t\253\t\253\t\253\016\002\007Q\t\253\t\253\t\253\007Q\t\253\004\161\000\238\t\253\t\253\t\253\r\194\000\238\t\253\t\253\t\253\t\253\t\253\t\253\t\253\005J\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\001\250\t\210\n*\003\129\t\253\t\253\t\253\001V\007\198\004\161\028s\012\241\t\253\t\253\t\253\t\253\t\253\t\253\004\161\t\253\t\253\t\253\t\253\t\253\t\218\t\253\012\241\n2\t\253\001Z\t\253\t\253\000\238\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\t\253\b\166\t\253\t\253\t\253\t\253\t\253\012\205\002\237\002\237\012.\001\158\012\205\012\205\012\205\012\205\001\250\003\129\012\205\012\205\012\205\012\205\003\n\012\205\012\205\002\237\012\157\012\205\012\205\012\205\002v\012\205\012\205\012\205\012\205\bf\012\205\000\n\012\205\012\205\012\205\012\205\012\205\012\205\012\205\012\205\004j\012\205\012\157\012\205\000\238\012\205\012\205\012\205\012\205\012\205\002z\007I\012\205\012\205\012\205\007I\012\205\004\161\003\222\012\205\012\205\012\205\002\237\025\002\012\205\012\205\012\205\012\205\012\205\012\205\012\205\004\161\012\205\001f\012\205\004\161\012\205\012\205\012\205\012\205\012\205\012\205\012\205\012\205\012\205\012\205\012\205\004>\012\205\012\205\025\226\012\205\012\205\012\205\003\225\007Q\004\161\002\158\004\161\012\205\012\205\012\205\012\205\012\205\012\205\004\161\012\205\012\205\012\205\012\205\012\205\012\205\012\205\003\014\012\205\012\205\000\238\012\205\012\205\000\238\012\205\012\205\012\205\012\205\012\205\012\205\012\205\012\205\012\205\012\205\012\205\012\205\012\205\007I\004\001\012\205\012\205\012\205\012\205\004\001\004\001\004\001\004\001\004\161\002\202\004\001\004\001\004\001\004\001\004V\004\001\004\001\026\190\004\022\004\001\004\001\004\001\000\238\004\001\004\001\004\001\004\001\002\162\004\001\007Q\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\r2\004\001\003\225\004\001\b\166\004\001\004\001\004\001\004\001\004\001\018\174\004\161\004\001\004\001\004\001\t\246\004\001\004\202\t\254\004\001\004\001\004\001\006\198\000\238\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\161\004\001\004\161\004\001\005>\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\000\238\t\210\n*\004\161\004\001\004\001\004\001\001\250\b\026\005\030\004\161\003\129\004\001\004\001\004\001\004\001\004\001\004\001\b\"\004\001\004\001\004\001\004\001\004\001\t\218\004\001\b&\n2\004\001\026\194\004\001\004\001\004\161\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\004\001\000\238\004\001\004\001\004\001\004\001\004\001\003\241\002\237\002\237\015>\005B\003\241\003\241\003\241\003\241\000\238\000\238\003\241\003\241\003\241\003\241\001f\003\241\003\241\002\237\012\018\003\241\003\241\003\241\004\206\003\241\003\241\003\241\003\241\004\161\003\241\000\n\003\241\003\241\003\241\003\241\003\241\003\241\003\241\003\241\004\185\003\241\004\206\003\241\003\142\003\241\003\241\003\241\003\241\003\241\000\238\004>\003\241\003\241\003\241\t\222\003\241\006\190\006\214\003\241\003\241\003\241\002\237\t9\003\241\003\241\003\241\003\241\003\241\003\241\003\241\023*\003\241\0236\003\241\020\022\003\241\003\241\003\241\003\241\003\241\003\241\003\241\003\241\003\241\003\241\003\241\t\190\t\210\n*\004\185\003\241\003\241\003\241\016B\004\161\007\146\007V\t\r\003\241\003\241\003\241\003\241\003\241\003\241\028\147\003\241\003\241\003\241\003\241\003\241\t\218\003\241\004J\n2\003\241\006\"\003\241\003\241\006\193\003\241\003\241\003\241\003\241\003\241\003\241\003\241\003\241\003\241\003\241\003\241\003\241\003\241\016J\003\241\003\241\003\241\003\241\003\241\003\237\000\238\b\014\006=\004\161\003\237\003\237\003\237\003\237\004\014\012f\003\237\003\237\003\237\003\237\002\026\003\237\003\237\000\238\004\161\003\237\003\237\003\237\000\238\003\237\003\237\003\237\003\237\002\242\003\237\012n\003\237\003\237\003\237\003\237\003\237\003\237\003\237\003\237\007\162\003\237\002f\003\237\003\217\003\237\003\237\003\237\003\237\003\237\003\146\002\246\003\237\003\237\003\237\t\r\003\237\022\022\007\170\003\237\003\237\003\237\rJ\028\195\003\237\003\237\003\237\003\237\003\237\003\237\003\237\0065\003\237\022.\003\237\022:\003\237\003\237\003\237\003\237\003\237\003\237\003\237\003\237\003\237\003\237\003\237\002j\t\210\n*\bf\003\237\003\237\003\237\001\186\002N\018\190\003\229\t\t\003\237\003\237\003\237\003\237\003\237\003\237\000\238\003\237\003\237\003\237\003\237\003\237\t\218\003\237\t\246\n2\003\237\t\254\003\237\003\237\006\201\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\150\003\237\003\237\003\237\003\237\003\237\n\021\000\238\000\238\006\222\025^\n\021\n\021\n\021\n\021\001\006\007\214\n\021\n\021\n\021\n\021\002*\n\021\n\021\006B\012\161\n\021\n\021\n\021\t\154\n\021\n\021\n\021\n\021\016r\n\021\007\210\n\021\n\021\n\021\n\021\n\021\n\021\n\021\n\021\003\229\n\021\012\161\n\021\005.\n\021\n\021\n\021\n\021\n\021\007\146\ba\n\021\n\021\n\021\t\t\n\021\022N\022Z\n\021\n\021\n\021\002^\000\238\n\021\n\021\n\021\n\021\n\021\n\021\n\021\007i\n\021\022b\n\021\022v\n\021\n\021\n\021\n\021\n\021\n\021\n\021\n\021\n\021\n\021\n\021\004N\n\021\n\021\0056\n\021\n\021\n\021\004\166\b\014\001\142\001\146\002^\n\021\n\021\n\021\n\021\n\021\n\021\002\237\n\021\n\021\n\021\n\021\n\021\n\021\n\021\012^\n\021\n\021\000\238\n\021\n\021\026j\n\021\n\021\n\021\n\021\n\021\n\021\n\021\n\021\n\021\n\021\n\021\n\021\n\021\000\n\n%\n\021\n\021\n\021\n\021\n%\n%\n%\n%\003\026\002\214\n%\n%\n%\n%\004\206\n%\n%\006\230\012v\n%\n%\n%\022\210\n%\n%\n%\n%\003\173\n%\002\237\n%\n%\n%\n%\n%\n%\n%\n%\022\230\n%\022\250\n%\004\250\n%\n%\n%\n%\n%\n\150\006\150\n%\n%\n%\005\t\n%\005A\022n\n%\n%\n%\004\206\005&\n%\n%\n%\n%\n%\n%\n%\006\158\n%\003\181\n%\0079\n%\n%\n%\n%\n%\n%\n%\n%\n%\n%\n%\004>\n%\n%\006\014\n%\n%\n%\b\198\015\022\001\142\015b\001\006\n%\n%\n%\n%\n%\n%\007V\n%\n%\n%\n%\n%\n%\n%\015r\n%\n%\ti\n%\n%\003\146\n%\n%\n%\n%\n%\n%\n%\n%\n%\n%\n%\n%\n%\t\t\n\029\n%\n%\n%\n%\n\029\n\029\n\029\n\029\003\134\007\222\n\029\n\029\n\029\n\029\007\238\n\029\n\029\t\238\n\022\n\029\n\029\n\029\015\170\n\029\n\029\n\029\n\029\b\006\n\029\003\150\n\029\n\029\n\029\n\029\n\029\n\029\n\029\n\029\bf\n\029\000\238\n\029\015\182\n\029\n\029\n\029\n\029\n\029\000\238\014\186\n\029\n\029\n\029\000\238\n\029\006&\022\130\n\029\n\029\n\029\016\018\006b\n\029\n\029\n\029\n\029\n\029\n\029\n\029\016n\n\029\bQ\n\029\006z\n\029\n\029\n\029\n\029\n\029\n\029\n\029\n\029\n\029\n\029\n\029\011\194\n\029\n\029\006\178\n\029\n\029\n\029\028\179\t\t\019\006\016v\002^\n\029\n\029\n\029\n\029\n\029\n\029\t=\n\029\n\029\n\029\n\029\n\029\n\029\n\029\t\246\n\029\n\029\t\254\n\029\n\029\bY\n\029\n\029\n\029\n\029\n\029\n\029\n\029\n\029\n\029\n\029\n\029\n\029\n\029\n\186\n\t\n\029\n\029\n\029\n\029\n\t\n\t\n\t\n\t\0036\003\146\n\t\n\t\n\t\n\t\rn\n\t\n\t\t%\003\205\n\t\n\t\n\t\003\014\n\t\n\t\n\t\n\t\0162\n\t\b-\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\202\n\t\004N\n\t\020J\n\t\n\t\n\t\n\t\n\t\011\174\020\178\n\t\n\t\n\t\r\178\n\t\018\222\022\154\n\t\n\t\n\t\016\186\000\238\n\t\n\t\n\t\n\t\n\t\n\t\n\t\019\130\n\t\000\238\n\t\006\194\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\004Z\n\t\n\t\011\174\n\t\n\t\n\t\011\174\000\238\018\230\019\138\001\162\n\t\n\t\n\t\n\t\n\t\n\t\0065\n\t\n\t\n\t\n\t\n\t\n\t\n\t\020.\n\t\n\t\t%\n\t\n\t\bQ\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\026\162\n\017\n\t\n\t\n\t\n\t\n\017\n\017\n\017\n\017\002j\012\242\n\017\n\017\n\017\n\017\016\174\n\017\n\017\020\182\012\242\n\017\n\017\n\017\016\194\n\017\n\017\n\017\n\017\016\230\n\017\016F\n\017\n\017\n\017\n\017\n\017\n\017\n\017\n\017\006E\n\017\007\242\n\017\b\"\n\017\n\017\n\017\n\017\n\017\007\242\019\134\n\017\n\017\n\017\028\163\n\017\b\"\022\174\n\017\n\017\n\017\006\210\b\"\n\017\n\017\n\017\n\017\n\017\n\017\n\017\002^\n\017\r\005\n\017\016\194\n\017\n\017\n\017\n\017\n\017\n\017\n\017\n\017\n\017\n\017\n\017\002j\n\017\n\017\012\242\n\017\n\017\n\017\028.\002j\012\250\026\178\002^\n\017\n\017\n\017\n\017\n\017\n\017\r^\n\017\n\017\n\017\n\017\n\017\n\017\n\017\023V\n\017\n\017\0036\n\017\n\017\002^\n\017\n\017\n\017\n\017\n\017\n\017\n\017\n\017\n\017\n\017\n\017\n\017\n\017\007\018\n\r\n\017\n\017\n\017\n\017\n\r\n\r\n\r\n\r\014\022\018\226\n\r\n\r\n\r\n\r\020\"\n\r\n\r\026\166\012\249\n\r\n\r\n\r\007*\n\r\n\r\n\r\n\r\023^\n\r\014\218\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\007b\n\r\r\202\n\r\b\"\n\r\n\r\n\r\n\r\n\r\016N\023\194\n\r\n\r\n\r\te\n\r\016z\022\194\n\r\n\r\n\r\020\150\007n\n\r\n\r\n\r\n\r\n\r\n\r\n\r\018\234\n\r\007\134\n\r\024\214\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\bZ\n\r\n\r\b\"\n\r\n\r\n\r\022\018\019\142\000\238\003\142\006A\n\r\n\r\n\r\n\r\n\r\n\r\b]\n\r\n\r\n\r\n\r\n\r\n\r\n\r\004>\n\r\n\r\000\238\n\r\n\r\0069\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\017\002\n\025\n\r\n\r\n\r\n\r\n\025\n\025\n\025\n\025\bU\tM\n\025\n\025\n\025\n\025\022\206\n\025\n\025\003\142\019B\n\025\n\025\n\025\b\162\n\025\n\025\n\025\n\025\027\142\n\025\012\242\n\025\n\025\n\025\n\025\n\025\n\025\n\025\n\025\t2\n\025\028*\n\025\t\242\n\025\n\025\n\025\n\025\n\025\000\238\n\018\n\025\n\025\n\025\n\030\n\025\000\238\022\222\n\025\n\025\n\025\tQ\n.\n\025\n\025\n\025\n\025\n\025\n\025\n\025\n>\n\025\000\238\n\025\nb\n\025\n\025\n\025\n\025\n\025\n\025\n\025\n\025\n\025\n\025\n\025\019\190\n\025\n\025\n\174\n\025\n\025\n\025\025v\012\234\000\238\r\006\002^\n\025\n\025\n\025\n\025\n\025\n\025\r\n\n\025\n\025\n\025\n\025\n\025\n\025\n\025\r6\n\025\n\025\025\130\n\025\n\025\004\185\n\025\n\025\n\025\n\025\n\025\n\025\n\025\n\025\n\025\n\025\n\025\n\025\n\025\025\138\n)\n\025\n\025\n\025\n\025\n)\n)\n)\n)\027:\003\254\n)\n)\n)\n)\rR\n)\n)\rV\r~\n)\n)\n)\r\146\n)\n)\n)\n)\006^\n)\012\018\n)\n)\n)\n)\n)\n)\n)\n)\r\210\n)\r\226\n)\014*\n)\n)\n)\n)\n)\014v\014\150\n)\n)\n)\014\182\n)\014\254\022\242\n)\n)\n)\015z\015\146\n)\n)\n)\n)\n)\n)\n)\016\026\n)\016\030\n)\016V\n)\n)\n)\n)\n)\n)\n)\n)\n)\n)\n)\016Z\n)\n)\016\130\n)\n)\n)\016\134\016\158\017\022\017F\017J\n)\n)\n)\n)\n)\n)\017n\n)\n)\n)\n)\n)\n)\n)\017r\n)\n)\017\130\n)\n)\017\146\n)\n)\n)\n)\n)\n)\n)\n)\n)\n)\n)\n)\n)\017\158\n!\n)\n)\n)\n)\n!\n!\n!\n!\017\210\017\214\n!\n!\n!\n!\018&\n!\n!\018N\018R\n!\n!\n!\018\150\n!\n!\n!\n!\018\186\n!\018\202\n!\n!\n!\n!\n!\n!\n!\n!\018\242\n!\018\246\n!\019\002\n!\n!\n!\n!\n!\019\018\019*\n!\n!\n!\019:\n!\019N\023\006\n!\n!\n!\019f\019\150\n!\n!\n!\n!\n!\n!\n!\019\154\n!\019\166\n!\019\182\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\019\202\n!\n!\020\190\n!\n!\n!\020\202\020\250\021\030\021F\021\206\n!\n!\n!\n!\n!\n!\021\226\n!\n!\n!\n!\n!\n!\n!\021\234\n!\n!\021\254\n!\n!\022\n\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\n!\022\030\ni\n!\n!\n!\n!\ni\ni\ni\ni\0226\022B\ni\ni\ni\ni\022V\ni\ni\022j\022~\ni\ni\ni\022\150\ni\ni\ni\ni\022\170\ni\022\190\ni\ni\ni\ni\ni\ni\ni\ni\022\218\ni\022\238\ni\023\002\ni\ni\ni\ni\ni\023&\0232\ni\ni\ni\023>\ni\023r\023\018\ni\ni\ni\023\130\023\146\ni\ni\ni\ni\ni\ni\ni\023\158\ni\023\210\ni\023\246\ni\ni\ni\ni\ni\ni\ni\ni\ni\ni\ni\023\254\ni\ni\024\006\ni\ni\ni\024\014\024\"\024*\024>\024n\ni\ni\ni\ni\ni\ni\024\154\ni\ni\ni\ni\ni\ni\ni\024\178\ni\ni\024\202\ni\ni\024\230\ni\ni\ni\ni\ni\ni\ni\ni\ni\ni\ni\ni\ni\024\238\002\t\ni\ni\ni\ni\002\t\001\002\001\006\002\t\025\030\025>\001\"\002\t\t\234\002\t\025Z\001&\002\t\025n\025\150\002\t\002\t\002\t\025\182\002\t\002\t\002\t\001*\025\234\n\026\025\242\001.\002\t\002\t\002\t\002\t\002\t\n\"\002\t\025\254\0012\026^\003z\026\142\002\t\002\t\002\t\002\t\002\t\026\150\026\210\003\206\002N\002\t\026\234\002\t\027B\027V\002\t\002\t\003F\027r\027\154\003\214\002\t\002\t\002\t\b\154\b\158\b\170\027\162\020V\n\146\b\178\n\162\b\210\005n\002\t\002\t\002\t\002\t\002\t\002\t\002\t\002\t\002\t\027\202\t\210\n*\027\210\002\t\002\t\002\t\027\218\027\230\027\238\027\247\028\007\005z\002\t\005~\002\t\002\t\002\t\028\026\002\t\002\t\002\t\002\t\b\214\022J\b\218\0286\022\138\002\t\028S\002\t\002\t\028c\002\t\002\t\002\t\002\t\002\t\002\t\005\130\b\234\002\t\002\t\002\t\tb\004j\028\127\nU\002\t\002\t\002\t\002\t\nU\001\002\001\006\nU\028\211\028\239\001\"\nU\nU\nU\029+\001&\nU\029?\029G\nU\nU\nU\029\131\nU\nU\nU\001*\029\139\nU\000\000\001.\nU\nU\nU\nU\nU\nU\nU\000\000\0012\000\000\003z\000\000\nU\nU\nU\nU\nU\000\000\000\000\003\206\002N\nU\000\000\nU\000\000\000\000\nU\nU\003F\000\000\000\000\003\214\nU\nU\nU\b\154\b\158\b\170\000\000\nU\000\000\b\178\000\000\b\210\005n\nU\nU\nU\nU\nU\nU\nU\nU\nU\000\000\nU\nU\000\000\nU\nU\nU\000\000\000\000\000\000\000\000\000\000\005z\nU\005~\nU\nU\nU\000\000\nU\nU\nU\nU\b\214\nU\b\218\000\000\nU\nU\000\000\nU\nU\000\000\nU\nU\nU\nU\nU\nU\005\130\b\234\nU\nU\nU\tb\004j\000\000\nQ\nU\nU\nU\nU\nQ\001\002\001\006\nQ\000\000\000\000\001\"\nQ\nQ\nQ\000\000\001&\nQ\000\000\000\000\nQ\nQ\nQ\000\000\nQ\nQ\nQ\001*\000\000\nQ\000\000\001.\nQ\nQ\nQ\nQ\nQ\nQ\nQ\000\000\0012\000\000\003z\000\000\nQ\nQ\nQ\nQ\nQ\000\000\000\000\003\206\002N\nQ\000\000\nQ\000\000\000\000\nQ\nQ\003F\000\000\000\000\003\214\nQ\nQ\nQ\b\154\b\158\b\170\000\000\nQ\000\000\b\178\000\000\b\210\005n\nQ\nQ\nQ\nQ\nQ\nQ\nQ\nQ\nQ\000\000\nQ\nQ\000\000\nQ\nQ\nQ\000\000\000\000\000\000\000\000\000\000\005z\nQ\005~\nQ\nQ\nQ\000\000\nQ\nQ\nQ\nQ\b\214\nQ\b\218\000\000\nQ\nQ\000\000\nQ\nQ\000\000\nQ\nQ\nQ\nQ\nQ\nQ\005\130\b\234\nQ\nQ\nQ\tb\004j\000\000\002I\nQ\nQ\nQ\nQ\002I\001\002\001\006\002I\000\000\000\000\001\"\002I\t\234\002I\000\000\001&\002I\000\000\000\000\002I\002I\002I\000\000\002I\002I\002I\001*\004\161\n\026\000\000\001.\002I\002I\002I\002I\002I\n\"\002I\000\000\0012\000\000\003z\004\218\002I\002I\002I\002I\002I\000\000\000\000\003\206\002N\002I\000\000\002I\000\000\000\000\002I\002I\003F\000\000\000\000\003\214\002I\002I\002I\b\154\b\158\b\170\000\238\020V\000\000\b\178\000\000\b\210\005n\002I\002I\002I\002I\002I\002I\002I\002I\002I\000\000\000\000\002I\000\000\002I\002I\002I\000\000\000\000\000\000\004\161\000\000\005z\002I\005~\002I\002I\002I\000\000\002I\002I\002I\002I\b\214\000\000\b\218\004\161\000\000\002I\000\000\002I\002I\000\000\002I\002I\002I\002I\002I\002I\005\130\b\234\002I\002I\002I\tb\004j\004\161\004\161\002I\002I\002I\002I\004\161\004\161\004\234\004\161\004\161\004\161\004\161\004\161\004\161\004\161\004\161\000\000\004\161\000\000\004\161\004\161\000\000\004\161\004\161\004\161\004\161\004\161\004\161\004\161\004\161\004\161\004\161\004\161\004\161\004\161\004\161\000\000\004\161\004\161\000\000\000\238\004\161\004\161\000\000\004\161\004\161\004\161\004\161\004\161\000\000\004\161\004\161\004\161\004\161\004\161\004\161\004\161\004\161\004\161\004\161\004\161\000\238\004\161\004\161\004\161\004\161\004\161\004\161\004\161\004\161\000\238\004\161\004\161\004\161\004\161\004\161\000\000\004\161\000\000\004\161\004\161\004\161\004\161\003\193\003\157\004\161\000\238\004\161\004\161\004\161\004\161\004\161\004\161\000\000\003\193\003\157\004\161\004\161\004\161\004\161\004\161\004\161\004\161\000\000\004\161\004\161\004\161\000\000\000\000\004\161\004\161\000\000\000\000\004\161\000\000\004\161\004\161\003\193\003\157\007q\000\000\004\161\000\000\007q\000\000\019\030\000\000\007e\004\161\004\161\004\161\007e\000\000\004\161\004\161\004\161\004\161\000\169\000\169\004\161\000\169\000\169\000\169\000\169\000\169\000\169\000\169\000\169\000\000\000\169\019\234\000\169\000\169\007\146\000\000\000\169\000\169\003\193\003\157\000\169\000\169\000\000\000\169\000\169\000\169\000\169\000\000\000\169\nf\000\169\000\169\000\000\000\238\000\169\000\169\026\"\000\169\000\169\000\169\b\182\000\169\000\000\000\169\000\169\000\169\000\169\000\169\000\169\000\169\000\169\000\169\000\169\001&\000\000\000\000\000\169\000\169\000\000\b\014\000\169\000\169\007q\000\169\000\169\000\169\000\169\000\169\000\169\000\000\000\169\001F\000\169\000\169\000\169\000\169\t=\000\000\000\169\t\246\000\238\000\169\t\254\000\169\001R\000\169\0062\000\000\000\n\005\222\000\169\000\169\000\169\000\169\000\169\000\169\006F\000\169\000\169\000\169\006N\000\000\000\000\000\169\002\237\002\237\000\169\000\000\000\169\000\000\000\222\000\000\000\000\005n\000\169\000\000\000\000\000\000\000\238\002\237\000\169\000\169\000\169\000\169\000\000\002A\000\169\000\169\000\169\000\169\002A\b\193\b\193\002A\026&\005z\b\193\002A\000\000\002A\000\000\b\193\002A\000\000\t=\002A\002A\002A\000\000\002A\002A\002A\b\193\000\000\000\000\000\000\b\193\002A\002A\002A\002A\002A\005\130\002A\000\000\b\193\000\000\b\193\000\000\002A\002A\002A\002A\002A\007\146\000\000\b\193\b\193\002A\000\000\002A\t=\000\000\002A\002A\b\193\000\000\000\000\b\193\002A\002A\002A\b\193\b\193\b\193\000\000\bJ\b\193\b\193\b\193\b\193\b\193\002A\002A\002A\002A\002A\002A\002A\002A\002A\000\000\t\210\n*\000\000\002A\002A\002A\000\000\b\014\000\000\000\000\000\000\b\193\002A\b\193\002A\002A\002A\000\000\002A\002A\002A\002A\b\193\t\218\b\193\000\000\n2\002A\000\238\002A\002A\000\000\002A\002A\002A\002A\002A\002A\b\193\b\193\002A\002A\002A\b\193\b\193\000\000\002U\002A\002A\002A\002A\002U\001\002\001\006\002U\000\000\000\000\001\"\002U\004]\002U\000\000\001&\002U\000\000\000\000\002U\002U\002U\000\000\002U\002U\002U\001*\000\000\000\000\000\000\001.\002U\002U\002U\002U\002U\000\000\002U\000\000\0012\000\000\003z\000\000\002U\002U\002U\002U\002U\000\000\000\000\003\206\b\174\002U\000\000\002U\000\000\000\238\002U\002U\003F\000\000\000\000\003\214\002U\002U\002U\b\154\b\158\b\170\012q\012q\000\000\b\178\012q\b\210\005n\002U\002U\002U\002U\002U\002U\002U\002U\002U\000\000\t\210\n*\000\000\002U\002U\002U\000\000\004]\000\000\000\000\000\000\005z\002U\005~\002U\002U\002U\002^\002U\002U\002U\002U\b\214\t\218\b\218\000\000\n2\002U\000\238\002U\002U\026~\002U\002U\002U\002U\002U\002U\005\130\b\234\002U\002U\002U\tb\004j\000\000\002Q\002U\002U\002U\002U\002Q\002\170\001\006\002Q\002^\000\000\000\000\002Q\000\000\002Q\002\174\0036\002Q\000\000\012q\002Q\002Q\002Q\002^\002Q\002Q\002Q\001*\000\000\001*\000\000\000\000\002Q\002Q\002Q\002Q\002Q\000\000\002Q\000\000\000\000\000\000\016\"\000\000\002Q\002Q\002Q\002Q\002Q\000\000\000\000\003n\004\146\002Q\0036\002Q\005E\016\154\002Q\002Q\003F\024J\003F\000\000\002Q\002Q\002Q\002\237\0036\016\178\000\000\bQ\000\000\000\000\000\000\bQ\000\000\002Q\002Q\002Q\002Q\002Q\002Q\002Q\002Q\002Q\000\000\t\210\n*\000\000\002Q\002Q\002Q\007N\014\186\000\n\000\000\000\000\003\189\002Q\003\146\002Q\002Q\002Q\004\146\002Q\002Q\002Q\002Q\003\189\t\218\000\000\002\237\n2\002Q\bQ\002Q\002Q\000\000\002Q\002Q\002Q\002Q\002Q\002Q\000\000\002\237\002Q\002Q\002Q\001\021\bQ\003\189\002E\002Q\002Q\002Q\002Q\002E\000\000\000\000\002E\000\000\000\000\005\182\002E\000\000\002E\000\000\000\000\002E\001\021\000\000\002E\002E\002E\003\246\002E\002E\002E\006n\000\000\004\002\000\000\bQ\002E\002E\002E\002E\002E\000\000\002E\003\189\001\021\000\000\000\000\001>\002E\002E\002E\002E\002E\000\000\n\130\001\021\007\146\002E\000\000\002E\001\021\000\000\002E\002E\bQ\000\000\000\000\002\237\002E\002E\002E\015\246\000\000\001\021\001\021\000\000\000\000\000\000\bR\000\000\000\000\002E\002E\002E\002E\002E\002E\002E\002E\002E\000\000\t\210\n*\r*\002E\002E\002E\001\"\000\n\000\000\003\146\b\014\001\021\002E\000\000\002E\002E\002E\000\000\002E\002E\002E\002E\001\021\t\218\002\237\014j\n2\002E\000\000\002E\002E\000\238\002E\002E\002E\002E\002E\002E\002\237\002\237\002E\002E\002E\000\000\000\000\000\000\r.\002E\002E\002E\002E\000\006\000\246\tz\002N\007A\001\002\001\006\000\000\001\n\001\022\001\"\r:\000\000\014\142\023v\001&\001b\000\000\023\134\023\150\023\162\001f\000\000\000\000\000\000\007A\001*\000\000\000\000\000\000\003\210\001n\t\130\t\134\001z\001~\000\000\000\000\000\000\0012\000\000\003z\000\000\025\190\005~\t\166\t\170\007A\003\182\003\194\003\206\003\218\003\226\t\174\007:\000\000\014\154\001\206\007A\003F\000\000\000\000\003\214\007A\007A\000\238\b\154\b\158\b\170\b\222\000\000\000\000\b\178\0142\b\210\005n\007A\007A\001\210\001\214\001\218\001\222\001\226\012m\012m\b\246\001\230\012m\000\000\000\000\000\000\001\234\000\000\t\002\t\026\t:\tN\005z\000\000\005~\000\000\001\189\001\238\000\000\001\006\007A\000\000\000\000\b\214\001\242\b\218\000\000\000\000\000\000\000\000\r*\007A\000\000\000\000\001\"\002.\006\"\001\189\000\000\005\130\b\234\000\000\0022\000\238\023j\004j\t\194\020\198\002:\007\146\002>\002B\000\006\000\246\b\245\000\000\000\000\001\002\001\006\001\189\001\n\001\022\001\"\n6\003\134\000\000\000\000\001&\001b\000\000\001\189\b~\000\000\t~\r.\001\189\001\189\000\238\001*\021\246\012m\022\002\003\210\001n\t\130\t\134\001z\001~\001\189\001\189\r:\0012\014n\003z\b\014\t\138\b\245\t\166\t\170\000\000\003\182\003\194\003\206\003\218\003\226\t\174\007:\000\000\t\022\001\206\000\000\003F\000\000\000\000\003\214\000\238\000\000\001\189\b\154\b\158\b\170\b\222\b\245\005~\b\178\000\000\b\210\005n\001\189\000\000\001\210\001\214\001\218\001\222\001\226\014z\000\000\b\246\001\230\000\000\000\000\000\000\000\000\001\234\000\000\t\002\t\026\t:\tN\005z\024v\005~\0142\001\006\001\238\000\000\000\000\001\"\001\162\b\245\b\214\001\242\b\218\004\246\000\000\000\000\b\245\000\000\000\000\000\000\001\166\000\238\002.\006^\000\000\000\000\005\130\b\234\001*\0022\000\000\023j\004j\t\194\002M\002:\000\000\002>\002B\002M\000\000\003\146\002M\000\000\000\000\002\154\002M\r\166\002M\000\000\000\000\002M\007f\002j\002M\002M\002M\000\000\002M\002M\002M\003F\005i\r:\000\000\000\000\002M\002M\002M\002M\002M\000\000\002M\000\000\0062\000\000\005i\005\222\002M\002M\002M\002M\002M\000\000\006F\tz\023\222\002M\006N\002M\000\000\000\000\002M\002M\007r\000\000\005~\023v\002M\002M\002M\023\134\023\150\023\162\000\000\r*\000\000\005i\000\000\001\"\000\000\002M\002M\002M\002M\002M\002M\002M\002M\002M\000\000\000\000\002M\004\185\002M\002M\002M\000\000\000\000\000\000\000\000\000\000\000\000\002M\000\000\002M\002M\002M\000\000\002M\002M\002M\002M\005i\004\185\000\000\000\000\005i\002M\r.\002M\002M\000\000\nF\002M\002M\002M\002M\002M\000\000\000\000\002M\002M\002M\001\029\r:\004\185\tq\002M\002M\002M\002M\tq\000\000\000\000\tq\000\000\004\185\003B\tq\000\000\tq\004\185\012\018\n\214\001\029\000\000\tq\n\250\tq\000\000\tq\tq\tq\000\000\004\185\004\185\000\000\005~\011\014\011&\011.\011\022\0116\000\000\tq\nZ\001\029\000\000\000\000\016*\tq\tq\011>\011F\tq\006j\n^\001\029\007\146\tq\000\000\tq\001\029\004\185\011N\tq\014F\000\000\000\000\000\000\tq\tq\000\238\000\000\004\185\000\000\001\029\r*\000\000\n~\t\162\001\"\000\000\tq\tq\n\222\011\030\011V\011^\011n\tq\tq\000\000\000\000\tq\018\170\tq\tq\011v\000\238\000\000\023\170\000\000\b\014\001\029\tq\000\000\tq\tq\011~\000\000\tq\tq\tq\tq\001\029\003R\000\000\tJ\n\138\tq\r.\tq\tq\000\238\011\158\tq\011\166\011f\tq\tq\000\000\000\000\tq\011\134\tq\024\018\r:\019\026\002\129\tq\tq\011\142\011\150\002\129\000\000\000\000\002\129\000\000\012\182\000\000\002\129\0062\002\129\012\190\005\222\002\129\000\000\000\000\002\129\002\129\002\129\006F\002\129\002\129\002\129\006N\019\214\019\230\012\"\005~\002\129\002\129\002\129\002\129\002\129\000\000\002\129\000\000\000\000\000\000\br\000\000\002\129\002\129\002\129\002\129\002\129\t\210\n*\b1\007\146\002\129\000\000\002\129\000\000\004\229\002\129\002\129\026\242\000\000\000\000\000\000\002\129\002\129\002\129\000\000\020\230\000\000\000\000\bf\t\218\000\000\025\218\n2\000\000\002\129\002\129\n\222\002\129\002\129\002\129\002\129\002\129\002\129\000\238\000\000\002\129\000\000\002\129\002\129\002\129\000\238\000\000\006\130\000\000\b\014\tY\002\129\000\000\002\129\002\129\002\129\000\000\002\129\002\129\002\129\002\129\000\000\000\000\000\000\000\000\000\000\002\129\000\000\002\129\002\129\000\238\002\129\002\129\002\129\002\129\002\129\002\129\000\000\000\000\002\129\002\129\002\129\t^\000\000\028\223\002i\002\129\002\129\002\129\002\129\002i\007\146\000\238\002i\007\146\bv\000\000\002i\0062\002i\000\000\005\222\002i\000\000\000\000\002i\002i\002i\006F\002i\002i\002i\006N\026\022\000\000\000\000\026.\002i\002i\002i\002i\002i\000\000\002i\000\000\000\000\000\000\000\000\000\000\002i\002i\002i\002i\002i\000\000\000\000\b\014\000\000\002i\b\014\002i\000\000\000\000\002i\002i\0062\000\000\000\000\005\222\002i\002i\002i\000\000\tY\000\000\006F\025\206\000\238\000\000\006N\000\238\000\000\002i\002i\n\222\002i\002i\002i\002i\002i\002i\000\000\000\000\002i\016:\002i\002i\002i\000\238\012i\012i\000\000\000\000\012i\002i\bf\002i\002i\002i\000\000\002i\002i\002i\002i\000\000\003R\000\000\000\000\000\000\002i\000\238\002i\002i\000\000\002i\002i\002i\002i\002i\002i\000\000\000\000\002i\002i\002i\011\206\000\000\016f\002u\002i\002i\002i\002i\002u\000\238\001\162\002u\007\146\012\182\001\"\002u\011\214\002u\012\190\011\222\n\214\000\000\000\000\002u\002u\002u\011\230\002u\002u\002u\011\238\000\000\016\146\000\000\027b\002u\002u\002u\011\022\002u\000\000\002u\025\210\000\000\000\000\000\000\012i\002u\002u\002u\002u\002u\000\000\001\006\028\018\002j\002u\b\014\002u\000\000\004\221\002u\002u\n\006\000\000\000\000\000\000\002u\002u\002u\r:\016\246\000\000\000\000\000\000\000\000\000\000\000\000\000\238\000\000\002u\002u\n\222\011\030\002u\002u\002u\002u\002u\000\000\000\000\002u\000\000\002u\002u\002u\000\238\022\142\003\134\000\000\000\000\003\165\002u\005~\002u\002u\002u\000\000\002u\002u\002u\002u\003\165\022\162\000\000\022\182\000\000\002u\000\000\002u\002u\007\146\002u\002u\002u\002u\002u\002u\000\000\000\000\002u\002u\002u\007\237\000\000\003\165\002\133\002u\002u\002u\002u\002\133\000\000\027z\002\133\000\000\000\000\000\000\002\133\007\237\002\133\000\000\005\222\002\133\000\000\000\000\002\133\002\133\002\133\007\237\002\133\002\133\002\133\007\237\000\000\000\000\b\014\000\000\002\133\002\133\002\133\002\133\002\133\000\000\002\133\003\165\000\000\000\000\000\000\000\000\002\133\002\133\002\133\002\133\002\133\000\000\000\000\000\238\000\000\002\133\000\000\002\133\000\000\000\000\002\133\002\133\b\198\000\000\000\000\000\000\002\133\002\133\002\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\133\002\133\n\222\002\133\002\133\002\133\002\133\002\133\002\133\000\000\000\000\002\133\000\000\002\133\002\133\002\133\b\005\000\000\000\000\000\000\000\000\000\000\002\133\000\000\002\133\002\133\002\133\000\000\002\133\002\133\002\133\002\133\000\000\000\000\000\000\000\000\000\000\002\133\000\000\002\133\002\133\000\000\002\133\002\133\002\133\002\133\002\133\002\133\000\000\000\000\002\133\002\133\002\133\b\005\000\000\000\000\002e\002\133\002\133\002\133\002\133\002e\000\000\000\000\002e\000\000\000\000\000\000\002e\b\005\002e\000\000\005\222\002e\000\000\000\000\002e\002e\002e\b\005\002e\002e\002e\b\005\000\000\000\000\000\000\000\000\002e\002e\002e\002e\002e\000\000\002e\000\000\000\000\000\000\000\000\000\000\002e\002e\002e\002e\002e\000\000\000\000\000\000\000\000\002e\000\000\002e\000\000\000\000\002e\002e\000\000\000\000\000\000\000\000\002e\002e\002e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002e\002e\n\222\002e\002e\002e\002e\002e\002e\000\000\000\000\002e\000\000\002e\002e\002e\000\238\000\000\000\000\000\000\000\000\000\000\002e\000\000\002e\002e\002e\000\000\002e\002e\002e\002e\000\000\000\000\000\000\000\000\000\000\002e\000\000\002e\002e\000\000\002e\002e\002e\002e\002e\002e\000\000\000\000\002e\002e\002e\b\025\000\000\000\000\002q\002e\002e\002e\002e\002q\000\000\000\000\002q\000\000\000\000\000\000\002q\0062\002q\000\000\005\222\n\214\000\000\000\000\002q\002q\002q\b\025\002q\002q\002q\b\025\000\000\000\000\000\000\000\000\002q\002q\002q\011\022\002q\000\000\002q\000\000\000\000\000\000\000\000\000\000\002q\002q\002q\002q\002q\000\000\000\000\000\000\000\000\002q\000\000\002q\000\000\000\000\002q\002q\000\000\000\000\000\000\000\000\002q\002q\002q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002q\002q\n\222\011\030\002q\002q\002q\002q\002q\000\000\000\000\002q\000\000\002q\002q\002q\b\021\000\000\000\000\000\000\000\000\000\000\002q\000\000\002q\002q\002q\000\000\002q\002q\002q\002q\000\000\000\000\000\000\000\000\000\000\002q\000\000\002q\002q\000\000\002q\002q\002q\002q\002q\002q\000\000\000\000\002q\002q\002q\b\021\000\000\000\000\002m\002q\002q\002q\002q\002m\000\000\000\000\002m\000\000\000\000\000\000\002m\012\002\002m\000\000\b\021\n\214\000\000\000\000\002m\002m\002m\b\021\002m\002m\002m\b\021\000\000\000\000\000\000\000\000\002m\002m\002m\011\022\002m\000\000\002m\000\000\000\000\000\000\000\000\000\000\002m\002m\002m\002m\002m\000\000\000\000\000\000\000\000\002m\000\000\002m\000\000\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\000\000\000\000\000\000\000\000\002m\002m\n\222\011\030\002m\002m\002m\002m\002m\000\000\000\000\002m\000\000\002m\002m\002m\000\238\000\000\000\000\000\000\000\000\000\000\002m\000\000\002m\002m\002m\000\000\002m\002m\002m\002m\000\000\000\000\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\002m\007\233\000\000\000\000\002\149\002m\002m\002m\002m\002\149\000\000\000\000\002\149\000\000\000\000\000\000\002\149\007\233\002\149\000\000\005\222\n\214\000\000\000\000\002\149\002\149\002\149\007\233\002\149\002\149\002\149\007\233\000\000\000\000\000\000\000\000\011\014\011&\011.\011\022\0116\000\000\002\149\000\000\000\000\000\000\000\000\000\000\002\149\002\149\011>\011F\002\149\000\000\000\000\000\000\000\000\002\149\000\000\002\149\000\000\000\000\011N\002\149\000\000\000\000\000\000\000\000\002\149\002\149\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\149\002\149\n\222\011\030\011V\011^\011n\002\149\002\149\000\000\000\000\002\149\000\000\002\149\002\149\011v\000\238\000\000\000\000\000\000\000\000\000\000\002\149\000\000\002\149\002\149\011~\000\000\002\149\002\149\002\149\002\149\000\000\000\000\000\000\000\000\000\000\002\149\000\000\002\149\002\149\000\000\002\149\002\149\002\149\011f\002\149\002\149\000\000\000\000\002\149\011\134\002\149\023J\000\000\000\000\002}\002\149\002\149\011\142\011\150\002}\000\000\000\000\002}\000\000\000\000\000\000\002}\011\214\002}\000\000\011\222\n\214\000\000\000\000\002}\002}\002}\011\230\002}\002}\002}\011\238\000\000\000\000\000\000\000\000\002}\002}\002}\011\022\002}\000\000\002}\000\000\000\000\000\000\000\000\000\000\002}\002}\002}\002}\002}\000\000\000\000\000\000\000\000\002}\000\000\002}\000\000\000\000\002}\002}\000\000\000\000\000\000\000\000\002}\002}\002}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002}\002}\n\222\011\030\002}\002}\002}\002}\002}\000\000\000\000\002}\000\000\002}\002}\002}\000\000\000\000\000\000\000\000\000\000\000\000\002}\000\000\002}\002}\002}\000\000\002}\002}\002}\002}\000\000\000\000\000\000\000\000\000\000\002}\000\000\002}\002}\000\000\002}\002}\002}\002}\002}\002}\000\000\000\000\002}\002}\002}\000\000\000\000\000\000\002y\002}\002}\002}\002}\002y\000\000\000\000\002y\000\000\000\000\000\000\002y\000\000\002y\000\000\000\000\n\214\000\000\000\000\002y\002y\002y\000\000\002y\002y\002y\bE\000\000\000\000\000\000\bE\002y\002y\002y\011\022\002y\000\000\002y\000\000\000\000\000\000\000\000\000\000\002y\002y\002y\002y\002y\000\000\000\000\000\000\000\000\002y\000\000\002y\000\000\000\000\002y\002y\000\000\000\000\000\000\000\000\002y\002y\002y\000\000\000\000\000\000\000\000\000\000\bE\000\000\000\000\000\000\000\000\002y\002y\n\222\011\030\002y\002y\002y\002y\002y\000\000\000\000\002y\000\000\002y\002y\002y\000\000\000\000\000\000\000\000\000\000\bE\002y\000\000\002y\002y\002y\000\000\002y\002y\002y\002y\000\000\000\000\000\000\000\000\000\000\002y\000\000\002y\002y\000\000\002y\002y\002y\002y\002y\002y\000\000\000\000\002y\002y\002y\000\000\000\000\000\000\002\141\002y\002y\002y\002y\002\141\004\246\000\000\002\141\000\000\000\000\000\000\002\141\000\000\002\141\000\000\000\000\n\214\000\000\000\000\002\141\002\141\002\141\000\000\002\141\002\141\002\141\bA\000\000\000\000\000\000\bA\011\014\011&\011.\011\022\002\141\000\000\002\141\000\000\000\000\000\000\000\000\000\000\002\141\002\141\011>\011F\002\141\000\000\000\000\000\000\000\000\002\141\000\000\002\141\000\000\000\000\002\141\002\141\000\000\000\000\000\000\000\000\002\141\002\141\000\238\000\000\000\000\000\000\000\000\000\000\bA\000\000\000\000\000\000\000\000\002\141\002\141\n\222\011\030\011V\011^\002\141\002\141\002\141\000\000\000\000\002\141\000\000\002\141\002\141\002\141\000\000\000\000\000\000\000\000\000\000\bA\002\141\000\000\002\141\002\141\002\141\000\000\002\141\002\141\002\141\002\141\000\000\000\000\000\000\000\000\000\000\002\141\000\000\002\141\002\141\000\000\002\141\002\141\002\141\011f\002\141\002\141\000\000\000\000\002\141\002\141\002\141\000\000\000\000\000\000\002a\002\141\002\141\002\141\002\141\002a\004\246\000\000\002a\000\000\000\000\000\000\002a\000\000\002a\000\000\000\000\n\214\000\000\000\000\002a\002a\002a\000\000\002a\002a\002a\000\000\000\000\000\000\000\000\000\000\002a\002a\002a\011\022\002a\000\000\002a\000\000\000\000\000\000\000\000\000\000\002a\002a\002a\002a\002a\000\000\000\000\000\000\000\000\002a\000\000\002a\000\000\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\000\000\000\000\000\000\000\000\002a\002a\n\222\011\030\002a\002a\002a\002a\002a\000\000\000\000\002a\000\000\002a\002a\002a\000\000\000\000\000\000\000\000\000\000\000\000\002a\000\000\002a\002a\002a\000\000\002a\002a\002a\002a\000\000\000\000\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\002a\000\000\000\000\000\000\002]\002a\002a\002a\002a\002]\000\000\000\000\002]\000\000\000\000\000\000\002]\000\000\002]\000\000\000\000\n\214\000\000\000\000\002]\002]\002]\000\000\002]\002]\002]\000\000\000\000\000\000\000\000\000\000\011\014\011&\011.\011\022\002]\000\000\002]\000\000\000\000\000\000\000\000\000\000\002]\002]\011>\011F\002]\000\000\000\000\000\000\000\000\002]\000\000\002]\000\000\000\000\002]\002]\000\000\000\000\000\000\000\000\002]\002]\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002]\002]\n\222\011\030\011V\011^\002]\002]\002]\000\000\000\000\002]\000\000\002]\002]\002]\000\000\000\000\000\000\000\000\000\000\000\000\002]\000\000\002]\002]\002]\000\000\002]\002]\002]\002]\000\000\000\000\000\000\000\000\000\000\002]\000\000\002]\002]\000\000\002]\002]\002]\011f\002]\002]\000\000\000\000\002]\002]\002]\000\000\000\000\000\000\002\185\002]\002]\002]\002]\002\185\000\000\000\000\002\185\000\000\000\000\000\000\002\185\000\000\002\185\000\000\000\000\n\214\000\000\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\014\011&\011.\011\022\002\185\000\000\002\185\000\000\000\000\000\000\000\000\000\000\002\185\002\185\011>\011F\002\185\000\000\000\000\000\000\000\000\002\185\000\000\002\185\000\000\000\000\002\185\002\185\000\000\000\000\000\000\000\000\002\185\002\185\002\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\185\002\185\n\222\011\030\011V\002\185\002\185\002\185\002\185\000\000\000\000\002\185\000\000\002\185\002\185\002\185\000\000\000\000\000\000\000\000\000\000\000\000\002\185\000\000\002\185\002\185\002\185\000\000\002\185\002\185\002\185\002\185\000\000\000\000\000\000\000\000\000\000\002\185\000\000\002\185\002\185\000\000\002\185\002\185\002\185\011f\002\185\002\185\000\000\000\000\002\185\002\185\002\185\000\000\000\000\000\000\002Y\002\185\002\185\002\185\002\185\002Y\000\000\000\000\002Y\000\000\000\000\000\000\002Y\000\000\002Y\000\000\000\000\n\214\000\000\000\000\002Y\002Y\002Y\000\000\002Y\002Y\002Y\000\000\000\000\000\000\000\000\000\000\011\014\011&\011.\011\022\002Y\000\000\002Y\000\000\000\000\000\000\000\000\000\000\002Y\002Y\011>\011F\002Y\000\000\000\000\000\000\000\000\002Y\000\000\002Y\000\000\000\000\002Y\002Y\000\000\000\000\000\000\000\000\002Y\002Y\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002Y\002Y\n\222\011\030\011V\011^\002Y\002Y\002Y\000\000\000\000\002Y\000\000\002Y\002Y\002Y\000\000\000\000\000\000\000\000\000\000\000\000\002Y\000\000\002Y\002Y\002Y\000\000\002Y\002Y\002Y\002Y\000\000\000\000\000\000\000\000\000\000\002Y\000\000\002Y\002Y\000\000\002Y\002Y\002Y\011f\002Y\002Y\000\000\000\000\002Y\002Y\002Y\000\000\000\000\000\000\002\145\002Y\002Y\002Y\002Y\002\145\000\000\000\000\002\145\000\000\000\000\000\000\002\145\000\000\002\145\000\000\000\000\n\214\000\000\000\000\002\145\002\145\002\145\000\000\002\145\002\145\002\145\000\000\000\000\000\000\000\000\000\000\011\014\011&\011.\011\022\002\145\000\000\002\145\000\000\000\000\000\000\000\000\000\000\002\145\002\145\011>\011F\002\145\000\000\000\000\000\000\000\000\002\145\000\000\002\145\000\000\000\000\002\145\002\145\000\000\000\000\000\000\000\000\002\145\002\145\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\002\145\n\222\011\030\011V\011^\002\145\002\145\002\145\000\000\000\000\002\145\000\000\002\145\002\145\002\145\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\145\002\145\002\145\000\000\002\145\002\145\002\145\002\145\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\145\002\145\000\000\002\145\002\145\002\145\011f\002\145\002\145\000\000\000\000\002\145\002\145\002\145\000\000\000\000\000\000\002\137\002\145\002\145\002\145\002\145\002\137\000\000\000\000\002\137\000\000\000\000\000\000\002\137\000\000\002\137\000\000\000\000\n\214\000\000\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\011\014\011&\011.\011\022\002\137\000\000\002\137\000\000\000\000\000\000\000\000\000\000\002\137\002\137\011>\011F\002\137\000\000\000\000\000\000\000\000\002\137\000\000\002\137\000\000\000\000\002\137\002\137\000\000\000\000\000\000\000\000\002\137\002\137\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\137\002\137\n\222\011\030\011V\011^\002\137\002\137\002\137\000\000\000\000\002\137\000\000\002\137\002\137\002\137\000\000\000\000\000\000\000\000\000\000\000\000\002\137\000\000\002\137\002\137\002\137\000\000\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\002\137\002\137\002\137\011f\002\137\002\137\000\000\000\000\002\137\002\137\002\137\000\000\000\000\000\000\002\153\002\137\002\137\002\137\002\137\002\153\000\000\000\000\002\153\000\000\000\000\000\000\002\153\000\000\002\153\000\000\000\000\n\214\000\000\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\011\014\011&\011.\011\022\0116\000\000\002\153\000\000\000\000\000\000\000\000\000\000\002\153\002\153\011>\011F\002\153\000\000\000\000\000\000\000\000\002\153\000\000\002\153\000\000\000\000\011N\002\153\000\000\000\000\000\000\000\000\002\153\002\153\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\153\002\153\n\222\011\030\011V\011^\011n\002\153\002\153\000\000\000\000\002\153\000\000\002\153\002\153\011v\000\000\000\000\000\000\000\000\000\000\000\000\002\153\000\000\002\153\002\153\011~\000\000\002\153\002\153\002\153\002\153\000\000\000\000\000\000\000\000\000\000\002\153\000\000\002\153\002\153\000\000\002\153\002\153\002\153\011f\002\153\002\153\000\000\000\000\002\153\011\134\002\153\000\000\000\000\000\000\002\157\002\153\002\153\011\142\011\150\002\157\000\000\000\000\002\157\000\000\000\000\000\000\002\157\000\000\002\157\000\000\000\000\n\214\000\000\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\011\014\011&\011.\011\022\002\157\000\000\002\157\000\000\000\000\000\000\000\000\000\000\002\157\002\157\011>\011F\002\157\000\000\000\000\000\000\000\000\002\157\000\000\002\157\000\000\000\000\011N\002\157\000\000\000\000\000\000\000\000\002\157\002\157\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\002\157\n\222\011\030\011V\011^\011n\002\157\002\157\000\000\000\000\002\157\000\000\002\157\002\157\011v\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\157\002\157\011~\000\000\002\157\002\157\002\157\002\157\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\157\002\157\000\000\002\157\002\157\002\157\011f\002\157\002\157\000\000\000\000\002\157\002\157\002\157\000\000\000\000\000\000\002\161\002\157\002\157\011\142\011\150\002\161\000\000\000\000\002\161\000\000\000\000\000\000\002\161\000\000\002\161\000\000\000\000\n\214\000\000\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\011\014\011&\011.\011\022\002\161\000\000\002\161\000\000\000\000\000\000\000\000\000\000\002\161\002\161\011>\011F\002\161\000\000\000\000\000\000\000\000\002\161\000\000\002\161\000\000\000\000\011N\002\161\000\000\000\000\000\000\000\000\002\161\002\161\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\161\002\161\n\222\011\030\011V\011^\011n\002\161\002\161\000\000\000\000\002\161\000\000\002\161\002\161\011v\000\000\000\000\000\000\000\000\000\000\000\000\002\161\000\000\002\161\002\161\011~\000\000\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\002\161\002\161\002\161\011f\002\161\002\161\000\000\000\000\002\161\002\161\002\161\000\000\000\000\000\000\t-\002\161\002\161\011\142\011\150\t-\000\000\000\000\t-\000\000\000\000\000\000\t-\000\000\t-\000\000\000\000\n\214\000\000\000\000\t-\t-\t-\000\000\t-\t-\t-\000\000\000\000\000\000\000\000\000\000\011\014\011&\011.\011\022\0116\000\000\t-\000\000\000\000\000\000\000\000\000\000\t-\t-\011>\011F\t-\000\000\000\000\000\000\000\000\t-\000\000\t-\000\000\000\000\011N\t-\000\000\000\000\000\000\000\000\t-\t-\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t-\t-\n\222\011\030\011V\011^\011n\t-\t-\000\000\000\000\t-\000\000\t-\t-\011v\000\000\000\000\000\000\000\000\000\000\000\000\t-\000\000\t-\t-\011~\000\000\t-\t-\t-\t-\000\000\000\000\000\000\000\000\000\000\t-\000\000\t-\t-\000\000\t-\t-\t-\011f\t-\t-\000\000\000\000\t-\011\134\t-\000\000\000\000\000\000\002\165\t-\t-\011\142\011\150\002\165\000\000\000\000\002\165\000\000\000\000\000\000\002\165\000\000\002\165\000\000\000\000\n\214\000\000\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\014\011&\011.\011\022\0116\000\000\002\165\000\000\000\000\000\000\000\000\000\000\002\165\002\165\011>\011F\002\165\000\000\000\000\000\000\000\000\002\165\000\000\002\165\000\000\000\000\011N\002\165\000\000\000\000\000\000\000\000\002\165\002\165\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\165\002\165\n\222\011\030\011V\011^\011n\002\165\002\165\000\000\000\000\002\165\000\000\002\165\002\165\011v\000\000\000\000\000\000\000\000\000\000\000\000\002\165\000\000\002\165\002\165\011~\000\000\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\011\158\002\165\011\166\011f\002\165\002\165\000\000\000\000\002\165\011\134\002\165\000\000\000\000\000\000\t)\002\165\002\165\011\142\011\150\t)\000\000\000\000\t)\000\000\000\000\000\000\t)\000\000\t)\000\000\000\000\n\214\000\000\000\000\t)\t)\t)\000\000\t)\t)\t)\000\000\000\000\000\000\000\000\000\000\011\014\011&\011.\011\022\0116\000\000\t)\000\000\000\000\000\000\000\000\000\000\t)\t)\011>\011F\t)\000\000\000\000\000\000\000\000\t)\000\000\t)\000\000\000\000\011N\t)\000\000\000\000\000\000\000\000\t)\t)\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t)\t)\n\222\011\030\011V\011^\011n\t)\t)\000\000\000\000\t)\000\000\t)\t)\011v\000\000\000\000\000\000\000\000\000\000\000\000\t)\000\000\t)\t)\011~\000\000\t)\t)\t)\t)\000\000\000\000\000\000\000\000\000\000\t)\000\000\t)\t)\000\000\t)\t)\t)\011f\t)\t)\000\000\000\000\t)\011\134\t)\000\000\000\000\000\000\002\209\t)\t)\011\142\011\150\002\209\000\000\000\000\002\209\000\000\000\000\000\000\002\209\000\000\002\209\000\000\000\000\n\214\000\000\000\000\002\209\002\209\002\209\000\000\002\209\002\209\002\209\000\000\000\000\000\000\000\000\000\000\011\014\011&\011.\011\022\0116\000\000\002\209\000\000\000\000\000\000\000\000\000\000\002\209\002\209\011>\011F\002\209\000\000\000\000\000\000\000\000\002\209\000\000\002\209\000\000\000\000\011N\002\209\000\000\000\000\000\000\000\000\002\209\002\209\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\209\002\209\n\222\011\030\011V\011^\011n\002\209\002\209\000\000\000\000\002\209\000\000\002\209\002\209\011v\000\000\000\000\000\000\000\000\000\000\000\000\002\209\000\000\002\209\002\209\011~\000\000\002\209\002\209\002\209\002\209\000\000\000\000\000\000\000\000\000\000\002\209\000\000\002\209\002\209\000\000\011\158\002\209\011\166\011f\002\209\002\209\000\000\000\000\002\209\011\134\002\209\000\000\000\000\000\000\002\225\002\209\002\209\011\142\011\150\002\225\000\000\000\000\002\225\000\000\000\000\000\000\002\225\000\000\002\225\000\000\000\000\n\214\000\000\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\014\011&\011.\011\022\0116\000\000\002\225\000\000\000\000\000\000\000\000\000\000\002\225\002\225\011>\011F\002\225\000\000\000\000\000\000\000\000\002\225\000\000\002\225\000\000\000\000\011N\002\225\000\000\000\000\000\000\000\000\002\225\002\225\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\225\002\225\n\222\011\030\011V\011^\011n\002\225\002\225\000\000\000\000\002\225\000\000\002\225\002\225\011v\000\000\000\000\000\000\000\000\000\000\000\000\002\225\000\000\002\225\002\225\011~\000\000\002\225\002\225\002\225\002\225\000\000\000\000\000\000\000\000\000\000\002\225\000\000\002\225\002\225\000\000\011\158\002\225\011\166\011f\002\225\002\225\000\000\000\000\002\225\011\134\002\225\000\000\000\000\000\000\002\217\002\225\002\225\011\142\011\150\002\217\000\000\000\000\002\217\000\000\000\000\000\000\002\217\000\000\002\217\000\000\000\000\n\214\000\000\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\014\011&\011.\011\022\0116\000\000\002\217\000\000\000\000\000\000\000\000\000\000\002\217\002\217\011>\011F\002\217\000\000\000\000\000\000\000\000\002\217\000\000\002\217\000\000\000\000\011N\002\217\000\000\000\000\000\000\000\000\002\217\002\217\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\217\002\217\n\222\011\030\011V\011^\011n\002\217\002\217\000\000\000\000\002\217\000\000\002\217\002\217\011v\000\000\000\000\000\000\000\000\000\000\000\000\002\217\000\000\002\217\002\217\011~\000\000\002\217\002\217\002\217\002\217\000\000\000\000\000\000\000\000\000\000\002\217\000\000\002\217\002\217\000\000\011\158\002\217\011\166\011f\002\217\002\217\000\000\000\000\002\217\011\134\002\217\000\000\000\000\000\000\002\197\002\217\002\217\011\142\011\150\002\197\000\000\000\000\002\197\000\000\000\000\000\000\002\197\000\000\002\197\000\000\000\000\n\214\000\000\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\014\011&\011.\011\022\0116\000\000\002\197\000\000\000\000\000\000\000\000\000\000\002\197\002\197\011>\011F\002\197\000\000\000\000\000\000\000\000\002\197\000\000\002\197\000\000\000\000\011N\002\197\000\000\000\000\000\000\000\000\002\197\002\197\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\197\002\197\n\222\011\030\011V\011^\011n\002\197\002\197\000\000\000\000\002\197\000\000\002\197\002\197\011v\000\000\000\000\000\000\000\000\000\000\000\000\002\197\000\000\002\197\002\197\011~\000\000\002\197\002\197\002\197\002\197\000\000\000\000\000\000\000\000\000\000\002\197\000\000\002\197\002\197\000\000\011\158\002\197\011\166\011f\002\197\002\197\000\000\000\000\002\197\011\134\002\197\000\000\000\000\000\000\002\205\002\197\002\197\011\142\011\150\002\205\000\000\000\000\002\205\000\000\000\000\000\000\002\205\000\000\002\205\000\000\000\000\n\214\000\000\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\014\011&\011.\011\022\0116\000\000\002\205\000\000\000\000\000\000\000\000\000\000\002\205\002\205\011>\011F\002\205\000\000\000\000\000\000\000\000\002\205\000\000\002\205\000\000\000\000\011N\002\205\000\000\000\000\000\000\000\000\002\205\002\205\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\205\002\205\n\222\011\030\011V\011^\011n\002\205\002\205\000\000\000\000\002\205\000\000\002\205\002\205\011v\000\000\000\000\000\000\000\000\000\000\000\000\002\205\000\000\002\205\002\205\011~\000\000\002\205\002\205\002\205\002\205\000\000\000\000\000\000\000\000\000\000\002\205\000\000\002\205\002\205\000\000\011\158\002\205\011\166\011f\002\205\002\205\000\000\000\000\002\205\011\134\002\205\000\000\000\000\000\000\002\201\002\205\002\205\011\142\011\150\002\201\000\000\000\000\002\201\000\000\000\000\000\000\002\201\000\000\002\201\000\000\000\000\n\214\000\000\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\014\011&\011.\011\022\0116\000\000\002\201\000\000\000\000\000\000\000\000\000\000\002\201\002\201\011>\011F\002\201\000\000\000\000\000\000\000\000\002\201\000\000\002\201\000\000\000\000\011N\002\201\000\000\000\000\000\000\000\000\002\201\002\201\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\201\002\201\n\222\011\030\011V\011^\011n\002\201\002\201\000\000\000\000\002\201\000\000\002\201\002\201\011v\000\000\000\000\000\000\000\000\000\000\000\000\002\201\000\000\002\201\002\201\011~\000\000\002\201\002\201\002\201\002\201\000\000\000\000\000\000\000\000\000\000\002\201\000\000\002\201\002\201\000\000\011\158\002\201\011\166\011f\002\201\002\201\000\000\000\000\002\201\011\134\002\201\000\000\000\000\000\000\002\213\002\201\002\201\011\142\011\150\002\213\000\000\000\000\002\213\000\000\000\000\000\000\002\213\000\000\002\213\000\000\000\000\n\214\000\000\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\014\011&\011.\011\022\0116\000\000\002\213\000\000\000\000\000\000\000\000\000\000\002\213\002\213\011>\011F\002\213\000\000\000\000\000\000\000\000\002\213\000\000\002\213\000\000\000\000\011N\002\213\000\000\000\000\000\000\000\000\002\213\002\213\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\213\002\213\n\222\011\030\011V\011^\011n\002\213\002\213\000\000\000\000\002\213\000\000\002\213\002\213\011v\000\000\000\000\000\000\000\000\000\000\000\000\002\213\000\000\002\213\002\213\011~\000\000\002\213\002\213\002\213\002\213\000\000\000\000\000\000\000\000\000\000\002\213\000\000\002\213\002\213\000\000\011\158\002\213\011\166\011f\002\213\002\213\000\000\000\000\002\213\011\134\002\213\000\000\000\000\000\000\002\229\002\213\002\213\011\142\011\150\002\229\000\000\000\000\002\229\000\000\000\000\000\000\002\229\000\000\002\229\000\000\000\000\n\214\000\000\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\014\011&\011.\011\022\0116\000\000\002\229\000\000\000\000\000\000\000\000\000\000\002\229\002\229\011>\011F\002\229\000\000\000\000\000\000\000\000\002\229\000\000\002\229\000\000\000\000\011N\002\229\000\000\000\000\000\000\000\000\002\229\002\229\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\229\002\229\n\222\011\030\011V\011^\011n\002\229\002\229\000\000\000\000\002\229\000\000\002\229\002\229\011v\000\000\000\000\000\000\000\000\000\000\000\000\002\229\000\000\002\229\002\229\011~\000\000\002\229\002\229\002\229\002\229\000\000\000\000\000\000\000\000\000\000\002\229\000\000\002\229\002\229\000\000\011\158\002\229\011\166\011f\002\229\002\229\000\000\000\000\002\229\011\134\002\229\000\000\000\000\000\000\002\221\002\229\002\229\011\142\011\150\002\221\000\000\000\000\002\221\000\000\000\000\000\000\002\221\000\000\002\221\000\000\000\000\n\214\000\000\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\014\011&\011.\011\022\0116\000\000\002\221\000\000\000\000\000\000\000\000\000\000\002\221\002\221\011>\011F\002\221\000\000\000\000\000\000\000\000\002\221\000\000\002\221\000\000\000\000\011N\002\221\000\000\000\000\000\000\000\000\002\221\002\221\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\221\002\221\n\222\011\030\011V\011^\011n\002\221\002\221\000\000\000\000\002\221\000\000\002\221\002\221\011v\000\000\000\000\000\000\000\000\000\000\000\000\002\221\000\000\002\221\002\221\011~\000\000\002\221\002\221\002\221\002\221\000\000\000\000\000\000\000\000\000\000\002\221\000\000\002\221\002\221\000\000\011\158\002\221\011\166\011f\002\221\002\221\000\000\000\000\002\221\011\134\002\221\000\000\000\000\000\000\002\193\002\221\002\221\011\142\011\150\002\193\000\000\000\000\002\193\000\000\000\000\000\000\002\193\000\000\002\193\000\000\000\000\n\214\000\000\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\014\011&\011.\011\022\0116\000\000\002\193\000\000\000\000\000\000\000\000\000\000\002\193\002\193\011>\011F\002\193\000\000\000\000\000\000\000\000\002\193\000\000\002\193\000\000\000\000\011N\002\193\000\000\000\000\000\000\000\000\002\193\002\193\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\193\002\193\n\222\011\030\011V\011^\011n\002\193\002\193\000\000\000\000\002\193\000\000\002\193\002\193\011v\000\000\000\000\000\000\000\000\000\000\000\000\002\193\000\000\002\193\002\193\011~\000\000\002\193\002\193\002\193\002\193\000\000\000\000\000\000\000\000\000\000\002\193\000\000\002\193\002\193\000\000\011\158\002\193\011\166\011f\002\193\002\193\000\000\000\000\002\193\011\134\002\193\000\000\000\000\000\000\002\029\002\193\002\193\011\142\011\150\002\029\000\000\000\000\002\029\000\000\000\000\000\000\002\029\000\000\002\029\000\000\000\000\002\029\000\000\000\000\002\029\002\029\002\029\000\000\002\029\002\029\002\029\000\000\000\000\000\000\000\000\000\000\002\029\002\029\002\029\002\029\002\029\000\000\002\029\000\000\000\000\000\000\000\000\000\000\002\029\002\029\002\029\002\029\002\029\000\000\000\000\000\000\000\000\002\029\000\000\002\029\000\000\000\000\002\029\002\029\000\000\000\000\000\000\000\000\002\029\002\029\002\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\029\002\029\002\029\002\029\002\029\002\029\002\029\002\029\002\029\000\000\000\000\002\029\000\000\002\029\002\029\002\029\000\000\000\000\000\000\000\000\000\000\000\000\002\029\000\000\002\029\002\029\002\029\000\000\002\029\002\029\002\029\002\029\000\000\000\000\000\000\000\000\000\000\002\029\000\000\002\029\002\029\000\000\002\029\002\029\002\029\002\029\002\029\002\029\000\000\000\000\002\029\002\029\024\138\000\000\000\000\000\000\0025\002\029\002\029\002\029\002\029\0025\000\000\000\000\0025\000\000\000\000\000\000\0025\000\000\0025\000\000\000\000\n\214\000\000\000\000\0025\0025\0025\000\000\0025\0025\0025\000\000\000\000\000\000\000\000\000\000\011\014\011&\011.\011\022\0116\000\000\0025\000\000\000\000\000\000\000\000\000\000\0025\0025\011>\011F\0025\000\000\000\000\000\000\000\000\0025\000\000\0025\000\000\000\000\011N\0025\000\000\000\000\000\000\000\000\0025\0025\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0025\0025\n\222\011\030\011V\011^\011n\0025\0025\000\000\000\000\0025\000\000\0025\0025\011v\000\000\000\000\000\000\000\000\000\000\000\000\0025\000\000\0025\0025\011~\000\000\0025\0025\024\162\0025\000\000\000\000\000\000\000\000\000\000\0025\000\000\0025\0025\000\000\011\158\0025\011\166\011f\0025\0025\000\000\000\000\0025\011\134\0025\000\000\000\000\000\000\0021\0025\0025\011\142\011\150\0021\000\000\000\000\0021\000\000\000\000\000\000\0021\000\000\0021\000\000\000\000\n\214\000\000\000\000\0021\0021\0021\000\000\0021\0021\0021\000\000\000\000\000\000\000\000\000\000\011\014\011&\011.\011\022\0116\000\000\0021\000\000\000\000\000\000\000\000\000\000\0021\0021\011>\011F\0021\000\000\000\000\000\000\000\000\0021\000\000\0021\000\000\000\000\011N\0021\000\000\000\000\000\000\000\000\0021\0021\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0021\0021\n\222\011\030\011V\011^\011n\0021\0021\000\000\000\000\0021\000\000\0021\0021\011v\000\000\000\000\000\000\000\000\000\000\000\000\0021\000\000\0021\0021\011~\000\000\0021\0021\0021\0021\000\000\000\000\000\000\000\000\000\000\0021\000\000\0021\0021\000\000\011\158\0021\011\166\011f\0021\0021\000\000\000\000\0021\011\134\0021\000\000\000\000\000\000\002\189\0021\0021\011\142\011\150\002\189\000\000\000\000\002\189\000\000\000\000\000\000\002\189\000\000\002\189\000\000\000\000\n\214\000\000\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\014\011&\011.\011\022\0116\000\000\002\189\000\000\000\000\000\000\000\000\000\000\002\189\002\189\011>\011F\002\189\000\000\000\000\000\000\000\000\002\189\000\000\002\189\000\000\000\000\011N\002\189\000\000\000\000\000\000\000\000\002\189\002\189\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\189\002\189\n\222\011\030\011V\011^\011n\002\189\002\189\000\000\000\000\002\189\000\000\002\189\002\189\011v\000\000\000\000\000\000\000\000\000\000\000\000\002\189\000\000\002\189\002\189\011~\000\000\002\189\002\189\002\189\002\189\000\000\000\000\000\000\000\000\000\000\002\189\000\000\002\189\002\189\000\000\011\158\002\189\011\166\011f\002\189\002\189\000\000\000\000\002\189\011\134\002\189\000\000\000\000\000\000\002)\002\189\002\189\011\142\011\150\002)\000\000\000\000\002)\000\000\000\000\000\000\002)\000\000\002)\000\000\000\000\002)\000\000\000\000\002)\002)\002)\000\000\002)\002)\002)\000\000\000\000\000\000\000\000\000\000\002)\002)\002)\002)\002)\000\000\002)\000\000\000\000\000\000\000\000\000\000\002)\002)\002)\002)\002)\000\000\000\000\000\000\000\000\002)\000\000\002)\000\000\000\000\002)\002)\000\000\000\000\000\000\000\000\002)\002)\002)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002)\002)\002)\002)\002)\002)\002)\002)\002)\000\000\000\000\002)\000\000\002)\002)\002)\000\000\000\000\000\000\000\000\000\000\000\000\002)\000\000\002)\002)\002)\000\000\002)\002)\002)\002)\000\000\000\000\000\000\000\000\000\000\002)\000\000\002)\002)\000\000\002)\002)\002)\002)\002)\002)\000\000\000\000\002)\002)\024\138\000\000\000\000\000\000\001\233\002)\002)\002)\002)\001\233\000\000\000\000\001\233\000\000\000\000\000\000\001\233\000\000\001\233\000\000\000\000\001\233\000\000\000\000\001\233\001\233\001\233\000\000\001\233\001\233\001\233\000\000\000\000\000\000\000\000\000\000\001\233\001\233\001\233\001\233\001\233\000\000\001\233\000\000\000\000\000\000\000\000\000\000\001\233\001\233\001\233\001\233\001\233\000\000\000\000\000\000\000\000\001\233\000\000\001\233\000\000\000\000\001\233\001\233\000\000\000\000\000\000\000\000\001\233\001\233\001\233\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\233\001\233\001\233\001\233\001\233\001\233\001\233\001\233\001\233\000\000\000\000\001\233\000\000\001\233\001\233\001\233\000\000\000\000\000\000\000\000\000\000\000\000\001\233\000\000\001\233\001\233\001\233\000\000\001\233\001\233\001\233\001\233\000\000\000\000\000\000\000\000\000\000\001\233\000\000\001\233\001\233\000\000\001\233\001\233\001\233\001\233\001\233\001\233\000\000\000\000\001\233\001\233\024\138\000\000\000\000\000\000\002-\001\233\001\233\001\233\001\233\002-\000\000\000\000\002-\000\000\000\000\000\000\002-\000\000\002-\000\000\000\000\002-\000\000\000\000\002-\002-\002-\000\000\002-\002-\002-\000\000\000\000\000\000\000\000\000\000\002-\002-\002-\002-\002-\000\000\002-\000\000\000\000\000\000\000\000\000\000\002-\002-\002-\002-\002-\000\000\000\000\000\000\000\000\002-\000\000\002-\000\000\000\000\002-\002-\000\000\000\000\000\000\000\000\002-\002-\002-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002-\002-\002-\002-\002-\002-\002-\002-\002-\000\000\000\000\002-\000\000\002-\002-\002-\000\000\000\000\000\000\000\000\000\000\000\000\002-\000\000\002-\002-\002-\000\000\002-\002-\002-\002-\000\000\000\000\000\000\000\000\000\000\002-\000\000\002-\002-\000\000\002-\002-\002-\002-\002-\002-\000\000\000\000\002-\002-\024\138\000\000\000\000\000\000\027\174\002-\002-\002-\002-\001\237\000\000\000\000\001\237\000\000\000\000\000\000\001\237\000\000\001\237\000\000\000\000\001\237\000\000\000\000\001\237\001\237\001\237\000\000\001\237\001\237\001\237\000\000\000\000\000\000\000\000\000\000\001\237\001\237\001\237\001\237\001\237\000\000\001\237\000\000\000\000\000\000\000\000\000\000\001\237\001\237\001\237\001\237\001\237\000\000\000\000\000\000\000\000\001\237\000\000\001\237\000\000\000\000\001\237\001\237\000\000\000\000\000\000\000\000\001\237\001\237\001\237\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\237\001\237\001\237\001\237\001\237\001\237\001\237\001\237\001\237\000\000\000\000\001\237\000\000\001\237\001\237\001\237\000\000\000\000\000\000\000\000\000\000\000\000\027\190\000\000\001\237\001\237\001\237\000\000\001\237\001\237\001\237\001\237\000\000\000\000\000\000\000\000\000\000\001\237\000\000\001\237\001\237\000\000\001\237\001\237\001\237\001\237\001\237\001\237\000\000\000\000\001\237\001\237\001\237\000\000\000\000\000\000\001\241\001\237\001\237\001\237\001\237\001\241\000\000\000\000\001\241\000\000\000\000\000\000\001\241\000\000\001\241\000\000\000\000\001\241\000\000\000\000\001\241\001\241\001\241\000\000\001\241\001\241\001\241\000\000\000\000\000\000\000\000\000\000\001\241\001\241\001\241\001\241\001\241\000\000\001\241\000\000\000\000\000\000\000\000\000\000\001\241\001\241\001\241\001\241\001\241\000\000\000\000\000\000\000\000\001\241\000\000\001\241\000\000\000\000\001\241\001\241\000\000\000\000\000\000\000\000\001\241\001\241\001\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\241\001\241\001\241\001\241\001\241\001\241\001\241\001\241\001\241\000\000\000\000\001\241\000\000\001\241\001\241\001\241\000\000\000\000\000\000\000\000\000\000\000\000\027\182\000\000\001\241\001\241\001\241\000\000\001\241\001\241\001\241\001\241\000\000\000\000\000\000\000\000\000\000\001\241\000\000\001\241\001\241\000\000\001\241\001\241\001\241\001\241\001\241\001\241\000\000\000\000\001\241\001\241\024\138\003r\002\170\001\006\000\000\001\241\001\241\001\241\001\241\000\006\000\246\002\174\000\000\001\174\001\002\001\006\002\182\001\n\001\022\001\"\000\000\000\000\000\000\001*\001&\000\000\000\000\000\000\003N\000\000\000\000\000\000\004\205\000\000\003R\001*\002\237\012\026\000\000\001.\002\237\003V\003Z\000\000\000\000\000\000\003^\003n\0012\000\000\003z\000\000\012*\000\000\003\174\003\178\003F\003\182\003\194\003\206\003\218\003\226\006\234\007:\000\n\000\000\000\000\012\182\003F\000\000\000\000\003\214\012\190\000\000\000\000\b\154\b\158\b\170\b\222\000\000\002\237\b\178\000\000\b\210\005n\000\000\000\000\000\000\000\000\007N\000\000\000\000\012\198\000\000\b\246\002\237\002\237\000\000\000\000\000\000\000\000\000\000\t\002\t\026\t:\tN\005z\000\000\005~\012\218\r\030\000\000\000\000\004\205\004\205\000\000\000\000\b\214\000\000\b\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\237\000\000\r\254\018\130\005\130\b\234\025\174\000\000\000\000\tb\004j\t\194\000\006\000\246\000\000\000\000\001\174\001\002\001\006\002\182\001\n\001\022\001\"\000\000\000\000\000\000\000\000\001&\000\000\000\000\000\000\004\237\000\000\tE\000\000\tE\tE\003R\001*\000\000\000\000\000\000\001.\000\000\003V\003Z\000\000\000\000\000\000\003^\000\000\0012\000\000\003z\000\000\012*\000\000\003\174\003\178\000\000\003\182\003\194\003\206\003\218\003\226\006\234\007:\012\217\000\000\000\000\012\182\003F\000\000\000\000\003\214\012\190\000\000\000\000\b\154\b\158\b\170\b\222\000\000\000\000\b\178\000\000\b\210\005n\012\217\000\000\000\000\000\000\000\000\000\000\000\000\012\198\000\000\b\246\000\000\028\254\000\000\000\000\000\000\000\000\000\000\t\002\t\026\t:\tN\005z\012\217\005~\012\218\r\030\000\000\000\000\029\031\024\170\000\000\000\000\b\214\012\217\b\218\b\241\000\000\000\000\012\217\012\217\000\238\000\000\000\000\000\000\000\000\000\000\000\000\018\130\005\130\b\234\tE\012\217\012\217\tb\004j\t\194\000\006\000\246\000\000\000\000\001\174\001\002\001\006\002\182\001\n\001\022\001\"\000\000\000\000\000\000\000\000\001&\000\000\000\000\000\000\029N\000\000\b\241\000\000\003\254\012\217\003R\001*\000\000\000\000\000\000\001.\000\000\003V\003Z\000\000\012\217\000\000\003^\000\000\0012\000\000\003z\000\000\012*\000\000\003\174\003\178\b\241\003\182\003\194\003\206\003\218\003\226\006\234\007:\000\000\000\000\000\000\012\182\003F\002Z\002^\003\214\012\190\000\000\000\000\b\154\b\158\b\170\b\222\000\000\000\000\b\178\000\000\b\210\005n\000\000\000\000\000\000\000\000\000\000\001*\002\134\012\198\b\241\b\246\000\000\028\254\004\246\000\000\000\000\b\241\000\000\t\002\t\026\t:\tN\005z\000\000\005~\012\218\r\030\000\000\000\000\004\245\002\130\003>\000\000\b\214\000\000\b\218\000\000\003:\000\000\003F\004\026\004&\000\000\000\000\000\000\000\000\0042\000\000\018\130\005\130\b\234\023z\000\000\000\000\tb\004j\t\194\000\181\001\002\001\006\000\181\000\000\000\000\001\"\003\201\t\234\000\000\0046\001&\000\000\000\000\026\134\000\181\000\000\000\181\003\201\000\181\000\000\000\181\001*\000\000\n\026\000\000\001.\000\000\000\000\000\000\000\000\000\000\n\"\000\181\026r\0012\000\000\003z\000\000\000\181\000\000\003\201\000\000\000\181\002\237\000\000\003\206\002N\000\181\000\000\000\181\000\000\000\000\000\000\000\181\003F\000\000\000\000\003\214\000\181\000\181\000\181\b\154\b\158\b\170\002\237\020V\000\000\b\178\000\000\b\210\005n\000\181\000\181\000\n\000\000\t\210\n*\000\000\000\181\000\000\003\201\000\000\000\181\000\000\000\000\000\000\002\237\000\000\000\000\002\237\000\000\000\000\005z\000\000\005~\000\181\000\181\002\237\t\218\000\181\000\181\n2\002\237\b\214\002\237\b\218\000\000\000\000\000\000\000\000\000\000\000\181\000\000\000\000\000\000\002\237\002\237\000\181\000\181\005\130\b\234\000\000\000\000\000\000\tb\004j\001\006\000\181\000\000\000\181\000\205\001\002\001\006\000\205\000\000\000\000\001\"\000\000\t\234\000\000\000\000\001&\000\000\000\000\002\237\000\205\001*\000\205\000\000\000\205\000\000\000\205\001*\000\000\n\026\002\237\001.\000\000\000\000\018\158\000\000\000\000\n\"\000\205\000\000\0012\000\000\003z\000\000\000\205\019\242\003\134\000\000\000\205\019\246\000\000\003\206\002N\000\205\003F\000\205\000\000\000\000\000\000\000\205\003F\020&\000\000\003\214\000\205\000\205\000\205\b\154\b\158\b\170\000\000\020V\000\000\b\178\000\000\b\210\005n\000\205\000\205\000\000\000\000\000\000\000\000\000\000\000\205\000\000\000\000\000\000\000\205\0206\000\000\000\000\000\000\003\197\000\000\000\000\000\000\000\000\005z\000\000\005~\000\205\000\205\000\000\003\197\000\205\000\205\000\000\000\000\b\214\000\000\b\218\000\000\000\000\000\000\000\000\000\000\000\205\000\000\000\000\000\000\000\000\000\000\000\205\000\205\005\130\b\234\003\197\000\000\000\000\tb\004j\000\000\000\205\000\014\000\205\000\018\000\022\000\026\000\030\000\000\000\"\000&\000\000\000*\000.\0002\000\000\0006\000:\000\000\000\000\000\000\000>\000\000\000\000\000\000\000B\000\000\000\000\000\000\000\000\t\210\n*\000F\000\000\000\000\003\197\000\000\000\000\000J\002\237\000N\000R\000V\000Z\000^\000b\000f\000\000\000\000\000\000\000j\002\237\000n\t\218\000r\000\000\n2\000v\000\000\002\237\002\237\002\237\000\000\000\000\000\000\000\000\000\000\000\n\000\000\002\237\000\000\000\000\000z\000\000\000\000\000\000\002\237\000\000\000\000\000~\000\130\002\237\000\000\002\237\002\237\000\000\000\134\000\138\000\142\000\n\000\000\000\000\002\237\000\000\000\000\000\146\000\150\000\154\002\237\000\158\000\000\000\000\000\162\000\166\000\170\002\237\000\000\000\000\000\174\000\178\000\182\000\000\000\000\000\000\002\237\000\000\000\186\000\000\000\190\000\194\002\237\004)\001B\001\006\004)\002\237\000\198\001\"\000\202\006\186\000\000\000\000\001&\000\000\000\206\000\210\004)\000\214\000\000\000\000\004)\000\000\004)\001*\000\000\006\218\000\000\002\237\000\000\000\000\001F\004\185\000\000\006\242\004)\000\000\000\000\000\000\000\000\000\000\004)\000\000\000\000\001R\000\000\000\000\000\000\007\030\002N\004)\000\000\004)\004\185\000\000\000\000\004)\003F\000\000\000\000\003\246\004)\004)\n\177\003\250\003b\004\002\000\000\007.\000\000\000\000\000\000\000\000\005n\000\000\004\185\000\000\000\000\000\000\000\000\000\000\004)\004)\000\000\000\000\005r\004\185\000\000\000\000\000\000\000\000\004\185\012\018\000\238\000\000\005z\000\000\005~\004)\004)\0076\000\000\004)\004)\000\000\004\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001B\001\006\005\254\n\177\t\246\001\"\n\177\025b\004)\005\130\001&\001b\000\000\n\177\000\000\004j\001f\n\177\000\000\004)\004\185\001*\000\000\000\000\000\000\001j\001n\001r\001v\001z\001~\004\185\000\000\000\000\000\000\000\000\000\000\000\000\001\130\004Y\001\194\006\030\000\000\002\237\002\237\001^\002N\000\000\001\202\000\000\000\000\000\000\001\206\000\000\003F\000\000\000\000\003\246\002\237\002\237\000\000\003\250\000\000\004\002\005b\002\237\000\000\002\237\002\237\000\000\005n\002\237\000\n\001\210\001\214\001\218\001\222\001\226\002\237\002\237\012\153\001\230\005r\000\238\002\237\000\000\001\234\000\n\002\237\002\237\000\000\000\000\005z\000\000\005~\000\000\005\190\001\238\000\000\000\000\000\000\000\000\012\153\002\237\001\242\002\194\000\000\000\000\002\198\000\000\000\000\000\000\002\237\000\000\000\000\002.\006\"\000\000\002\237\005\130\004Y\002\210\0022\000\000\0026\004j\000\000\000\000\002:\000\000\002>\002B\001B\001\006\007\"\000\000\0062\001\"\000\000\005\222\007\002\000\000\001&\001b\000\000\002\237\006F\000\000\001f\000\000\006N\000\000\000\000\001*\000\000\002\222\000\000\001j\001n\001r\001v\001z\001~\000\000\000\000\000\000\000\000\002\237\000\000\000\000\001\130\000\000\001\194\006\030\000\000\012\153\012\133\001^\002N\000\000\001\202\000\000\007B\000\000\001\206\000\000\003F\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005b\012\153\000\000\000\000\002\194\000\000\005n\002\198\002\226\001\210\001\214\001\218\001\222\001\226\002\206\000\000\000\000\001\230\005r\000\000\002\210\000\000\001\234\000\000\002\218\012\133\001\162\000\000\005z\000\000\005~\000\000\005\190\001\238\000\000\000\000\000\000\000\000\001\166\000\000\001\242\007j\000\000\000\000\000\000\000\000\001*\000\000\000\000\000\000\000\000\002.\006\"\000\000\002\222\005\130\000\000\000\000\0022\000\000\0026\004j\000\000\002\154\002:\000\000\002>\002B\002\237\002\237\007f\002j\000\000\002\237\002\237\002\237\002\237\002\237\002\237\003F\000\000\000\000\000\000\002\237\000\000\002\237\000\000\000\000\000\000\002\237\002\237\002\237\000\000\000\000\002\237\000\000\002\237\000\n\002\237\002\237\002\237\002\237\000\n\002\226\000\000\007>\000\000\002\237\000\000\002\237\000\000\025\n\007r\002\237\002\237\000\000\002\237\002\237\002\237\002\237\002\237\002\237\002\237\000\000\000\000\002\237\000\000\002\237\002\237\002\237\002\237\002\237\002\237\002\237\002\237\002\237\002\237\002\237\002\237\000\000\002\237\000\000\002\237\002\237\000\000\000\000\000\000\000\000\000\000\000\000\002\237\000\000\000\000\002\237\000\000\002\237\000\000\000\000\000\000\000\000\002\237\002\237\002\237\002\237\002\237\002\237\000\000\002\237\000\000\025&\000\000\000\000\000\000\002\237\000\000\000\000\002\237\006.\002\237\001B\001\006\t*\000\000\000\000\001\"\000\000\000\000\002\237\000\000\001&\001b\002\237\002\237\002\237\000\000\001f\000\000\002\237\002\237\002\237\001*\000\000\000\000\000\000\001j\001n\001r\001v\001z\001~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\130\000\000\001\194\006\030\000\238\012\153\012\133\001^\002N\000\000\001\202\000\000\007\241\000\000\001\206\000\000\003F\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005b\012\153\000\000\000\000\002\194\000\000\005n\002\198\000\000\001\210\001\214\001\218\001\222\001\226\014\014\000\000\000\000\001\230\005r\000\000\002\210\000\000\001\234\007\241\002\218\012\133\000\000\000\000\005z\000\000\005~\0062\005\190\001\238\005\222\006:\000\000\000\000\000\000\007\241\001\242\006F\007\241\t\182\000\000\006N\000\000\000\000\n\181\007\241\000\000\002.\006\"\007\241\002\222\005\130\000\000\000\000\0022\000\000\0026\004j\000\000\000\000\002:\012\205\002>\002B\001B\001\006\0246\000\000\000\000\001\"\000\000\000\000\000\000\000\000\001&\001b\000\000\000\000\000\000\000\000\001f\n\181\005\153\000\000\000\000\001*\005\153\000\000\000\000\001j\001n\001r\001v\001z\001~\000\000\000\000\n\181\000\000\002\226\n\181\011\186\001\130\000\000\001\194\006\030\000\000\n\181\000\000\001^\002N\n\181\001\202\027\130\000\000\000\000\001\206\000\000\003F\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005b\000\000\000\000\000\000\000\000\000\000\005n\000\000\000\000\001\210\001\214\001\218\001\222\001\226\000\000\000\000\000\000\001\230\005r\000\000\012\205\012\205\001\234\000\000\000\000\000\000\000\000\000\000\005z\000\238\005~\000\000\005\190\001\238\000\000\000\000\005\153\000\000\000\000\000\000\001\242\000\000\000\000\012\205\000\000\000\000\012\205\000\000\000\000\000\000\000\000\002.\006\"\005\153\000\000\005\130\005\153\000\000\0022\000\000\0026\004j\000\000\000\000\002:\000\000\002>\002B\000A\000A\000\000\000\000\003E\000A\000A\003E\000A\000A\000A\000\000\000\000\000\000\0062\000A\000\000\005\222\027\134\003E\000\000\006\241\000\000\003E\006F\003E\000A\000\000\006N\000\000\000A\000\000\000A\000A\000\000\000\000\000\000\003E\rB\000A\000\000\000A\000\000\003E\000\000\000A\000A\000\000\000A\000A\000A\000A\000A\000A\000A\000\000\000\000\000\000\003E\000A\000\000\000\000\000A\003E\003E\003E\000A\000A\000A\000A\000\000\000\000\000A\000\000\000A\000A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003E\000\000\000A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000A\000A\000A\000A\000A\000\000\000A\003E\003E\000\000\000\000\003E\003E\000=\000=\000A\000\000\000A\000=\000=\000\000\000=\000=\000=\000\000\000\000\000\000\000\000\000=\r\194\003E\000A\000A\000\000\006\237\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\000\000\000\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)\012)\000=\000\000\000=\012)\012)\000\000\012)\012)\012)\000\000\000\000\000\000\000\000\012)\000\000\000\000\000=\000=\000\000\006\253\000\000\000=\000=\000=\012)\000\000\000\000\000\000\012)\000\000\012)\012)\000\000\000\000\000\000\000\000\000\000\012)\000\000\012)\000\000\000\000\000\000\012)\012)\000\000\012)\012)\012)\012)\012)\012)\012)\000\000\000\000\000\000\000\000\012)\000\000\000\000\012)\000\000\000\000\000\000\012)\012)\012)\012)\000\000\000\000\012)\000\000\012)\012)\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\012)\012)\012)\012)\012)\000\000\012)\000\000\000\000\000\000\000\000\000\000\000\000\012%\012%\012)\000\000\012)\012%\012%\000\000\012%\012%\012%\000\000\000\000\000\000\000\000\012%\000\000\000\000\012)\012)\000\000\006\249\000\000\012)\012)\012)\012%\000\000\000\000\000\000\012%\000\000\012%\012%\000\000\012\205\000\000\000\000\000\000\012%\000\000\012%\000\000\000\000\000\000\012%\012%\000\000\012%\012%\012%\012%\012%\012%\012%\000\000\005\157\000\000\000\000\012%\005\157\000\000\012%\000\000\000\000\000\000\012%\012%\012%\012%\000\000\000\000\012%\000\000\012%\012%\000\000\000\000\000\000\000\000\000\000\003r\002\170\001\006\000\000\012%\000\000\000\000\000\000\000\000\000\000\002\174\000\000\012%\012%\012%\012%\012%\bj\012%\000\000\000\000\000\000\001*\000\000\000\000\000\000\000\000\012%\000\000\012%\000\006\000\246\000\000\000\000\000\000\001\002\001\006\000\000\001\n\001\022\001\"\012\205\012\205\012%\012%\001&\003n\000\000\012%\012%\012%\000\000\000\000\023\138\000\000\003F\001*\005\157\000\000\000\000\001.\000\000\003V\003Z\012\205\000\000\000\000\012\205\000\000\0012\000\000\003z\000\000\000\000\005\157\003\174\003\178\005\157\003\182\003\194\003\206\003\218\003\226\006\234\007:\000\000\000\000\000\000\007N\003F\000\000\000\000\003\214\000\000\000\000\000\000\b\154\b\158\b\170\b\222\000\000\000\000\b\178\000\000\b\210\005n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\246\000\000\000\000\005i\000\000\005i\005i\000\000\t\002\t\026\t:\tN\005z\000\000\005~\005i\000\000\000\000\005i\000\000\005i\000\000\005i\b\214\005i\b\218\000\000\000\000\000\000\000\000\005i\000\000\000\000\000\000\000\000\005i\005i\005i\005i\005\130\b\234\000\000\005i\005i\tb\004j\t\194\005i\000\000\000\000\005i\005i\005i\000\000\005i\005i\005i\005i\000\000\000\000\000\000\000\000\005i\005i\005i\000\000\000\000\000\000\005i\000\000\000\000\000\000\000\000\000\000\005i\005i\000\000\000\000\005i\000\000\000\000\000\000\005i\005i\000\000\005i\005i\000\000\000\000\005i\000\000\000\000\000\000\000\000\005i\005i\005i\000\000\000\000\005i\005i\005i\000\000\005i\005i\000\000\000\000\005i\005i\000\000\000\000\000\000\000\000\000\000\005i\000\000\000\000\000\000\005i\000\000\000\000\017z\005i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005i\005i\005i\000\000\005i\005i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005i\000\000\005i\005i\000\000\000\000\0032\005i\000\000\000\000\000\000\000\000\005i\000\000\000\000\000\000\005i\n\205\005i\005i\n\205\n\205\000\000\000\000\000\000\n\205\000\000\n\205\000\000\000\000\n\205\000\000\000\000\000\000\000\000\n\205\n\205\000\000\n\205\n\205\000\000\n\205\000\000\n\205\000\000\000\000\000\000\000\000\n\205\000\000\000\000\n\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\205\000\000\n\205\000\000\000\000\000\000\n\205\n\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\205\000\000\004\153\n\205\000\000\004\153\n\205\n\205\000\000\n\205\000\000\n\205\000\000\000\000\000\000\000\000\n\205\004\153\000\000\000\000\000\000\004\153\000\000\004\153\000\000\n\205\000\000\000\000\n\205\000\000\000\000\000\000\000\000\000\000\000\000\004\153\000\000\000\000\n\205\000\000\n\205\004\153\000\000\n\205\000\000\n\205\000\000\000\000\000\000\000\000\000\000\000\000\005\158\000\000\000\000\000\000\004\153\000\000\000\000\n\205\n\205\004\153\n\205\n\205\000\000\n\205\000\000\n\205\000\000\n\205\t1\n\205\000\000\n\205\000\000\t1\000\000\002^\t1\000\000\000\000\004\153\000\000\000\000\000\000\002Z\002^\t1\000\000\000\000\t1\t1\t1\000\000\t1\t1\t1\000\000\004\153\004\153\000\000\000\000\004\153\004\153\000\000\000\000\001*\002\134\t1\000\000\000\000\000\000\000\000\000\000\t1\t1\000\000\000\000\t1\000\000\000\000\004\153\0036\t1\000\000\t1\000\000\000\000\000\000\t1\002\130\0036\015\134\000\000\t1\t1\t1\003:\000\000\003F\004\026\004&\000\000\000\000\000\000\000\000\0042\t1\t1\000\000\000\000\000\000\000\000\001\174\t1\000\000\014\002\000\000\004\146\000\000\007\213\000\000\t1\000\000\000\000\000\000\000\000\0046\015\014\000\000\000\000\t1\t1\t1\003R\t1\t1\000\000\007\213\007\213\000\000\007\213\007\213\000\000\000\000\000\000\015\018\t1\000\000\t1\t1\000\000\015:\012a\t1\000\000\000\000\000\000\012a\t1\002^\012a\007\213\t1\000\000\t1\t1\012\182\000\000\000\000\004\178\000\000\012\190\012a\012a\012a\000\000\012a\012a\012a\000\000\000\000\000\000\007\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012a\015\206\000\000\000\000\000\000\000\000\012a\012a\000\000\000\000\012a\007\213\000\000\000\000\0036\012a\000\000\012a\012\218\015\226\000\000\012a\004\193\004\193\000\000\000\000\012a\012a\012a\007\213\000\000\007\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012a\012a\015\242\000\000\000\000\000\000\005\214\012a\000\000\007\213\007\213\004\146\000\000\007\225\007\213\012a\007\213\000\000\000\000\000\000\007\213\000\000\000\000\000\000\012a\012a\012a\000\000\012a\012a\000\000\007\225\007\225\000\000\007\225\007\225\000\000\000\000\000\000\000\000\012a\000\000\012a\012a\000\000\000\000\t5\012a\000\000\000\000\000\000\t5\012a\002^\t5\007\225\012a\000\000\012a\012a\000\000\000\000\000\000\t5\000\000\000\000\t5\t5\t5\000\000\t5\t5\t5\000\000\000\000\000\000\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t5\000\000\000\000\000\000\000\000\000\000\t5\t5\000\000\000\000\t5\007\225\000\000\000\000\0036\t5\000\000\t5\000\000\000\000\000\000\t5\000\000\000\000\000\000\000\000\t5\t5\t5\007\225\000\000\007\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t5\t5\000\000\000\000\000\000\000\000\007\225\t5\000\000\005\222\007\225\004\146\000\000\000\000\007\225\t5\007\225\000\000\000\000\000\000\007\225\000\000\000\000\000\000\t5\t5\t5\000\000\t5\t5\000\000\000\000\000\000\000\000\000a\000\000\000a\000a\000\000\000\000\t5\000\000\t5\t5\000\000\000\000\000a\t5\000\000\000a\000a\000\000\t5\000a\000a\000a\t5\b\221\t5\t5\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\000a\000a\000\000\000\000\000a\000\000\000\000\000\000\000a\000a\000\000\000a\000\000\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\000\000\000\000\000\000\000\000\000a\000a\000\000\000\000\000\000\000\000\000\000\000a\000a\000\000\000\000\000a\007\197\000\000\000\000\000a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000a\000a\000a\000\000\000a\000a\007\197\007\197\000\000\007\197\007\197\000\000\b\221\000\000\000\000\000\000\000a\000\000\000\000\000a\000\000\012e\000\000\000a\000\000\000\000\012e\000\000\000a\012e\007\197\000\000\000a\000\000\000a\000\000\000\000\000\000\004\130\000\000\000\000\012e\012e\012e\000\000\012e\012e\012e\000\000\000\000\000\000\007\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012e\000\000\000\000\000\000\000\000\000\000\012e\012e\000\000\000\000\012e\007\197\000\000\000\000\000\000\012e\000\000\012e\000\000\000\000\000\000\012e\000\000\000\000\000\000\000\000\012e\012e\012e\007\197\000\000\007\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012e\012e\000\000\000\000\000\000\000\000\007\197\012e\000\000\005\222\007\197\012e\000\000\000\000\007\197\012e\007\197\000\000\000\000\000\000\007\197\000\000\000\000\000\000\012e\012e\012e\000\000\012e\012e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012e\003)\012e\012e\000\000\000\000\003)\012e\000\000\003)\000\000\000\000\012e\000\000\000\000\000\000\012e\000\000\012e\012e\000\000\003)\003)\003)\000\000\003)\003)\003)\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)\004z\000\000\000\000\003)\000\000\000\000\000\000\000\000\003)\000\000\003)\000\000\000\000\000\000\003)\000\000\000\000\000\000\000\000\003)\003)\003)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003)\003)\000\000\000\000\000\000\000\000\000\000\003)\000\000\000\000\000\000\003)\000\000\000\000\000\000\003)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003)\003)\003)\000\000\003)\003)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003)\000\000\003)\003)\000\000\000\000\000\000\003)\000\000\000\000\000\000\000\000\003)\000\000\000\000\000\000\003)\n\217\003)\003)\001B\001\006\000\000\000\000\000\000\001\"\000\000\006\186\000\000\000\000\001&\000\000\000\000\000\000\000\000\n\217\n\217\000\000\n\217\n\217\000\000\001*\000\000\006\218\000\000\000\000\000\000\000\000\001F\000\000\000\000\006\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\217\000\000\001R\000\000\000\000\000\000\001^\002N\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003F\000\000\000\000\003\246\000\000\000\000\n\217\003\250\000\000\004\002\005b\007.\000\000\000\000\000\000\000\000\005n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\217\000\000\000\000\005r\000\000\000\000\000\000\000\000\n\213\000\000\000\000\001B\001\006\005z\000\000\005~\001\"\005\190\n\217\000\000\n\217\001&\000\000\000\000\000\000\000\000\n\213\n\213\000\000\n\213\n\213\000\000\001*\000\000\n\217\000\000\000\000\n\217\n\217\001F\005\130\000\000\n\217\000\000\n\217\000\000\004j\000\000\n\217\000\000\n\213\000\000\001R\000\000\000\000\000\000\005\250\002N\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003F\000\000\000\000\003\246\000\000\000\000\n\213\003\250\000\000\004\002\005b\000\000\000\000\000\000\000\000\000\000\005n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\213\000\000\000\000\005r\000\000\007\229\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005z\000\000\005~\000\000\005\190\n\213\000\000\n\213\000\000\000\000\007\229\007\229\000\000\007\229\007\229\000\000\000\000\000\000\001\213\000\000\000\000\n\213\000\000\001\213\n\213\n\213\001\213\005\130\000\000\n\213\000\000\n\213\000\000\004j\007\229\n\213\000\000\000\000\001\213\001\213\001\213\000\000\001\213\001\213\001\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\238\001\213\000\000\000\000\000\000\000\000\000\000\001\213\001\213\000\000\000\000\001\213\000\000\000\000\000\000\000\000\001\213\000\000\001\213\007\229\000\000\000\000\001\213\000\000\000\000\000\000\000\000\001\213\001\213\001\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\229\000\000\007\229\001\213\001\213\000\000\000\000\000\000\000\000\000\000\001\213\000\000\000\000\000\000\001\213\000\000\007\229\000\000\001\213\005\222\007\229\000\000\000\000\000\000\007\229\000\000\007\229\001\213\001\213\001\213\007\229\001\213\001\213\000\000\000\000\000\000\000\000\001B\001\006\000\000\000\000\000\000\001\"\001\213\006\186\001\213\001\213\001&\000\000\000\000\001\213\000\000\000\000\000\000\000\000\001\213\000\000\000\000\001*\004\246\006\218\001\213\000\000\000\000\000\000\001F\000\000\000\000\006\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001R\000\000\000\000\000\000\007\030\002N\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003F\000\000\000\000\003\246\000\000\000\000\n\177\003\250\000\000\004\002\000\000\007.\000\000\005\225\000\000\000\000\005n\000\000\005\225\000\000\000\000\005\225\000\000\000\000\000\000\004e\000\000\000\000\005r\000\000\000\000\000\000\000\000\005\225\000\000\005\225\000\000\005\225\005z\005\225\005~\000\000\000\000\0076\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\225\000\000\000\000\000\000\000\000\000\000\005\225\005\225\n\177\000\000\000\000\n\177\n\177\005\225\005\130\005\225\000\000\005\225\n\177\000\000\004j\005\225\n\177\004e\000\000\000\000\005\225\005\225\005\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003u\000\000\000\000\000\000\000\000\003u\000\000\000\000\003u\000\000\005\225\005\225\000\000\000\000\005\225\000\000\000\000\000\000\003u\000\000\003u\000\000\003u\003u\003u\000\000\003u\005\225\005\225\005\225\000\000\005\225\005\225\000\000\000\000\000\000\000\000\000\000\003u\b\"\003u\000\000\003u\000\000\003u\003u\005\225\000\000\000\000\005\225\005\225\005q\000\000\003u\000\000\003u\003u\000\000\000\000\003u\000\000\005\225\003u\003u\003u\003u\003u\000\000\000\000\005u\000\000\003u\000\000\003u\000\000\000\000\000\000\003u\000\000\000\000\000\000\000\000\003u\003u\003u\000\000\000\000\000\000\003u\000\000\000\000\000\000\005\213\000\000\000\000\000\000\000\000\005\213\000\000\000\000\005\213\003u\003u\003u\000\000\003u\003u\000\000\000\000\000\000\000\000\000\000\005\213\005q\005\213\000\000\005\213\000\000\005\213\003u\003u\003u\000\000\003u\003u\000\000\000\000\000\000\000\000\000\000\005\213\005u\000\000\000\000\000\000\003u\005\213\005\213\003u\003u\000\000\000\000\003u\bf\000\000\005\213\000\000\005\213\000\000\000\000\000\000\005\213\000\000\003u\000\000\000\000\005\213\005\213\000\238\000\000\000\000\000\000\000\000\000\000\b\181\000\000\000\000\000\000\000\000\b\181\000\000\000\000\b\181\000\000\000\000\000\000\005\213\005\213\000\000\000\000\005\213\000\000\000\000\000\000\b\181\000\000\b\181\000\000\b\181\000\000\b\181\000\000\000\000\005\213\005\213\005\213\000\000\005\213\005\213\000\000\000\000\000\000\b\181\000\000\000\000\000\000\000\000\000\000\b\181\b\181\000\000\000\000\005\213\000\000\000\000\005\213\005\213\b\181\000\000\b\181\000\000\000\000\000\000\b\181\000\000\000\000\000\000\005\213\b\181\b\181\b\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\b\181\000\000\000\000\r\025\b\181\000\000\000\000\000\000\r\025\000\000\000\000\r\025\000\000\000\000\000\000\000\000\000\000\b\181\b\181\b\181\000\000\b\181\b\181\r\025\000\000\r\025\000\000\r\025\000\000\r\025\000\000\000\000\000\000\b\181\000\000\000\000\b\181\000\000\000\000\000\000\b\181\r\025\000\000\000\000\000\000\000\000\000\000\r\025\r\025\004\246\000\000\b\181\000\000\000\000\004>\000\000\r\025\000\000\r\025\000\000\000\000\000\000\r\025\000\000\000\000\000\000\000\000\r\025\r\025\r\025\000\000\000\000\000\000\000\000\000\000\r\029\000\000\000\000\000\000\000\000\r\029\000\000\000\000\r\029\000\000\000\000\000\000\r\025\000\000\000\000\000\000\r\025\000\000\000\000\000\000\r\029\000\000\r\029\000\000\r\029\000\000\r\029\000\000\000\000\r\025\r\025\r\025\000\000\r\025\r\025\000\000\000\000\000\000\r\029\000\000\000\000\004J\000\000\000\000\r\029\r\029\000\000\000\000\r\025\000\000\000\000\004>\r\025\r\029\000\000\r\029\000\000\000\000\000\000\r\029\000\000\000\000\000\000\r\025\r\029\r\029\r\029\000\000\000\000\000\000\000\000\001\197\000\000\002^\001\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\029\r\029\000\000\001\197\000\000\r\029\000\000\001\197\000\000\001\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\029\r\029\r\029\001\197\r\029\r\029\000\000\000\000\000\000\001\197\001\197\000\000\004J\000\000\000\000\000\000\000\000\0036\001\197\r\029\001\197\000\000\000\000\r\029\001\197\003Y\000\000\002^\003Y\001\197\001\197\001\197\000\000\000\000\r\029\000\000\000\000\t\025\000\000\000\000\003Y\000\000\000\000\000\000\003Y\000\000\003Y\000\000\000\000\001\197\001\197\000\000\000\000\004\146\000\000\000\000\000\000\000\000\003Y\000\000\000\000\000\000\000\000\000\000\003Y\001\193\001\197\001\197\000\000\000\000\001\197\001\197\0036\003Y\000\000\003Y\000\000\000\000\000\000\003Y\000\000\000\000\001\197\000\000\003Y\003Y\003Y\000\000\000\000\001\197\000\000\000\000\000\000\000\000\001\197\000\000\000\000\000\000\000\000\000\000\001\197\000\000\000\000\000\000\003Y\003Y\000\000\000\000\004\146\000\000\000\000\000\000\003U\000\000\002^\003U\000\000\000\000\000\000\000\000\000\000\003Y\003Y\000\000\t\025\003Y\003Y\003U\000\000\000\000\000\000\003U\000\000\003U\000\000\000\000\000\000\003Y\000\000\000\000\000\000\000\000\000\000\000\000\003Y\003U\000\000\000\000\000\000\003Y\000\000\003U\001\193\000\000\000\000\003Y\000\000\000\000\000\000\0036\003U\000\000\003U\000\000\000\000\000\000\003U\000\189\000\000\000\000\000\189\003U\003U\003U\000\000\000\000\000\000\000\000\000\000\000\000\007\217\000\000\000\189\000\000\000\189\000\000\000\189\000\000\000\189\000\000\000\000\003U\003U\000\000\000\000\004\146\000\000\000\000\007\217\007\217\000\189\007\217\007\217\000\000\000\000\000\000\000\189\000\000\003U\003U\000\189\000\000\003U\003U\000\000\000\189\000\000\000\189\000\000\000\000\000\000\000\189\007\217\000\000\003U\000\000\000\189\000\189\000\238\000\000\000\000\003U\000\000\000\000\000\000\000\000\003U\000\000\000\000\000\189\000\189\000\000\003U\000\238\000\000\000\000\000\189\000\000\000\000\000\000\000\189\000\000\000\000\000\000\000\000\001\001\000\000\000\000\001\001\000\000\000\000\000\000\007\217\000\189\000\189\000\000\000\000\000\189\000\189\000\000\001\001\000\000\001\001\000\000\001\001\000\000\001\001\000\000\000\000\000\189\007\217\000\000\007\217\000\000\000\000\000\189\000\189\000\000\001\001\000\000\000\000\000\000\000\000\000\000\001\001\000\189\0062\000\189\001\001\005\222\007\217\000\000\000\000\001\001\007\217\001\001\007\217\000\000\000\000\001\001\007\217\000\000\000\000\000\000\001\001\001\001\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002Z\002^\000\000\000\000\001\001\001\001\000\000\000\000\000\000\000\000\000\000\001\001\000\000\000\000\000\000\001\001\000\000\000\000\000\000\000\000\000\197\001*\002\134\000\197\000\000\000\000\000\000\000\000\001\001\001\001\000\000\000\000\001\001\001\001\000\000\000\197\000\000\000\197\000\000\000\197\000\000\000\197\000\000\000\000\001\001\002\130\003>\000\000\000\000\000\000\001\001\001\001\003:\000\197\003F\004\026\004&\000\000\000\000\000\197\001\001\0042\001\001\000\197\000\000\000\000\000\000\000\000\000\197\000\000\000\197\000\000\000\000\000\000\000\197\000\000\000\000\000\000\000\000\000\197\000\197\000\238\0046\000\000\000\000\000\000\0059\000\000\002Z\002^\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\000\000\026r\000\000\000\193\001*\002\134\000\193\000\000\000\000\000\000\000\000\000\197\000\197\000\000\000\000\000\197\000\197\000\000\000\193\000\000\000\193\000\000\000\193\000\000\000\193\000\000\000\000\000\197\002\130\003>\000\000\000\000\000\000\000\197\000\197\003:\000\193\003F\004\026\004&\000\000\000\000\000\193\000\197\0042\000\197\000\193\000\000\000\000\000\000\000\000\000\193\000\000\000\193\000\000\000\000\000\000\000\193\000\000\000\000\000\000\000\000\000\193\000\193\000\238\0046\000\000\000\000\000\000\005=\000\000\000\000\000\000\000\000\000\000\000\193\000\193\000\000\000\000\000\000\000\000\000\000\000\193\000\000\000\000\000\000\000\193\000\000\000\000\026r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\193\000\193\000\000\000\000\000\193\000\193\000\000\000\000\000\000\000\000\n\214\000\000\000\000\000\000\022&\tA\000\193\tA\tA\000\000\000\000\000\000\000\193\000\193\000\000\011\014\011&\011.\011\022\0116\000\000\000\000\000\193\000\000\000\193\000\000\000\000\000\000\000\000\011>\011F\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011N\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\222\011\030\011V\011^\011n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\190\011v\000\000\001b\000\000\000\000\000\000\000\000\001f\000\000\000\000\000\000\011~\000\000\000\000\000\000\000\000\001j\001n\001r\001\190\001z\001~\000\000\000\000\000\000\000\000\000\000\011\158\000\000\011\166\011f\001\194\001\198\000\000\000\000\tA\011\134\001\161\000\000\001\202\001\161\000\000\000\000\001\206\011\142\011\150\000\000\000\000\000\000\000\000\000\000\000\000\001\161\000\000\000\000\000\000\001\161\000\000\001\161\000\000\000\000\000\000\000\000\000\000\001\210\001\214\001\218\001\222\001\226\000\000\001\161\001\161\001\230\000\000\000\000\000\000\001\161\001\234\000\000\000\000\000\000\000\000\000\000\005q\000\000\001\161\000\000\001\161\001\238\000\000\000\000\001\161\000\000\000\000\000\000\001\242\001\161\001\161\001\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002.\028\022\000\000\000\000\000\000\000\000\000\000\0022\000\000\0026\001\161\000\000\000\000\002:\001\161\002>\002B\000\000\000\000\000\000\001\002\001\006\000\000\000\000\000\000\001\"\000\000\001\161\001\161\000\000\001&\001\161\001\161\000\000\000\000\000\000\006\173\000\000\000\000\005q\000\000\001*\000\000\001\161\000\000\001.\000\000\000\000\000\000\001\161\001\161\000\000\000\000\000\000\0012\001\161\003z\000\000\000\000\000\000\000\000\001\161\000\000\000\000\000\000\003\206\002N\000\000\000\000\000\000\000\000\r\021\000\000\000\000\003F\000\000\r\021\003\214\000\000\r\021\000\000\b\154\b\158\b\170\000\000\000\000\000\000\b\178\000\000\b\210\005n\r\021\000\000\r\021\000\000\r\021\000\000\r\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\021\000\000\000\000\005z\000\000\005~\r\021\r\021\000\000\000\000\000\000\000\000\000\000\000\000\b\214\r\021\b\218\r\021\000\000\000\000\000\000\r\021\000\000\000\000\000\000\000\000\r\021\r\021\r\021\000\000\005\130\b\234\000\000\000\000\r\017\tb\004j\000\000\000\000\r\017\000\000\000\000\r\017\000\000\000\000\000\000\r\021\000\000\000\000\000\000\r\021\000\000\000\000\000\000\r\017\000\000\r\017\000\000\r\017\000\000\r\017\000\000\000\000\r\021\r\021\r\021\000\000\r\021\r\021\000\000\000\000\000\000\r\017\000\000\000\000\000\000\000\000\000\000\r\017\r\017\000\000\000\000\r\021\000\000\000\000\000\000\r\021\r\017\000\000\r\017\000\000\000\000\000\000\r\017\000\000\004\246\000\000\r\021\r\017\r\017\r\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\185\000\000\000\000\000\000\000\000\b\185\000\000\000\000\b\185\000\000\r\017\000\000\000\000\000\000\r\017\000\000\000\000\000\000\000\000\000\000\b\185\000\000\b\185\000\000\b\185\000\000\b\185\r\017\r\017\r\017\000\000\r\017\r\017\000\000\000\000\000\000\000\000\004\185\b\185\000\000\004\185\000\000\000\000\007\190\b\185\b\185\r\017\000\000\000\000\000\000\r\017\000\000\004\185\b\185\000\000\b\185\004\185\000\000\004\185\b\185\000\000\r\017\000\000\000\000\b\185\b\185\000\238\000\000\000\000\000\000\004\185\001\193\000\000\002^\001\193\000\000\004\185\000\000\000\000\000\000\000\000\000\000\000\000\t\025\b\185\004\185\001\193\004\185\b\185\000\000\001\193\004\185\001\193\000\000\000\000\000\000\004\185\012\018\000\000\000\000\000\000\b\185\b\185\b\185\001\193\b\185\b\185\000\000\000\000\000\000\001\193\000\000\000\000\000\000\000\000\000\000\004\185\b\185\0036\001\193\b\185\001\193\000\000\000\000\b\185\001\193\000\000\000\000\000\000\000\000\001\193\001\193\001\193\004\185\004\185\b\185\000\000\004\185\004\185\000\000\000\000\000\000\000\000\000\000\000\000\b\"\000\000\000\000\000\000\000\000\001\193\001\193\000\000\000\000\004\146\004\185\004\185\000\000\004\185\000\000\000\000\014F\000\000\000\000\000\000\000\000\000\000\001\193\001\193\000\000\004\185\001\193\001\193\000\000\004\185\000\000\004\185\000\000\000\000\000\000\000\000\000\000\000\000\001\193\001\174\002Z\002^\014\002\004\185\000\000\001\193\000\000\000\000\000\000\004\185\001\193\000\000\000\000\000\000\015\014\000\000\001\193\000\000\004\193\000\000\003R\001*\002\134\002r\004\185\000\000\000\000\000\000\000\000\004\185\012\018\002~\015\018\000\000\000\000\000\000\000\000\000\000\015:\000\000\000\000\000\000\000\000\000\000\000\000\002\130\003.\000\000\000\000\004\185\000\000\000\000\003:\012\182\003F\004\026\004&\000\000\012\190\000\000\000\000\0042\000\000\001\002\001\006\000\000\004\185\004\185\001\"\000\000\004\185\004\185\000\000\001&\000\000\000\000\000\000\000\000\015\206\006\213\000\000\000\000\0046\000\000\001*\000\000\000\000\000\000\001.\004\185\000\000\000\000\000\000\000\000\000\000\012\218\015\226\0012\000\000\003z\004\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\206\002N\000\000\000\000\000\000\000\000\006\t\000\000\000\000\003F\015\242\006\t\003\214\000\000\006\t\000\000\b\154\b\158\b\170\000\000\000\000\000\000\b\178\000\000\b\210\005n\006\t\000\000\006\t\000\000\006\t\000\000\006\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\t\000\000\000\000\005z\000\000\005~\006\t\006\t\000\000\000\000\000\000\000\000\000\000\bf\b\214\006\t\b\218\006\t\000\000\000\000\000\000\006\t\000\000\000\000\000\000\001b\006\t\006\t\000\238\000\000\005\130\b\234\000\000\000\000\000\000\tb\004j\000\000\000\000\001j\001n\001r\001\190\001z\001~\000\000\006\t\000\000\000\000\000\000\006\t\000\000\000\000\000\000\001\194\001\198\000\000\000\000\000\000\000\000\000\000\000\000\001\202\006\t\006\t\006\t\001\206\006\t\006\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\006\t\000\000\000\000\000\000\006\t\001\210\001\214\001\218\001\222\001\226\000\000\000\000\000\000\001\230\000\000\006\t\000\000\000\000\001\234\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\238\001B\001\006\000\000\000\000\000\000\001\"\001\242\006\186\000\000\000\000\001&\000\000\000\000\000\000\000\000\000\000\000\000\002.\0282\000\000\000\000\001*\000\000\006\218\0022\000\000\0026\000\000\001F\000\000\002:\006\242\002>\002B\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001R\000\000\000\000\000\000\007\030\002N\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003F\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\000\000\007.\000\000\007\146\000\000\000\000\005n\000\000\006\005\000\000\000\000\006\005\000\000\000\000\000\000\000\000\000\000\000\000\005r\000\000\000\000\000\000\000\000\006\005\000\000\006\005\000\000\006\005\005z\006\005\005~\000\000\000\000\0076\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\005\000\000\000\000\000\000\000\000\000\000\006\005\b\014\000\000\t\246\000\000\000\000\t\254\000\000\005\130\006\005\000\000\006\005\000\000\000\000\004j\006\005\000\000\000\000\000\000\000\000\006\005\006\005\000\238\000\000\000\000\000\000\000\000\000\000\r!\000\000\000\000\000\000\000\000\r!\000\000\000\000\r!\000\000\000\000\000\000\006\005\000\000\000\000\000\000\006\005\000\000\000\000\000\000\r!\000\000\r!\000\000\r!\000\000\r!\000\000\000\000\006\005\006\005\006\005\000\000\006\005\006\005\000\000\000\000\000\000\r!\000\000\000\000\000\000\000\000\000\000\r!\r!\000\000\000\000\006\005\000\000\000\000\000\000\006\005\r!\000\000\r!\000\000\000\000\000\000\r!\000\000\000\000\000\000\006\005\r!\r!\000\238\000\000\000\000\000\000\000\000\000\000\r%\000\000\000\000\000\000\000\000\r%\000\000\000\000\r%\000\000\000\000\000\000\r!\000\000\000\000\000\000\r!\000\000\000\000\000\000\r%\000\000\r%\000\000\r%\000\000\r%\000\000\000\000\r!\r!\r!\000\000\r!\r!\000\000\000\000\000\000\r%\000\000\000\000\000\000\000\000\000\000\r%\b\014\000\000\000\000\r!\000\000\000\000\000\000\r!\r%\000\000\r%\000\000\000\000\000\000\r%\000\000\000\000\000\000\r!\r%\r%\000\238\000\000\000\000\000\000\000\000\000\000\007\146\000\000\000\000\000\000\000\000\006\029\000\000\000\000\006\029\000\000\000\000\000\000\r%\000\000\000\000\000\000\r%\000\000\000\000\000\000\006\029\000\000\006\029\000\000\006\029\000\000\006\029\000\000\000\000\r%\r%\r%\000\000\r%\r%\000\000\000\000\000\000\006\029\000\000\000\000\000\000\000\000\000\000\006\029\b\014\000\000\000\000\r%\000\000\000\000\000\000\r%\006\029\000\000\006\029\000\000\000\000\000\000\006\029\000\000\000\000\000\000\r%\006\029\006\029\000\238\000\000\000\000\000\000\000\000\000\000\006!\000\000\000\000\000\000\000\000\006!\000\000\000\000\006!\000\000\000\000\000\000\006\029\000\000\000\000\000\000\006\029\000\000\000\000\000\000\006!\000\000\006!\000\000\006!\000\000\006!\000\000\000\000\006\029\006\029\006\029\000\000\006\029\006\029\000\000\000\000\000\000\006!\000\000\000\000\000\000\000\000\000\000\006!\006!\000\000\000\000\006\029\000\000\000\000\000\000\006\029\006!\000\000\006!\000\000\000\000\000\000\006!\000\000\000\000\000\000\006\029\006!\006!\006!\000\000\000\000\000\000\000\000\000\000\006\025\000\000\000\000\000\000\000\000\006\025\000\000\000\000\006\025\000\000\000\000\000\000\006!\000\000\000\000\000\000\006!\000\000\000\000\000\000\006\025\000\000\006\025\000\000\006\025\000\000\006\025\000\000\000\000\006!\006!\006!\000\000\006!\006!\000\000\000\000\000\000\006\025\000\000\000\000\000\000\000\000\000\000\006\025\b\014\000\000\000\000\006!\000\000\000\000\000\000\006!\006\025\000\000\006\025\000\000\000\000\000\000\006\025\000\000\000\000\000\000\b6\006\025\006\025\000\238\000\000\000\000\000\000\000\000\003Q\000\000\002^\003Q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\025\000\000\003Q\000\000\006\025\000\000\003Q\000\000\003Q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\025\006\025\006\025\003Q\006\025\006\025\000\000\000\000\000\000\003Q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0036\003Q\006\025\003Q\000\000\000\000\006\025\003Q\003M\000\000\002^\003M\003Q\003Q\003Q\000\000\000\000\006\025\000\000\000\000\000\000\000\000\000\000\003M\000\000\000\000\000\000\003M\000\000\003M\000\000\000\000\003Q\003Q\000\000\000\000\004\146\000\000\000\000\000\000\000\000\003M\000\000\000\000\000\000\000\000\000\000\003M\000\000\003Q\003Q\000\000\000\000\003Q\003Q\0036\003M\000\000\003M\000\000\000\000\000\000\003M\001Q\000\000\003Q\001Q\003M\003M\003M\000\000\000\000\003Q\000\000\000\000\000\000\000\000\003Q\001Q\000\000\001Q\000\000\001Q\003Q\001Q\000\000\000\000\003M\003M\000\000\000\000\004\146\000\000\000\000\000\000\001\205\001Q\r*\001\205\000\000\000\000\001\"\001Q\000\000\003M\003M\001Q\000\000\003M\003M\001\205\001Q\000\000\001Q\001\205\000\000\001\205\001Q\000\000\000\000\003M\000\000\001Q\001Q\000\238\000\000\000\000\003M\001\205\000\000\000\000\000\000\003M\000\000\001\205\000\000\001Q\000\000\003M\000\000\000\000\r.\001Q\001\205\000\000\001\205\001Q\000\000\000\000\001\205\000\000\000\000\000\000\000\000\001\205\001\205\000\000\r:\000\000\001Q\001Q\001Q\000\000\001Q\001Q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\174\001\205\001Q\002\182\000\000\001\205\000\000\000\000\000\000\001Q\001M\000\000\000\000\001M\000\000\004\237\000\000\005~\001\205\001\205\001Q\003R\001\205\001\205\000\000\001M\000\000\001M\000\000\001M\000\000\001M\000\000\003^\001\205\000\000\000\000\000\000\000\000\012*\000\000\001\205\000\000\001M\000\000\000\000\000\000\000\000\003\226\001M\021b\000\000\001\205\001M\012\182\000\000\000\000\000\000\001M\012\190\001M\000\000\000\000\000\000\001M\000\000\000\000\000\000\000\000\001M\001M\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\198\000\000\000\000\000\000\001M\n\214\000\000\000\000\000\000\007U\001M\000\000\000\000\007U\001M\000\000\000\000\012\218\r\030\000\000\011\014\011&\011.\011\022\0116\000\000\000\000\001M\001M\001M\000\000\001M\001M\000\000\011>\011F\000\000\000\000\000\000\000\000\018\130\000\000\000\000\001M\000\000\000\000\011N\000\000\000\000\000\000\001M\000\000\000\000\000\000\000\238\000\000\000\000\n\214\000\000\000\000\000\000\001M\026\n\000\000\000\000\000\000\000\000\n\222\011\030\011V\011^\011n\011\014\011&\011.\011\022\0116\000\000\007U\000\000\011v\000\000\000\000\000\000\000\000\000\000\011>\011F\000\000\000\000\000\000\011~\000\000\000\000\000\000\000\000\000\000\000\000\011N\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\238\011\158\000\000\011\166\011f\000\000\000\000\000\000\000\000\000\000\011\134\000\000\000\000\n\222\011\030\011V\011^\011n\011\142\011\150\001B\001\006\000\000\000\000\000\000\001\"\011v\006\186\000\000\000\000\001&\000\000\000\000\000\000\000\000\000\000\000\000\011~\000\000\000\000\000\000\001*\000\000\006\218\000\000\000\000\000\000\000\000\001F\000\000\000\000\006\242\000\000\011\158\026\014\011\166\011f\026\026\000\000\t6\000\000\001R\011\134\000\000\000\000\0242\002N\000\000\000\000\000\000\011\142\011\150\000\000\000\000\003F\000\000\004\185\003\246\000\000\004\185\000\000\003\250\000\000\004\002\000\000\007.\000\000\000\000\000\000\000\000\005n\004\185\000\000\000\000\000\000\004\185\000\000\004\185\000\000\000\000\000\000\000\000\005r\000\000\000\000\000\000\000\000\000\000\000\000\004\185\000\000\000\000\005z\000\000\005~\004\185\000\000\000\000\000\000\004\185\000\000\000\000\004>\000\000\004\185\000\000\004\185\000\000\000\000\000\000\004\185\b=\000\000\000\000\b=\004\185\012\018\024B\000\000\005\130\000\000\000\000\000\000\000\000\000\000\004j\b=\000\000\004\185\004\185\b=\000\000\b=\000\000\000\000\004\185\004\185\000\000\000\000\004\185\000\000\000\000\000\000\000\000\b=\000\000\000\000\000\000\000\000\000\000\b=\000\000\004\185\004\185\b=\000\000\004\185\004\185\000\000\b=\000\000\b=\000\000\000\000\004J\b=\000\000\000\000\004\185\000\000\b=\b=\000\238\000\000\000\000\004\185\000\000\b9\000\000\000\000\b9\000\000\000\000\b=\b=\003E\004\185\000\000\003E\000\000\b=\000\000\b9\000\000\b=\000\000\b9\000\000\b9\000\000\003E\000\000\000\000\000\000\003E\000\000\003E\b=\b=\b=\b9\b=\b=\000\000\000\000\000\000\b9\000\000\003E\rB\b9\000\000\000\000\b=\003E\b9\000\000\b9\000\000\000\000\b=\b9\000\000\003E\000\000\003E\b9\b9\000\238\003E\000\000\000\000\000\000\000\000\003E\003E\003E\000\000\000\000\b9\b9\004\129\000\000\000\000\004\129\000\000\b9\000\000\000\000\000\000\b9\000\000\000\000\000\000\003E\000\000\004\129\000\000\003E\000\000\004\129\000\000\004\129\b9\b9\b9\000\000\b9\b9\000\000\000\000\003E\003E\026\250\004\129\003E\003E\000\000\000\000\b9\004\129\000\000\000\000\000\000\000\000\000\000\b9\003E\000\000\001}\000\000\012}\001}\r\194\003E\004\129\000\000\000\000\000\000\003E\004\129\012}\000\000\000\000\001}\003E\001}\000\000\001}\000\000\001}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\129\000\000\001}\000\000\000\000\000\000\000\000\000\000\001}\012}\000\000\000\000\000\000\000\000\000\000\000\000\012}\004\129\004\129\000\000\000\000\004\129\004\129\001}\001A\000\000\000\165\001A\001}\001}\001}\000\000\000\000\000\000\000\000\000\000\000\165\000\000\000\000\001A\004\129\001A\000\000\001A\000\000\001A\000\000\000\000\001}\000\000\000\000\017\194\012}\000\000\000\000\000\000\000\000\001A\000\000\000\000\000\000\000\000\000\000\001A\000\165\001}\001}\001}\000\000\001}\001}\000\165\000\000\000\000\000\000\000\000\000\000\000\000\001A\000\000\000\000\000\000\000\000\001A\001A\001A\000\000\000\000\001}\000\000\000\000\000\000\000\000\000\000\000\000\001B\001\006\000\000\000\000\001}\001\"\000\000\006\186\001A\000\000\001&\000\000\000\165\000\000\000\000\000\000\005\186\000\000\003\254\000\000\000\000\001*\000\000\006\218\000\000\001A\001A\001A\001F\001A\001A\006\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020B\000\000\001R\000\000\000\000\000\000\001^\002N\000\000\001A\000\000\000\000\000\000\000\000\000\000\003F\000\000\000\000\003\246\000\000\001A\000\000\003\250\000\000\004\002\005b\007.\000\000\001B\001\006\000\000\005n\000\000\001\"\000\000\006\186\000\000\000\000\001&\000\000\000\000\000\000\000\000\005r\000\000\000\000\000\000\000\000\000\000\001*\000\000\006\218\000\000\005z\000\000\005~\001F\005\190\018\154\006\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001R\000\000\000\000\000\000\007\030\002N\000\000\000\000\006^\021\022\000\000\005\130\000\000\003F\000\000\t\014\003\246\004j\000\000\000\000\003\250\000\000\004\002\000\000\007.\000\000\001B\001\006\000\000\005n\000\000\001\"\000\000\006\186\000\000\000\000\001&\000\000\000\000\000\000\000\000\005r\000\000\000\000\000\000\000\000\000\000\001*\000\000\006\218\000\000\005z\000\000\005~\001F\000\000\0076\006\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\161\004\161\001R\000\000\000\000\004\161\007\030\002N\000\000\000\000\004\161\019.\000\000\005\130\000\000\003F\000\000\004\161\003\246\004j\000\000\004\161\003\250\000\000\004\002\000\000\007.\000\000\004\161\019\250\000\000\005n\020\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\161\000\000\005r\000\000\004\161\004\161\000\000\000\000\000\000\000\000\000\000\000\000\005z\004\161\005~\003E\004\161\0076\003E\000\238\004\161\000\000\004\161\004\161\000\000\000\000\000\000\000\000\000\000\004\161\003E\000\000\000\000\000\000\003E\000\000\003E\019\170\000\000\005\130\000\000\004\161\000\000\000\000\000\000\004j\000\000\000\000\003E\rB\000\000\004\161\000\000\004\161\003E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003E\003E\000\000\003E\000\000\000\000\000\000\003E\012u\000\000\000\000\012u\003E\003E\003E\003E\004\161\000\000\000\000\003E\000\000\003E\004\161\012u\000\000\000\000\000\000\012u\000\000\012u\000\000\000\000\003E\003E\rB\005i\003E\000\000\000\000\003E\000\000\012u\000\000\000\000\000\000\000\000\000\000\012u\003E\003E\003E\027*\000\000\003E\003E\000\000\012u\000\000\012u\003E\003E\003E\012u\000\000\000\000\000\000\000\000\012u\012u\000\000\000\000\r\194\003E\000\000\000\000\000\000\000\000\003E\000\000\003E\000\000\000\000\000\000\003E\000\000\000\000\000\000\012u\000\000\001B\001\006\012u\000\000\000\000\001\"\000\000\003E\003E\r\162\001&\003E\003E\000\000\000\000\012u\012u\003\030\t]\012u\012u\001*\000\000\000\000\000\000\000\000\000\000\000\000\001F\r\194\003E\012u\000\000\000\000\000\000\014\026\000\000\000\000\012u\000\000\000\000\001R\000\000\000\000\000\000\001^\002N\000\000\000\000\012u\000\000\000\000\000\000\000\000\003F\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005b\000\000\000\000\000\000\000\000\000\000\005n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005r\001B\001\006\000\000\000\000\000\000\001\"\000\000\006\186\000\000\005z\001&\005~\000\000\005\190\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000\006\218\000\000\000\000\000\000\000\000\001F\000\000\000\000\006\242\000\000\000\000\000\000\000\000\005\130\000\000\t]\000\000\000\000\001R\004j\000\000\000\000\t&\002N\005\189\000\000\000\000\005\189\000\000\000\000\000\000\003F\000\000\000\000\003\246\000\000\000\000\000\000\003\250\005\189\004\002\000\000\007.\005\189\000\000\005\189\000\000\005n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\189\000\000\005r\000\000\000\000\000\000\005\189\000\000\000\000\000\000\000\000\000\000\005z\bf\005~\005\189\000\000\005\189\000\000\000\000\000\000\005\189\000\000\000\000\000\000\000\000\005\189\005\189\000\238\000\000\000\000\000\000\000\000\005\193\000\000\000\000\005\193\000\000\000\000\005\130\000\000\006e\000\000\000\000\006e\004j\005\189\005\189\005\193\000\000\005\189\000\000\005\193\000\000\005\193\000\000\006e\000\000\000\000\000\000\006e\000\000\006e\005\189\005\189\000\000\005\193\005\189\005\189\000\000\000\000\000\000\005\193\000\000\006e\000\000\000\000\000\000\000\000\bf\006e\005\193\000\000\005\193\000\000\000\000\005\189\005\193\000\000\006e\000\000\006e\005\193\005\193\000\238\006e\000\000\005\189\000\000\000\000\006e\006e\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\193\005\193\000\000\000\000\005\193\000\000\000\000\000\000\006e\000\000\000\000\000\000\006e\000\000\000\000\000\000\000\000\005\193\005\193\000\000\000\000\005\193\005\193\000\000\000\000\006e\006e\014f\000\000\006e\006e\0125\000\000\001\006\0125\000\000\000\000\029\006\000\000\000\000\005\193\006e\029\n\000\000\000\000\000\000\0125\000\000\006e\000\000\000\000\005\193\0125\000\000\000\000\001B\001\006\000\000\000\000\006e\001\"\000\000\000\000\000\000\0125\001&\000\000\000\000\000\000\000\000\0125\006\177\000\000\006r\000\000\000\000\001*\001\186\002N\0125\000\000\0125\000\000\001F\000\000\0125\000\000\000\000\000\000\000\000\0125\000\000\000\000\000\000\000\000\000\000\001R\000\000\000\000\000\000\001^\002N\029\014\000\000\000\000\000\000\000\000\000\000\000\000\003F\0125\000\000\003\246\000\000\0125\000\000\003\250\000\000\004\002\005b\000\000\000\000\000\000\000\000\000\000\005n\029\018\0125\0125\000\000\000\000\0125\000\000\007\146\000\000\000\000\000\000\005r\007]\000\000\000\000\007]\000\000\000\000\000\000\000\000\000\000\005z\000\000\005~\0125\005\190\000\000\007]\000\000\000\000\000\000\007]\000\000\007]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\209\007]\000\000\001\209\005\130\000\000\006\170\007]\b\014\000\000\004j\000\000\000\000\000\000\000\000\001\209\007]\000\000\007]\001\209\000\000\001\209\007]\000\000\000\000\000\000\000\000\007]\007]\000\238\000\000\000\000\000\000\001\209\000\000\000\000\000\000\000\000\000\000\001\209\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007]\001\209\000\000\001\209\007]\000\000\000\000\001\209\006i\000\000\000\000\006i\001\209\001\209\000\000\000\000\000\000\007]\007]\000\000\000\000\007]\007]\006i\000\000\000\000\000\000\006i\000\000\006i\000\000\000\000\001\209\000\000\000\000\000\000\001\209\000\000\000\000\000\000\007]\006i\000\000\000\000\000\000\000\000\000\000\006i\000\000\001\209\001\209\000\000\000\000\001\209\001\209\000\000\006i\000\000\006i\000\000\000\000\000\000\006i\000\000\000\000\001\209\000\000\006i\006i\000\238\000\000\000\000\001\209\000\000\000\000\000\000\000\000\014F\000\000\000\000\000\000\000\000\000\000\001\209\000\000\bm\bm\006i\000\000\000\000\bm\006i\000\000\000\000\000\000\bm\000\000\000\000\000\000\000\000\000\000\000\000\003\238\000\000\006i\006i\bm\000\000\006i\006i\000\000\000\000\000\000\bm\000\000\000\000\000\000\000\000\000\000\000\000\006i\000\000\000\000\000\000\000\000\000\000\bm\006i\000\000\000\000\bm\bm\004\185\000\000\000\000\004\185\000\000\000\000\006i\bm\000\000\000\000\bm\000\000\000\000\000\000\bm\004\185\bm\bm\000\000\004\185\000\000\004\185\000\000\bm\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\185\000\000\bm\000\000\000\000\000\000\004\185\000\000\000\000\000\000\000\000\000\000\bm\bf\bm\004\185\012u\004\185\000\000\012u\000\000\004\185\000\000\000\000\000\000\000\000\004\185\012\018\000\238\000\000\000\000\012u\000\000\000\000\000\000\012u\000\000\012u\000\000\bm\000\000\000\000\000\000\005i\000\000\bm\004\185\000\000\000\000\012u\004\185\000\000\000\000\000\000\000\000\012u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\185\004\185\000\000\000\000\004\185\004\185\000\000\012u\000\000\000\000\000\000\000\000\012u\012u\000\000\000\000\007\190\000\000\000\000\000\000\000\000\000\000\000\000\004\185\000\000\000\245\000\000\000\000\000\245\000\000\000\000\000\000\012u\000\000\004\185\000\000\000\000\000\000\000\000\000\000\000\245\000\000\000\000\000\000\000\245\000\000\000\245\000\000\000\000\012u\012u\003\030\000\000\012u\012u\000\000\000\000\000\000\000\245\000\000\000\000\000\000\000\000\000\000\000\245\012u\000\000\000\000\000\000\014\222\000\000\000\000\012u\000\245\000\000\000\245\000\000\000\000\000\000\000\245\000\000\000\000\000\000\012u\000\245\000\245\000\238\000\000\000\000\000\000\000\000\000\249\000\000\000\000\000\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\245\000\000\000\249\000\000\000\245\000\000\000\249\000\000\000\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\245\000\245\000\000\000\249\000\245\000\245\000\000\000\000\000\000\000\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\249\000\000\000\249\000\000\000\000\000\245\000\249\000\000\000\000\000\000\000\000\000\249\000\249\000\238\000\000\000\000\000\245\000\000\000\000\000\000\002Z\003\"\000\000\000\000\000\000\001\"\000\000\000\000\000\000\000\000\000\000\000\249\000\000\000\000\000\000\000\249\000\000\000\000\000\000\000\000\000\000\001*\002\134\002r\003&\000\000\000\000\000\000\000\249\000\249\000\000\002~\000\249\000\249\000\000\000\000\000\000\000\000\007Y\000\000\000\000\007Y\000\000\000\000\000\000\003*\003.\000\000\000\000\000\000\000\000\000\249\003:\007Y\003F\004\026\004&\007Y\000\000\007Y\000\000\014\030\000\249\014\"\000\000\000\000\000\000\000\000\000\000\000\000\006]\007Y\000\000\006]\000\000\000\000\000\000\007Y\000\000\000\000\000\000\r\n\0046\000\000\000\000\006]\007Y\000\000\007Y\006]\000\000\006]\007Y\000\000\005~\000\000\000\000\007Y\007Y\000\000\000\000\000\000\000\000\006]\000\000\000\000\014.\000\000\000\000\006]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007Y\006]\000\000\006]\007Y\000\000\0142\006]\000\000\000\000\000\000\000\000\006]\006]\000\000\000\000\000\000\007Y\007Y\012>\000\000\007Y\007Y\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]\007\146\000\000\000\000\007Y\000\000\004\185\000\000\000\000\004\185\000\000\000\000\000\000\006]\006]\000\000\001i\006]\006]\001i\000\000\004\185\000\000\000\000\000\000\004\185\000\000\004\185\000\000\000\000\000\000\001i\000\000\001i\000\000\001i\006]\001i\000\000\004\185\000\000\000\000\000\000\000\000\000\000\004\185\b\014\000\000\000\000\001i\000\000\000\000\000\000\000\000\000\000\001i\000\000\000\000\000\000\000\000\004\185\000\000\000\000\000\000\000\000\004\185\012\018\000\238\000\000\000\000\001i\000\000\000\000\000\000\000\000\001i\001i\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\185\000\000\000\000\000\000\011\225\000\000\000\000\011\225\000\000\000\000\001i\000\000\000\000\000\000\000\000\000\000\000\000\004\185\004\185\011\225\000\000\004\185\004\185\011\225\000\000\011\225\000\000\001i\001i\001i\000\000\001i\001i\000\000\000\000\000\000\000\000\011\225\000\000\000\000\004\185\000\000\000\000\011\225\000\000\000\000\000\000\000\000\000\000\000\000\001i\004\185\011\225\000\000\011\225\000\000\000\000\000\000\011\225\011\229\000\000\001i\011\229\011\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\229\000\000\000\000\000\000\011\229\000\000\011\229\000\000\000\000\011\225\n\186\000\000\000\000\011\225\000\000\000\000\000\000\000\000\011\229\000\000\000\000\000\000\000\000\000\000\011\229\000\000\011\225\011\225\000\000\000\000\011\225\011\225\000\000\011\229\000\000\011\229\000\000\000\000\000\000\011\229\004\185\000\000\000\000\004\185\011\229\000\000\000\000\000\000\000\000\011\225\000\000\000\000\000\000\000\000\000\000\004\185\000\000\000\000\000\000\004\185\011\174\004\185\000\000\000\000\011\229\n\202\000\000\000\000\011\229\000\000\000\000\000\000\000\000\004\185\000\000\000\000\000\000\000\000\000\000\004\185\000\000\011\229\011\229\000\000\000\000\011\229\011\229\000\000\004\185\000\000\004\185\000\000\000\000\000\000\004\185\000\000\000\000\000\000\000\000\004\185\012\018\000\000\000\000\000\000\011\229\000\000\000\000\000\000\000\000\000\000\000\000\002Z\003\"\000\000\000\000\011\174\001\"\000\000\000\000\004\185\000\000\000\000\000\000\004\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001*\002\134\002r\000\000\004\185\004\185\000\000\000\000\004\185\004\185\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\003*\003.\000\000\004\185\000\000\000\000\000\000\003:\026\242\003F\004\026\004&\004\145\000\000\000\000\004\145\014\030\000\000\026\202\000\000\007\146\000\000\000\000\000\000\000\000\005\201\000\000\004\145\005\201\000\000\000\000\004\145\000\000\004\145\000\000\000\000\000\000\0046\000\000\000\000\005\201\000\000\000\000\000\000\005\201\004\145\005\201\000\000\000\000\005~\000\000\004\145\000\000\000\000\000\000\000\000\000\000\000\000\005\201\000\000\004\145\026\214\004\145\000\000\005\201\b\014\004\145\000\000\000\000\000\000\000\000\004\145\000\000\000\000\000\000\000\000\000\000\000\000\0142\005\201\000\000\000\000\000\000\000\000\005\201\005\201\000\238\000\000\000\000\000\000\000\000\004\145\000\000\000\000\000\000\004\145\000\000\000\000\000\000\004\137\000\000\000\000\004\137\000\000\005\201\000\000\000\000\000\000\004\145\004\145\000\000\000\000\004\145\004\145\004\137\000\000\000\000\000\000\004\137\000\000\004\137\005\201\005\201\000\000\000\000\005\201\005\201\000\000\000\000\000\000\000\000\004\145\004\137\000\000\000\000\000\000\000\000\000\000\004\137\000\000\000\000\000\000\012\134\000\000\005\201\000\000\000\000\004\137\000\000\004\137\000\000\000\000\000\000\004\137\004\169\000\000\000\000\004\169\004\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\169\000\000\000\000\000\000\004\169\000\000\004\169\000\000\000\000\004\137\000\000\000\000\000\000\004\137\000\000\000\000\000\000\004y\004\169\000\000\004y\000\000\000\000\000\000\004\169\000\000\004\137\004\137\000\000\000\000\004\137\004\137\004y\004\169\000\000\004\169\004y\000\000\004y\004\169\000\000\000\000\000\000\000\000\004\169\000\000\000\000\000\000\000\000\004\137\004y\000\000\000\000\000\000\000\000\000\000\004y\000\000\000\000\000\000\0176\000\000\000\000\000\000\004\169\004y\000\000\004y\004\169\007Y\000\000\004y\007Y\000\000\000\000\000\000\004y\000\000\000\000\000\000\000\000\004\169\004\169\000\000\007Y\004\169\004\169\000\000\007Y\000\000\007Y\000\000\000\000\000\000\000\000\000\000\004y\000\000\000\000\000\000\004y\000\000\007Y\000\000\004\169\000\000\000\000\000\000\007Y\000\000\000\000\000\000\000\000\004y\004y\018\026\000\000\004y\004y\000\000\000\000\000\000\000\000\007Y\000\000\000\000\000\000\000\000\007Y\007Y\000\000\000\000\000\000\000\000\000\000\000\000\004y\002Z\002^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0216\007Y\000\000\000\000\000\000\000\000\001f\000\000\0071\0071\000\000\001*\002\134\002r\000\000\000\000\000\000\000\000\007Y\007Y\012>\002~\007Y\007Y\000\000\000\000\004*\000\000\002\142\0071\0071\0071\000\000\000\000\000\000\002\130\003.\000\000\015N\0071\000\000\007Y\003:\000\000\003F\004\026\004&\000\000\000\000\000\000\000\000\0042\000\000\0071\0071\002Z\002^\000\000\000\000\000\000\0071\000\000\0071\0071\0071\000\000\000\000\000\000\000\000\0071\000\000\000\000\0046\003\254\000\000\000\000\001*\002\134\002r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002~\000\000\000\000\000\000\0071\000\000\000\000\001\174\000\000\000\000\002\182\000\000\000\000\000\000\002\130\003.\000\000\000\000\000\000\000\000\r2\003:\003N\003F\004\026\004&\004\205\004f\003R\004j\0042\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012E\003^\000\000\012E\000\000\000\000\004\030\012*\0071\000\000\000\000\000\000\0046\000\000\000\000\012E\003\226\000\000\021b\000\000\000\000\012E\012\182\000\000\000\000\000\000\000\000\012\190\000\000\000\000\000\000\000\000\000\000\012E\000\000\000\000\000\000\000\000\000\000\012E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\198\012E\000\000\012E\000\000\000\000\004f\012E\004j\000\000\000\000\000\000\012E\000\000\000\000\000\000\000\000\012\218\r\030\000\000\000\000\004\205\004\205\004\177\002Z\002^\004\177\000\000\000\000\000\000\000\000\000\000\012E\000\000\000\000\000\000\012E\000\000\004\177\000\000\018\130\000\000\004\177\000\000\004\177\001*\002\134\002r\000\000\012E\012E\000\000\000\000\012E\000\000\002~\004\177\000\000\016\"\000\000\000\000\b\198\004\177\000\000\000\000\000\000\000\000\000\000\001\174\002\130\017v\002\182\012E\016\154\000\000\000\000\003:\004\177\003F\004\026\004&\000\000\004\177\029N\000\000\017\134\000\000\000\000\000\000\003R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003^\004\177\000\000\000\000\000\000\0046\012*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\226\000\000\021b\004\177\004\177\000\000\012\182\004\177\004\177\000\000\000\000\012\190\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007-\007-\000\000\000\000\000\000\000\000\004\177\000\000\000\000\000\000\000\000\012\198\r)\r)\000\000\028\254\000\000\018B\000\000\000\000\000\000\007-\007-\007-\000\000\000\000\000\000\000\000\012\218\r\030\000\000\007-\004\245\r)\r)\r)\007\166\000\000\000\000\000\000\000\000\000\000\000\000\r)\001\174\007-\007-\014\002\000\000\000\000\000\000\018\130\007-\000\000\007-\007-\007-\r)\r)\015\014\000\000\007-\000\000\004\193\r)\003R\r)\r)\r)\000\000\002Z\002^\0192\r)\000\000\000\000\000\000\015\018\000\000\000\000\000\000\000\000\007-\015:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001*\002b\002r\r)\000\000\000\000\000\000\012\182\000\000\000\000\002~\000\000\012\190\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002Z\002^\019\174\002\130\003.\000\000\000\000\000\000\000\000\000\000\003:\015\206\003F\004\026\004&\000\000\000\000\000\000\004\222\0042\000\000\001*\002b\002r\000\000\000\000\000\000\000\000\012\218\015\226\000\000\002~\004\193\004\193\000\000\000\000\000\000\000\000\000\000\000\000\0046\002Z\002^\025f\000\000\002\130\003.\000\000\000\000\000\000\000\000\015\242\003:\000\000\003F\004\026\004&\000\000\002Z\002^\000\000\0042\001*\002b\002r\000\000\000\000\000\000\000\000\000\000\002Z\002^\002~\000\000\000\000\000\000\000\000\000\000\000\000\001*\002\134\000\000\0046\000\000\000\000\000\000\002\130\003.\000\000\000\000\000\000\001*\002b\003:\000\000\003F\004\026\004&\000\000\000\000\000\000\000\000\0042\002\130\0036\000\000\000\000\000\000\000\000\000\000\003:\000\000\003F\004\026\004&\002\130\0036\000\000\000\000\0042\000\000\rF\003:\0046\003F\004\026\004&\000\000\000\000\000\000\000\000\0042\000\000\rF\000\000\000\000\000\000\000\000\000\000\000\000\0046\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0046")) + ((16, "\127\164\137\244\132`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\206\132`\000\000\000\000\021\206\132`\127\164\002\026\000e\000l\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001\240\000\191\000\000\000D\001\002\000\000\005\180\001\020\001\188\000\000\000\160\002\148\003\208\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003n\000\000\000\000\003\140(\162\000\000\000\000\000\000\000\242\000\000\000\000\187\234\004x\004^\000\000\000\000\186\150\000\242\000\000\133\176\021\186\128&\193\026\021\206\145,\134z\021\186\182D\000\000\003`\000\000\150\212\004<\000\000\026\200\000\000\004\174\000\000\000\000\006\190\000\000\000\242\000\000\000\000\000\000\004\218\000\000\026\200\000\000\003\192\229h\205\142\205f\000\000\233(\230\154\000\000\180,+\192\000\000\135\"\028\030(\162\132`\127\164\000\000\000\000\134z\021\186\183\224\150\212\007.\226\236\000\000\231\154\132`\127\164\137\244\021\206\000\003\002f\0056\004\180%\132$z\000\000%\132$z\000\000%\132%\132\b\000\006\228\003\192\002d\000\000\006>\000\000\000\000\t\n\000\000\000\000\000\000%\132\000\242\000\000\000\000\190T%\132+\192\006\014%\132\000\000\006\254\028\230\186\150\000\000\000\000\000\000\000\000\000\000\000\000\b6\000\000\000\000\1824,\202\1806+\192\183\002\b\000\000\000\000\000\188\184-\212\180:+\192\183\208\184\158\185l\191\"\006X\000\242\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000%\132\000\000\003$~\224\000\000%\132\003$%\132 \172\000\000\021\206\000\000.\214\000\000\001\146\002\182\000\000\005\212%\132\003\168\000\000\004\178\000\000\007\206\000\000\000\003\bl\000\000\000\000\000\000\022\234%\132\022z%\132\029`\006\188\006p\144f\006L\006\246\004\180\007\138\000\000\000\000\000\000\017\168\137\152\021\150\1430\186j\000\000\006\142\007V\006\230%\132\th\b&\210^\007\150\b\182\t\022%\132\t\158\000\000\000\000\003\160\000\000\000\000\004\196\000\000\000\000\133:\bF\021\144\000(\004\138\000\000\000\000\000 \000\000\128&\0116\011L\021\186\026&\000\000\021\206\127\164\127\164\000\000\000\000\000\000.\224.\224\021\186\026&\026&\021\206\145,\005\236\007\016\tB\000\000\004\144\011\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\168\000\003\137\244\021\206\000\003\"0\196\190\138\186\003\028\145\242\225R\b\160\011\174\011\\%\132\nJ\011\220\219\028\b\246\012\184\012Z%\132\011T\000\000\000\000\210\248\210\248\000\000\tB\000\000\r*\000\000\029d%\132\024X\b\178\186j\137\244\021\206\186j\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\181>#\216\000\000\000\000\000\000\001\006\023\024\206.\000\000\186j\012\198\211Z\t\170\r\194\rD%\132\011|\000\000\000\000\186j\000\000\000\000\000\000\000\000\198\216\021\206\186j\186j\000\000\rx\186j\000\000\186j\000\000\000\000\000\000\000\000\000\000\131\214\211\244\nt\014Z\014N%\132\012^\000\000\000\000\186j\000\000\000\000\138h\186j\140$\187d\133:\004h\004h\000\000\015\030\186j\000\000\nZ\015\150\000\000\027z\000\000\212V\n\180\016\b\015\138%\132\012\134\000\000\000\000\186j\000\000\000\000\141\176%\132\r\004\000\000\186j\144\020\000l\000\000\000\000\000\000\000\000\145\160\016\160\000\000\0282\000\000\212\240\000\000\016\196\000\000!f\206.\000\000\000\000#\186\n\134\022\184\011\246\000\000\000\000\000\000\000\000\016\020\000\000\186j\000\000\000\000\000\000\"\028\186j#\030\000\000\000\000\000\000$\196\223\162\011\n\016\164\016b%\132\rh\000\000\000\000\186j\000\000\000\000%\206\016v\2242\011~\017\024\016\194%\132\r\140\000\000\000\000\186j\000\000\000\000'\226\186j\016\252\224\194\011\192\017\138\017\014%\132\r\144\000\000\000\000\186j\000\000\000\000(\236\191\238\012\018\017\164\000\140%\132\005\190\017\248\000\000\000\000\012\200\017\164\011\n\000\003\193\226/\234.\224\021\186\026&\000e\003\234\005\222\000\000\0176\128&\1518\131(\000e\003\234\n&\000\000\017\220\128&\000\000\213\142\b\164\150\212\tB\t '\152\000\000%\132\206v%\132\197H\206\216%\132\tN%\132\207`\000\000\rv\012(\012>\128&\213\194\000\000\t\194\012`\194\128\000\000\000\000\000\000\017\252\128&\214N\128&\214\130\000\000\000\000\128&\215\014\024\006\003\192\197\214\011\030\003\192\1988\000\000\215B\b\164\000\000\003\242\000\000\004\252\000\000\018\012\026&\000\000\194\1800\244\000\000\004\206\000\000\128&\007\016\000\000\000\000\000\000\192\184\000\000\002\142\000\003\139\176\r2\003\216\146\184\024\216\135\174\023<\000l\000\000\000\000\029\188\018l\000\000\000\000\000\000\137\244\021\206\130\154\137\244\021\206\017\168\017\168\000\000\000\000\000\000\001\b\0230#2\000\000\140v\141<.\224\021\186\026&\000?\128&\b\026\000\000\142\002\142\200\225R\028\132%\132\n\156\000\003\017\168\025\198\017\168\002\018\016\168\1368\137\244\021\206\000\003\198\216\021\206\206.\186j\129\236\000\003\193\226\021\206\135<\007\234\000\000\186j\025f%\132\006\128\011\n\018<\000\000\000\000\000\000\134:\004h\018\\\000\000\186j\000\000\000\000\199x\000\000\000\000\000\138+\192\t$\018P\147~\198\216\021\206\206.$6\148D\r\146\018P\004\180\018\154\000\000\000\000\017\168\023\206\018\130\000\000#\000\000\003\198\216\021\206\186j\027z\000\003\137\244\021\206\017\168\024\216\000\000\006<\000\000\018\148\002\020\017\168\026\158\000\000\000\000\000\000\000\000\003\030\017\168\027\168\000\000\017\168\007\160\000l\000\000\011\200\000\000\023\206\018L\000\000\000\000\149\n\198\216\021\206\206.\000\000\000\000\017\168\r\208\018\156\004\180\018\238\000\000\000\000\018\180\000\000\017\168\004&\017\168\0050\018\188\1368\198\216\021\206\206.\026B\1368\000\000%@\149\208\r\212\018\184\004\180\019\002\000\000\000\000\017\168\025\226\198\216\021\206\206.&J\186j\000\000\018\178\026\236\012\206\000\003\000\000\000\000'T\150\150\198\216\021\206\206.(^)h\151\\\198\216\021\206\206.*r+|\000\000\019\188\027\246\152\"\198\216\021\206\206.\000\000\000\000\000\003\132`\000\003\000\000\000\000\152\232\198\216\021\206\206.,\134-\144\153\174\198\216\021\206\206..\154/\164\154t\198\216\021\206\206.0\1741\184\155:\198\216\021\206\206.2\1943\204\156\000\198\216\021\206\206.4\2145\224\156\198\198\216\021\206\206.6\2347\244\157\140\198\216\021\206\206.8\254:\b\158R\198\216\021\206\206.;\018<\028\159\024\198\216\021\206\206.=&>0\159\222\198\216\021\206\206.?:@D\160\164\198\216\021\206\206.ANBX\161j\198\216\021\206\206.CbDl\1620\198\216\021\206\206.EvF\128\162\246\198\216\021\206\206.G\138H\148\163\188\198\216\021\206\206.I\158J\168\164\130\198\216\021\206\206.K\178L\188\165H\198\216\021\206\206.M\198N\208\166\014\198\216\021\206\206.O\218P\228\166\212\014&\018\196\004\180\019\020\000\000\000\000\017\168\029\000\198\216\021\206\206.Q\238R\248\167\154\198\216\021\206\206.T\002U\012\021\206\225R\135<\000\003\000\000(\162\004h\018\132%\132\0114\000\003\000\000\bR\000\242\000\000%\132\012\020\000\003\000\000\018\156\000\003\000\000\000\000\004\180\000\000\018\162\147~\000\000\000\000\000\000\029\142%\132\012l\000\003\000\000)\246\000\003\000\000\225\146\014\156\019\004\018\130%\132\014r\000\000\000\000\186j\000\000\000\000+\000\186j,\n\000l\000\000\000\000\221\158\221\158\000\000\000\000\000\000V\022\195h\137.\000\000\019R\006:\168`\198\216\021\206\206.W X*\1368\019\\\007D\169&\198\216\021\206\206.Y4Z>\1368\019`\bN\169\236\198\216\021\206\206.[H\\R'T\000\003\019l\tX\170\178\198\216\021\206\206.]\\^f\000\003\019\132\nb\171x\198\216\021\206\206._p`z\000\003\019\132\011l\172>\198\216\021\206\206.a\132b\142\004\144\019\198\1368\019\150\012v\173\004\198\216\021\206\206.c\152d\162\1368\019\148\r\128\173\202\198\216\021\206\206.e\172f\182\1368\019\148\014\138\174\144\198\216\021\206\206.g\192h\202\015\148\175V\198\216\021\206\206.i\212j\222\016\158\020\198\000\000\000\000\000\000\002P\000\000\000\000\000\003\018\238\000\003\018\252\000\000\019\190\000\000\000\003\019\196\000\000\000\003\019\198\000\000\014D\020\208\1368\019\222\000\000\1368\019\222\000\000\1368\019\224\000\000\000\000\198\216\021\206\206.k\232l\242\000\000\019\202\000\003\000\000\000\003\000\000\000\000\000\000m\252\020\014\176\028\198\216\021\206\206.o\006\176\226\198\216\021\206\206.p\016q\026r$\177\168\198\216\021\206\206.s.t8\020\002\000\000\1368\020\b\000\000\1368\020\b\000\000\178n\014\220\019\222\004\180\020>\000\000\000\000\017\168\030\n\198\216\021\206\206.uBvL\000\000-\020\000\003\000\000\014\252\000\003\000\000\225R\000\000\000\000\200\030\020D\000\000\139\176\000\000\019~\000\000\143\160\000\000\020H\000\000\r2\019\196\000\000\024\216\025*\tB\000\000!p\n\198\014\174\024\016\000\000\000\000\020J\000\000\000\218\031\020\181\234\031\020\000\000\019\184\000\000\020^\000\000\198\216\021\206\206.\025b\207\214\014<\015F\000\000\000\000\019\224\000\000\020l\000\000\000\000\021\186\026&\003D\000\003\000\000\021\144\000(\004\138\003\234\026&\227T\128&\004\252\026&\227\188\019\246\000\003\000\000\003\234\000\000\027h\021\150\030\134\000\000\014|\020\146\000\000\020\144\002\158\181~\002\014\000\000\020`\019\222(\162\b\202%\132\023\132\001\146\015\184\002\254\000\000\029\230\020\158\000\000\002\014\000\000\000\000\020\184+\192\200\180\000\000\208b\199r\n4\181~\020\138+\192\216\b\201\030\020\144+\192\216\024\201\200\0003\020@\000\003\000\000\000\000\021\206\226\"\000\000\225R\221\158\000\000\000\000\020\210\000\000\000\000\000\000\198\216\021\206\206.wVx`\000\000\020\n\000\000\000\000.\224\021\186\026&\005\216\000\000\128&\n.\000\000\006\194\000\000\020\232\000\000\021\020\206.yj\020\182\000\000\000\000\198\216\021\206\206.\027\020\000\000\128&\0118\000\000\128&\031J\000\000\128&\012B\000\000\207\214\000\000\128&\rL\000\000\128& (\000\000\128&\014V\000\000\221\158\000\000\021\186\026&\221\158\000\000\026\212\005\236\007\016\000\242\233x\128&\229\240\221\158\000\000\015\140\004\138\004\138\003\234\221\158\234\216\000(\004\138\003\234\221\158\234\216\000\000\000\000\003\234\221\158\000\000\132`\127\164\186j\025f\000\003\000\000\132`\127\164.\224\021\186\026&\221\158\000\000\002\026\000e\000l\020>(\162\014\\%\132\222\030\020j\021\024\233\236\000\000\221\158\000\000\222\158\027h\021\150\030\134\228$\031$\0158\001\000\015\192\020T\021\206\221\158\000\000\021\206\221\158\000\000\202\162\237b\t@\005\236\000(\003\192\208\202\000\000\000(\003\192\208\202\000\000\029\242\005\236\007\016\000\242\234\234\128&\221\158\000\000\015\140\018T\020\138\003\192\208\202\000\000\004\138\020T\128&\221\158\236@\000(\004\138\020\132\128&\221\158\236@\000\000\000\000\007(\000\003\221\158\000\000\128&\234\006\208\202\000\000\007(\000\000\133\176\021\186\128&\221\158\000\000\027h\021\150\030\134\196^\023@\023@\021\162\023j\000\000\015\154\026\200\011\018\000\000\021\020\020\1843\006\021\150\183\194%\132\016\"\000\000\133:\021\162\0066\015\252\000\000\015\220\000\000\021\024\020\150%\132\129\184\000\000\007\016\002\182\014\024\000\000\0168\000\000\021&\020\170(\162\129\184\000\000\021\1863\006\021\154\007\194\000(\000\003\014\1783\006%\132\r&\b\000\000\000%\132\t\226\004\176\000\000\000\000\216\230\000\000\000\003\015\2503\006\217f\129\184\000\000\021\186%\132\r\004%\132#2\129\184\000\000\021\026\000\000\129\184\000\000\000\000\133:\000\000\221\158\235z\021\162\023j\015\154\021\142\021J3\006\221\158\235z\000\000\000\000\021\162\023j\015\154\021\244\021t&\142\179\242+\192\022\020&\142%\132\004\176\022\022&\142+\192\022$&\142\217\230\218P\000\000\232\002\000\000\000\000\208\202\236\156\021\162\023j\015\154\022,\021\170&\142\208\202\236\156\000\000\000\000\000\000\237b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\208\202\000\000\235\214\021\186\139\158\022>\226\236\000\000\231\154\235\214\000\000\000\000\236\248\021\186\139\158\022B\021\196\205\142%\132\002\014\022\130\000\000\000\000\218\244\223$\021\206\000\000\230.\030\134\000\000\000\000\208\202\236\248\000\000\000\000\000\000\228\140\131\170\128j\002\014\022\132\000\000\000\000\000\000\223$\021\206\000\000\002\014\022\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\170\023@\021\162\023j\015\154\022R\219\1861\252\021\150\1430\152\"\021\162\0003\002\014\022f\005&\000\003\000\000\022\028\000\003\000\000\129\184\000\000\tT\016\176\000\000\016F\000\000\022\132\022\002%\132\128\186\022\140\007:\000\003\000\000\022@\000\003\000\000\030\246\0007\016\128\000\000\022\162\220\028)\172\004h\022X%\132\015F\000\003\000\000\022x\000\003\000\000\000\000\129\184\000\000\n.\016\240\000\000\016V\000\000\022\224\022~(\162\000\000\023\014\220~*\182\004h\022\162%\132\015\206\000\003\000\000\022\186\000\003\000\000\000\000\021\206\000\003\129\184\000\000\021\252\021\1861\2521\252\209*\132`\021\206\226\"\225R\b \000\000\t\214\000(\000\003\016\2101\252%\132\014\136\tB\000\000\021\206\219\186\219\1861\252\016\1901\252\000\000\128\156\129\154\000\000\202\214\000\000\000\000\203\128\000\000\000\000\204\b\000\003\017\0041\252\204\144\226\"\225R\b \000\000\012\020\000\000&\142\023z\000\000\"0\023h\000\000\129\184\000\0001\252\"0\129\184\000\000\021\186%\132\129\184\000\000\023\b\000\000\129\184\000\000\000\000\152\"\000\000\232>&\142\023\0241\252\232\166\219\186\000\000\221\158\235\228\021\162\023j\015\154\023|\219\186\221\158\235\228\000\000\000\000\000\000\237\006\193\226\000\000\000\000\000\000\000\000\000\000\000\000\234\142\221\158\000\000\235\214\000\000\000\000\000\000\000\000\221\158\237\006\000\000\000\000\000\000\234\142\023\188\000\000\023\204\000\000\221\158\237\006\000\000\000\000\0236\000\000\209\200\016j\000\000\186j\000\000\000\000\147,\023 \221\024\016\238\023\176\0234%\132\017F\000\000\000\000\186j\000\000\000\000\148\184\031\162\000\000%\132\017\144\000\000\152\"\023f\000\000\017\168 \030\198\216\021\206\206.zt{~\023X\1794\017\176\023\222\004\180\024 \000\000\000\000\017\168!(\198\216\021\206\206.|\136}\146\024X\206.~\156\024.\000\000\000\000\024L\135&\030\134\030\134\223$\031$\021\206\000\000\221\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\226\132\031$\021\206\000\000\018L\226\236\000\000\231\154\000\000\024N\135&\030\134\221\158\000\000\024j\000\000\n\236\018\182\021\186\136\158\000\000\000\000\025\148\193\200\000\000\000\000\023\234\000\000\024N%\132\000\000\030\248,\202\189\134%\132\000\000\016\238\012B\b\000\000\000\000\000%\132\012\188\r\198%\132\014\208\002\014\024|\000\000\000\000\230\182\000\000\000\000\205\142\000\000\208\202\000\000\024t\135&&\198\208\202\000\000\000\000\000\000\000\000\018d\2316\205\142\000\000\208\202\000\000\024\146\135&&\198\208\202\000\000\024\016\000\000\017t\000\000\221\158\000\000\024\188\000\000\000\003\024\020\000\003\024\030\000\000\0240\000\000\000\000\149\208\0248\000\000\000\000\028\006\196\000\024\228\000\000\000\000\000\000\016p\019v\205\b\024\230\000\000\000\000\000\000\000\000\000\000\000\000\024F\000\000\031$\000\000\024X\000\000%\132\000\000\014\208\000\000\000\003\024\\\000\000\000\000\003\192\000\000\006\164\000\000\000\003\000\000\017\222\000\000\026&\000\000\011X\000\000\128&\000\000\014\190\000\000\012(\000\000\024r\000\000\186j\031\162\000\000\000\000\000l\024x\000\000\000\000\011\200\130\154\000\242\229\012\000\000\000\000\000\000\000\000\000\000\191\170\000\000\000\000\025\"\000\000\182~\000\000\018f\025$\000\000\025,\000\000\131`\131`\229\188\229\188\000\000\000\000\202\188\229\188\000\000\000\000\000\000\202\188\229\188\024\136\000\000\024\152\000\000"), (16, "\003\165\000\006\005\217\005\217\003\165\002\174\002\178\003\165\002\222\002~\003\165\002\234\003\165\001b\004\182\003\165\000\242\005\217\003\165\003\165\003\165\nz\003\165\003\165\003\165\001\198\005\217\005\217\005\217\004\186\003\165\005n\005r\r\254\003\165\000\242\003\165\005B\004\190\000\242\005\146\000\242\003\165\003\165\005\190\005\194\003\165\005\198\005\202\003\165\005\206\005\218\005\230\005\238\tJ\001j\001Z\003\165\003\165\002\166\005\217\002\178\005\226\003\165\003\165\003\165\n\174\n\178\n\190\n\246\011b\001r\n\198\001\130\n\230\006f\003\165\003\165\003\165\003\165\003\165\003\165\003\165\003\165\003\165\011z\000\242\003\165\011:\003\165\003\165\004q\011\134\011\158\012V\006r\006v\003\165\003\165\003\165\001^\003\165\003\165\003\165\004\017\003\165\001\006\001\178\019\"\003\165\001\137\003\165\003\165\b}\003\165\003\165\003\165\003\165\003\165\003\165\006z\n\234\003\165\003\165\003\165\011\002\003J\012j\001\206\003\165\003\165\003\165\003\165\001\137\001\137\005F\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\007\237\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001z\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\004q\001\137\004\002\001\137\001\210\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001n\001\137\012\002\t&\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\020j\001\137\001\137\005\217\001\137\001\137\0111\005\217\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\023\218\001\137\001\137\006\170\011\022\001\137\007\245\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\001\137\012q\000\242\001^\004\017\012q\012q\012q\012q\004\006\012q\012q\012q\012q\001~\012q\012q\012q\004Q\012q\012q\012q\004i\012q\012q\012q\012q\0111\012q\004Q\012q\012q\012q\012q\012q\012q\012q\012q\000\n\012q\021>\012q\018\142\012q\012q\012q\012q\012q\012q\012q\012q\007a\012q\012q\004Q\012q\001\241\001\241\012q\012q\012q\0111\003&\012q\012q\012q\012q\012q\012q\012q\001\241\012q\012q\012q\012q\012q\012q\012q\012q\012q\012q\012q\012q\012q\012q\012q\025^\012q\012q\001\138\012q\012q\004Q\003\030\002\238\031\170\012q\012q\012q\012q\012q\012\142\012q\012q\012q\004F\012q\011r\0216\012N\012q\025f\012q\012q\nz\012q\012q\012q\012q\012q\012q\012q\012q\012q\012q\012q\012q\012q\000\242\012q\012q\012q\012q\012q\014\193\t\157\003\213\018\146\014\193\014\193\014\193\014\193\005\217\014\193\014\193\014\193\014\193\n\170\014\193\014\193\003*\004M\014\193\014\193\014\193\003\213\014\193\014\193\014\193\014\193\005\217\014\193\004M\014\193\014\193\014\193\014\193\014\193\014\193\014\193\014\193\005\217\014\193\014\145\014\193\004\018\014\193\014\193\014\193\014\193\014\193\014\193\014\193\014\193\000\242\014\193\014\193\004M\014\193\021\150\005\234\014\193\014\193\014\193\014\145\001\174\014\193\014\193\014\193\014\193\014\193\014\193\014\193\000\242\014\193\nz\014\193\011-\014\193\014\193\014\193\014\193\014\193\014\193\014\193\014\193\014\193\014\193\014\193\000\242\014\193\014\193\001\194\014\193\014\193\004M\004V\tq\005\217\014\193\014\193\014\193\014\193\014\193\012\170\014\193\014\193\014\193\020\206\014\193\014\193\t\158\014\193\014\193\007\253\014\193\014\193\b\141\014\193\014\193\014\193\014\193\014\193\014\193\014\193\014\193\014\193\014\193\014\193\014\193\014\193\n^\005\217\014\193\014\193\014\193\014\193\004\145\002r\004\"\000\242\004\145\004\145\004\145\004\145\005\014\004\145\004\145\004\145\004\145\001\142\004\145\004\145\014\149\n\026\004\145\004\145\004\145\tf\004\145\004\145\004\145\004\145\002\"\004\145\005\018\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\014\149\004\145\000\242\004\145\001\186\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\b\141\004\145\004\145\007\129\004\145\0056\005:\004\145\004\145\004\145\n\186\004\006\004\145\004\145\004\145\004\145\004\145\004\145\004\145\020\230\004\145\023\022\004\145\014\153\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\007r\011j\012F\020\238\004\145\004\145\n\253\004^\001\222\014\153\004\145\004\145\004\145\004\145\004\145\002>\004\145\004\145\004\145\n\134\004\145\011r\t\158\012N\004\145\002b\004\145\004\145\002B\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\004\145\nf\004\145\004\145\004\145\004\145\004\145\004\129\000\242\nz\002.\004\129\004\129\004\129\004\129\007\129\004\129\004\129\004\129\004\129\001\226\004\129\004\129\000\242\n\026\004\129\004\129\004\129\005\026\004\129\004\129\004\129\004\129\017\234\004\129\005\166\004\129\004\129\004\129\004\129\004\129\004\129\004\129\004\129\b\177\004\129\000\242\004\129\005\030\004\129\004\129\004\129\004\129\004\129\004\129\004\129\004\129\n\253\004\129\004\129\002\246\004\129\002\242\004\130\004\129\004\129\004\129\0111\004\006\004\129\004\129\004\129\004\129\004\129\004\129\004\129\n\138\004\129\002f\004\129\020\246\004\129\004\129\004\129\004\129\004\129\004\129\004\129\004\129\004\129\004\129\004\129\001^\011j\012F\004\017\004\129\004\129\004u\0056\005:\028*\004\129\004\129\004\129\004\129\004\129\001\241\004\129\004\129\004\129\0226\004\129\011r\tj\012N\004\129\002\246\004\129\004\129\004\130\004\129\004\129\004\129\004\129\004\129\004\129\004\129\004\129\004\129\004\129\004\129\004\129\004\129\000\n\004\129\004\129\004\129\004\129\004\129\012\005\0252\nz\000\242\012\005\012\005\012\005\012\005\003.\012\005\012\005\012\005\012\005\001\241\012\005\012\005\000\242\012\130\012\005\012\005\012\005\003f\012\005\012\005\012\005\012\005\001\241\012\005\012\134\012\005\012\005\012\005\012\005\012\005\012\005\012\005\012\005\004u\012\005\025:\012\005\003\226\012\005\012\005\012\005\012\005\012\005\012\005\012\005\012\005\007i\012\005\012\005\012\166\012\005\005\149\017\022\012\005\012\005\012\005\004\162\004\178\012\005\012\005\012\005\012\005\012\005\012\005\012\005\022:\012\005\002J\012\005\004N\012\005\012\005\012\005\012\005\012\005\012\005\012\005\012\005\012\005\012\005\012\005\004\150\012\005\012\005\022J\012\005\012\005\012\178\002N\004\214\031:\012\005\012\005\012\005\012\005\012\005\000\242\012\005\012\005\012\005\003\030\012\005\012\005\t\158\012\005\012\005\005\217\012\005\012\005\005\217\012\005\012\005\012\005\012\005\012\005\012\005\012\005\012\005\012\005\012\005\012\005\012\005\012\005\n\146\001\194\012\005\012\005\012\005\012\005\012\021\005\149\005\217\003\030\012\021\012\021\012\021\012\021\004\154\012\021\012\021\012\021\012\021\004\166\012\021\012\021\003\030\n\026\012\021\012\021\012\021\"C\012\021\012\021\012\021\012\021\005\217\012\021\003*\012\021\012\021\012\021\012\021\012\021\012\021\012\021\012\021\tf\012\021\000\242\012\021\002\202\012\021\012\021\012\021\012\021\012\021\012\021\012\021\012\021\002\246\012\021\012\021\004\130\012\021\004\174\017:\012\021\012\021\012\021\0036\004\218\012\021\012\021\012\021\012\021\012\021\012\021\012\021\005\217\012\021\004\222\012\021\003r\012\021\012\021\012\021\012\021\012\021\012\021\012\021\012\021\012\021\012\021\012\021\024\154\012\021\012\021\011\174\012\021\012\021\004f\004\242\005\006\028r\012\021\012\021\012\021\012\021\012\021\001\194\012\021\012\021\012\021\024\166\012\021\012\021\t\158\012\021\012\021\002\246\012\021\012\021\004\130\012\021\012\021\012\021\012\021\012\021\012\021\012\021\012\021\012\021\012\021\012\021\012\021\012\021\011B\000\242\012\021\012\021\012\021\012\021\012\r\011\178\011\206\004=\012\r\012\r\012\r\012\r\003\150\012\r\012\r\012\r\012\r\002\150\012\r\012\r\b!\n\026\012\r\012\r\012\r\012\190\012\r\012\r\012\r\012\r\004j\012\r\016B\012\r\012\r\012\r\012\r\012\r\012\r\012\r\012\r\004r\012\r\000\242\012\r\002\214\012\r\012\r\012\r\012\r\012\r\012\r\012\r\012\r\t\162\012\r\012\r\000\242\012\r\025\146\017^\012\r\012\r\012\r\004\006\005\241\012\r\012\r\012\r\012\r\012\r\012\r\012\r\b\161\012\r\005\014\012\r\b\161\012\r\012\r\012\r\012\r\012\r\012\r\012\r\012\r\012\r\012\r\012\r\t\222\012\r\012\r\016B\012\r\012\r\005\018\005\246\b\170\004\234\012\r\012\r\012\r\012\r\012\r\003.\012\r\012\r\012\r\004\246\012\r\012\r\005\241\012\r\012\r\016J\012\r\012\r\001\194\012\r\012\r\012\r\012\r\012\r\012\r\012\r\012\r\012\r\012\r\012\r\012\r\012\r\001\241\002\178\012\r\012\r\012\r\012\r\011\249\028J\006\018\006&\011\249\011\249\011\249\011\249\003J\011\249\011\249\011\249\011\249\003:\011\249\011\249\006V\b\129\011\249\011\249\011\249\000\n\011\249\011\249\011\249\011\249\002\150\011\249\004\230\011\249\011\249\011\249\011\249\011\249\011\249\011\249\011\249\021R\011\249\028R\011\249\005\158\011\249\011\249\011\249\011\249\011\249\011\249\011\249\011\249\007a\011\249\011\249\001\241\011\249\005\002\017\134\011\249\011\249\011\249\000\242\003\178\011\249\011\249\011\249\011\249\011\249\011\249\011\249\005\217\011\249\t\174\011\249\000\242\011\249\011\249\011\249\011\249\011\249\011\249\011\249\011\249\011\249\011\249\011\249\004\250\011\249\011\249\t\182\011\249\011\249\011\001\006\198\006\218\t\210\011\249\011\249\011\249\011\249\011\249\000\242\011\249\011\249\011\249\003\030\011\249\011\249\t\158\011\249\011\249\028\214\011\249\011\249\024\006\011\249\011\249\011\249\011\249\011\249\011\249\011\249\011\249\011\249\011\249\011\249\011\249\011\249\022B\000\242\011\249\011\249\011\249\011\249\012\001\000\242\028\222\016B\012\001\012\001\012\001\012\001\006\006\012\001\012\001\012\001\012\001\003\209\012\001\012\001\b-\n\026\012\001\012\001\012\001\tf\012\001\012\001\012\001\012\001\t\149\012\001\t\250\012\001\012\001\012\001\012\001\012\001\012\001\012\001\012\001\b.\012\001\000\242\012\001\006A\012\001\012\001\012\001\012\001\012\001\012\001\012\001\012\001\011\001\012\001\012\001\000\242\012\001\029j\017\170\012\001\012\001\012\001\0076\007J\012\001\012\001\012\001\012\001\012\001\012\001\012\001\b\141\012\001\005\026\012\001\b\141\012\001\012\001\012\001\012\001\012\001\012\001\012\001\012\001\012\001\012\001\012\001\021\158\012\001\012\001\005\217\012\001\012\001\005\030\007\162\007\182\000\242\012\001\012\001\012\001\012\001\012\001\005\170\012\001\012\001\012\001\b\169\012\001\012\001\t\158\012\001\012\001\025\002\012\001\012\001\005N\012\001\012\001\012\001\012\001\012\001\012\001\012\001\012\001\012\001\012\001\012\001\012\001\012\001\022\138\011^\012\001\012\001\012\001\012\001\011\253\000\242\b\130\b\150\011\253\011\253\011\253\011\253\006\"\011\253\011\253\011\253\011\253\005\174\011\253\011\253\n\186\n\026\011\253\011\253\011\253\005R\011\253\011\253\011\253\011\253\005\217\011\253\006\214\011\253\011\253\011\253\011\253\011\253\011\253\011\253\011\253\000\242\011\253\000\242\011\253\nz\011\253\011\253\011\253\011\253\011\253\011\253\011\253\011\253\tF\011\253\011\253\000\242\011\253\000\242\017\206\011\253\011\253\011\253\b\182\b\202\011\253\011\253\011\253\011\253\011\253\011\253\011\253\002f\011\253\0166\011\253\000\242\011\253\011\253\011\253\011\253\011\253\011\253\011\253\011\253\011\253\011\253\011\253\005\250\011\253\011\253\b6\011\253\011\253\"c\bm\b\238\t\002\011\253\011\253\011\253\011\253\011\253\002\002\011\253\011\253\011\253\029\242\011\253\011\253\t\158\011\253\011\253\005\254\011\253\011\253\001\194\011\253\011\253\011\253\011\253\011\253\011\253\011\253\011\253\011\253\011\253\011\253\011\253\011\253\022\162\t\254\011\253\011\253\011\253\011\253\012\t\t\030\t6\004E\012\t\012\t\012\t\012\t\007F\012\t\012\t\012\t\012\t\001\210\012\t\012\t\000\242\n\026\012\t\012\t\012\t\n\218\012\t\012\t\012\t\012\t\002\150\012\t\007\178\012\t\012\t\012\t\012\t\012\t\012\t\012\t\012\t\006\n\012\t\000\242\012\t\001\210\012\t\012\t\012\t\012\t\012\t\012\t\012\t\012\t\016R\012\t\012\t\000\242\012\t\011%\017\250\012\t\012\t\012\t\000\242 \214\012\t\012\t\012\t\012\t\012\t\012\t\012\t\029\246\012\t\t\234\012\t\000\242\012\t\012\t\012\t\012\t\012\t\012\t\012\t\012\t\012\t\012\t\012\t\006\022\012\t\012\t\n*\012\t\012\t\007\210\t>\021\250\016\146\012\t\012\t\012\t\012\t\012\t\000\242\012\t\012\t\012\t\006\026\012\t\012\t\t\158\012\t\012\t\025\170\012\t\012\t\006B\012\t\012\t\012\t\012\t\012\t\012\t\012\t\012\t\012\t\012\t\012\t\012\t\012\t\022\182\r\150\012\t\012\t\012\t\012\t\012\025\002\178\t\226\000\242\012\025\012\025\012\025\012\025\b\146\012\025\012\025\012\025\012\025\n\182\012\025\012\025\011%\n\026\012\025\012\025\012\025\006\190\012\025\012\025\012\025\012\025\b\198\012\025\b\254\012\025\012\025\012\025\012\025\012\025\012\025\012\025\012\025\025\242\012\025\000\242\012\025\016\014\012\025\012\025\012\025\012\025\012\025\012\025\012\025\012\025\020\170\012\025\012\025\000\242\012\025\003\150\018\030\012\025\012\025\012\025\012*\012:\012\025\012\025\012\025\012\025\012\025\012\025\012\025\025\178\012\025\000\242\012\025\000\242\012\025\012\025\012\025\012\025\012\025\012\025\012\025\012\025\012\025\012\025\012\025\006\202\012\025\012\025\006\206\012\025\012\025\012\254\r\014\rV\rf\012\025\012\025\012\025\012\025\012\025\000\242\012\025\012\025\012\025\025b\012\025\012\025\t\158\012\025\012\025\007\n\012\025\012\025\020\162\012\025\012\025\012\025\012\025\012\025\012\025\012\025\012\025\012\025\012\025\012\025\012\025\012\025\022\206\t\165\012\025\012\025\012\025\012\025\012\017\015\198\015\214\016B\012\017\012\017\012\017\012\017\016\190\012\017\012\017\012\017\012\017\002\138\012\017\012\017 \238\n\026\012\017\012\017\012\017\029\130\012\017\012\017\012\017\012\017\t\158\012\017\007:\012\017\012\017\012\017\012\017\012\017\012\017\012\017\012\017\020R\012\017\000\242\012\017\011e\012\017\012\017\012\017\012\017\012\017\012\017\012\017\012\017\011M\012\017\012\017\000\242\012\017\011)\018B\012\017\012\017\012\017\016\174\016\194\012\017\012\017\012\017\012\017\012\017\012\017\012\017\n\026\012\017\018\206\012\017\005\166\012\017\012\017\012\017\012\017\012\017\012\017\012\017\012\017\012\017\012\017\012\017\023\154\012\017\012\017\007>\012\017\012\017\000\242\019\166\019\182\007~\012\017\012\017\012\017\012\017\012\017\000\242\012\017\012\017\012\017\025\158\012\017\012\017\002\138\012\017\012\017\021&\012\017\012\017\025\178\012\017\012\017\012\017\012\017\012\017\012\017\012\017\012\017\012\017\012\017\012\017\012\017\012\017\"s\n>\012\017\012\017\012\017\012\017\012a\005\217\005\217\"#\012a\012a\012a\012a\019\234\012a\012a\012a\012a\n\182\012a\012a\011)\005\217\012a\012a\012a\007\142\012a\012a\012a\012a\000\242\012a\005\170\012a\012a\012a\012a\012a\012a\012a\012a\021b\012a\025>\012a\004]\012a\012a\012a\012a\012a\012a\012a\012a\011Q\012a\012a\019\242\012a\002\017\018^\012a\012a\012a\028\178\000\242\012a\012a\012a\012a\012a\012a\012a\024\250\012a\007\138\012a\023\222\012a\012a\012a\012a\012a\012a\012a\012a\012a\012a\012a\025j\012a\012a\007m\012a\012a\025\"\028V\0256\000\242\012a\012a\012a\012a\012a\028\226\012a\012a\012a\007q\012a\012a\t\158\012a\012a\007\166\012a\012a\007\170\012a\012a\012a\012a\012a\012a\012a\012a\012a\012a\012a\012a\012a\031&\029\018\012a\012a\012a\012a\004}\t\161\025\214\000\242\004}\004}\004}\004}\007e\004}\004}\004}\004}\028\146\004}\004}\t\153\n\026\004}\004}\004}\007\250\004}\004}\004}\004}\n>\004}\003\030\004}\004}\004}\004}\004}\004}\004}\004}\t\149\004}\000\242\004}\b\018\004}\004}\004}\004}\004}\004}\004}\004}\028N\004}\004}\bJ\004}\b\134\011v\004}\004}\004} \210\014\237\004}\004}\004}\004}\004}\004}\004}\028\218\004}\019\134\004}\019\146\004}\004}\004}\004}\004}\004}\004}\004}\004}\004}\004}!\218\011j\012F\b\138\004}\004}\031F\031Z\014\249\b\174\004}\004}\004}\004}\004}\029\158\004}\004}\004}\031V\004}\011r\t\158\012N\004}\029v\004}\004}\b\186\004}\004}\004}\004}\004}\004}\004}\004}\004}\004}\004}\004}\004}!z\004}\004}\004}\004}\004}\002!\n>\029\214\b\190\002!\002\174\002\178\002!\031~\002~\002!\012\250\002!\016\014\004\182\002!\000\242\n\026\002!\002!\002! \226\002!\002!\002!\001\198\n>\r\018\b\230\004\186\002!\002!\002!\002!\002!\r\026\002!\b\242\004\190\000\242\005\146\b\246\002!\002!\002!\002!\002!\005\198\005\202\002!\t\"\005\218\001\178\000\242\002!\031\182\031\198\002!\002!\002\166\t2\tr\005\226\002!\002!\002!\n\174\n\178\n\190\t\146\r\"\012\186\n\198\012\202\n\230\006f\002!\002!\002!\002!\002!\002!\002!\002!\002!\n\018\011j\012F\001\194\002!\002!\0056\024R\nn\011\202\006r\006v\002!\002!\002!\001\194\002!\002!\002!\005\170\002!\r*\024b\017v\002!\011\226\002!\002!\005\241\002!\002!\002!\002!\002!\002!\006z\n\234\002!\002!\002!\011\002\003J\012\014\"S\002!\002!\002!\002!\012M R\n>\012.\012M\002\174\002\178\012M\0126\002~\012M\012M\012M!F\004\182\012M\001\006\001\178\012M\012M\012M \134\012M\012M\012M\001\198\002\214\012M\012J\004\186\012M\012M\012M\012M\012M\012M\012M\012\138\004\190\012\214\005\146\r\002\012M\012M\012M\012M\012M\005\198\005\202\012M\r\n\005\218\001\178\r\022\012M\rZ\r.\012M\012M\002\166\rb\015\202\005\226\012M\012M\012M\n\174\n\178\n\190\015\210\012M\017.\n\198\017R\n\230\006f\012M\012M\012M\012M\012M\012M\012M\012M\012M\016.\012M\012M\016^\012M\012M\016v\006m\016\178\016\182\006r\006v\012M\012M\012M\017\018\012M\012M\012M\t\254\012M\012M\0176\012M\012M\017Z\012M\012M\017\130\012M\012M\012M\012M\012M\012M\006z\n\234\012M\012M\012M\011\002\003J\017\166\017\202\012M\012M\012M\012M\012I\017\246\018\026\018>\012I\002\174\002\178\012I\018\158\002~\012I\012I\012I\018\166\004\182\012I!\222\001\210\012I\012I\012I\018\174\012I\012I\012I\001\198\018\186\012I\018\198\004\186\012I\012I\012I\012I\012I\012I\012I\018\218\004\190\018\230\005\146\018\242\012I\012I\012I\012I\012I\005\198\005\202\012I\019\022\005\218\001\178\0196\012I\019\130\017\238\012I\012I\002\166\019\142\019\154\005\226\012I\012I\012I\n\174\n\178\n\190\019\170\012I\018\018\n\198\0186\n\230\006f\012I\012I\012I\012I\012I\012I\012I\012I\012I\019\178\012I\012I\020\006\012I\012I\020\022\020&\0202\020b\006r\006v\012I\012I\012I\020~\012I\012I\012I\020\134\012I\012I\020\178\012I\012I\020\186\012I\012I\021\002\012I\012I\012I\012I\012I\012I\006z\n\234\012I\012I\012I\011\002\003J\021*\0062\012I\012I\012I\012I\002i\021F\021J\021r\002i\002\174\002\178\002i\021\134\002~\002i\012\250\002i\021\166\004\182\002i\021\182\021\202\002i\002i\002i\007!\002i\002i\002i\001\198\021\246\r\018\022\030\004\186\002i\002i\002i\002i\002i\r\026\002i\022R\004\190\022Z\005\146\022f\002i\002i\002i\002i\002i\005\198\005\202\002i\023\146\005\218\001\178\023\166\002i\023\170\018\210\002i\002i\002\166\007\246\024j\005\226\002i\002i\002i\n\174\n\178\n\190\007!\r\"\018\222\n\198\018\234\n\230\006f\002i\002i\002i\002i\002i\002i\002i\002i\002i\024\130\024V\002i\007!\002i\002i\025\n\025\014\025F\025J\006r\006v\002i\002i\002i\025r\002i\002i\002i\025v\002i\001\241\001\241\005\217\002i\005\217\002i\002i\005\217\002i\002i\002i\002i\002i\002i\006z\n\234\002i\002i\002i\011\002\003J\005\217\005\217\002i\002i\002i\002i\005\217\000\n\005\217\005\217\005\217\005\217\005\217\005\217\005\217\025\142\005\217\026\006\005\217\005\217\005\217\005\217\005\217\005\217\005\217\0266\005\217\005\217\005\217\005\217\005\217\005\217\005\217\005\217\005\217\005\217\005\217\005\217\026:\001\241\005\217\005\217\000\242\005\217\005\217\005\217\005\217\005\217\000\242\005\217\005\217\005\217\005\217\005\217\005\217\005\217\005\217\005\217\005\217\005\217\000\242\005\217\005\217\005\217\005\217\005\217\005\217\005\217\005\217\005\217\000\242\005\217\005\217\005\217\005\217\005\217\026^\005\217\026b\005\217\005\217\005\217\005\217\026r\026\130\005\217\005\217\005\217\005\217\005\217\005\217\026\142\005\217\000\242\005\217\005\217\005\217\005\217\005\217\005\217\005\217\005\217\005\217\005\217\026\194\026\198\005\217\005\217\028\026\005\217\014]\014]\005\217\027\022\014]\027>\027B\005\217\027R\027\162\005\217\005\217\027\194\028\002\005\217\005\217\005\217\b2\002\178\005\217\005\217\005\217\005\217\028&\000\129\005\217\000\129\000\129\000\129\000\129\000\129\000\129\000\129\0286\000\129\006E\000\129\000\129\028^\028b\000\129\000\129\028n\029>\000\129\000\129\000\242\000\129\000\129\000\129\000\129\028~\000\129\028\154\000\129\000\129\014e\014e\000\129\000\129\014e\000\129\000\129\000\129\005\158\000\129\005\170\000\129\000\129\000\129\000\129\000\129\028\170\000\129\000\129\000\129\000\129\000\129\005\170\028\190\014]\000\129\000\129\001\241\028\234\000\129\000\129\024\230\000\129\000\129\000\129\000\129\000\129\000\129\004-\000\129\004\138\000\129\000\129\000\129\000\129\028\238\000\242\000\129\024\242\004-\000\129\028\250\000\129\029\n\000\129\006\174\029\030\000\n\000\129\000\129\000\129\000\129\000\129\000\129\000\129\000\129\006*\011\026\001\178\000\129\b\006\000\129\0066\029\254\004-\000\226\001\241\t\137\020\n\000\129\014e\t\137\020\026\020*\0206\000\129\000\129\000\129\000\129\001\241\001\241\000\129\000\129\000\129\000\129\n!\030\n\014\229\030:\n!\n\173\n\173\n!\030^\n\173\n!\030\134\n!\030\250\n\173\n!\014\229\004-\n!\n!\n!\031\002\n!\n!\n!\n\173\031\026\031>\t\137\n\173\n!\n!\n!\n!\n!\n\202\n!\031J\n\173\002\178\n\173\031N\n!\n!\n!\n!\n!\n\173\n\173\n!\031\138\n\173\n\173\t\137\n!\031\174\011i\n!\n!\n\173\031\186\031\194\n\173\n!\n!\n!\n\173\n\173\n\173\031\234\031\246\n\173\n\173\n\173\n\173\n\173\n!\n!\n!\n!\n!\n!\n!\n!\n!\005\158\011j\012F\b\137\n!\n!\003\222\b\137 \002 f\n\173\n\173\n!\n!\n! z\n!\n!\n! \170\n!\011r \178\012N\n! \254\n!\n!!&\n!\n!\n!\n!\n!\n!\n\173\n\173\n!\n!\n!\n\173\n\173\n6!^\n!\n!\n!\n!\002a\000\242!r\n>\002a\002\174\002\178\002a!\138\002~\002a\nB\002a!\150\004\182\002a!\158!\167\002a\002a\002a!\183\002a\002a\002a\001\198!\202!\230\"\003\004\186\002a\002a\002a\002a\002a\b\137\002a\"\019\004\190\"/\005\146\020>\002a\002a\002a\002a\002a\005\198\005\202\002a\"\131\005\218\n\194\"\159\002a\"\219\"\239\002a\002a\002\166\"\247#3\005\226\002a\002a\002a\n\174\n\178\n\190#;\000\000\000\000\n\198\023^\n\230\006f\002a\002a\002a\002a\002a\002a\002a\002a\002a\000\000\011j\012F\b\149\002a\002a\005\145\b\149\tu\000\000\006r\006v\002a\002a\002a\001\194\002a\002a\002a\000\000\002a\011r\000\000\012N\002a\000\000\002a\002a \154\002a\002a\002a\002a\002a\002a\006z\n\234\002a\002a\002a\011\002\003J\011j\012F\002a\002a\002a\002a\t\249\000\000\000\000\000\242\t\249\000\000\000\000\t\249\000\000\000\000\t\249\000\000\t\249\002\150\011r\t\249\012N\000\000\t\249\t\249\t\249\000\000\t\249\t\249\t\249\b\149\000\000\000\000\000\000\000\000\t\249\t\249\t\249\t\249\t\249\000\000\t\249\005\145\005\138\005Z\002\178\000\000\t\249\t\249\t\249\t\249\t\249\005^\003\178\t\249\012\"\006q\007\154\000\000\t\249\007^\011\186\t\249\t\249\001\198\r\130\000\000\007\214\t\249\t\249\t\249\007\222\rB\011=\000\000\011=\011=\011j\012F\000\000\000\000\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\005\134\011j\012F\000\000\t\249\t\249\000\000\011r\002\166\012N\000\000\000\000\t\249\t\249\t\249\019\158\t\249\t\249\t\249\000\000\t\249\011r\000\000\012N\t\249\004Y\t\249\t\249\000\000\t\249\t\249\t\249\t\249\t\249\t\249\014\141\004Y\t\249\t\249\t\249\t^\001\241\001\241\022\238\t\249\t\249\t\249\t\249\002u\000\000\000\000\000\000\002u\000\000\000\000\002u\014\141\001\241\002u\002\026\002u\004Y\002\030\002u\000\000\000\000\002u\002u\002u\000\n\002u\002u\002u\000\000\000\000\002*\000\000\012\"\002u\002u\002u\002u\002u\000\000\002u\011=\000\000\r\130\022~\000\000\002u\002u\002u\002u\002u\011j\012F\002u\000\000\004Y\000\000\001\241\002u\000\000\000\000\002u\002u\000\000\000\000\000\000\0026\002u\002u\002u\000\000\011r\001\241\012N\000\000\001\241\000\000\000\000\000\000\000\000\002u\002u\002u\002u\002u\002u\002u\002u\002u\000\000\011j\012F\000\000\002u\002u\007\150\000\000\000\000\000\000\000\n\000\000\002u\002u\002u\000\000\002u\002u\002u\000\000\002u\011r\002:\012N\002u\004U\002u\002u\001\241\002u\002u\002u\002u\002u\002u\000\000\004U\002u\002u\002u\000\000\000\000\001\241\001\241\002u\002u\002u\002u\002q\012\"\022\130\000\242\002q\022\142\000\000\002q\000\000\000\000\002q\r\130\002q\004U\002\002\002q\000\000\002~\002q\002q\002q\000\000\002q\002q\002q\001\241\006\149\000\000\000\000\000\000\002q\002q\002q\002q\002q\000\000\002q\012f\000\000\006\149\000\000\000\000\002q\002q\002q\002q\002q\011j\012F\002q\b\002\004U\007\154\000\000\002q\007^\007\202\002q\002q!\194\001\210\000\000\007\214\002q\002q\002q\007\222\011r\000\000\012N\000\000\000\000\006\149\000\000\021.\000\000\002q\002q\002q\002q\002q\002q\002q\002q\002q\000\000\011j\012F\000\000\002q\002q\000\000\000\000\000\000\000\000\000\242\000\000\002q\002q\002q\000\000\002q\002q\002q\006v\002q\011r\006\149\012N\002q\006\149\002q\002q\000\000\002q\002q\002q\002q\002q\002q\000\000\000\000\002q\002q\002q\000\000\003.\000\000\000\000\002q\002q\002q\002q\n\r\000\000\000\000\t5\n\r\002\162\000\000\n\r\000\000\000\000\n\r\007\154\n\r\000\000\007^\n\r\000\000\000\000\n\r\n\r\n\r\007\214\n\r\n\r\n\r\007\222\000\000\000\000\000\000\000\000\n\r\n\r\n\r\n\r\n\r\000\000\n\r\t5\003v\003:\000\000\000\000\n\r\n\r\n\r\n\r\n\r\002\250\003\006\n\r\000\000\000\000\t5\003\018\n\r\t5\011V\n\r\n\r\000\000\000\000\000\000\t5\n\r\n\r\n\r\t5\014a\014a\b\133\000\000\014a\000\000\b\133\000\000\000\000\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\000\000\011j\012F\000\000\n\r\n\r\000\000\000\000\000\000\000\000\000\000\000\000\n\r\n\r\n\r\000\000\n\r\n\r\n\r\000\000\n\r\011r\000\000\012N\n\r\0045\n\r\n\r\000\242\n\r\n\r\n\r\n\r\n\r\n\r\000\000\0045\n\r\n\r\n\r\000\000\001\241\001\241\024.\n\r\n\r\n\r\n\r\n5\t\133\000\000\012\173\n5\t\133\000\000\n5\000\000\001\241\n5\000\000\n5\0045\014a\n5\b\133\000\000\n5\n5\n5\000\n\n5\n5\n5\000\000\000\000\000\000\000\000\000\000\n5\n5\n5\n5\n5\006J\n5\012\173\000\000\000\000\000\000\000\000\n5\n5\n5\n5\n5\t\133\000\000\n5\000\000\0045\012\173\001\241\n5\012\173\016\138\n5\n5\000\000\000\000\000\000\012\173\n5\n5\n5\012\173\000\000\021\030\n\218\000\000\002~\t\133\000\000\000\000\000\000\n5\n5\n5\n5\n5\n5\n5\n5\n5\000\000\011j\012F\000\000\n5\n5\000\000\000\000\000\000\000\000\000\000\000\000\n5\n5\n5\000\000\n5\n5\n5\000\000\n5\011r\000\000\012N\n5\003\222\n5\n5\021\"\n5\n5\n5\n5\n5\n5\000\000\005\217\n5\n5\n5\001\194\000\000\000\000\021.\n5\n5\n5\n5\002e \190\000\000\000\000\002e\000\000\005\170\002e\000\000\000\000\002e\000\000\002e\005\217\002\178\002e\000\000\002~\002e\002e\002e\000\000\002e\002e\002e\006v\000\000\t\158\000\000\014U\002e\002e\002e\002e\002e\000\000\002e\005\217\002\150\000\000\000\000\000\000\002e\002e\002e\002e\002e\022\150\000\000\002e\000\242\011\026\020n \n\002e\000\000\000\000\002e\002e\023\210\000\000\000\000\020\n\002e\002e\002e\020\026\020*\0206\000\000\n\026\000\000\000\000\003\178\021.\000\000\002e\002e\002e\002e\002e\002e\002e\002e\002e\000\000\011j\012F\000\000\002e\002e\031r\000\242\000\000\000\000\000\000\000\000\002e\002e\002e\000\000\002e\002e\002e\006v\002e\011r\000\000\012N\002e\028\138\002e\002e\000\000\002e\002e\002e\002e\002e\002e\000\000\000\000\002e\002e\002e\000\000\000\000\000\000\000\000\002e\002e\002e\002e\n]\000\000\000\000\000\242\n]\t\158\000\000\n]\000\000\022\154\n]\000\000\n]\000\000\000\000\n]\000\000\000\000\n]\n]\n]\000\000\n]\n]\n]\022\194\000\000\000\000\000\000\000\000\n]\n]\n]\n]\n]\000\000\n]\000\000\000\000\"\143\000\000\000\000\n]\n]\n]\n]\n]\000\000\n\026\n]\000\000\000\000\007\154\000\000\n]\007^\031v\n]\n]\000\000\000\000\000\000\007\214\n]\n]\n]\007\222\000\000\000\000\000\000\000\242\000\000\000\000\000\000\000\000\000\000\n]\n]\n]\n]\n]\n]\n]\n]\n]\000\000\011j\012F\000\000\n]\n]\000\000\000\000\n\233\000\000\000\000\000\000\n]\n]\n]\000\000\n]\n]\n]\000\000\n]\011r\000\000\012N\n]\000\000\n]\n]\000\000\n]\n]\n]\n]\n]\n]\022\198\000\000\n]\n]\n]\000\000\000\000\000\000\000\000\n]\n]\n]\n]\nI\000\000\000\000\n\233\nI\000\000\000\000\nI\000\000\000\000\nI\000\000\nI\000\000\000\000\nI\000\000\000\000\nI\nI\nI\000\000\nI\nI\nI\000\000\000\000\000\000\n\233\000\000\nI\nI\nI\nI\nI\000\000\nI\000\000\000\000\000\000\000\000\000\000\nI\nI\nI\nI\nI\000\000\000\000\nI\b\026\000\000\000\000\011Y\nI\b\177\000\000\nI\nI\b\177\000\000\000\000\n\233\nI\nI\nI\003\222\000\000\000\000\n\233\000\000\000\000\000\000\000\000\000\000\000\000\nI\nI\nI\nI\nI\nI\nI\nI\nI\000\000\011j\012F\000\000\nI\nI\000\000\000\000\000\000\000\000\000\000\000\242\nI\nI\nI\000\000\nI\nI\nI\000\000\nI\011r\000\000\012N\nI\000\000\nI\nI\000\000\nI\nI\nI\nI\nI\nI\000\000\000\000\nI\nI\nI\000\000\000\000\000\000\000\000\nI\nI\nI\nI\000\006\000\000\b\177\bu\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\007\154\004\182\001\n\007^\000\000\000\000\002\246\002\138\011Y\004\130\007\214\bu\001\198\000\000\007\222\000\000\005\222\001\018\011\"\011&\001\030\001\"\000\000\000\000\000\000\004\190\000\000\005\146\000\000\022&\000\000\011F\011J\bu\005\198\005\202\000\000\005\206\005\218\005\230\011N\tJ\000\242\000\000\0012\bu\002\166\000\000\000\000\005\226\bu\bu\000\242\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\bu\bu\0016\001:\001>\001B\001F\000\000\000\000\011z\001J\000\000\000\000\005E\001N\000\000\011\134\011\158\012V\006r\006v\000\000\000\000\001R\000\000\000\000\bu\000\000\005E\000\000\001V\bb\000\000\000\000\002\178\000\000\bu\000\000\005E\000\000\001\146\007\138\005E\000\000\006z\n\234\000\000\001\150\000\000\019\254\003J\012j\030\006\001\158\000\006\001\162\001\166\001\153\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\001\n\000\000\000\000\000\000\000\000\011\030\000\000\000\000\000\000\001\153\001\198\012R\005\158\000\000\005\222\001\018\011\"\011&\001\030\001\"\000\000\000\000\000\000\004\190\000\000\005\146\018\178\011*\018\190\011F\011J\001\153\005\198\005\202\000\000\005\206\005\218\005\230\011N\tJ\tI\000\000\0012\001\153\002\166\000\000\000\000\005\226\001\153\001\153\000\242\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\001\153\001\153\0016\001:\001>\001B\001F\000\000\000\000\011z\001J\b\165\000\000\tI\001N\b\165\011\134\011\158\012V\006r\006v\004\182\000\000\001R\000\000\000\000\001\153\000\000\tI\000\000\001V\007^\000\000\000\000\000\000\000\000\001\153\000\000\tI\005\n\001\146\007\246\tI\000\000\006z\n\234\000\000\001\150\000\000\019\254\003J\012j\005\022\001\158\002\025\001\162\001\166\000\242\002\025\000\000\000\000\002\025\000\000\000\000\002\025\000\000\002\025\000\000\000\000\002\025\000\000\000\000\002\025\002\025\002\025\000\000\002\025\002\025\002\025\000\000\000\000\000\000\006f\000\000\002\025\002\025\002\025\002\025\002\025\000\000\002\025\000\000\000\000\be\be\000\000\002\025\002\025\002\025\002\025\002\025\000\000\006r\002\025\000\000\000\000\007\154\000\000\002\025\007^\003\n\002\025\002\025\be\be\be\007\214\002\025\002\025\002\025\007\222\000\000\000\000\be\000\000\000\000\000\000\006z\000\000\000\000\002\025\002\025\002\025\002\025\002\025\002\025\002\025\002\025\002\025\be\be\002\025\000\000\002\025\002\025\be\000\000\be\be\be\000\000\002\025\002\025\002\025\be\002\025\002\025\002\025\000\000\002\025\000\000\000\000\000\000\002\025\000\000\002\025\002\025\000\000\012\"\002\025\002\025\002\025\002\025\002\025\000\000\be\002\025\002\025\r\130\000\000\000\000\000\000\000\000\002\025\002\025\002\025\002\025\002m\000\000\000\000\n\129\002m\000\000\000\000\002m\000\000\000\000\002m\000\000\002m\000\000\000\000\002m\000\000\000\000\002m\002m\002m\000\000\002m\002m\002m\002\254\000\000\be\000\000\000\000\002m\002m\002m\002m\002m\000\000\002m\n\129\000\000\001\190\001\194\000\000\002m\002m\002m\002m\002m\000\000\000\000\002m\000\000\000\000\bz\000\000\002m\n\129\0062\002m\002m\001\198\001\238\001\218\n\129\002m\002m\002m\n\129\000\000\000\000\001\230\000\000\000\000\000\000\000\000\000\000\000\000\002m\002m\002m\002m\002m\002m\002m\002m\002m\001\234\002\142\002m\000\000\002m\002m\002\154\000\000\002\166\002\250\003\006\000\000\002m\002m\002m\003\018\002m\002m\002m\000\000\002m\000\000\000\000\000\000\002m\000\000\002m\002m\000\000\rN\002m\002m\002m\002m\002m\000\000\003\022\002m\002m\002m\000\000\000\000\000\000\000\000\002m\002m\002m\002m\t\245\000\000\000\000\000\242\t\245\000\000\000\000\t\245\000\000\000\000\t\245\000\000\t\245\000\000\000\000\t\245\000\000\000\000\t\245\t\245\t\245\000\000\t\245\t\245\t\245\003F\000\000\003J\000\000\000\000\t\245\t\245\t\245\t\245\t\245\000\000\t\245\005\005\000\000\001\190\001\194\000\000\t\245\t\245\t\245\t\245\t\245\000\000\000\000\t\245\000\000\000\000\005\005\000\000\t\245\bb\000\000\t\245\t\245\001\198\001\238\001\218\005\005\t\245\t\245\t\245\005\005\000\000\021\030\001\230\000\000\002~\025\018\000\000\000\000\000\000\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\001\234\026f\t\245\025\138\t\245\t\245\002\154\000\000\002\166\002\250\003\006\000\000\t\245\t\245\t\245\026v\t\245\t\245\t\245\000\000\t\245\000\000\000\000\000\000\t\245\000\000\t\245\t\245\021\"\012\"\t\245\t\245\t\245\t\245\t\245\000\000\003\022\t\245\t\245\r\130\000\000\000\000\000\000\021.\t\245\t\245\t\245\t\245\003\161\000\000\000\000\000\000\003\161\000\000\002\178\003\161\000\000\000\000\003\161\000\000\003\161\000\000\000\000\r\166\000\000\000\000\003\161\r\250\003\161\000\000\003\161\003\161\003\161\006v\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\014\134\000\000\003\161\000\000\000\000\015\029\015\029\000\000\003\161\003\161\014\158\014\182\003\161\000\000\000\000\003\161\000\000\017z\005\158\027n\003\161\000\000\000\000\014\206\003\161\015\029\015\029\015\029\t\178\003\161\003\161\000\242\017\158\000\000\017\194\015\029\000\000\000\000\000\000\000\000\000\000\000\000\003\161\003\161\r\190\014>\014\230\014\254\015.\003\161\003\161\015\029\015\029\003\161\000\000\003\161\015F\015\029\000\000\015\029\015\029\015\029\000\000\003\161\003\161\015^\015\029\003\161\003\161\003\161\000\000\003\161\000\000\000\000\000\000\003\161\000\000\003\161\003\161\000\000\015\190\003\161\015\246\015\022\003\161\003\161\000\000\015\029\003\161\015v\003\161\000\000\000\000\000\000\000\000\003\161\003\161\015\142\015\166\002\205\000\000\000\000\000\242\002\205\000\000\000\000\002\205\000\000\000\000\002\205\000\000\002\205\000\000\000\000\002\205\000\000\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\002\205\002\205\002\205\002\205\002\205\000\000\002\205\0055\000\000\001\190\001\194\016&\002\205\002\205\002\205\002\205\002\205\000\000\000\000\002\205\000\000\000\000\0055\000\000\002\205\bb\000\000\002\205\002\205\001\198\001\202\001\218\0055\002\205\002\205\002\205\0055\000\000\000\000\001\230\000\000\000\000\000\000\000\000\000\000\000\000\002\205\002\205\002\205\002\205\002\205\002\205\002\205\002\205\002\205\001\234\002\142\002\205\000\000\002\205\002\205\002\154\000\000\002\166\002\250\003\006\000\000\002\205\002\205\002\205\003\018\002\205\002\205\002\205\000\000\002\205\000\000\000\000\000\000\002\205\000\000\002\205\002\205\000\000\012\"\002\205\002\205\002\205\002\205\002\205\000\000\003\022\002\205\002\205\r\130\000\000\000\000\000\000\000\000\002\205\002\205\002\205\002\205\002\201\000\000\000\000\000\242\002\201\000\000\000\000\002\201\000\000\000\000\002\201\000\000\002\201\000\000\000\000\002\201\000\000\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\002\201\002\201\002\201\002\201\002\201\000\000\002\201\005%\000\000\001\190\001\194\028\162\002\201\002\201\002\201\002\201\002\201\000\000\000\000\002\201\000\000\000\000\005%\000\000\002\201\bb\000\000\002\201\002\201\001\198\001\202\001\218\005%\002\201\002\201\002\201\005%\000\000\000\000\001\230\000\000\000\000\000\000\000\000\000\000\000\000\002\201\002\201\r\190\002\201\002\201\002\201\002\201\002\201\002\201\001\234\002\142\002\201\000\000\002\201\002\201\002\154\000\000\002\166\002\250\003\006\000\000\002\201\002\201\002\201\003\018\002\201\002\201\002\201\000\000\002\201\000\000\000\000\000\000\002\201\000\000\002\201\002\201\000\000\002\201\002\201\002\201\002\201\002\201\002\201\000\000\003\022\002\201\002\201\002\201\000\000\000\000\000\000\000\000\002\201\002\201\002\201\002\201\002\157\000\000\000\000\000\242\002\157\000\000\000\000\002\157\000\000\000\000\002\157\000\000\002\157\000\000\000\000\002\157\000\000\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\002\157\002\157\000\000\002\157\016\158\000\000\001\190\001\194\029\002\002\157\002\157\002\157\002\157\002\157\000\000\000\000\002\157\000\000\000\000\016\166\000\000\002\157\bb\000\000\002\157\002\157\001\198\001\202\001\218\016\214\002\157\002\157\002\157\016\222\000\000\000\000\001\230\000\000\000\000\000\000\000\000\000\000\000\000\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\002\157\001\234\002\142\002\157\000\000\002\157\002\157\002\154\000\000\002\166\002\250\003\006\000\000\002\157\002\157\002\157\003\018\002\157\002\157\002\157\000\000\002\157\000\000\000\000\000\000\002\157\000\000\002\157\002\157\000\000\012\"\002\157\002\157\002\157\002\157\002\157\000\000\003\022\002\157\002\157\r\130\000\000\000\000\000\000\000\000\002\157\002\157\002\157\002\157\002\153\000\000\000\000\000\242\002\153\000\000\000\000\002\153\000\000\000\000\002\153\000\000\002\153\000\000\000\000\002\153\000\000\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\002\153\002\153\000\000\002\153\005\021\000\000\001\190\001\194\000\000\002\153\002\153\002\153\002\153\002\153\000\000\000\000\002\153\000\000\000\000\005\021\000\000\002\153\bb\000\000\002\153\002\153\001\198\001\238\000\000\005\021\002\153\002\153\002\153\005\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\153\002\153\r\190\002\153\002\153\002\153\002\153\002\153\002\153\001\234\002\150\002\153\000\000\002\153\002\153\002\154\000\000\002\166\002\250\003\006\000\000\002\153\002\153\002\153\003\018\002\153\002\153\002\153\000\000\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\003\022\002\153\002\153\002\153\000\000\000\000\000\000\000\000\002\153\002\153\002\153\002\153\002\181\000\000\000\000\000\242\002\181\000\000\000\000\002\181\000\000\000\000\002\181\000\000\002\181\000\000\000\000\002\181\000\000\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\002\181\002\181\002\181\002\181\002\181\000\000\002\181\t]\000\000\001\190\001\194\000\000\002\181\002\181\002\181\002\181\002\181\000\000\000\000\002\181\000\000\000\000\007\154\000\000\002\181\007^\000\000\002\181\002\181\001\198\001\238\000\000\t]\002\181\002\181\002\181\t]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\181\002\181\002\181\002\181\002\181\002\181\002\181\002\181\002\181\001\234\003\166\002\181\000\000\002\181\002\181\002\154\000\000\002\166\002\250\003\006\000\000\002\181\002\181\002\181\003\018\002\181\002\181\002\181\000\000\002\181\000\000\000\000\000\000\002\181\000\000\002\181\002\181\000\000\012\"\002\181\002\181\002\181\002\181\002\181\000\000\003\022\002\181\002\181\r\130\000\000\000\000\000\000\000\000\002\181\002\181\002\181\002\181\002\177\000\000\000\000\000\242\002\177\000\000\000\000\002\177\000\000\000\000\002\177\000\000\002\177\000\000\000\000\r\166\000\000\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\002\177\002\177\002\177\014&\002\177\000\000\002\177\019\222\000\000\001\190\001\194\000\000\002\177\002\177\002\177\002\177\002\177\000\000\000\000\002\177\000\000\000\000\016\166\000\000\002\177\bb\000\000\002\177\002\177\001\198\001\238\000\000\016\214\002\177\002\177\002\177\016\222\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\177\002\177\r\190\014>\002\177\002\177\002\177\002\177\002\177\001\234\003\198\002\177\000\000\002\177\002\177\002\154\000\000\002\166\002\250\003\006\000\000\002\177\002\177\002\177\003\018\002\177\002\177\002\177\000\000\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\002\177\002\177\000\000\003\022\002\177\002\177\002\177\000\000\000\000\000\000\000\000\002\177\002\177\002\177\002\177\002\213\000\000\000\000\000\000\002\213\000\000\000\000\002\213\000\000\000\000\002\213\000\000\002\213\000\000\000\000\002\213\000\000\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\002\213\002\213\002\213\002\213\002\213\000\000\002\213\000\000\000\000\000\000\001\241\001\241\002\213\002\213\002\213\002\213\002\213\000\000\001\241\002\213\000\000\000\000\n\229\000\000\002\213\000\000\000\000\002\213\002\213\000\000\001\241\000\000\000\000\002\213\002\213\002\213\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\213\002\213\002\213\002\213\002\213\002\213\002\213\002\213\002\213\000\000\001\241\002\213\000\000\002\213\002\213\000\000\000\000\000\000\001\241\n\229\000\000\002\213\002\213\002\213\001\241\002\213\002\213\002\213\000\000\002\213\000\000\000\000\000\000\002\213\000\000\002\213\002\213\000\000\012\"\002\213\002\213\002\213\002\213\002\213\n\229\000\000\002\213\002\213\r\130\000\000\001\241\000\000\000\000\002\213\002\213\002\213\002\213\002\209\000\000\000\000\000\000\002\209\000\000\000\000\002\209\000\000\000\000\002\209\000\000\002\209\000\000\000\000\002\209\000\000\000\000\002\209\002\209\002\209\n\229\002\209\002\209\002\209\003\222\000\000\005z\n\229\000\000\002\209\002\209\002\209\002\209\002\209\000\000\002\209\000\000\000\000\000\000\001\241\001\241\002\209\002\209\002\209\002\209\002\209\000\000\001\241\002\209\000\000\000\000\000\000\000\000\002\209\000\000\000\000\002\209\002\209\000\000\001\241\000\000\000\000\002\209\002\209\002\209\000\000\000\000\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\209\002\209\r\190\002\209\002\209\002\209\002\209\002\209\002\209\000\000\001\241\002\209\000\000\002\209\002\209\000\000\000\000\000\000\001\241\000\000\000\000\002\209\002\209\002\209\001\241\002\209\002\209\002\209\000\000\002\209\000\000\000\000\000\000\002\209\000\000\002\209\002\209\000\000\002\209\002\209\002\209\002\209\002\209\002\209\000\000\000\000\002\209\002\209\002\209\000\000\001\241\000\000\000\000\002\209\002\209\002\209\002\209\002\149\000\000\000\000\000\000\002\149\000\000\000\000\002\149\000\000\000\000\002\149\000\000\002\149\000\000\000\000\002\149\000\000\000\000\002\149\002\149\002\149\000\000\002\149\002\149\002\149\000\000\000\000\tR\000\000\000\000\002\149\002\149\002\149\002\149\002\149\000\000\002\149\000\000\000\000\005\138\005Z\002\178\002\149\002\149\002\149\002\149\002\149\000\000\005^\002\149\000\000\000\000\000\000\000\000\002\149\n~\000\000\002\149\002\149\000\000\001\198\000\000\000\000\002\149\002\149\002\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\149\002\149\002\149\002\149\002\149\002\149\002\149\002\149\002\149\000\000\005\134\002\149\000\000\002\149\002\149\000\000\000\000\000\000\002\166\000\000\000\000\002\149\002\149\002\149\000\000\002\149\002\149\002\149\000\000\002\149\000\000\000\000\000\000\002\149\000\000\002\149\002\149\000\000\012\"\002\149\002\149\002\149\002\149\002\149\000\000\000\000\002\149\002\149\r\130\000\000\t^\000\000\000\000\002\149\002\149\002\149\002\149\002\145\000\000\000\000\000\000\002\145\000\000\000\000\002\145\000\000\000\000\002\145\000\000\002\145\000\000\000\000\002\145\000\000\000\000\002\145\002\145\002\145\000\000\002\145\002\145\002\145\000\000\000\000\000\000\000\000\000\000\002\145\002\145\002\145\002\145\002\145\000\000\002\145\000\000\000\000\000\000\002\178\000\000\002\145\002\145\002\145\002\145\002\145\000\000\000\000\002\145\000\000\000\000\000\000\000\000\002\145\000\000\000\000\002\145\002\145\001\198\000\000\000\000\000\000\002\145\002\145\002\145\000\000\000\000\000\000\000\000\000\000\000\000\028\n\000\000\000\000\000\000\002\145\002\145\r\190\002\145\002\145\002\145\002\145\002\145\002\145\029F\005\158\002\145\029J\002\145\002\145\000\000\000\000\002\166\000\000\000\000\000\000\002\145\002\145\002\145\029z\002\145\002\145\002\145\000\000\002\145\000\000\000\000\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\000\000\002\145\002\145\002\145\000\000\000\000\029\138\000\000\002\145\002\145\002\145\002\145\002\173\000\000\000\000\000\000\002\173\000\000\000\000\002\173\000\000\000\000\002\173\000\000\002\173\000\000\000\000\002\173\000\000\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\001\194\000\000\002\173\002\173\002\173\002\173\002\173\000\000\000\000\002\173\000\000\000\000\000\000\000\000\002\173\000\000\000\000\002\173\002\173\001\198\000\000\000\000\000\000\002\173\002\173\002\173\000\000\000\000\000\000\000\000\000\000\000\000\025\018\000\000\000\000\000\000\002\173\002\173\002\173\002\173\002\173\002\173\002\173\002\173\002\173\000\000\002\150\002\173\025\138\002\173\002\173\000\000\000\000\002\166\000\000\000\000\000\000\002\173\002\173\002\173\025\162\002\173\002\173\002\173\000\000\002\173\000\000\000\000\000\000\002\173\000\000\002\173\002\173\000\000\012\"\002\173\002\173\002\173\002\173\002\173\000\000\000\000\002\173\002\173\r\130\000\000\000\000\000\000\000\000\002\173\002\173\002\173\002\173\002\169\000\000\000\000\000\000\002\169\000\000\000\000\002\169\000\000\000\000\002\169\000\000\002\169\000\000\000\000\r\166\000\000\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\002\169\002\169\002\169\014&\002\169\000\000\002\169\000\000\000\000\000\000\000\000\000\000\002\169\002\169\002\169\002\169\002\169\000\000\000\000\002\169\000\000\000\000\000\000\000\000\002\169\000\000\000\000\002\169\002\169\000\000\000\000\000\000\000\000\002\169\002\169\002\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\169\002\169\r\190\014>\002\169\002\169\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\000\000\000\000\002\169\002\169\002\169\000\000\002\169\002\169\002\169\000\000\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\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\165\000\000\000\000\000\000\002\165\000\000\000\000\002\165\000\000\000\000\002\165\000\000\002\165\000\000\000\000\002\165\000\000\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\002\165\002\165\000\000\002\165\000\000\000\000\000\000\000\000\000\000\002\165\002\165\002\165\002\165\002\165\000\000\000\000\002\165\000\000\000\000\000\000\000\000\002\165\000\000\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\000\000\000\000\000\000\000\000\002\165\002\165\002\165\002\165\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\000\000\000\000\002\165\002\165\002\165\000\000\002\165\002\165\002\165\000\000\002\165\000\000\000\000\000\000\002\165\000\000\002\165\002\165\000\000\012\"\002\165\002\165\002\165\002\165\002\165\000\000\000\000\002\165\002\165\r\130\000\000\000\000\000\000\000\000\002\165\002\165\002\165\002\165\002\161\000\000\000\000\000\000\002\161\000\000\000\000\002\161\000\000\000\000\002\161\000\000\002\161\000\000\000\000\r\166\000\000\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\014&\002\161\000\000\002\161\000\000\000\000\000\000\000\000\000\000\002\161\002\161\002\161\002\161\002\161\000\000\000\000\002\161\000\000\000\000\000\000\000\000\002\161\000\000\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\000\000\000\000\000\000\000\000\002\161\002\161\r\190\014>\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\000\000\000\000\002\161\002\161\002\161\000\000\002\161\002\161\002\161\000\000\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\245\000\000\000\000\000\000\002\245\000\000\000\000\002\245\000\000\000\000\002\245\000\000\002\245\000\000\000\000\002\245\000\000\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\002\245\002\245\002\245\002\245\002\245\000\000\002\245\000\000\000\000\000\000\000\000\000\000\002\245\002\245\002\245\002\245\002\245\000\000\000\000\002\245\000\000\000\000\000\000\000\000\002\245\000\000\000\000\002\245\002\245\000\000\000\000\000\000\000\000\002\245\002\245\002\245\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\245\002\245\002\245\002\245\002\245\002\245\002\245\002\245\002\245\000\000\000\000\002\245\000\000\002\245\002\245\000\000\000\000\000\000\000\000\000\000\000\000\002\245\002\245\002\245\000\000\002\245\002\245\002\245\000\000\002\245\000\000\000\000\000\000\002\245\000\000\002\245\002\245\000\000\012\"\002\245\002\245\002\245\002\245\002\245\000\000\000\000\002\245\002\245\r\130\000\000\000\000\000\000\000\000\002\245\002\245\002\245\002\245\002\241\000\000\000\000\000\000\002\241\000\000\000\000\002\241\000\000\000\000\002\241\000\000\002\241\000\000\000\000\r\166\000\000\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\014\014\014V\014n\014&\014\134\000\000\002\241\000\000\000\000\000\000\000\000\000\000\002\241\002\241\014\158\014\182\002\241\000\000\000\000\002\241\000\000\000\000\000\000\000\000\002\241\000\000\000\000\014\206\002\241\000\000\000\000\000\000\000\000\002\241\002\241\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\241\002\241\r\190\014>\014\230\014\254\015.\002\241\002\241\000\000\000\000\002\241\000\000\002\241\015F\000\000\000\000\000\000\000\000\000\000\000\000\002\241\002\241\015^\000\000\002\241\002\241\002\241\000\000\002\241\000\000\000\000\000\000\002\241\000\000\002\241\002\241\000\000\002\241\002\241\002\241\015\022\002\241\002\241\000\000\000\000\002\241\015v\002\241\000\000\000\000\000\000\000\000\002\241\002\241\015\142\015\166\002\197\000\000\000\000\000\000\002\197\000\000\000\000\002\197\000\000\000\000\002\197\000\000\002\197\000\000\000\000\002\197\000\000\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\002\197\002\197\002\197\002\197\002\197\000\000\002\197\000\000\000\000\000\000\000\000\000\000\002\197\002\197\002\197\002\197\002\197\000\000\000\000\002\197\000\000\000\000\000\000\000\000\002\197\000\000\000\000\002\197\002\197\000\000\000\000\000\000\000\000\002\197\002\197\002\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\197\002\197\002\197\002\197\002\197\002\197\002\197\002\197\002\197\000\000\000\000\002\197\000\000\002\197\002\197\000\000\000\000\000\000\000\000\000\000\000\000\002\197\002\197\002\197\000\000\002\197\002\197\002\197\000\000\002\197\000\000\000\000\000\000\002\197\000\000\002\197\002\197\000\000\012\"\002\197\002\197\002\197\002\197\002\197\000\000\000\000\002\197\002\197\r\130\000\000\000\000\000\000\000\000\002\197\002\197\002\197\002\197\002\193\000\000\000\000\000\000\002\193\000\000\000\000\002\193\000\000\000\000\002\193\000\000\002\193\000\000\000\000\r\166\000\000\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\002\193\002\193\002\193\014&\002\193\000\000\002\193\000\000\000\000\000\000\000\000\000\000\002\193\002\193\002\193\002\193\002\193\000\000\000\000\002\193\000\000\000\000\000\000\000\000\002\193\000\000\000\000\002\193\002\193\000\000\000\000\000\000\000\000\002\193\002\193\002\193\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\193\002\193\r\190\014>\002\193\002\193\002\193\002\193\002\193\000\000\000\000\002\193\000\000\002\193\002\193\000\000\000\000\000\000\000\000\000\000\000\000\002\193\002\193\002\193\000\000\002\193\002\193\002\193\000\000\002\193\000\000\000\000\000\000\002\193\000\000\002\193\002\193\000\000\002\193\002\193\002\193\002\193\002\193\002\193\000\000\000\000\002\193\002\193\002\193\000\000\000\000\000\000\000\000\002\193\002\193\002\193\002\193\002\189\000\000\000\000\000\000\002\189\000\000\000\000\002\189\000\000\000\000\002\189\000\000\002\189\000\000\000\000\002\189\000\000\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\002\189\002\189\002\189\002\189\002\189\000\000\002\189\000\000\000\000\000\000\000\000\000\000\002\189\002\189\002\189\002\189\002\189\000\000\000\000\002\189\000\000\000\000\000\000\000\000\002\189\000\000\000\000\002\189\002\189\000\000\000\000\000\000\000\000\002\189\002\189\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\189\002\189\002\189\002\189\002\189\002\189\002\189\002\189\002\189\000\000\000\000\002\189\000\000\002\189\002\189\000\000\000\000\000\000\000\000\000\000\000\000\002\189\002\189\002\189\000\000\002\189\002\189\002\189\000\000\002\189\000\000\000\000\000\000\002\189\000\000\002\189\002\189\000\000\012\"\002\189\002\189\002\189\002\189\002\189\000\000\000\000\002\189\002\189\r\130\000\000\000\000\000\000\000\000\002\189\002\189\002\189\002\189\002\185\000\000\000\000\000\000\002\185\000\000\000\000\002\185\000\000\000\000\002\185\000\000\002\185\000\000\000\000\r\166\000\000\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\002\185\002\185\002\185\014&\002\185\000\000\002\185\000\000\000\000\000\000\000\000\000\000\002\185\002\185\002\185\002\185\002\185\000\000\000\000\002\185\000\000\000\000\000\000\000\000\002\185\000\000\000\000\002\185\002\185\000\000\000\000\000\000\000\000\002\185\002\185\002\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\185\002\185\r\190\014>\002\185\002\185\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\000\000\000\000\002\185\002\185\002\185\000\000\002\185\002\185\002\185\000\000\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\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\229\000\000\000\000\000\000\002\229\000\000\000\000\002\229\000\000\000\000\002\229\000\000\002\229\000\000\000\000\002\229\000\000\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\002\229\002\229\002\229\002\229\002\229\000\000\002\229\000\000\000\000\000\000\000\000\000\000\002\229\002\229\002\229\002\229\002\229\000\000\000\000\002\229\000\000\000\000\000\000\000\000\002\229\000\000\000\000\002\229\002\229\000\000\000\000\000\000\000\000\002\229\002\229\002\229\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\229\002\229\002\229\002\229\002\229\002\229\002\229\002\229\002\229\000\000\000\000\002\229\000\000\002\229\002\229\000\000\000\000\000\000\000\000\000\000\000\000\002\229\002\229\002\229\000\000\002\229\002\229\002\229\000\000\002\229\000\000\000\000\000\000\002\229\000\000\002\229\002\229\000\000\012\"\002\229\002\229\002\229\002\229\002\229\000\000\000\000\002\229\002\229\r\130\000\000\000\000\000\000\000\000\002\229\002\229\002\229\002\229\002\225\000\000\000\000\000\000\002\225\000\000\000\000\002\225\000\000\000\000\002\225\000\000\002\225\000\000\000\000\r\166\000\000\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\014\014\014V\014n\014&\002\225\000\000\002\225\000\000\000\000\000\000\000\000\000\000\002\225\002\225\014\158\014\182\002\225\000\000\000\000\002\225\000\000\000\000\000\000\000\000\002\225\000\000\000\000\002\225\002\225\000\000\000\000\000\000\000\000\002\225\002\225\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\225\002\225\r\190\014>\014\230\014\254\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\000\000\000\000\002\225\002\225\002\225\000\000\002\225\002\225\002\225\000\000\002\225\000\000\000\000\000\000\002\225\000\000\002\225\002\225\000\000\002\225\002\225\002\225\015\022\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\141\000\000\000\000\000\000\002\141\000\000\000\000\002\141\000\000\000\000\002\141\000\000\002\141\000\000\000\000\002\141\000\000\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\000\000\000\000\002\141\002\141\002\141\002\141\002\141\000\000\000\000\002\141\000\000\000\000\000\000\000\000\002\141\000\000\000\000\002\141\002\141\000\000\000\000\000\000\000\000\002\141\002\141\002\141\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\141\002\141\002\141\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\000\000\000\000\002\141\002\141\002\141\000\000\002\141\002\141\002\141\000\000\002\141\000\000\000\000\000\000\002\141\000\000\002\141\002\141\000\000\012\"\002\141\002\141\002\141\002\141\002\141\000\000\000\000\002\141\002\141\r\130\000\000\000\000\000\000\000\000\002\141\002\141\002\141\002\141\002\137\000\000\000\000\000\000\002\137\000\000\000\000\002\137\000\000\000\000\002\137\000\000\002\137\000\000\000\000\r\166\000\000\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\014&\002\137\000\000\002\137\000\000\000\000\000\000\000\000\000\000\002\137\002\137\002\137\002\137\002\137\000\000\000\000\002\137\000\000\000\000\000\000\000\000\002\137\000\000\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\000\000\000\000\000\000\000\000\002\137\002\137\r\190\014>\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\000\000\000\000\002\137\002\137\002\137\000\000\002\137\002\137\002\137\000\000\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\000\000\000\000\000\000\002\133\000\000\000\000\002\133\000\000\000\000\002\133\000\000\002\133\000\000\000\000\002\133\000\000\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\002\133\002\133\002\133\002\133\002\133\000\000\002\133\000\000\000\000\000\000\000\000\000\000\002\133\002\133\002\133\002\133\002\133\000\000\000\000\002\133\000\000\000\000\000\000\000\000\002\133\000\000\000\000\002\133\002\133\000\000\000\000\000\000\000\000\002\133\002\133\002\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\133\002\133\002\133\002\133\002\133\002\133\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\000\000\000\000\002\133\002\133\002\133\000\000\002\133\002\133\002\133\000\000\002\133\000\000\000\000\000\000\002\133\000\000\002\133\002\133\000\000\012\"\002\133\002\133\002\133\002\133\002\133\000\000\000\000\002\133\002\133\r\130\000\000\000\000\000\000\000\000\002\133\002\133\002\133\002\133\002\129\000\000\000\000\000\000\002\129\000\000\000\000\002\129\000\000\000\000\002\129\000\000\002\129\000\000\000\000\r\166\000\000\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\014\014\014V\014n\014&\002\129\000\000\002\129\000\000\000\000\000\000\000\000\000\000\002\129\002\129\014\158\014\182\002\129\000\000\000\000\002\129\000\000\000\000\000\000\000\000\002\129\000\000\000\000\002\129\002\129\000\000\000\000\000\000\000\000\002\129\002\129\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\129\002\129\r\190\014>\014\230\014\254\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\000\000\000\000\002\129\002\129\002\129\000\000\002\129\002\129\002\129\000\000\002\129\000\000\000\000\000\000\002\129\000\000\002\129\002\129\000\000\002\129\002\129\002\129\015\022\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\0035\000\000\000\000\000\000\0035\000\000\000\000\0035\000\000\000\000\0035\000\000\0035\000\000\000\000\0035\000\000\000\000\0035\0035\0035\000\000\0035\0035\0035\000\000\000\000\000\000\000\000\000\000\0035\0035\0035\0035\0035\000\000\0035\000\000\000\000\000\000\000\000\000\000\0035\0035\0035\0035\0035\000\000\000\000\0035\000\000\000\000\000\000\000\000\0035\000\000\000\000\0035\0035\000\000\000\000\000\000\000\000\0035\0035\0035\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0035\0035\0035\0035\0035\0035\0035\0035\0035\000\000\000\000\0035\000\000\0035\0035\000\000\000\000\000\000\000\000\000\000\000\000\0035\0035\0035\000\000\0035\0035\0035\000\000\0035\000\000\000\000\000\000\0035\000\000\0035\0035\000\000\012\"\0035\0035\0035\0035\0035\000\000\000\000\0035\0035\r\130\000\000\000\000\000\000\000\000\0035\0035\0035\0035\0031\000\000\000\000\000\000\0031\000\000\000\000\0031\000\000\000\000\0031\000\000\0031\000\000\000\000\r\166\000\000\000\000\0031\0031\0031\000\000\0031\0031\0031\000\000\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\0031\000\000\0031\000\000\000\000\000\000\000\000\000\000\0031\0031\014\158\014\182\0031\000\000\000\000\0031\000\000\000\000\000\000\000\000\0031\000\000\000\000\0031\0031\000\000\000\000\000\000\000\000\0031\0031\0031\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0031\0031\r\190\014>\014\230\0031\0031\0031\0031\000\000\000\000\0031\000\000\0031\0031\000\000\000\000\000\000\000\000\000\000\000\000\0031\0031\0031\000\000\0031\0031\0031\000\000\0031\000\000\000\000\000\000\0031\000\000\0031\0031\000\000\0031\0031\0031\015\022\0031\0031\000\000\000\000\0031\0031\0031\000\000\000\000\000\000\000\000\0031\0031\0031\0031\002}\000\000\000\000\000\000\002}\000\000\000\000\002}\000\000\000\000\002}\000\000\002}\000\000\000\000\002}\000\000\000\000\002}\002}\002}\000\000\002}\002}\002}\000\000\000\000\000\000\000\000\000\000\002}\002}\002}\002}\002}\000\000\002}\000\000\000\000\000\000\000\000\000\000\002}\002}\002}\002}\002}\000\000\000\000\002}\000\000\000\000\000\000\000\000\002}\000\000\000\000\002}\002}\000\000\000\000\000\000\000\000\002}\002}\002}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002}\002}\002}\002}\002}\002}\002}\002}\002}\000\000\000\000\002}\000\000\002}\002}\000\000\000\000\000\000\000\000\000\000\000\000\002}\002}\002}\000\000\002}\002}\002}\000\000\002}\000\000\000\000\000\000\002}\000\000\002}\002}\000\000\012\"\002}\002}\002}\002}\002}\000\000\000\000\002}\002}\r\130\000\000\000\000\000\000\000\000\002}\002}\002}\002}\002y\000\000\000\000\000\000\002y\000\000\000\000\002y\000\000\000\000\002y\000\000\002y\000\000\000\000\r\166\000\000\000\000\002y\002y\002y\000\000\002y\002y\002y\000\000\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\002y\000\000\002y\000\000\000\000\000\000\000\000\000\000\002y\002y\014\158\014\182\002y\000\000\000\000\002y\000\000\000\000\000\000\000\000\002y\000\000\000\000\002y\002y\000\000\000\000\000\000\000\000\002y\002y\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\002y\r\190\014>\014\230\014\254\002y\002y\002y\000\000\000\000\002y\000\000\002y\002y\000\000\000\000\000\000\000\000\000\000\000\000\002y\002y\002y\000\000\002y\002y\002y\000\000\002y\000\000\000\000\000\000\002y\000\000\002y\002y\000\000\002y\002y\002y\015\022\002y\002y\000\000\000\000\002y\002y\002y\000\000\000\000\000\000\000\000\002y\002y\002y\002y\002\237\000\000\000\000\000\000\002\237\000\000\000\000\002\237\000\000\000\000\002\237\000\000\002\237\000\000\000\000\002\237\000\000\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\002\237\002\237\002\237\002\237\002\237\000\000\002\237\000\000\000\000\000\000\000\000\000\000\002\237\002\237\002\237\002\237\002\237\000\000\000\000\002\237\000\000\000\000\000\000\000\000\002\237\000\000\000\000\002\237\002\237\000\000\000\000\000\000\000\000\002\237\002\237\002\237\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\237\002\237\002\237\002\237\002\237\002\237\002\237\002\237\002\237\000\000\000\000\002\237\000\000\002\237\002\237\000\000\000\000\000\000\000\000\000\000\000\000\002\237\002\237\002\237\000\000\002\237\002\237\002\237\000\000\002\237\000\000\000\000\000\000\002\237\000\000\002\237\002\237\000\000\012\"\002\237\002\237\002\237\002\237\002\237\000\000\000\000\002\237\002\237\r\130\000\000\000\000\000\000\000\000\002\237\002\237\002\237\002\237\002\233\000\000\000\000\000\000\002\233\000\000\000\000\002\233\000\000\000\000\002\233\000\000\002\233\000\000\000\000\r\166\000\000\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\014\014\014V\014n\014&\002\233\000\000\002\233\000\000\000\000\000\000\000\000\000\000\002\233\002\233\014\158\014\182\002\233\000\000\000\000\002\233\000\000\000\000\000\000\000\000\002\233\000\000\000\000\002\233\002\233\000\000\000\000\000\000\000\000\002\233\002\233\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\233\002\233\r\190\014>\014\230\014\254\002\233\002\233\002\233\000\000\000\000\002\233\000\000\002\233\002\233\000\000\000\000\000\000\000\000\000\000\000\000\002\233\002\233\002\233\000\000\002\233\002\233\002\233\000\000\002\233\000\000\000\000\000\000\002\233\000\000\002\233\002\233\000\000\002\233\002\233\002\233\015\022\002\233\002\233\000\000\000\000\002\233\002\233\002\233\000\000\000\000\000\000\000\000\002\233\002\233\002\233\002\233\002\221\000\000\000\000\000\000\002\221\000\000\000\000\002\221\000\000\000\000\002\221\000\000\002\221\000\000\000\000\002\221\000\000\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\002\221\002\221\002\221\002\221\002\221\000\000\002\221\000\000\000\000\000\000\000\000\000\000\002\221\002\221\002\221\002\221\002\221\000\000\000\000\002\221\000\000\000\000\000\000\000\000\002\221\000\000\000\000\002\221\002\221\000\000\000\000\000\000\000\000\002\221\002\221\002\221\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\221\002\221\002\221\002\221\002\221\002\221\002\221\002\221\002\221\000\000\000\000\002\221\000\000\002\221\002\221\000\000\000\000\000\000\000\000\000\000\000\000\002\221\002\221\002\221\000\000\002\221\002\221\002\221\000\000\002\221\000\000\000\000\000\000\002\221\000\000\002\221\002\221\000\000\012\"\002\221\002\221\002\221\002\221\002\221\000\000\000\000\002\221\002\221\r\130\000\000\000\000\000\000\000\000\002\221\002\221\002\221\002\221\002\217\000\000\000\000\000\000\002\217\000\000\000\000\002\217\000\000\000\000\002\217\000\000\002\217\000\000\000\000\r\166\000\000\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\014\014\014V\014n\014&\002\217\000\000\002\217\000\000\000\000\000\000\000\000\000\000\002\217\002\217\014\158\014\182\002\217\000\000\000\000\002\217\000\000\000\000\000\000\000\000\002\217\000\000\000\000\002\217\002\217\000\000\000\000\000\000\000\000\002\217\002\217\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\217\002\217\r\190\014>\014\230\014\254\002\217\002\217\002\217\000\000\000\000\002\217\000\000\002\217\002\217\000\000\000\000\000\000\000\000\000\000\000\000\002\217\002\217\002\217\000\000\002\217\002\217\002\217\000\000\002\217\000\000\000\000\000\000\002\217\000\000\002\217\002\217\000\000\002\217\002\217\002\217\015\022\002\217\002\217\000\000\000\000\002\217\002\217\002\217\000\000\000\000\000\000\000\000\002\217\002\217\002\217\002\217\002\253\000\000\000\000\000\000\002\253\000\000\000\000\002\253\000\000\000\000\002\253\000\000\002\253\000\000\000\000\002\253\000\000\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\002\253\002\253\002\253\002\253\002\253\000\000\002\253\000\000\000\000\000\000\000\000\000\000\002\253\002\253\002\253\002\253\002\253\000\000\000\000\002\253\000\000\000\000\000\000\000\000\002\253\000\000\000\000\002\253\002\253\000\000\000\000\000\000\000\000\002\253\002\253\002\253\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\253\002\253\002\253\002\253\002\253\002\253\002\253\002\253\002\253\000\000\000\000\002\253\000\000\002\253\002\253\000\000\000\000\000\000\000\000\000\000\000\000\002\253\002\253\002\253\000\000\002\253\002\253\002\253\000\000\002\253\000\000\000\000\000\000\002\253\000\000\002\253\002\253\000\000\012\"\002\253\002\253\002\253\002\253\002\253\000\000\000\000\002\253\002\253\r\130\000\000\000\000\000\000\000\000\002\253\002\253\002\253\002\253\002\249\000\000\000\000\000\000\002\249\000\000\000\000\002\249\000\000\000\000\002\249\000\000\002\249\000\000\000\000\r\166\000\000\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\014\014\014V\014n\014&\014\134\000\000\002\249\000\000\000\000\000\000\000\000\000\000\002\249\002\249\014\158\014\182\002\249\000\000\000\000\002\249\000\000\000\000\000\000\000\000\002\249\000\000\000\000\014\206\002\249\000\000\000\000\000\000\000\000\002\249\002\249\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\249\002\249\r\190\014>\014\230\014\254\015.\002\249\002\249\000\000\000\000\002\249\000\000\002\249\015F\000\000\000\000\000\000\000\000\000\000\000\000\002\249\002\249\015^\000\000\002\249\002\249\002\249\000\000\002\249\000\000\000\000\000\000\002\249\000\000\002\249\002\249\000\000\002\249\002\249\002\249\015\022\002\249\002\249\000\000\000\000\002\249\015v\002\249\000\000\000\000\000\000\000\000\002\249\002\249\015\142\015\166\003\005\000\000\000\000\000\000\003\005\000\000\000\000\003\005\000\000\000\000\003\005\000\000\003\005\000\000\000\000\003\005\000\000\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\003\005\003\005\003\005\003\005\003\005\000\000\003\005\000\000\000\000\000\000\000\000\000\000\003\005\003\005\003\005\003\005\003\005\000\000\000\000\003\005\000\000\000\000\000\000\000\000\003\005\000\000\000\000\003\005\003\005\000\000\000\000\000\000\000\000\003\005\003\005\003\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\005\003\005\003\005\003\005\003\005\003\005\003\005\003\005\003\005\000\000\000\000\003\005\000\000\003\005\003\005\000\000\000\000\000\000\000\000\000\000\000\000\003\005\003\005\003\005\000\000\003\005\003\005\003\005\000\000\003\005\000\000\000\000\000\000\003\005\000\000\003\005\003\005\000\000\012\"\003\005\003\005\003\005\003\005\003\005\000\000\000\000\003\005\003\005\r\130\000\000\000\000\000\000\000\000\003\005\003\005\003\005\003\005\003\001\000\000\000\000\000\000\003\001\000\000\000\000\003\001\000\000\000\000\003\001\000\000\003\001\000\000\000\000\r\166\000\000\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\014\014\014V\014n\014&\003\001\000\000\003\001\000\000\000\000\000\000\000\000\000\000\003\001\003\001\014\158\014\182\003\001\000\000\000\000\003\001\000\000\000\000\000\000\000\000\003\001\000\000\000\000\014\206\003\001\000\000\000\000\000\000\000\000\003\001\003\001\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\001\003\001\r\190\014>\014\230\014\254\015.\003\001\003\001\000\000\000\000\003\001\000\000\003\001\015F\000\000\000\000\000\000\000\000\000\000\000\000\003\001\003\001\015^\000\000\003\001\003\001\003\001\000\000\003\001\000\000\000\000\000\000\003\001\000\000\003\001\003\001\000\000\003\001\003\001\003\001\015\022\003\001\003\001\000\000\000\000\003\001\003\001\003\001\000\000\000\000\000\000\000\000\003\001\003\001\015\142\015\166\003\r\000\000\000\000\000\000\003\r\000\000\000\000\003\r\000\000\000\000\003\r\000\000\003\r\000\000\000\000\003\r\000\000\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\003\r\003\r\003\r\003\r\003\r\000\000\003\r\000\000\000\000\000\000\000\000\000\000\003\r\003\r\003\r\003\r\003\r\000\000\000\000\003\r\000\000\000\000\000\000\000\000\003\r\000\000\000\000\003\r\003\r\000\000\000\000\000\000\000\000\003\r\003\r\003\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\r\003\r\003\r\003\r\003\r\003\r\003\r\003\r\003\r\000\000\000\000\003\r\000\000\003\r\003\r\000\000\000\000\000\000\000\000\000\000\000\000\003\r\003\r\003\r\000\000\003\r\003\r\003\r\000\000\003\r\000\000\000\000\000\000\003\r\000\000\003\r\003\r\000\000\012\"\003\r\003\r\003\r\003\r\003\r\000\000\000\000\003\r\003\r\r\130\000\000\000\000\000\000\000\000\003\r\003\r\003\r\003\r\003\t\000\000\000\000\000\000\003\t\000\000\000\000\003\t\000\000\000\000\003\t\000\000\003\t\000\000\000\000\r\166\000\000\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\014\014\014V\014n\014&\003\t\000\000\003\t\000\000\000\000\000\000\000\000\000\000\003\t\003\t\014\158\014\182\003\t\000\000\000\000\003\t\000\000\000\000\000\000\000\000\003\t\000\000\000\000\014\206\003\t\000\000\000\000\000\000\000\000\003\t\003\t\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\t\003\t\r\190\014>\014\230\014\254\015.\003\t\003\t\000\000\000\000\003\t\000\000\003\t\015F\000\000\000\000\000\000\000\000\000\000\000\000\003\t\003\t\015^\000\000\003\t\003\t\003\t\000\000\003\t\000\000\000\000\000\000\003\t\000\000\003\t\003\t\000\000\003\t\003\t\003\t\015\022\003\t\003\t\000\000\000\000\003\t\003\t\003\t\000\000\000\000\000\000\000\000\003\t\003\t\015\142\015\166\n\t\000\000\000\000\000\000\n\t\000\000\000\000\n\t\000\000\000\000\n\t\000\000\n\t\000\000\000\000\n\t\000\000\000\000\n\t\n\t\n\t\000\000\n\t\n\t\n\t\000\000\000\000\000\000\000\000\000\000\n\t\n\t\n\t\n\t\n\t\000\000\n\t\000\000\000\000\000\000\000\000\000\000\n\t\n\t\n\t\n\t\n\t\000\000\000\000\n\t\000\000\000\000\000\000\000\000\n\t\000\000\000\000\n\t\n\t\000\000\000\000\000\000\000\000\n\t\n\t\n\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\n\t\000\000\000\000\n\t\000\000\n\t\n\t\000\000\000\000\000\000\000\000\000\000\000\000\n\t\n\t\n\t\000\000\n\t\n\t\n\t\000\000\n\t\000\000\000\000\000\000\n\t\000\000\n\t\n\t\000\000\012\"\n\t\n\t\n\t\n\t\n\t\000\000\000\000\n\t\n\t\r\130\000\000\000\000\000\000\000\000\n\t\n\t\n\t\n\t\n\005\000\000\000\000\000\000\n\005\000\000\000\000\n\005\000\000\000\000\n\005\000\000\n\005\000\000\000\000\r\166\000\000\000\000\n\005\n\005\n\005\000\000\n\005\n\005\n\005\000\000\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\014\134\000\000\n\005\000\000\000\000\000\000\000\000\000\000\n\005\n\005\014\158\014\182\n\005\000\000\000\000\n\005\000\000\000\000\000\000\000\000\n\005\000\000\000\000\014\206\n\005\000\000\000\000\000\000\000\000\n\005\n\005\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\005\n\005\r\190\014>\014\230\014\254\015.\n\005\n\005\000\000\000\000\n\005\000\000\n\005\015F\000\000\000\000\000\000\000\000\000\000\000\000\n\005\n\005\015^\000\000\n\005\n\005\n\005\000\000\n\005\000\000\000\000\000\000\n\005\000\000\n\005\n\005\000\000\n\005\n\005\n\005\015\022\n\005\n\005\000\000\000\000\n\005\015v\n\005\000\000\000\000\000\000\000\000\n\005\n\005\015\142\015\166\003\021\000\000\000\000\000\000\003\021\000\000\000\000\003\021\000\000\000\000\003\021\000\000\003\021\000\000\000\000\003\021\000\000\000\000\003\021\003\021\003\021\000\000\003\021\003\021\003\021\000\000\000\000\000\000\000\000\000\000\003\021\003\021\003\021\003\021\003\021\000\000\003\021\000\000\000\000\000\000\000\000\000\000\003\021\003\021\003\021\003\021\003\021\000\000\000\000\003\021\000\000\000\000\000\000\000\000\003\021\000\000\000\000\003\021\003\021\000\000\000\000\000\000\000\000\003\021\003\021\003\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\021\003\021\003\021\003\021\003\021\003\021\003\021\003\021\003\021\000\000\000\000\003\021\000\000\003\021\003\021\000\000\000\000\000\000\000\000\000\000\000\000\003\021\003\021\003\021\000\000\003\021\003\021\003\021\000\000\003\021\000\000\000\000\000\000\003\021\000\000\003\021\003\021\000\000\012\"\003\021\003\021\003\021\003\021\003\021\000\000\000\000\003\021\003\021\r\130\000\000\000\000\000\000\000\000\003\021\003\021\003\021\003\021\003\017\000\000\000\000\000\000\003\017\000\000\000\000\003\017\000\000\000\000\003\017\000\000\003\017\000\000\000\000\r\166\000\000\000\000\003\017\003\017\003\017\000\000\003\017\003\017\003\017\000\000\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\014\134\000\000\003\017\000\000\000\000\000\000\000\000\000\000\003\017\003\017\014\158\014\182\003\017\000\000\000\000\003\017\000\000\000\000\000\000\000\000\003\017\000\000\000\000\014\206\003\017\000\000\000\000\000\000\000\000\003\017\003\017\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\017\003\017\r\190\014>\014\230\014\254\015.\003\017\003\017\000\000\000\000\003\017\000\000\003\017\015F\000\000\000\000\000\000\000\000\000\000\000\000\003\017\003\017\015^\000\000\003\017\003\017\003\017\000\000\003\017\000\000\000\000\000\000\003\017\000\000\003\017\003\017\000\000\015\190\003\017\015\246\015\022\003\017\003\017\000\000\000\000\003\017\015v\003\017\000\000\000\000\000\000\000\000\003\017\003\017\015\142\015\166\t\241\000\000\000\000\000\000\t\241\000\000\000\000\t\241\000\000\000\000\t\241\000\000\t\241\000\000\000\000\r\166\000\000\000\000\t\241\t\241\t\241\000\000\t\241\t\241\t\241\000\000\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\014\134\000\000\t\241\000\000\000\000\000\000\000\000\000\000\t\241\t\241\014\158\014\182\t\241\000\000\000\000\t\241\000\000\000\000\000\000\000\000\t\241\000\000\000\000\014\206\t\241\000\000\000\000\000\000\000\000\t\241\t\241\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\241\t\241\r\190\014>\014\230\014\254\015.\t\241\t\241\000\000\000\000\t\241\000\000\t\241\015F\000\000\000\000\000\000\000\000\000\000\000\000\t\241\t\241\015^\000\000\t\241\t\241\t\241\000\000\t\241\000\000\000\000\000\000\t\241\000\000\t\241\t\241\000\000\t\241\t\241\t\241\015\022\t\241\t\241\000\000\000\000\t\241\015v\t\241\000\000\000\000\000\000\000\000\t\241\t\241\015\142\015\166\003e\000\000\000\000\000\000\003e\000\000\000\000\003e\000\000\000\000\003e\000\000\003e\000\000\000\000\003e\000\000\000\000\003e\003e\003e\000\000\003e\003e\003e\000\000\000\000\000\000\000\000\000\000\003e\003e\003e\003e\003e\000\000\003e\000\000\000\000\000\000\000\000\000\000\003e\003e\003e\003e\003e\000\000\000\000\003e\000\000\000\000\000\000\000\000\003e\000\000\000\000\003e\003e\000\000\000\000\000\000\000\000\003e\003e\003e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003e\003e\003e\003e\003e\003e\003e\003e\003e\000\000\000\000\003e\000\000\003e\003e\000\000\000\000\000\000\000\000\000\000\000\000\003e\003e\003e\000\000\003e\003e\003e\000\000\003e\000\000\000\000\000\000\003e\000\000\003e\003e\000\000\012\"\003e\003e\003e\003e\003e\000\000\000\000\003e\003e\r\130\000\000\000\000\000\000\000\000\003e\003e\003e\003e\003a\000\000\000\000\000\000\003a\000\000\000\000\003a\000\000\000\000\003a\000\000\003a\000\000\000\000\r\166\000\000\000\000\003a\003a\003a\000\000\003a\003a\003a\000\000\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\014\134\000\000\003a\000\000\000\000\000\000\000\000\000\000\003a\003a\014\158\014\182\003a\000\000\000\000\003a\000\000\000\000\000\000\000\000\003a\000\000\000\000\014\206\003a\000\000\000\000\000\000\000\000\003a\003a\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003a\003a\r\190\014>\014\230\014\254\015.\003a\003a\000\000\000\000\003a\000\000\003a\015F\000\000\000\000\000\000\000\000\000\000\000\000\003a\003a\015^\000\000\003a\003a\003a\000\000\003a\000\000\000\000\000\000\003a\000\000\003a\003a\000\000\015\190\003a\015\246\015\022\003a\003a\000\000\000\000\003a\015v\003a\000\000\000\000\000\000\000\000\003a\003a\015\142\015\166\003\133\000\000\000\000\000\000\003\133\000\000\000\000\003\133\000\000\000\000\003\133\000\000\003\133\000\000\000\000\003\133\000\000\000\000\003\133\003\133\003\133\000\000\003\133\003\133\003\133\000\000\000\000\000\000\000\000\000\000\003\133\003\133\003\133\003\133\003\133\000\000\003\133\000\000\000\000\000\000\000\000\000\000\003\133\003\133\003\133\003\133\003\133\000\000\000\000\003\133\000\000\000\000\000\000\000\000\003\133\000\000\000\000\003\133\003\133\000\000\000\000\000\000\000\000\003\133\003\133\003\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\133\003\133\003\133\003\133\003\133\003\133\003\133\003\133\003\133\000\000\000\000\003\133\000\000\003\133\003\133\000\000\000\000\000\000\000\000\000\000\000\000\003\133\003\133\003\133\000\000\003\133\003\133\003\133\000\000\003\133\000\000\000\000\000\000\003\133\000\000\003\133\003\133\000\000\012\"\003\133\003\133\003\133\003\133\003\133\000\000\000\000\003\133\003\133\r\130\000\000\000\000\000\000\000\000\003\133\003\133\003\133\003\133\003\129\000\000\000\000\000\000\003\129\000\000\000\000\003\129\000\000\000\000\003\129\000\000\003\129\000\000\000\000\r\166\000\000\000\000\003\129\003\129\003\129\000\000\003\129\003\129\003\129\000\000\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\014\134\000\000\003\129\000\000\000\000\000\000\000\000\000\000\003\129\003\129\014\158\014\182\003\129\000\000\000\000\003\129\000\000\000\000\000\000\000\000\003\129\000\000\000\000\014\206\003\129\000\000\000\000\000\000\000\000\003\129\003\129\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\129\003\129\r\190\014>\014\230\014\254\015.\003\129\003\129\000\000\000\000\003\129\000\000\003\129\015F\000\000\000\000\000\000\000\000\000\000\000\000\003\129\003\129\015^\000\000\003\129\003\129\003\129\000\000\003\129\000\000\000\000\000\000\003\129\000\000\003\129\003\129\000\000\015\190\003\129\015\246\015\022\003\129\003\129\000\000\000\000\003\129\015v\003\129\000\000\000\000\000\000\000\000\003\129\003\129\015\142\015\166\003u\000\000\000\000\000\000\003u\000\000\000\000\003u\000\000\000\000\003u\000\000\003u\000\000\000\000\003u\000\000\000\000\003u\003u\003u\000\000\003u\003u\003u\000\000\000\000\000\000\000\000\000\000\003u\003u\003u\003u\003u\000\000\003u\000\000\000\000\000\000\000\000\000\000\003u\003u\003u\003u\003u\000\000\000\000\003u\000\000\000\000\000\000\000\000\003u\000\000\000\000\003u\003u\000\000\000\000\000\000\000\000\003u\003u\003u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003u\003u\003u\003u\003u\003u\003u\003u\003u\000\000\000\000\003u\000\000\003u\003u\000\000\000\000\000\000\000\000\000\000\000\000\003u\003u\003u\000\000\003u\003u\003u\000\000\003u\000\000\000\000\000\000\003u\000\000\003u\003u\000\000\012\"\003u\003u\003u\003u\003u\000\000\000\000\003u\003u\r\130\000\000\000\000\000\000\000\000\003u\003u\003u\003u\003q\000\000\000\000\000\000\003q\000\000\000\000\003q\000\000\000\000\003q\000\000\003q\000\000\000\000\r\166\000\000\000\000\003q\003q\003q\000\000\003q\003q\003q\000\000\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\014\134\000\000\003q\000\000\000\000\000\000\000\000\000\000\003q\003q\014\158\014\182\003q\000\000\000\000\003q\000\000\000\000\000\000\000\000\003q\000\000\000\000\014\206\003q\000\000\000\000\000\000\000\000\003q\003q\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003q\003q\r\190\014>\014\230\014\254\015.\003q\003q\000\000\000\000\003q\000\000\003q\015F\000\000\000\000\000\000\000\000\000\000\000\000\003q\003q\015^\000\000\003q\003q\003q\000\000\003q\000\000\000\000\000\000\003q\000\000\003q\003q\000\000\015\190\003q\015\246\015\022\003q\003q\000\000\000\000\003q\015v\003q\000\000\000\000\000\000\000\000\003q\003q\015\142\015\166\003M\000\000\000\000\000\000\003M\000\000\000\000\003M\000\000\000\000\003M\000\000\003M\000\000\000\000\003M\000\000\000\000\003M\003M\003M\000\000\003M\003M\003M\000\000\000\000\000\000\000\000\000\000\003M\003M\003M\003M\003M\000\000\003M\000\000\000\000\000\000\000\000\000\000\003M\003M\003M\003M\003M\000\000\000\000\003M\000\000\000\000\000\000\000\000\003M\000\000\000\000\003M\003M\000\000\000\000\000\000\000\000\003M\003M\003M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003M\003M\003M\003M\003M\003M\003M\003M\003M\000\000\000\000\003M\000\000\003M\003M\000\000\000\000\000\000\000\000\000\000\000\000\003M\003M\003M\000\000\003M\003M\003M\000\000\003M\000\000\000\000\000\000\003M\000\000\003M\003M\000\000\012\"\003M\003M\003M\003M\003M\000\000\000\000\003M\003M\r\130\000\000\000\000\000\000\000\000\003M\003M\003M\003M\003I\000\000\000\000\000\000\003I\000\000\000\000\003I\000\000\000\000\003I\000\000\003I\000\000\000\000\r\166\000\000\000\000\003I\003I\003I\000\000\003I\003I\003I\000\000\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\014\134\000\000\003I\000\000\000\000\000\000\000\000\000\000\003I\003I\014\158\014\182\003I\000\000\000\000\003I\000\000\000\000\000\000\000\000\003I\000\000\000\000\014\206\003I\000\000\000\000\000\000\000\000\003I\003I\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003I\003I\r\190\014>\014\230\014\254\015.\003I\003I\000\000\000\000\003I\000\000\003I\015F\000\000\000\000\000\000\000\000\000\000\000\000\003I\003I\015^\000\000\003I\003I\003I\000\000\003I\000\000\000\000\000\000\003I\000\000\003I\003I\000\000\015\190\003I\015\246\015\022\003I\003I\000\000\000\000\003I\015v\003I\000\000\000\000\000\000\000\000\003I\003I\015\142\015\166\003]\000\000\000\000\000\000\003]\000\000\000\000\003]\000\000\000\000\003]\000\000\003]\000\000\000\000\003]\000\000\000\000\003]\003]\003]\000\000\003]\003]\003]\000\000\000\000\000\000\000\000\000\000\003]\003]\003]\003]\003]\000\000\003]\000\000\000\000\000\000\000\000\000\000\003]\003]\003]\003]\003]\000\000\000\000\003]\000\000\000\000\000\000\000\000\003]\000\000\000\000\003]\003]\000\000\000\000\000\000\000\000\003]\003]\003]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003]\003]\003]\003]\003]\003]\003]\003]\003]\000\000\000\000\003]\000\000\003]\003]\000\000\000\000\000\000\000\000\000\000\000\000\003]\003]\003]\000\000\003]\003]\003]\000\000\003]\000\000\000\000\000\000\003]\000\000\003]\003]\000\000\012\"\003]\003]\003]\003]\003]\000\000\000\000\003]\003]\r\130\000\000\000\000\000\000\000\000\003]\003]\003]\003]\003Y\000\000\000\000\000\000\003Y\000\000\000\000\003Y\000\000\000\000\003Y\000\000\003Y\000\000\000\000\r\166\000\000\000\000\003Y\003Y\003Y\000\000\003Y\003Y\003Y\000\000\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\014\134\000\000\003Y\000\000\000\000\000\000\000\000\000\000\003Y\003Y\014\158\014\182\003Y\000\000\000\000\003Y\000\000\000\000\000\000\000\000\003Y\000\000\000\000\014\206\003Y\000\000\000\000\000\000\000\000\003Y\003Y\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003Y\003Y\r\190\014>\014\230\014\254\015.\003Y\003Y\000\000\000\000\003Y\000\000\003Y\015F\000\000\000\000\000\000\000\000\000\000\000\000\003Y\003Y\015^\000\000\003Y\003Y\003Y\000\000\003Y\000\000\000\000\000\000\003Y\000\000\003Y\003Y\000\000\015\190\003Y\015\246\015\022\003Y\003Y\000\000\000\000\003Y\015v\003Y\000\000\000\000\000\000\000\000\003Y\003Y\015\142\015\166\003U\000\000\000\000\000\000\003U\000\000\000\000\003U\000\000\000\000\003U\000\000\003U\000\000\000\000\003U\000\000\000\000\003U\003U\003U\000\000\003U\003U\003U\000\000\000\000\000\000\000\000\000\000\003U\003U\003U\003U\003U\000\000\003U\000\000\000\000\000\000\000\000\000\000\003U\003U\003U\003U\003U\000\000\000\000\003U\000\000\000\000\000\000\000\000\003U\000\000\000\000\003U\003U\000\000\000\000\000\000\000\000\003U\003U\003U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003U\003U\003U\003U\003U\003U\003U\003U\003U\000\000\000\000\003U\000\000\003U\003U\000\000\000\000\000\000\000\000\000\000\000\000\003U\003U\003U\000\000\003U\003U\003U\000\000\003U\000\000\000\000\000\000\003U\000\000\003U\003U\000\000\012\"\003U\003U\003U\003U\003U\000\000\000\000\003U\003U\r\130\000\000\000\000\000\000\000\000\003U\003U\003U\003U\003Q\000\000\000\000\000\000\003Q\000\000\000\000\003Q\000\000\000\000\003Q\000\000\003Q\000\000\000\000\r\166\000\000\000\000\003Q\003Q\003Q\000\000\003Q\003Q\003Q\000\000\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\014\134\000\000\003Q\000\000\000\000\000\000\000\000\000\000\003Q\003Q\014\158\014\182\003Q\000\000\000\000\003Q\000\000\000\000\000\000\000\000\003Q\000\000\000\000\014\206\003Q\000\000\000\000\000\000\000\000\003Q\003Q\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003Q\003Q\r\190\014>\014\230\014\254\015.\003Q\003Q\000\000\000\000\003Q\000\000\003Q\015F\000\000\000\000\000\000\000\000\000\000\000\000\003Q\003Q\015^\000\000\003Q\003Q\003Q\000\000\003Q\000\000\000\000\000\000\003Q\000\000\003Q\003Q\000\000\015\190\003Q\015\246\015\022\003Q\003Q\000\000\000\000\003Q\015v\003Q\000\000\000\000\000\000\000\000\003Q\003Q\015\142\015\166\003m\000\000\000\000\000\000\003m\000\000\000\000\003m\000\000\000\000\003m\000\000\003m\000\000\000\000\003m\000\000\000\000\003m\003m\003m\000\000\003m\003m\003m\000\000\000\000\000\000\000\000\000\000\003m\003m\003m\003m\003m\000\000\003m\000\000\000\000\000\000\000\000\000\000\003m\003m\003m\003m\003m\000\000\000\000\003m\000\000\000\000\000\000\000\000\003m\000\000\000\000\003m\003m\000\000\000\000\000\000\000\000\003m\003m\003m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003m\003m\003m\003m\003m\003m\003m\003m\003m\000\000\000\000\003m\000\000\003m\003m\000\000\000\000\000\000\000\000\000\000\000\000\003m\003m\003m\000\000\003m\003m\003m\000\000\003m\000\000\000\000\000\000\003m\000\000\003m\003m\000\000\012\"\003m\003m\003m\003m\003m\000\000\000\000\003m\003m\r\130\000\000\000\000\000\000\000\000\003m\003m\003m\003m\003i\000\000\000\000\000\000\003i\000\000\000\000\003i\000\000\000\000\003i\000\000\003i\000\000\000\000\r\166\000\000\000\000\003i\003i\003i\000\000\003i\003i\003i\000\000\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\014\134\000\000\003i\000\000\000\000\000\000\000\000\000\000\003i\003i\014\158\014\182\003i\000\000\000\000\003i\000\000\000\000\000\000\000\000\003i\000\000\000\000\014\206\003i\000\000\000\000\000\000\000\000\003i\003i\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003i\003i\r\190\014>\014\230\014\254\015.\003i\003i\000\000\000\000\003i\000\000\003i\015F\000\000\000\000\000\000\000\000\000\000\000\000\003i\003i\015^\000\000\003i\003i\003i\000\000\003i\000\000\000\000\000\000\003i\000\000\003i\003i\000\000\015\190\003i\015\246\015\022\003i\003i\000\000\000\000\003i\015v\003i\000\000\000\000\000\000\000\000\003i\003i\015\142\015\166\003\141\000\000\000\000\000\000\003\141\000\000\000\000\003\141\000\000\000\000\003\141\000\000\003\141\000\000\000\000\003\141\000\000\000\000\003\141\003\141\003\141\000\000\003\141\003\141\003\141\000\000\000\000\000\000\000\000\000\000\003\141\003\141\003\141\003\141\003\141\000\000\003\141\000\000\000\000\000\000\000\000\000\000\003\141\003\141\003\141\003\141\003\141\000\000\000\000\003\141\000\000\000\000\000\000\000\000\003\141\000\000\000\000\003\141\003\141\000\000\000\000\000\000\000\000\003\141\003\141\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\003\141\003\141\003\141\003\141\003\141\003\141\000\000\000\000\003\141\000\000\003\141\003\141\000\000\000\000\000\000\000\000\000\000\000\000\003\141\003\141\003\141\000\000\003\141\003\141\003\141\000\000\003\141\000\000\000\000\000\000\003\141\000\000\003\141\003\141\000\000\012\"\003\141\003\141\003\141\003\141\003\141\000\000\000\000\003\141\003\141\r\130\000\000\000\000\000\000\000\000\003\141\003\141\003\141\003\141\003\137\000\000\000\000\000\000\003\137\000\000\000\000\003\137\000\000\000\000\003\137\000\000\003\137\000\000\000\000\r\166\000\000\000\000\003\137\003\137\003\137\000\000\003\137\003\137\003\137\000\000\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\014\134\000\000\003\137\000\000\000\000\000\000\000\000\000\000\003\137\003\137\014\158\014\182\003\137\000\000\000\000\003\137\000\000\000\000\000\000\000\000\003\137\000\000\000\000\014\206\003\137\000\000\000\000\000\000\000\000\003\137\003\137\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\137\003\137\r\190\014>\014\230\014\254\015.\003\137\003\137\000\000\000\000\003\137\000\000\003\137\015F\000\000\000\000\000\000\000\000\000\000\000\000\003\137\003\137\015^\000\000\003\137\003\137\003\137\000\000\003\137\000\000\000\000\000\000\003\137\000\000\003\137\003\137\000\000\015\190\003\137\015\246\015\022\003\137\003\137\000\000\000\000\003\137\015v\003\137\000\000\000\000\000\000\000\000\003\137\003\137\015\142\015\166\003}\000\000\000\000\000\000\003}\000\000\000\000\003}\000\000\000\000\003}\000\000\003}\000\000\000\000\003}\000\000\000\000\003}\003}\003}\000\000\003}\003}\003}\000\000\000\000\000\000\000\000\000\000\003}\003}\003}\003}\003}\000\000\003}\000\000\000\000\000\000\000\000\000\000\003}\003}\003}\003}\003}\000\000\000\000\003}\000\000\000\000\000\000\000\000\003}\000\000\000\000\003}\003}\000\000\000\000\000\000\000\000\003}\003}\003}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003}\003}\003}\003}\003}\003}\003}\003}\003}\000\000\000\000\003}\000\000\003}\003}\000\000\000\000\000\000\000\000\000\000\000\000\003}\003}\003}\000\000\003}\003}\003}\000\000\003}\000\000\000\000\000\000\003}\000\000\003}\003}\000\000\012\"\003}\003}\003}\003}\003}\000\000\000\000\003}\003}\r\130\000\000\000\000\000\000\000\000\003}\003}\003}\003}\003y\000\000\000\000\000\000\003y\000\000\000\000\003y\000\000\000\000\003y\000\000\003y\000\000\000\000\r\166\000\000\000\000\003y\003y\003y\000\000\003y\003y\003y\000\000\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\014\134\000\000\003y\000\000\000\000\000\000\000\000\000\000\003y\003y\014\158\014\182\003y\000\000\000\000\003y\000\000\000\000\000\000\000\000\003y\000\000\000\000\014\206\003y\000\000\000\000\000\000\000\000\003y\003y\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003y\003y\r\190\014>\014\230\014\254\015.\003y\003y\000\000\000\000\003y\000\000\003y\015F\000\000\000\000\000\000\000\000\000\000\000\000\003y\003y\015^\000\000\003y\003y\003y\000\000\003y\000\000\000\000\000\000\003y\000\000\003y\003y\000\000\015\190\003y\015\246\015\022\003y\003y\000\000\000\000\003y\015v\003y\000\000\000\000\000\000\000\000\003y\003y\015\142\015\166\003E\000\000\000\000\000\000\003E\000\000\000\000\003E\000\000\000\000\003E\000\000\003E\000\000\000\000\003E\000\000\000\000\003E\003E\003E\000\000\003E\003E\003E\000\000\000\000\000\000\000\000\000\000\003E\003E\003E\003E\003E\000\000\003E\000\000\000\000\000\000\000\000\000\000\003E\003E\003E\003E\003E\000\000\000\000\003E\000\000\000\000\000\000\000\000\003E\000\000\000\000\003E\003E\000\000\000\000\000\000\000\000\003E\003E\003E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003E\003E\003E\003E\003E\003E\003E\003E\003E\000\000\000\000\003E\000\000\003E\003E\000\000\000\000\000\000\000\000\000\000\000\000\003E\003E\003E\000\000\003E\003E\003E\000\000\003E\000\000\000\000\000\000\003E\000\000\003E\003E\000\000\012\"\003E\003E\003E\003E\003E\000\000\000\000\003E\003E\r\130\000\000\000\000\000\000\000\000\003E\003E\003E\003E\003A\000\000\000\000\000\000\003A\000\000\000\000\003A\000\000\000\000\003A\000\000\003A\000\000\000\000\r\166\000\000\000\000\003A\003A\003A\000\000\003A\003A\003A\000\000\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\014\134\000\000\003A\000\000\000\000\000\000\000\000\000\000\003A\003A\014\158\014\182\003A\000\000\000\000\003A\000\000\000\000\000\000\000\000\003A\000\000\000\000\014\206\003A\000\000\000\000\000\000\000\000\003A\003A\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003A\003A\r\190\014>\014\230\014\254\015.\003A\003A\000\000\000\000\003A\000\000\003A\015F\000\000\000\000\000\000\000\000\000\000\000\000\003A\003A\015^\000\000\003A\003A\003A\000\000\003A\000\000\000\000\000\000\003A\000\000\003A\003A\000\000\015\190\003A\015\246\015\022\003A\003A\000\000\000\000\003A\015v\003A\000\000\000\000\000\000\000\000\003A\003A\015\142\015\166\n\029\000\000\000\000\000\000\n\029\000\000\000\000\n\029\000\000\000\000\n\029\000\000\n\029\000\000\000\000\n\029\000\000\000\000\n\029\n\029\n\029\000\000\n\029\n\029\n\029\000\000\000\000\000\000\000\000\000\000\n\029\n\029\n\029\n\029\n\029\000\000\n\029\000\000\000\000\000\000\000\000\000\000\n\029\n\029\n\029\n\029\n\029\000\000\000\000\n\029\000\000\000\000\000\000\000\000\n\029\000\000\000\000\n\029\n\029\000\000\000\000\000\000\000\000\n\029\n\029\n\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\029\n\029\n\029\n\029\n\029\n\029\n\029\n\029\n\029\000\000\000\000\n\029\000\000\n\029\n\029\000\000\000\000\000\000\000\000\000\000\000\000\n\029\n\029\n\029\000\000\n\029\n\029\n\029\000\000\n\029\000\000\000\000\000\000\n\029\000\000\n\029\n\029\000\000\012\"\n\029\n\029\n\029\n\029\n\029\000\000\000\000\n\029\n\029\r\130\000\000\000\000\000\000\000\000\n\029\n\029\n\029\n\029\n\025\000\000\000\000\000\000\n\025\000\000\000\000\n\025\000\000\000\000\n\025\000\000\n\025\000\000\000\000\r\166\000\000\000\000\n\025\n\025\n\025\000\000\n\025\n\025\n\025\000\000\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\014\134\000\000\n\025\000\000\000\000\000\000\000\000\000\000\n\025\n\025\014\158\014\182\n\025\000\000\000\000\n\025\000\000\000\000\000\000\000\000\n\025\000\000\000\000\014\206\n\025\000\000\000\000\000\000\000\000\n\025\n\025\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\025\n\025\r\190\014>\014\230\014\254\015.\n\025\n\025\000\000\000\000\n\025\000\000\n\025\015F\000\000\000\000\000\000\000\000\000\000\000\000\n\025\n\025\015^\000\000\n\025\n\025\n\025\000\000\n\025\000\000\000\000\000\000\n\025\000\000\n\025\n\025\000\000\n\025\n\025\n\025\015\022\n\025\n\025\000\000\000\000\n\025\015v\n\025\000\000\000\000\000\000\000\000\n\025\n\025\015\142\015\166\011u\000\000\000\000\000\000\011u\000\000\000\000\011u\000\000\000\000\011u\000\000\011u\000\000\000\000\011u\000\000\000\000\011u\011u\011u\000\000\011u\011u\011u\000\000\000\000\000\000\000\000\000\000\011u\011u\011u\011u\011u\000\000\011u\000\000\000\000\000\000\000\000\000\000\011u\011u\011u\011u\011u\000\000\000\000\011u\000\000\000\000\000\000\000\000\011u\000\000\000\000\011u\011u\000\000\000\000\000\000\000\000\011u\011u\011u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011u\011u\011u\011u\011u\011u\011u\011u\011u\000\000\000\000\011u\000\000\011u\011u\000\000\000\000\000\000\000\000\000\000\000\000\011u\011u\011u\000\000\011u\011u\011u\000\000\011u\000\000\000\000\000\000\011u\000\000\011u\011u\000\000\012\"\011u\011u\011u\011u\011u\000\000\000\000\011u\011u\r\130\000\000\000\000\000\000\000\000\011u\011u\011u\011u\002U\000\000\000\000\000\000\002U\000\000\000\000\002U\000\000\000\000\002U\000\000\002U\000\000\000\000\002U\000\000\000\000\002U\002U\002U\000\000\002U\002U\002U\000\000\000\000\000\000\000\000\000\000\002U\002U\002U\002U\002U\000\000\002U\000\000\000\000\000\000\000\000\000\000\002U\002U\002U\002U\002U\000\000\000\000\002U\000\000\000\000\000\000\000\000\002U\000\000\000\000\002U\002U\000\000\000\000\000\000\000\000\002U\002U\002U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002U\002U\002U\002U\002U\002U\002U\002U\002U\000\000\000\000\002U\000\000\002U\002U\000\000\000\000\000\000\000\000\000\000\000\000\002U\002U\002U\000\000\002U\002U\019J\000\000\002U\000\000\000\000\000\000\002U\000\000\002U\002U\000\000\012\"\002U\002U\002U\002U\002U\000\000\000\000\002U\002U\r\130\000\000\000\000\000\000\000\000\002U\002U\002U\002U\002M\000\000\000\000\000\000\002M\000\000\000\000\002M\000\000\000\000\002M\000\000\002M\000\000\000\000\002M\000\000\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\002M\002M\002M\002M\002M\000\000\000\000\002M\000\000\000\000\000\000\000\000\002M\000\000\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\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\000\000\000\000\002M\002M\002M\000\000\002M\002M\002M\000\000\002M\000\000\000\000\000\000\002M\000\000\002M\002M\000\000\012\"\002M\002M\002M\002M\002M\000\000\000\000\002M\002M\r\130\000\000\000\000\000\000\000\000\002M\002M\002M\002M\002I\000\000\000\000\000\000\002I\000\000\000\000\002I\000\000\000\000\002I\000\000\002I\000\000\000\000\r\166\000\000\000\000\002I\002I\002I\000\000\002I\002I\002I\000\000\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\014\134\000\000\002I\000\000\000\000\000\000\000\000\000\000\002I\002I\014\158\014\182\002I\000\000\000\000\002I\000\000\000\000\000\000\000\000\002I\000\000\000\000\014\206\002I\000\000\000\000\000\000\000\000\002I\002I\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002I\002I\r\190\014>\014\230\014\254\015.\002I\002I\000\000\000\000\002I\000\000\002I\015F\000\000\000\000\000\000\000\000\000\000\000\000\002I\002I\015^\000\000\002I\002I\002I\000\000\002I\000\000\000\000\000\000\002I\000\000\002I\002I\000\000\015\190\002I\015\246\015\022\002I\002I\000\000\000\000\002I\015v\002I\000\000\000\000\000\000\000\000\002I\002I\015\142\015\166\002Q\000\000\000\000\000\000\002Q\000\000\000\000\002Q\000\000\000\000\002Q\000\000\002Q\000\000\000\000\r\166\000\000\000\000\002Q\002Q\002Q\000\000\002Q\002Q\002Q\000\000\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\014\134\000\000\002Q\000\000\000\000\000\000\000\000\000\000\002Q\002Q\014\158\014\182\002Q\000\000\000\000\002Q\000\000\000\000\000\000\000\000\002Q\000\000\000\000\014\206\002Q\000\000\000\000\000\000\000\000\002Q\002Q\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002Q\002Q\r\190\014>\014\230\014\254\015.\002Q\002Q\000\000\000\000\002Q\000\000\002Q\015F\000\000\000\000\000\000\000\000\000\000\000\000\002Q\002Q\015^\000\000\002Q\002Q\019f\000\000\002Q\000\000\000\000\000\000\002Q\000\000\002Q\002Q\000\000\015\190\002Q\015\246\015\022\002Q\002Q\000\000\000\000\002Q\015v\002Q\000\000\000\000\000\000\000\000\002Q\002Q\015\142\015\166\002E\000\000\000\000\000\000\002E\000\000\000\000\002E\000\000\000\000\002E\000\000\002E\000\000\000\000\002E\000\000\000\000\002E\002E\002E\000\000\002E\002E\002E\000\000\000\000\000\000\000\000\000\000\002E\002E\002E\002E\002E\000\000\002E\000\000\000\000\000\000\000\000\000\000\002E\002E\002E\002E\002E\000\000\000\000\002E\000\000\000\000\000\000\000\000\002E\000\000\000\000\002E\002E\000\000\000\000\000\000\000\000\002E\002E\002E\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002E\002E\002E\002E\002E\002E\002E\002E\002E\000\000\000\000\002E\000\000\002E\002E\000\000\000\000\000\000\000\000\000\000\000\000\002E\002E\002E\000\000\002E\002E\002E\000\000\002E\000\000\000\000\000\000\002E\000\000\002E\002E\000\000\012\"\002E\002E\002E\002E\002E\000\000\000\000\002E\002E\r\130\000\000\000\000\000\000\000\000\002E\002E\002E\002E\002A\000\000\000\000\000\000\002A\000\000\000\000\002A\000\000\000\000\002A\000\000\002A\000\000\000\000\r\166\000\000\000\000\002A\002A\002A\000\000\002A\002A\002A\000\000\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\014\134\000\000\002A\000\000\000\000\000\000\000\000\000\000\002A\002A\014\158\014\182\002A\000\000\000\000\002A\000\000\000\000\000\000\000\000\002A\000\000\000\000\014\206\002A\000\000\000\000\000\000\000\000\002A\002A\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002A\002A\r\190\014>\014\230\014\254\015.\002A\002A\000\000\000\000\002A\000\000\002A\015F\000\000\000\000\000\000\000\000\000\000\000\000\002A\002A\015^\000\000\002A\002A\002A\000\000\002A\000\000\000\000\000\000\002A\000\000\002A\002A\000\000\015\190\002A\015\246\015\022\002A\002A\000\000\000\000\002A\015v\002A\000\000\000\000\000\000\000\000\002A\002A\015\142\015\166\n1\000\000\000\000\000\000\n1\000\000\000\000\n1\000\000\000\000\n1\000\000\n1\000\000\000\000\n1\000\000\000\000\n1\n1\n1\000\000\n1\n1\n1\000\000\000\000\000\000\000\000\000\000\n1\n1\n1\n1\n1\000\000\n1\000\000\000\000\000\000\000\000\000\000\n1\n1\n1\n1\n1\000\000\000\000\n1\000\000\000\000\000\000\000\000\n1\000\000\000\000\n1\n1\000\000\000\000\000\000\000\000\n1\n1\n1\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n1\n1\n1\n1\n1\n1\n1\n1\n1\000\000\000\000\n1\000\000\n1\n1\000\000\000\000\000\000\000\000\000\000\000\000\n1\n1\n1\000\000\n1\n1\n1\000\000\n1\000\000\000\000\000\000\n1\000\000\n1\n1\000\000\012\"\n1\n1\n1\n1\n1\000\000\000\000\n1\n1\r\130\000\000\000\000\000\000\000\000\n1\n1\n1\n1\n-\000\000\000\000\000\000\n-\000\000\000\000\n-\000\000\000\000\n-\000\000\n-\000\000\000\000\r\166\000\000\000\000\n-\n-\n-\000\000\n-\n-\n-\000\000\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\014\134\000\000\n-\000\000\000\000\000\000\000\000\000\000\n-\n-\014\158\014\182\n-\000\000\000\000\n-\000\000\000\000\000\000\000\000\n-\000\000\000\000\014\206\n-\000\000\000\000\000\000\000\000\n-\n-\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n-\n-\r\190\014>\014\230\014\254\015.\n-\n-\000\000\000\000\n-\000\000\n-\015F\000\000\000\000\000\000\000\000\000\000\000\000\n-\n-\015^\000\000\n-\n-\n-\000\000\n-\000\000\000\000\000\000\n-\000\000\n-\n-\000\000\n-\n-\n-\015\022\n-\n-\000\000\000\000\n-\015v\n-\000\000\000\000\000\000\000\000\n-\n-\015\142\015\166\003=\000\000\000\000\000\000\003=\000\000\000\000\003=\000\000\000\000\003=\000\000\003=\000\000\000\000\003=\000\000\000\000\003=\003=\003=\000\000\003=\003=\003=\000\000\000\000\000\000\000\000\000\000\003=\003=\003=\003=\003=\000\000\003=\000\000\000\000\000\000\000\000\000\000\003=\003=\003=\003=\003=\000\000\000\000\003=\000\000\000\000\000\000\000\000\003=\000\000\000\000\003=\003=\000\000\000\000\000\000\000\000\003=\003=\003=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003=\003=\003=\003=\003=\003=\003=\003=\003=\000\000\000\000\003=\000\000\003=\003=\000\000\000\000\000\000\000\000\000\000\000\000\003=\003=\003=\000\000\003=\003=\003=\000\000\003=\000\000\000\000\000\000\003=\000\000\003=\003=\000\000\012\"\003=\003=\003=\003=\003=\000\000\000\000\003=\003=\r\130\000\000\000\000\000\000\000\000\003=\003=\003=\003=\0039\000\000\000\000\000\000\0039\000\000\000\000\0039\000\000\000\000\0039\000\000\0039\000\000\000\000\r\166\000\000\000\000\0039\0039\0039\000\000\0039\0039\0039\000\000\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\014\134\000\000\0039\000\000\000\000\000\000\000\000\000\000\0039\0039\014\158\014\182\0039\000\000\000\000\0039\000\000\000\000\000\000\000\000\0039\000\000\000\000\014\206\0039\000\000\000\000\000\000\000\000\0039\0039\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0039\0039\r\190\014>\014\230\014\254\015.\0039\0039\000\000\000\000\0039\000\000\0039\015F\000\000\000\000\000\000\000\000\000\000\000\000\0039\0039\015^\000\000\0039\0039\0039\000\000\0039\000\000\000\000\000\000\0039\000\000\0039\0039\000\000\015\190\0039\015\246\015\022\0039\0039\000\000\000\000\0039\015v\0039\000\000\000\000\000\000\000\000\0039\0039\015\142\015\166\0029\000\000\000\000\000\000\0029\000\000\000\000\0029\000\000\000\000\0029\000\000\0029\000\000\000\000\0029\000\000\000\000\0029\0029\0029\000\000\0029\0029\0029\000\000\000\000\000\000\000\000\000\000\0029\0029\0029\0029\0029\000\000\0029\000\000\000\000\000\000\000\000\000\000\0029\0029\0029\0029\0029\000\000\000\000\0029\000\000\000\000\000\000\000\000\0029\000\000\000\000\0029\0029\000\000\000\000\000\000\000\000\0029\0029\0029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0029\0029\0029\0029\0029\0029\0029\0029\0029\000\000\000\000\0029\000\000\0029\0029\000\000\000\000\000\000\000\000\000\000\000\000\0029\0029\0029\000\000\0029\0029\0029\000\000\0029\000\000\000\000\000\000\0029\000\000\0029\0029\000\000\0029\0029\0029\0029\0029\0029\000\000\000\000\0029\0029\r\130\000\000\000\000\000\000\000\000\0029\0029\0029\0029\nY\000\000\000\000\000\000\nY\000\000\000\000\nY\000\000\000\000\nY\000\000\nY\000\000\000\000\nY\000\000\000\000\nY\nY\nY\000\000\nY\nY\nY\000\000\000\000\000\000\000\000\000\000\nY\nY\nY\nY\nY\000\000\nY\000\000\000\000\000\000\000\000\000\000\nY\nY\nY\nY\nY\000\000\000\000\nY\000\000\000\000\000\000\000\000\nY\000\000\000\000\nY\nY\000\000\000\000\000\000\000\000\nY\nY\nY\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nY\nY\nY\nY\nY\nY\nY\nY\nY\000\000\000\000\nY\000\000\nY\nY\000\000\000\000\000\000\000\000\000\000\000\000\nY\nY\nY\000\000\nY\nY\nY\000\000\nY\000\000\000\000\000\000\nY\000\000\nY\nY\000\000\012\"\nY\nY\nY\nY\nY\000\000\000\000\nY\nY\r\130\000\000\000\000\000\000\000\000\nY\nY\nY\nY\nU\000\000\000\000\000\000\nU\000\000\000\000\nU\000\000\000\000\nU\000\000\nU\000\000\000\000\r\166\000\000\000\000\nU\nU\nU\000\000\nU\nU\nU\000\000\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\014\134\000\000\nU\000\000\000\000\000\000\000\000\000\000\nU\nU\014\158\014\182\nU\000\000\000\000\nU\000\000\000\000\000\000\000\000\nU\000\000\000\000\014\206\nU\000\000\000\000\000\000\000\000\nU\nU\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nU\nU\r\190\014>\014\230\014\254\015.\nU\nU\000\000\000\000\nU\000\000\nU\015F\000\000\000\000\000\000\000\000\000\000\000\000\nU\nU\015^\000\000\nU\nU\nU\000\000\nU\000\000\000\000\000\000\nU\000\000\nU\nU\000\000\nU\nU\nU\015\022\nU\nU\000\000\000\000\nU\015v\nU\000\000\000\000\000\000\000\000\nU\nU\015\142\015\166\nE\000\000\000\000\000\000\nE\000\000\000\000\nE\000\000\000\000\nE\000\000\nE\000\000\000\000\nE\000\000\000\000\nE\nE\nE\000\000\nE\nE\nE\000\000\000\000\000\000\000\000\000\000\nE\nE\nE\nE\nE\000\000\nE\000\000\000\000\000\000\000\000\000\000\nE\nE\nE\nE\nE\000\000\000\000\nE\000\000\000\000\000\000\000\000\nE\000\000\000\000\nE\nE\000\000\000\000\000\000\000\000\nE\nE\nE\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nE\nE\nE\nE\nE\nE\nE\nE\nE\000\000\000\000\nE\000\000\nE\nE\000\000\000\000\000\000\000\000\000\000\000\000\nE\nE\nE\000\000\nE\nE\nE\000\000\nE\000\000\000\000\000\000\nE\000\000\nE\nE\000\000\012\"\nE\nE\nE\nE\nE\000\000\000\000\nE\nE\r\130\000\000\000\000\000\000\000\000\nE\nE\nE\nE\nA\000\000\000\000\000\000\nA\000\000\000\000\nA\000\000\000\000\nA\000\000\nA\000\000\000\000\r\166\000\000\000\000\nA\nA\nA\000\000\nA\nA\nA\000\000\000\000\000\000\000\000\000\000\014\014\014V\014n\014&\014\134\000\000\nA\000\000\000\000\000\000\000\000\000\000\nA\nA\014\158\014\182\nA\000\000\000\000\nA\000\000\000\000\000\000\000\000\nA\000\000\000\000\014\206\nA\000\000\000\000\000\000\000\000\nA\nA\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nA\nA\r\190\014>\014\230\014\254\015.\nA\nA\000\000\000\000\nA\000\000\nA\015F\000\000\000\000\000\000\000\000\000\000\000\000\nA\nA\015^\000\000\nA\nA\nA\000\000\nA\000\000\000\000\000\000\nA\000\000\nA\nA\000\000\nA\nA\nA\015\022\nA\nA\000\000\000\000\nA\015v\nA\000\000\000\000\000\000\000\000\nA\nA\015\142\015\166\002=\000\000\000\000\000\000\002=\000\000\000\000\002=\000\000\000\000\002=\000\000\002=\000\000\000\000\002=\000\000\000\000\002=\002=\002=\000\000\002=\002=\002=\000\000\000\000\000\000\000\000\000\000\002=\002=\002=\002=\002=\000\000\002=\000\000\000\000\ba\ba\000\000\002=\002=\002=\002=\002=\000\000\000\000\002=\000\000\000\000\000\000\000\000\002=\000\000\000\000\002=\002=\ba\ba\ba\000\000\002=\002=\002=\000\000\000\000\000\000\ba\000\000\000\000\000\000\000\000\000\000\000\000\002=\002=\002=\002=\002=\002=\002=\002=\002=\ba\ba\002=\000\000\002=\002=\ba\000\000\ba\ba\ba\000\000\002=\002=\002=\ba\002=\002=\002=\000\000\002=\000\000\000\000\000\000\002=\000\000\002=\002=\000\000\002=\002=\002=\002=\002=\002=\000\000\ba\002=\002=\r\130\000\000\000\000\000\000\000\000\002=\002=\002=\002=\000\006\000\000\000\000\000\250\002\174\002\178\002\182\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\005f\000\000\000\000\000\000\006\005\000\000\005j\001\198\000\000\023V\000\000\004\186\000\000\005n\005r\004\022\000\000\000\000\005v\000\000\004\190\000\000\005\146\000\000\022\234\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\023N\002\166\000\000\000\000\005\226\023f\000\000\000\000\n\174\n\178\n\190\n\246\011b\002\002\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\002\006\023n\000\000\011z\000\000\000\000\000\000\000\000\001\198\000\000\011\134\011\158\012V\006r\006v\023\130\023\190\000\000\000\000\006\005\006\005\000\000\000\000\021\030\000\000\005J\002~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\tv\001\210\023\250\027\238\006z\n\234\000\000\000\000\002\166\011\002\003J\012j\000\145\002\174\002\178\000\145\000\000\002~\000\000\012\250\000\000\000\000\004\182\000\000\000\000\000\000\000\145\014\205\000\145\000\000\000\145\000\000\000\145\001\198\021\"\r\018\000\000\004\186\000\000\000\000\t~\000\000\000\000\r\026\000\145\000\000\004\190\014\205\005\146\021.\000\145\027\154\000\000\000\000\000\145\005\198\005\202\000\000\000\000\005\218\001\178\000\000\000\145\000\000\000\000\000\000\000\145\002\166\000\000\014\205\005\226\000\145\000\145\000\145\n\174\n\178\n\190\000\000\r\"\006v\n\198\014\205\n\230\006f\000\145\000\145\014\205\014\205\000\242\000\000\027\166\000\145\000\000\000\000\000\000\000\145\000\000\000\000\000\000\014\205\014\205\000\000\000\000\006r\006v\000\145\000\145\027Z\000\000\000\145\000\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\145\000\000\000\000\000\000\000\000\014\205\000\145\000\145\006z\n\234\000\000\000\000\000\000\011\002\003J\014\205\000\145\000\000\000\145\000\169\002\174\002\178\000\169\000\000\002~\000\000\012\250\000\000\000\000\004\182\000\000\000\000\000\000\000\169\005\241\000\169\000\000\000\169\000\000\000\169\001\198\000\000\r\018\000\000\004\186\000\000\000\000\000\000\000\000\000\000\r\026\000\169\000\000\004\190\005\241\005\146\000\000\000\169\011\154\000\000\000\000\000\169\005\198\005\202\000\000\000\000\005\218\001\178\000\000\000\169\000\000\000\000\000\000\000\169\002\166\000\000\005\241\005\226\000\169\000\169\000\169\n\174\n\178\n\190\000\000\r\"\000\000\n\198\005\241\n\230\006f\000\169\000\169\005\241\002\214\000\242\000\000\000\000\000\169\019\030\000\000\000\000\000\169\000\000\000\000\000\000\005\241\005\241\000\000\000\000\006r\006v\000\169\000\169\000\000\000\000\000\169\000\169\000\000\000\000\000\000\000\242\000\000\000\000\000\000\000\000\000\000\000\169\000\000\000\000\000\000\000\000\005\241\000\169\000\169\006z\n\234\000\000\000\000\000\000\011\002\003J\005\241\000\169\000\006\000\169\000\000\000\250\002\174\002\178\002\182\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\006%\000\000\000\000\000\000\000\000\000\000\005j\001\198\000\000\007\154\000\000\004\186\007^\005n\005r\000\000\000\000\000\000\005v\007\214\004\190\000\000\005\146\007\222\022\234\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\023N\002\166\000\000\000\000\005\226\023f\000\000\000\000\n\174\n\178\n\190\n\246\011b\004\005\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023n\000\000\011z\000\000\"\174\000\000\000\000\000\000\004\005\011\134\011\158\012V\006r\006v\023\130\023\190\000\000\000\006\"\207\020v\000\250\002\174\002\178\002\182\002\222\002~\000\000\002\234\000\000\000\000\004\182\004\005\000\000\000\000\"\254\000\000\027\238\006z\n\234\006\157\005j\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\005v\004\005\004\190\000\000\005\146\000\000\022\234\021\030\005\190\005\194\002~\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\023N\002\166\000\000\ni\005\226\023f\000\000\027\150\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\ni\ni\006\157\ni\ni\023n\000\000\011z\000\000\"\174\021\"\000\000\007!\000\000\011\134\011\158\012V\006r\006v\023\130\023\190\000\000\000\000\006-\ni\021.\000\000\027\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\027\238\006z\n\234\000\000\000\000\ni\011\002\003J\012j\000\014\000\018\000\022\000\026\000\030\006v\000\"\000&\000*\000.\0002\000\000\0006\000:\000\000\000\000\027\198\000>\000\000\000\000\000\000\000B\000\000\000\000\000\000\000\000\000\000\000\000\000F\000\000\ni\000\000\ni\027Z\000J\000\000\000N\000R\000V\000Z\000^\000b\000f\000\000\000\000\007.\000j\000\000\ni\ni\000n\000\000\000r\ni\000v\ni\000\000\000\000\000\000\ni\000\000\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\000~\000\130\000\000\000\000\000\000\000\000\000\000\000\134\000\138\000\142\000\000\000\000\000\000\000\000\000\000\000\146\000\150\000\154\000\158\000\000\000\162\000\166\000\170\000\000\000\000\000\000\000\174\000\178\000\182\000\186\000\000\000\000\000\000\000\190\000\000\000\194\000\198\025*\004\206\002\178\007n\000\000\002~\000\202\004\210\000\206\000\000\004\182\001\n\000\000\000\000\000\210\000\214\002\138\000\218\000\000\000\000\005j\001\198\000\000\000\000\000\000\001\014\001\018\001\022\005&\001\030\001\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005*\000\000\001&\007\134\025V\000\000\000\000\000\000\000\000\005\"\001\178\001.\000\000\000\000\000\000\0012\023N\002\166\000\000\000\000\006*\023f\000\000\001\241\006.\000\000\0066\006Z\006\182\000\000\000\000\000\000\000\000\006f\001\241\025\130\0016\001:\001>\001B\001F\000\000\001\241\000\000\001J\006j\000\000\000\000\001N\000\000\000\n\000\000\000\000\006r\006v\000\000\006\242\001R\000\000\001\241\006\021\000\000\006\254\000\000\001V\000\000\000\000\000\000\001\241\001\241\025\230\000\000\000\000\000\000\001\146\007\138\001\241\000\000\006z\000\000\000\000\001\150\001\241\001\154\003J\000\000\000\000\001\158\000\000\001\162\001\166\004\206\002\178\011\218\000\000\002~\000\000\004\210\000\000\000\000\004\182\001\n\000\000\000\000\000\000\000\000\002\138\000\000\001\241\000\000\000\000\001\198\000\000\000\000\000\000\001\014\001\018\001\022\005&\001\030\001\"\000\000\000\000\001\241\001\241\000\000\000\000\000\000\005*\000\000\001&\007\134\000\000\000\000\000\000\000\000\000\000\005\"\001\178\001.\000\000\000\000\000\000\0012\001\241\002\166\000\000\001\241\006*\000\000\001\241\000\n\006.\000\000\0066\006Z\006\182\001\241\000\000\000\000\000\000\006f\000\000\001\241\0016\001:\001>\001B\001F\001\241\001\241\000\000\001J\006j\000\000\000\000\001N\000\000\000\000\000\000\000\000\006r\006v\001\241\006\242\001R\000\000\000\000\000\000\000\000\006\254\000\000\001V\000\000\000\000\000\000\000\000\000\000\001\241\000\000\000\000\000\000\001\146\007\138\000\000\000\000\006z\001\190\001\194\001\150\t\149\001\154\003J\t\149\000\000\001\158\000\000\001\162\001\166\005a\004\206\002\178\005a\000\000\002~\000\000\t\026\001\198\001\238\004\182\000\000\000\000\028\146\005a\000\000\000\000\000\000\005a\000\000\005a\001\198\000\000\t:\001\241\000\000\000\000\000\000\005\n\000\000\000\000\011\170\005a\000\000\001\234\002\158\t\149\000\000\005a\000\000\002\154\005\022\002\166\002\250\003\006\000\000\000\000\011\214\001\178\003\018\005a\t\149\000\000\014\193\005a\002\166\000\000\000\000\006*\005a\005a\012\169\006.\000\000\0066\000\000\011\230\000\000\000\000\000\000\003\022\006f\006\197 \162\000\000\000\000\006\197\000\000\000\000\005a\005a\t\149\000\000\006j\000\000\000\000\000\000\000\000\000\000\000\000 \142\006r\006v\005a\005a\016\026\000\000\005a\005a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\149\012\169\002\246\000\000\012\169\016\"\005a\006z\000\000\000\000\000\000\012\169\000\000\003J\000\006\012\169\000\000\005a\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\014\193\014\193\000\000\011A\000\000\011A\011A\000\000\001\198\000\000\000\000\000\000\004\186\006\197\005n\005r\000\000\000\000\000\000\000\000\014\193\004\190\014\193\005\146\000\000\000\000\000\000\005\190\005\194\006\197\005\198\005\202\006\197\005\206\005\218\005\230\005\238\tJ\000\000\001\190\001\194\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\001\198\001\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\r2\011\158\012V\006r\006v\000\000\000\000\000\000\000\000\000\000\001\234\002\158\000\000\000\000\000\000\000\000\002\154\000\000\002\166\002\250\003\006\000\000\000\000\000\000\000\000\003\018\000\000\000\000\006z\n\234\011A\000\000\000\006\011\002\003J\012j\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\003\022\000\000\000\000\006e\000\000\0119\000\000\0119\0119\000\000\001\198\000\000\000\000\000\000\004\186\000\000\005n\005r\000\000\000\000 \142\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\001\241\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\001\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\n\000\000\000\000\000\000\000\000\000\000\r2\011\158\012V\006r\006v\000\000\000\000\001\241\001\241\000\000\000\000\000\000\001\241\001\241\000\000\001\241\001\241\000\000\001\241\001\241\000\000\001\241\000\000\000\000\001\241\000\000\001\241\000\000\006z\n\234\0119\000\000\001\241\011\002\003J\012j\001\241\001\241\001\241\001\241\000\n\000\000\000\000\000\000\000\000\001\241\000\000\001\241\000\000\000\000\000\000\001\241\001\241\000\000\001\241\001\241\000\000\001\241\001\241\001\241\001\241\001\241\000\000\001\241\000\000\000\000\001\241\004\181\000\000\001\241\000\000\000\000\001\241\001\241\001\241\001\241\001\241\001\241\000\000\001\241\000\000\001\241\001\241\000\000\004\181\004\181\000\000\004\181\004\181\000\000\000\000\000\000\001\241\000\000\001\241\000\000\000\000\000\000\000\000\001\241\001\241\001\241\001\241\001\241\000\000\000\000\000\000\000\006\004\181\001\241\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\001\241\001\241\000\000\000\242\001\198\001\241\001\241\001\241\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\004\181\002\166\004\181\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\004\181\n\230\006f\007^\004\181\000\000\000\000\000\000\004\181\000\000\004\181\000\000\011z\000\000\004\181\000\000\000\000\000\000\000\000\r2\011\158\012V\006r\006v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\141\006z\n\234\022\022\000\000\000\006\011\002\003J\012j\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\014\141\000\000\000\000\002\026\000\000\0062\002\030\000\000\001\198\000\000\000\000\000\000\004\186\000\000\005n\005r\000\000\000\000\000\000\002*\000\000\004\190\000\000\005\146\000\000\0022\014y\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\t\021\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\0026\n\198\000\000\n\230\006f\000\000\t\021\t\021\000\000\t\021\t\021\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\r2\011\158\012V\006r\006v\000\000\000\000\000\000\000A\t\021\000\000\000\000\000A\000A\000\000\000A\000A\000\000\000A\000\000\000\000\000A\000\000\000\000\002:\000\000\000\000\b%\006z\n\234\020\014\t\021\000A\011\002\003J\012j\000A\000\000\000A\000A\000\000\000\000\000\000\000\000\000\000\000A\000\000\000A\000\000\000\000\000\000\000A\000A\000\000\000A\000A\000\000\000A\000A\000A\000A\000A\000\000\000\000\000\000\t\021\000A\t\021\000\000\000A\000\000\000\000\000\000\000A\000A\000A\000A\000A\000\000\000A\t\021\000A\000A\007^\t\021\000\000\000\000\000\000\t\021\000\000\t\021\000\000\000A\000\000\t\021\000\000\000\000\000\000\000\000\000A\000A\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\b!\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=\004\197\000\000\000=\000\000\000\000\000\000\000=\000=\000=\000=\000=\000\000\000=\000\000\000=\000=\000\000\004\197\004\197\000\000\004\197\004\197\000\000\000\000\000\000\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\029\004\197\000\000\000\000\014\029\014\029\000\000\014\029\014\029\000\000\014\029\000\000\000\000\014\029\000\000\000\000\000\000\000\000\000\000\b1\000=\000=\000\000\000\242\014\029\000=\000=\000=\014\029\000\000\014\029\014\029\000\000\000\000\000\000\000\000\000\000\014\029\000\000\014\029\000\000\000\000\000\000\014\029\014\029\000\000\014\029\014\029\000\000\014\029\014\029\014\029\014\029\014\029\000\000\000\000\000\000\004\197\014\029\004\197\000\000\014\029\000\000\000\000\000\000\014\029\014\029\014\029\014\029\014\029\000\000\014\029\004\197\014\029\014\029\007^\004\197\000\000\000\000\000\000\004\197\000\000\004\197\000\000\014\029\000\000\004\197\000\000\000\000\000\000\000\000\014\029\014\029\014\029\014\029\014\029\000\000\000\000\000\000\014\025\000\000\000\000\000\000\014\025\014\025\000\000\014\025\014\025\000\000\014\025\000\000\000\000\014\025\000\000\000\000\000\000\000\000\000\000\b-\014\029\014\029\000\000\000\000\014\025\014\029\014\029\014\029\014\025\000\000\014\025\014\025\000\000\000\000\000\000\000\000\000\000\014\025\000\000\014\025\000\000\000\000\000\000\014\025\014\025\000\000\014\025\014\025\000\000\014\025\014\025\014\025\014\025\014\025\000\000\000\241\000\000\000\000\014\025\000\000\000\000\014\025\000\000\000\000\000\000\014\025\014\025\014\025\014\025\014\025\000\000\014\025\000\000\014\025\014\025\000\241\000\000\000\000\000\000\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\014\025\014\025\014\025\014\025\000\000\000\241\000\000\000\000\000\000\000\000\004\202\000\000\000\000\000\000\000\000\000\000\000\006\000\241\000\000\000\000\002\174\002\178\000\241\002\222\002~\000\000\002\234\014\025\014\025\004\182\000\000\000\000\014\025\014\025\014\025\000\241\000\241\020\030\000\000\000\000\001\198\000\000\000\000\000\000\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\241\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\241\000\000\000\000\002\166\t)\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\t)\t)\000\000\t)\t)\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\r2\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\t)\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\004\158\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\242\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\t)\002\166\t)\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\031\142\000\000\n\198\007\154\n\230\006f\007^\t)\000\000\000\000\000\000\t)\000\000\t)\000\000\011z\000\000\t)\000\000\000\000\000\000\000\000\031\150\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\250\002\174\002\178\002\014\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\023\254\000\000\000\000\006z\n\234\000\000\005j\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\024\002\000\000\004\190\000\000\005\146\000\000\024*\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\023N\002\166\004\213\000\000\005\226\023f\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\004\213\004\213\000\000\004\213\004\213\000\000\024\190\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\022n\011\158\012V\006r\006v\023\130\024\210\000\000\000\006\004\213\005\249\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\024\226\006z\n\234\000\000\000\242\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\004\213\002\166\004\213\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\004\213\n\230\006f\007^\004\213\000\000\000\000\000\000\004\213\000\000\004\213\000\000\011z\000\000\004\213\000\000\000\000\000\000\000\000\022\002\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\004\245\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\004\245\004\245\000\000\004\245\004\245\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\020\138\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\004\245\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\242\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\004\245\002\166\004\245\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\004\245\n\230\006f\007^\004\245\000\000\000\000\000\000\004\245\000\000\004\245\000\000\011z\000\000\004\245\000\000\000\000\000\000\000\000\012\018\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\012&\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\004\229\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\012>\000\000\n\198\000\000\n\230\006f\000\000\004\229\004\229\000\000\004\229\004\229\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\018\250\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\004\229\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\242\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\004\229\002\166\004\229\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\004\229\n\230\006f\007^\004\229\000\000\000\000\000\000\004\229\000\000\004\229\000\000\011z\000\000\004\229\000\000\000\000\000\000\000\000\012\226\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\250\002\174\002\178\002\014\002\222\002~\000\000\rR\000\000\000\000\004\182\000\000\000\000\000\000\023\254\000\000\000\000\006z\n\234\000\000\005j\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\024\002\000\000\004\190\000\000\005\146\000\000\024*\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\023N\002\166\000\000\000\000\005\226\023f\000\000\000\000\n\174\n\178\n\190\n\246\rj\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\190\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\rr\011\158\012V\006r\006v\023\130\024\210\000\000\000\006\005\249\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\024\226\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\014\141\014y\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\014\141\000\000\002\166\002\026\000\000\005\226\002\030\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\002*\000\000\000\000\000\000\000\000\000\000\0022\014y\000\000\011z\0056\tz\000\000\000\000\000\000\000\000\r\170\011\158\012V\006r\006v\000\000\002\006\000\000\000\006\tj\000\000\000\000\002\174\002\178\001\198\002\222\002~\000\000\002\234\0026\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\005J\001\198\011\002\003J\012j\004\186\000\000\005n\005r\tv\001\210\000\000\000\000\000\000\004\190\000\000\005\146\002\166\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\002:\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\t~\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\r\194\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\028\022\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\005j\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\028\134\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\023N\002\166\000\000\000\000\005\226\023f\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\029*\029:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\r\230\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\006\029\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\030&\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\014\018\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\014*\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\014B\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\014Z\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\014r\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\014\138\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\014\162\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\014\186\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\014\210\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\014\234\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\015\002\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\015\026\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\0152\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\015J\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\015b\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\015z\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\015\146\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\015\170\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\015\194\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\015\218\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\015\226\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\015\250\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\017\026\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\017>\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\017b\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\017\138\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\017\174\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\017\210\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\017\254\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\018\"\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\018F\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\018b\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\019:\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\019N\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\002\234\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\011b\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\019j\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\019\162\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\019\186\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\019\194\011\158\012V\006r\006v\000\000\000\000\000\000\000\006\000\000\000\000\000\000\002\174\002\178\000\000\002\222\002~\000\000\031\178\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\000\000\001\198\011\002\003J\012j\004\186\000\000\005n\005r\000\000\000\000\000\000\000\000\000\000\004\190\000\000\005\146\000\000\000\000\000\000\005\190\005\194\000\000\005\198\005\202\000\000\005\206\005\218\005\230\005\238\tJ\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\246\031\202\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011z\000\000\000\000\000\000\000\000\000\000\000\000\031\210\011\158\012V\006r\006v\000\000\000\000\006\149\000\000\006\149\006\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\149\000\000\000\000\006\149\000\000\006\149\000\000\006\149\000\000\006\149\006z\n\234\000\000\000\000\006\149\011\002\003J\012j\006\149\006\149\006\149\006\149\000\000\006\149\000\000\006\149\006\149\006\149\006\149\006\149\000\000\000\000\006\149\006\149\006\149\000\000\006\149\006\149\006\149\006\149\006\149\006\149\006\149\006\149\006\149\006\149\000\000\000\000\006\149\006\149\006\149\000\000\000\000\000\000\000\000\006\149\006\149\006\149\000\000\000\000\006\149\006\149\006\149\006\149\006\149\006\149\006\149\006\149\006\149\000\000\000\000\006\149\006\149\006\149\000\000\006\149\000\000\006\149\006\149\006\149\000\000\000\000\006\149\006\149\006\149\006\149\006\149\006\149\000\000\000\000\006\149\006\149\000\000\000\000\000\000\006\149\006\149\006\149\006\149\000\000\000\000\006\149\006\149\026j\006\149\000\000\006\149\000\000\006\149\006\149\000\000\006\149\006\149\006\149\000\000\006\149\006\149\006\149\006\149\006\149\006\149\006\149\006\149\006\149\000\000\000\000\006\149\000\000\006\149\006\149\000\000\006\149\002\146\006\149\006\149\006\149\006\149\003\170\006\149\003\202\006\149\000\000\006\149\006\149\006\149\006\149\000\000\006\149\000\000\006\149\006\149\006\149\006\149\012\197\000\000\000\000\012\197\012\197\000\000\000\000\012\197\000\000\012\197\000\000\000\000\012\197\000\000\000\000\000\000\000\000\012\197\012\197\000\000\012\197\012\197\000\000\012\197\000\000\012\197\000\000\000\000\000\000\000\000\012\197\000\000\000\000\012\197\000\000\001\190\001\194\000\000\000\000\000\000\000\000\012\197\000\000\012\197\000\000\000\000\000\000\000\000\000\000\012\197\012\197\000\000\000\000\000\000\000\000\001\198\001\238\012\197\000\000\000\000\012\197\000\000\000\000\012\197\012\197\000\000\012\197\000\000\012\197\000\000\000\000\000\000\000\000\012\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\234\002\150\000\000\014\193\012\197\000\000\002\154\000\000\002\166\002\250\003\006\000\000\012\197\012\197\000\000\003\018\012\197\021:\012\197\000\000\000\000\000\000\006\201\000\000\006\150\000\000\006\201\000\000\000\000\000\000\000\000\012\197\012\197\000\000\012\197\012\197\003\022\012\197\000\000\012\197\014U\012\197\000\000\012\197\014U\012\197\001\194\014U\000\000\000\000\000\000\000\000\000\000\014\141\014y\003\162\000\000\000\000\014U\014U\014U\000\000\014U\014U\014U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\141\000\000\014U\002\026\000\000\000\000\002\030\000\250\014U\014U\002\182\000\000\014U\002&\000\000\014\193\014\193\000\000\002\150\002*\014U\006%\000\000\000\000\014U\0022\014y\005j\006\201\014U\014U\014U\000\000\000\000\000\000\014\193\000\000\014\193\000\000\005v\000\000\000\000\014U\014U\006\201\022\234\000\000\006\201\000\000\014U\000\000\000\000\000\000\003\178\0026\000\000\014U\030\162\000\000\000\000\000\000\023N\000\000\014U\014U\014U\023f\014U\014U\011\025\000\000\000\000\000\000\011\025\000\000\001\194\011\025\000\000\014U\000\000\014U\014U\000\000\000\000\011\025\014U\023n\011\025\011\025\011\025\014U\011\025\011\025\011\025\014U\000\000\014U\014U\000\000\002:\023\130\023\190\000\000\000\000\000\000\011\025\000\000\000\000\000\000\000\000\000\000\011\025\011\025\000\000\000\000\011\025\000\000\000\000\000\000\000\000\000\000\002\150\027\238\011\025\000\000\000\000\000\000\011\025\000\000\000\000\000\000\000\000\011\025\011\025\011\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\025\011\025\000\000\000\000\000\000\000\000\000\000\011\025\000\000\000\000\000\000\003\178\000\000\000\000\011\025\000\000\000\000\000\000\000\000\000\000\000\000\011\025\011\025\011\025\000\249\011\025\011\025\011!\000\000\000\000\000\000\011!\000\000\001\194\011!\000\000\011\025\000\000\011\025\011\025\014\141\014y\011!\011\025\000\249\011!\011!\011!\011\025\011!\011!\011!\011\025\000\000\011\025\011\025\000\000\000\000\000\000\000\000\000\000\014\141\000\000\011!\002\026\000\000\000\249\002\030\000\000\011!\011!\025\026\000\000\011!\002\194\000\000\000\000\000\000\000\249\002\150\002*\011!\000\000\000\249\000\000\011!\0022\014y\000\000\000\000\011!\011!\011!\000\000\000\000\000\000\000\000\000\249\000\000\000\000\000\000\000\000\000\000\011!\011!\000\000\000\000\000\000\000\000\000\000\011!\000\000\000\000\000\000\003\178\0026\000\000\011!\000\000\000\000\000\000\000\000\000\249\000\000\011!\011!\011!\000\000\011!\011!\011\029\000\000\000\249\000\000\011\029\000\000\001\194\011\029\000\000\011!\000\000\011!\011!\000\000\000\000\011\029\011!\000\000\011\029\011\029\011\029\011!\011\029\011\029\011\029\011!\000\000\011!\011!\000\000\002:\000\000\000\000\000\000\000\000\000\000\011\029\000\000\000\000\000\000\000\000\000\000\011\029\011\029\000\000\000\000\011\029\000\000\000\000\000\000\000\000\000\000\002\150\000\000\011\029\000\000\000\000\000\000\011\029\000\000\000\000\000\000\000\000\011\029\011\029\011\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\029\011\029\000\000\000\000\000\000\000\000\000\000\011\029\000\000\000\000\000\000\003\178\000\000\000\000\011\029\000\000\000\000\000\000\000\000\000\000\000\000\011\029\011\029\011\029\000\000\011\029\011\029\011\021\000\000\000\000\000\000\011\021\000\000\001\194\011\021\000\000\011\029\000\000\011\029\011\029\000\000\000\000\011\021\011\029\000\000\011\021\011\021\011\021\011\029\011\021\011\021\011\021\011\029\000\000\011\029\011\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\021\000\000\000\000\000\000\000\000\000\000\011\021\011\021\000\000\000\000\011\021\000\000\000\000\000\000\000\000\000\000\002\150\000\000\011\021\000\000\000\000\000\000\011\021\000\000\000\000\000\000\000\000\011\021\011\021\011\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\021\011\021\000\000\000\000\000\000\000\000\000\000\011\021\000\000\000\000\000\000\003\178\000\000\000\000\011\021\000\000\000\000\000\000\000\000\000\000\000\000\011\021\011\021\011\021\000\000\011\021\011\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\021\000\000\011\021\011\021\000\000\000\000\000\000\011\021\000\000\000\000\000\000\000\000\011\021\000\000\000\000\000\000\011\021\012\209\011\021\011\021\004\206\002\178\000\000\000\000\002~\000\000\004\210\000\000\000\000\004\182\000\000\000\000\000\000\000\000\012\209\012\209\000\000\012\209\012\209\000\000\001\198\000\000\001\190\001\194\000\000\000\000\000\000\005\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\209\000\000\005\022\000\000\001\198\001\238\001\218\000\000\005\"\001\178\000\000\000\000\000\000\000\000\001\230\000\000\002\166\000\000\000\000\006*\000\000\001\246\012\209\006.\000\000\0066\006Z\006\182\000\000\000\000\001\234\002\142\006f\000\000\000\000\000\000\002\154\000\000\002\166\002\250\003\006\000\000\000\000\000\000\006j\003\018\000\000\000\000\000\000\000\000\000\000\000\000\006r\006v\000\000\006\242\012\209\000\000\012\209\000\000\000\000\006\254\000\000\000\000\000\000\000\000\003\022\000\000\000\000\000\000\000\000\012\209\000\000\000\000\012\209\012\209\000\000\006z\000\000\012\209\000\000\012\209\000\000\003J\012\205\012\209\000\000\004\206\002\178\000\000\000\000\002~\000\000\004\210\000\000\000\000\004\182\000\000\000\000\000\000\000\000\012\205\012\205\000\000\012\205\012\205\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\005\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\205\000\000\005\022\000\000\000\000\000\000\000\000\000\000\007j\001\178\000\000\000\000\000\000\000\000\000\000\000\000\002\166\000\000\000\000\006*\000\000\000\000\012\205\006.\000\000\0066\006Z\006\182\000y\000\000\000y\000y\006f\000\000\000\000\000\000\000\000\000\000\000\000\000y\000\000\000\000\000y\000y\006j\000\000\000y\000y\000y\000\000\n\209\000\000\006r\006v\000\000\006\242\012\205\000\000\012\205\000\000\000y\006\254\000\000\000\000\000\000\000\000\000y\000y\000\000\000\000\000y\012\205\000\000\000\000\012\205\012\205\000y\006z\000y\012\205\000\000\012\205\000y\003J\000\000\012\205\000\000\000y\000y\000y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000y\000y\000\000\000\000\000\000\000\000\000\000\000y\000y\000\000\000\000\000y\000\000\000\000\000y\000\000\000\000\000\000\000\000\000\000\000\000\000y\000y\000y\000\000\000y\000y\014Y\000\000\000\000\000\000\014Y\n\209\000\000\014Y\000\000\000y\000\000\000\000\000y\000\000\000\000\003\194\000y\000\000\014Y\014Y\014Y\000y\014Y\014Y\014Y\000y\000\000\000y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014Y\000\000\000\000\000\000\000\000\000\000\014Y\014Y\000\000\000\000\014Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014Y\000\000\000\000\000\000\014Y\000\000\000\000\000\000\000\000\014Y\014Y\014Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014Y\014Y\000\000\000\000\000\000\000\000\000\000\014Y\000\000\000\000\000\000\014Y\000\000\000\000\014Y\000\000\000\000\000\000\000\000\000\000\000\000\014Y\014Y\014Y\000\000\014Y\014Y\003\197\000\000\000\000\000\000\003\197\000\000\000\000\003\197\000\000\014Y\000\000\014Y\014Y\000\000\000\000\003\194\014Y\000\000\003\197\003\197\003\197\014Y\003\197\003\197\003\197\014Y\000\000\014Y\014Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\197\000\000\000\000\000\000\000\000\000\000\003\197 \198\000\000\000\000\003\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\197\000\000\000\000\000\000\003\197\000\000\000\000\000\000\000\000\003\197\003\197\003\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\197\003\197\000\000\000\000\000\000\000\000\000\000\003\197\000\000\000\000\000\000\003\197\000\000\000\000\003\197\000\000\000\000\000\000\000\000\000\000\000\000\003\197\003\197\003\197\000\000\003\197\003\197\003\177\000\000\000\000\000\000\003\177\000\000\000\000\003\177\000\000\003\197\000\000\003\197\003\197\000\000\000\000\000\000\003\197\000\000\003\177\003\177\003\177\003\197\003\177\003\177\003\177\003\197\000\000\003\197\003\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\177\000\000\000\000\000\000\000\000\000\000\003\177\003Z\000\000\000\000\003\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\177\000\000\000\000\000\000\003\177\000\000\000\000\000\000\000\000\003\177\003\177\003\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\177\003\177\000\000\000\000\000\000\000\000\000\000\003\177\000\000\000\000\000\000\003\177\000\000\000\000\003\177\000\000\000\000\000\000\000\000\000\000\000\000\003\177\003\177\003\177\000\000\003\177\003\177\001\177\000\000\000\000\000\000\001\177\000\000\000\000\001\177\000\000\003\177\000\000\003\177\003\177\000\000\000\000\000\000\003\177\000\000\001\177\001\177\001\177\003\177\001\177\001\177\001\177\003\177\000\000\003\177\003\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\177\000\000\000\000\000\000\000\000\000\000\001\177\001\177\000\000\000\000\001\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\177\000\000\000\000\000\000\001\177\000\000\000\000\000\000\000\000\001\177\001\177\001\177\000\000\000\000\000\000\000\000\000\000\000\000\0149\000\000\000\000\0149\001\177\001\177\000\000\000\000\000\000\000\000\000\000\001\177\000\000\000\000\0149\001\177\000\000\000\000\001\177\000\000\0149\000\000\000\000\000\000\000\000\001\177\001\177\001\177\000\000\001\177\001\177\000\000\0149\000\000\000\000\004\206\002\178\000\000\0149\002~\001\177\t\026\001\177\001\177\004\182\000\000\000\000\001\177\000\000\000\000\0149\000\000\001\177\000\000\0149\001\198\003\222\t:\001\177\0149\000\000\000\000\005\n\000\000\000\000\011\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\022\000\000\000\000\000\000\0149\000\000\011\214\001\178\0149\000\000\000\000\000\000\000\000\000\000\002\166\000\000\000\000\006*\0149\0149\012\169\006.\0149\0066\000\000\011\230\000\000\000\000\000\000\n\218\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\157\0149\000\000\006j\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006r\006v\000\000\000\000\016\026\000\000\007\r\000\000\000\000\000\000\007\r\000\000\000\000\007\r\000\000\000\000\000\000\000\000\000\000\012\169\000\000\000\000\012\169\012\169\007\r\006z\007\r\000\000\007\r\012\169\007\r\003J\000\000\012\169\005\157\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\r\000\000\000\000\000\000\000\000\000\000\007\r\007\r\000\000\000\000\000\000\000\000\000\000\004\005\000\000\007\r\000\000\004\005\007\r\000\000\004\005\000\000\007\r\000\000\000\000\000\000\000\000\007\r\007\r\007\r\000\000\004\005\000\000\004\005\000\000\004\005\000\000\004\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\r\007\r\004\005\000\000\007\r\000\000\000\000\000\000\004\005\004\005\000\000\000\000\000\000\000\000\007\r\007\r\007\r\006\157\007\r\007\r\004\005\000\000\000\000\000\000\004\005\n>\000\000\000\000\000\000\004\005\004\005\004\005\007\r\000\000\000\000\007\r\007\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\r\000\000\004\005\000\000\000\000\000\000\004\005\000\000\000\000\000\000\000\000\001\190\001\194\000\000\000\000\000\000\004\005\004\005\004\005\000\000\004\005\004\005\000\000\000\000\001\241\001\241\000\000\006\157\001\241\000\000\001\241\001\198\001\238\001\241\004\005\004\005\000\000\000\000\004\005\000\000\001\241\000\000\000\000\000\000\001\241\000\000\001\241\000\000\000\000\004\005\000\000\001\241\000\n\000\000\001\241\tN\000\000\001\234\002\158\000\000\000\000\020\214\000\000\002\154\001\241\002\166\002\250\003\006\000\000\000\000\001\241\001\241\003\018\000\000\000\000\000\000\000\000\000\000\001\241\000\000\000\000\001\241\000\000\000\000\001\241\001\241\000\000\001\241\001\241\001\241\000\000\000\000\000\000\003\022\001\241\000\000\006i\000\000\004\005\000\000\000\000\000\000\004\005\000\000\000\000\004\005\001\241\000\000\000\000\000\000\000\000\000\000\000\000 \142\001\241\001\241\004\005\021\018\004\005\000\000\004\005\000\000\004\005\000\000\007\001\000\000\000\000\000\000\007\001\000\000\000\000\007\001\000\000\000\000\004\005\000\000\000\000\000\000\000\000\001\241\004\005\004\005\007\001\000\000\007\001\001\241\007\001\000\000\007\001\006\161\000\000\000\000\004\005\000\000\000\000\000\000\004\005\000\000\000\000\000\000\007\001\004\005\004\005\004\005\000\000\000\000\007\001\007\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nz\000\000\000\000\007\001\000\000\000\000\004\005\007\001\000\000\000\000\004\005\000\000\007\001\007\001\000\242\000\000\000\000\000\000\000\000\000\000\004\005\004\005\004\005\000\000\004\005\004\005\000\000\000\000\000\000\000\000\000\000\006\161\007\001\007\001\000\000\000\000\007\001\000\000\004\005\004\005\000\000\000\000\004\005\000\000\000\000\000\000\007\001\007\001\007\001\000\000\007\001\007\001\000\000\004\005\r\166\000\000\000\000\000\000\017\006\0115\000\000\0115\0115\000\000\007\001\000\000\000\000\007\001\007\001\014\014\014V\014n\014&\014\134\000\000\000\000\000\000\000\000\000\000\007\001\000\000\000\000\000\000\014\158\014\182\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\206\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\000\000\000\r\190\014>\014\230\014\254\015.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015F\001\n\000\000\000\000\000\000\000\000\002\138\000\000\000\000\015^\000\000\000\000\000\000\000\000\000\000\001\014\001\018\001\022\001\026\001\030\001\"\000\000\000\000\000\000\015\190\000\000\015\246\015\022\000\000\000\000\001&\001*\0115\015v\000\000\000\000\000\000\003\213\000\000\001.\003\213\015\142\015\166\0012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\213\000\000\000\000\000\000\003\213\000\000\003\213\000\000\000\000\000\000\000\000\000\000\000\000\0016\001:\001>\001B\001F\003\213\0216\000\000\001J\000\000\000\000\003\213\001N\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001R\002\174\002\178\000\000\000\000\002~\003\213\001V\000\000\000\000\004\182\003\213\003\213\003\213\000\000\000\000\007\225\001\146!\198\000\000\000\000\001\198\000\000\000\000\001\150\004\186\001\154\000\000\000\000\000\000\001\158\003\213\001\162\001\166\004\190\000\000\005\146\000\000\000\000\000\000\000\000\000\000\000\000\005\198\005\202\003\213\003\213\005\218\001\178\003\213\003\213\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\n\161\021\150\003\213\n\198\n\161\n\230\006f\n\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\161\000\000\n\161\000\000\n\161\000\000\n\161\000\000\006r\006v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\161\000\000\000\000\000\000\000\000\000\000\n\161\n\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006z\n\234\000\000\n\161\000\000\011\002\003J\n\161\000\000\000\000\000\000\000\000\n\161\n\161\n\161\000\000\000\000\000\000\000\000\000\000\015\r\000\000\000\000\000\000\015\r\000\000\000\000\015\r\000\000\000\000\000\000\000\000\n\161\000\000\000\000\000\000\n\161\000\000\015\r\000\000\015\r\000\000\015\r\000\000\015\r\000\000\n\161\n\161\n\161\000\000\n\161\n\161\000\000\000\000\000\000\000\000\015\r\000\000\000\000\000\000\000\000\n\161\015\r\015\r\n\161\000\000\000\000\000\000\n\161\015\017\000\000\003\030\000\000\015\017\015\r\000\000\015\017\003\222\015\r\n\161\000\000\000\000\000\000\015\r\015\r\015\r\000\000\015\017\000\000\015\017\000\000\015\017\000\000\015\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\r\000\000\015\017\000\000\015\r\000\000\000\000\000\000\015\017\015\017\000\000\000\000\000\000\000\000\015\r\015\r\015\r\003\030\015\r\015\r\015\017\000\000\000\000\000\000\015\017\003*\000\000\000\000\000\000\015\017\015\017\015\017\015\r\000\000\000\000\000\000\015\r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\r\000\000\015\017\000\000\001\241\001\241\015\017\000\000\001\241\000\000\001\241\000\000\000\000\001\241\000\000\000\000\015\017\015\017\015\017\000\000\015\017\015\017\000\000\000\000\001\241\000\000\000\000\003*\000\000\000\000\000\000\001\241\000\n\000\000\015\017\000\000\000\000\000\000\015\017\000\000\000\000\000\000\000\000\000\000\001\241\000\000\000\000\000\000\000\000\015\017\001\241\001\241\000\000\000\000\000\000\000\000\000\000\000\000\001\241\000\000\000\000\001\241\000\000\000\000\001\241\001\241\000\000\001\241\001\241\001\241\000\000\000\000\000\000\000\000\001\241\000\000\000\000\000\000\000\000\000\000\000\000\001\190\001\194\000\000\004\206\002\178\001\241\000\000\002~\000\000\t\026\000\000\000\000\004\182\001\241\001\241\000\000\001\241\000\000\000\000\000\000\001\198\001\202\001\241\001\198\000\000\t:\000\000\000\000\000\000\000\000\005\n\000\000\000\000\011\170\000\000\000\000\000\000\000\000\001\241\000\000\000\000\003\157\001\241\005\022\001\241\000\000\001\234\002\150\000\000\011\214\001\178\000\000\002\154\000\000\002\166\002\250\003\006\002\166\000\000\000\000\006*\003\018\000\000\021:\006.\000\000\0066\000\000\011\230\000\000\000\000\000\000\000\000\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\022\000\000\000\000\006j\002\174\002\178\000\000\000\000\002~\000\000\000\000\006r\006v\004\182\000\000\003\157\000\000\000\000\000\000\b\t\000\000\000\000\000\000\000\000\001\198\000\000\000\000\000\000\004\186\000\000\000\000\003\157\000\000\000\000\003\157\000\000\006z\004\190\000\000\005\146\000\000\000\000\003J\000\000\000\000\000\000\005\198\005\202\000\000\000\000\005\218\001\178\000\000\000\000\000\000\000\000\000\000\000\000\002\166\000\000\000\000\005\226\000\000\000\000\000\000\n\174\n\178\n\190\000\000\000\000\000\000\n\198\000\000\n\230\006f\000\000\000\000\000\000\001\161\000\000\001\194\001\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\017\000\000\000\000\001\161\000\000\006r\006v\001\161\000\000\001\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\161\000\000\000\000\000\000\000\000\000\000\001\161\001\161\000\000\006z\n\234\000\000\000\000\000\000\011\002\003J\002\150\000\000\001\161\000\000\000\000\003\233\001\161\001\194\003\233\000\000\000\000\001\161\001\161\001\161\000\000\000\000\011\r\000\000\000\000\003\233\000\000\000\000\000\000\003\233\000\000\003\233\000\000\000\000\000\000\000\000\000\000\001\161\001\161\000\000\000\000\003\178\000\000\003\233\000\000\000\000\000\000\000\000\000\000\003\233\001\157\001\161\001\161\000\000\000\000\001\161\001\161\000\000\000\000\002\150\000\000\003\233\000\000\000\000\000\000\003\233\001\161\000\000\000\000\000\000\003\233\003\233\003\233\001\161\000\000\000\000\000\000\000\000\001\161\000\000\000\000\000\000\000\000\000\000\001\161\000\000\000\000\000\000\000\000\000\000\003\233\003\233\000\000\000\000\003\178\000\000\003\229\000\000\001\194\003\229\000\000\000\000\000\000\000\000\003\233\003\233\000\000\011\r\003\233\003\233\003\229\000\000\000\000\000\000\003\229\000\000\003\229\000\000\000\000\003\233\000\000\000\000\000\000\000\000\000\000\000\000\003\233\000\000\003\229\000\000\000\000\003\233\000\000\000\000\003\229\001\157\000\000\003\233\000\000\000\000\000\000\000\000\000\000\000\000\002\150\000\000\003\229\000\000\000\000\000\000\003\229\000\000\000\000\000\000\000\000\003\229\003\229\003\229\000\000\000\000\000\000\000\000\000\000\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\229\003\229\000\000\000\000\003\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\229\003\229\000\000\000\000\003\229\003\229\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\229\000\250\001\190\001\194\002\014\000\000\000\000\003\229\000\000\000\000\000\000\000\000\003\229\000\000\005\241\023\254\000\000\005\241\003\229\005\249\000\000\005j\001\198\001\238\001\218\000\000\000\000\000\153\005\241\000\000\000\153\000\000\001\230\024\002\005\241\000\000\000\000\000\000\000\000\024*\000\000\000\153\000\000\000\153\000\000\000\153\005\241\000\153\001\234\002\142\000\000\000\000\005\241\000\000\002\154\023N\002\166\002\250\003\006\000\153\023f\000\000\000\000\003\018\005\241\000\153\000\000\000\000\005\241\000\153\000\000\000\000\000\000\005\241\002\214\000\000\000\000\000\153\000\000\000\000\024\190\000\153\000\000\000\000\003\022\000\000\000\153\000\153\000\242\000\000\000\000\000\000\000\000\005\241\023\130\024\210\000\000\005\241\000\000\000\153\000\153\000\000\000\000\000\000\000\000\000\000\000\153\005\241\005\241\000\000\000\153\005\241\000\221\000\000\000\000\000\221\024\226\000\000\000\000\000\000\000\153\000\153\000\000\000\000\000\153\000\153\000\221\000\000\000\221\005\241\000\221\000\000\000\221\000\000\000\000\000\153\000\000\000\000\000\000\000\000\000\000\000\153\000\153\000\000\000\221\000\000\000\000\000\000\000\000\000\000\000\221\000\153\000\000\000\153\000\221\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\221\000\000\000\000\000\000\000\221\000\000\000\000\000\000\000\000\000\221\000\221\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\161\000\000\000\000\000\161\000\221\000\221\000\000\000\000\000\000\000\000\000\000\000\221\000\000\000\000\000\161\000\221\000\161\000\000\000\161\000\000\000\161\000\000\000\000\000\000\000\000\000\221\000\221\000\000\000\000\000\221\000\221\000\000\000\161\000\000\000\000\000\000\000\000\000\000\000\161\000\000\000\221\000\000\000\161\000\000\000\000\000\000\000\221\000\221\000\000\000\000\000\161\000\000\000\000\000\000\000\161\000\000\000\221\000\000\000\221\000\161\000\161\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\157\000\000\000\000\000\157\000\161\000\161\000\000\000\000\000\000\000\000\000\000\000\161\000\000\000\000\000\157\000\161\000\157\000\000\000\157\000\000\000\157\000\000\000\000\000\000\000\000\000\161\000\161\000\000\000\000\000\161\000\161\000\000\000\157\000\000\000\000\000\000\000\000\000\000\000\157\000\000\000\161\000\000\000\157\000\000\000\000\000\000\000\161\000\161\000\000\000\000\000\157\000\000\000\000\000\000\000\157\000\000\000\161\000\000\000\161\000\157\000\157\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\n\000\157\000\157\000\000\000\000\000\000\000\000\000\000\000\157\000\000\000\000\000\000\000\157\000\000\001\014\001\018\001\022\001\026\001\030\001\"\000\000\000\000\000\157\000\157\000\000\000\000\000\157\000\157\000\000\001&\001*\000\000\000\000\000\000\000\000\000\000\001}\000\157\001.\001}\000\000\000\000\0012\000\157\000\157\000\000\000\000\000\000\000\000\000\000\001}\000\000\000\000\000\157\001}\000\157\001}\001\190\002z\000\000\000\000\002~\000\000\0016\001:\001>\001B\001F\001}\001}\000\000\001J\000\000\000\000\001}\001N\000\000\001\198\001\238\001\218\002\130\000\000\000\000\006\157\001R\000\000\001}\001\230\000\000\000\000\001}\001V\000\000\000\000\000\000\001}\001}\001}\000\000\000\000\000\000\001\146!\226\002\134\002\142\000\000\000\000\000\000\001\150\002\154\001\154\002\166\002\250\003\006\001\158\001}\001\162\001\166\027F\001}\027J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001}\001}\000\000\000\000\001}\001}\000\000\000\000\004\206\002\178\003\022\006\157\002~\000\000\004\210\001}\000\000\004\182\000\000\006v\000\000\001}\001}\006\178\000\000\011]\000\000\001}\001\198\000\000\027V\000\000\000\000\001}\000\000\005\n\000\000\000\000\000\000\015\t\000\000\000\000\000\000\015\t\000\000\000\000\015\t\027Z\005\022\000\000\000\000\000\000\000\000\000\000\005\"\001\178\000\000\015\t\000\000\015\t\000\000\015\t\002\166\015\t\000\000\006*\000\000\000\000\000\000\006.\000\000\0066\006Z\006\182\000\000\015\t\000\000\000\000\006f\000\000\000\000\015\t\015\t\000\000\000\000\000\000\000\000\000\000\015\005\000\000\006j\000\000\015\005\015\t\000\000\015\005\000\000\015\t\006r\006v\000\000\006\242\015\t\015\t\015\t\000\000\015\005\006\254\015\005\000\000\015\005\000\000\015\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\246\000\000\015\t\006z\015\005\011]\015\t\011\146\000\000\003J\015\005\015\005\000\000\000\000\000\000\000\000\015\t\015\t\015\t\000\000\015\t\015\t\015\005\000\000\000\000\000\000\015\005\000\000\000\000\000\000\000\000\015\005\015\005\015\005\015\t\000\000\n\165\000\000\015\t\000\000\n\165\000\000\000\000\n\165\000\000\000\000\000\000\003\222\000\000\015\t\000\000\015\005\000\000\000\000\n\165\015\005\n\165\000\000\n\165\000\000\n\165\000\000\000\000\000\000\000\000\015\005\015\005\015\005\000\000\015\005\015\005\000\000\n\165\000\000\000\000\000\000\000\000\000\000\n\165\n\165\t\202\000\000\000\000\015\005\000\000\000\000\000\000\015\005\000\000\000\000\n\165\000\000\000\000\000\000\n\165\000\000\000\000\000\000\015\005\n\165\n\165\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\166\000\000\000\000\000\000\b\145\022\170\000\000\000\000\b\145\n\165\000\000\000\000\000\000\n\165\000\000\014\014\014V\014n\014&\014\134\000\000\000\000\000\000\n\165\n\165\n\165\000\000\n\165\n\165\014\158\014\182\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\165\000\000\000\000\n\165\014\206\000\000\000\000\n\165\000\000\000\000\000\000\000\000\000\242\000\000\000\000\000\000\000\000\000\000\n\165\000\000\000\000\001\157\000\000\001\194\001\157\r\190\014>\014\230\014\254\015.\000\000\000\000\011\r\000\000\000\000\001\157\b\145\015F\000\000\001\157\000\000\001\157\000\000\000\000\000\000\000\000\015^\000\000\000\000\000\000\000\000\000\000\000\000\001\157\000\000\000\000\000\000\000\000\000\000\001\157\000\000\015\190\022\174\015\246\015\022\022\186\000\000\000\000\000\000\002\150\015v\001\157\000\000\005\241\000\000\001\157\005\241\000\000\015\142\015\166\001\157\001\157\001\157\000\000\000\000\000\000\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\001\157\001\157\000\000\000\000\003\178\005\241\000\000\000\000\000\000\000\000\000\000\005\241\000\000\000\000\001\157\001\157\000\000\000\000\001\157\001\157\003\030\000\000\005\217\005\217\000\000\000\000\005\217\005\241\005\217\001\157\000\000\005\217\005\241\002\214\000\000\000\000\001\157\000\000\005\217\000\000\000\000\001\157\005\217\000\000\000\000\000\000\000\000\001\157\000\000\005\217\029N\000\000\005\241\029f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\217\000\000\000\000\000\000\005\241\005\241\005\217\005\217\005\241\005\241\000\000\000\000\000\000\000\000\005\217\003*\000\000\005\217\000\000\t\202\000\242\005\217\000\000\005\217\005\217\005\217\005\241\000\000\000\000\000\000\005\217\027n\000\000\000\000\0079\000\000\000\000\005\241\0079\000\000\000\000\0079\005\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\217\005\217\0079\000\000\0079\000\000\0079\000\000\0079\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0079\000\000\000\000\000\000\000\000\005\217\0079\0079\000\000\000\000\000\000\005\217\000\000\000\000\000\000\nz\000\000\000\000\0079\000\000\000\000\000\000\0079\000\000\000\000\000\000\000\000\0079\0079\000\242\000\000\000\000\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\206\002\178\000\000\0079\002~\000\000\004\238\0079\000\000\004\182\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0079\0079\0079\001\198\0079\0079\000\000\000\000\000\000\000\000\005\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0079\000\000\000\000\000\000\0079\005\022\000\000\000\000\000\000\000\000\000\000\005\"\001\178\000\000\000\000\0079\000\000\000\000\000\000\002\166\000\000\000\000\006*\000\000\000\000\000\000\006.\000\000\0066\006Z\031*\000\000\000\000\000\000\000\000\006f\000\000\000\000\000\000\000\000\000\000\000\000\004\206\002\178\000\000\000\000\002~\006j\004\210\000\000\000\000\004\182\000\000\000\000\000\000\006r\006v\000\000\006\242\0062\000\000\000\000\001\198\000\000\006\254\000\000\000\000\0312\000\000\005\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006z\000\000\005\022\000\000\000\000\000\000\003J\000\000\005\"\001\178\000\000\004\206\002\178\000\000\000\000\002~\002\166\006\194\000\000\006*\004\182\000\000\000\000\006.\000\000\0066\006Z\006\182\000\000\000\000\000\000\001\198\006f\000\000\000\000\000\000\000\000\000\000\005\n\000\000\000\000\000\000\000\000\000\000\006j\000\000\000\000\000\000\000\000\000\000\000\000\005\022\006r\006v\000\000\006\242\000\000\005\"\001\178\000\000\000\000\006\254\000\000\000\000\000\000\002\166\000\000\000\000\006*\000\000\000\000\000\000\006.\000\000\0066\006Z\006\222\006z\000\000\bB\000\000\006f\000\000\003J\000\000\000\000\000\000\000\000\004\206\002\178\000\000\000\000\002~\006j\0072\000\000\000\000\004\182\000\000\000\000\000\000\006r\006v\000\000\006\242\000\000\000\000\000\000\001\198\000\000\006\254\000\000\000\000\007\238\000\000\005\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006z\000\000\005\022\000\000\000\000\000\000\003J\000\000\005\"\001\178\000\000\004\206\002\178\000\000\000\000\002~\002\166\007\158\000\000\006*\004\182\000\000\000\000\006.\000\000\0066\006Z\007N\000\000\000\000\000\000\001\198\006f\000\000\000\000\000\000\000\000\000\000\005\n\000\000\000\000\000\000\000\000\000\000\006j\000\000\000\000\000\000\000\000\000\000\000\000\005\022\006r\006v\000\000\006\242\000\000\005\"\001\178\000\000\000\000\006\254\000\000\000\000\007V\002\166\000\000\000\000\006*\000\000\000\000\000\000\006.\000\000\0066\006Z\007\186\006z\000\000\000\000\000\000\006f\000\000\003J\000\000\000\000\000\000\000\000\004\206\002\178\000\000\000\000\002~\006j\004\210\000\000\000\000\004\182\000\000\000\000\000\000\006r\006v\000\000\006\242\b\n\000\000\000\000\001\198\000\000\006\254\000\000\000\000\007\194\000\000\005\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006z\000\000\005\022\000\000\000\000\000\000\003J\000\000\005\"\001\178\000\000\000\000\000\000\000\000\000\000\000\000\002\166\000\000\000\000\006*\000\000\000\000\000\000\006.\000\000\0066\006Z\006\182\000\000\000\000\000\000\000\000\006f\000\000\000\000\000\000\t\158\000\000\000\000\000\000\0071\000\000\000\000\0071\006j\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006r\006v\0071\006\242\0071\000\000\0071\000\000\0071\006\254\015\021\000\000\000\000\000\000\015\021\000\000\000\000\015\021\000\000\000\000\0071\000\000\000\000\000\000\000\000\006z\0071\n\026\015\021\000\000\015\021\003J\015\021\000\000\015\021\000\000\000\000\000\000\0071\000\000\000\000\000\000\0071\000\000\000\000\000\000\015\021\0071\0071\000\242\000\000\000\000\015\021\015\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\021\000\000\000\000\0071\015\021\000\000\000\000\0071\000\000\015\021\015\021\000\242\000\000\000\000\000\000\000\000\t\158\0071\0071\0071\0075\0071\0071\0075\000\000\000\000\000\000\000\000\000\000\015\021\000\000\000\000\000\000\015\021\0075\0071\0075\000\000\0075\0071\0075\000\000\t\158\015\021\015\021\015\021\007I\015\021\015\021\007I\0071\000\000\0075\000\000\000\000\000\000\000\000\000\000\0075\n\026\007I\015\021\007I\000\000\007I\015\021\007I\000\000\000\000\000\000\0075\000\000\000\000\000\000\0075\000\000\015\021\000\000\007I\0075\0075\000\242\000\000\000\000\007I\n\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007I\000\000\000\000\0075\007I\000\000\000\000\0075\000\000\007I\007I\000\242\000\000\000\000\000\000\000\000\015\025\0075\0075\0075\015\025\0075\0075\015\025\000\000\000\000\000\000\000\000\000\000\007I\000\000\000\000\000\000\007I\015\025\0075\015\025\000\000\015\025\0075\015\025\000\000\007M\007I\007I\007I\007M\007I\007I\007M\0075\000\000\015\025\000\000\000\000\000\000\000\000\000\000\015\025\n\026\007M\007I\007M\000\000\007M\007I\007M\000\000\000\000\000\000\015\025\000\000\000\000\000\000\015\025\000\000\007I\000\000\007M\015\025\015\025\000\242\000\000\000\000\007M\007M\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007M\000\000\000\000\015\025\007M\000\000\000\000\015\025\000\000\007M\007M\007M\000\000\000\000\000\000\000\000\000\000\015\025\015\025\015\025\000\000\015\025\015\025\000\000\000\000\000\000\000\000\000\000\000\000\007M\000\000\000\000\000\000\007M\000\000\015\025\000\000\000\000\000\000\015\025\000\000\000\000\000\000\007M\007M\007M\000\000\007M\007M\003\225\015\025\001\194\003\225\000\000\000\000\000\000\000\000\003\221\000\000\001\194\003\221\007M\000\000\003\225\000\000\007M\000\000\003\225\000\000\003\225\000\000\003\221\000\000\000\000\000\000\003\221\nR\003\221\000\000\000\000\000\000\003\225\000\000\000\000\000\000\000\000\000\000\003\225\000\000\003\221\000\000\000\000\000\000\000\000\000\000\003\221\000\000\002\150\000\000\003\225\000\000\000\000\000\000\003\225\000\000\002\150\000\000\003\221\003\225\003\225\003\225\003\221\000\000\000\000\000\000\000\000\003\221\003\221\003\221\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\225\003\225\000\000\000\000\003\178\000\000\000\000\000\000\003\221\003\221\000\000\000\000\003\178\000\000\003\225\003\225\000\000\000\000\003\225\003\225\000\000\000\000\003\221\003\221\000\000\000\000\003\221\003\221\000\000\003\225\000\000\000\000\001-\000\000\000\000\001-\003\225\003\221\000\000\000\000\000\000\003\225\000\000\000\000\003\221\000\000\001-\003\225\001-\003\221\001-\000\000\001-\000\000\000\000\003\221\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\001-\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\001-\000\000\000\000\000\000\000\000\001-\001-\000\242\000\000\000\000\001)\000\000\000\000\001)\000\000\000\000\000\000\000\000\000\000\001-\000\000\000\000\000\000\000\000\001)\001-\001)\000\000\001)\001-\001)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001-\001-\001-\001)\001-\001-\000\000\000\000\000\000\001)\000\000\000\000\000\000\001)\000\000\001-\000\000\000\000\000\000\000\000\000\000\001)\001-\000\000\000\000\001)\000\000\000\000\000\000\000\000\001)\001)\000\242\001-\000\000\001Y\000\000\014q\001Y\000\000\000\000\000\000\000\000\000\000\001)\000\000\014q\000\000\000\000\001Y\001)\001Y\000\000\001Y\001)\001Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001)\001)\001)\001Y\001)\001)\000\000\000\000\000\000\001Y\014q\000\000\000\000\000\000\000\000\001)\000\000\000\000\000\000\014q\000\000\000\000\001)\000\000\001\029\001Y\002\t\001\029\000\000\000\000\001Y\001Y\001Y\001)\000\000\002\t\000\000\000\000\001\029\000\000\001\029\000\000\001\029\000\000\001\029\000\000\000\000\000\000\000\000\000\000\001Y\000\000\000\000\000\000\014q\000\000\001\029\000\000\000\000\000\000\000\000\000\000\001\029\002\t\001Y\001Y\001Y\000\000\001Y\001Y\000\000\000\000\002\t\000\000\000\000\000\000\000\000\000\000\001\029\000\000\000\000\000\000\000\000\001\029\001\029\001\029\001Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001Y\000\000\000\000\000\000\000\000\000\000\001\029\000\000\000\000\001\169\002\t\021\030\001\169\000\000\002~\000\000\000\000\000\000\000\000\000\000\001\029\001\029\001\029\001\169\001\029\001\029\000\000\001\169\000\000\001\169\004\206\002\178\000\000\000\000\002~\000\000\006\014\000\000\000\000\004\182\000\000\001\169\001\029\000\000\000\000\000\000\000\000\001\169\000\000\000\000\001\198\000\000\000\000\001\029\000\000\000\000\021\"\005\n\000\000\001\169\000\000\000\000\000\000\001\169\000\000\000\000\000\000\000\000\001\169\001\169\005\022\021.\000\000\000\000\000\000\000\000\005\"\001\178\000\000\000\000\000\000\000\000\000\000\000\000\002\166\000\000\000\000\006*\001\169\000\000\000\000\006.\001\169\0066\006Z\bN\000\000\000\000\000\000\000\000\006f\006v\001\169\001\169\000\000\000\000\001\169\001\169\000\000\004\206\002\178\000\000\006j\002~\000\000\t\026\000\000\001\169\004\182\000\000\006r\006v\000\000\000\000\001\169\000\000\000\000\000\000\000\000\001\198\000\000\t:\bV\000\000\000\000\001\169\005\n\000\000\000\000\011\170\000\000\000\000\000\000\000\000\000\000\006z\000\000\029\150\000\000\005\022\000\000\003J\000\000\000\000\000\000\005\"\001\178\000\000\004\206\002\178\000\000\000\000\002~\002\166\t\026\000\000\006*\004\182\000\000\000\000\006.\000\000\0066\000\000\011\230\000\000\000\000\000\000\001\198\006f\t:\000\000\000\000\000\000\000\000\005\n\000\000\000\000\011\170\000\000\000\000\006j\000\000\000\000\000\000\000\000\000\000\000\000\005\022\006r\006v\000\000\000\000\028\006\011\214\001\178\000\000\004\206\002\178\000\000\000\000\002~\002\166\t\026\000\000\006*\004\182\000\000\000\000\006.\000\000\0066\030V\011\230\006z\000\000\000\000\001\198\006f\t:\003J\000\000\000\000\000\000\005\n\000\000\000\000\011\170\000\000\000\000\006j\000\000\000\000\000\000\000\000\000\000\000\000\005\022\006r\006v\000\000\000\000\016\026\011\214\001\178\000\000\000\000\000\000\000\000\000\000\000\000\002\166\000\000\000\000\006*\000\000\000\000\000\000\006.\000\000\0066\028\158\011\230\006z\000\000\000\000\000\000\006f\000\000\003J\000\000\000\000\000\000\000\000\004\206\002\178\000\000\000\000\002~\006j\031B\000\000\000\000\004\182\000\000\000\000\000\000\006r\006v\000\000\000\000\016\026\000\000\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\005\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\028\254\000\000\006z\000\000\005\022\000\000\000\000\000\000\003J\000\000\005\"\001\178\000\000\000\000\000\000\000\000\000\000\000\000\002\166\000\000\000\000\006*\000\000\000\000\000\000\006.\t\158\0066\006Z\031^\005\241\000\000\000\000\005\241\006f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\241\000\000\006j\000\000\005\241\000\000\005\241\000\000\000\000\000\000\006r\006v\000\000\006\242\000\000\000\000\000\000\000\000\005\241\006\254\000\000\000\000\031f\000\000\005\241\n\026\000\000\000\000\005\241\000\000\000\000\000\000\000\000\nz\000\000\006z\005\241\000\000\000\000\000\000\005\241\003J\000\000\000\000\000\000\005\241\002\214\000\242\000\000\000\000\t\129\000\000\000\000\t\129\000\000\000\000\000\000\000\000\005\241\005\241\000\000\000\000\000\000\000\000\t\129\005\241\005\241\000\000\t\129\005\241\t\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\241\005\241\000\000\t\129\005\241\005\241\000\000\000\000\000\000\t\129\000\000\n>\000\000\t\129\000\000\005\241\000\000\000\000\000\000\000\000\000\000\t\129\005\241\000\000\000\000\t\129\000\000 \n\000\000\000\000\t\129\t\129\000\242\005\241\000\000\t}\000\000\000\000\t}\000\000\000\000\000\000\000\000\t\129\t\129\000\000\000\000\000\000\000\000\t}\t\129\000\000\000\000\t}\t\129\t}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\129\t\129\t\129\t}\t\129\t\129\000\000\000\000\000\000\t}\000\000\000\000\000\000\t}\000\000\t\129\000\000\000\000\000\000\000\000\000\000\t}\t\129\000\000\000\000\t}\000\000\000\000\000\000\000\000\t}\t}\000\242\000\000\000\000\000\000\000\000\000\000\003\213\000\000\000\000\003\213\000\000\t}\t}\000\000\000\000\000\000\000\000\000\000\t}\000\000\003\213\000\000\t}\000\000\003\213\000\000\003\213\000\000\000\000\000\000\000\000\000\000\t}\t}\t}\000\000\t}\t}\003\213\0216\000\000\000\000\000\000\000\000\003\213\000\000\000\000\t}\000\000\000\000\000\000\000\000\000\000\000\000\t}\000\000\003\213\000\000\000\000\000\000\003\213\000\000\000\000\000\000\000\000\003\213\003\213\003\213\000\000\000\000\004\206\002\178\000\000\000\000\002~\000\000\b~\000\000\000\000\004\182\000\000\000\000\000\000\000\000\000\000\003\213\000\000\000\000\000\000\003\213\001\198\000\000\000\000\000\000\000\000\000\000\000\000\005\n\000\000\003\213\003\213 \018\000\000\003\213\003\213\000\000\000\000\000\000\000\000\000\000\005\022\000\000\000\000\000\000\003\213\000\000\005\"\001\178\000\000\000\000\021\150\003\213\000\000\000\000\002\166\000\000\003\213\006*\000\000\000\000\000\000\006.\003\213\0066\006Z\b\154\000\000\000\000\000\000\000\000\006f\000\000\004\206\002\178\000\000\000\000\002~\000\000\b\178\000\000\000\000\004\182\006j\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006r\006v\001\198\000\000\000\000\000\000\000\000\000\000\000\000\005\n\000\000\000\000\b\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\022\000\000\000\000\006z\000\000\000\000\005\"\001\178\000\000\003J\000\000\000\000\000\000\000\000\002\166\000\000\000\000\006*\000\000\000\000\000\000\006.\000\000\0066\006Z\b\206\000\000\000\000\000\000\000\000\006f\000\000\004\206\002\178\000\000\000\000\002~\000\000\b\234\000\000\000\000\004\182\006j\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006r\006v\001\198\000\000\000\000\000\000\000\000\000\000\000\000\005\n\000\000\000\000\b\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\022\000\000\000\000\006z\000\000\000\000\005\"\001\178\000\000\003J\000\000\000\000\000\000\000\000\002\166\000\000\000\000\006*\000\000\000\000\000\000\006.\000\000\0066\006Z\t\006\000\000\000\000\000\000\000\000\006f\000\000\004\206\002\178\000\000\000\000\002~\000\000\005\242\000\000\000\000\004\182\006j\000\000\000\000\000\000\000\000\007\229\000\000\000\000\006r\006v\001\198\000\000\000\000\000\000\000\000\000\000\000\000\005\n\000\000\000\000\t\014\000\000\004\206\002\178\000\000\000\000\002~\000\000\016\170\000\000\005\022\004\182\000\000\006z\000\000\000\000\005\"\001\178\000\000\003J\000\000\000\000\001\198\000\000\002\166\000\000\000\000\006*\000\000\005\n\000\000\006.\000\000\0066\006Z\b\222\000\000\000\000\000\000\000\000\006f\000\000\005\022\000\000\000\000\000\000\000\000\000\000\005\"\001\178\000\000\000\000\006j\000\000\000\000\000\000\002\166\000\000\000\000\006*\006r\006v\000\000\006.\000\000\0066\006Z\016\198\000\000\000\000\000\000\000\000\006f\000\000\t\177\t\177\000\000\000\000\t\177\000\000\t\177\000\000\000\000\t\177\006j\006z\000\000\000\000\000\000\000\000\021\222\003J\006r\006v\t\177\000\000\000\000\000\000\000\000\000\000\000\000\t\177\000\000\000\000\016\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\177\000\000\000\000\006z\000\000\000\000\t\177\t\177\003\213\003J\000\000\003\213\000\000\000\000\t\177\000\000\000\000\t\177\000\000\000\000\000\000\t\177\003\213\t\177\t\177\t\177\003\213\000\000\003\213\000\000\t\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\213\0216\t\177\000\000\000\000\000\000\003\213\000\000\000\000\000\000\t\177\t\177\000\000\000\000\000\000\000\000\000\000\000\000\003\213\000\000\014i\000\000\003\213\014i\000\000\000\000\000\000\003\213\003\213\003\213\000\000\000\000\000\000\000\000\014i\t\177\000\000\000\000\014i\000\000\014i\t\177\000\000\000\000\000\000\000\000\006\149\003\213\000\000\000\000\000\000\003\213\014i\000\000\000\000\000\000\000\000\000\000\014i\000\000\000\000\003\213\003\213 B\000\000\003\213\003\213\000\000\000\000\000\000\014i\000\000\006\233\000\000\014i\006\233\000\000\000\000\000\000\014i\014i\000\000\021\150\003\213\000\000\000\000\006\233\000\000\003\213\000\000\006\233\000\000\006\233\000\000\000\000\000\000\000\000\000\000\000\000\014i\000\000\000\000\000\000\014i\006\233\000\000\000\000\000\000\000\000\000\000\006\233\000\000\000\000\014i\014i\002v\000\000\014i\014i\nz\000\000\000\000\006\233\000\000\006\237\000\000\006\233\006\237\014i\000\000\000\000\006\233\006\233\000\242\000\000\014i\000\000\000\000\006\237\000\000\000\000\000\000\006\237\000\000\006\237\000\000\014i\000\000\000\000\000\000\000\000\006\233\006\233\000\000\000\000\006\233\006\237\000\000\000\000\000\000\000\000\000\000\006\237\000\000\000\000\006\233\006\233\000\000\000\000\006\233\006\233\nz\000\000\000\000\006\237\000\000\003\213\000\000\006\237\003\213\000\000\000\000\000\000\006\237\006\237\000\242\000\000\006\233\000\000\000\000\003\213\000\000\000\000\000\000\003\213\000\000\003\213\000\000\006\233\000\000\000\000\000\000\000\000\006\237\006\237\000\000\000\000\006\237\003\213\0216\000\000\000\000\000\000\000\000\003\213\000\000\000\000\006\237\006\237\000\000\000\000\006\237\006\237\000\000\000\000\000\000\003\213\000\000\007\145\000\000\003\213\007\145\000\000\000\000\000\000\003\213\003\213\003\213\000\000\006\237\000\000\000\000\007\145\000\000\000\000\000\000\007\145\000\000\007\145\000\000\006\237\000\000\000\000\000\000\000\000\003\213\000\000\000\000\000\000\003\213\007\145\000\000\000\000\000\000\000\000\000\000\007\145\000\000\000\000\003\213\003\213\023\206\000\000\003\213\003\213\000\000\000\000\000\000\007\145\000\000\000\000\000\000\007\145\000\000\000\000\000\000\000\000\007\145\007\145\000\242\021\150\003\213\014)\000\000\002\178\014)\000\000\"\182\000\000\000\000\000\000\000\000\"\186\000\000\000\000\000\000\014)\007\145\000\000\000\000\000\000\007\145\014)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\145\007\145\027\146\014)\007\145\007\145\000\000\000\000\000\000\014)\000\000\000\000\000\000\000\000\000\000\007\145\000\000\014i\001\006\001\178\014i\014)\007\145\000\000\000\000\014)\000\000\000\000\000\000\000\000\014)\014i\000\000\007\145\000\000\014i\000\000\014i\000\000\000\000\000\000\000\000\"\190\006\149\000\000\000\000\000\000\000\000\000\000\014i\014)\000\000\000\000\000\000\014)\014i\000\000\000\000\000\000\000\250\000\000\000\000\002\182\"\194\014)\014)\000\000\000\000\014)\000\000\000\000\014i\000\000\"\254\000\000\000\000\014i\014i\000\000\005j\000\000\t\158\000\000\000\000\000\000\b\157\014)\000\000\b\157\000\000\000\000\005v\000\000\000\000\000\000\000\000\014i\022\234\000\000\b\157\000\000\000\000\000\000\b\157\000\000\b\157\000\000\000\000\000\000\030\162\014i\014i\002v\023N\014i\014i\001\173\b\157\023f\001\173\000\000\000\000\000\000\b\157\n\026\014i\000\000\000\000\000\000!\018\001\173\000\000\014i\000\000\001\173\b\157\001\173\000\000\023n\b\157\000\000\000\000\"\174\014i\b\157\b\157\000\242\000\000\001\173\000\000\000\000\000\000\023\130\023\190\001\173\000\000\006-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\157\000\000\001\173\000\000\b\157\000\000\001\173\001\190\001\194\000\000\027\238\001\173\001\173\000\000\b\157\b\157\000\000\000\000\b\157\b\157\007\149\000\000\002\138\007\149\000\000\000\000\000\000\001\198\001\238\001\218\000\000\001\173\000\000\000\000\007\149\001\173\b\157\001\230\007\149\000\000\007\149\000\000\000\000\000\000\001\246\001\173\001\173\000\000\000\000\001\173\001\173\000\000\007\149\001\234\002\142\000\000\000\000\000\000\007\149\002\154\001\173\002\166\002\250\003\006\000\000\000\000\000\000\001\173\003\018\000\000\007\149\000\000\027n\000\000\007\149\000\000\000\000\000\000\001\173\007\149\007\149\000\242\000\000\000\000\014i\000\000\000\000\014i\000\000\003\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014i\007\149\000\000\000\000\014i\007\149\014i\000\000\000\000\000\000\000\000\000\000\006\149\000\000\000\000\007\149\007\149\000\000\014i\007\149\007\149\021&\000\000\000\000\014i\000\000\000\000\000\000\000\000\000\000\007\149\000\000\000\000\000\000\000\000\000\000\005\241\007\149\000\000\005\241\014i\000\000\000\000\000\000\000\000\014i\014i\000\000\007\149\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\000\000\000\000\014i\000\000\000\000\005\241\000\000\000\000\000\000\000\000\000\000\005\241\000\000\000\000\000\000\000\000\014i\014i\002v\000\000\014i\014i\000\000\005\241\000\000\001E\000\000\005\241\001E\000\000\000\000\014i\005\241\002\214\000\000!J\000\000\000\000\014i\001E\000\000\001E\000\000\001E\000\000\001E\000\000\000\000\000\000\014i\000\000\000\000\005\241\000\000\000\000\000\209\005\241\001E\000\209\000\000\000\000\000\000\000\000\001E\000\000\000\000\005\241\005\241\000\000\000\209\005\241\005\241\000\000\000\209\000\000\000\209\000\000\000\000\000\000\001E\000\000\t\202\000\000\000\000\001E\001E\000\242\000\209\005\241\000\000\000\000\000\000\000\000\000\209\000\000\000\000\000\000\000\000\000\000\005\241\000\000\000\000\000\000\000\000\001E\000\209\000\000\000\213\000\000\000\209\000\213\000\000\000\000\000\000\000\209\000\209\000\242\000\000\001E\001E\001E\000\213\001E\001E\000\000\000\213\000\000\000\213\000\000\000\000\000\000\000\000\000\000\000\000\000\209\000\000\000\000\000\000\000\209\000\213\001E\000\000\000\000\000\000\000\000\000\213\000\000\000\000\000\209\000\209\000\000\001E\000\209\000\209\000\000\000\000\000\000\000\213\000\000\000\000\000\000\000\213\000\000\000\000\000\000\000\000\000\213\000\213\000\242\000\000\000\209\000\000\000\000\001\190\002z\000\000\000\000\002~\000\000\000\000\000\000\000\209\000\000\000\000\000\000\000\000\000\213\000\000\000\000\000\000\000\213\000\000\000\000\001\198\001\238\001\218\000\000\000\000\000\000\000\000\000\213\000\213\000\000\001\230\000\213\000\213\000\000\000\000\000\000\000\000\000\000\000\000\b\153\000\000\000\000\b\153\000\000\000\000\000\000\002\134\002\142\000\000\000\213\000\000\000\000\002\154\b\153\002\166\002\250\003\006\b\153\000\000\b\153\000\213\027F\000\000 \246\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\153\000\000\000\000\000\000\000\000\000\000\b\153\000\000\000\000\000\000\000\000\003\022\000\000\000\000\000\000\000\000\000\000\000\000\b\153\000\000\006v\000\000\b\153\000\000\000\000\000\000\007\137\b\153\b\153\007\137\000\000!\002\000\000\000\000\000\000\t\158\023\170\000\000\000\000\006\245\007\137\000\000\006\245\000\000\007\137\000\000\007\137\b\153\027Z\000\000\000\000\b\153\000\000\006\245\000\000\000\000\000\000\006\245\007\137\006\245\000\000\b\153\b\153\022\254\007\137\b\153\b\153\000\000\000\000\000\000\000\000\006\245\000\000\000\000\000\000\000\000\007\137\006\245\n\026\000\000\007\137\000\000\000\000\b\153\000\000\007\137\007\137\000\000\000\000\000\000\000\000\000\000\000\000\006\245\000\000\000\000\000\000\000\000\006\245\006\245\000\242\000\000\000\000\000\000\000\000\007\137\000\000\r\217\000\000\007\137\r\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\245\007\137\007\137\r\217\000\000\007\137\007\137\r\217\000\000\r\217\000\000\000\000\000\000\000\000\006\245\006\245\000\000\000\000\006\245\006\245\000\000\r\217\000\000\007\137\000\000\000\000\005\201\r\217\000\000\005\201\000\000\000\000\000\000\000\000\000\000\b\153\006\245\000\000\b\153\r\217\005\201\000\000\000\000\r\217\005\201\000\000\005\201\000\000\r\217\b\153\000\000\000\000\000\000\b\153\000\000\b\153\000\000\000\000\005\201\000\000\000\000\000\000\000\000\000\000\005\201\000\000\000\000\b\153\r\217\r\150\000\000\000\000\r\217\b\153\000\000\000\000\005\201\000\000\000\000\000\000\005\201\000\000\r\217\r\217\000\000\005\201\r\217\r\217\000\000\b\153\000\000\000\000\000\000\000\000\b\153\b\153\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\217\005\201\000\000\005\193\000\000\005\201\005\193\000\000\000\000\000\000\b\153\016\014\000\000\000\000\000\000\005\201\005\201\005\193\000\000\005\201\005\201\005\193\000\000\005\193\b\153\b\153\022\254\000\000\b\153\b\153\000\000\000\000\000\000\000\000\000\000\005\193\000\000\005\201\000\000\000\000\000\000\005\193\000\000\024>\000\000\000\000\b\153\000\000\023&\005\225\000\000\000\000\005\225\005\193\000\000\000\000\005\177\005\193\000\000\005\177\000\000\000\000\005\193\005\225\000\000\000\000\000\000\005\225\000\000\005\225\005\177\000\000\000\000\000\000\005\177\000\000\005\177\000\000\000\000\000\000\000\000\005\225\005\193\000\000\000\000\000\000\005\193\005\225\005\177\000\000\000\000\000\000\000\000\000\000\005\177\000\000\005\193\005\193\000\000\005\225\005\193\005\193\005\209\005\225\000\000\005\209\005\177\000\000\005\225\000\000\005\177\000\000\000\000\000\000\000\000\005\177\005\209\000\000\005\193\000\000\005\209\000\000\005\209\000\000\000\000\000\000\000\000\000\000\005\225\026&\000\000\000\000\005\225\000\000\005\209\005\177\000\000\000\000\000\000\005\177\005\209\000\000\005\225\005\225\000\000\000\000\005\225\005\225\005\185\005\177\005\177\005\185\000\000\005\177\005\177\000\000\005\209\000\000\000\000\000\000\000\000\005\209\005\185\000\000\005\225\000\000\005\185\000\000\005\185\000\000\000\000\005\177\000\000\000\000\000\000\027\n\000\000\000\000\000\000\000\000\005\185\005\209\030v\000\000\000\000\000\000\005\185\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\233\005\209\005\209\005\233\000\000\005\209\005\209\000\250\005\185\000\000\002\182\000\000\000\000\005\185\005\233\000\000\000\000\000\000\005\233\000\000\005\233\005f\000\000\005\209\000\000\006\005\000\000\005j\000\000\000\000\000\000\000\000\005\233\005\185\024v\000\000\000\000\000\000\005\233\005v\000\000\000\000\000\000\000\000\000\000\022\234\000\000\005\185\005\185\000\000\000\000\005\185\005\185\000\250\005\233\000\000\002\014\030\162\000\000\005\233\000\000\023N\000\000\000\000\000\000\000\000\023f\023\254\000\000\005\185\000\000\005\249\000\000\005j\000\000\000\000\000\000\000\000\000\000\005\233\026\178\000\000\000\000\000\000\000\000\024\002\023n\000\000\000\000\000\000\000\000\024*\000\000\005\233\005\233\000\000\000\000\005\233\005\233\000\000\023\130\023\190\000\000\000\000\006\005\006\005\000\000\023N\000\000\000\000\000\000\000\000\023f\000\000\000\000\005\233\000\000\000\000\000\000\000\000\000\000\000\000\027\238\000\000\000\000\000\000\0272\000\000\000\000\000\000\000\000\000\000\024\190\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\130\024\210\000\000\000\000\005\249\005\249\000\000\000\000\000\000\000\000\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\226")) 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\215\215\215\215\215\214\214\214\214\213\212\211\211\211\211\210\210\210\210\209\209\209\208\208\208\208\207\206\206\206\205\205\204\204\203\203\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\201\201\200\200\199\198\197\196\196\195\195\194\194\194\194\193\193\193\193\192\192\191\190\190\190\190\190\190\189\188\187\187\186\186\185\185\184\183\183\182\181\181\180\180\179\179\179\179\178\178\178\178\177\177\177\177\176\175\174\174\174\173\173\172\171\171\171\171\171\171\170\170\170\170\170\170\170\170\169\169\168\168\168\168\168\168\167\167\166\166\166\165\165\164\164\164\164\163\163\162\162\161\161\160\160\159\159\158\158\157\157\156\156\155\155\154\154\153\153\153\152\152\152\152\151\151\150\150\149\149\148\148\148\148\148\147\147\147\147\146\145\145\144\144\144\143\143\143\143\143\143\143\142\142\142\142\142\142\142\141\141\140\140\139\139\139\139\139\139\138\138\137\137\136\136\135\135\134\134\133\132\132\132\131\131\130\130\130\130\130\130\130\130\130\129\129\128\127\127\127\127\127\127\127\127\127\127~}|{{zzzzzyxxwwvvvvvvvvvvvvvvuuttsssssssssssssssssssssssssssssssrrqqppoonnmmllkkjjiihhggggggfedcba`_^]\\[[[[[[[ZZYYXXXXXWWWWWWVVUUUUUTTSSRQPPOOOOONNMMLLLKKKKKKJJJIIHHGGFFEEDDCCBBBAA@@??>>==<<;;::99887776665554443333210000000000000000000/////....----------------------------------------------,,++++++++++++++++***************************************************))(((''&&&&&&&&&&&&&&&&&%%$$#######\"\"\"\"!! \031\031\030\029\028\028\028\027\027\026\026\026\026\026\026\026\026\026\026\025\025\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\242\242\241\241\240\239\239\238\238\238\238\238\238\238\238\238\238\237\237\236\235\234\234\234\234\234\234\234\234\233\233\233\233\233\233\233\233\232\232\232\231\231\230\229\229\229\228\228\227\227\227\227\227\227\226\226\226\226\226\226\226\225\225\225\225\225\224\224\224\224\223\222\221\221\221\221\220\220\220\220\219\219\219\218\218\218\218\217\216\216\216\215\215\214\214\213\213\213\212\212\212\212\212\212\212\212\212\211\211\210\210\209\209\208\207\206\205\204\204\203\203\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\202\201\201\200\199\199\199\199\198\198\198\198\198\198\197\197\196\195\195\195\195\195\195\194\193\192\192\191\191\190\190\189\188\188\187\186\186\185\185\184\184\184\184\183\183\183\183\182\182\182\182\181\180\179\179\179\178\178\177\176\176\176\176\176\176\175\175\175\175\175\175\175\175\174\174\174\174\174\174\174\174\174\174\174\174\174\174\174\174\174\174\174\174\173\173\173\173\173\173\173\173\173\173\173\173\173\173\173\173\173\173\173\173\172\171\170\170\169\169\169\169\169\169\168\168\167\167\167\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\147\146\146\146\146\146\146\146\145\145\145\145\145\145\145\144\144\143\143\142\142\142\142\142\142\141\141\140\140\139\139\138\138\137\137\136\135\135\135\134\134\133\133\133\133\133\133\133\133\133\132\132\131\130\130\130\130\130\130\130\130\130\130\129\128\127~~}}}}}|{{zzyyyyyyyyyyyyyyxxwwvvuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuttssrrqqppoonnnmmllkkjjiihhhhhhhhhhgfedcba`_^]\\\\\\\\\\\\\\\\[[[[[ZZZZZZYYXXXXXWWVVUTSSRRRRRQQPPOOONNNNNNMMMLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLKKKKKKJJJJJJIIHHGGFFEEDDCCBBAAA@@??>>==<<;;::::998877777766655544433210000000000000000000/////....----------------------------------------------,,++++++++++++++++****************************************************))((''&&&&&&&&&&&&&&&&%%$$#######\"\"\"\"!! \031\031\030\029\028\028\028\027\027\026\026\026\026\026\026\026\026\026\026\025\025\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\000\027\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000r\000\000\000\000\000\243\001\152\000\"\001O\000\223\n\174\000\000\000\000\000\185\000\218\011N\000\181\002\022\011\152\000\000\000\000\000\000@\150\000]\002j\000AHL\000\000\000\000\000\000\000\000\000\000\000\000\000\000E\216\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\152\002\192\001\148\000\000\000\000\000\000\000\000\000o\000\000\004\156\006V\001b\004\236\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\000\000\002\154\000\000\000\000\000\000\000\000\000\000\002\180\000\000\000\000\000\000\002\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\bv\000\000\000\000\002\236\000\000\000\000\000\000\000\000\000\000\000\000\000\000W\152\002\252\000\000\003\018\005\130\000m\000\000\000\000\005\162\002\202\000\000\005\178\006\184\003\026\005\210\002\014\000\000\000\000\000\000\002\024\000\000\000\000\001\026\000\000\000\000\000\000\000\000\004\180\000\000\003\162\000\000\000\000\000\000\000\000\000\000\000'\000\000\0020\005\026@\210\000\000BZW\152\000\000\004\194\000\000\001\000\000\000\019\228\001\168\001\144\bp\000\000\000\000\000\000\003\222\003\238\005\236\003\142\004R\005\238-\240\0042\007N\000\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007Z\000\000\000\000\000\000\004^\007\250\011\184\004r\b4\012\158\t\152@\150\r\022\000\000.~\004\174\b:\005\230\000\000\017\222F>FH\000\000\000\169\000\000\000\000\000\000\005\186X\170\005\184\000\000\006\b\006\028\000\000\007\244I>\002\172\000\000\000\241\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015^\005\230\000\000\000\000\000\000\012b\000\000\004\198\000\000\000\000\003\030\004\220\000\000\000\000\004\204\000\000^|\000\000\003\030\007v\003\030\000\000\000\000\000\000\000\000\000\000N\158\000\000\bP\006~\000\000\015\216\b`\000-\000\000\000\000\000\000\005\254\000\000\000\000\000\000\000\000\005\202\000\000\000\000\000\000\000\000\000\000H\238\000\000\000\000\000\000\000\000\000\000\000\000\002L\006\164\000\000\000\000\000\000\005\202\006\230H\242\006L\t,T&\000\000\0046\000\000\000\000\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\007\168I\012\000\000\006v\t@Ip\000\000\000\000\000\000I\234\006|Jt\006|\000\000J\142\006|\000\000J\194E\216\007\236\b\006\000\000\000\000W\202\000\000\000\000\000\000\000\000\000\000\000\000\006|\000\000K\002\006|Y\004\005\202\000\000K\012\006|\000R\000\000\006|\006|\000\000\000\000\006|\000\000FH\000\000\000\000\000\000\006|F\170\000\000\000\000\006|\000\000\001d\b\026\000\000\000\000\000\000\000\000\000\000\000\000\018f\000\000\007\164\000\000YF\005\202\000\000\000\000\000\000\000\000\007\202\bf\rjC\018O\144\b\178\000\000G\014\006|Yf\005\202\b\180\000\000\000\000\000\000\000\000E\216\t\026\000\000\002\192X\000\000\000\r\142\b\156\b\184\b\194\tT\005l\t\\\001(\tn\000\000\000\000\001L\002\022\000\000\002\246\t\134\002\192\t\028\000\000\000\000\003\206\000\000\000c\000\174\002Z\0038\n\182\000\000\000\000\017`\000\000^\016\nt\000\000Y\140\005\202Y\216\005\202\000\000\000\153\000R\000\000\004\134\000c\000\000\000\000\t\158\000\000\000\000\000\000\000\000\000\000\004\174\000c\007B\000c\000\000\000[\000\000\000\000\001\140\000\000\000\000\000\000\n\252\000\000\000\000\000c\000c\000\000\000c\000\000\000\000\007\166\000\000\0005\004R\000\000\0005\000\000\t`\000c\000\000\000\000\000\000\000\000\000\000\0005\r\226\014Z\n\202\n\134.\222B\136\000\000\000\000\000\b\000\000\000\000\000\000\0038\000\000\000\000\000\000SR/l\t\218\t\194S\244\t\238\t\248\014\250\t\248\n\012\015d\n\n\n\018C2GB\006|\015\178\nD\nZS\178E\216\n\238\000\000Ol\016R\nh\ndKr\006|\016\188\n\142\ntK\224\006|\017\nT\026\000\000\000\000\000\000\000\000\0038\t\190\000\000\000\000\000\000\n\186\n\134\b\164\0005\t\160\000c\000\000\000\000\000\000C\018\000\000Y\232\005\202\017\170\n\196\n\160T\130\000\000T\226\000\000\000\000\017\250/\204\000*\000\000\000\000\012 Z(\005\202Xr\005\202ZH\005\202\000\000\000\000\000\000\000\000\000\000T\240\000\000\000\000\000\000\004\240\018\154\000\000\000\000\000\0000ZUB\000\000\011\250\011L\000\000\000\000\000\000U\170\000\000\000\000\000\000\000\000\000\000\000\000U\236\000\000\012BO\232\000\000\003p\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\012\018\206\000\000\000\000\011\014\019\134\000\000\011\0300\186\011\0301H\011\030\000\000V\012\000\0001\168\011\030\019\232\006\014\020v\000\000\000\00026\011\0302\150\011\0303$\011\0303\132\011\0304\018\011\0304r\011\0305\000\011\0305`\011\0305\238\011\0306N\011\0306\220\011\0307<\011\0307\202\011\0308*\011\0308\184\011\0309\024\011\0309\166\011\030:\006\011\030:\148\011\030:\244\011\030\n\198C\218\000\000Zn\005\202\020\214\000\000\011b\021d\000\000L\020\006|L.\006|L\144\006|\003\134\000\000\000\000\000\000\000\000L\158\006|\000\000\003\204\006n\001\218L\222\006|\021\196\000\000\011\148\011\192\n\212\011\226\012~\012\022\000c\004l\004\230\000\000\000\000\n\214\012b\012h\000g\tX\0005\012j\000c\012\166\0005\006\162\012B\n\222\012\138\001R\006\218\012^\000\000\0042\000\000\000\000\005\164\007\004\000\000\006\172\003H\007F\003\146\012\012\n\238\012\196\001D\000\000\012 \n\246\004\220\000\000\n^\000\000\012F\000\000[\n\005\202\000\000\r\002\r\b\000\000\007\188\000\000\005\202\012\136\011\016\004\006\000\000\000\000\000\000\000\000\000\000\012\174\006R\001\n\000\000\000\000\000\000X0\000\000^\024\000\000\011.\000\000\0114\000\000\000\000\000\000\000\000\002\186\000\000\000\000\000\000\t\170\003\030\000\000\003\030\000\173\000\000\000\000\000\000\000\000\011:\t\006\000\000\001\182\000\000\b\140\000\000\nv\003\030\003\030\000\000\n\138\003\030\003\030\011T\t\182\000\000\000\000\b\182\012\184\011V\004\134\004\188\006l\005\026A\024I>\007\142\000\000\000\000\000\000\006B\012\236\011r\000\000\012\240\006B\000\000\r\222\t\198\000\000\000\000\000\000\005\202\000{\001>\007\226\000\000\000\000\000\000\000\000\r\026\011x\000\000\t(\000\000\000\000\000\000\000\000\000\000\014\n\nf\000\000\000\000\014\000\000\000\000\031\002\232\000\000\000\000\000\000\000\000\b\b\014jAr\0142\nv\000\000\0144\n|\000\000\000\000\014N\000\007\005h\000\000\n\240\rn\rv\011\170\002H\011\138\000\000\011\176\003\006\011\144\000\000\r\132\r\134\011\210\r\174\012~\012\206\000c\000\000\011\224\014\"\000\000\007:\011\220\000\000\0148\000\000\r\000\001J\014\n\012\016\014N\000\000\rN\004\128\014\028\000\000\000\000\002R\bV\012\028\000\000\r\206\000c\012\182\000\000\004\182\000\000\r\200\012\020\014\160\006r\000\000\r\208\012>\006\216\012\174\r\218\r\226\012\144\015R\000\000\r\248\002\178\000\000\000\000\000\000\000\000\002\228\012\180\r\216[*\005\202\000\000\001\248\012\194\014\154\000\000\000\000\000\000\000\000\000\000\000\000[H\007 \000\000\012\208\014\248\000\000\000\000\000\000\000\000\000\000\000\000V(\012\234\000\000\r\020\006(\000\000\r\022\r\030\b`\000\000\007\180O\026\000\000\004\250\000\000[p\005\202\005\202\000\000\000\000\007\138\000\000\b\146\000\000\015*\007\138\007\138\000\000\r&\011j\005\202[z\005\202\012\252\000\000\000\000\000\000\r\000\000\000\000\000\006\b\000\000\t\020\014z\r6\015\158\014@\000\000\000\000\016\004\tL\014\164\000\000\000\000\rZ\015\224\014\162\000\000\000\000\b\198\000\000\006\132\000\000HdMZ\005\202\000\000[\236\b<\000\000\\2\000\000\000\000\000\000\007\138\000\000\000\000\r\222\014\234\rt\016\018\014\180\000\000\000\000\\<\014\b\015\026\000\000\000\000\000\000\020\184\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\026\000\000\015,\r\144\0054\000\000\016(\015\216\014F\0158\000\000\000\000\015N\r\194\t\022\000\000\000\000A\184\016\004\014h\015l\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\202\015$\r\200\017\022\015\192\000\000O\198\000\249\r\224\015\148\001+\006\200\014\004\016V\000\000\017\030\022R\000\000\000\000\022\178\000\000\014p\000\000\001\180\000\000\000\000\000\000\000\000\000\000\000\000[\154\005\202\000\000\0172\023@\000\000\000\000\023\160\000\000\002\198\0146\016\216\000\000P\"V\176\016\138\000\000\\t\005\202\024.\000\000\000\000\024\142\000\000\000\000\000\000\004x\000\000\025\028\000\000\000\000\000\000\014\136\000\000\004\168\000\000\000\000\000\000\000\000\000\000\000\000V\252\000\000\000\000PXWH\016\140\000\000\\\230\005\202\025|\000\000\000\000\026\n\000\000\000\000\014p\026j\014\158\000\000\014x\014|\004\b\005\254\014\146\t(\014\156\016\236D\022\014\178\000\000\014\184\014\212\n:\000\000\b\028W\208\000\000\005\030\000\000\014\214Q@QL\018Z\015\198\018\194\000\000M\002V\212\000\000\000\000\002\128\000\000\000\000\000\000\000\018\000\000\000\000\000\018\000\000\000\000\000\018\011n\000\000\020\176\000\018\016\252DH\014\194\000\000\000\018\000\000],\000\000\000\000\000\018\000\000\000\000\015^\000\000\021\002\bt\015|\000\000\014\232XZ\015\128\000\000\000\000\000\000\015\144\000\000\000\000\003 \000\000\000\018]6\000\000\021\142\000\018Q\128\000\000\015\156\016b\015\012\017\130\016\"\000\000Q\142\015\216\016n\000\000\000\000\000\000Q\198\b\156\015R\017\"DR\015\236\000\000\000\000\000\000\000\000\000\000\000\000\011\012\000\000\000\000\011\014\000\000\016\n\000\000\016\136\000\000\000\000\000\000\000\000\016\026R\030\000\000\000\000\000\000\011\012\000\000\011\014\000\000\000\000\000\000\000\000\000\000\011\030\026\248\000\000\000\000\027X\000\000\000\000\000\000\000\000\027\230\000\000\000\000\011\030\028F\000\000\028\212\000\000\000\000\0294\000\000\000\000\000\000\000\000\029\194\000\000\000\000;\130\011\030\030\"\000\000\000\000;\226\011\030\030\176\000\000\000\000L\011\030 \236\000\000\000\000>\172\011\030!z\000\000\000\000?:\011\030\000\000?\154\011\030\002\128\011\030\000\000\000\000!\218\000\000\000\000\"h\000\000\000\000\000\000\011b\"\200\000\000\000\000#V\000\000GT\000\000\000\000T\026\000\000\000\000#\182\000\000\000\000\000\000$D\000\000\000\000\000\000\017V\000\000\000\000B\170\000\000\003\030\000\000\002@\000\000\016\238\000\000\004|\000\000\000\000\000\000\000\000\000\000\0038\000\000\0168\000\000\000\000$\164\000\000%2\000\000\000\000\000\000%\146\000\000\000\000& \016>&\128\000\000'\014\000\000\000\000\000\000E\216\016\236\000\000RL\011z\003\030'n\000\000RV\000\000\000\000\000\000R\252\000\000\000\000'\252\000\000(\\\000\000\000\000\000\000\000\000Gt\000\000\000\000\000\000@(\011\030@\136\011\030\000\000\000\000\000\000\000\000\011\030\000\000\000\000\000\000\000\000\011\030\000\000\017x\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015l\r\018\0005(\234\000\000\016V\015\164\016\232\006z\000\000)J\000\000\016Z\015\168\tR\016r\015\172\000\000)\216\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Xr\017\000\000\000]T\005\202*8\000\000\000\000]n\005\202*\198\000\000\000\000+&\000\000\000\000\0168\000\000\011\030\000\000\000\000\000\000\000\000\016h\015\192\015H\0005\000\000\014\220\000c\000\000\017\190\000\000\000\000\000\000\000\000D\190\000\000\000\000D\224\000\000\011\030\000\000\019\162\000c\000\000\020J\000c\000\000\021\176\000c\000\000\001\148\000\000\015\194\016\130\003\246\000\000\016ZSB\000\000\000\000\000\000\000\000\015\200\000\000\015\212\006b\000\000\000\000\003\030\006\222\000\000\000\000\000\000\000\000\000\000_\004\000\000\000\000\n(\005\184\000\000\000\000]x\005\202\005\202\000\000]\150\005\202\t\252\000\000\000\000\000\000\005\202\000\000\000\000\000\000\017`\000l\n\200\012\236\004\192\015\216\000\000\007L\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\026\005(\015\238\000\000\011,\014j\000\000\017b\000\228\007f\000\000\000\000\000\000\0005\000c\000\000\016\130\000\000\000\000\000\000\000c\000\000\006|\000\000]\234\005\202\000\000\004\194\000\000\000\000\000\000E0\000\000\000\000E\166\000\000+\180\000\000,\020\000\000\000\000,\162\000\000\000\000\000\000\000\000-\002\000\000-\144\000\000\000\000\000\000\000\000\000\000Mb\000\000\000\000\000\000\000\140\003\030\000\000\000\000\000\000\000\000\000\000\002\154\003\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002(\000\000\000\000\000\000Q\244\000\000\005\202\000\000\nd\000\000\000\000\000\000\000_\000\000\000\000\000\000\001\248\000\000\000\000\000\000\001\018\000\000\0005\000\000\000#\000\000\000c\000\000\t8\000\000\000\000\000\000H\020\006|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000\016\148\007\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Sp\000\000\016\136\000\000\000\000\000\000\000\000\005J\007\002M\214NR\000\000\000\000\016\144Nf\000\000\000\000\000\000\016\156N\226\000\000\000\000\000\000\000\000"), (16, "\005W\005>\002Z\0020\001c\000\149\001c\000\188\001\029\000\227\000\197\001\030\000\231\000\232\001\017\003\145\000;\002y\005X\006\253\001\021\005_\007;\0020\001c\002z\002/\0020\001c\0007\005`\005p\005@\003\019\000?\001 \006\248\005W\002\145\002Z\0020\001c\005\018\002Z\0020\001c\000@\003k\005B\000\227\000\231\007#\000\231\001\002\002y\005X\005o\002\006\005_\003\177\000\231\005a\002z\001\003\001\149\001c\005\024\005`\005p\001\227\001\227\003\194\006\222\006\216\005C\002\145\005\020\002!\007/\001\251\001\251\003 \001(\001\255\001\255\001\021\001\021\007$\001\005\002\b\005\199\005\021\007=\001\021\007\b\001\021\005\028\005b\005a\0007\005E\002\147\006\246\002\012\000\234\003\214\005c\001\227\001i\000D\0070\000G\001\015\002]\000\234\0024\000\231\001\251\001\021\001\"\0054\001\255\003n\001\021\001\135\005u\002\177\003\151\003\152\006\194\002\000\002\000\005v\007>\005b\0024\000\231\0021\002\147\0024\000\231\003(\002\\\005c\003\168\002\001\002\001\005w\003\161\003\127\002]\002\r\0024\000\231\002]\000N\0024\000\231\001\029\002\149\002\156\005i\005u\002\177\006\255\001\247\005k\000\188\002\000\005v\000\193\001<\007\t\003\180\003\181\001\251\001\250\005m\001#\001\255\002\157\001\021\002\181\002\001\005w\003\180\003\181\006\229\002\187\006\211\001\135\002\159\005\027\005n\003\161\003\127\002\149\002\156\005i\002\"\002\149\002\156\000\194\005k\007\n\001,\003\161\003\127\001=\007\017\001\021\002\189\000\227\000:\005m\000\231\000\232\002\157\001\223\002\181\005W\002\157\002Z\0020\001c\002\187\002\000\001\135\002\159\002\158\005n\001\135\002\159\007+\005\030\003\145\004\188\002y\005X\005o\002\024\005_\006\198\006\199\003\019\002z\0007\003\019\002\189\001\029\005`\005p\006\200\006\201\0007\007\018\003T\005W\002\145\002Z\0020\001c\001\015\006\202\003\127\002!\000E\007,\001\021\001\"\002#\006\163\001j\000\231\002y\005X\005o\000b\005_\003d\007\019\005a\002z\0009\003\019\006\151\003r\005`\005p\000\188\001\227\006\206\001\244\002\020\000\188\002\145\000\198\001\244\007\020\000\233\001\251\003%\006\198\006\199\001\255\002!\001\021\003_\003a\003c\006\186\000\227\006\200\006\201\000\231\001\002\0036\005b\005a\003\225\005\238\002\147\005z\006\202\003\127\001\170\005c\000\188\001#\001\231\001\244\000f\002\011\002]\000\234\0024\000\231\002$\001\021\002\022\002\016\004\192\002Z\0020\001c\005u\002\177\003\151\003\152\007'\001\005\002\000\005v\001\015\005b\006\159\006\142\007\015\002\147\001\021\001\"\003(\001R\005c\003\160\005\024\002\001\005w\003\161\003\127\002]\000\188\0024\000\231\000\193\001b\001c\007\023\000m\002\149\002\156\005i\005u\002\177\004\217\007(\005k\002\"\000\231\005v\001\250\001\227\004\220\005\239\002\018\001d\004\215\005m\001f\001g\002\157\001\251\002\181\004E\005w\001\255\004\004\001\021\002\187\003k\001\135\002\159\000\231\005n\001\015\001U\002\149\002\156\005i\001#\001\021\001\"\001\223\005k\000H\003x\003\201\002\"\003\240\001'\000=\002\189\001\021\004G\005m\0023\001c\002\157\000\211\002\181\005W\002\\\002Z\0020\001c\002\187\003{\001\135\002\159\004I\005n\005\236\002\000\002]\003\019\0024\000\231\002y\005X\005o\002\024\005_\002\167\0020\001c\002z\000O\002\001\002\189\004J\005`\005p\003T\001k\002\253\001c\001\015\005W\002\145\002Z\0020\001c\001\021\001\024\007\024\001l\001\135\006\215\000\231\003\242\002#\005\026\000\234\000\231\002y\005X\005o\004\222\005_\002\149\002\156\005a\002z\001\227\001\015\005x\002\017\005`\005p\000c\001\021\001\024\004\224\001\251\000\146\002\145\000\129\001\255\007\016\001\021\002\157\003\205\004\216\003b\003a\003c\003\178\001\021\002\158\000\133\001\135\002\159\000\227\001\015\000\234\000\231\001\002\005b\005a\001\021\001\"\002\147\005s\001\225\002\016\000\227\005c\006S\000\231\001\002\005D\000\137\001}\002]\001\025\0024\000\231\002$\002\024\000\156\001\134\003\179\001\135\001j\002\000\005u\002\177\000\163\003\019\001^\0044\005\237\005v\002\168\005b\0024\000\231\000\234\002\147\002\001\000\234\005@\0045\005c\001\232\006\141\004L\005w\002#\003\019\002]\000\231\0024\000\231\000\165\001b\001c\005B\000\175\002\149\002\156\005i\005u\002\177\004\217\000\188\005k\003\182\001\244\005v\002!\001\227\004\220\004\229\001\228\001d\004\215\005m\001f\001g\002\157\001\251\002\181\005C\005w\001\255\005\242\001\021\002\187\000\192\001\135\002\159\000\188\005n\003\133\001\244\002\149\002\156\005i\001\029\005|\001\029\006\165\005k\001\029\003:\001c\001)\003\019\000\227\000\191\002\189\000\231\000\232\005m\002$\002\024\002\157\003\019\002\181\005W\006\146\002Z\0020\001c\002\187\001 \001\135\002\159\003)\005n\001 \002\000\001\015\007I\007J\004\233\002y\007L\001\021\001\"\005_\005\018\002\028\003\170\002z\002#\002\001\002\189\000\231\005`\007N\000\188\001k\004\137\001\244\006\143\005W\002\145\002Z\0020\001c\007]\001\227\000\218\001l\001\249\000\227\000\231\003\019\000\231\001\002\007U\001\251\002y\007V\005\020\001\255\005_\001\021\003\021\005a\002z\001\227\003P\003\127\002\003\005`\007^\003(\003\231\005\021\002\"\001\251\003\243\002\145\005\028\001\255\000\224\001\021\0051\003k\004\216\001\015\000\231\001\015\005\237\000k\001\015\001\021\001\"\001\021\001\"\002$\001\021\001\"\001\015\005b\005a\006\230\000\239\002\147\001\021\001\024\002\000\005\132\005c\004\221\000\231\001\002\000\242\001\015\001}\002]\003\019\0024\000\231\001\021\001\024\002\001\001\134\003\020\001\135\001j\002\000\005u\002\177\000n\000\227\007Q\005@\000\231\000\232\003k\005b\003\242\000\231\002\024\002\147\002\001\000\250\001\250\001\029\005c\005\146\001\030\005B\005w\0010\001#\002]\001#\0024\000\231\001#\000\234\006\192\0007\001\135\002\149\002\156\005i\005u\002\177\002%\007b\005k\002#\0011\001 \000\231\004{\005C\000\253\001&\001O\001,\005m\001$\001\029\002\157\001,\002\181\001W\005w\001\t\003\195\001\029\002\187\0040\001\135\002\159\003\173\005n\003,\000\234\002\149\002\156\005i\004|\006\220\004}\000\166\005k\001\029\0007\001\015\004`\006\204\003d\001\135\002\189\001\021\001\024\005m\005\r\001(\002\157\000\170\002\181\005W\003\179\002Z\0020\001c\002\187\000\173\001\135\002\159\004\181\005n\001 \004~\0016\002$\001\012\0007\002y\005X\006\213\000\227\005_\000\176\000\231\000\232\002z\001\015\003\019\002\189\001\029\005`\005p\001\021\001\"\003(\000\219\000\222\005W\002\145\002Z\0020\001c\001\015\004K\007F\0020\001c\004\127\001\021\001\024\000\234\003\019\007U\005\018\002y\007V\004\128\004\129\005_\004\130\001\028\005a\002z\001\015\006\171\0019\000\234\005`\007Y\001\021\001\"\001\015\001@\004G\000\234\002\145\001\015\001\021\001\"\003\019\006\158\006G\001\021\001\"\004\159\001<\001E\005\020\001\015\004I\000\234\001T\001#\0007\001\021\001\"\001D\005b\005a\003\248\003\019\002\147\005\021\000\234\000\234\001\029\005c\005\028\0044\004J\001\165\005,\004\132\002]\003\019\0024\000\231\004\134\004\144\001,\0045\002\193\001F\003!\004<\005u\002\177\001Z\004\155\001#\003\142\003\127\005v\001\015\005b\003g\003\019\001#\002\147\001\021\001\"\003(\006\161\005c\004\156\004\183\001\163\005w\001q\003\019\002]\003&\0024\000\231\001#\007G\003h\0024\000\231\002\149\002\156\005i\005u\002\177\006\159\007\\\005k\003\019\001\029\003\006\001\250\001\030\003-\001\227\0010\001z\002\005\005m\003\191\003\219\002\157\001,\002\181\001\251\005w\001\021\004\025\001\255\002\187\001\021\001\135\002\159\003\019\005n\0011\001 \002\149\002\156\005i\001#\003/\001M\002\024\005k\001\029\003\252\003\127\004g\006\195\001\015\003T\002\189\000\225\000\234\005m\001\021\001\"\002\157\000\235\002\181\005W\006\212\002Z\0020\001c\002\187\006\159\001\135\002\159\002\025\005n\001 \002#\001\029\002\000\000\231\001\030\002y\005X\004=\001\015\005_\001(\006\196\001\029\002z\001\021\001\024\002\189\002\001\005`\006\147\003T\006\197\001\131\004{\006\196\001E\002\145\0016\001 \003\138\003a\003c\003F\001\029\006\197\001\130\001\030\001\169\003<\001\180\001\015\001\029\003d\001#\004d\0031\001\021\001\"\000\234\005a\001\015\004|\004\158\004}\000\234\006\218\001\021\001\"\001\185\000\227\001 \005\179\000\231\000\232\000\231\001\002\000\240\002$\001 \006V\001.\003\157\003a\003c\0044\001(\001\015\000\188\0047\004\147\001\244\0058\001\021\001\"\004~\005b\0045\001\199\003\236\002\147\0046\000\231\005\018\004+\005c\000\243\000\231\002\024\000\251\001<\005\196\002]\0007\0024\000\231\001\015\001#\001(\001\196\001C\001D\001\021\001\"\005u\002\177\004f\001\015\001A\0049\004\127\006\150\000\231\001\021\001\"\002f\003\019\005\020\002#\004\128\004\129\000\231\004\130\003\019\001,\000\234\005w\001F\001\015\002Z\0020\001c\005\021\001#\001\021\001\"\001\015\005\028\002\149\002\156\005i\005#\001\021\004i\002y\005k\001\029\004\159\002Z\0020\001c\003\019\002z\0073\000\234\001<\005m\000\234\006x\002\157\001,\002\181\001#\002y\001\202\002\145\003G\002\187\000\234\001\135\002\159\002z\005n\001#\003T\004\132\000\234\005\220\002\024\003t\004\134\004\144\005Z\0074\002\145\002$\005\030\001<\003p\001,\002\189\004\155\001F\001\251\001#\004M\006>\001\255\004\160\001\021\003w\001\210\004j\001\227\003\019\003\027\002\031\004\156\002#\006\172\001[\000\231\003\019\001\251\0045\001\216\004o\001\255\004l\001\021\001r\001,\000\146\004U\001F\003\165\003a\003c\002\147\001,\001\211\002Z\0020\001c\001\213\001\227\001\029\001\224\002h\001\030\002]\000\146\0024\000\231\002\000\001\251\002y\002\147\001\029\001\255\001\015\001\021\002\174\002\177\002z\001\222\001\021\001\"\001\029\002]\007\031\0024\000\231\001 \002\000\001\237\0047\002\145\002Z\0020\001c\002\174\002\177\003<\002\178\002$\003~\005\000\000\234\002\001\003T\006M\003\127\002y\003\150\002:\002\149\002\156\000\234\001\239\003A\002z\003\019\002\178\0047\001\254\002\000\006\242\000\234\004{\003\019\002\015\000\234\003\019\002\145\002\149\002\156\002\157\007!\002\181\001(\002\001\002=\001\015\0069\002\187\001#\001\135\002\159\001\021\001\"\005\b\002@\000\234\000\231\002C\002\157\004|\002\181\004}\002\147\006\180\003a\003c\002\187\0065\001\135\002\159\002\189\006\208\001\015\0029\002]\003f\0024\000\231\001\021\001\"\002Z\0020\001c\002<\001\015\000\234\002\174\002\177\002?\002\189\001\021\001\"\004~\002I\001\015\002y\003\172\002B\002Q\002\147\001\021\001\"\001\029\002z\003\187\001\030\002V\003\190\002\178\006\235\001\029\002]\000\234\0024\000\231\002e\002\145\002Z\0020\001c\002\149\002\156\000\234\002\174\002\177\000\234\002H\004\127\002s\001 \002L\001<\002y\002Z\0020\001c\004\128\004\129\001#\004\130\002z\002\157\003G\002\181\002P\002\178\006\232\002\237\002y\002\187\001#\001\135\002\159\002\145\003\014\003\023\002z\002\149\002\156\003#\001#\000\234\006\127\002U\004\157\001,\000\234\0034\001F\002\145\003\019\0039\002\189\003\019\000\234\001\015\001(\003v\002\157\002\147\002\181\001\021\001\"\000\234\003J\002d\002\187\003z\001\135\002\159\002r\002]\004\132\0024\000\231\002\132\000\234\004\134\004\144\003[\006\190\003\127\003]\002\174\002\177\003o\001\015\005%\004\155\002\189\000\231\003\019\001\021\001\"\001\015\000\234\002\147\002\150\003}\003\131\001\021\001\"\000\234\000\234\004\156\002\178\001\029\000\234\002]\001\030\0024\000\231\002\147\003\144\002\173\000\234\003\163\002\149\002\156\000\234\002\174\002\177\003\202\003\019\002]\003\206\0024\000\231\002Z\0020\001c\002\164\000\234\001 \005e\005h\002\174\002\177\002\157\002\186\002\181\003\200\002\178\002y\003\204\001<\002\187\000\234\001\135\002\159\000\234\002z\001#\000\234\002\149\002\156\004@\006|\002\178\004C\001#\003\210\001\227\003\220\002\145\003\017\000\234\000\234\003\216\002\189\002\149\002\156\001\251\002\254\003\022\002\157\001\255\002\181\001\021\001,\001(\000\234\001F\002\187\000\234\001\135\002\159\006\018\002Z\0020\001c\002\157\003\227\002\181\003\246\003\237\003\r\003\015\003\018\002\187\003\019\001\135\002\159\002y\001\227\003+\002\189\003\029\003\025\000\234\001\015\002z\000\234\002\024\001\251\003\251\001\021\001\"\001\255\003*\001\021\006m\002\189\002\000\002\145\003$\003\019\002\147\002\024\000\234\002Z\0020\001c\003'\0033\003\019\000\234\003\019\002\001\002]\003\031\0024\000\231\002#\0038\002y\000\231\003>\002Z\0020\001c\002\174\002\177\002z\001\227\0035\004\000\003\213\002#\006U\000\234\000\231\000\234\002y\001\251\002\000\002\145\002\024\001\255\001/\001\021\002z\003\241\002\178\004\n\003E\001#\006R\003D\001\227\002\001\004\016\003\224\000\234\002\145\002\149\002\156\002\147\004\027\001\251\002Z\0020\001c\001\255\006@\001\021\003I\002#\004$\002]\000\231\0024\000\231\001,\003|\002y\002\157\004D\002\181\004H\002$\002\174\002\177\002z\002\187\002\000\001\135\002\159\001\227\006=\003\130\003\230\004&\0048\000\234\002$\002\145\004*\001\251\002\147\002\001\004?\001\255\002\178\001\021\003\143\003\147\002\189\003\149\004O\002\000\002]\000\234\0024\000\231\002\149\002\156\002\147\003\019\000\234\002Z\0020\001c\002\174\002\177\002\001\000\234\004Y\003\162\002]\003\171\0024\000\231\003\176\002$\002y\002\157\003\188\005\137\003\019\004r\002\174\002\177\002z\002\187\002\178\001\135\002\159\003\019\002\000\003\186\003\189\001\227\006;\004\136\003\239\002\145\002\149\002\156\002\147\000\234\000\234\001\251\002\178\002\001\000\234\001\255\002\189\001\021\000\234\003\019\002]\003\193\0024\000\231\002\149\002\156\000\234\002\157\004\146\002\181\003\203\004\163\002\174\002\177\003\199\002\187\003\019\001\135\002\159\004p\003\019\003\215\003\209\004\169\000\234\002\157\003\211\002\181\003\234\002Z\0020\001c\003\019\002\187\002\178\001\135\002\159\000\234\002\189\003\222\004x\004\173\002\000\003\019\002y\003\233\002\149\002\156\002\147\004\133\003\228\000\234\002z\003\019\003\232\003\245\002\189\002\001\006,\003\250\002]\003\019\0024\000\231\004X\002\145\004\201\002\157\003\255\002\181\004\002\004\141\002\174\002\177\004\006\002\187\000\234\001\135\002\159\000\234\004\014\004\021\002Z\0020\001c\004 \001\227\001\029\004\152\003\247\001\030\000\234\004\182\0010\002\178\004\247\001\251\002y\002\189\0056\001\255\004\252\001\021\004W\004\223\002z\002\149\002\156\004P\000\234\004Q\006&\005(\0011\001 \004\249\001\227\005\001\002\145\006v\0012\002Z\0020\001c\004V\005\004\001\251\002\157\002\147\005\137\001\255\005$\001\021\005+\000\234\002\187\002y\001\135\002\159\003\019\002]\004Z\0024\000\231\002z\005\007\005\015\002\000\001\029\002\024\006\027\001\030\002\174\002\177\003\019\005;\003\019\002\145\002\189\004[\004z\001(\002\001\000\234\003\019\001\015\004s\000\234\004t\000\234\003\019\001\021\001\024\005O\002\178\001 \006s\002\000\0016\002#\000\234\002\147\000\231\001:\004y\000\234\002\149\002\156\004\143\004\139\004\140\001\015\002\001\002]\004\142\0024\000\231\001\021\001\"\000\234\003\019\002Z\0020\001c\004\154\002\174\002\177\002\157\005[\002\181\003\019\0055\004\151\000\234\000\234\002\187\002y\001\135\002\159\004\153\002\147\006?\001(\000\234\002z\003\019\0059\002\178\005=\004\162\006\012\0044\002]\003\019\0024\000\231\005A\002\145\002\189\002\149\002\156\000\234\005M\0045\002\174\002\177\002$\004;\003\019\006E\001<\006L\001\015\006O\002Z\0020\001c\001#\001\021\001\"\002\157\001D\002\181\006r\006\144\003\019\002\178\006\154\002\187\002y\001\135\002\159\005T\006\156\001\015\006\193\000\234\002z\002\149\002\156\001\021\001\024\005^\006\001\001,\003\019\006\205\001F\003\019\000\234\002\145\002\189\003\019\002Z\0020\001c\004\164\005j\003\019\002\157\002\147\002\181\004\165\004\170\004\174\005q\002\024\002\187\002y\001\135\002\159\001<\002]\004\178\0024\000\231\002z\000\234\001#\000\234\006j\000\234\005\249\004\196\002\174\002\177\004\202\004\206\004\237\002\145\002\189\000\234\000\234\006\145\005\002\000\234\002#\006\148\005\031\000\231\0044\000\234\005)\000\234\001\029\001,\002\178\001\030\001B\005V\005P\005Q\0045\002\147\000\234\005U\004T\006\219\002\149\002\156\007O\005\\\005l\005\231\007Z\002]\005\240\0024\000\231\005\252\007_\001 \006\007\002Z\0020\001c\006\015\002\174\002\177\002\157\0067\002\181\006D\006F\006K\006N\006[\002\187\002y\001\135\002\159\006q\002\147\006z\006\188\006\210\002z\007A\000\000\002\178\001\174\001c\005\209\002$\002]\000\000\0024\000\231\000\000\002\145\002\189\002\149\002\156\002Z\0020\001c\002\174\002\177\001(\000\000\002\238\001s\000\000\001f\001g\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002z\000\000\002\178\000\000\002\187\000\000\001\135\002\159\000\000\000\000\005\201\000\000\001\015\002\145\002\149\002\156\000\000\000\000\001\021\001\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\189\002\243\002\255\003\000\000\000\001b\001c\000\000\002\157\002\147\002\181\000\000\000\000\000\000\006e\000\000\002\187\000\000\001\135\002\159\000\000\002]\006h\0024\000\231\001d\004\215\000\000\001f\001g\002Z\0020\001c\002\174\002\177\001{\000\000\000\000\000\000\002\189\000\000\000\000\000\000\000\000\001<\002y\000\000\001l\000\000\002\147\000\231\001#\000\000\002z\000\000\002\178\002Z\0020\001c\002\143\000\000\002]\000\000\0024\000\231\000\000\002\145\002\149\002\156\000\000\000\000\002y\000\000\002\174\002\177\000\000\000\000\000\000\001,\002z\000\000\001\236\003\003\006i\000\000\002\176\000\000\000\000\002\157\000\000\002\181\000\000\002\145\000\000\000\000\002\178\002\187\000\000\001\135\002\159\000\000\000\000\000\000\001k\000\000\000\000\000\000\002\149\002\156\000\227\000\000\000\000\000\231\000\232\001}\001l\000\000\000\000\000\231\002\189\000\000\000\000\001~\000\000\001\135\001j\000\000\000\000\002\157\002\147\005\137\000\000\000\000\000\000\000\000\000\000\002\187\000\000\001\135\002\159\000\000\002]\005\018\0024\000\231\000\000\000\000\000\000\002Z\0020\001c\000\000\004\216\002\174\002\177\002\147\000\000\000\000\000\000\002\189\000\000\000\227\000\000\002y\000\231\000\232\000\000\002]\000\000\0024\000\231\002z\000\000\000\000\000\000\002\178\005\020\002\180\000\000\002\174\002\177\000\000\001}\000\000\002\145\000\000\000\000\002\149\002\156\000\000\001\134\005\021\001\135\001j\005\018\000\000\005\028\002Z\0020\001c\005 \002\178\000\000\001\029\000\000\000\000\001\030\000\000\002\157\000\000\002\181\000\000\002y\002\149\002\156\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\000\000\000\000\000\000\002\195\000\000\005\020\000\000\001 \000\000\000\000\002\145\002\157\000\000\002\181\000\000\000\000\002\189\003W\000\000\002\187\005\021\001\135\002\159\000\000\002\147\005\028\000\000\000\000\000\000\005\029\000\000\000\000\000\000\006\153\000\000\000\000\002]\000\000\0024\000\231\000\000\001\227\002\189\000\000\006\133\002Z\0020\001c\002\174\002\177\000\000\001\251\000\000\000\000\001(\001\255\000\000\001\021\000\000\000\000\002y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002z\000\000\002\178\000\000\000\000\002\147\002\194\000\000\004{\000\000\000\000\000\000\000\000\002\145\002\149\002\156\001\015\002]\000\000\0024\000\231\000\000\001\021\001\"\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\002\000\002\157\004|\002\181\004}\000\000\002y\000\000\000\000\002\187\000\000\001\135\002\159\000\000\002z\002\001\000\000\002\178\000\000\000\000\002\242\000\000\000\000\001\227\000\000\000\000\006\136\002\145\000\000\002\149\002\156\000\000\002\189\001\251\000\000\004~\000\000\001\255\000\000\001\021\000\000\001<\002\147\000\000\000\000\000\000\000\000\000\000\001#\000\000\002\157\000\000\002\181\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\004\127\000\000\000\000\000\000\000\000\001,\000\000\002y\003^\004\128\004\129\002\189\004\130\000\227\002\000\002z\000\231\000\232\002\178\000\000\002\147\002\245\000\000\000\000\000\000\000\000\000\000\000\000\002\145\002\001\002\149\002\156\002]\000\000\0024\000\231\000\000\004\131\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\005\018\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\227\002y\000\000\000\231\000\232\002\187\000\000\001\135\002\159\002z\000\000\004\132\002\178\000\000\000\000\003\n\004\134\004\144\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\005\020\004\155\002\189\000\000\000\000\000\000\000\000\005\018\000\000\000\000\000\000\002\147\000\000\000\000\000\000\005\021\000\000\004\156\000\000\002\157\005\028\002\181\000\000\002]\005'\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\005\020\000\000\000\000\000\227\000\000\002y\000\231\000\232\000\000\002\189\000\000\001\227\000\000\002z\006\139\005\021\002\178\000\000\002\147\004\177\005\028\001\251\000\000\000\000\0057\001\255\002\145\001\021\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\005\018\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\004\180\000\000\000\000\005\020\000\000\002\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\005\021\000\000\002\001\000\000\002\147\005\028\000\000\000\000\000\000\005I\000\000\000\000\002\157\000\000\002\181\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\004\195\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\004\198\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\004\210\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\004\213\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\004\219\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\004\241\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\004\244\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\004\248\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\005\127\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\005\130\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\005\135\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\005\139\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\005\141\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\137\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\005\144\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\137\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\005\149\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\137\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\005\154\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\137\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\005\159\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\137\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\005\165\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\137\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\005\170\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\137\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\005\175\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\005\182\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\005\187\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\005\192\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\137\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\005\204\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\137\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\005\207\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\137\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\005\212\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\137\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\005\215\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\137\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\005\224\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\005\228\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\005\253\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\137\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\005\255\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\137\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\006\003\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\006\006\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\006\b\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\006\n\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\006\020\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\006\029\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\006 \000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\006B\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\006I\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\006Q\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\006_\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\006d\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\006g\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\006\239\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\006\241\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\006\244\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\006\249\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\006\251\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\181\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\006\130\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\006k\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\0064\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\006/\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\200\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005}\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\183\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\185\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\190\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\197\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\199\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\201\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\203\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\205\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\207\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\209\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\211\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\213\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\215\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\217\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\219\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\221\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\223\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\225\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\227\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\229\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\231\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\233\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\002\235\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\152\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\157\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\162\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\168\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\173\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\178\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\185\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\190\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\002Z\0020\001c\000\000\002\174\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002y\000\000\000\000\000\000\002\189\000\000\000\000\000\000\002z\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\002\174\002\177\000\000\002Z\0020\001c\000\000\002\157\000\000\005\195\000\000\002y\000\000\000\000\000\000\002\187\000\000\001\135\002\159\002z\000\000\000\000\002\178\000\000\000\000\000\000\006o\000\000\000\000\000\000\000\000\000\000\002\145\000\000\002\149\002\156\000\000\000\000\002\189\000\000\000\000\001\029\000\000\000\000\001\030\000\000\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\005\198\000\000\002]\000\000\0024\000\231\002\187\000\000\001\135\002\159\000\000\001 \000\000\000\000\002\174\002\177\000\000\000\000\000\000\001\029\000\000\000\000\001\030\000\000\000\000\000\000\000\000\000\000\000\000\002\189\003\145\000\000\000\000\000\000\000\000\000\000\002\178\000\000\002\147\000\000\000\000\000\000\000\000\000\000\000\000\002\\\001 \000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\002]\001(\0024\000\231\000\000\002\174\002\177\001\029\003\145\000\000\001\030\000\000\002\157\000\000\006(\006\185\000\000\000\000\000\000\000\000\002\187\000\000\001\135\002\159\000\000\000\000\000\000\002\178\000\000\000\000\000\000\001\015\000\000\000\000\001 \000\000\001(\001\021\001\"\002\149\002\156\000\000\001\029\002\189\000\000\001\030\002\149\002\156\000\000\000\000\003\148\000\000\000\000\003\145\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\006*\000\000\000\000\000\000\001\015\002\157\002\187\001 \001\135\002\159\001\021\001\"\000\000\002\158\000\000\001\135\002\159\000\000\000\000\001(\000\000\000\000\000\000\003\151\003\152\000\000\003\145\000\000\001<\002\189\000\000\000\000\000\000\003\185\000\000\001#\000\000\000\000\000\000\003\153\003\169\000\000\000\000\000\000\003\161\003\127\000\000\000\000\000\000\001\015\000\000\000\000\000\000\000\000\001(\001\021\001\"\000\000\003\151\003\152\000\000\001\029\001,\001<\001\030\001F\000\000\000\000\004\150\000\000\001#\000\000\000\000\000\000\003\153\003\169\002Z\0020\001c\003\161\003\127\000\000\000\000\000\000\001\015\000\000\000\000\000\000\001 \000\000\001\021\001\"\000\000\002Z\0020\001c\000\000\001,\000\000\005\234\001F\000\000\000\000\003\151\003\152\000\000\005\243\003\145\001<\000\000\000\000\000\000\000\000\000\000\000\000\001#\005\234\000\000\000\000\003\153\003\169\000\000\000\000\005\243\003\161\003\127\000\000\000\000\000\000\000\000\000\000\0062\000\000\000\000\000\000\001(\000\000\000\000\003\151\003\152\000\000\000\000\001,\001<\000\000\001F\001\188\001c\005\244\000\000\001#\000\000\000\000\000\000\003\153\003\169\000\000\000\000\000\000\003\161\003\127\000\000\001b\001c\000\000\001\015\001d\002m\000\000\001f\001g\001\021\001\"\000\000\000\000\002\\\000\000\001,\000\000\000\000\001F\000\000\001d\001s\000\000\001f\001g\005\246\000\000\0024\000\231\001\002\002\\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\246\006\"\0024\000\231\001\002\000\000\005\210\002\255\003\000\000\000\000\000\000\000\000\000\000\000\000\000\003\151\003\152\000\000\000\000\000\000\001<\000\000\005\237\001t\000\000\001u\002E\001#\000\000\002\149\002\156\006\183\006\184\000\000\000\000\000\000\003\161\003\127\000\000\005\237\001{\000\000\001\174\001c\000\000\000\000\002\149\002\156\000\000\000\000\002\157\000\000\001l\000\000\001,\000\231\001{\001F\002\158\000\000\001\135\002\159\002\238\001s\000\000\001f\001g\002\157\001l\000\000\000\000\000\231\001\174\001c\000\000\002\158\000\000\001\135\002\159\006%\000\000\000\000\005\213\005\218\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\238\001s\000\000\001f\001g\001\174\001c\000\000\000\000\000\000\001\174\001c\000\000\000\000\002\243\002\255\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\238\001s\001}\001f\001g\002\238\001s\000\000\001f\001g\001~\000\000\001\135\001j\000\000\000\000\000\000\000\000\001}\002\243\002\255\003\000\000\000\001{\000\000\000\000\001~\000\000\001\135\001j\000\000\000\000\000\000\000\000\000\000\001l\000\000\000\000\000\231\001b\001c\000\000\000\000\000\000\002\243\002\255\003\000\000\000\000\000\002\243\002\255\003\000\000\000\001{\000\000\000\000\001b\001c\000\000\001d\001s\000\000\001f\001g\000\000\001l\000\000\000\000\000\231\000\000\003\003\003\004\000\000\000\000\000\000\000\000\001d\001s\001{\001f\001g\000\000\006~\001{\000\000\000\000\000\000\000\000\000\000\000\000\001l\000\000\000\000\000\231\000\000\001l\001b\001c\000\231\006\129\003\003\005\003\001}\000\000\001t\000\000\001u\002E\000\000\000\000\001~\000\000\001\135\001j\000\000\000\000\001d\001s\000\000\001f\001g\001t\000\000\001u\002E\003\003\005*\000\000\000\000\000\000\003\003\005]\001}\000\000\000\000\000\000\000\000\001{\000\000\006\234\001~\000\000\001\135\001j\000\000\000\000\000\000\000\000\000\000\001l\000\000\000\000\000\231\000\000\001{\001b\001c\001}\000\000\000\000\006%\001t\001}\001u\002E\001~\001l\001\135\001j\000\231\001~\000\000\001\135\001j\000\000\001d\001s\006%\001f\001g\001b\001c\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\006\237\000\000\001d\001s\000\000\001f\001g\000\000\001l\000\000\000\000\000\231\000\000\000\000\000\000\000\000\000\000\000\000\001}\006%\000\000\000\000\001t\000\000\001u\002E\001~\000\000\001\135\001j\000\000\000\000\000\000\001b\001c\001}\000\000\000\000\001b\001c\000\000\000\000\000\000\001~\000\000\001\135\001j\001t\000\000\001u\001\139\000\000\000\000\001d\001s\001{\001f\001g\001d\001s\000\000\001f\001g\001\172\000\000\000\000\000\000\001l\001\158\000\000\000\231\000\000\000\000\000\000\000\146\001}\000\000\000\000\006%\000\000\001{\000\000\000\000\001~\000\000\001\135\001j\001b\001c\000\000\000\000\000\000\001l\000\000\000\000\000\231\000\000\000\000\001t\000\000\001u\001\160\000\000\001t\000\000\001u\001\160\001d\001s\000\000\001f\001g\000\000\000\000\000\000\000\000\000\000\001\162\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001{\000\000\000\000\001}\000\000\001{\001b\001c\000\000\000\000\000\000\001~\001l\001\135\001j\000\231\000\000\001l\000\000\000\000\000\231\001t\000\000\001u\001\160\000\000\001d\001s\001}\001f\001g\000\000\001b\001c\000\000\000\000\001~\000\000\001\135\001j\000\000\001\188\001c\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001d\001s\001{\001f\001g\001b\001c\000\000\000\000\001d\002m\000\000\001f\001g\001l\000\000\000\000\000\231\000\000\001t\000\000\001u\001\192\000\000\000\000\001d\001s\001}\001f\001g\000\000\000\000\001}\000\000\000\000\001~\000\000\001\135\001j\000\000\001~\000\000\001\135\001j\000\000\001t\000\000\001u\002E\000\000\000\000\000\000\001{\005\210\002\255\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001l\000\000\000\000\000\231\000\000\000\000\001t\000\000\001u\002E\000\000\000\000\000\000\000\000\001{\000\000\000\000\001}\000\000\000\000\000\000\001b\001c\001{\000\000\001~\001l\001\135\001j\000\231\000\000\000\000\001\195\000\000\000\000\001l\000\000\006!\000\231\001{\000\000\001d\001s\000\000\001f\001g\000\000\000\000\000\000\001b\001c\001l\000\000\000\000\000\231\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006$\000\000\000\000\000\000\005\217\001}\001\029\001d\001s\004d\001f\001g\000\000\001~\000\000\001\135\001j\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001t\000\000\001u\0077\000\000\0079\000\000\001}\000\000\001 \000\000\000\000\000\000\000\000\000\000\001~\001}\001\135\001j\000\000\000\000\000\000\000\000\000\000\001~\000\000\001\135\001j\001t\000\000\001u\006\224\001}\001{\000\000\000\000\000\000\000\000\000\000\000\000\001~\000\000\001\135\001j\000\000\001l\001b\001c\000\231\000\000\000\000\001\029\000\000\000\000\001\030\000\000\004f\0010\000\000\001b\001c\001{\000\000\000\000\000\000\000\000\001d\001s\000\000\001f\001g\000\000\000\000\001l\000\000\000\000\000\231\0011\001 \001d\001s\000\000\001f\001g\001K\000\000\001\015\000\000\000\000\000\000\000\000\001\029\001\021\004i\001\030\000\000\000\000\001G\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001b\001c\001t\001}\001u\001\164\000\000\000\000\001I\001 \000\000\001~\000\000\001\135\001j\001t\001(\001u\001\154\000\000\001d\001s\000\000\001f\001g\000\000\000\000\000\000\000\000\000\000\000\000\001}\000\000\0016\000\000\001{\000\000\000\000\000\000\001~\000\000\001\135\001j\004j\000\000\000\000\001\015\001l\001{\000\000\000\231\000\000\001\021\001\"\000\000\0045\001(\004n\000\000\004l\001l\001b\001c\000\231\000\000\001t\000\000\001u\001\151\000\000\001,\000\000\000\000\0016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001d\001s\000\000\001f\001g\001\015\000\000\000\000\000\000\000\000\000\000\001\021\001\"\000\000\000\000\000\000\000\000\001{\000\000\000\000\000\000\000\000\000\000\000\000\001<\000\000\000\000\000\000\000\000\001l\000\000\001#\000\231\001}\000\000\001D\000\000\000\000\000\000\000\000\000\000\001~\000\000\001\135\001j\001t\001}\001u\001w\001b\001c\000\000\000\000\000\000\001~\000\000\001\135\001j\001,\000\000\000\000\001F\001b\001c\001<\000\000\000\000\000\000\000\000\001d\001s\001#\001f\001g\000\000\001D\000\000\000\000\001{\000\000\000\000\000\000\001d\001s\000\000\001f\001g\000\000\001b\001c\001l\000\000\000\000\000\231\000\000\000\000\001}\000\000\001,\000\000\000\000\001F\000\000\000\000\001~\000\000\001\135\001j\001d\001s\000\000\001f\001g\000\000\001t\000\000\001u\001y\000\000\000\000\001b\001c\000\000\000\000\000\000\001b\001c\001t\000\000\001u\001|\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001d\001s\000\000\001f\001g\001d\001s\001{\001f\001g\000\000\000\000\000\000\001t\000\000\001u\001\150\001}\000\000\001l\001{\000\000\000\231\000\000\000\000\001~\000\000\001\135\001j\000\000\000\000\000\000\001l\000\000\000\000\000\231\001b\001c\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001t\001{\001u\001\142\000\000\001t\000\000\001u\001\147\000\000\000\000\001d\001s\001l\001f\001g\000\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\001{\000\000\000\000\000\000\000\000\001{\000\000\000\000\001}\000\000\000\000\000\000\001l\001b\001c\000\231\001~\001l\001\135\001j\000\231\001}\000\000\001t\000\000\001u\002R\000\000\000\000\001~\000\000\001\135\001j\001d\001s\000\000\001f\001g\000\000\001b\001c\000\000\000\000\000\000\000\000\000\000\000\000\001}\000\000\000\000\000\000\000\000\001b\001c\000\000\001~\001{\001\135\001j\001d\001s\000\000\001f\001g\000\000\000\000\000\000\000\000\001l\000\000\000\000\000\231\001d\001s\000\000\001f\001g\000\000\001t\001}\001u\002W\000\000\000\000\001}\000\000\000\000\001~\000\000\001\135\001j\000\000\001~\000\000\001\135\001j\000\000\000\000\000\000\000\000\000\000\001b\001c\000\000\001t\000\000\001u\002\247\001b\001c\000\000\001{\000\000\000\000\000\000\000\000\000\000\001t\000\000\001u\002\249\001d\001s\001l\001f\001g\000\231\000\000\001d\001s\000\000\001f\001g\000\000\000\000\001}\000\000\001{\000\000\000\000\001b\001c\000\000\001~\000\000\001\135\001j\000\000\000\000\001l\001{\000\000\000\231\000\000\000\000\000\000\000\000\002Z\0020\001c\001d\001s\001l\001f\001g\000\231\001t\000\000\001u\002\251\000\000\000\000\000\000\001t\000\000\001u\003\002\000\000\000\000\000\000\005\024\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~\001{\001\135\001j\000\000\004{\005\025\001t\001{\001u\003\b\001\029\000\000\001l\001\030\000\000\000\231\001G\001}\000\000\001l\000\000\000\000\000\231\000\000\000\000\001~\000\000\001\135\001j\000\000\001}\000\000\004|\007\001\004}\000\000\001I\001 \001~\001{\001\135\001j\004.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001l\000\000\000\000\000\231\000\000\000\000\002\\\000\000\000\000\000\000\000\000\005W\000\000\000\000\004~\000\000\000\000\000\000\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\007U\000\000\001}\007V\000\000\000\000\005_\001(\000\000\001}\001~\000\000\001\135\001j\000\000\005`\000\000\001~\000\000\001\135\001j\000\000\000\000\004\127\0016\000\000\000\000\000\000\000\000\000\000\005\027\000\000\004\128\004\129\000\000\004\130\000\000\001\015\002\149\002\156\000\000\001}\000\000\001\021\001\"\000\000\005a\005W\000\000\001~\000\000\001\135\001j\000\000\000\000\000\000\000\000\005W\000\000\002\157\004\159\000\000\007U\000\000\000\000\007V\000\000\002\158\005_\001\135\002\159\000\000\007U\000\000\000\000\007V\000\000\005`\005_\000\000\000\000\000\000\005b\000\000\000\000\000\000\000\000\005`\004\132\007\003\000\000\005c\000\000\004\134\004\144\001\029\001<\000\000\001\030\000\000\000\000\0010\000\000\001#\004\155\000\000\000\000\004c\005a\000\000\005d\002\177\000\000\007X\000\000\000\000\000\000\000\000\005a\005W\004\156\0015\001 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\001,\000\000\005g\001F\007U\000\000\000\000\007V\000\000\000\000\005_\000\000\000\000\000\000\005b\000\000\005i\000\000\000\000\005`\000\000\005k\000\000\005c\005b\000\000\000\000\001\029\000\000\000\000\001\030\000\000\005m\005c\000\000\000\000\000\000\000\000\000\000\001(\000\000\000\000\005d\002\177\000\000\007W\000\000\000\000\005n\000\000\005a\000\000\005d\002\177\001 \007[\0016\000\000\000\000\004.\000\000\001b\001c\000\000\005g\000\000\000\000\000\000\000\000\001\015\000\000\000\000\000\000\000\000\005g\001\021\001\"\000\000\005i\001b\001c\001d\004\215\005k\001f\001g\005b\000\000\005i\000\000\000\000\000\000\000\000\005k\005m\005c\006T\000\000\000\000\001d\004\215\001(\001f\001g\005m\000\000\001b\001c\000\000\000\000\005n\000\000\000\000\000\000\005d\002\177\000\000\007`\000\000\000\000\005n\000\000\002Z\0020\001c\000\000\001d\004\215\001<\001f\001g\001\015\000\000\000\000\000\000\001#\005g\001\021\001\"\001D\000\000\000\000\000\000\000\000\000\000\002\170\000\000\000\000\000\000\000\000\005i\000\000\001b\001c\000\000\005k\000\000\000\000\000\000\001k\000\000\000\000\001,\000\000\000\000\001F\005m\000\000\000\000\004\214\000\000\001l\001d\004\215\000\231\001f\001g\001k\000\000\001b\001c\000\000\005n\000\000\000\000\000\000\000\000\000\000\000\000\001l\001<\000\000\000\231\000\000\000\000\000\000\004\245\001#\000\000\001d\004\215\0043\001f\001g\001k\000\000\000\000\000\000\006\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001l\000\000\000\000\000\231\000\000\002\\\000\000\000\000\001,\000\000\004\216\001F\000\000\000\000\000\000\000\000\006\024\002]\000\000\0024\000\231\000\000\001}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\134\000\000\001\135\001j\001k\000\000\000\000\005J\000\000\000\000\001}\000\000\000\000\000\000\000\000\000\000\001l\000\000\001\134\000\231\001\135\001j\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001k\002\171\002\149\002\156\000\000\000\000\001}\000\000\000\000\000\000\000\000\000\000\001l\000\000\001\134\000\231\001\135\001j\001b\001c\000\000\000\000\004\216\002\157\001b\001c\000\000\000\000\005L\000\000\000\000\002\158\000\000\001\135\002\159\000\000\000\000\000\000\001d\004\215\000\000\001f\001g\000\000\001d\004\215\000\000\001f\001g\004\216\001b\001c\001}\000\000\000\000\000\000\000\000\001b\001c\000\000\001\134\000\000\001\135\001j\000\000\000\000\000\000\000\000\000\000\000\000\001d\004\215\000\000\001f\001g\000\000\000\000\001d\004\215\001}\001f\001g\005W\000\000\000\000\000\000\000\000\001\134\000\000\001\135\001j\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005X\000\000\000\000\005_\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005`\000\000\000\000\001\029\001k\000\000\001\030\000\000\000\000\000\000\001k\000\000\000\000\000\000\005W\000\000\001l\000\000\000\000\000\231\000\000\000\000\001l\000\000\000\000\000\231\000\000\000\000\000\000\000\000\001 \005a\005X\000\000\000\000\005_\001k\000\000\000\000\000\000\001b\001c\000\000\001k\005`\001b\001c\000\000\001l\000\000\000\000\000\231\000\000\005\016\000\000\001l\000\000\000\000\000\231\005\016\001d\004\215\000\000\001f\001g\001d\004\215\005b\001f\001g\000\000\000\000\000\000\007\027\000\000\005a\005c\001(\000\000\000\000\000\000\000\000\000\000\001}\000\000\005J\000\000\000\000\000\000\001}\000\000\001\134\005J\001\135\001j\005d\002\177\001\134\000\000\001\135\001j\000\000\005f\000\000\005\"\000\000\000\000\001\015\000\000\000\000\005!\005b\000\000\001\021\001\"\001}\000\000\005g\000\000\000\000\005c\000\000\001}\001\134\000\000\001\135\001j\000\000\001b\001c\001\134\005i\001\135\001j\000\000\000\000\005k\005K\001k\005d\002\177\000\000\000\000\001k\005S\000\000\005r\005m\001d\004\215\001l\001f\001g\000\231\000\000\001l\000\000\000\000\000\231\000\000\005W\005g\000\000\005n\000\000\000\000\001<\000\000\000\000\000\000\002Z\0020\001c\001#\000\000\005i\000\000\007\028\005X\000\000\005k\005_\000\000\005W\000\000\000\000\000\000\006\021\000\000\000\000\005`\005m\006\021\0061\000\000\000\000\000\000\000\000\000\000\000\000\001,\007L\000\000\001F\005_\000\000\000\000\005n\000\000\000\000\000\000\006\023\000\000\005`\000\000\000\000\006\022\001}\000\000\001b\001c\005a\001}\000\000\000\000\001\134\001k\001\135\001j\000\000\001\134\000\000\001\135\001j\000\000\000\000\000\000\000\000\001l\001d\004\215\000\231\001f\001g\005a\000\000\000\000\000\000\000\000\000\000\000\000\002Z\0020\001c\000\000\000\000\000\000\005b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005c\000\000\000\000\002\\\002Z\0020\001c\000\000\006.\006\021\000\000\001b\001c\000\000\005b\002]\000\000\0024\000\231\005d\002\177\000\000\000\000\005c\000\000\000\000\006\149\002[\000\000\000\000\000\000\001d\001e\006\026\001f\001g\000\000\000\000\000\000\001}\000\000\005g\005d\002\177\000\000\000\000\007M\001\134\000\000\001\135\001j\001k\000\000\000\000\000\000\005i\002Z\0020\001c\000\000\005k\002\149\002\156\001l\005g\000\000\000\231\000\000\000\000\000\000\000\000\005m\000\000\000\000\000\000\000\000\000\000\000\000\005i\002t\000\000\000\000\002\157\005k\002\\\000\000\000\000\005n\000\000\000\000\002\158\000\000\001\135\002\159\005m\000\000\002]\000\000\0024\000\231\006\025\000\000\000\000\002\\\002Z\0020\001c\000\000\000\000\001k\005n\002Z\0020\001c\000\000\002]\000\000\0024\000\231\000\000\000\000\001l\000\000\000\000\000\231\000\000\000\000\002v\000\000\000\000\001}\000\000\000\000\000\000\002\138\000\000\000\000\000\000\001\134\000\000\001\135\001j\002\149\002\156\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002Z\0020\001c\002\\\000\000\000\000\000\000\000\000\000\000\002\149\002\156\002\157\000\000\000\000\000\000\002]\000\000\0024\000\231\002\158\000\000\001\135\002\159\002\148\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\000\000\000\000\000\000\000\000\001}\000\000\002\158\000\000\001\135\002\159\000\000\000\000\001\134\000\000\001\135\001j\000\000\000\000\000\000\002\\\002Z\0020\001c\000\000\000\000\000\000\002\\\000\000\000\000\002\149\002\156\002]\000\000\0024\000\231\000\000\000\000\000\000\002]\000\000\0024\000\231\000\000\002\155\000\000\000\000\000\000\000\000\000\000\000\000\002\157\000\000\000\000\002Z\0020\001c\000\000\000\000\002\158\000\000\001\135\002\159\000\000\000\000\000\000\000\000\000\000\002\\\000\000\002Z\0020\001c\000\000\000\000\000\000\000\000\002\162\002\149\002\156\002]\000\000\0024\000\231\000\000\002\149\002\156\000\000\000\000\000\000\000\000\000\000\001\029\002\188\000\000\001\030\000\000\000\000\000\000\002\157\000\000\000\000\000\000\000\000\000\000\000\000\002\157\002\158\000\000\001\135\002\159\000\000\000\000\000\000\002\158\000\000\001\135\002\159\000\000\001 \002\\\000\000\000\000\000\000\000\000\000\000\002\149\002\156\000\000\003<\000\000\000\000\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004#\002\157\000\000\000\000\000\000\000\000\000\000\002\\\000\000\002\158\000\000\001\135\002\159\000\000\001\029\000\000\000\000\001\030\000\000\002]\001(\0024\000\231\002\\\002Z\0020\001c\000\000\000\000\000\000\000\000\000\000\002\149\002\156\000\000\002]\000\000\0024\000\231\000\000\000\000\001 \000\000\000\000\000\000\000\000\000\000\005\023\000\000\000\000\001\015\003<\001\029\002\157\000\000\001\030\001\021\001\"\000\000\000\000\000\000\002\158\000\000\001\135\002\159\002\149\002\156\000\000\004\211\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\000\002\149\002\156\000\000\000\000\000\000\002\157\000\000\001(\003<\001\029\000\000\000\000\001\030\002\158\000\000\001\135\002\159\000\000\000\000\000\000\000\000\002\157\000\000\000\000\000\000\004\232\000\000\000\000\001<\002\158\000\000\001\135\002\159\000\000\000\000\001#\001 \001\015\000\000\003G\000\000\000\000\002\\\001\021\001\"\001(\003<\000\000\000\000\001\029\000\000\000\000\001\030\000\000\002]\000\000\0024\000\231\000\000\000\000\000\000\000\000\001,\004\242\000\000\001F\000\000\001b\001c\000\000\000\000\000\000\000\000\000\000\000\000\001\015\001 \001\029\006\168\000\000\001\030\001\021\001\"\001(\000\000\000\000\000\000\001d\001\133\000\000\001f\001g\000\000\000\000\001b\001c\001<\000\000\000\000\000\000\002\149\002\156\000\000\001#\001 \000\000\000\000\003G\000\000\005\011\000\000\000\000\000\000\001\015\001d\001\205\000\000\001f\001g\001\021\001\"\002\157\000\000\001(\000\000\001\029\000\000\000\000\001\030\002\158\001,\001\135\002\159\001F\001<\000\000\000\000\000\000\000\000\000\000\000\000\001#\000\000\000\000\000\000\003G\001\029\000\000\000\000\001\030\000\000\001(\001 \001\015\000\000\000\000\000\000\000\000\001\029\001\021\001\"\001\030\003W\000\000\000\000\001k\000\000\000\000\001,\000\000\000\000\001F\001<\001 \000\000\000\000\000\000\001l\003Z\001#\000\231\001\015\000\000\003G\000\000\001 \001\029\001\021\001\"\001\030\000\000\000\000\001k\000\000\000\000\006`\000\000\000\000\000\000\001(\000\000\000\000\000\000\000\000\001l\000\000\001,\000\231\000\000\001F\000\000\000\000\001<\001 \000\000\000\000\000\000\000\000\000\000\001#\001(\000\000\000\000\006\175\000\000\000\000\000\000\000\000\000\000\001\015\000\000\001\029\001(\000\000\001\030\001\021\001\"\000\000\000\000\000\000\001<\000\000\000\000\000\000\001}\000\000\001,\001#\000\000\001F\001\015\0043\001\134\000\000\001\135\001j\001\021\001\"\001 \000\000\001(\000\000\001\015\000\000\001\029\000\000\000\000\001\030\001\021\001\"\000\000\001}\000\000\000\000\001,\000\000\000\000\001F\000\000\001\134\001\029\001\135\001j\001\030\000\000\000\000\000\000\000\000\001<\000\000\001\015\001 \000\000\000\000\000\000\001#\001\021\001\"\000\000\001\029\000\000\000\000\001\030\000\000\000\000\001(\000\000\001 \000\000\001<\000\000\000\000\000\000\000\000\000\000\000\000\001#\000\000\000\000\000\000\004@\001<\001,\005<\000\000\003^\001 \000\000\001#\000\000\000\000\000\000\002\129\000\000\000\000\001\015\000\000\001\029\001(\000\000\001\030\001\021\001\"\001,\000\000\001\029\001F\000\000\001\030\001<\000\000\000\000\000\000\000\000\001(\001,\001#\000\000\001F\000\000\001V\000\000\000\000\000\000\001 \000\000\000\000\000\000\001\015\000\000\000\000\000\000\001 \001(\001\021\001\"\000\000\001\029\000\000\000\000\001\030\000\000\000\000\001,\001\015\000\000\001F\000\000\000\000\000\000\001\021\001\"\000\000\001\029\001<\000\000\001\030\000\000\000\000\000\000\000\000\001#\000\000\001\015\001 \001\144\000\000\000\000\000\000\001\021\001\"\001(\001\029\000\000\000\000\001\030\000\000\000\000\000\000\001(\001 \000\000\000\000\000\000\000\000\000\000\000\000\001<\001,\000\000\000\000\001F\000\000\000\000\001#\000\000\000\000\000\000\001\179\001 \000\000\001\015\000\000\001<\000\000\000\000\000\000\001\021\001\"\001\015\001#\001(\000\000\000\000\001\194\001\021\001\"\000\000\000\000\000\000\000\000\001,\001<\000\000\001F\000\000\000\000\001(\000\000\001#\000\000\000\000\000\000\001\241\000\000\000\000\000\000\001,\000\000\000\000\001F\001\015\000\000\000\000\000\000\000\000\001(\001\021\001\"\000\000\001\029\000\000\000\000\001\030\000\000\000\000\001,\001\015\000\000\001F\001<\000\000\000\000\001\021\001\"\000\000\001\029\001#\001<\001\030\000\000\001\243\000\000\000\000\000\000\001#\001\015\001 \000\000\002o\000\000\001\029\001\021\001\"\001\030\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \001,\000\000\000\000\001F\000\000\000\000\001<\001\029\001,\000\000\001\030\001F\001\029\001#\001 \001\030\000\000\002\127\000\000\000\000\000\000\000\000\001<\000\000\000\000\000\000\000\000\000\000\001\029\001#\001(\001\030\000\000\002\131\001 \000\000\000\000\000\000\000\000\001 \001,\001<\000\000\001F\000\000\000\000\001(\000\000\001#\000\000\000\000\000\000\002\240\000\000\000\000\001 \001,\000\000\000\000\001F\001\015\001(\000\000\000\000\000\000\000\000\001\021\001\"\000\000\001\029\000\000\000\000\004d\000\000\000\000\001,\001\015\000\000\001F\000\000\000\000\001(\001\021\001\"\000\000\000\000\001(\000\000\000\000\000\000\000\000\001\015\000\000\000\000\000\000\000\000\001 \001\021\001\"\000\000\000\000\000\000\001(\000\000\001\029\000\000\000\000\004d\000\000\001\029\000\000\001\015\004d\000\000\000\000\000\000\001\015\001\021\001\"\001<\000\000\000\000\001\021\001\"\000\000\000\000\001#\000\000\000\000\000\000\003@\001 \001\015\000\000\000\000\001<\001 \001\029\001\021\001\"\001\030\000\000\001#\004f\000\000\000\000\004\012\000\000\000\000\000\000\001<\000\000\000\000\001,\000\000\000\000\001F\001#\000\000\000\000\000\000\004\024\000\000\000\000\001 \000\000\000\000\000\000\000\000\001,\001<\000\000\001F\001\015\000\000\001<\000\000\001#\004f\001\021\004i\0042\001#\004f\001,\000\000\004B\001F\000\000\000\000\000\000\001<\000\000\000\000\001\029\000\000\000\000\001\030\001#\000\000\000\000\000\000\004\191\000\000\001,\000\000\000\000\001F\001\015\001,\000\000\001(\001F\001\015\001\021\004i\000\000\000\000\000\000\001\021\004i\001 \000\000\000\000\000\000\001,\000\000\000\000\001F\001\029\000\000\000\000\004d\000\000\001\029\000\000\000\000\004d\000\000\004j\000\000\001\015\000\000\000\000\000\000\000\000\000\000\001\021\001\"\001\029\000\000\0045\001\030\004m\000\000\004l\001 \000\000\000\000\000\000\000\000\001 \001\029\000\000\000\000\001\030\001,\001\029\001(\000\000\001\030\000\000\000\000\000\000\004j\000\000\001 \000\000\000\000\004j\000\000\000\000\001\029\000\000\000\000\001\030\0045\000\000\004k\001 \004l\0045\000\000\004w\001 \004l\000\000\000\000\001\015\000\000\001<\001,\000\000\004f\001\021\001\"\001,\001#\004f\001 \000\000\004\208\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001(\001\029\000\000\000\000\001\030\000\000\000\000\000\000\000\000\000\000\001\015\001,\000\000\001(\001F\001\015\001\021\004i\001(\000\000\001\029\001\021\004i\001\030\001\029\000\000\000\000\001\030\001 \000\000\001\015\000\000\000\000\001(\001<\000\000\001\021\001\"\000\000\000\000\000\000\001#\000\000\001\015\000\000\004\239\000\000\001 \001\015\001\021\001\"\001 \000\000\000\000\001\021\001\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\015\000\000\000\000\000\000\000\000\001,\001\021\001\"\001F\000\000\000\000\001\029\001(\004j\001\030\000\000\000\000\000\000\004j\000\000\000\000\000\000\000\000\000\000\000\000\0045\001<\005/\000\000\004l\0045\001(\005G\001#\004l\001(\000\000\006]\001 \001<\001,\000\000\001\015\000\000\001<\001,\001#\000\000\001\021\001\"\006b\001#\000\000\000\000\000\000\006\174\000\000\000\000\000\000\001<\001,\001\015\000\000\001F\000\000\001\015\001#\001\021\001\"\000\000\006\178\001\021\001\"\001,\000\000\000\000\001F\000\000\001,\001\029\000\000\001F\001\030\000\000\000\000\001(\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001,\000\000\000\000\001F\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\006\227\000\000\000\000\001\015\000\000\000\000\000\000\000\000\001<\001\021\001\"\000\000\001<\000\000\000\000\001#\000\000\000\000\000\000\001#\000\000\000\000\000\000\001,\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\000\000\000\000\000\000\000\000\001(\001,\000\000\000\000\001\238\001,\000\000\000\000\003Y\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\001#\000\000\001\015\000\000\000\000\000\000\000\000\000\000\001\021\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\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\006\167\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\001,")) + ((16, "\001\248\001\147\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\000d\000\000\000\000\000\193\000\140\000)\000\181\000j\000%\000(\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\"\000\000\000\000\000\000\000t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#\236\000\000\000\000\000\000\000\174\000\000\000\000\000\000\000\000\000\000\000\000\000\000;\182\000\242\000\000\000\254\000\184\r\238\000\000\001N\r\176\001\026\002\166\000\005\000\000\000\000\000\000\000\012\000\000\000\000\000P\000\000\000\000\000\000\000\000\002\158\000\000\001h\000\000\000\000\000\000\000\000\000\000\002\242\000\000\000X\002\248\t\162\000\000\000\000\012\178;\182\000\000\000\000\001\216\000\000\000;\000\000\t\020\000\242\003p\000\000\000\000\001\168\004\134\001\000\001\144\005\166\002\248\002\202\002\150\002Z\000,\002X\004\162\r\018\000\000\000\000\003\212]<\003n\000\000\004\030\003|\000\000\0070S^\000\231\000\000\000\179\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\186\003\014\000\000\000\000\000\000\000\012\021(\000\000\014D\000\000\000\000\003\016]b\000\000\000\000\000\000\000\000\000\000\000\000\002\242\000\000\000\000\006\164\022|\000\000\007\218\006\164\001\178\000\000\000\000\000\000\027X\000\000\028r\006\164\006\164\006\164\000\000\000\000\003Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000U&\000\000\004\230\004\n\000\000Ez\005\000\n\140\000\000\000\000\005P\000\000\000\000\000\000\002\242\000\000\000\000\000\000A\026\000\000\000\000\000\000\000\000\000\000\000\000\001\166\004\024\000\000\000\000\000\000\002\242[B\002\242]z\002\242\000\000\000\000,\238\000\000\000\000\004\216\000\000\000\000\000\000\000\000W\208\003|\005\134\003\160\026\002\000\000\000\000\000\000\000\000]\226\002\242\000\000\028p\000\000\000\000\000\000^*\002\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021&\000\000\003\220\005\218\005\006\000\000\000\000\000\000\000\000\016\170\000\000\000\000\005\226\000\193\000\000\006\020\006\226\bZ\000\000\000\000\000\000\004\162\004\196\006&\000\169\002\030\006BA\186\004\238\006j\003\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000h\182\014\012\005X\006\132\014\142\n\"W\208%\002\000\000A\194\005`\000\000\000\000\000\000^B\002\242\000\000?\200\000\000\000\000\000\000^h\002\242\000\000\000\000B\176B\244\000\000\000k\000\000\000\000\000\000\006b_\n\002\242\006\158\030\222\005\220\006\162?R\000\000\007\026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000d\000\000\000\000\000\000\000\000\007\172!L\000\000ib\000\000I\230\000\000\000\000\000\000_0\002\242\000\000\000\000k\156\000\000\000\000\000\000\000\000\006\140\006\164U$- \000\000\000\000mx\000\000V.\000\000\000\000\006\184\000\000\000\000\000\000V`\000\000\000\000\000\000_\\\002\242\000\000\000\000m\170\000\000\000\000\006\184V\156\006\184W\012\021&\007\188\007\196\000\000\000\000n\164\000\000\000\000\000\000\000\000\006\184\000\000Wv\000\000\000\000\000\000_n\002\242\000\000\000\000n\226\000\000\000\000\006\184`$\002\242\000\000W\128\006\184\001\002\000\000\006\184\006\184\000\000\006\184\000\000\000\000\006\184\000\000B\244\000\000\000\000\000\000\006\184C^\000\000\000\000\006\184\000\000\000]\b\000\000\000\000\000\000\000\000\000\000\000\000\000o \000\000\000\000\000\000\007\018X\004\006\184\000\000\000\000\000\000\000\000T\154\000\000\000\000\000\000`<\002\242\000\000\000\000o*\000\000\000\000\007\018\000\000W\240\000\000\000\000\000\000`b\002\242\000\000\000\000oh\000\000\000\000\007\018or\000\000XZ\000\000\000\000\000\000`\134\002\242\000\000\000\000o\166\000\000\000\000\007\018&\160\000\000\007\146\000\000a*\002\242\000\000\000\000\000\000\000\000\007\184\bJ\014\226\007\146\007\156\007\166\006\194\002z\006\200\000\234\b\188\000\000\000\000\021r\012b\000\000\006\210\002P\bn\000\000\000\000\023\224\000\000\001\204\002b\004\018\0018\t\232\000\000\000\000\016F\000\000h\\\t\148\000\000aR\002\242af\002\242\000\000\002~\000F\000\000\026N\001\204\000\000\000\000\b\178\000\000\000\000\000\000\000\000\000\000\028\188\001\204\030P\001\204\000\000\000\000\031*\001\204\000\000\003\202\000\000\000\000\004\020\000\000\000\000\000\000\n\022\000\000\001\204\000\000\001\204\000\000\000\000\003`\000\000\0026\002\030\000\000\0026\000\000 \190\001\204\000\000\000\000\000\000\000\000\000\000\0026\015\142%\178\t\222\t\136Ch2\172\000\000\000\000\001T\000\000\000\000\000\000\004\216\000\000\000\000\000\000\b\196\007T\016d\b\220\007Vi,i4\000\000\000\000\000\000\000\000\004\216\n\164\000\000\000\000\000\000\b\242\007X\003\158\0026!\152\001\204\000\000\000\000\000\000\005`\000\000a\176\002\242\016\140i\162\000\000i\176\000\000\000\000& \t\006\007\180\017@\t\014\007\184\015TC\204\006\184\017h\t \007\222\017\182\n8\000\000D\144\006\184a\248\002\242\nH\000\000\000\000\000\000\000\000\021&\n*\000\000\000\000o\176\000\000\000\000\b\014\000\000\000\000\n\130\"@\006\164\000\000\018:\t\214\b\006\018\224\000\000D\154\000\000\000\000\011Z\000\000\000\000\000\000i\196\000\000\000\000\000\000\001h\018p\t\254\b\028X\200\006\184\019.\n\n\b$j2\000\000\011,\nV\000\000\000\000\000\000j\156\000\000\000\000\000\000\000\000\000\000\000\000k \000\000\011D\001\172\000\000\002\208\000\000\000\000\000\000\000\000\000\000\000\000\000\000E\000\n0\bJ&\132\000\000\000\000\001$\000\000\000\000\011\152\000\000\000\000\000\000\000\000\000\000kT\000\000k`\000\000\000\000&\222\nB\bV'0\000\000'\162\000\000\000\000E\n\000\000\000\000\011\190\000\000\000\000\000\000kn\000\000\nz\bZ(H\000\000F\016\000\000k\136\000\000\n@\019\236\000\000\000\000\nVF\130\n\156\bb(\152\000\000\nVF\170\n\172\bv(\178\000\000\nV\000\000k\148\000\000G\024\n\174\b\174)\028\000\000\nV\020 \004\202\020\170\000\000\000\000G\174\n\178\b\176)\134\000\000\nVG\214\n\190\b\198*2\000\000\nVHF\n\198\b\204*\156\000\000\nVH\172\011\030\b\226*\182\000\000\nVIX\011d\t\006+\006\000\000\nVI\190\011f\t\n+ \000\000\nVI\198\011p\t2,6\000\000\nVJH\011~\t>,r\000\000\nVJ\210\011\134\tB,\174\000\000\nVJ\250\011\148\tF-D\000\000\nVK\132\011\162\tR-\198\000\000\nVL\006\011\174\tj.\022\000\000\nVL\014\011\176\tl.\152\000\000\nVLt\011\182\tp/\004\000\000\nVL|\011\196\tr/|\000\000\nVL\254\011\244\t\138/\134\000\000\nVM\136\011\246\t\1420X\000\000\nVM\176\011\248\t\1580\148\000\000\nVN:\000\000\000\000\rp\000\000\000\000\000\000k\212\000\000\012(\t\1621*\000\000\nVN\188\012*\t\1701f\000\000\nV\t\1721JO0\020\222\000\000[B\012\228\000\000bP\002\242\021\156\000\000\000\000\012l\000\000bx\002\242\022Z\000\000\000\000\022\142\000\000\000\000\000N\000\000\000\000\023\024\000\000\000\000\000\000\000\000b\226\002\242\023L\000\000\007\018\024\n\000\000Y\030\000\000\000\000\000\000c>\002\242\000\000\000\000o\246\000\000\000\000\007\018Y8\006\184\005\028\000\000\000\000\003\004\005\162\000\000\000\000\000\000\nV\nV1\154\000\000\000\000\000\000OL\012V\t\1762\226\000\000\nV2\140\000\000\000\000O\186\012x\t\21032\000\000\nV2\252\000\000\000\000P<\012\140\t\2304\"\000\000\nV\002\184\024\200\000\000\000\000P\198\012\216\t\2404r\000\000\nV\024\252\000\000\000\000P\238\012\228\n\0224\230\000\000\nV\025\134\000\000\000\000Qx\012\242\n\0244\244\000\000\nV\000\000\000\0005f\000\000\000\000Q\250\012\246\n\0265\216\000\000\nV6\024\000\000\000\000R\002\r,\n 6\\\000\000\nV6\246\000\000\000\000Rh\r:\n,7(\000\000\nV\000\000Rp\r>\n.7\236\000\000\nV\000\000c\142\000\000\000\000\nV\rD\000\000\000\000\025\186\000\000\026x\000\000\000\000\000\000\000\000\0276\000\000\000\000\027j\000\000\000\000\000\000\000\0007\246\000\000\000\0008,\000\000\000\0008\240\000\000\000\000\000\000\rJ\n28\252\000\000\nV\000\000\000\000\027\244\000\000\028(\000\000\000\000\000\000\000\000\000\000R\242\r\146\n49\192\000\000S|\r\156\n::\022\000\000\nV\nVS\164\r\174\nL:l\000\000\nV\000\000\000\000:\172\000\000\000\000;\002\000\000\000\000T.\000\000\000\000\015\020\000\000\000\000\000\000lZ\000\000\r\180\nN;\132\000\000\nV\000\000\007\018\028\230\000\000\000\000\029\164\000\000O\130\000\000\000\000i4\000\000\000\000<\000\000\000\000\000\000\000\000\000\000\000\000\000\019P\000\000l\140\000\000\nv\000\000\n\144\000\000\000\000\000\000\000\000\003h\000\000\000\000\000\000\"\162\006\164\000\000\006\164-h\000\000H\004\000\000(\218\006\164\006\164\000\000<|\006\164\006\164\n\168\000\000\030\150\000\000\000\000\n\172\0150\000\000=\156\005\182\000\000\000\000\000\000\000\000\000\000\000\000\0140\n\174=\168\000\000\nV\000\000\000\000\000\000\000\000\014V\n\182\006\148\0026\000\000(\188\001\204\000\000\015\188\000\000\000\000\000\000\000\000>\020\000\000\000\000\000\000\000\000\014^\n\188>\128\000\000\000\000+\152\001\204\000\000/\202\001\204\000\0000\020\001\204\000\000\nV\000\0006@\001\204\000\0006\216\001\204\000\000=\138\001\204\000\000\004<\000\000\n\190\006\188\bR\000\000\014`\014b\011\006\014\140\0154@\252\001\204\006x\000\000\011\b\015\b\015\n\006\164\006~\014\212\011$\015\014\007d\007\128\014\222\000\000\000\000\007\156\t\172\000\000\bz\003\196Y\238\006\184\031T\000\000\b\192\001\164\014\134\011(\006\234\t&\000\000\014\136\0118\t\012\000\000%t\000\000c\162\002\242\000\000\015:\015B\000\000\011$\000\000\002\242\014\148\011:\b\132\014\180\000~\000\000\000\000\000\000\000\000\011<\011h\000\000\011@\011\228\000\000\tX\004\156\014\152\014\154\011J\005\012\011\246\000\000\011x\006B\011\248\000\000\014\156\014\160\011\136\014\210\0154Cn\001\204\000\000\011\140\015H\000\000\006\138\011\254\000\000\015R\000\000D\160\002\168\015 \011\172\015X\000\000I|\003\246\015$\000\000\000\000\004\168\002\216\012<\000\000U\150\001\204\012V\000\000\005\220\000\000\014\194\011\188Y\208\004 \000\000\014\196\011\224\b\170\014\180\014\200\014\208\011\226\016R\000\000\014\228\002\184\000\000\000\000\000\000\000\000\000\173\011\254\014\182c\244\002\242\000\000\003\174\012\012\015\134\000\000\000\000\000\000\000\000\000\000\000\000d\006\005\192\000\000\012\014\015\230\000\000\000\000\000\000\000\000\000\000\000\000;$\012|\000\000\012\016\000\135\000\000\012\026\012B\007\248\000\000\000<\002\166\000\000\003\218\000\000dj\002\242\002\242\000\000\000\000\006\152\000\000\t\006\000\000\002\216\006\152\006\152\000\000\012J4F\002\242d\198\002\242\012\140\000\000\000\000\000\000\012\198\000\000\000\000\004\212\000\000\006\218\015J\012T\016\128\015\016\000\000\000\000\004\142\t0\015h\000\000\000\000\012l\016\140\015\028\000\000\000\000d\218\000\000\023\150\000\000e T*\002\242\000\000e*\026\004\000\000eh\000\000\000\000\000\000\006\152\000\000\000\000\012\208\015r\012p\016\154\015*\000\000\000\000e\224\012\224\015\128\000\000\000\000\000\000l\248\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\228\000\000\015\142\012\154\004^\000\000\016\142\016>\r\028\015\150\000\000\000\000\015\154\012\160\005\196\000\000\000\000\n\238S^\005\208\000\000\000\000\000\000\b\186\015R\012\182\000\000\015X\b\186\000\000\016T\rT\015\176\000\000\000\000\000\000\002\242\003\152\004.\006n\000\000\000\000\000\000\000\000\015d\012\186\000\000\007x\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\242\015H\012\188\016\200\015X\000\000\007\238\001\003\012\204\015*\003\198\002n\012\210\015\252\000\000\016\186 \018\000\000\000\000 F\000\000\rb\000\000\003\174\000\000\000\000\000\000\000\000\000\000\000\000f\030\002\242\000\000\016\194 \208\000\000\000\000!\004\000\000\0024\012\242\016^\000\000\000\000ZlB\178\016\016\000\000f\198\002\242!\194\000\000\000\000\"\128\000\000\000\000\r\130\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000[\\\000\000\000\000Z\226[\154\016\020\000\000f\222\002\242\"\180\000\000\000\000#>\000\000\000\000\r\004#r\r\166\000\000\r\016\r(\002\234\002\238\r0\t\030\r>\016n>\140\r\196\000\000\rB\rb\tz\000\000\004\218\\D\000\000\004L\000\000\rn.\140OD\005\206\0152\bN\000\000$|c\142\000\000\006\016\000\000\000\000\006\016\000\000\000\000\006\016\t\136\000\000\011\162\006\016\016t?\\\014\004\000\000\006\016\000\000fn\000\000\000\000\006\016\000\000\000\000\014\022\000\000\014\204\t\194\014\024\000\000\rp\\h\014\026\000\000\000\000\000\000\014$\000\000\000\000\006\174\000\000\006\016g0\000\000\017\\\006\016Z\b\000\000\014(\015\212\r\154\016\248\015\136\000\000a~\014*\015\224\000\000\000\000\000\000p\"\007\146\000\000\000\000\000\000\000\000\000\000\000\000\n@\0146\000\000\015\238\000\000\000\000\000\000\000\000\014RpT\000\000\000\000\000\000\n@\000\000\000\000\000\000\000\000\014Xp\204\000\000\000\000\000\000\000\000\0026\001\204\000\000p\162\000\000\000\000\006\184\000\000[Z\000\000\000\000\000\000g\148\002\242\000\000\000\000q \000\000\000\000\006\184\006\184\000\000g\166\002\242\000\000\007.\000\000\000\000m8\000\000\015\134\r\180?\150\000\000\nV\000\000T\180\000\000\000\000\016\236\000\000\000\000\000\000ml\000\000\015\138\r\188@\002\000\000\nV\000\000@n\000\000\000\000\000\000\000\000\000\000\016\140\000x\tZ\015R\000\162\r\222\000\000\000\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015d\001\156\r\226\000\000\007\248\016\250\016\170\014`\000\000\000\000\016\150\002\160\000\220\000\000\000\000\000\000\r\236\000\000\r\246\001h\000\000\000\000\006\164\0158\000\000\000\000\000\000\000\000\000\000q\002\000\000\006\164\024\234\000\000q`\000\000\000\000\b&\004\206\000\000\000\000g\248\002\242\002\242h\n\002\242\bl\000\000\000\000\000\000\002\242\000\000\000\000\011*\016\174\014\128\000\000\000\000\016\154\004\224\004@\000\000\000\000\000\000\000\000\b\236\016\250\012\018\016\180\014\148\000\000\000\000\016\164\b*\005(\000\000\000\000\000\000\001\204\000\000\014\152\000\000\000\000\000\000$0\000\000$\238\000\000\000\000\000\000\000\000\000\000\\\200\000\000\000\000\000\000\000\240\000(\000\000\000\000\000\000\000\000\000\000\007\002\000(\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\173\000\000\000\000\000\000]\016\000\000\002\242\000\000\012\144\000\000\000\000\000\000\000\196\000\000\000\000\000\000\000g\000\000\000\000\000\000\001\160\000\000\0026\000\000\006@\000\000\001\204\000\000\000}\000\000\000\000\000\000\023\148\006\184\000\000\000\000\000\019\000\000\000\000\000\000\000\000\005@\015\208\006r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011~\000\000\014\226\000\000\000\000\000\000\000\000\005\218\007\1921\242G0\000\000\000\000\014\238m\242\000\000\000\000\000\000\014\254m\244\000\000\000\000\000\000\000\000"), (16, "\007\167\000\213\002\194\002\181\001\161\000n\001\161\001i\002\157\000<\001m\001n\004<\b\167\002\181\001\161\b\131\0038\007\168\007\183\002\157\007\170\000\199\007:\000\146\003>\bQ\002w\000\205\000\208\007\171\007\184\000\146\b\159\000\156\002w\000\213\007\200\007g\000\214\002\168\005@\007\167\001m\002\194\002\181\001\161\b\147\000\201\005\181\005\246\000\199\002\168\001m\000\205\001m\003S\000\205\000\208\0038\007\168\007\183\bd\007\170\007\172\b\160\000\146\003>\007\187\000\151\000\199\004\028\007\171\007\184\bI\002~\000\205\000\208\0008\002\130\007i\000\205\b\t\001i\b\169\b\148\001m\001\143\001m\007>\001i\000\219\0008\001m\001\143\001\144\007j\001\167\003S\007\173\000\152\007l\002\016\005C\003c\007\149\007\172\000\209\000\220\007\174\007\187\000\216\0008\002\169\000\205\000\223\002\197\b*\002\185\001m\000@\b\n\004\028\006p\001\146\002\169\000\219\b\170\002\131\002\185\001m\001\146\b\132\007\188\001\188\b\011\006q\000k\b\b\001\012\006\136\007\173\006p\000\220\bt\004\029\003c\000Z\007\189\000\205\000\223\007\174\001\249\001\161\000\146\006q\b\020\002w\002\197\006x\002\185\001m\002z\0008\003\031\003&\007\177\000\199\002\194\002\181\001\161\007\179\002~\000\205\000\208\007\188\002\130\000\225\000\205\003h\000\226\000\199\003i\000\227\000\228\007\181\002b\000\205\000\223\003'\007\189\004\158\002\180\002\181\001\161\004<\005\019\b\143\003w\005\246\001\188\003)\001m\007\182\000\253\000^\003\031\003&\007\177\b&\000\213\000A\000\225\007\179\004\159\000\226\bb\005\246\000\227\000\228\001m\003h\003y\bu\003i\002\131\000\146\007\181\000\178\002w\007\167\003'\002\194\002\181\001\161\b\144\002\194\002\181\001\161\006p\003w\000\205\001\188\003)\000\232\007\182\000b\0038\007\168\007\183\000\128\007\170\006q\b\012\b\r\003>\006r\bv\007\253\0034\007\171\007\184\b}\000\205\003y\b\029\000\213\b\014\b\015\b,\002\196\001\168\007\167\000;\002\194\002\181\001\161\000v\001\028\b\016\005u\005\249\002\197\001\188\002\185\001m\003S\000:\001\012\0038\007\168\bi\001i\007\170\007\172\001m\001\143\003>\007\187\b\006\000\219\001\188\007\171\007\184\b\n\b\151\002\182\000>\002\185\001m\b~\000}\002\157\002\155\002\137\004<\004\179\000\220\b\011\001m\001\143\002\147\004\161\000\205\000\223\000\131\b%\001\012\003S\007\173\003\031\003&\007\016\002k\003c\001\031\007\172\000\127\002\196\007\174\b\127\b\152\005\246\0008\002\168\001m\002\197\001m\002\185\001m\002\197\000\133\002\185\001m\000\199\003'\000\219\004\190\000\171\b\128\000\205\000\208\000\150\007\188\003(\002b\001\188\003)\002\148\000\213\000\149\007\173\000\214\000\220\000\146\002\157\003c\000\151\007\189\000\205\000\223\007\174\0031\002\181\001\161\006\018\000\225\002\166\002\197\000\226\002\185\001m\000\227\000\228\003\031\003&\007\177\0035\003\031\003&\006j\007\179\001\012\000\146\002\161\007\188\000\155\002\168\006@\003h\001m\000\180\003i\005Q\b\028\007\181\004<\002\169\b&\003'\007\189\002\157\000\175\003'\b\018\004<\001\188\0073\003w\000\181\001\188\003)\003(\007\182\001\188\003)\003\031\003&\007\177\000\238\0075\bk\000\225\007\179\000\216\000\226\007\190\005\017\000\227\000\228\002\170\003h\003y\002\168\003i\002\141\001m\007\181\001m\000\219\007\167\003'\002\194\002\181\001\161\002}\005\\\005^\005`\007\018\003w\004<\001\188\003)\b/\007\182\000\220\0038\007\168\007\183\002\169\007\170\000\205\000\223\004z\003>\007\255\001m\001\143\007\023\007\171\007\184\002d\002\137\003y\006\029\0032\000\134\002\185\001m\006(\000\199\007\167\001m\002\194\002\181\001\161\000\205\000\208\001i\000\185\001i\001m\001n\001m\001n\003S\001\012\002\167\0038\007\168\007\183\001%\007\170\007\172\004\151\002\169\003>\b\030\b\012\b\r\001i\007\171\007\184\001m\001\143\002\157\000\224\000\183\006\219\007g\004>\007g\b\014\b\015\000\225\001\012\000\146\000\226\002j\002w\000\227\000\228\006o\000\193\b\016\005u\000\213\003S\007\173\000\214\000\196\005Q\000\254\003c\002\158\007\172\002\157\002\168\007\174\007\192\001m\005\018\006p\001\012\002}\002\197\000\232\002\185\001m\000\247\000\212\007i\000\255\007i\000\146\006q\006\197\002w\001\025\006w\001i\004<\007\188\001m\001n\002\206\007\027\007j\002\168\007j\007\173\001m\007l\000\251\007l\003c\007\129\007\189\007|\006\183\007\174\000\231\004<\006\219\005_\005^\005`\002\197\000\250\002\185\001m\002\143\006\129\003\031\003&\007\177\004<\000\205\004<\000\199\007\179\000\216\001\007\007\142\007\188\000\205\000\208\006\184\003h\006\185\002\169\003i\002\184\001\161\007\181\002\166\000\219\001\030\003'\007\189\001\004\001+\006\226\006\227\0008\0011\006\131\003w\002\146\001\188\003)\006#\007\182\000\220\000\205\003\031\003&\007\177\007\144\000\205\000\223\002\169\007\179\006\186\006\243\006\133\0049\001\161\006\236\005u\003h\003y\0064\003i\001o\001i\007\181\007\146\001m\001n\003'\007\167\007\225\002\194\002\181\001\161\005\182\006\134\bM\003w\bL\001\188\003)\001L\007\182\b\181\b\182\006\187\0038\b\184\002F\001\161\007\170\002\157\006l\007\147\003>\006\188\006\189\000\199\006\190\007\171\b\186\003y\000\224\000\205\000\208\006\226\006\227\006,\001\162\002\213\000\225\001\164\001\165\000\226\000\176\bN\000\227\000\228\001\016\002}\0053\006\248\004<\002\168\005\022\003S\001m\006\235\000\186\000\199\b\000\006\236\005u\007\172\001i\000\205\000\208\001m\001n\002\023\002}\000\146\000\232\006\207\002w\000\247\007\167\006\135\002\194\002\181\001\161\b\201\001P\006\192\002\167\004\247\002\028\007b\006\194\006\204\006\005\b\193\001\015\0038\b\194\007g\000\205\007\170\007\173\006p\006.\003>\006\246\003c\002\157\001\011\007\171\b\202\007\174\005D\005\183\006\131\006q\004<\002\157\002\197\006\144\002\185\001m\001\197\006\247\001\012\b[\004<\bO\bP\002\169\001`\004<\b\189\006\133\001\170\003S\005;\001m\001\012\002\168\007i\001i\001m\007\172\001m\001\143\005?\b7\001\r\002\168\007\189\001f\001m\006\236\005u\006\134\007j\b\178\002\181\001\161\003\129\007l\004\250\004\255\bN\007s\003\031\003&\007\177\002\029\000\199\002\030\001\012\007\179\005C\0012\000\205\000\223\007\173\002b\005Q\003h\005\018\003c\003i\001\012\004=\007\181\007\174\001i\000\239\003'\001m\001n\006/\002\197\005{\002\185\001m\007\132\003w\006U\001\188\003)\001u\007\182\b\155\001\186\b\206\005M\005u\007\167\002\169\002\194\002\181\001\161\001\218\001M\001\188\001\168\007g\001V\002\169\004<\003y\001\012\004<\007\189\0038\007\168\007\198\b{\007\170\006\212\005^\005`\003>\002f\001\149\004<\b\156\007\171\007\184\003\031\003&\007\177\001Y\002~\006\t\001\156\007\179\002\130\001\012\000\205\000\205\001a\002\157\006.\003h\005Q\000\213\003i\007i\000\214\007\181\002\011\000\254\003S\003'\001d\001\152\b\179\004<\002\185\001m\007\172\002\157\003w\007j\001\188\003)\000\231\007\182\007l\006\023\005\141\000\255\007p\002\168\001g\000\205\001m\001\023\005\195\001\012\005\200\005\201\000\199\001\012\002\157\002\131\003y\001v\000\205\000\223\005\185\002\132\002\137\002\168\006y\007\173\001m\006\232\005^\005`\003c\007\148\001\153\001\191\002\138\007\174\007n\007\167\001\012\002\194\002\181\001\161\002\197\005\223\002\185\001m\002\168\001\012\002W\001m\000\216\002Y\b\193\002\t\0038\b\194\002a\006\137\007\170\007\188\000\213\001\012\003>\001\160\001\161\000\219\007\144\007\171\b\197\001\004\004<\000\199\005C\001\190\007\189\b\025\002\169\000\205\000\223\001\160\001\161\001\012\000\220\001\162\002\252\007\146\001\164\001\165\000\205\000\223\003\031\003&\007\177\003S\001\012\007\226\002\169\007\179\b8\001\162\002\252\007\172\001\164\001\165\006s\003h\005\205\005Q\003i\001\012\001\012\007\181\b|\007\147\007\167\003'\002\194\002\181\001\161\002\169\001\201\002\189\002\192\002\205\003w\001\012\001\188\003)\001\012\007\182\007\144\0038\007\168\001\012\005\210\007\170\007\173\006s\001\223\003>\005\206\003c\001\222\000\224\007\171\007\194\007\174\bZ\003y\007\146\000\219\000\225\0008\002\197\000\226\002\185\001m\000\227\000\228\001\016\006\240\005^\005`\002\015\001\169\002\027\b\200\000\220\005C\002\225\003S\002\228\002L\000\205\000\223\004<\001\170\007\147\007\172\001m\001\169\006g\000\199\000\232\001m\007\189\000\247\0008\000\205\000\223\002\234\002Q\001\170\005}\002\166\001m\005C\bW\001\012\001\012\001\012\003\031\003&\007\177\005v\000\199\005\228\001\161\007\179\0051\003\007\000\205\000\223\007\173\002V\007\154\003h\000\213\003c\003i\000\214\003\024\007\181\007\174\001i\003\029\003'\001m\001n\005Q\002\197\002\254\002\185\001m\0008\003w\000\225\001\188\003)\000\226\007\182\006\183\000\227\000\228\003;\005\186\001\012\007\197\001\012\001\186\003O\000\213\003_\005T\000\214\007g\003m\002\255\001\187\003y\001\188\001\168\007\189\bO\bP\001\186\003s\001\012\000\236\006\184\006\249\006\185\007\156\b \001\187\002\\\001\188\001\168\003\031\003&\007\177\004<\b?\005^\005`\007\179\004<\001\012\000\213\006\236\005u\000\214\000\216\003h\003|\003\135\003i\007i\001\012\007\181\002\166\002c\001\012\003'\000\199\006\186\003\141\000\219\002p\003\147\000\205\000\223\003w\007j\001\188\003)\006u\007\182\007l\001m\003\153\001\012\007m\002r\000\220\002\167\000\216\001\012\002\129\001\012\000\205\000\223\002\150\001\012\005\243\005u\003y\006\219\003\159\006\187\003\165\000\219\005,\001\012\002\194\002\181\001\161\005\213\004<\006\188\006\189\005\224\006\190\0068\005u\005(\006\145\002\188\000\220\0038\003\171\006\216\005u\000\216\000\205\000\223\003\177\003>\003\183\002\191\003\189\001\012\001\012\005\146\007]\006\250\003\195\001m\000\219\bD\002\204\007u\005\219\001\012\001m\000\224\001\012\007\136\003\201\003\207\002\224\003\213\003\219\000\225\002\227\000\220\000\226\001\012\003S\000\227\000\228\000\205\000\223\002\233\003\225\000\213\003\231\006\192\000\214\002\194\002\181\001\161\006\194\006\204\003\237\001\012\003\251\001\012\005\211\000\224\004\001\004\005\002\245\004I\0038\000\232\006\246\000\225\005[\007U\000\226\002\167\003>\000\227\000\228\006\251\006s\001\012\005\001\000k\004R\b\004\005u\001\012\006\247\001\012\003c\001\012\002\242\002\248\004[\006\226\006\227\001\012\000\213\004e\000\224\000\214\002\197\000\232\002\185\001m\000\247\003S\000\225\001\012\001\012\000\226\001\012\001\012\000\227\000\228\006\228\006\244\004n\004w\004\130\006\236\005u\004\139\000\216\001\012\003\003\001\012\000\213\004\148\004\155\000\214\004\193\004\209\003e\001\012\004\214\001\012\003\006\000\219\000\232\001\012\001\012\000\247\001\012\004\221\004\243\006\219\000k\005%\003\031\003&\0052\007n\003\r\003c\000\220\0058\003\023\005G\007\167\001\012\000\205\000\223\003\028\003h\005X\002\197\003i\002\185\001m\001\012\003 \000\216\0037\003'\001\012\006\219\b\184\005Z\004<\007\170\003.\003:\003w\003B\001\188\003)\000\219\006\222\007\171\005r\003N\005w\005\131\001\012\001\012\001\012\005\140\003e\001\012\005\158\005\184\000\216\003X\000\220\001\012\001\012\003y\001\012\001\012\000\205\000\223\001\012\004<\003\031\003&\000\224\000\219\bF\003^\004?\001\012\001\012\007\172\000\225\001\012\003v\000\226\001\012\003h\000\227\000\228\003i\001\012\000\220\001\012\003l\005\190\005\197\003'\000\205\000\223\001\012\000\213\003r\003{\000\214\003\134\003w\005\238\001\188\003)\005\203\003\140\005\222\001\012\000\232\003\146\007\173\001\n\006\226\006\227\005\227\005\242\005\250\000\224\005\253\001\012\007\174\001\012\001\012\006\004\003y\000\225\001\012\004<\000\226\001\012\001\012\000\227\000\228\006\228\006\244\005\251\004<\004<\006\236\005u\004<\b\185\006\226\006\227\006\219\001i\006\b\000\224\001m\001n\002\194\002\181\001\161\003\152\006\014\000\225\006\020\000\232\000\226\007\176\000\247\000\227\000\228\006\228\006\244\0038\001\012\001\012\006\236\005u\000\216\004<\006\031\003>\002b\000\213\007g\007\177\000\214\b\139\0062\001\012\007\179\001\012\004<\000\219\bT\000\232\003\158\003\164\000\247\001\012\001\012\001\012\003\170\001\012\007\181\005\254\0067\006<\001\012\003\176\000\220\004<\003S\003\182\006\006\006\n\000\205\000\223\006\024\004<\003\188\006F\007\182\002\194\002\181\001\161\007i\003\194\006L\006W\006b\001\012\006\219\003\200\003\206\006t\b\141\003\212\0038\001\012\002f\001\012\007j\002\151\003\218\002\\\003>\007l\004<\006)\002~\007w\007\250\004<\002\130\006f\000\205\001\012\000\216\006{\003c\004<\006-\004<\006\139\001\012\006\226\006\227\003\224\003\230\003\236\000\224\002\197\000\219\002\185\001m\006\149\003S\006\174\000\225\003\244\006`\000\226\001\012\001\012\000\227\000\228\006\228\006\244\006\128\000\220\004<\006\236\005u\003\250\004\000\000\205\000\223\001\012\006\196\006\183\004\011\006\206\002\131\003e\001\012\001\012\001\012\004\018\002\132\002\137\000\232\001\012\006\218\000\247\006\238\006\254\004H\006\132\004<\003\031\003&\002\138\006\172\007\004\003c\004<\007\b\006\184\b\\\006\185\006\180\001\012\006\193\004Q\003h\001\012\002\197\003i\002\185\001m\001\012\004<\007$\004Z\003'\006\226\006\227\002\194\002\181\001\161\000\224\007L\001\012\003w\001\012\001\188\003)\007\134\000\225\004<\006\201\000\226\0038\006\186\000\227\000\228\bB\bC\003e\007Q\003>\006\236\005u\007x\004<\001\012\005\153\003y\001\012\002b\007V\004d\007t\000\213\003\031\003&\000\214\004m\006\224\001\012\000\232\001\012\001\012\000\247\004v\007\017\004\129\006\187\007\\\003h\001\012\003S\003i\001\012\007d\007\139\004<\006\188\006\189\003'\006\190\0074\002\194\002\181\001\161\004<\004<\004<\003w\001\012\001\188\003)\004<\004\138\004<\004<\007\159\0038\001\012\007N\004\147\004<\004\154\006\250\001\012\003>\004\166\002f\004\192\007\232\b^\005\150\003y\007\247\007Y\004<\001\012\002~\004<\003c\001\012\002\130\004<\000\205\002\194\002\181\001\161\001\012\000\216\001\012\b\007\002\197\b\019\002\185\001m\006\192\003S\b!\004<\0038\006\194\006\204\b#\000\219\004\208\001\012\007{\003>\004<\004\213\004<\001\012\001\012\005|\006\246\007\133\007\137\007\141\004\220\004\236\000\220\004\242\007\145\003e\007\157\007\164\000\205\000\223\005\012\005\020\002\131\007\178\006\247\001\012\005$\000\213\002\132\002\137\003S\003\031\003&\005*\001\160\001\161\003c\007\185\001\012\004<\007\195\002\138\001\012\0057\b\024\004<\003h\0059\002\197\003i\002\185\001m\005F\004<\001\162\001\193\003'\001\164\001\165\001\012\bH\001\012\002\194\002\181\001\161\003w\001\012\001\188\003)\005q\bV\001\012\ba\000\252\005y\005\130\004\204\0038\003c\001i\003e\000\225\001m\001n\000\226\003>\001\198\000\227\000\228\003y\002\197\0050\002\185\001m\005\139\005\148\003\031\003&\005\157\005\196\005\189\005\191\001\199\002\230\005\194\005\209\005\199\005\208\005\204\b\187\007g\003h\005\207\000\232\003i\b\198\003S\000\219\005\221\005\226\005\237\003'\003e\b\203\005\236\005\241\005\252\006\007\006\003\006\019\003w\006\r\001\188\003)\000\220\001\197\006\015\006&\003\031\003&\000\205\000\223\006\026\b(\006%\006 \006$\001\170\0061\0066\001m\006\148\007i\003h\003y\006;\003i\006>\003=\006B\006J\006Q\000\213\003'\003c\000\214\006\\\006\147\007j\002\194\002\181\001\161\003w\007l\001\188\003)\002\197\007\135\002\185\001m\006\140\006\141\006\146\001\202\0038\001\203\006\150\006\151\006\182\002\194\002\181\001\161\003>\006\175\006\176\006\181\003y\006\203\005\031\006\199\006\200\006\202\006\245\000\225\0038\006\217\000\226\006\221\003e\000\227\000\228\006\223\003>\006\225\006\237\006\253\006\255\007\000\004\246\007\005\001\186\007\t\007\r\003S\003\031\003&\007\031\007&\007*\001\218\007B\001\188\001\168\007W\007o\b&\007y\000\216\007\166\003h\007\160\007\161\003i\003S\007\165\007\180\007\231\007\240\007\246\003'\b\002\002b\000\219\b\022\b\023\b\027\bG\bK\003w\bU\001\188\003)\bY\b\173\000\000\000\000\000\000\000\000\000\000\000\220\000\000\003c\000\000\000\000\000\000\000\205\000\223\000\000\000\000\002\194\002\181\001\161\003y\002\197\000\000\002\185\001m\000\000\000\000\000\000\000\000\003c\000\000\000\000\0038\000\000\000\000\000\000\000\000\002\194\002\181\001\161\003>\002\197\000\000\002\185\001m\000\000\004\205\002f\000\000\000\000\007\201\000\000\0038\003e\000\000\000\000\000\000\002~\000\000\000\000\003>\002\130\000\000\000\205\000\000\000\000\004\197\000\000\000\224\003\031\003&\003S\000\000\003e\000\000\000\000\000\225\001\160\001\161\000\226\000\000\000\000\000\227\000\228\003h\000\000\000\000\003i\000\000\003\031\003&\003S\000\000\000\000\003'\000\000\000\000\001\162\002\252\000\000\001\164\001\165\000\000\003w\003h\001\188\003)\003i\000\232\000\000\002\131\002o\000\000\000\000\003'\000\000\002\132\002\137\000\000\003c\000\000\000\000\000\000\003w\002\253\001\188\003)\003y\000\000\002\138\000\000\002\197\000\000\002\185\001m\000\000\000\000\000\000\000\000\003c\000\000\000\000\002\194\002\181\001\161\001i\000\000\003y\001m\001n\000\000\002\197\000\000\002\185\001m\000\000\000\000\0038\000\000\000\000\000\000\000\000\000\000\003e\000\000\003>\000\000\000\000\000\000\002\194\002\181\001\161\000\000\000\000\000\000\000\000\007g\000\000\001\169\003\031\003&\000\000\000\000\003e\0038\000\000\000\000\000\000\000\000\000\000\001\170\000\000\003>\001m\003h\000\000\003S\003i\004\171\003\031\003&\000\000\000\000\000\000\003'\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003w\003h\001\188\003)\003i\007i\000\000\000\000\000\000\000\000\003S\003'\000\000\001\160\001\161\000\000\002\254\000\000\000\000\000\000\003w\007j\001\188\003)\003y\000\000\007l\000\000\000\000\000\000\007\153\003c\000\000\001\162\001\193\000\000\001\164\001\165\000\000\000\000\000\000\003\000\004!\002\197\003y\002\185\001m\000\000\000\000\000\000\001\186\002\194\002\181\001\161\000\000\003\b\000\000\000\000\003c\001\187\000\000\001\188\001\168\000\000\000\000\001\198\0038\000\000\000\000\000\000\002\197\000\000\002\185\001m\003>\003e\000\213\000\000\000\000\000\214\004\163\001\199\002\230\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\031\003&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003e\000\000\000\000\003S\004\031\000\000\000\000\003i\004\196\000\000\005T\000\000\001\197\000\000\003'\000\000\003\031\003&\000\000\000\000\000\000\000\000\000\000\003w\001\170\001\188\003)\001m\000\000\000\000\005W\003h\000\000\000\000\003i\003=\000\000\000\000\000\000\000\000\000\000\003'\000\000\000\000\002\194\002\181\001\161\003y\000\000\000\216\003w\003c\001\188\003)\000\000\000\000\000\000\000\000\000\000\0038\001\202\000\000\001\203\002\197\000\219\002\185\001m\003>\000\000\000\000\002\194\002\181\001\161\003g\003y\000\000\000\000\000\000\000\000\000\000\000\000\000\220\000\000\000\000\000\000\0038\000\000\000\205\000\223\000\000\000\000\000\000\000\000\003>\000\000\003e\000\000\001\186\003S\003\131\000\000\000\000\000\000\000\000\000\000\000\000\001\218\000\000\001\188\001\168\000\000\003\031\003&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003S\000\000\003h\000\000\000\000\003i\000\000\000\000\000\000\000\000\000\000\000\000\003'\000\000\000\000\002\194\002\181\001\161\000\224\000\000\000\000\003w\003c\001\188\003)\000\000\000\225\000\000\000\000\000\226\0038\000\000\000\227\000\228\002\197\000\000\002\185\001m\003>\000\000\000\000\002\194\002\181\001\161\003\130\003y\000\000\000\000\003c\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0038\000\000\000\232\000\000\002\197\005[\002\185\001m\003>\000\000\003e\000\000\000\000\003S\004\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\160\001\161\000\000\000\000\003\031\003&\000\000\000\000\000\213\000\000\000\000\000\217\000\000\000\000\003e\000\000\000\000\003S\000\000\003h\001\162\001\193\003i\001\164\001\165\000\000\000\000\000\000\000\000\003'\003\031\003&\000\000\000\000\000\000\000\000\000\000\000\000\003w\003c\001\188\003)\000\000\000\000\000\000\003h\000\000\000\000\003i\000\000\000\000\002\197\001\198\002\185\001m\003'\000\000\000\000\002\194\002\181\001\161\000\000\003y\000\000\003w\003c\001\188\003)\001\199\001\229\000\000\000\000\000\000\0038\000\000\000\000\000\000\002\197\000\000\002\185\001m\003>\000\000\003e\002b\000\000\000\000\004\015\003y\000\000\000\000\000\000\000\000\000\000\000k\000\000\000\000\000\000\000\219\003\031\003&\001\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003e\000\000\000\000\003S\001\170\003h\000\220\001m\003i\000\000\000\000\000\000\000\205\000\223\000\000\003'\003\031\003&\000\000\000\000\000\000\000\000\000\000\000\000\003w\000\000\001\188\003)\000\000\000\000\000\000\003h\000\000\002f\003i\000\000\002\153\000\000\000\000\000\000\001\202\003'\001\203\002~\002\194\002\181\001\161\002\130\003y\000\205\003w\003c\001\188\003)\000\000\000\000\000\000\000\000\000\000\0038\000\000\000\000\000\000\002\197\000\000\002\185\001m\003>\000\000\000\213\002\194\002\181\001\161\004\022\003y\000\225\000\000\001\186\000\226\000\000\000\000\000\227\000\228\000\000\000\000\0038\001\218\000\000\001\188\001\168\000\000\000\000\000\000\003>\000\000\003e\002\131\000\240\003S\004\025\000\000\000\000\002\132\002\137\000\000\000\000\000\000\000\232\000\000\000\000\000\000\003\031\003&\000\000\000\000\002\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003S\000\000\003h\000\000\000\000\003i\000\000\000\000\000\000\000\000\000\000\000\000\003'\000\000\000\000\002\194\002\181\001\161\000\000\000\000\000\000\003w\003c\001\188\003)\000\000\000\000\000\000\000\000\000\000\0038\000\000\000\000\000\000\002\197\000\219\002\185\001m\003>\000\000\000\000\002\194\002\181\001\161\000\000\003y\000\000\000\000\003c\000\000\000\000\000\000\000\220\000\000\000\000\000\000\0038\000\000\000\205\000\223\002\197\000\000\002\185\001m\003>\000\000\003e\000\000\000\000\003S\004&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\160\001\161\000\000\000\000\003\031\003&\000\000\000\000\000\213\000\000\000\000\006\156\000\000\000\000\003e\000\000\000\000\003S\000\000\003h\001\162\001\193\003i\001\164\001\165\000\000\000\000\000\000\000\000\003'\003\031\003&\000\000\000\000\000\000\000\000\000\000\000\000\003w\003c\001\188\003)\000\000\000\225\000\000\003h\000\226\000\000\003i\000\227\000\228\002\197\001\198\002\185\001m\003'\000\000\000\000\002\194\002\181\001\161\000\000\003y\000\000\003w\003c\001\188\003)\001\199\b\163\000\000\b\165\000\000\0038\000\000\000\246\000\000\002\197\000\000\002\185\001m\003>\000\000\003e\002b\000\000\000\000\004)\003y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\219\003\031\003&\001\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003e\000\000\000\000\003S\001\170\004\031\000\220\001m\003i\004 \000\000\000\000\000\205\000\223\000\000\003'\003\031\003&\000\000\000\000\000\000\000\000\000\000\000\000\003w\000\000\001\188\003)\000\000\000\000\000\000\003h\000\000\002f\003i\000\000\002g\000\000\000\000\000\000\001\202\003'\001\203\002~\002\194\002\181\001\161\002\130\003y\000\205\003w\003c\001\188\003)\000\000\000\000\000\000\000\000\000\000\0038\000\000\000\000\000\000\002\197\000\000\002\185\001m\003>\000\000\000\213\002\194\002\181\001\161\004`\003y\000\225\000\000\001\186\000\226\000\000\000\000\000\227\000\228\000\000\000\000\0038\001\218\000\000\001\188\001\168\000\000\000\000\000\000\003>\000\000\003e\002\131\b1\003S\004i\000\000\000\000\002\132\002\137\000\000\000\000\000\000\000\232\000\000\000\000\000\000\003\031\003&\000\000\000\000\002\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003S\000\000\003h\000\000\000\000\003i\000\000\000\000\000\000\000\000\000\000\000\000\003'\000\000\000\000\002\194\002\181\001\161\000\000\000\000\000\000\003w\003c\001\188\003)\000\000\000\000\000\000\000\000\000\000\0038\000\000\000\000\000\000\002\197\000\219\002\185\001m\003>\000\000\000\000\002\194\002\181\001\161\004r\003y\000\000\000\000\003c\000\000\000\000\000\000\000\220\000\000\000\000\000\000\0038\000\000\000\205\000\223\002\197\000\000\002\185\001m\003>\000\000\003e\000\000\000\000\003S\004\167\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\160\001\161\000\000\000\000\003\031\003&\000\000\000\000\000\213\000\000\000\000\006\163\000\000\000\000\003e\000\000\000\000\003S\000\000\003h\001\162\001\193\003i\001\164\001\165\000\000\000\000\000\000\000\000\003'\003\031\003&\000\000\000\000\000\000\000\000\000\000\000\000\003w\003c\001\188\003)\000\000\000\225\000\000\003h\000\226\000\000\003i\000\227\000\228\002\197\001\198\002\185\001m\003'\000\000\000\000\002\194\002\181\001\161\000\000\003y\000\000\003w\003c\001\188\003)\001\199\007\220\000\000\000\000\000\000\0038\000\000\000\246\000\000\002\197\000\000\002\185\001m\003>\000\000\003e\002b\000\000\000\000\004\169\003y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\219\003\031\003&\001\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003e\000\000\000\000\003S\001\170\003h\000\220\001m\003i\000\000\000\000\000\000\000\205\000\223\000\000\003'\003\031\003&\000\000\000\000\000\000\000\000\000\000\000\000\003w\000\000\001\188\003)\000\000\000\000\000\000\003h\000\000\002f\003i\000\000\002|\000\000\000\000\000\000\001\202\003'\001\203\002~\002\194\002\181\001\161\002\130\003y\000\205\003w\003c\001\188\003)\000\000\000\000\000\000\000\000\000\000\0038\000\000\000\000\000\000\002\197\000\000\002\185\001m\003>\000\000\000\213\002\194\002\181\001\161\004\174\003y\000\225\000\000\001\186\000\226\000\000\000\000\000\227\000\228\000\000\000\000\0038\001\218\000\000\001\188\001\168\000\000\000\000\000\000\003>\000\000\003e\002\131\000\000\003S\004\177\000\000\000\000\002\132\002\137\000\000\000\000\000\000\000\232\000\000\000\000\000\000\003\031\003&\000\000\000\000\002\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003S\000\000\003h\000\000\000\000\003i\000\000\000\000\000\000\000\000\000\000\000\000\003'\000\000\000\000\002\194\002\181\001\161\000\000\000\000\000\000\003w\003c\001\188\003)\000\000\000\000\000\000\000\000\000\000\0038\000\000\000\000\000\000\002\197\000\219\002\185\001m\003>\000\000\000\000\002\194\002\181\001\161\004\199\003y\000\000\000\000\003c\000\000\000\000\000\000\000\220\000\000\000\000\000\000\0038\000\000\000\205\000\223\002\197\000\000\002\185\001m\003>\000\000\003e\000\000\000\000\003S\004\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\160\001\161\000\000\000\000\003\031\003&\000\000\000\000\000\213\000\000\000\000\000\000\000\000\000\000\003e\000\000\000\000\003S\000\000\003h\001\162\001\193\003i\001\164\001\165\000\000\000\000\000\000\000\000\003'\003\031\003&\000\000\000\000\000\000\000\000\000\000\000\000\003w\003c\001\188\003)\000\000\000\225\000\000\003h\000\226\000\000\003i\000\227\000\228\002\197\001\198\002\185\001m\003'\000\000\000\000\002\194\002\181\001\161\000\000\003y\000\000\003w\003c\001\188\003)\001\199\007\206\000\000\000\000\000\000\0038\000\000\000\245\000\000\002\197\000\000\002\185\001m\003>\000\000\003e\002b\000\000\000\000\004\249\003y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\219\003\031\003&\001\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003e\000\000\000\000\003S\001\170\003h\000\220\001m\003i\000\000\000\000\000\000\000\205\000\223\000\000\003'\003\031\003&\000\000\000\000\000\000\000\000\000\000\000\000\003w\000\000\001\188\003)\000\000\000\000\000\000\003h\000\000\002f\003i\000\000\002\134\000\000\000\000\000\000\001\202\003'\001\203\002~\002\194\002\181\001\161\002\130\003y\000\205\003w\003c\001\188\003)\000\000\000\000\000\000\000\000\000\000\0038\000\000\000\000\000\000\002\197\000\000\002\185\001m\003>\000\000\000\000\002\194\002\181\001\161\004\252\003y\000\225\000\000\001\186\000\226\000\000\000\000\000\227\000\228\000\000\000\000\0038\001\218\000\000\001\188\001\168\000\000\000\000\000\000\003>\000\000\003e\002\131\000\000\003S\0055\000\000\000\000\002\132\002\137\000\000\000\000\000\000\000\244\000\000\000\000\000\000\003\031\003&\000\000\000\000\002\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003S\000\000\003h\000\000\000\000\003i\000\000\000\000\000\000\000\000\000\000\000\000\003'\000\000\000\000\002\194\002\181\001\161\000\000\000\000\000\000\003w\003c\001\188\003)\000\000\000\000\000\000\000\000\000\000\0038\000\000\000\000\000\000\002\197\000\000\002\185\001m\003>\000\000\000\000\002\194\002\181\001\161\005B\003y\000\000\000\000\003c\000\000\000\000\000\000\000\000\002b\000\000\000\000\0038\000\000\000\000\000\000\002\197\000\000\002\185\001m\003>\000\000\003e\000\000\000\000\003S\005t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\160\001\161\000\000\000\000\003\031\003&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003e\000\000\000\000\003S\000\000\003h\001\162\001\193\003i\001\164\001\165\000\000\000\000\000\000\000\000\003'\003\031\003&\000\000\002f\000\000\000\000\002\136\000\000\003w\003c\001\188\003)\000\000\002~\000\000\003h\000\000\002\130\003i\000\205\000\000\002\197\001\198\002\185\001m\003'\000\000\000\000\002\194\002\181\001\161\000\000\003y\000\000\003w\003c\001\188\003)\001\199\002\n\000\000\000\000\000\000\0038\000\000\000\000\000\000\002\197\000\000\002\185\001m\003>\000\000\003e\002b\000\000\000\000\005\217\003y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\131\000\000\000\000\003\031\003&\001\197\002\132\002\137\000\000\000\000\000\000\000\000\000\000\003e\000\000\000\000\003S\001\170\003h\002\138\001m\003i\000\000\000\000\000\000\000\000\000\000\000\000\003'\003\031\003&\000\000\000\000\000\000\000\000\000\000\000\000\003w\000\000\001\188\003)\000\000\000\000\000\000\003h\000\000\002f\003i\000\000\002\140\000\000\000\000\000\000\001\202\003'\001\203\002~\002\194\002\181\001\161\002\130\003y\000\205\003w\003c\001\188\003)\000\000\000\000\000\000\000\000\000\000\0038\000\000\000\000\000\000\002\197\000\000\002\185\001m\003>\000\000\000\000\002\194\002\181\001\161\007\012\003y\000\000\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0038\001\218\000\000\001\188\001\168\000\000\000\000\000\000\003>\000\000\003e\002\131\000\000\003S\007\015\000\000\000\000\002\132\002\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\031\003&\000\000\000\000\002\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003S\000\000\003h\000\000\000\000\003i\000\000\000\000\000\000\000\000\000\000\000\000\003'\000\000\000\000\002\194\002\181\001\161\000\000\000\000\000\000\003w\003c\001\188\003)\000\000\000\000\000\000\000\000\000\000\0038\000\000\000\000\000\000\002\197\000\000\002\185\001m\003>\000\000\000\000\002\194\002\181\001\161\007\030\003y\000\000\000\000\003c\000\000\000\000\000\000\000\000\002b\000\000\000\000\0038\000\000\000\000\000\000\002\197\000\000\002\185\001m\003>\000\000\003e\000\000\000\000\003S\007!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\160\001\161\000\000\000\000\003\031\003&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003e\000\000\000\000\003S\000\000\003h\001\162\001\193\003i\001\164\001\165\000\000\000\000\000\000\000\000\003'\003\031\003&\000\000\002f\000\000\000\000\002\164\000\000\003w\003c\001\188\003)\000\000\002~\000\000\003h\000\000\002\130\003i\000\205\000\000\002\197\001\198\002\185\001m\003'\000\000\000\000\002\194\002\181\001\161\000\000\003y\000\000\003w\003c\001\188\003)\001\199\002\000\000\000\000\000\000\000\0038\000\000\000\000\000\000\002\197\000\000\002\185\001m\003>\000\000\003e\002b\000\000\000\000\007.\003y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\131\000\000\000\000\003\031\003&\001\197\002\132\002\137\000\000\000\000\000\000\000\000\000\000\003e\000\000\000\000\003S\001\170\003h\002\138\001m\003i\000\000\000\000\000\000\000\000\000\000\000\000\003'\003\031\003&\000\000\000\000\000\213\000\000\000\000\000\000\003w\000\000\001\188\003)\000\000\000\000\000\000\003h\000\000\002f\003i\000\000\002\208\000\000\000\000\000\000\001\202\003'\001\203\002~\002\194\002\181\001\161\002\130\003y\000\205\003w\003c\001\188\003)\000\000\000\000\000\000\000\000\000\000\0038\000\000\000\000\000\000\002\197\000\000\002\185\001m\003>\000\000\000\213\002\194\002\181\001\161\0071\003y\000\000\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0038\001\218\000\000\001\188\001\168\000\000\000\000\000\000\003>\000\000\003e\002\131\000\000\003S\007F\000\000\000\000\002\132\002\137\000\000\000\000\000\000\000\000\000\000\000\000\000\219\003\031\003&\000\000\000\000\002\138\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003S\000\000\003h\000\220\000\000\003i\000\000\000\000\000\000\000\205\000\223\000\000\003'\000\000\000\000\002\194\002\181\001\161\000\000\000\000\000\000\003w\003c\001\188\003)\000\000\000\000\000\000\000\000\000\000\0038\000\000\000\000\000\000\002\197\000\219\002\185\001m\003>\000\000\000\000\002\194\002\181\001\161\007I\003y\000\000\000\000\003c\000\000\000\000\000\000\000\220\000\000\000\000\000\000\0038\000\000\000\205\000\223\002\197\000\000\002\185\001m\003>\000\000\003e\000\000\000\000\003S\007M\000\000\000\225\000\000\000\000\000\226\000\000\000\000\000\227\000\228\000\000\000\000\003\031\003&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003e\000\000\000\000\003S\000\000\003h\000\000\000\000\003i\000\000\000\000\000\000\003\002\000\000\000\000\003'\003\031\003&\000\213\000\000\000\000\000\214\000\000\000\000\003w\003c\001\188\003)\000\000\000\225\000\000\003h\000\226\000\000\003i\000\227\000\228\002\197\000\000\002\185\001m\003'\000\000\000\000\002\194\002\181\001\161\000\000\003y\000\000\003w\003c\001\188\003)\005\230\000\000\000\000\000\000\000\000\0038\000\000\005c\000\000\002\197\000\000\002\185\001m\003>\000\000\003e\000\000\000\000\000\000\be\003y\b`\000\000\000\000\000\000\000\000\000\000\000\000\002\194\002\181\001\161\003\031\003&\000\000\000\000\000\000\000\000\000\000\000\000\000\216\000\000\003e\000\000\000\000\003S\000\000\003h\000\000\000\000\003i\000\000\004\158\000\000\000\000\000\219\000\000\003'\003\031\003&\000\000\000\000\000\000\000\000\000\000\000\000\003w\000\000\001\188\003)\000\000\000\000\000\220\003h\000\000\007k\003i\000\000\000\205\000\223\000\000\000\000\000\000\003'\000\000\000\000\002\194\002\181\001\161\000\000\003y\000\000\003w\003c\001\188\003)\002\194\002\181\001\161\000\000\000\000\0038\000\000\000\000\000\000\002\197\000\000\002\185\001m\003>\000\000\0038\000\000\000\000\000\000\bg\003y\000\000\000\000\003>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\135\000\000\002\196\000\000\000\224\000\000\000\000\000\000\003e\000\000\000\000\003S\000\225\000\000\002\197\000\226\002\185\001m\000\227\000\228\005\239\003S\000\000\000\000\003\031\003&\000\000\000\000\000\000\000\000\000\000\000\000\000\213\000\000\000\000\000\214\000\000\000\000\000\000\003h\000\000\000\000\003i\000\000\000\232\000\000\000\000\000\247\000\000\003'\000\000\000\000\000\000\000\000\004\161\002\194\002\181\001\161\003w\003c\001\188\003)\003\031\003&\000\000\000\000\000\000\000\000\005\230\003c\0038\002\197\000\000\002\185\001m\000\000\000\000\000\000\003>\000\000\000\000\002\197\003y\002\185\001m\000\000\000\000\003'\005.\005\233\000\000\000\000\000\000\000\000\000\000\000\000\003(\000\000\001\188\003)\000\000\000\000\000\000\003e\000\000\000\000\000\000\000\216\000\000\003S\002\194\002\181\001\161\003e\000\000\000\000\000\000\000\000\000\000\003\031\003&\000\000\000\219\000\000\000\000\0038\000\000\000\000\000\000\003\031\003&\000\000\000\000\003>\003h\000\000\000\000\003i\000\000\000\220\000\000\000\000\000\000\004\224\003'\000\205\000\223\004A\000\000\000\000\000\000\000\000\000\000\003w\003'\001\188\003)\003c\000\000\000\000\000\000\001\160\001\161\003w\003S\001\188\003)\000\000\000\000\002\197\000\000\002\185\001m\000\000\000\000\001\160\001\161\003y\000\000\000\000\000\000\001\162\001\193\000\000\001\164\001\165\000\000\003y\000\000\000\000\000\000\000\000\005\128\000\000\000\000\001\162\002\252\000\000\001\164\001\165\000\224\003e\000\000\003<\000\000\002\194\002\181\001\161\000\225\000\000\000\000\000\226\003c\001\198\000\227\000\228\005\239\003\031\003&\000\000\0038\000\000\002\253\000\000\002\197\000\000\002\185\001m\003>\001\199\002\230\000\000\000\000\000\000\000\000\004A\000\000\000\000\004D\000\000\000\232\000\000\003'\000\247\000\000\000\000\000\000\001\160\001\161\000\000\000\000\003w\000\000\001\188\003)\000\000\003e\000\000\000\000\003S\000\000\000\000\001\197\000\000\000\000\000\000\000\000\001\162\001\193\000\000\001\164\001\165\003\031\003&\001\170\003y\001\169\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003=\000\000\000\000\001\170\003P\004A\001m\000\000\000\000\000\000\000\000\000\000\003'\000\000\001\198\000\000\000\000\000\000\002\194\002\181\001\161\003w\003c\001\188\003)\001\202\000\000\001\203\000\000\000\000\001\199\002\230\000\000\0038\002\197\000\000\002\185\001m\000\000\000\000\000\000\003>\002\254\000\000\000\000\003y\000\000\000\000\000\000\000\000\000\000\003R\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\186\001\197\000\000\000\000\003e\004\027\004!\000\000\000\000\001\218\003S\001\188\001\168\001\170\001\186\000\000\001m\000\000\000\000\000\000\003\031\003&\000\000\001\187\003=\001\188\001\168\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004A\000\000\001\160\001\161\000\000\000\000\000\000\003'\000\000\000\000\000\000\001\202\000\000\001\203\000\000\000\000\003w\000\000\001\188\003)\003c\000\000\001\162\001\193\000\000\001\164\001\165\000\000\000\000\000\000\000\000\000\000\002\197\000\000\002\185\001m\000\000\000\000\000\000\000\000\003y\000\000\001\160\001\161\003`\000\000\000\000\000\000\001\186\000\000\000\000\000\000\000\000\000\000\001\198\001\160\001\161\001\218\000\000\001\188\001\168\000\000\001\162\001\193\003e\001\164\001\165\000\000\000\000\000\000\001\199\002\230\000\000\000\000\000\000\001\162\001\193\000\000\001\164\001\165\003\031\003&\000\213\000\000\003n\000\000\000\000\000\000\000\000\000\000\000\000\002b\000\000\000\000\001\198\000\000\000\000\003t\004A\000\000\000\000\000\000\000\000\001\197\000\000\003'\002b\001\198\001\160\001\161\001\199\002\230\000\000\000\000\003w\001\170\001\188\003)\001m\000\000\000\000\000\000\000\000\001\199\002\230\000\000\003=\000\000\001\162\001\193\000\000\001\164\001\165\000\000\000\000\000\000\000\000\000\000\003y\000\000\000\000\000\000\000\000\001\197\000\000\000\000\000\000\000\000\000\000\002f\003}\001\202\005=\001\203\000\000\001\170\001\197\000\000\001m\002~\001\198\001\160\001\161\002\130\002f\000\205\003=\005\144\001\170\000\000\000\000\001m\000\219\000\000\002~\000\000\001\199\002\230\002\130\003=\000\205\001\162\001\193\000\000\001\164\001\165\000\000\000\000\001\186\000\220\000\000\001\202\000\000\001\203\000\000\000\205\000\223\001\218\000\000\001\188\001\168\000\000\000\000\003\136\001\202\000\000\001\203\000\000\000\000\001\197\000\000\000\000\002\131\001\198\000\000\000\000\000\000\000\000\002\132\002\137\000\000\001\170\000\000\000\000\001m\000\000\000\000\002\131\001\186\001\199\002\230\002\138\003=\002\132\002\137\000\000\000\000\001\218\000\000\001\188\001\168\001\186\000\000\000\000\000\000\000\000\002\138\001\160\001\161\000\000\001\218\000\000\001\188\001\168\000\000\000\000\000\000\001\202\000\225\001\203\000\000\000\226\001\197\000\000\000\227\000\228\000\000\001\162\001\193\000\000\001\164\001\165\000\000\000\000\001\170\000\000\000\000\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003=\000\000\000\000\000\000\003\142\005k\000\000\000\000\000\000\001\186\000\000\000\000\000\000\000\000\001\198\001\160\001\161\000\000\001\218\000\000\001\188\001\168\000\000\000\000\000\000\001\202\000\000\001\203\001\160\001\161\001\199\002\230\000\000\000\000\000\000\001\162\001\193\000\000\001\164\001\165\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\162\001\193\000\000\001\164\001\165\000\000\000\000\000\000\000\000\003\148\000\000\000\000\000\000\000\000\001\186\001\197\000\000\000\000\000\000\001\198\001\160\001\161\003\154\001\218\000\000\001\188\001\168\001\170\000\000\000\000\001m\000\000\001\198\001\160\001\161\001\199\002\230\000\000\003=\000\000\001\162\001\193\000\000\001\164\001\165\000\000\000\000\000\000\001\199\002\230\000\000\000\000\000\000\001\162\001\193\000\000\001\164\001\165\000\000\000\000\000\000\000\000\003\160\001\202\000\000\001\203\000\000\000\000\001\197\000\000\000\000\000\000\001\198\000\000\000\000\003\166\000\000\000\000\000\000\000\000\001\170\001\197\000\000\001m\000\000\001\198\000\000\000\000\001\199\002\230\000\000\003=\000\000\001\170\000\000\000\000\001m\000\000\000\000\000\000\001\186\001\199\002\230\000\000\003=\000\000\000\000\000\000\000\000\001\218\000\000\001\188\001\168\000\000\000\000\000\000\001\202\000\000\001\203\000\000\000\000\001\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\202\000\000\001\203\000\000\001\170\001\197\000\000\001m\000\000\000\000\002b\000\000\000\000\000\000\000\000\003=\000\000\001\170\000\000\000\000\001m\000\000\000\000\000\000\001\186\000\000\000\000\000\000\003=\000\000\000\000\000\000\000\000\001\218\000\000\001\188\001\168\001\186\000\000\000\000\001\202\000\000\001\203\001\160\001\161\000\000\001\218\000\000\001\188\001\168\000\000\000\000\000\000\001\202\000\000\001\203\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\162\001\193\000\000\001\164\001\165\002f\000\000\000\000\005\162\000\000\001\160\001\161\000\000\000\000\001\186\002~\000\000\000\000\000\000\002\130\000\000\000\205\003\172\001\218\000\000\001\188\001\168\001\186\000\000\000\000\001\162\001\193\001\198\001\164\001\165\000\000\001\218\000\000\001\188\001\168\001\160\001\161\000\000\000\000\000\000\000\000\000\000\000\000\001\199\002\230\000\000\000\000\003\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\162\001\193\001\198\001\164\001\165\000\000\000\000\000\000\002\131\000\000\000\000\002\194\002\181\001\161\002\132\002\137\000\000\000\000\001\199\002\230\000\000\001\197\003\184\000\000\000\000\000\000\0038\002\138\000\000\000\000\000\000\000\000\001\198\001\170\003>\000\000\001m\001\160\001\161\000\000\000\000\000\000\000\000\000\000\003=\000\000\000\000\000\000\001\199\002\230\000\000\001\197\000\000\000\000\000\000\001\160\001\161\001\162\001\193\000\000\001\164\001\165\000\000\001\170\000\000\003S\001m\000\000\000\000\001\202\000\000\001\203\000\000\000\000\003=\001\162\001\193\000\000\001\164\001\165\000\213\001\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\170\000\000\000\000\001m\003\190\000\000\001\202\000\000\001\203\000\000\000\000\003=\001\194\001\186\001\198\000\000\005a\000\000\000\000\000\000\003c\000\000\001\218\005g\001\188\001\168\000\000\001\160\001\161\000\000\001\199\002\230\002\197\000\000\002\185\001m\001\202\000\000\001\203\000\000\000\000\000\000\000\000\001\186\000\000\001\197\000\000\001\162\001\193\000\000\001\164\001\165\001\218\000\000\001\188\001\168\000\000\001\170\000\000\000\000\001m\000\000\000\000\001\197\003e\000\000\000\000\001\160\001\161\003\196\000\000\000\000\000\000\001\186\000\000\001\170\000\000\000\219\001m\001\198\003\031\003&\001\218\000\000\001\188\001\168\003=\001\162\001\193\000\000\001\164\001\165\000\000\000\000\000\220\001\199\002\230\000\000\007\234\000\000\000\205\000\223\000\000\000\000\000\000\003'\000\000\000\000\000\000\003\202\000\000\001\202\000\000\001\203\003w\000\000\001\188\003)\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\001\160\001\161\001\197\000\000\001\186\000\000\001\160\001\161\000\000\001\199\002\230\000\000\003y\001\218\001\170\001\188\001\168\001m\000\000\000\000\001\162\002\252\001\186\001\164\001\165\003=\001\162\001\193\000\000\001\164\001\165\001\218\000\000\001\188\001\168\000\000\000\000\000\225\000\000\000\000\000\226\000\000\001\197\000\227\000\228\000\000\000\000\005m\003\208\000\000\001\202\000\000\001\203\000\000\001\170\000\000\000\000\001m\001\198\000\000\001\160\001\161\000\000\000\000\000\000\003=\000\000\000\000\000\000\005p\000\000\000\000\000\000\000\000\001\199\002\230\000\000\000\000\000\000\000\000\001\162\001\193\000\000\001\164\001\165\000\000\000\000\001\186\000\000\000\000\001\202\000\000\001\203\000\000\000\000\000\000\001\218\000\000\001\188\001\168\000\000\001\169\003\214\000\000\000\000\000\000\000\000\001\197\000\000\000\000\000\000\000\000\001\198\001\170\000\000\000\000\001m\000\000\000\000\001\170\001\160\001\161\001m\000\000\000\000\001\160\001\161\001\186\001\199\002\230\003=\000\000\000\000\000\000\000\000\000\000\001\218\000\000\001\188\001\168\001\162\001\193\000\000\001\164\001\165\001\162\001\193\000\000\001\164\001\165\000\000\000\000\007e\000\000\000\000\001\202\000\000\001\203\000\000\000\000\000\000\001\197\003\220\000\000\000\000\000\000\000\000\003\226\000\000\000\000\000\000\000\000\001\198\001\170\000\000\000\000\001m\001\198\000\000\000\000\000\000\000\000\000\000\000\000\003=\000\000\001\186\000\000\001\199\002\230\000\000\000\000\001\186\001\199\002\230\001\187\000\000\001\188\001\168\000\000\000\000\001\218\000\000\001\188\001\168\002b\000\000\000\000\007r\001\202\000\000\001\203\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\197\000\000\000\000\000\000\000\000\001\197\000\000\000\000\000\000\001\160\001\161\000\000\001\170\000\000\000\000\001m\000\000\001\170\000\000\000\000\001m\002b\000\000\003=\000\000\001\186\000\000\000\000\003=\001\162\001\193\000\000\001\164\001\165\001\218\000\000\001\188\001\168\000\000\001\160\001\161\000\000\002f\000\000\000\000\005\165\000\000\000\000\001\202\000\000\001\203\003\232\002~\001\202\000\000\001\203\002\130\000\000\000\205\001\162\001\193\001\198\001\164\001\165\000\000\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\199\002\230\002f\000\000\003\238\005\168\000\000\000\000\001\186\000\000\000\000\000\000\002~\001\186\001\198\000\000\002\130\001\218\000\205\001\188\001\168\000\000\001\218\000\000\001\188\001\168\000\000\000\000\002\131\000\000\001\199\002\230\000\000\001\197\002\132\002\137\000\000\001\160\001\161\000\000\000\000\000\000\000\000\000\000\000\000\001\170\000\000\002\138\001m\000\000\000\000\000\000\000\000\004\006\001\161\000\000\003=\001\162\001\193\000\000\001\164\001\165\000\000\001\197\000\000\002\131\000\000\001\160\001\161\000\000\000\000\002\132\002\137\004\"\001\193\001\170\001\164\001\165\001m\003\252\000\000\001\202\000\000\001\203\002\138\000\000\003=\001\162\001\193\001\198\001\164\001\165\002\194\002\181\001\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\023\001\199\002\230\0038\000\000\004\002\000\000\001\202\000\000\001\203\000\000\003>\000\000\000\000\001\186\001\198\004'\002\028\000\000\000\000\000\000\004C\000\000\001\218\000\000\001\188\001\168\000\000\000\000\000\000\007\167\001\199\002\230\000\000\001\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003S\000\000\001\186\b\193\001\170\000\000\b\194\001m\001\197\007\170\000\000\001\218\000\000\001\188\001\168\003=\000\000\000\000\007\171\000\000\001\170\000\000\001\197\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\170\000\000\000\000\001m\000\000\000\000\001\202\000\000\001\203\000\000\000\000\003=\000\000\000\000\003c\000\000\000\000\000\000\007\172\004:\004;\002\029\000\000\002\030\000\000\000\000\002\197\000\000\002\185\001m\000\000\000\000\000\000\002\194\002\181\001\161\001\202\000\000\001\203\000\000\000\000\000\000\000\000\001\186\000\000\000\000\000\000\000\000\0038\002\194\002\181\001\161\001\218\007\173\001\188\001\168\003>\000\000\003e\001\186\000\000\000\000\000\000\007\174\000\000\000\000\004M\000\000\001\218\000\000\001\188\001\168\005\015\001\186\003\031\003&\000\000\001\160\001\161\005\023\000\000\000\000\001\218\b\196\001\188\001\168\000\000\003S\000\000\002\194\002\181\001\161\004A\000\000\000\000\000\000\000\000\001\162\001\193\003'\001\164\001\165\007\176\000\000\0038\000\000\000\000\005!\003w\000\000\001\188\003)\003>\000\000\000\000\000\000\000\000\001\160\001\161\004J\007\177\000\000\004V\000\000\000\000\007\179\000\000\000\000\000\000\001\198\000\000\000\000\003y\000\000\000\000\003c\000\000\001\162\001\193\007\181\001\164\001\165\000\000\003S\000\000\001\199\002\230\002\197\000\000\002\185\001m\002\196\000\000\000\000\000\000\000\000\000\000\007\182\000\000\004S\000\000\000\000\000\000\005\026\000\000\002\185\001m\001\143\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\197\003e\000\000\000\000\000\000\000\000\000\000\001\199\002\230\000\000\000\000\000\000\001\170\003c\000\000\001m\000\000\003\031\003&\000\000\000\000\000\000\000\000\003=\000\000\002\197\005\018\002\185\001m\000\000\000\000\000\000\000\000\003\031\003&\004A\000\000\000\000\000\000\000\000\001\197\000\000\003'\000\000\000\000\000\000\000\000\000\000\001\202\000\000\001\203\003w\001\170\001\188\003)\001m\000\000\003e\003'\001\160\001\161\000\000\000\000\003=\000\000\000\000\000\000\003(\000\000\001\188\003)\000\000\000\000\003\031\003&\003y\000\000\000\000\000\000\001\162\001\193\000\000\001\164\001\165\000\213\001\186\000\000\000\214\001\202\000\000\001\203\004A\000\000\000\000\001\218\000\000\001\188\001\168\003'\001\160\001\161\004\\\000\000\000\000\000\000\000\000\000\000\003w\000\000\001\188\003)\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\162\001\193\000\000\001\164\001\165\000\000\001\186\000\000\001\199\002\230\000\000\000\000\003y\000\000\000\000\001\218\000\000\001\188\001\168\000\000\000\000\000\000\004f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\198\000\000\000\000\000\000\000\000\000\000\001\160\001\161\000\216\001\197\000\000\000\000\000\000\001\160\001\161\000\000\001\199\002\230\000\000\000\000\000\000\001\170\000\000\000\219\001m\000\000\001\162\001\193\000\000\001\164\001\165\000\000\003=\001\162\001\193\000\000\001\164\001\165\000\000\000\000\000\220\000\000\000\000\000\000\000\000\000\000\000\205\000\223\004o\001\197\000\000\000\000\000\000\000\000\000\000\004x\000\000\001\202\001\198\001\203\000\000\001\170\000\000\000\000\001m\001\198\000\000\000\000\000\000\002\194\002\181\001\161\003=\000\000\001\199\002\230\000\000\000\000\000\000\000\000\000\000\001\199\002\230\000\000\0038\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003>\000\000\001\186\000\000\000\000\001\202\000\000\001\203\000\000\000\224\004}\001\218\000\000\001\188\001\168\001\197\000\000\000\225\000\000\000\000\000\226\000\000\001\197\000\227\000\228\006|\000\000\001\170\006\127\000\000\001m\003S\000\000\000\000\001\170\001\160\001\161\001m\003=\000\000\000\000\000\000\001\186\000\000\000\000\003=\000\000\000\000\000\000\000\232\000\000\001\218\000\247\001\188\001\168\001\162\001\193\000\000\001\164\001\165\000\000\000\000\000\000\001\202\000\000\001\203\002\194\002\181\001\161\000\000\001\202\000\000\001\203\000\000\000\000\000\000\000\000\004\131\000\000\003c\000\000\0038\000\000\000\000\000\000\000\000\000\000\001\198\000\000\003>\000\000\002\197\000\000\002\185\001m\000\000\000\000\000\000\000\000\004\134\001\186\001\160\001\161\001\199\002\230\000\000\000\213\001\186\000\000\001\218\000\000\001\188\001\168\000\000\000\000\000\000\001\218\000\000\001\188\001\168\003S\001\162\001\193\003e\001\164\001\165\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002b\000\000\005a\001\197\000\000\000\000\003\031\003&\000\000\000\000\004\140\000\000\000\000\000\000\000\000\001\170\000\000\000\000\001m\000\000\001\198\000\000\000\000\000\000\004A\000\000\003=\000\000\000\000\000\000\000\000\003'\000\000\000\000\000\000\003c\001\199\002\230\000\000\000\000\003w\000\000\001\188\003)\002\194\002\181\001\161\002\197\000\000\002\185\001m\001\202\000\000\001\203\000\000\000\000\000\000\000\000\002f\0038\000\000\005\173\000\000\000\219\003y\000\000\000\000\003>\002~\001\197\001\160\001\161\002\130\000\000\000\205\000\000\002b\004\143\000\000\003e\000\220\001\170\000\000\000\000\001m\000\000\000\205\000\223\001\186\000\000\001\162\001\193\003=\001\164\001\165\003\031\003&\001\218\003S\001\188\001\168\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\149\004A\000\000\000\000\000\000\001\202\000\000\001\203\003'\002\131\001\198\000\000\000\000\000\000\000\000\002\132\002\137\003w\000\000\001\188\003)\000\000\002f\000\000\000\000\005\176\001\199\002\230\002\138\000\000\000\000\000\000\002~\000\000\003c\000\000\002\130\000\225\000\205\000\000\000\226\003y\001\186\000\227\000\228\000\000\002\197\005d\002\185\001m\000\000\001\218\000\000\001\188\001\168\000\000\001\160\001\161\000\000\001\197\002\194\002\181\001\161\000\000\000\000\000\000\000\000\000\000\000\000\005e\000\000\001\170\000\000\000\000\001m\0038\001\162\001\193\003e\001\164\001\165\000\000\003=\003>\000\000\002\131\000\000\002\194\002\181\001\161\000\000\002\132\002\137\004\182\003\031\003&\000\000\000\000\004\156\000\000\000\000\000\000\0038\000\000\002\138\000\000\000\000\001\202\001\198\001\203\003>\000\000\004A\000\000\003S\000\000\000\000\000\000\000\000\003'\004\185\000\000\000\000\000\000\001\199\002\230\000\000\000\000\003w\000\000\001\188\003)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003S\000\000\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003y\001\218\000\000\001\188\001\168\001\197\000\000\000\000\000\000\000\000\003c\000\000\000\000\000\000\000\000\000\000\000\000\001\170\000\000\000\000\001m\000\000\002\197\000\000\002\185\001m\000\000\000\000\003=\000\000\000\000\000\000\000\000\002\194\002\181\001\161\000\000\003c\000\000\000\000\001\160\001\161\000\000\000\000\000\000\000\000\000\000\000\000\0038\002\197\000\000\002\185\001m\001\202\003e\001\203\003>\000\000\000\000\000\000\001\162\001\193\000\000\001\164\001\165\000\000\004\188\000\000\000\000\000\000\003\031\003&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003e\004\194\000\000\000\000\000\000\000\000\003S\004A\000\000\001\186\000\000\001\198\000\000\000\000\003'\000\000\003\031\003&\001\218\000\000\001\188\001\168\000\000\003w\000\000\001\188\003)\001\199\002\230\000\000\000\000\000\000\000\000\000\000\004A\000\000\000\000\000\000\000\000\000\000\000\000\003'\000\000\000\000\000\000\000\000\000\000\003y\000\000\000\000\003w\000\000\001\188\003)\003c\000\000\000\000\001\160\001\161\000\000\001\197\000\000\000\000\000\000\000\000\000\000\002\197\000\000\002\185\001m\000\000\000\000\001\170\000\000\003y\001m\000\000\001\162\001\193\000\000\001\164\001\165\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\000\000\003e\004\210\001\160\001\161\000\000\000\000\000\000\000\000\000\000\000\000\001\202\001\198\001\203\000\000\000\000\000\000\003\031\003&\000\000\000\000\000\000\000\000\001\162\001\193\000\000\001\164\001\165\001\199\002\230\000\000\000\000\000\000\000\000\000\000\004A\000\000\000\000\000\000\000\000\000\000\000\000\003'\000\000\000\000\004\215\001\160\001\161\001\186\000\000\000\000\003w\000\000\001\188\003)\001\198\000\000\001\218\000\000\001\188\001\168\001\197\000\000\000\000\000\000\000\000\001\162\001\193\000\000\001\164\001\165\001\199\002\230\001\170\000\000\003y\001m\002\194\002\181\001\161\000\000\000\000\000\000\000\000\003=\000\000\000\000\000\000\004\222\000\000\000\000\000\000\0038\000\000\000\000\000\000\000\000\000\000\001\198\000\000\003>\000\000\000\000\000\000\001\197\000\000\000\000\000\000\000\000\001\202\004\227\001\203\000\000\000\000\001\199\002\230\001\170\000\000\000\000\001m\002\194\002\181\001\161\000\000\000\000\000\000\000\000\003=\000\000\000\000\000\000\003S\000\000\000\000\000\000\0038\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003>\000\000\000\213\001\186\001\197\000\214\000\000\000\000\000\000\001\202\004\230\001\203\001\218\000\000\001\188\001\168\001\170\000\000\000\000\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003=\000\000\000\000\000\000\003S\000\000\000\000\000\000\000\000\003c\000\000\005\230\000\000\000\000\000\000\000\000\001\160\001\161\000\000\001\186\000\000\002\197\000\000\002\185\001m\001\202\000\000\001\203\001\218\000\000\001\188\001\168\006_\000\000\000\000\000\000\001\162\001\193\000\000\001\164\001\165\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\213\000\000\000\216\000\214\003c\003e\000\000\000\000\000\000\000\000\004\244\000\000\000\000\000\000\001\186\000\000\002\197\000\219\002\185\001m\001\198\003\031\003&\001\218\000\000\001\188\001\168\b4\000\000\002\194\002\181\001\161\000\000\000\000\000\220\000\000\001\199\002\230\000\000\004A\000\205\000\223\000\000\000\000\0038\000\000\003'\000\000\003e\000\000\000\000\000\000\003>\000\000\000\000\003w\000\000\001\188\003)\000\000\000\000\000\000\005\005\000\000\003\031\003&\000\000\000\000\000\000\001\197\000\000\002\194\002\181\001\161\000\000\000\216\000\000\000\000\000\000\003y\000\000\001\170\004A\003S\001m\000\000\0038\000\000\000\000\003'\000\219\000\000\003=\000\000\003>\000\224\000\000\000\000\003w\000\213\001\188\003)\000\000\000\225\005\t\000\000\000\226\000\220\000\000\000\227\000\228\005\239\000\000\000\205\000\223\000\000\000\000\001\202\000\000\001\203\000\000\000\000\003y\000\000\000\000\003S\000\000\000\000\001\160\001\161\000\000\003c\000\000\000\000\000\000\000\232\000\000\000\000\000\247\000\000\000\000\000\000\000\000\002\197\000\000\002\185\001m\000\000\001\162\001\193\000\000\001\164\001\165\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\218\000\000\001\188\001\168\000\000\000\224\000\000\005&\000\000\000\000\003c\000\000\003e\000\225\000\000\000\000\000\226\001\198\000\000\000\227\000\228\b;\002\197\000\000\002\185\001m\000\219\000\000\003\031\003&\000\000\000\000\000\000\001\199\002\230\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\220\000\000\000\232\004A\000\000\000\247\000\205\000\223\000\000\000\000\003'\003e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003w\000\000\001\188\003)\001\197\000\000\000\000\000\000\003\031\003&\000\000\004\006\001\161\000\000\000\000\000\000\001\170\001\160\001\161\001m\000\000\000\000\000\000\000\000\003y\000\000\004A\003=\000\000\000\000\000\000\004\"\001\193\003'\001\164\001\165\000\000\001\162\001\193\000\000\001\164\001\165\003w\000\000\001\188\003)\000\000\000\000\002b\000\000\000\225\000\000\001\202\000\226\001\203\000\000\000\227\000\228\000\000\005\132\000\000\000\000\002\023\000\000\000\000\000\000\003y\000\000\000\000\001\198\000\000\001\160\001\161\000\000\000\000\000\000\000\000\000\000\004'\002\028\000\000\000\000\005o\000\000\000\000\001\199\002\230\000\000\000\000\001\186\000\000\001\162\001\193\000\000\001\164\001\165\000\000\000\000\001\218\000\000\001\188\001\168\000\000\000\000\000\000\000\000\002f\000\000\000\000\005\179\000\000\000\000\001\197\005\152\000\000\000\000\002~\000\000\001\197\000\000\002\130\000\000\000\205\001\198\001\170\001\160\001\161\001m\000\000\000\000\001\170\004\006\001\161\001m\000\000\000\000\000\000\000\000\000\000\001\199\002\230\003=\000\000\000\000\000\000\001\162\001\193\000\000\001\164\001\165\000\000\004\"\001\193\000\000\001\164\001\165\000\000\004:\005z\002\029\000\000\002\030\000\000\000\000\000\000\000\000\001\202\005\159\001\203\002\131\000\000\000\000\001\197\000\000\000\000\002\132\002\137\001\198\000\000\000\000\000\000\000\000\002\023\000\000\001\170\000\000\000\000\001m\002\138\000\000\000\000\000\000\000\000\001\199\002\230\003=\000\000\001\186\004'\002\028\000\000\000\000\000\000\001\186\000\000\000\000\001\218\000\000\001\188\001\168\000\000\000\000\001\218\000\000\001\188\001\168\000\000\000\000\000\000\000\000\001\202\000\000\001\203\000\000\000\000\000\000\001\197\000\000\000\000\000\000\001\160\001\161\001\197\000\000\000\000\004\006\001\161\000\000\001\170\000\000\000\000\001m\000\000\000\000\001\170\000\000\000\000\001m\000\000\003=\001\162\001\163\000\000\001\164\001\165\004\"\001\193\001\186\001\164\001\165\000\000\000\000\000\000\000\000\001\160\001\161\001\218\000\000\001\188\001\168\000\000\000\000\000\000\000\000\001\202\000\000\001\203\004:\007X\002\029\000\000\002\030\000\000\000\000\001\162\001\193\002\023\001\164\001\165\001\160\001\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004'\002\028\000\000\000\000\007\233\000\000\000\000\001\162\001\193\001\186\001\164\001\165\000\000\000\000\001\198\001\186\001\160\001\161\001\218\000\000\001\188\001\168\000\000\000\000\001\218\000\000\001\188\001\168\000\000\001\169\001\199\002\230\000\000\000\000\001\197\000\000\001\162\001\193\002\023\001\164\001\165\001\170\000\000\000\000\001m\000\000\001\170\000\000\000\000\001m\000\000\000\000\000\000\000\000\002\024\002\028\000\000\000\000\007\248\000\000\000\000\000\000\000\000\001\197\000\000\000\000\000\000\000\000\001\198\000\000\001\160\001\161\000\000\000\000\000\000\001\170\000\000\000\000\001m\004:\007z\002\029\000\000\002\030\001\199\002\230\003=\000\000\001\197\000\000\001\162\001\193\000\000\001\164\001\165\000\000\000\000\000\000\000\000\000\000\001\170\000\000\000\000\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\202\007\252\001\203\001\186\000\213\000\000\001\197\000\214\001\186\000\000\000\254\001\198\001\187\000\000\001\188\001\168\000\000\001\218\001\170\001\188\001\168\001m\000\000\000\000\002\029\000\000\002\030\001\199\002\230\003=\000\255\000\000\000\000\000\000\000\000\000\000\001\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\218\000\000\001\188\001\168\000\000\000\000\000\213\000\000\001\202\000\214\001\203\000\000\000\254\000\000\001\197\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\218\001\170\001\188\001\168\001m\002b\000\000\000\255\000\216\000\000\000\000\000\000\003=\001\021\000\000\000\000\000\000\000\000\000\000\000\000\001\186\000\000\000\000\000\219\000\000\000\000\000\000\001\004\000\000\001\218\000\000\001\188\001\168\000\000\000\000\000\000\000\000\001\202\000\000\001\203\000\220\000\000\000\000\000\000\000\000\000\000\000\205\000\223\000\000\000\000\000\000\000\000\000\000\002\194\002\181\001\161\000\216\002\194\002\181\001\161\000\000\000\000\000\000\002f\000\000\000\000\005\193\000\000\0038\000\000\000\000\000\219\0038\002~\001\186\001\004\003>\002\130\000\000\000\205\003>\000\000\000\000\001\218\000\000\001\188\001\168\000\000\000\220\000\000\000\000\000\000\000\000\000\000\000\205\000\223\000\000\000\000\000\000\000\000\000\000\000\224\000\000\000\000\000\000\000\000\000\000\003S\000\000\000\225\000\000\003S\000\226\000\000\000\000\000\227\000\228\001\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\131\000\000\000\000\000\000\000\000\000\000\002\132\002\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\232\000\000\000\000\000\247\002\138\000\000\000\000\000\000\000\224\000\000\000\000\000\000\000\000\000\000\003c\000\000\000\225\000\000\003c\000\226\000\000\000\000\000\227\000\228\001\016\000\000\002\197\000\000\002\185\001m\002\197\000\000\002\185\001m\000\000\000\000\001\160\001\161\000\000\000\000\000\000\000\000\000\000\000\000\000\213\000\000\000\000\000\214\000\232\000\000\000\000\000\247\000\000\000\000\000\000\000\000\001\162\001\193\003e\001\164\001\165\000\000\003e\000\000\000\000\000\000\002\018\000\000\000\000\000\000\001\160\001\161\000\000\000\000\003\031\003&\000\000\000\000\003\031\003&\005\230\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\198\000\000\001\162\001\193\005\170\001\164\001\165\000\000\005\133\000\000\000\000\003'\002\004\007/\000\000\003'\001\199\002\006\000\000\000\000\003w\000\000\001\188\003)\003w\000\000\001\188\003)\000\000\000\000\000\000\000\216\000\000\000\000\001\198\001\160\001\161\000\000\000\000\002\194\002\181\001\161\000\000\000\000\003y\000\000\000\219\000\000\003y\001\197\001\199\002\006\000\000\000\000\0038\001\162\001\193\000\000\001\164\001\165\000\000\001\170\003>\000\220\001m\002\b\000\000\000\000\000\000\000\205\000\223\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\197\000\000\000\000\000\000\001\198\000\000\002b\001\160\001\161\000\000\003S\000\000\001\170\000\000\001\202\001m\001\203\000\000\000\000\000\000\001\199\002\006\000\000\000\000\000\000\000\000\000\000\001\162\001\193\000\000\001\164\001\165\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\224\000\000\000\000\000\000\000\000\000\000\000\000\001\202\000\225\001\203\001\186\000\226\001\197\000\000\000\227\000\228\005\239\003c\001\198\001\218\000\000\001\188\001\168\002f\001\170\000\000\006\017\001m\000\000\002\197\000\000\002\185\001m\002~\001\199\002\230\000\000\002\130\000\000\000\205\000\232\000\000\000\000\000\247\001\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\218\000\000\001\188\001\168\000\000\000\000\000\000\001\202\003e\001\203\000\000\001\160\001\161\000\000\001\197\002\194\002\181\001\161\000\000\000\000\000\000\000\000\000\000\000\000\003\031\003&\001\170\000\000\000\000\001m\0038\001\162\001\193\002\131\001\164\001\165\000\000\004\203\003>\002\132\002\137\000\000\005'\000\000\001\186\000\000\000\000\000\000\000\000\003'\000\000\000\000\002\138\001\218\000\000\001\188\001\168\000\000\003w\000\000\001\188\003)\001\202\001\198\001\203\002b\002\194\002\181\001\161\003S\000\000\002\194\002\181\001\161\000\000\000\000\000\000\000\000\000\000\001\199\002\238\0038\003y\000\000\000\000\000\000\0038\000\000\000\000\003>\000\000\000\000\000\000\000\000\003>\000\000\000\000\000\000\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\218\000\000\001\188\001\168\001\197\000\000\000\000\000\000\000\000\003c\000\000\000\000\003S\000\000\000\000\002f\001\170\003S\006\028\001m\000\000\002\197\000\000\002\185\001m\002~\000\000\000\213\000\000\002\130\000\214\000\205\000\000\000\000\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\241\000\000\000\000\000\000\000\000\000\000\001\202\003e\001\203\000\000\000\000\000\000\000\000\000\000\003c\001\b\000\000\000\000\000\000\003c\000\000\000\000\000\000\003\031\003&\000\000\002\197\000\000\002\185\001m\000\000\002\197\002\131\002\185\001m\000\000\000\000\000\000\002\132\002\137\000\000\004\195\000\000\001\186\000\000\000\000\000\000\000\000\003'\001\160\001\161\002\138\001\218\000\000\001\188\001\168\000\216\003w\003e\001\188\003)\000\000\000\000\003e\000\000\000\000\000\000\000\000\000\000\001\162\001\193\000\219\001\164\001\165\003\031\003&\000\000\000\000\000\000\003\031\003&\003y\000\000\000\000\000\000\000\000\000\000\000\000\000\220\000\000\000\000\000\000\004\162\000\000\000\205\000\223\000\000\004@\000\000\003'\000\000\001\198\000\000\000\000\003'\002\194\002\181\001\161\003w\000\000\001\188\003)\000\000\003w\000\000\001\188\003)\001\199\002\230\000\000\0038\000\000\000\000\000\000\000\000\002\194\002\181\001\161\003>\000\000\000\000\000\000\003y\000\000\000\000\000\000\000\000\003y\000\000\000\000\0038\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003>\000\224\001\197\000\000\000\000\000\000\000\000\000\000\000\000\000\225\000\000\003S\000\226\000\000\001\170\000\227\000\228\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003b\000\000\000\000\000\000\000\000\000\000\003S\002\194\002\181\001\161\000\000\000\000\000\000\000\000\000\000\000\000\000\232\007\167\000\000\001\014\000\000\000\000\0038\000\000\000\000\001\202\000\000\001\203\000\000\000\000\003>\000\000\b\193\000\000\003c\b\194\000\000\000\000\007\170\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\197\007\171\002\185\001m\000\000\000\000\000\000\000\000\003c\000\000\000\000\000\000\000\000\000\000\000\000\003S\001\186\000\000\000\000\000\000\002\197\000\000\002\185\001m\000\000\001\218\000\000\001\188\001\168\000\000\000\000\000\000\003e\000\000\000\000\007\172\002\194\002\181\001\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\031\003&\000\000\0038\003e\000\000\000\000\000\000\002\194\002\181\001\161\003>\000\000\000\000\000\000\003c\000\000\000\000\003o\000\000\003\031\003&\007\173\0038\000\000\003'\000\000\002\197\000\000\002\185\001m\003>\007\174\000\000\003w\000\000\001\188\003)\003u\000\213\000\000\000\000\003S\000\000\000\000\003'\000\000\000\000\000\000\000\000\000\000\000\000\b\195\000\000\003w\000\000\001\188\003)\003y\003e\000\000\000\000\003S\000\000\002\194\002\181\001\161\000\000\005a\000\000\000\000\007\176\000\000\000\000\000\000\003\031\003&\000\000\003y\0038\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003>\000\000\007\177\003c\000\000\000\000\003~\007\179\000\000\000\000\000\000\000\000\000\000\003'\000\000\002\197\000\000\002\185\001m\000\000\000\000\007\181\003w\003c\001\188\003)\000\000\000\000\002\194\002\181\001\161\003S\000\000\000\000\000\000\002\197\000\000\002\185\001m\007\182\000\000\000\000\000\219\0038\000\000\000\000\003y\003e\000\000\000\000\000\000\003>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\220\000\000\000\000\000\000\003\031\003&\000\205\000\223\003e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003c\000\000\003\137\003S\003\031\003&\000\000\000\000\000\000\003'\000\000\000\000\002\197\000\000\002\185\001m\000\000\000\000\003w\000\000\001\188\003)\003\143\000\000\000\000\000\000\000\000\000\000\000\000\003'\000\000\000\000\000\000\000\000\000\000\002\194\002\181\001\161\003w\000\000\001\188\003)\003y\000\000\003e\000\000\000\000\000\000\000\000\000\225\0038\003c\000\226\000\000\000\000\000\227\000\228\000\000\003>\005i\003\031\003&\003y\002\197\000\000\002\185\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\149\000\000\000\000\005l\000\000\000\000\000\000\003'\002\194\002\181\001\161\003S\002\194\002\181\001\161\000\000\003w\003e\001\188\003)\000\000\000\000\002b\0038\000\000\000\000\000\000\0038\000\000\001\160\001\161\003>\000\000\003\031\003&\003>\000\000\000\000\000\000\000\000\003y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\162\001\193\003\155\001\164\001\165\000\000\000\000\000\000\000\000\003'\003c\000\000\000\000\003S\000\000\000\000\000\000\003S\003w\000\000\001\188\003)\002\197\000\000\002\185\001m\000\000\000\000\002\194\002\181\001\161\002f\001\198\000\000\006\"\000\000\000\000\000\000\000\000\000\000\000\000\002~\003y\0038\000\000\002\130\000\000\000\205\001\199\001\253\000\000\003>\000\000\000\000\003e\000\000\000\000\000\000\000\000\000\000\000\000\003c\000\000\000\000\000\000\003c\000\000\000\000\000\000\000\000\003\031\003&\000\000\002\197\000\000\002\185\001m\002\197\000\000\002\185\001m\001\197\003S\000\000\000\000\000\000\000\000\000\000\003\161\000\000\000\000\000\000\000\000\001\170\002\131\003'\001m\002\194\002\181\001\161\002\132\002\137\000\000\000\000\003w\003e\001\188\003)\000\000\003e\000\000\000\000\0038\002\138\000\000\000\000\000\000\002\194\002\181\001\161\003>\003\031\003&\000\000\000\000\003\031\003&\000\000\003y\001\202\003c\001\203\0038\000\000\000\000\000\000\000\000\000\000\000\000\003\167\003>\000\000\002\197\003\173\002\185\001m\003'\000\000\000\000\000\000\003'\003S\000\000\000\000\000\000\003w\000\000\001\188\003)\003w\000\000\001\188\003)\000\000\000\000\000\000\001\186\000\000\000\000\000\000\000\000\003S\000\000\000\000\003e\001\218\000\000\001\188\001\168\003y\000\000\000\000\000\000\003y\000\000\000\000\002\194\002\181\001\161\000\000\003\031\003&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003c\000\000\0038\000\000\000\000\000\000\000\000\000\000\000\000\003\179\003>\000\000\002\197\000\000\002\185\001m\003'\000\000\000\000\000\000\003c\000\000\000\000\000\000\000\000\003w\000\000\001\188\003)\000\000\000\000\000\000\002\197\000\000\002\185\001m\000\000\000\000\000\000\000\000\000\000\003S\000\000\000\000\003e\000\000\000\000\000\000\000\000\003y\000\000\000\000\002\194\002\181\001\161\000\000\002\194\002\181\001\161\000\000\003\031\003&\000\000\000\000\003e\000\000\000\000\0038\000\000\000\000\000\000\0038\000\000\000\000\000\000\003>\000\000\000\000\003\185\003>\003\031\003&\000\000\000\000\000\000\003'\000\000\000\000\000\000\003c\000\000\000\000\000\000\000\000\003w\000\000\001\188\003)\003\191\000\000\000\000\002\197\000\000\002\185\001m\003'\003S\002\194\002\181\001\161\003S\002\194\002\181\001\161\003w\000\000\001\188\003)\003y\000\000\000\000\000\000\0038\000\000\000\000\000\000\0038\000\000\000\000\000\000\003>\000\000\000\000\003e\003>\000\000\000\000\000\000\003y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\031\003&\000\000\000\000\000\000\003c\000\000\000\000\000\000\003c\000\000\000\000\003S\000\000\000\000\000\000\003S\002\197\003\197\002\185\001m\002\197\000\000\002\185\001m\003'\000\000\002\194\002\181\001\161\000\000\000\000\000\000\000\000\003w\000\000\001\188\003)\000\000\000\000\000\000\000\000\0038\000\000\000\000\000\000\000\000\000\000\000\000\003e\003>\000\000\000\000\003e\000\000\000\000\000\000\000\000\003y\000\000\003c\000\000\000\000\000\000\003c\003\031\003&\000\000\000\000\003\031\003&\000\000\002\197\000\000\002\185\001m\002\197\000\000\002\185\001m\000\000\003S\000\000\003\203\000\000\000\000\000\000\003\209\000\000\000\000\003'\000\000\000\000\000\000\003'\000\000\002\194\002\181\001\161\003w\000\000\001\188\003)\003w\003e\001\188\003)\000\000\003e\000\000\000\000\0038\000\000\000\000\000\000\000\000\002\194\002\181\001\161\003>\003\031\003&\000\000\003y\003\031\003&\000\000\003y\000\000\003c\000\000\0038\000\000\000\000\000\000\000\000\000\000\000\000\003\215\003>\000\000\002\197\003\221\002\185\001m\003'\000\000\000\000\000\000\003'\003S\000\000\000\000\000\000\003w\000\000\001\188\003)\003w\000\000\001\188\003)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003S\000\000\000\000\003e\000\000\000\000\000\000\000\000\003y\000\000\000\000\000\000\003y\000\000\000\000\002\194\002\181\001\161\000\000\003\031\003&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003c\000\000\0038\000\000\000\000\000\000\000\000\000\000\000\000\003\227\003>\000\000\002\197\000\000\002\185\001m\003'\000\000\000\000\000\000\003c\000\000\000\000\000\000\000\000\003w\000\000\001\188\003)\000\000\000\000\000\000\002\197\000\000\002\185\001m\000\000\000\000\000\000\000\000\000\000\003S\000\000\000\000\003e\000\000\000\000\000\000\000\000\003y\000\000\000\000\002\194\002\181\001\161\000\000\000\000\000\000\000\000\000\000\003\031\003&\000\000\000\000\003e\000\000\000\000\0038\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003>\000\000\000\000\003\233\000\000\003\031\003&\000\000\000\000\000\000\003'\000\000\000\000\000\000\003c\000\000\000\000\000\000\000\000\003w\000\000\001\188\003)\003\239\000\000\000\000\002\197\000\000\002\185\001m\003'\003S\000\000\000\000\000\000\000\000\001\160\001\161\000\000\003w\000\000\001\188\003)\003y\000\000\004\023\001\160\001\161\000\000\002\194\002\181\001\161\000\000\004\026\000\000\000\000\001\162\002\252\003e\001\164\001\165\000\000\000\000\003y\0038\000\000\001\162\002\252\000\000\001\164\001\165\000\000\003>\000\000\003\031\003&\000\000\002F\001\161\003c\000\000\000\000\000\000\002\253\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\197\003\253\002\185\001m\000\000\000\000\001\162\002\213\003'\001\164\001\165\000\000\003S\002\194\002\181\001\161\000\000\003w\000\000\001\188\003)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0038\000\000\000\000\000\000\003e\000\000\000\000\000\000\003>\002\023\000\000\000\000\000\000\003y\000\000\000\000\000\000\000\000\001\169\000\000\003\031\003&\000\000\000\000\000\000\004\247\002\028\000\000\001\169\000\000\001\170\000\000\003c\001m\000\000\000\000\000\000\000\000\004\003\003S\001\170\000\000\000\000\001m\002\197\003'\002\185\001m\000\000\000\000\002\194\002\181\001\161\000\000\003w\000\000\001\188\003)\000\000\001\197\000\000\000\000\000\000\000\000\000\000\0038\000\000\000\000\000\000\002\254\000\000\001\170\000\000\003>\001m\000\000\003e\000\000\003y\007e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003c\000\000\000\000\000\000\000\000\003\031\003&\004\027\004!\000\000\000\000\000\000\002\197\004\254\002\185\001m\001\186\003S\000\000\002\029\000\000\002\030\000\000\004K\000\000\001\187\001\186\001\188\001\168\000\000\003'\000\000\002\194\002\181\001\161\001\187\000\000\001\188\001\168\003w\000\000\001\188\003)\000\000\003e\000\000\000\000\0038\007q\000\000\000\000\000\000\002\194\002\181\001\161\003>\000\000\001\186\000\000\000\000\003\031\003&\000\000\003y\000\000\003c\001\218\0038\001\188\001\168\000\000\000\000\000\000\000\000\000\000\003>\000\000\002\197\004T\002\185\001m\000\000\000\000\000\000\000\000\003'\003S\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003w\000\000\001\188\003)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003S\000\000\000\000\003e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003y\000\000\000\000\002\194\002\181\001\161\000\000\003\031\003&\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003c\000\000\0038\000\000\000\000\000\000\000\000\000\000\000\000\004]\003>\000\000\002\197\000\000\002\185\001m\003'\000\000\000\000\000\000\003c\000\000\000\000\000\000\000\000\003w\000\000\001\188\003)\000\000\000\000\000\000\002\197\000\000\002\185\001m\000\000\000\000\000\000\000\000\000\000\003S\000\000\000\000\003e\000\000\000\000\000\000\000\000\003y\000\000\000\000\002\194\002\181\001\161\000\000\002\194\002\181\001\161\000\000\003\031\003&\000\000\000\000\003e\000\000\000\000\0038\000\000\000\000\000\000\0038\000\000\000\000\000\000\003>\000\000\000\000\004g\003>\003\031\003&\000\000\000\000\000\000\003'\000\000\000\000\000\000\003c\000\000\000\000\000\000\000\000\003w\000\000\001\188\003)\004p\000\000\000\000\002\197\000\000\002\185\001m\003'\003S\002\194\002\181\001\161\003S\002\194\002\181\001\161\003w\000\000\001\188\003)\003y\000\000\000\000\000\000\0038\000\000\000\000\000\000\0038\000\000\000\000\000\000\003>\000\000\000\000\003e\003>\000\000\000\000\000\000\003y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\031\003&\000\000\000\000\000\000\003c\000\000\000\000\000\000\003c\000\000\000\000\003S\000\000\000\000\000\000\003S\002\197\004y\002\185\001m\002\197\000\000\002\185\001m\003'\000\000\002\194\002\181\001\161\000\000\000\000\000\000\000\000\003w\000\000\001\188\003)\000\000\000\000\000\000\000\000\0038\000\000\000\000\000\000\000\000\000\000\000\000\003e\003>\000\000\000\000\003e\000\000\000\000\000\000\000\000\003y\000\000\003c\000\000\000\000\000\000\003c\003\031\003&\000\000\000\000\003\031\003&\000\000\002\197\000\000\002\185\001m\002\197\000\000\002\185\001m\000\000\003S\000\000\004\132\000\000\000\000\000\000\004\141\000\000\000\213\003'\000\000\000\214\000\000\003'\001\017\002\194\002\181\001\161\003w\000\000\001\188\003)\003w\003e\001\188\003)\000\000\003e\000\000\000\000\0038\000\000\000\000\000\000\001\019\002\194\002\181\001\161\003>\003\031\003&\000\000\003y\003\031\003&\000\000\003y\000\000\003c\000\000\0038\000\000\000\000\000\000\000\000\000\000\000\000\004\150\003>\000\000\002\197\004\157\002\185\001m\003'\000\000\000\000\000\000\003'\003S\000\000\000\000\000\000\003w\000\000\001\188\003)\003w\000\000\001\188\003)\000\000\000\000\000\216\000\000\000\000\000\000\000\000\000\000\003S\000\000\000\000\003e\000\000\000\000\000\000\000\000\003y\000\219\000\000\000\000\003y\001\004\000\000\002\194\002\181\001\161\000\000\003\031\003&\000\213\000\000\000\000\000\214\000\000\000\220\001\017\003c\000\000\0038\000\000\000\205\000\223\000\000\000\000\000\000\004\217\003>\000\000\002\197\000\000\002\185\001m\003'\000\000\000\000\001\019\003c\000\000\000\000\000\000\006j\003w\000\000\001\188\003)\000\000\000\000\000\000\002\197\000\000\002\185\001m\000\000\000\000\000\000\000\000\000\000\003S\001\160\001\161\003e\000\000\000\000\000\000\000\000\003y\000\000\000\000\000\000\000\000\002\194\002\181\001\161\000\000\000\000\000\224\003\031\003&\001\162\001\193\003e\001\164\001\165\000\225\000\216\0038\000\226\000\000\000\000\000\227\000\228\001\016\000\000\003>\004\216\000\000\003\031\003&\000\000\000\219\000\000\003'\000\000\001\004\000\000\003c\000\000\000\000\000\000\002\023\003w\000\000\001\188\003)\004\223\000\232\000\220\002\197\000\247\002\185\001m\003'\000\205\000\223\003S\002*\002\028\001\160\001\161\000\000\003w\000\000\001\188\003)\003y\000\213\000\000\000\000\000\214\000\000\000\000\000\254\000\000\000\000\000\000\000\000\000\000\001\162\001\193\003e\001\164\001\165\000\000\000\000\003y\000\000\000\000\000\000\000\000\001\197\000\000\001\003\000\000\000\000\000\000\003\031\003&\000\000\000\000\000\000\000\000\001\170\003c\000\000\001m\000\000\000\000\000\224\000\000\001\198\000\000\000\000\000\000\004\245\002\197\000\225\002\185\001m\000\226\000\000\003'\000\227\000\228\006\159\000\000\001\199\001\251\000\000\000\000\003w\000\000\001\188\003)\000\000\000\000\000\000\002\029\000\000\002\030\000\000\000\216\000\000\000\000\000\000\000\000\000\000\003e\000\232\000\000\000\000\000\247\000\000\000\000\003y\000\000\000\219\000\000\000\000\001\197\001\004\002b\000\000\003\031\003&\000\000\000\000\000\000\000\000\000\000\000\000\001\170\000\000\000\220\001m\001\186\000\000\000\000\000\000\000\205\000\223\007\249\000\000\000\000\001\218\000\000\001\188\001\168\003'\000\000\000\000\001\160\001\161\000\000\000\000\000\000\000\000\003w\000\000\001\188\003)\000\000\000\000\000\000\000\000\000\000\000\000\001\202\000\000\001\203\000\000\001\162\001\193\000\000\001\164\001\165\001\160\001\161\000\000\002f\000\000\003y\006+\000\000\000\000\000\000\000\000\000\000\000\000\002~\000\000\000\000\000\000\002\130\000\224\000\205\001\162\001\193\000\000\001\164\001\165\000\000\000\225\001\198\001\186\000\226\001\160\001\161\000\227\000\228\001\016\000\000\000\000\001\218\000\000\001\188\001\168\000\000\000\000\001\199\001\200\000\000\000\000\000\000\000\000\000\000\001\162\001\193\001\198\001\164\001\165\000\000\000\000\000\000\000\232\000\000\000\000\000\247\000\000\000\000\000\000\000\000\002\131\000\000\001\199\001\215\000\000\000\000\002\132\002\137\000\000\000\000\001\197\000\000\000\000\000\000\000\000\000\000\001\198\000\000\000\000\002\138\001\160\001\161\001\170\000\000\000\000\001m\000\000\000\000\000\000\000\000\000\000\000\000\001\199\001\217\000\000\001\197\000\000\000\000\000\000\000\000\001\162\001\193\000\000\001\164\001\165\000\000\000\000\001\170\000\000\000\000\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\202\000\000\001\203\000\000\000\000\000\000\000\000\001\197\000\000\000\000\000\000\000\000\000\000\000\000\001\198\001\160\001\161\000\000\000\000\001\170\001\160\001\161\001m\000\000\000\000\001\202\000\000\001\203\000\000\000\000\001\199\001\250\000\000\000\000\000\000\001\162\001\193\001\186\001\164\001\165\001\162\001\193\000\000\001\164\001\165\000\000\001\218\000\000\001\188\001\168\000\000\000\000\000\000\000\000\000\000\001\202\000\000\001\203\000\000\002\194\002\181\001\161\001\186\001\197\000\000\000\000\000\000\001\198\000\000\000\000\000\000\001\218\001\198\001\188\001\168\001\170\001\160\001\161\001m\000\000\000\000\000\000\005\137\001\199\001\242\000\000\001\160\001\161\001\199\001\247\000\000\000\000\001\186\000\000\000\000\000\000\001\162\001\193\000\000\001\164\001\165\001\218\000\000\001\188\001\168\000\000\001\162\001\193\000\000\001\164\001\165\001\202\000\000\001\203\000\000\000\000\001\197\000\000\000\000\000\000\000\000\001\197\000\000\000\000\000\000\000\000\000\000\002\023\001\170\001\160\001\161\001m\000\000\001\170\000\000\000\000\001m\000\000\001\198\000\000\000\000\000\000\000\000\0027\002\028\000\000\000\000\000\000\001\186\001\162\001\193\000\000\001\164\001\165\001\199\002\026\000\000\001\218\000\000\001\188\001\168\002\196\000\000\000\000\001\202\000\000\001\203\000\000\000\000\001\202\000\000\001\203\000\000\002\197\000\000\002\185\001m\001\197\000\000\000\000\002\023\000\000\000\000\000\000\001\160\001\161\000\000\001\197\000\000\001\170\000\000\000\000\001m\000\000\000\000\000\000\002E\002\028\000\000\001\170\000\000\001\186\001m\000\000\001\162\001\193\001\186\001\164\001\165\000\000\001\218\000\000\001\188\001\168\000\000\001\218\000\000\001\188\001\168\000\000\000\000\003\031\003&\000\000\002\029\000\000\002\030\001\160\001\161\000\000\001\197\000\000\000\000\000\000\000\000\001\202\001\198\001\203\000\000\000\000\001\160\001\161\001\170\000\000\000\000\001m\003'\001\162\001\193\000\000\001\164\001\165\001\199\003\025\000\000\003(\000\000\001\188\003)\000\000\001\162\001\193\001\186\001\164\001\165\000\000\000\000\000\000\000\000\000\000\000\000\001\218\001\186\001\188\001\168\000\000\000\000\002\029\002\023\002\030\000\000\001\218\000\000\001\188\001\168\001\197\000\000\000\000\002\194\002\181\001\161\000\000\001\198\000\000\0045\002\028\000\000\001\170\000\000\000\000\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\199\0047\000\000\005\015\000\000\000\000\000\000\001\186\000\000\000\000\005\023\000\000\000\000\000\000\000\000\000\000\001\218\000\000\001\188\001\168\001\197\000\000\000\000\001\160\001\161\001\202\000\000\001\203\000\000\000\000\000\000\000\000\001\170\001\197\000\000\001m\001\160\001\161\005\024\000\000\000\000\000\000\000\000\001\162\001\193\001\170\001\164\001\165\001m\000\000\000\000\000\000\000\000\000\000\002b\000\000\001\162\002\252\000\000\001\164\001\165\000\000\001\186\000\000\000\000\000\000\000\000\002\029\000\000\002\030\000\000\001\218\000\000\001\188\001\168\001\198\000\000\000\000\000\000\000\000\000\000\001\202\002\196\001\203\000\000\000\000\001\160\001\161\000\000\000\000\000\000\001\199\005\215\000\000\005\026\000\000\002\185\001m\001\143\000\000\000\000\000\000\000\000\0072\000\000\001\186\001\162\002\252\000\000\001\164\001\165\000\000\002f\000\000\001\218\0063\001\188\001\168\001\186\000\000\000\000\000\000\002~\000\000\001\197\000\000\002\130\001\218\000\205\001\188\001\168\000\000\000\000\002\253\000\000\005\018\001\170\001\169\000\000\001m\000\000\000\000\003\031\003&\000\000\001\160\001\161\000\000\000\000\001\170\000\000\000\000\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007J\000\000\000\000\001\162\002\252\003'\001\164\001\165\000\000\000\000\001\202\000\000\001\203\002\131\003(\000\000\001\188\003)\000\000\002\132\002\137\000\000\000\000\000\000\000\000\001\169\007\154\000\000\000\000\000\000\002\253\000\000\002\138\000\000\000\000\000\000\000\000\001\170\000\213\000\000\001m\000\214\000\000\001\160\001\161\000\000\000\000\001\186\000\000\000\000\000\000\000\213\000\000\000\000\000\214\000\000\001\218\000\000\001\188\001\168\001\186\000\000\000\000\001\162\001\193\000\000\001\164\001\165\000\000\001\187\000\000\001\188\001\168\000\000\004\016\000\000\002\254\000\000\000\000\000\000\000\000\000\000\000\213\007\155\001\169\000\214\000\000\005\230\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\198\001\170\000\000\000\000\001m\000\000\004\027\004!\000\000\000\000\000\000\000\000\000\000\007=\000\000\001\186\001\199\007\219\000\216\000\000\000\000\000\000\000\000\005\230\001\187\000\000\001\188\001\168\000\000\000\000\000\000\000\216\000\000\000\219\000\000\000\000\000\000\000\000\000\000\000\000\002\254\000\000\000\000\000\000\007G\000\000\000\219\000\000\000\000\001\197\000\220\000\000\000\000\000\000\000\000\000\000\000\205\000\223\000\000\000\000\000\000\001\170\000\216\000\220\001m\004\027\004!\000\000\000\000\000\205\000\223\000\000\000\213\000\000\001\186\000\214\000\000\000\219\000\000\000\000\000\000\000\000\000\000\001\187\000\000\001\188\001\168\000\000\000\000\000\000\000\213\000\000\000\000\000\214\000\220\000\000\000\000\001\202\000\000\001\203\000\205\000\223\000\000\007`\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\225\000\000\000\000\000\226\000\000\000\224\000\227\000\228\001\"\006\183\000\000\000\000\000\000\000\225\000\000\001\186\000\226\000\000\000\000\000\227\000\228\005\239\000\000\000\000\001\218\000\000\001\188\001\168\000\216\000\000\000\000\000\000\000\232\000\000\000\000\000\247\000\224\006\184\bm\006\185\000\000\000\000\000\000\000\219\000\225\000\232\000\216\000\226\000\247\000\000\000\227\000\228\005\239\000\000\000\000\000\213\000\000\000\000\000\214\000\000\000\220\000\219\000\000\000\000\000\000\000\000\000\205\000\223\000\000\000\000\000\000\000\000\000\000\006\186\000\000\000\000\000\232\000\213\000\220\000\247\000\214\000\000\000\000\000\000\000\205\000\223\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\213\000\000\000\000\000\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\187\000\213\000\000\000\000\000\214\000\000\000\000\000\000\000\000\000\000\006\188\006\189\000\000\006\190\000\224\000\000\000\000\000\000\000\000\b\135\000\000\000\000\000\225\000\216\000\000\000\226\000\000\000\000\000\227\000\228\006o\000\000\000\224\000\000\000\000\000\000\006\250\000\000\000\219\000\000\000\225\000\000\000\000\000\226\000\000\000\216\000\227\000\228\006|\000\000\000\000\007\140\000\000\000\213\000\232\000\220\000\214\000\247\000\000\000\000\000\219\000\205\000\223\000\000\000\216\000\000\000\000\000\000\006\192\bo\000\000\000\000\000\232\006\194\006\204\000\247\000\216\000\220\000\000\000\219\000\000\000\000\000\000\000\205\000\223\000\000\000\000\006\246\000\000\000\213\000\000\000\219\000\214\000\000\000\000\000\000\000\220\000\000\000\000\000\000\000\000\000\213\000\205\000\223\000\214\006\247\000\000\000\000\000\220\000\000\000\000\000\000\000\000\000\000\000\205\000\223\000\224\000\000\000\000\000\000\000\213\000\000\000\000\000\214\000\225\000\000\000\000\000\226\000\216\000\000\000\227\000\228\b\136\000\000\000\000\000\000\000\000\000\000\000\224\000\000\000\000\000\000\000\000\000\219\000\000\000\000\000\225\000\000\000\000\000\226\000\000\000\000\000\227\000\228\001 \000\000\000\232\000\224\000\000\000\247\000\220\000\000\000\000\000\000\000\216\000\225\000\205\000\223\000\226\000\224\000\000\000\227\000\228\000\229\000\000\000\000\000\216\000\225\000\232\000\219\000\226\000\247\000\000\000\227\000\228\001$\000\000\000\000\000\000\000\000\000\000\000\219\000\000\000\000\000\000\000\216\000\220\000\232\000\000\000\000\000\247\000\213\000\205\000\223\000\214\000\000\000\000\000\000\000\220\000\232\000\219\000\000\000\247\000\000\000\205\000\223\000\000\000\000\000\000\000\000\000\213\000\224\000\000\000\214\000\000\000\000\000\000\000\220\000\000\000\225\000\000\000\000\000\226\000\205\000\223\000\227\000\228\0019\000\000\000\000\000\000\000\000\000\213\000\000\000\000\000\214\000\000\000\000\000\000\000\000\000\000\000\213\000\000\000\000\000\214\000\000\000\000\000\224\000\000\000\000\000\000\000\232\000\000\000\000\000\247\000\225\000\000\000\000\000\226\000\224\000\000\000\227\000\228\001@\000\000\000\000\000\216\000\225\000\000\000\000\000\226\000\000\000\000\000\227\000\228\001\129\000\000\000\000\000\224\000\000\000\000\000\219\000\000\000\000\000\000\000\216\000\225\000\232\000\000\000\226\000\247\000\000\000\227\000\228\001\136\000\000\000\000\000\000\000\220\000\232\000\219\000\000\000\247\000\000\000\205\000\223\000\000\000\216\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\216\000\220\000\232\000\000\000\000\000\247\000\219\000\205\000\223\000\000\000\000\000\000\000\000\000\000\000\000\000\219\000\213\000\000\000\000\000\214\000\000\000\000\000\000\000\220\000\000\000\000\000\000\000\000\000\213\000\205\000\223\000\214\000\220\000\000\000\000\000\000\000\000\000\000\000\205\000\223\000\000\000\000\000\000\000\224\000\000\000\000\000\000\000\213\000\000\000\000\000\214\000\225\000\000\000\000\000\226\000\000\000\000\000\227\000\228\001\148\000\000\000\000\000\224\000\000\000\000\000\213\000\000\000\000\000\214\000\000\000\225\000\000\000\000\000\226\000\000\000\000\000\227\000\228\001\181\000\000\000\000\000\000\000\000\000\232\000\224\000\000\000\247\000\000\000\000\000\000\000\000\000\216\000\225\000\224\000\000\000\226\000\000\000\000\000\227\000\228\001\209\000\225\000\232\000\216\000\226\000\247\000\219\000\227\000\228\001\236\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\219\000\000\000\000\000\000\000\216\000\220\000\232\000\000\000\000\000\247\000\000\000\205\000\223\000\000\000\000\000\232\000\000\000\220\000\247\000\219\000\000\000\000\000\216\000\205\000\223\000\000\000\000\000\000\000\000\000\213\000\000\000\000\000\214\000\000\000\000\000\000\000\220\000\219\000\000\000\000\000\000\000\000\000\205\000\223\000\000\000\000\000\000\000\000\000\000\000\213\000\000\000\000\000\214\000\000\000\220\000\000\000\000\000\000\000\000\000\213\000\205\000\223\000\214\000\000\001\160\001\161\000\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\225\000\000\000\000\000\226\000\224\000\000\000\227\000\228\001\244\000\000\001\162\002\252\000\225\001\164\001\165\000\226\000\000\000\000\000\227\000\228\002$\000\000\000\213\000\224\000\000\000\214\000\000\000\000\000\000\000\000\000\216\000\225\000\232\000\000\000\226\000\247\000\000\000\227\000\228\0021\000\000\000\224\000\000\000\000\000\232\000\219\000\000\000\247\000\000\000\225\000\216\000\000\000\226\000\000\000\000\000\227\000\228\002?\000\213\000\000\000\216\000\214\000\220\000\232\000\000\000\219\000\247\000\000\000\205\000\223\000\000\000\000\000\000\000\000\000\000\000\219\000\000\000\000\000\000\000\000\000\000\000\232\000\220\000\000\000\247\000\000\000\000\000\000\000\205\000\223\000\000\001\169\000\220\000\000\000\000\000\000\000\000\000\216\000\205\000\223\000\000\000\000\000\213\001\170\000\000\000\214\001m\000\000\000\000\000\000\000\000\000\000\000\219\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\213\000\224\000\000\000\214\000\000\000\000\000\000\000\220\000\000\000\225\000\000\000\216\000\226\000\205\000\223\000\227\000\228\002K\000\000\000\000\007\154\000\224\000\000\000\000\000\000\000\000\000\219\000\000\000\000\000\225\000\000\000\224\000\226\000\000\000\000\000\227\000\228\002t\000\000\000\225\000\000\000\232\000\226\000\220\000\247\000\227\000\228\002v\000\000\000\205\000\223\000\000\000\000\000\213\001\186\000\216\000\214\000\000\000\000\000\000\000\000\000\232\000\000\001\187\000\247\001\188\001\168\000\000\000\224\000\000\000\219\000\232\000\000\000\000\000\247\000\216\000\225\007\163\000\000\000\226\000\000\000\000\000\227\000\228\002\215\000\000\000\000\000\220\000\000\000\000\000\219\000\000\000\000\000\205\000\223\000\000\000\000\000\000\000\000\000\213\000\000\000\000\000\214\000\000\000\224\000\000\000\000\000\220\000\232\000\000\000\000\000\247\000\225\000\205\000\223\000\226\000\000\000\000\000\227\000\228\002\240\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\216\000\000\000\000\002\194\002\181\001\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\219\000\232\000\000\000\000\000\247\000\224\000\213\000\000\000\000\000\214\000\000\004\158\000\000\000\225\000\000\000\000\000\226\000\220\000\000\000\227\000\228\004\r\000\000\000\205\000\223\000\224\000\000\000\000\000\000\000\000\000\000\000\216\000\000\000\225\000\000\000\000\000\226\000\000\000\000\000\227\000\228\004\020\000\000\000\000\000\000\000\232\000\219\000\213\000\247\000\000\000\214\000\000\000\000\000\000\000\000\000\000\000\213\000\000\000\000\000\214\000\000\000\000\000\000\000\220\000\000\000\232\000\000\000\000\000\247\000\205\000\223\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\224\000\000\000\000\000\216\000\000\000\000\000\000\000\000\000\225\000\000\000\000\000\226\002\196\000\000\000\227\000\228\004$\000\000\000\219\000\000\000\000\000\000\000\000\000\000\002\197\000\000\002\185\001m\000\213\000\000\000\000\000\214\000\000\000\000\000\000\000\220\000\000\000\000\000\000\000\000\000\232\000\205\000\223\000\247\000\216\000\000\000\224\000\000\000\000\000\000\000\000\000\000\000\000\000\216\000\225\000\000\000\000\000\226\000\000\000\219\000\227\000\228\004/\000\000\004\160\000\000\000\000\000\000\000\219\000\000\000\000\000\000\003\031\003&\000\213\000\000\000\220\000\214\000\000\000\000\000\000\000\000\000\205\000\223\000\213\000\220\000\232\006\160\000\000\000\247\000\000\000\205\000\223\000\000\000\000\000\000\000\224\003'\000\000\000\000\000\000\000\000\000\000\000\216\000\225\000\000\003(\000\226\001\188\003)\000\227\000\228\005\232\000\000\000\000\000\000\000\000\000\000\000\219\000\213\000\000\000\000\006\160\000\000\000\213\000\000\000\000\006\160\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\220\000\232\000\224\000\000\000\247\000\000\000\205\000\223\000\000\000\000\000\225\000\224\000\000\000\226\000\216\000\000\000\227\000\228\006H\000\225\000\213\000\000\000\226\006\160\006\162\000\227\000\228\006T\000\000\000\219\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\219\000\000\000\000\000\232\000\000\000\000\000\247\000\220\000\000\000\000\000\000\000\000\000\232\000\205\000\223\000\247\000\000\000\220\000\000\000\000\006\162\000\000\000\224\000\205\006\165\006\162\000\000\000\000\000\000\000\000\000\225\000\000\000\000\000\226\000\000\000\219\000\227\000\228\006n\000\000\000\219\000\213\000\000\000\000\006\160\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\220\000\000\000\000\000\000\006\162\000\220\000\205\006\165\000\000\000\000\000\232\000\205\006\165\000\247\000\000\000\000\000\224\000\000\000\000\000\219\000\213\000\000\000\000\000\214\000\225\000\000\000\000\000\226\000\000\000\000\000\227\000\228\006~\000\000\000\225\000\000\000\220\006\166\000\000\000\000\000\227\000\228\000\205\006\165\000\000\000\000\000\000\000\000\000\000\000\000\006q\000\000\006\171\000\000\006\168\000\000\000\232\000\000\000\000\000\247\000\213\000\000\000\000\006\160\006\162\000\000\000\232\000\000\000\000\000\225\000\000\000\000\006\166\000\000\000\225\000\227\000\228\006\166\000\000\000\219\000\227\000\228\000\000\000\000\000\000\006q\000\000\006\170\000\000\006\168\006q\000\000\006\169\000\000\006\168\000\216\000\220\000\000\000\000\000\000\000\000\000\232\000\205\006\165\000\213\000\225\000\232\000\214\006\166\000\000\000\219\000\227\000\228\000\000\000\000\000\000\000\213\000\000\000\000\000\214\000\000\006q\000\000\006\167\000\000\006\168\000\000\000\220\000\000\000\000\000\000\000\000\000\000\000\205\000\223\006\162\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\000\000\000\219\000\000\000\000\000\000\000\000\000\000\000\000\000\213\000\000\000\000\006\160\000\000\000\000\000\000\000\000\000\225\000\000\000\220\006\166\000\000\000\000\000\227\000\228\000\205\006\165\000\000\000\000\000\000\000\000\000\216\000\000\006q\000\000\006\179\000\000\006\168\000\000\000\000\000\224\000\000\000\000\000\216\000\000\000\000\000\219\000\000\000\225\000\232\000\000\000\226\000\000\000\000\000\227\000\228\007\026\000\000\000\219\000\213\000\000\000\000\000\214\000\220\000\000\000\000\000\000\000\000\000\213\000\205\000\223\000\214\000\000\000\000\000\000\000\220\000\000\000\000\000\000\000\000\000\232\000\205\000\223\000\247\006\162\000\000\000\000\000\000\000\225\000\000\000\000\006\166\000\000\000\000\000\227\000\228\000\000\000\000\000\000\000\219\000\000\000\000\000\000\000\000\006q\000\000\007\127\000\000\006\168\000\213\000\000\000\000\000\214\000\000\000\000\000\000\000\220\000\000\000\213\000\000\000\232\000\214\000\205\006\165\000\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\225\000\000\000\216\000\226\000\224\000\000\000\227\000\228\007,\000\000\000\000\000\216\000\225\000\000\000\000\000\226\000\000\000\219\000\227\000\228\007D\000\000\000\000\000\000\000\000\000\000\000\219\000\213\000\000\000\000\000\214\000\000\000\232\000\000\000\220\000\247\000\000\000\000\000\000\000\000\000\205\000\223\000\000\000\220\000\232\000\000\000\000\000\247\000\000\000\205\000\223\000\000\000\216\000\225\000\000\000\000\006\166\000\000\000\000\000\227\000\228\000\216\000\000\000\000\002\194\002\181\001\161\000\219\000\000\006q\000\000\007\151\000\000\006\168\000\000\000\000\000\219\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\220\000\232\000\000\005\155\000\000\000\000\000\205\000\223\000\000\000\220\000\000\000\224\000\000\000\000\000\000\000\205\000\223\000\000\000\216\000\225\000\224\000\000\000\226\000\000\000\000\000\227\000\228\007\213\000\225\000\000\000\000\000\226\000\000\000\219\000\227\000\228\007\223\000\000\000\000\002\194\002\181\001\161\000\000\002\194\002\181\001\161\000\000\000\000\000\000\000\000\000\220\000\232\000\000\000\000\000\247\000\000\000\205\000\223\000\000\000\000\000\232\000\224\005\029\000\247\000\000\000\000\002\195\001\160\001\161\000\225\000\224\000\000\000\226\000\000\000\000\000\227\000\228\b:\000\225\000\000\000\000\000\226\002\196\000\000\000\227\000\228\b=\001\162\001\175\000\000\001\164\001\165\000\000\000\000\002\197\000\000\002\185\001m\002\194\002\181\001\161\000\232\000\000\000\000\000\247\002\194\002\181\001\161\000\000\000\000\000\232\000\224\000\000\000\247\000\000\002\194\002\181\001\161\000\000\000\225\000\000\002\218\000\226\000\000\000\000\000\227\000\228\000\000\002\220\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\017\000\000\000\000\002\196\003\031\003&\000\000\002\196\000\000\000\000\000\000\000\000\000\000\000\232\000\000\002\197\002q\002\185\001m\002\197\000\000\002\185\001m\000\000\000\000\000\000\000\000\000\000\000\000\003'\001\169\000\000\002\194\002\181\001\161\000\000\000\000\000\000\003(\000\000\001\188\003)\001\170\000\000\000\000\001m\000\000\000\000\000\000\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\002\196\003\031\003&\000\000\000\000\003\031\003&\002\196\000\000\000\000\000\000\000\000\002\197\000\000\002\185\001m\000\000\002\196\000\000\002\197\000\000\002\185\001m\002\194\002\181\001\161\003'\000\000\000\000\002\197\003'\002\185\001m\000\000\000\000\003(\000\000\001\188\003)\003(\000\000\001\188\003)\000\000\000\000\000\000\003%\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\003\031\003&\001\187\000\000\001\188\001\168\000\000\003\031\003&\000\000\000\000\000\000\002\196\000\000\000\000\000\000\000\000\003\031\003&\000\000\000\000\000\000\000\000\000\000\002\197\003'\002\185\001m\000\000\002\194\002\181\001\161\003'\000\000\003(\000\000\001\188\003)\000\000\000\000\000\000\003(\003'\001\188\003)\000\000\000\000\000\000\000\000\000\000\000\000\003(\003,\001\188\003)\002\194\002\181\001\161\000\000\000\000\000\000\002\194\002\181\001\161\000\000\002\196\000\000\000\000\002\194\002\181\001\161\000\000\003\031\003&\000\000\000\000\000\000\002\197\003H\002\185\001m\002\194\002\181\001\161\003J\000\000\000\000\002\194\002\181\001\161\000\000\003\\\001\160\001\161\000\000\000\000\000\000\003'\000\000\000\000\000\000\000\000\000\000\000\000\003d\000\000\003(\000\000\001\188\003)\003x\000\000\001\162\001\185\000\000\001\164\001\165\000\000\000\000\002\194\002\181\001\161\000\000\000\000\000\000\003\031\003&\000\000\000\000\000\000\000\000\002\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\248\002\197\000\000\002\185\001m\000\000\000\000\000\000\003'\000\000\000\000\000\000\000\000\000\000\000\000\002\196\000\000\003(\000\000\001\188\003)\002\196\000\000\000\000\000\000\000\000\000\000\002\197\002\196\002\185\001m\000\000\000\000\002\197\000\000\002\185\001m\000\000\000\000\000\000\002\197\002\196\002\185\001m\002\194\002\181\001\161\002\196\000\000\003\031\003&\001\169\000\000\002\197\000\000\002\185\001m\000\000\000\000\002\197\000\000\002\185\001m\001\170\000\000\000\000\001m\004\240\000\000\000\000\000\000\000\000\000\000\000\000\003'\003\031\003&\000\213\000\000\002\196\000\214\003\031\003&\003(\000\000\001\188\003)\000\000\003\031\003&\000\000\002\197\000\000\002\185\001m\000\000\000\000\000\000\000\000\000\000\003'\003\031\003&\000\000\000\000\000\000\003'\003\031\003&\003(\000\000\001\188\003)\003'\000\000\003(\000\000\001\188\003)\000\000\000\000\006\183\003(\000\000\001\188\003)\003'\000\000\000\000\000\000\000\000\000\000\003'\000\000\000\000\003(\001\186\001\188\003)\003\031\003&\003(\000\000\001\188\003)\001\187\002\196\001\188\001\168\006\184\000\000\006\185\000\216\000\000\000\000\002\194\002\181\001\161\002\197\000\000\002\185\001m\000\000\000\000\003'\000\000\000\000\000\219\000\000\000\000\000\000\000\000\000\000\003(\000\000\001\188\003)\000\000\007\229\000\000\000\000\002\194\002\181\001\161\000\220\006\186\000\000\000\000\001\160\001\161\000\205\000\223\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\244\000\000\003\031\003&\001\162\001\196\000\000\001\164\001\165\001\160\001\161\000\000\000\000\000\000\000\000\006\187\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\188\006\189\003'\006\190\001\162\001\213\000\000\001\164\001\165\000\000\000\000\003(\000\000\001\188\003)\000\000\000\224\007\167\007\167\000\000\000\000\000\000\000\000\000\000\000\225\000\000\006\191\000\226\002\196\000\000\000\227\000\228\b\193\b\193\000\000\b\194\b\194\000\000\007\170\007\170\002\197\000\000\002\185\001m\000\000\000\000\000\000\007\171\007\171\000\000\000\000\000\000\000\000\000\000\002\196\000\000\000\232\000\000\006\192\005V\001\169\000\000\000\000\006\194\006\204\000\000\002\197\000\000\002\185\001m\000\000\000\000\001\170\000\000\000\000\001m\000\000\006\246\000\000\000\000\000\000\007\172\007\172\000\000\000\000\001\169\000\000\000\000\003\031\003&\000\000\000\000\000\000\000\000\000\000\006\247\000\000\001\170\000\000\000\000\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\160\001\161\000\000\000\000\003'\003\031\003&\007\173\007\173\000\000\000\000\000\000\000\000\003(\000\000\001\188\003)\007\174\007\174\000\000\001\162\001\225\000\000\001\164\001\165\000\000\000\000\000\000\000\000\000\000\003'\001\160\001\161\000\000\000\000\000\000\001\186\b\199\b\204\003(\000\000\001\188\003)\000\000\000\000\001\187\000\000\001\188\001\168\000\000\000\000\001\162\001\240\000\000\001\164\001\165\007\176\007\176\000\000\000\000\000\000\001\186\001\160\001\161\000\000\000\000\000\000\001\160\001\161\000\000\001\187\000\000\001\188\001\168\007\177\007\177\000\000\000\000\000\000\007\179\007\179\000\000\001\162\002\021\000\000\001\164\001\165\001\162\002(\000\000\001\164\001\165\000\000\007\181\007\181\000\000\000\000\000\000\001\160\001\161\000\000\001\169\000\000\001\160\001\161\000\000\000\000\000\000\000\000\000\000\000\000\007\182\007\182\001\170\000\000\000\000\001m\000\000\001\162\0025\000\000\001\164\001\165\001\162\0029\000\000\001\164\001\165\000\000\001\160\001\161\000\000\001\169\000\000\001\160\001\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\170\000\000\000\000\001m\000\000\001\162\002C\000\000\001\164\001\165\001\162\002\251\000\000\001\164\001\165\000\000\000\000\000\000\000\000\001\169\000\000\000\000\000\000\000\000\001\169\001\160\001\161\000\000\000\000\000\000\000\000\001\170\000\000\000\000\001m\000\000\001\170\000\000\000\000\001m\000\000\000\000\001\186\000\000\007\167\001\162\0043\000\000\001\164\001\165\000\000\001\187\000\000\001\188\001\168\001\169\000\000\000\000\000\000\000\000\001\169\000\000\007\168\000\000\000\000\007\170\000\000\001\170\000\000\007\167\001m\000\000\001\170\001\186\007\171\001m\000\000\000\000\000\000\000\000\000\000\000\000\001\187\000\000\001\188\001\168\001\169\007\168\000\000\000\000\007\170\001\169\000\000\000\000\000\000\000\000\000\000\000\000\001\170\007\171\000\000\001m\000\000\001\170\001\186\000\000\001m\000\000\007\172\001\186\000\000\001\160\001\161\001\187\000\000\001\188\001\168\000\000\001\187\000\000\001\188\001\168\000\000\000\000\000\000\000\000\001\169\000\000\000\000\007\167\000\000\001\162\007\204\007\172\001\164\001\165\000\000\000\000\001\170\000\000\001\186\001m\000\000\007\173\000\000\001\186\000\000\007\168\000\000\001\187\007\170\001\188\001\168\007\174\001\187\000\000\001\188\001\168\000\000\007\171\000\000\000\000\000\000\000\000\000\000\000\000\000\213\000\000\007\173\000\214\000\000\001\186\000\000\000\000\001\160\001\161\001\186\007\175\007\174\000\000\001\187\000\000\001\188\001\168\000\000\001\187\000\000\001\188\001\168\000\000\000\000\000\000\007\176\007\172\001\162\007\217\000\000\001\164\001\165\000\000\000\000\000\000\007\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\177\001\186\001\169\000\213\000\000\007\179\000\214\007\176\000\000\000\000\001\187\000\000\001\188\001\168\001\170\000\000\000\000\001m\007\173\007\181\000\000\000\000\000\000\000\000\000\000\007\177\000\000\000\000\007\174\000\000\007\179\000\216\000\000\000\000\000\000\000\000\000\000\007\182\000\000\000\000\000\000\000\000\000\000\000\000\007\181\000\000\000\219\000\000\000\000\000\000\000\000\000\000\007\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\182\000\220\000\000\001\169\000\000\007\176\000\000\000\205\000\223\000\000\000\000\000\000\000\000\000\000\000\000\001\170\000\216\000\000\001m\000\000\000\000\000\000\000\000\007\177\000\000\001\186\000\000\000\000\007\179\000\000\000\000\000\219\000\000\000\000\001\187\000\000\001\188\001\168\000\000\000\000\000\000\000\000\007\181\000\000\000\000\000\000\000\000\000\000\000\220\000\000\000\000\000\000\000\000\000\000\000\205\000\223\000\000\000\000\000\000\000\000\007\182\000\000\b.\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\225\000\000\000\000\000\226\000\000\000\000\000\227\000\228\000\000\000\000\000\000\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\000\000\000\000\001\187\000\000\001\188\001\168\000\000\000\232\000\000\000\000\000\000\000\000\000\000\000\000\b3\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\225\000\000\000\000\000\226\000\000\000\000\000\227\000\228\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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")) and semantic_action = [| @@ -1526,9 +1545,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4017 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4413 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "+" ) -# 1532 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1551 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1551,9 +1570,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4018 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4414 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "+." ) -# 1557 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1576 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1576,9 +1595,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = -# 3548 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3832 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 1582 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1601 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1591,14 +1610,14 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = tyvar; - MenhirLib.EngineTypes.startp = _startpos_tyvar_; - MenhirLib.EngineTypes.endp = _endpos_tyvar_; + 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 = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -1614,33 +1633,46 @@ module Tables = struct }; }; } = _menhir_stack in - let tyvar : (string) = Obj.magic tyvar in - let _3 : unit = Obj.magic _3 in + let _2_inlined1 : (string) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in let _2 : unit = Obj.magic _2 in let ty : (Parsetree.core_type) = Obj.magic ty in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_ty_ in - let _endpos = _endpos_tyvar_ in + let _endpos = _endpos__2_inlined1_ in let _v : (Parsetree.core_type) = let _1 = - let _1 = -# 3551 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _1 = + let tyvar = + let (_endpos__2_, _2) = (_endpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3780 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _2 _sloc ) +# 1654 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3835 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Ptyp_alias(ty, tyvar) ) -# 1629 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let (_endpos__1_, _startpos__1_) = (_endpos_tyvar_, _startpos_ty_) in +# 1660 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__2_inlined1_, _startpos_ty_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mktyp ~loc:_sloc _1 ) -# 1638 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1670 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3553 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3837 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 1644 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1676 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1687,30 +1719,30 @@ module Tables = struct let _v : (Ast_helper.let_binding) = let attrs2 = let _1 = _1_inlined2 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 1693 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1725 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_attrs2_ = _endpos__1_inlined2_ in let attrs1 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 1702 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1734 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2898 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let attrs = attrs1 @ attrs2 in mklb ~loc:_sloc false body attrs ) -# 1714 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1746 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1733,9 +1765,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3901 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4297 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 1739 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1771 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1758,9 +1790,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3902 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4298 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Lident _1 ) -# 1764 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1796 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1772,214 +1804,20 @@ module Tables = struct (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 = _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 : unit = Obj.magic _3 in - let _2 : (Parsetree.core_type) = 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 : (Parsetree.core_type) = -# 3609 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _2 ) -# 1803 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.semv = type_; + MenhirLib.EngineTypes.startp = _startpos_type__; + MenhirLib.EngineTypes.endp = _endpos_type__; 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 = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 _5 : unit = Obj.magic _5 in - let _1_inlined3 : (Parsetree.module_type) = Obj.magic _1_inlined3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let type_ : (Parsetree.core_type) = Obj.magic type_ in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Parsetree.core_type) = let _4 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3669 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in - let descr = Ptyp_package (lid, cstrs) in - mktyp ~loc:_sloc ~attrs descr ) -# 1870 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _3 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 1880 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 1886 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos = _endpos__5_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3611 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( wrap_typ_attrs ~loc:_sloc (reloc_typ ~loc:_sloc _4) _3 ) -# 1895 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (string) = 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.core_type) = let _1 = - let _1 = -# 3614 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_var _2 ) -# 1928 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos__1_ = _endpos__2_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mktyp ~loc:_sloc _1 ) -# 1937 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3646 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 1943 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : unit = 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.core_type) = let _1 = - let _1 = -# 3616 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_any ) -# 1969 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mktyp ~loc:_sloc _1 ) -# 1977 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3646 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 1983 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_type__ in + let _endpos = _endpos_type__ in + let _v : (Parsetree.core_type) = +# 4013 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( type_ ) +# 1821 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2008,35 +1846,35 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 2014 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1852 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let tys = -# 3661 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4046 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [] ) -# 2020 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1858 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3619 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_constr(tid, tys) ) -# 2025 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4017 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_constr (tid, tys) ) +# 1863 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mktyp ~loc:_sloc _1 ) -# 2034 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1872 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3646 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 2040 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1878 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2072,20 +1910,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 2078 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1916 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let tys = -# 3663 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [ty] ) -# 2084 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4048 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ ty ] ) +# 1922 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3619 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_constr(tid, tys) ) -# 2089 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4017 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_constr (tid, tys) ) +# 1927 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _startpos__1_ = _startpos_ty_ in @@ -2093,15 +1931,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mktyp ~loc:_sloc _1 ) -# 2099 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1937 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3646 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 2105 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1943 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2152,9 +1990,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 2158 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1996 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let tys = @@ -2162,24 +2000,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 2166 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1166 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1225 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 2171 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2009 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3665 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4050 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( tys ) -# 2177 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2015 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3619 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_constr(tid, tys) ) -# 2183 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4017 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_constr (tid, tys) ) +# 2021 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -2187,118 +2025,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mktyp ~loc:_sloc _1 ) -# 2193 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3646 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 2199 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _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 : unit = Obj.magic _3 in - let _2 : (Parsetree.object_field list * Asttypes.closed_flag) = 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 : (Parsetree.core_type) = let _1 = - let _1 = -# 3621 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let (f, c) = _2 in Ptyp_object (f, c) ) -# 2239 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mktyp ~loc:_sloc _1 ) -# 2248 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3646 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 2254 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.core_type) = let _1 = - let _1 = -# 3623 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_object ([], Closed) ) -# 2287 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos__1_ = _endpos__2_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mktyp ~loc:_sloc _1 ) -# 2296 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3646 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 2302 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2334,20 +2069,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 2340 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let tys = -# 3661 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4046 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [] ) -# 2346 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2081 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3627 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_class(cid, tys) ) -# 2351 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4021 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_class (cid, tys) ) +# 2086 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _startpos__1_ = _startpos__2_ in @@ -2355,15 +2090,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mktyp ~loc:_sloc _1 ) -# 2361 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2096 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3646 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 2367 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2102 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2406,20 +2141,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 2412 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2147 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let tys = -# 3663 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [ty] ) -# 2418 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4048 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ ty ] ) +# 2153 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3627 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_class(cid, tys) ) -# 2423 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4021 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_class (cid, tys) ) +# 2158 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _startpos__1_ = _startpos_ty_ in @@ -2427,15 +2162,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mktyp ~loc:_sloc _1 ) -# 2433 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2168 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3646 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 2439 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2174 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2493,9 +2228,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 2499 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2234 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let tys = @@ -2503,24 +2238,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 2507 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2242 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1166 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1225 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 2512 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2247 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3665 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4050 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( tys ) -# 2518 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2253 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3627 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_class(cid, tys) ) -# 2524 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4021 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_class (cid, tys) ) +# 2259 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -2528,15 +2263,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mktyp ~loc:_sloc _1 ) -# 2534 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2269 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3646 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2275 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2549,9 +2284,9 @@ 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 = type_; + MenhirLib.EngineTypes.startp = _startpos_type__; + MenhirLib.EngineTypes.endp = _endpos_type__; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -2566,288 +2301,44 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : unit = Obj.magic _3 in - let _2 : (Parsetree.row_field) = 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 : (Parsetree.core_type) = let _1 = - let _1 = -# 3630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_variant([_2], Closed, None) ) -# 2580 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mktyp ~loc:_sloc _1 ) -# 2589 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3646 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 2595 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Parsetree.row_field list) = Obj.magic xs in + let type_ : (Parsetree.core_type) = Obj.magic type_ 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__4_ in - let _v : (Parsetree.core_type) = let _1 = - let _1 = - let _3 = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 2645 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1138 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 2650 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3675 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 2656 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3632 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_variant(_3, Closed, None) ) -# 2662 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos__1_ = _endpos__4_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mktyp ~loc:_sloc _1 ) -# 2672 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3646 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 2678 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - 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 xs : (Parsetree.row_field list) = Obj.magic xs in - let _3 : unit = Obj.magic _3 in - let _2 : (Parsetree.row_field) = 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 : (Parsetree.core_type) = let _1 = - let _1 = - let _4 = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 2735 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1138 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 2740 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3675 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 2746 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_variant(_2 :: _4, Closed, None) ) -# 2752 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos__1_ = _endpos__5_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mktyp ~loc:_sloc _1 ) -# 2762 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3646 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 2768 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Parsetree.row_field list) = Obj.magic xs in - let _2 : (unit option) = Obj.magic _2 in - let _1 : unit = Obj.magic _1 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 _endpos = _endpos_type__ in let _v : (Parsetree.core_type) = let _1 = let _1 = - let _3 = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 2818 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1138 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 2823 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let mod_ident = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3675 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 2829 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 2320 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3636 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_variant(_3, Open, None) ) -# 2835 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4025 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_open (mod_ident, type_) ) +# 2326 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos__1_ = _endpos__4_ in + let _endpos__1_ = _endpos_type__ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mktyp ~loc:_sloc _1 ) -# 2845 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2336 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3646 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 2851 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2342 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2860,9 +2351,9 @@ module Tables = struct 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.semv = ident; + MenhirLib.EngineTypes.startp = _startpos_ident_; + MenhirLib.EngineTypes.endp = _endpos_ident_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -2871,231 +2362,31 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : unit = Obj.magic _2 in + let ident : (string) = Obj.magic ident 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 _endpos = _endpos_ident_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3638 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_variant([], Open, None) ) -# 2884 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4027 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_var ident ) +# 2375 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos__1_ = _endpos__2_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mktyp ~loc:_sloc _1 ) -# 2893 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3646 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 2899 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Parsetree.row_field list) = Obj.magic xs in - let _2 : (unit option) = 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.core_type) = let _1 = - let _1 = - let _3 = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1138 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 2954 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3675 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 2960 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3640 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_variant(_3, Closed, Some []) ) -# 2966 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos__1_ = _endpos__4_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mktyp ~loc:_sloc _1 ) -# 2976 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3646 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 2982 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs_inlined1; - MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; - MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; - 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 = 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 _6 : unit = Obj.magic _6 in - let xs_inlined1 : (string list) = Obj.magic xs_inlined1 in - let _4 : unit = Obj.magic _4 in - let xs : (Parsetree.row_field list) = Obj.magic xs in - let _2 : (unit option) = 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__6_ in - let _v : (Parsetree.core_type) = let _1 = - let _1 = - let _5 = - let xs = xs_inlined1 in - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 3047 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1106 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 3052 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3703 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 3058 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _3 = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 3066 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1138 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 3071 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3675 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 3077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3642 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_variant(_3, Closed, Some _5) ) -# 3083 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos__1_ = _endpos__6_ in + let _endpos__1_ = _endpos_ident_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mktyp ~loc:_sloc _1 ) -# 3093 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2384 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3646 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 3099 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2390 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3113,29 +2404,29 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Parsetree.extension) = Obj.magic _1 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__1_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3644 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_extension _1 ) -# 3125 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4029 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_any ) +# 2416 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mktyp ~loc:_sloc _1 ) -# 3133 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2424 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3646 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 3139 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2430 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3159,23 +2450,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (string Location.loc) = let _1 = let _1 = -# 4084 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4481 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 3165 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2456 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1034 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1072 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkloc _1 (make_loc _sloc) ) -# 3173 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2464 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 4086 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4483 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 3179 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2470 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3213,24 +2504,51 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (string Location.loc) = let _1 = let _1 = -# 4085 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4482 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ^ "." ^ _3.txt ) -# 3219 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2510 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1034 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1072 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkloc _1 (make_loc _sloc) ) -# 3228 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2519 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 4086 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4483 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 3234 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2525 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = +# 4538 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Builtin_attributes.mark_payload_attrs_used _1; + _1 + ) +# 2552 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3277,9 +2595,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 4090 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Attr.mk ~loc:(make_loc _sloc) _2 _3 ) -# 3283 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4487 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mk_attr ~loc:(make_loc _sloc) _2 _3 ) +# 2601 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3302,9 +2620,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.class_expr) = -# 2025 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2082 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 3308 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2626 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3343,18 +2661,18 @@ module Tables = struct let _v : (Parsetree.class_expr) = let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 3349 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2667 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2027 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2084 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_class_attrs ~loc:_sloc _3 _2 ) -# 3358 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2676 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3394,9 +2712,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2029 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2086 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( class_of_let_bindings ~loc:_sloc _1 _3 ) -# 3400 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2718 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3459,34 +2777,34 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 3465 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2783 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__5_ = _endpos__1_inlined2_ in let _4 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 3474 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _3 = -# 4009 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4405 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Fresh ) -# 3480 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2798 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2088 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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)) ) -# 3490 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2808 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3556,37 +2874,37 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 3562 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2880 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__5_ = _endpos__1_inlined3_ in let _4 = let _1 = _1_inlined2 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 3571 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2889 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _3 = let _1 = _1_inlined1 in -# 4010 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4406 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Override ) -# 3579 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2897 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2088 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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)) ) -# 3590 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2908 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3616,9 +2934,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.class_expr) = -# 2035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2092 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Cl.attr _1 _2 ) -# 3622 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2940 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3653,18 +2971,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 3657 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2975 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1106 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1144 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 3662 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2980 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2038 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2095 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pcl_apply(_1, _2) ) -# 3668 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2986 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos_xs_ in @@ -3672,15 +2990,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1057 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1095 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkclass ~loc:_sloc _1 ) -# 3678 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2996 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 3684 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3002 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3704,23 +3022,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 2040 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2097 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pcl_extension _1 ) -# 3710 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3028 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1057 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1095 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkclass ~loc:_sloc _1 ) -# 3718 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3036 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 3724 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3773,33 +3091,33 @@ module Tables = struct let _v : (Parsetree.class_field) = let _6 = let _1 = _1_inlined2 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 3779 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3097 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__6_ = _endpos__1_inlined2_ in let _3 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 3788 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3106 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _2 = -# 4009 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4405 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Fresh ) -# 3794 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3112 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2096 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2153 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_inherit (_2, _4, self)) ~attrs:(_3@_6) ~docs ) -# 3803 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3121 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3859,36 +3177,36 @@ module Tables = struct let _v : (Parsetree.class_field) = let _6 = let _1 = _1_inlined3 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 3865 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3183 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__6_ = _endpos__1_inlined3_ in let _3 = let _1 = _1_inlined2 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 3874 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3192 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _2 = let _1 = _1_inlined1 in -# 4010 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4406 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Override ) -# 3882 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3200 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2096 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2153 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_inherit (_2, _4, self)) ~attrs:(_3@_6) ~docs ) -# 3892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3210 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3928,9 +3246,9 @@ module Tables = struct let _v : (Parsetree.class_field) = let _3 = let _1 = _1_inlined1 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 3934 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3252 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__3_ = _endpos__1_inlined1_ in @@ -3938,11 +3256,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2099 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2156 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let v, attrs = _2 in let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_val v) ~attrs:(attrs@_3) ~docs ) -# 3946 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3264 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3982,9 +3300,9 @@ module Tables = struct let _v : (Parsetree.class_field) = let _3 = let _1 = _1_inlined1 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 3988 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3306 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__3_ = _endpos__1_inlined1_ in @@ -3992,11 +3310,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2160 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let meth, attrs = _2 in let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_method meth) ~attrs:(attrs@_3) ~docs ) -# 4000 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3318 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4042,28 +3360,28 @@ module Tables = struct let _v : (Parsetree.class_field) = let _4 = let _1 = _1_inlined2 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 4048 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3366 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 4057 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3375 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2164 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_constraint _3) ~attrs:(_2@_4) ~docs ) -# 4067 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3385 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4109,28 +3427,28 @@ module Tables = struct let _v : (Parsetree.class_field) = let _4 = let _1 = _1_inlined2 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 4115 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3433 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 4124 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3442 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2110 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2167 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_initializer _3) ~attrs:(_2@_4) ~docs ) -# 4134 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3452 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4162,9 +3480,9 @@ module Tables = struct let _v : (Parsetree.class_field) = let _2 = let _1 = _1_inlined1 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 4168 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3486 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -4172,10 +3490,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2113 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2170 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_extension _1) ~attrs:_2 ~docs ) -# 4179 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3497 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4199,23 +3517,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.class_field) = let _1 = let _1 = -# 2116 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2173 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pcf_attribute _1 ) -# 4205 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3523 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1055 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1093 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkcf ~loc:_sloc _1 ) -# 4213 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3531 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2174 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 4219 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3537 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4245,9 +3563,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.class_expr) = -# 2005 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _2 ) -# 4251 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3569 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4292,24 +3610,24 @@ module Tables = struct let _endpos = _endpos__4_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 2008 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2065 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pcl_constraint(_4, _2) ) -# 4298 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3616 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__4_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1057 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1095 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkclass ~loc:_sloc _1 ) -# 4307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3625 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2011 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2068 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 4313 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3631 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4340,24 +3658,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 2010 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2067 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (l,o,p) = _1 in Pcl_fun(l, o, p, _2) ) -# 4346 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3664 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1057 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1095 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkclass ~loc:_sloc _1 ) -# 4355 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3673 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2011 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2068 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 4361 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3679 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4395,24 +3713,24 @@ module Tables = struct let _endpos = _endpos_e_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 2072 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2129 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (l,o,p) = _1 in Pcl_fun(l, o, p, e) ) -# 4401 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3719 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos_e_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1057 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1095 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkclass ~loc:_sloc _1 ) -# 4410 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3728 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2073 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 4416 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3734 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4443,24 +3761,24 @@ module Tables = struct let _endpos = _endpos_e_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 2072 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2129 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (l,o,p) = _1 in Pcl_fun(l, o, p, e) ) -# 4449 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3767 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos_e_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1057 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1095 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkclass ~loc:_sloc _1 ) -# 4458 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3776 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2073 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 4464 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4483,9 +3801,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3891 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4287 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 4489 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3807 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4525,9 +3843,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2081 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2138 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( reloc_pat ~loc:_sloc _2 ) -# 4531 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3849 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4579,24 +3897,24 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2083 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2140 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Ppat_constraint(_2, _4) ) -# 4585 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3903 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__5_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkpat ~loc:_sloc _1 ) -# 4594 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3912 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2084 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2141 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 4600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3918 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4615,9 +3933,9 @@ module Tables = struct let _symbolstartpos = _endpos in let _sloc = (_symbolstartpos, _endpos) in -# 2086 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2143 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( ghpat ~loc:_sloc Ppat_any ) -# 4621 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3939 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4654,9 +3972,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.core_type) = -# 2213 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2270 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _2 ) -# 4660 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3978 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4671,26 +3989,13 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in - let _v : (Parsetree.core_type) = let _1 = - let _1 = -# 2214 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_any ) -# 4679 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos__1_ = _endpos__0_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _endpos in - let _sloc = (_symbolstartpos, _endpos) in - -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mktyp ~loc:_sloc _1 ) -# 4688 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _v : (Parsetree.core_type) = let _endpos = _endpos__0_ in + let _symbolstartpos = _endpos in + let _sloc = (_symbolstartpos, _endpos) in -# 2215 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 4694 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2272 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ghtyp ~loc:_sloc Ptyp_any ) +# 3999 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4736,28 +4041,28 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _4 = let _1 = _1_inlined2 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 4742 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4047 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 4751 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4056 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2223 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2280 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let docs = symbol_docs _sloc in mkctf ~loc:_sloc (Pctf_inherit _3) ~attrs:(_2@_4) ~docs ) -# 4761 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4066 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4815,9 +4120,9 @@ module Tables = struct let ty : (Parsetree.core_type) = Obj.magic ty in let _3 : unit = Obj.magic _3 in let _1_inlined2 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 4821 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 @@ -4828,9 +4133,9 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _4 = let _1 = _1_inlined3 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 4834 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4139 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__4_ = _endpos__1_inlined3_ in @@ -4838,44 +4143,44 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let label = let _1 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 4844 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4149 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 4852 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4157 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2248 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2305 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let mut, virt = flags in label, mut, virt, ty ) -# 4861 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4166 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 4869 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4174 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2226 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2283 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let docs = symbol_docs _sloc in mkctf ~loc:_sloc (Pctf_val _3) ~attrs:(_2@_4) ~docs ) -# 4879 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4184 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4933,9 +4238,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 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 4939 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4244 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 @@ -4946,53 +4251,53 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _7 = let _1 = _1_inlined4 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 4952 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4257 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__7_ = _endpos__1_inlined4_ in let _6 = let _1 = _1_inlined3 in -# 3514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3798 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 4961 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4266 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let _1 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 4969 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4274 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 4977 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4282 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 4985 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4290 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2230 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2287 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 ) -# 4996 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4301 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5038,28 +4343,28 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _4 = let _1 = _1_inlined2 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 5044 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4349 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 5053 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4358 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2234 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2291 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let docs = symbol_docs _sloc in mkctf ~loc:_sloc (Pctf_constraint _3) ~attrs:(_2@_4) ~docs ) -# 5063 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4368 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5091,9 +4396,9 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _2 = let _1 = _1_inlined1 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 5097 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -5101,10 +4406,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2294 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let docs = symbol_docs _sloc in mkctf ~loc:_sloc (Pctf_extension _1) ~attrs:_2 ~docs ) -# 5108 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4413 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5128,23 +4433,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.class_type_field) = let _1 = let _1 = -# 2240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2297 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pctf_attribute _1 ) -# 5134 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4439 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1053 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1091 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkctf ~loc:_sloc _1 ) -# 5142 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4447 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2241 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2298 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 5148 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4453 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5173,42 +4478,42 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 5179 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4484 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let tys = let tys = -# 2199 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2256 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [] ) -# 5186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4491 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2205 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2262 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( tys ) -# 5191 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4496 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2180 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pcty_constr (cid, tys) ) -# 5197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4502 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1051 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1089 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkcty ~loc:_sloc _1 ) -# 5206 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2183 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 5212 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5259,9 +4564,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 5265 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4570 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let tys = @@ -5270,30 +4575,30 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 5274 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4579 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1138 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 5279 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4584 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2201 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( params ) -# 5285 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4590 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2205 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2262 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( tys ) -# 5291 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4596 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2180 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pcty_constr (cid, tys) ) -# 5297 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4602 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -5301,15 +4606,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1051 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1089 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkcty ~loc:_sloc _1 ) -# 5307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4612 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2183 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 5313 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4618 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5333,23 +4638,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.class_type) = let _1 = let _1 = -# 2182 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2239 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pcty_extension _1 ) -# 5339 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4644 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1051 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1089 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkcty ~loc:_sloc _1 ) -# 5347 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4652 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2183 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 5353 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4658 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5406,44 +4711,44 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 5410 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4715 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2219 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2276 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 5415 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4720 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 999 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( extra_csig _startpos _endpos _1 ) -# 5424 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4729 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2209 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2266 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Csig.mk _1 _2 ) -# 5430 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4735 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 5438 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2185 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2242 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkcty ~loc:_sloc ~attrs:_2 (Pcty_signature _3) ) -# 5447 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4752 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5473,9 +4778,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.class_type) = -# 2191 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2248 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Cty.attr _1 _2 ) -# 5479 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4784 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5538,34 +4843,34 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 5544 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4849 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__5_ = _endpos__1_inlined2_ in let _4 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 5553 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4858 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _3 = -# 4009 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4405 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Fresh ) -# 5559 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4864 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2193 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2250 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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)) ) -# 5569 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4874 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5635,37 +4940,37 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 5641 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4946 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__5_ = _endpos__1_inlined3_ in let _4 = let _1 = _1_inlined2 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 5650 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4955 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _3 = let _1 = _1_inlined1 in -# 4010 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4406 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Override ) -# 5658 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4963 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2193 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2250 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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)) ) -# 5669 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4974 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5702,9 +5007,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.class_expr) = -# 2045 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2102 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _2 ) -# 5708 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5013 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5733,42 +5038,42 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 5739 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5044 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let tys = let tys = -# 2199 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2256 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [] ) -# 5746 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5051 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2205 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2262 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( tys ) -# 5751 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5056 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2052 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2109 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pcl_constr(cid, tys) ) -# 5757 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1057 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1095 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkclass ~loc:_sloc _1 ) -# 5766 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5071 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2063 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 5772 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5819,9 +5124,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 5825 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let tys = @@ -5830,30 +5135,30 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 5834 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5139 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1138 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 5839 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5144 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2201 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( params ) -# 5845 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5150 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2205 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2262 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( tys ) -# 5851 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5156 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2052 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2109 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pcl_constr(cid, tys) ) -# 5857 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5162 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -5861,15 +5166,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1057 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1095 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkclass ~loc:_sloc _1 ) -# 5867 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5172 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2063 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 5873 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5178 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5921,24 +5226,24 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 2058 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2115 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pcl_constraint(_2, _4) ) -# 5927 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5232 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__5_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1057 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1095 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkclass ~loc:_sloc _1 ) -# 5936 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5241 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2063 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 5942 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5247 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5995,44 +5300,44 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 5999 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5304 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2090 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2147 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 6004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5309 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 998 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1036 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( extra_cstr _startpos _endpos _1 ) -# 6013 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5318 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2134 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Cstr.mk _1 _2 ) -# 6019 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5324 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 6027 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5332 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2065 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2122 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkclass ~loc:_sloc ~attrs:_2 (Pcl_structure _3) ) -# 6036 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5341 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6055,9 +5360,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.class_type) = -# 2168 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2225 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 6061 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5366 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6103,14 +5408,14 @@ module Tables = struct let _v : (Parsetree.class_type) = let _1 = let _1 = let label = -# 3577 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3889 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Optional label ) -# 6109 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5414 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2174 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2231 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pcty_arrow(label, domain, codomain) ) -# 6114 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5419 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -6118,15 +5423,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1051 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1089 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkcty ~loc:_sloc _1 ) -# 6124 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5429 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2175 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2232 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 6130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5435 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6173,9 +5478,9 @@ module Tables = struct let domain : (Parsetree.core_type) = Obj.magic domain in let _2 : unit = Obj.magic _2 in let label : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 6179 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5484 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) = Obj.magic label in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_label_ in @@ -6183,14 +5488,14 @@ module Tables = struct let _v : (Parsetree.class_type) = let _1 = let _1 = let label = -# 3579 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3891 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Labelled label ) -# 6189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5494 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2174 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2231 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pcty_arrow(label, domain, codomain) ) -# 6194 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5499 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -6198,15 +5503,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1051 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1089 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkcty ~loc:_sloc _1 ) -# 6204 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5509 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2175 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2232 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 6210 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5515 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6245,14 +5550,14 @@ module Tables = struct let _v : (Parsetree.class_type) = let _1 = let _1 = let label = -# 3581 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3893 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Nolabel ) -# 6251 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5556 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2174 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2231 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pcty_arrow(label, domain, codomain) ) -# 6256 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5561 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_domain_) in @@ -6260,15 +5565,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1051 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1089 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkcty ~loc:_sloc _1 ) -# 6266 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5571 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2175 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2232 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 6272 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5577 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6351,9 +5656,9 @@ module Tables = struct let csig : (Parsetree.class_type) = Obj.magic csig in let _8 : unit = Obj.magic _8 in let _1_inlined2 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 6357 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5662 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 @@ -6369,9 +5674,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 6375 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5680 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -6381,24 +5686,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 6387 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5692 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 6395 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5700 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2315 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2372 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -6406,19 +5711,19 @@ module Tables = struct ext, Ci.mk id csig ~virt ~params ~attrs ~loc ~docs ) -# 6410 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5715 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1235 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1294 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (x, b) = a in x, b :: bs ) -# 6416 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5721 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2303 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2360 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 6422 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5727 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6441,9 +5746,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3888 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4284 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 6447 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5752 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6462,17 +5767,21 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 787 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 832 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string * char option) -# 6468 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5773 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = -# 3749 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let (n, m) = _1 in Pconst_integer (n, m) ) -# 6476 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.constant) = let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4136 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let (n, m) = _1 in + mkconst ~loc:_sloc (Pconst_integer (n, m)) ) +# 5785 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6491,17 +5800,20 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 745 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 789 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (char) -# 6497 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5806 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = -# 3750 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pconst_char _1 ) -# 6505 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.constant) = let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4138 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkconst ~loc:_sloc (Pconst_char _1) ) +# 5817 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6520,17 +5832,21 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 842 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 887 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string * Location.t * string option) -# 6526 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5838 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = -# 3751 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let (s, strloc, d) = _1 in Pconst_string (s, strloc, d) ) -# 6534 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.constant) = let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4139 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let (s, strloc, d) = _1 in + mkconst ~loc:_sloc (Pconst_string (s,strloc,d)) ) +# 5850 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6549,17 +5865,21 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 765 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 810 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string * char option) -# 6555 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5871 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = -# 3752 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let (f, m) = _1 in Pconst_float (f, m) ) -# 6563 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.constant) = let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4141 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let (f, m) = _1 in + mkconst ~loc:_sloc (Pconst_float (f, m)) ) +# 5883 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6589,9 +5909,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (string) = -# 3825 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4219 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "[]" ) -# 6595 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5915 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6621,9 +5941,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (string) = -# 3826 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4220 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "()" ) -# 6627 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5947 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6646,9 +5966,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4221 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "false" ) -# 6652 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5972 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6671,9 +5991,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3828 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4222 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "true" ) -# 6677 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 5997 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6692,17 +6012,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 856 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 901 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 6698 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6018 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = -# 3831 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4225 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 6706 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6026 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6739,14 +6059,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (string) = let _1 = -# 3822 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4216 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "::" ) -# 6745 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6065 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3832 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4226 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 6750 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6070 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6769,9 +6089,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4227 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 6775 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6095 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6794,9 +6114,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3836 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 6800 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4230 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 6120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6849,15 +6169,18 @@ module Tables = struct let _v : (Longident.t) = let _3 = let (_2, _1) = (_2_inlined1, _1_inlined1) in -# 3822 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4216 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "::" ) -# 6855 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6175 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _startpos__3_ = _startpos__1_inlined1_ in + let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 3837 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ldot(_1,_3) ) -# 6861 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4231 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ldot _1 _loc__1_ _3 _loc__3_ ) +# 6184 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6894,14 +6217,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = let _1 = -# 3822 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4216 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "::" ) -# 6900 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6223 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3838 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Lident _1 ) -# 6905 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4232 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Lident _1 ) +# 6228 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6924,9 +6247,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3839 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Lident _1 ) -# 6930 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4233 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Lident _1 ) +# 6253 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6963,9 +6286,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.core_type * Parsetree.core_type) = -# 2259 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2316 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _3 ) -# 6969 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6292 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6990,26 +6313,26 @@ module Tables = struct let _v : (Parsetree.constructor_arguments) = let tys = let xs = let xs = -# 1122 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1181 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [ x ] ) -# 6996 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6319 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in # 253 "" ( List.rev xs ) -# 7001 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6324 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1142 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1201 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 7007 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3380 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3663 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pcstr_tuple tys ) -# 7013 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6336 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7048,26 +6371,26 @@ module Tables = struct let _v : (Parsetree.constructor_arguments) = let tys = let xs = let xs = -# 1126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1185 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( x :: xs ) -# 7054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6377 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in # 253 "" ( List.rev xs ) -# 7059 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6382 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1142 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1201 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 7065 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6388 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3380 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3663 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pcstr_tuple tys ) -# 7071 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6394 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7104,9 +6427,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.constructor_arguments) = -# 3382 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3665 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pcstr_record _2 ) -# 7110 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6433 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7129,9 +6452,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.constructor_declaration list) = -# 3296 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3579 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [] ) -# 7135 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6458 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7154,14 +6477,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_xs_ in let _v : (Parsetree.constructor_declaration list) = let cs = -# 1227 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1286 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( List.rev xs ) -# 7160 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6483 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3298 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3581 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( cs ) -# 7165 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6488 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7184,14 +6507,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = let _1 = -# 3539 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3823 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 7190 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3529 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3813 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 7195 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6518 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7221,9 +6544,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.core_type) = -# 3531 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3815 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Typ.attr _1 _2 ) -# 7227 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6550 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7241,14 +6564,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.core_type) = 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.direction_flag) = -# 3954 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Upto ) -# 7252 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.core_type) = +# 4008 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 6575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7266,14 +6589,39 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.core_type) = 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.direction_flag) = -# 3955 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Downto ) -# 7277 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.core_type) = +# 4008 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 6600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.core_type) = 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.core_type) = +# 4008 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 6625 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7291,9 +6639,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 = type_; + MenhirLib.EngineTypes.startp = _startpos_type__; + MenhirLib.EngineTypes.endp = _endpos_type__; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -7303,19 +6651,16 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Ast_helper.let_bindings) = Obj.magic _1 in + let _3 : unit = Obj.magic _3 in + let type_ : (Parsetree.core_type) = Obj.magic type_ 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 _endpos = _endpos__3_ in - let _startpos = _startpos__1_ in - let _loc = (_startpos, _endpos) in - -# 4164 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( expr_of_lwt_bindings ~loc:_loc _1 (merloc _endpos__2_ _3) ) -# 7319 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.core_type) = +# 3961 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( type_ ) +# 6664 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7328,29 +6673,29 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + 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.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + 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; @@ -7363,60 +6708,50 @@ module Tables = struct }; }; } = _menhir_stack in - let xs : (Parsetree.case list) = Obj.magic xs in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.expression) = Obj.magic _3 in + let _5 : unit = Obj.magic _5 in + let _1_inlined3 : (Parsetree.module_type) = Obj.magic _1_inlined3 in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 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_xs_ in - let _v : (Parsetree.expression) = let _5 = - let xs = - let xs = -# 253 "" - ( List.rev xs ) -# 7381 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1199 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 7386 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _endpos = _endpos__5_ in + let _v : (Parsetree.core_type) = let package_type = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2836 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 7392 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 6730 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos__5_ = _endpos_xs_ in - let _2 = + let ext_attrs = let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 7403 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6740 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _2 ) -# 7409 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6746 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__5_ in - let _startpos = _startpos__1_ in - let _loc = (_startpos, _endpos) in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 4166 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let expr = mkexp_attrs ~loc:_loc - (Pexp_match(Fake.app Fake.Lwt.un_lwt _3, List.rev _5)) _2 in - Fake.app Fake.Lwt.in_lwt expr ) -# 7420 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3963 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp_attrs ~loc:_sloc (Ptyp_package package_type) ext_attrs ) +# 6755 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7434,54 +6769,44 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = field; + MenhirLib.EngineTypes.startp = _startpos_field_; + MenhirLib.EngineTypes.endp = _endpos_field_; 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 _3 : (Parsetree.expression) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in + let _3 : unit = Obj.magic _3 in + let field : (Parsetree.row_field) = Obj.magic field 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 _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 7470 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _v : (Parsetree.core_type) = let _1 = + let _1 = +# 3966 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_variant([ field ], Closed, None) ) +# 6795 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 7476 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc _1 ) +# 6804 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos__3_ in - let _startpos = _startpos__1_ in - let _loc = (_startpos, _endpos) in -# 4170 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( reloc_exp ~loc:_loc (Fake.app Fake.Lwt.in_lwt _3) ) -# 7485 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3983 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 6810 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7494,94 +6819,77 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 xs : (Parsetree.case list) = Obj.magic xs in let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in + let xs : (Parsetree.row_field list) = Obj.magic xs 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_xs_ in - let _v : (Parsetree.expression) = let _5 = - let xs = - let xs = + let _endpos = _endpos__4_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let fields = + let _1 = + let xs = # 253 "" ( List.rev xs ) -# 7547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1199 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 7552 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 2836 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 6860 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 7558 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos__5_ = _endpos_xs_ in - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 6865 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 7569 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6871 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3968 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_variant(fields, Closed, None) ) +# 6877 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos__1_ = _endpos__4_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 7575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc _1 ) +# 6887 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos__5_ in - let _startpos = _startpos__1_ in - let _loc = (_startpos, _endpos) in -# 4172 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkexp_attrs ~loc:_loc - (Pexp_try(Fake.app Fake.Lwt.in_lwt _3, List.rev _5)) _2 ) -# 7585 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3983 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 6893 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7599,9 +6907,9 @@ module Tables = struct 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.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _3; @@ -7609,55 +6917,69 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = field; + MenhirLib.EngineTypes.startp = _startpos_field_; + MenhirLib.EngineTypes.endp = _endpos_field_; 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 _5 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in + let _5 : unit = Obj.magic _5 in + let xs : (Parsetree.row_field list) = Obj.magic xs in + let _3 : unit = Obj.magic _3 in + let field : (Parsetree.row_field) = Obj.magic field 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 : (Parsetree.expression) = let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let fields = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 6950 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 6955 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 7649 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 6961 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3970 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_variant(field :: fields, Closed, None) ) +# 6967 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos__1_ = _endpos__5_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 7655 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc _1 ) +# 6977 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 4175 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Fake.app (Fake.app Fake.Lwt.finally_ _3) _5 ) -# 7661 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3983 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 6983 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7670,108 +6992,77 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { 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 = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : unit = Obj.magic _6 in - let xs : (Parsetree.case list) = Obj.magic xs in let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in + let xs : (Parsetree.row_field list) = Obj.magic xs in + let _2 : (unit option) = 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__7_ in - let _v : (Parsetree.expression) = let _5 = - let xs = - let xs = + let _endpos = _endpos__4_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let fields = + let _1 = + let xs = # 253 "" ( List.rev xs ) -# 7737 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1199 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 7742 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 2836 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 7033 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 7748 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 7038 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 7758 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 7044 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3972 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_variant(fields, Open, None) ) +# 7050 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos__1_ = _endpos__4_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 7764 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc _1 ) +# 7060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos__7_ in - let _startpos = _startpos__1_ in - let _loc = (_startpos, _endpos) in -# 4177 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let expr = mkexp_attrs ~loc:_loc - (Pexp_try (Fake.app Fake.Lwt.in_lwt _3, List.rev _5)) _2 in - Fake.app (Fake.app Fake.Lwt.finally_ expr) _7 ) -# 7775 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3983 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 7066 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7784,81 +7075,42 @@ 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 : unit = Obj.magic _6 in - let _5 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 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__6_ in - let _v : (Parsetree.expression) = let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 7846 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _endpos = _endpos__2_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = +# 3974 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_variant([], Open, None) ) +# 7099 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos__1_ = _endpos__2_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 7852 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc _1 ) +# 7108 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos__6_ in - let _startpos = _startpos__1_ in - let _loc = (_startpos, _endpos) in -# 4181 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let expr = Pexp_while (_3, Fake.(app Lwt.un_lwt _5)) in - Fake.(app Lwt.to_lwt (mkexp_attrs ~loc:_loc expr _2)) ) -# 7862 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3983 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 7114 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7871,109 +7123,77 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _10; - MenhirLib.EngineTypes.startp = _startpos__10_; - MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _9; - MenhirLib.EngineTypes.startp = _startpos__9_; - MenhirLib.EngineTypes.endp = _endpos__9_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _8; - MenhirLib.EngineTypes.startp = _startpos__8_; - MenhirLib.EngineTypes.endp = _endpos__8_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 _10 : unit = Obj.magic _10 in - let _9 : (Parsetree.expression) = Obj.magic _9 in - let _8 : unit = Obj.magic _8 in - let _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : (Asttypes.direction_flag) = Obj.magic _6 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 _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in + let xs : (Parsetree.row_field list) = Obj.magic xs in + let _2 : (unit option) = 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__10_ in - let _v : (Parsetree.expression) = let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _endpos = _endpos__4_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let fields = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 7164 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 7169 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 7961 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 7175 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3976 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_variant(fields, Closed, Some []) ) +# 7181 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos__1_ = _endpos__4_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 7967 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc _1 ) +# 7191 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos__10_ in - let _startpos = _startpos__1_ in - let _loc = (_startpos, _endpos) in -# 4184 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let expr = Pexp_for (_3, _5, _7, _6, Fake.(app Lwt.un_lwt _9)) in - Fake.(app Lwt.to_lwt (mkexp_attrs ~loc:_loc expr _2)) ) -# 7977 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3983 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 7197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7986,98 +7206,111 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _8; - MenhirLib.EngineTypes.startp = _startpos__8_; - MenhirLib.EngineTypes.endp = _endpos__8_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = xs_inlined1; + MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 _8 : unit = Obj.magic _8 in - let _7 : (Parsetree.expression) = Obj.magic _7 in let _6 : unit = Obj.magic _6 in - let _5 : (Parsetree.expression) = Obj.magic _5 in + let xs_inlined1 : (string list) = Obj.magic xs_inlined1 in let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.pattern) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in + let xs : (Parsetree.row_field list) = Obj.magic xs in + let _2 : (unit option) = 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__8_ in - let _v : (Parsetree.expression) = let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _endpos = _endpos__6_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let tags = + let xs = xs_inlined1 in + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 7262 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1144 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 7267 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4090 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 7273 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let fields = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 7281 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 7286 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 8062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 7292 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3981 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_variant(fields, Closed, Some tags) ) +# 7298 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos__1_ = _endpos__6_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 8068 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc _1 ) +# 7308 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos__8_ in - let _startpos = _startpos__1_ in - let _loc = (_startpos, _endpos) in -# 4187 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkexp_attrs ~loc:_loc - (Pexp_let (Nonrecursive, [Vb.mk _3 (Fake.(app Lwt.un_stream _5))], - Fake.(app Lwt.unit_lwt _7))) - _2 - ) -# 8081 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3983 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 7314 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8095,14 +7328,57 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Parsetree.expression) = Obj.magic _1 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__1_ in - let _v : (Parsetree.expression) = -# 2426 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 8106 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Asttypes.direction_flag) = +# 4350 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Upto ) +# 7339 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : unit = 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.direction_flag) = +# 4351 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Downto ) +# 7364 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (string Location.loc option) = +# 4507 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None ) +# 7382 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8115,107 +7391,104 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + 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 : (string Location.loc) = 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 : (string Location.loc option) = +# 4508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _2 ) +# 7414 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + 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 = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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; - }; - }; - }; - }; + 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 _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : unit = Obj.magic _6 in - let _5 : (Parsetree.module_expr) = Obj.magic _5 in - let _1_inlined3 : (string option) = Obj.magic _1_inlined3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.payload) = Obj.magic _3 in + let _2 : (string Location.loc) = 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__7_ in - let _v : (Parsetree.expression) = let _1 = - let _4 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 8186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _3 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 8196 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 8202 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 2461 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pexp_letmodule(_4, _5, (merloc _endpos__6_ _7)), _3 ) -# 8208 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos__1_ = _endpos__7_ in + let _endpos = _endpos__4_ in + let _v : (Parsetree.extension) = +# 4520 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (_2, _3) ) +# 7460 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : ( +# 889 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string * Location.t * string * Location.t * string option) +# 7481 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.extension) = let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2428 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8219 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4522 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mk_quotedext ~loc:_sloc _1 ) +# 7492 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8228,135 +7501,82 @@ 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 = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined4; - MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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; - }; - }; - }; - }; + 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 : unit = Obj.magic _5 in - let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in - let _2_inlined1 : (Mlx_ocaml_parsing.Ast_helper.str list * Parsetree.constructor_arguments * - Parsetree.core_type option) = Obj.magic _2_inlined1 in - let _1_inlined3 : (string) = Obj.magic _1_inlined3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (Longident.t) = Obj.magic _1_inlined2 in + let _3 : unit = Obj.magic _3 in + let _1_inlined1 : (string) = Obj.magic _1_inlined1 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__6_ in - let _v : (Parsetree.expression) = let _1 = - let _4 = - let (_endpos__1_inlined1_, _endpos__1_, _startpos__1_, _1_inlined1, _2, _1) = (_endpos__1_inlined4_, _endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined4, _2_inlined1, _1_inlined3) in - let _3 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _endpos = _endpos__1_inlined3_ in + let _v : (Parsetree.extension_constructor) = let attrs = + let _1 = _1_inlined3 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 8306 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos__3_ = _endpos__1_inlined1_ in - let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 7547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_attrs_ = _endpos__1_inlined3_ in + let lid = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 8317 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos = _endpos__3_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3360 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let vars, args, res = _2 in - Te.decl _1 ~vars ~args ?res ~attrs:_3 ~loc:(make_loc _sloc) ) -# 8327 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _3 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 8337 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 8343 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in +# 7559 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" -# 2463 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pexp_letexception(_4, _6), _3 ) -# 8349 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let cid = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 7570 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos__1_ = _endpos__6_ in - let _endpos = _endpos__1_ in + let _endpos = _endpos_attrs_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2428 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8360 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3733 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let info = symbol_info _endpos in + Te.rebind cid lid ~attrs ~loc:(make_loc _sloc) ~info ) +# 7580 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8369,96 +7589,121 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + 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 = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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; - }; - }; - }; + 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 _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : unit = Obj.magic _6 in - let _5 : (Parsetree.module_expr) = Obj.magic _5 in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _1_inlined1 : (Longident.t) = Obj.magic _1_inlined1 in + let _3 : unit = Obj.magic _3 in + let _1 : (string) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : (Parsetree.expression) = let _1 = - let _4 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _endpos = _endpos__1_inlined2_ in + let _v : (Parsetree.extension_constructor) = let attrs = + let _1 = _1_inlined2 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 8432 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 8438 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _3 = -# 4009 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Fresh ) -# 8444 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in +# 7628 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" -# 2465 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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, (merloc _endpos__6_ _7)), _4 ) -# 8451 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos_attrs_ = _endpos__1_inlined2_ in + let lid = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 7640 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos__1_ = _endpos__7_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in + let cid = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 7650 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _startpos_cid_ = _startpos__1_ in + let _1 = +# 4324 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( () ) +# 7657 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos_attrs_ in + let _symbolstartpos = _startpos_cid_ in let _sloc = (_symbolstartpos, _endpos) in -# 2428 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8462 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3733 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let info = symbol_info _endpos in + Te.rebind cid lid ~attrs ~loc:(make_loc _sloc) ~info ) +# 7666 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let ext : (Parsetree.extension) = Obj.magic ext in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_ext_ in + let _endpos = _endpos_ext_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = +# 3999 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_extension ext ) +# 7692 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let (_endpos__1_, _startpos__1_) = (_endpos_ext_, _startpos_ext_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc _1 ) +# 7701 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4001 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 7707 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8471,106 +7716,125 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + 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 = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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; - }; - }; - }; - }; + 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 _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : unit = Obj.magic _6 in - let _5 : (Parsetree.module_expr) = Obj.magic _5 in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in - let _1_inlined1 : unit = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.payload) = Obj.magic _3 in + let _2 : (string Location.loc) = 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__7_ in - let _v : (Parsetree.expression) = let _1 = - let _4 = - let (_1_inlined1, _1) = (_1_inlined3, _1_inlined2) in - let _2 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 8541 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 8547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _3 = - let _1 = _1_inlined1 in + let _endpos = _endpos__4_ in + let _v : (Parsetree.attribute) = let _endpos = _endpos__4_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4495 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mark_symbol_docs _sloc; + mk_attr ~loc:(make_loc _sloc) _2 _3 ) +# 7757 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = let params = +# 2256 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [] ) +# 7775 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2073 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( params ) +# 7780 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) 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 : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = let params = + let params = + let xs = +# 253 "" + ( List.rev xs ) +# 7821 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 4010 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Override ) -# 8555 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 7826 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2465 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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, (merloc _endpos__6_ _7)), _4 ) -# 8563 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( params ) +# 7832 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos__1_ = _endpos__7_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2428 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8574 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2073 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( params ) +# 7838 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8613,57 +7877,57 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos_xs_ in - let _v : (Parsetree.expression) = let _1 = - let _3 = - let xs = - let xs = + let _v : (Parsetree.function_body) = let _3 = + let xs = + let xs = # 253 "" ( List.rev xs ) -# 8623 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1199 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 8628 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in +# 7886 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 2836 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 8634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 7891 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 7897 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 8644 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _1 = _1_inlined1 in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 8650 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 7908 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2469 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pexp_function _3, _2 ) -# 8656 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 7914 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos__1_ = _endpos_xs_ in - let _endpos = _endpos__1_ in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2428 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8667 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2935 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let ext, attrs = _2 in + match ext with + | None -> Pfunction_cases (_3, make_loc _sloc, attrs) + | Some _ -> + (* function%foo extension nodes interrupt the arity *) + let cases = Pfunction_cases (_3, make_loc _sloc, []) in + Pfunction_body + (mkexp_attrs ~loc:_sloc (mkfunction [] None cases) _2) + ) +# 7931 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8675,77 +7939,45 @@ module Tables = struct (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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 _4 : (Parsetree.expression) = Obj.magic _4 in - let _3 : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.expression) = 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 _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 8725 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 8731 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 2471 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let (l,o,p) = _3 in - Pexp_fun(l, o, p, _4), _2 ) -# 8738 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos__1_ = _endpos__4_ in let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2428 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 8749 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.function_body) = +# 2945 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pfunction_body _1 ) +# 7956 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.expression) = 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.expression) = +# 2512 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 7981 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8768,29 +8000,29 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + 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.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + 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; @@ -8807,44 +8039,47 @@ module Tables = struct } = _menhir_stack in let _7 : (Parsetree.expression) = Obj.magic _7 in let _6 : unit = Obj.magic _6 in - let xs : (string Location.loc list) = Obj.magic xs in - let _4 : unit = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in + let _5 : (Parsetree.module_expr) = Obj.magic _5 in + let _1_inlined3 : (string option) = Obj.magic _1_inlined3 in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 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__7_ in let _v : (Parsetree.expression) = let _1 = - let _5 = -# 2723 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 8824 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _2 = + let _4 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 8061 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _3 = let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 8833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8071 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _2 ) -# 8839 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos__7_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2474 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (mk_newtypes ~loc:_sloc _5 _7).pexp_desc, _2 ) -# 8848 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2551 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pexp_letmodule(_4, _5, (merloc _endpos__6_ _7)), _3 ) +# 8083 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__7_ in @@ -8852,10 +8087,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2428 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 8859 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8094 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8868,101 +8103,135 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 xs : (Parsetree.case list) = Obj.magic xs in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.expression) = Obj.magic _3 in + let _6 : (Parsetree.expression) = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _2_inlined1 : (Mlx_ocaml_parsing.Ast_helper.str list * Parsetree.constructor_arguments * + Parsetree.core_type option) = Obj.magic _2_inlined1 in + let _1_inlined3 : (string) = Obj.magic _1_inlined3 in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 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_xs_ in + let _endpos = _endpos__6_ in let _v : (Parsetree.expression) = let _1 = - let _5 = - let xs = - let xs = -# 253 "" - ( List.rev xs ) -# 8922 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _4 = + let (_endpos__1_inlined1_, _endpos__1_, _startpos__1_, _1_inlined1, _2, _1) = (_endpos__1_inlined4_, _endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined4, _2_inlined1, _1_inlined3) in + let _3 = + let _1 = _1_inlined1 in -# 1199 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 8927 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 8181 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos__1_inlined1_ in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 8192 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2836 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 8933 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3643 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let vars, args, res = _2 in + Te.decl _1 ~vars ~args ?res ~attrs:_3 ~loc:(make_loc _sloc) ) +# 8202 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _2 = + let _3 = let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 8943 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8212 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _2 ) -# 8949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8218 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2476 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pexp_match(_3, _5), _2 ) -# 8955 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2553 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pexp_letexception(_4, _6), _3 ) +# 8224 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos__1_ = _endpos_xs_ in + let _endpos__1_ = _endpos__6_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2428 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 8966 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8235 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8975,19 +8244,19 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined2; @@ -8999,77 +8268,72 @@ module Tables = struct 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 xs : (Parsetree.case list) = Obj.magic xs in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.expression) = Obj.magic _3 in + let _7 : (Parsetree.expression) = Obj.magic _7 in + let _6 : unit = Obj.magic _6 in + let _5 : (Parsetree.module_expr) = Obj.magic _5 in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 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_xs_ in + let _endpos = _endpos__7_ in let _v : (Parsetree.expression) = let _1 = - let _5 = - let xs = - let xs = -# 253 "" - ( List.rev xs ) -# 9029 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1199 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 9034 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 2836 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 9040 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _2 = + let _4 = let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 9050 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _2 ) -# 9056 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8313 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _3 = +# 4405 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Fresh ) +# 8319 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 2478 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pexp_try(_3, _5), _2 ) -# 9062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2555 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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, (merloc _endpos__6_ _7)), _4 ) +# 8326 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos__1_ = _endpos_xs_ in + let _endpos__1_ = _endpos__7_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2428 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 9073 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8337 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9097,24 +8361,24 @@ module Tables = struct 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.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + 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; @@ -9131,135 +8395,57 @@ module Tables = struct } = _menhir_stack in let _7 : (Parsetree.expression) = Obj.magic _7 in let _6 : unit = Obj.magic _6 in - let _5 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in + let _5 : (Parsetree.module_expr) = Obj.magic _5 in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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__7_ in let _v : (Parsetree.expression) = let _1 = - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _4 = + let (_1_inlined1, _1) = (_1_inlined3, _1_inlined2) in let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 9152 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8416 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _2 ) -# 9158 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8422 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - -# 2484 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pexp_ifthenelse(_3, (merloc _endpos__4_ _5), Some (merloc _endpos__6_ _7)), _2 ) -# 9164 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos__1_ = _endpos__7_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2428 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let desc, attrs = _1 in - mkexp_attrs ~loc:_sloc desc attrs ) -# 9175 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 _5 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 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 : (Parsetree.expression) = let _1 = - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 9240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _3 = + let _1 = _1_inlined1 in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 9246 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4406 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Override ) +# 8430 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2486 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pexp_ifthenelse(_3, (merloc _endpos__4_ _5), None), _2 ) -# 9252 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2555 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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, (merloc _endpos__6_ _7)), _4 ) +# 8438 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos__1_ = _endpos__5_ in + let _endpos__1_ = _endpos__7_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2428 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 9263 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8449 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9313,10 +8499,10 @@ module Tables = struct }; }; } = _menhir_stack in - let _6 : unit = Obj.magic _6 in - let _5 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.expression) = Obj.magic _3 in + let _6 : (Parsetree.function_body) = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let _4 : (Parsetree.core_type option) = Obj.magic _4 in + let _3 : (Parsetree.function_param list) = Obj.magic _3 in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in @@ -9329,21 +8515,23 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 9335 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8521 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _2 ) -# 9341 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8527 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2488 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pexp_while(_3, (merloc _endpos__4_ _5)), _2 ) -# 9347 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2561 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let body_constraint = Option.map (fun x -> Pconstraint x) _4 in + mkfunction _3 body_constraint _6, _2 + ) +# 8535 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__6_ in @@ -9351,10 +8539,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2428 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 9358 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8546 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9367,117 +8555,101 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _10; - MenhirLib.EngineTypes.startp = _startpos__10_; - MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _9; - MenhirLib.EngineTypes.startp = _startpos__9_; - MenhirLib.EngineTypes.endp = _endpos__9_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _8; - MenhirLib.EngineTypes.startp = _startpos__8_; - MenhirLib.EngineTypes.endp = _endpos__8_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + 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 = _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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 _10 : unit = Obj.magic _10 in - let _9 : (Parsetree.expression) = Obj.magic _9 in - let _8 : unit = Obj.magic _8 in - let _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : (Asttypes.direction_flag) = Obj.magic _6 in - let _5 : (Parsetree.expression) = Obj.magic _5 in + let xs : (Parsetree.case list) = Obj.magic xs in let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.pattern) = Obj.magic _3 in + let _3 : (Parsetree.expression) = Obj.magic _3 in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 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__10_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = + let _5 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 8609 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 8614 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 8620 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in let _2 = let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 9458 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _2 ) -# 9464 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8636 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2495 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pexp_for(_3, (merloc _endpos__4_ _5), (merloc _endpos__6_ _7), _6, (merloc _endpos__8_ _9)), _2 ) -# 9470 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2565 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pexp_match(_3, _5), _2 ) +# 8642 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos__1_ = _endpos__10_ in + let _endpos__1_ = _endpos_xs_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2428 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 9481 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8653 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9490,68 +8662,101 @@ 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 xs : (Parsetree.case list) = Obj.magic xs in + let _4 : unit = Obj.magic _4 in let _3 : (Parsetree.expression) = Obj.magic _3 in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 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 _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = + let _5 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 8716 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 8721 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 8727 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in let _2 = let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 9532 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8737 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _2 ) -# 9538 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2497 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pexp_assert _3, _2 ) -# 9544 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2567 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pexp_try(_3, _5), _2 ) +# 8749 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos__1_ = _endpos__3_ in + let _endpos__1_ = _endpos_xs_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2428 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 9555 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8760 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9564,68 +8769,122 @@ 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 = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; 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 = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; 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 = _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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _1_inlined4 : (Parsetree.expression) = Obj.magic _1_inlined4 in + let _6 : unit = Obj.magic _6 in + let _1_inlined3 : (Parsetree.expression) = Obj.magic _1_inlined3 in + let _4 : unit = Obj.magic _4 in let _3 : (Parsetree.expression) = Obj.magic _3 in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 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 _endpos = _endpos__1_inlined4_ in let _v : (Parsetree.expression) = let _1 = + let _7 = + let _1 = _1_inlined4 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 8837 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 8842 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _5 = + let _1 = _1_inlined3 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 8850 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 8855 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in let _2 = let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 9606 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8865 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _2 ) -# 9612 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8871 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2499 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pexp_lazy _3, _2 ) -# 9618 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2573 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pexp_ifthenelse(_3, (merloc _endpos__4_ _5), Some (merloc _endpos__6_ _7)), _2 ) +# 8877 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos__1_ = _endpos__3_ in + let _endpos__1_ = _endpos__1_inlined4_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2428 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 9629 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 8888 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9642,52 +8901,191 @@ module Tables = struct 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 = _; + MenhirLib.EngineTypes.semv = _1_inlined6; + MenhirLib.EngineTypes.startp = _startpos__1_inlined6_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 xs : ((Asttypes.arg_label * Parsetree.expression) list) = Obj.magic xs in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined6 : (Parsetree.attributes) = Obj.magic _1_inlined6 in + let _1_inlined5 : (string Location.loc option) = Obj.magic _1_inlined5 in + let _1_inlined4 : unit = Obj.magic _1_inlined4 in + let _6 : unit = Obj.magic _6 in + let _1_inlined3 : (Parsetree.expression) = Obj.magic _1_inlined3 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 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 : (Parsetree.expression) = let _1 = - let _1 = - let _2 = - let xs = + let _7 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined4_, _1_inlined6, _1_inlined5, _1_inlined4) in + let _1 = + let _3 = + let xs = + let xs = # 253 "" ( List.rev xs ) -# 9664 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1106 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 8989 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 8994 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 9669 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 9000 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 9011 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 9017 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 9037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2503 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pexp_apply(_1, _2) ) -# 9675 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 9043 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _5 = + let _1 = _1_inlined3 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 9051 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 9056 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 9066 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 9072 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos__1_ = _endpos_xs_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkexp ~loc:_sloc _1 ) -# 9685 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2573 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pexp_ifthenelse(_3, (merloc _endpos__4_ _5), Some (merloc _endpos__6_ _7)), _2 ) +# 9078 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos__1_ = _endpos_xs_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 9691 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 9089 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9699,57 +9097,196 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined6; + MenhirLib.EngineTypes.startp = _startpos__1_inlined6_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + 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 = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 xs : (Parsetree.expression list) = Obj.magic xs in + let _1_inlined6 : (Parsetree.expression) = Obj.magic _1_inlined6 in + let _6 : unit = Obj.magic _6 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined5 : (Parsetree.attributes) = Obj.magic _1_inlined5 in + let _1_inlined4 : (string Location.loc option) = Obj.magic _1_inlined4 in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_xs_ in - let _endpos = _endpos_xs_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined6_ in let _v : (Parsetree.expression) = let _1 = - let _1 = + let _7 = + let _1 = _1_inlined6 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 9187 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 9192 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _5 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined3_, _1_inlined5, _1_inlined4, _1_inlined3) in let _1 = - let es = - let xs = + let _3 = + let xs = + let xs = # 253 "" ( List.rev xs ) -# 9720 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in +# 9203 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 9208 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 1166 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 9725 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 9214 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 9225 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 9231 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2864 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( es ) -# 9731 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 9251 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2505 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pexp_tuple(_1) ) -# 9737 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 9257 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 9267 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 9273 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_xs_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkexp ~loc:_sloc _1 ) -# 9747 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2573 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pexp_ifthenelse(_3, (merloc _endpos__4_ _5), Some (merloc _endpos__6_ _7)), _2 ) +# 9279 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos__1_ = _endpos__1_inlined6_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 9753 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 9290 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9762,54 +9299,268 @@ module Tables = struct 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.semv = xs_inlined1; + MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_xs_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 = _1_inlined8; + MenhirLib.EngineTypes.startp = _startpos__1_inlined8_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined8_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined7; + MenhirLib.EngineTypes.startp = _startpos__1_inlined7_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined7_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined6; + MenhirLib.EngineTypes.startp = _startpos__1_inlined6_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + 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 = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _2 : (Parsetree.expression) = Obj.magic _2 in - let _1 : (Longident.t) = Obj.magic _1 in + let xs_inlined1 : (Parsetree.case list) = Obj.magic xs_inlined1 in + let _1_inlined8 : (Parsetree.attributes) = Obj.magic _1_inlined8 in + let _1_inlined7 : (string Location.loc option) = Obj.magic _1_inlined7 in + let _1_inlined6 : unit = Obj.magic _1_inlined6 in + let _6 : unit = Obj.magic _6 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined5 : (Parsetree.attributes) = Obj.magic _1_inlined5 in + let _1_inlined4 : (string Location.loc option) = Obj.magic _1_inlined4 in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 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 _endpos = _endpos_xs_inlined1_ in let _v : (Parsetree.expression) = let _1 = - let _1 = + let _7 = + let (_endpos_xs_, _startpos__1_, xs, _1_inlined2, _1_inlined1, _1) = (_endpos_xs_inlined1_, _startpos__1_inlined6_, xs_inlined1, _1_inlined8, _1_inlined7, _1_inlined6) in let _1 = - let _endpos = _endpos__1_ in + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 9412 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 9417 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 9423 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 9434 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 9440 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 9791 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 9460 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2507 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pexp_construct(_1, Some _2) ) -# 9797 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 9466 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _5 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined3_, _1_inlined5, _1_inlined4, _1_inlined3) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 9477 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 9482 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 9488 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 9499 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 9505 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 9525 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 9531 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 9541 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 9547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos__1_ = _endpos__2_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkexp ~loc:_sloc _1 ) -# 9807 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2573 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pexp_ifthenelse(_3, (merloc _endpos__4_ _5), Some (merloc _endpos__6_ _7)), _2 ) +# 9553 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos__1_ = _endpos_xs_inlined1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 9813 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 9564 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9822,42 +9573,95 @@ module Tables = struct 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.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; 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 = _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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _2 : (Parsetree.expression) = Obj.magic _2 in - let _1 : (string) = Obj.magic _1 in + let _1_inlined3 : (Parsetree.expression) = Obj.magic _1_inlined3 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 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 _endpos = _endpos__1_inlined3_ in let _v : (Parsetree.expression) = let _1 = - let _1 = -# 2509 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pexp_variant(_1, Some _2) ) -# 9846 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos__1_ = _endpos__2_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _5 = + let _1 = _1_inlined3 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 9627 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 9632 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 9642 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 9648 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkexp ~loc:_sloc _1 ) -# 9855 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pexp_ifthenelse(_3, (merloc _endpos__4_ _5), None), _2 ) +# 9654 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos__1_ = _endpos__1_inlined3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 9861 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 9665 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9870,71 +9674,168 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.semv = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 e2 : (Parsetree.expression) = Obj.magic e2 in - let op : ( -# 777 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 9895 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic op in - let e1 : (Parsetree.expression) = Obj.magic e1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined5 : (Parsetree.attributes) = Obj.magic _1_inlined5 in + let _1_inlined4 : (string Location.loc option) = Obj.magic _1_inlined4 in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3795 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( op ) -# 9907 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in - let _endpos = _endpos__1_ in + let _5 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined3_, _1_inlined5, _1_inlined4, _1_inlined3) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 9752 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 9757 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 9763 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 9774 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 9780 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkoperator ~loc:_sloc _1 ) -# 9916 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 9800 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkinfix e1 op e2 ) -# 9922 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 9806 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 9816 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 9822 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkexp ~loc:_sloc _1 ) -# 9932 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pexp_ifthenelse(_3, (merloc _endpos__4_ _5), None), _2 ) +# 9828 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos__1_ = _endpos_xs_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 9938 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 9839 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9947,71 +9848,89 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 e2 : (Parsetree.expression) = Obj.magic e2 in - let op : ( -# 778 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 9972 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic op in - let e1 : (Parsetree.expression) = Obj.magic e1 in + let _6 : unit = Obj.magic _6 in + let _5 : (Parsetree.expression) = Obj.magic _5 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__6_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3796 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( op ) -# 9984 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in -# 1031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkoperator ~loc:_sloc _1 ) -# 9993 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 9911 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkinfix e1 op e2 ) -# 9999 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 9917 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkexp ~loc:_sloc _1 ) -# 10009 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2577 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pexp_while(_3, (merloc _endpos__4_ _5)), _2 ) +# 9923 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos__1_ = _endpos__6_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 10015 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 9934 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10024,71 +9943,117 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.semv = _9; + MenhirLib.EngineTypes.startp = _startpos__9_; + MenhirLib.EngineTypes.endp = _endpos__9_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _8; + MenhirLib.EngineTypes.startp = _startpos__8_; + MenhirLib.EngineTypes.endp = _endpos__8_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 e2 : (Parsetree.expression) = Obj.magic e2 in - let op : ( -# 779 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 10049 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic op in - let e1 : (Parsetree.expression) = Obj.magic e1 in + let _10 : unit = Obj.magic _10 in + let _9 : (Parsetree.expression) = Obj.magic _9 in + let _8 : unit = Obj.magic _8 in + let _7 : (Parsetree.expression) = Obj.magic _7 in + let _6 : (Asttypes.direction_flag) = Obj.magic _6 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 _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__10_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3797 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( op ) -# 10061 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in -# 1031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10070 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 10034 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkinfix e1 op e2 ) -# 10076 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 10040 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkexp ~loc:_sloc _1 ) -# 10086 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2584 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pexp_for(_3, (merloc _endpos__4_ _5), (merloc _endpos__6_ _7), _6, (merloc _endpos__8_ _9)), _2 ) +# 10046 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos__1_ = _endpos__10_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 10092 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 10057 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10101,71 +10066,68 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 e2 : (Parsetree.expression) = Obj.magic e2 in - let op : ( -# 780 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 10126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic op in - let e1 : (Parsetree.expression) = Obj.magic e1 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3798 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( op ) -# 10138 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in -# 1031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10147 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 10108 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkinfix e1 op e2 ) -# 10153 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 10114 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkexp ~loc:_sloc _1 ) -# 10163 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2586 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pexp_assert _3, _2 ) +# 10120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 10169 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 10131 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10178,71 +10140,68 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in - let op : ( -# 781 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 10203 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic op in - let e1 : (Parsetree.expression) = Obj.magic e1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + 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 _3 : (Parsetree.expression) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 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 op = - let _1 = -# 3799 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( op ) -# 10215 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in -# 1031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10224 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 10182 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkinfix e1 op e2 ) -# 10230 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 10188 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkexp ~loc:_sloc _1 ) -# 10240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2588 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pexp_lazy _3, _2 ) +# 10194 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 10246 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let desc, attrs = _1 in + mkexp_attrs ~loc:_sloc desc attrs ) +# 10205 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10255,66 +10214,56 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in - let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in + let xs : ((Asttypes.arg_label * Parsetree.expression) list) = Obj.magic xs in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = let _1 = - let op = - let _1 = -# 3800 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("+") -# 10288 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _2 = + let xs = +# 253 "" + ( List.rev xs ) +# 10240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10296 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1144 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 10245 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkinfix e1 op e2 ) -# 10302 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2592 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pexp_apply(_1, _2) ) +# 10251 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in + let _endpos__1_ = _endpos_xs_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 10312 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10261 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 10318 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10267 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10326,67 +10275,50 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + 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 e2 : (Parsetree.expression) = Obj.magic e2 in - let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in + let xs : ((string option * Parsetree.expression) list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos_xs_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = let _1 = - let op = - let _1 = -# 3801 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("+.") -# 10360 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 10295 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10368 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 10300 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkinfix e1 op e2 ) -# 10374 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2594 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pexp_tuple(_1) ) +# 10306 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_xs_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 10384 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10316 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 10390 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10322 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10399,66 +10331,54 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in - let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in + let _2 : (Parsetree.expression) = Obj.magic _2 in + let _1 : (Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = let _1 = let _1 = - let op = - let _1 = -# 3802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("+=") -# 10432 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _1 = let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10440 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 10360 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkinfix e1 op e2 ) -# 10446 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2596 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pexp_construct(_1, Some _2) ) +# 10366 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in + let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 10456 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10376 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 10462 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10382 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10471,66 +10391,42 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in - let _1 : unit = Obj.magic _1 in - let e1 : (Parsetree.expression) = Obj.magic e1 in + let _2 : (Parsetree.expression) = Obj.magic _2 in + let _1 : (string) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = let _1 = - let _1 = - let op = - let _1 = -# 3803 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("-") -# 10504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkoperator ~loc:_sloc _1 ) -# 10512 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 2511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkinfix e1 op e2 ) -# 10518 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in + let _1 = +# 2598 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pexp_variant(_1, Some _2) ) +# 10415 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 10528 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10424 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 10534 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10430 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10543,14 +10439,14 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = e1; @@ -10560,49 +10456,66 @@ module Tables = struct }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.expression) = Obj.magic _1 in + let op : ( +# 822 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 10464 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic op in let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = let _1 = + let e2 = + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 10476 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 10481 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in let op = let _1 = -# 3804 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("-.") -# 10576 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( op ) +# 10488 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 -# 1031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkoperator ~loc:_sloc _1 ) -# 10584 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10497 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkinfix e1 op e2 ) -# 10590 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10503 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in + let _startpos__1_ = _startpos_e1_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 10600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 10606 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10519 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10615,66 +10528,156 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let op : ( +# 822 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 10574 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic op in let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = let _1 = + let e2 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 10589 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 10594 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 10600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 10611 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 10617 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 10637 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 10643 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in let op = let _1 = -# 3805 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("*") -# 10648 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( op ) +# 10650 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 -# 1031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkoperator ~loc:_sloc _1 ) -# 10656 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10659 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkinfix e1 op e2 ) -# 10662 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10665 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 10672 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10675 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 10678 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10681 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10687,14 +10690,14 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = e1; @@ -10704,49 +10707,66 @@ module Tables = struct }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.expression) = Obj.magic _1 in + let op : ( +# 823 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 10715 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic op in let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = let _1 = + let e2 = + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 10727 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 10732 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in let op = let _1 = -# 3806 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("%") -# 10720 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4190 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( op ) +# 10739 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 -# 1031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkoperator ~loc:_sloc _1 ) -# 10728 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10748 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkinfix e1 op e2 ) -# 10734 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10754 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in + let _startpos__1_ = _startpos_e1_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 10744 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10764 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 10750 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10770 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10759,66 +10779,156 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let op : ( +# 823 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 10825 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic op in let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = let _1 = + let e2 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 10840 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 10845 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 10851 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 10862 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 10868 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 10888 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 10894 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in let op = let _1 = -# 3807 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("=") -# 10792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4190 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( op ) +# 10901 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 -# 1031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkoperator ~loc:_sloc _1 ) -# 10800 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10910 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkinfix e1 op e2 ) -# 10806 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10916 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 10816 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10926 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 10822 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10932 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10831,14 +10941,14 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = e1; @@ -10848,49 +10958,66 @@ module Tables = struct }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.expression) = Obj.magic _1 in + let op : ( +# 824 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 10966 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic op in let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = let _1 = + let e2 = + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 10978 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 10983 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in let op = let _1 = -# 3808 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("<") -# 10864 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4191 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( op ) +# 10990 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 -# 1031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkoperator ~loc:_sloc _1 ) -# 10872 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 10999 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkinfix e1 op e2 ) -# 10878 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11005 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in + let _startpos__1_ = _startpos_e1_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 10888 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11015 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 10894 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11021 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10903,66 +11030,156 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let op : ( +# 824 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 11076 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic op in let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = let _1 = + let e2 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 11091 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 11096 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 11102 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 11113 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 11119 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 11139 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 11145 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in let op = let _1 = -# 3809 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (">") -# 10936 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4191 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( op ) +# 11152 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 -# 1031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkoperator ~loc:_sloc _1 ) -# 10944 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11161 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkinfix e1 op e2 ) -# 10950 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11167 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 10960 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11177 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 10966 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11183 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10975,14 +11192,14 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = e1; @@ -10992,49 +11209,66 @@ module Tables = struct }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.expression) = Obj.magic _1 in + let op : ( +# 825 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 11217 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic op in let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = let _1 = + let e2 = + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 11229 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 11234 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in let op = let _1 = -# 3810 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("or") -# 11008 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4192 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( op ) +# 11241 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 -# 1031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkoperator ~loc:_sloc _1 ) -# 11016 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11250 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkinfix e1 op e2 ) -# 11022 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11256 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in + let _startpos__1_ = _startpos_e1_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 11032 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11266 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 11038 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11272 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11047,66 +11281,156 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let op : ( +# 825 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 11327 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic op in let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = let _1 = + let e2 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 11342 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 11347 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 11353 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 11364 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 11370 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 11390 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 11396 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in let op = let _1 = -# 3811 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("||") -# 11080 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4192 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( op ) +# 11403 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 -# 1031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkoperator ~loc:_sloc _1 ) -# 11088 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11412 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkinfix e1 op e2 ) -# 11094 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11418 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 11104 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11428 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 11110 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11434 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11119,14 +11443,14 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = e1; @@ -11136,49 +11460,66 @@ module Tables = struct }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.expression) = Obj.magic _1 in + let op : ( +# 826 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 11468 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic op in let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = let _1 = + let e2 = + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 11480 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 11485 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in let op = let _1 = -# 3812 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("&") -# 11152 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4193 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( op ) +# 11492 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 -# 1031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkoperator ~loc:_sloc _1 ) -# 11160 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11501 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkinfix e1 op e2 ) -# 11166 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11507 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in + let _startpos__1_ = _startpos_e1_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 11176 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 11182 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11523 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11191,66 +11532,156 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = e1; - MenhirLib.EngineTypes.startp = _startpos_e1_; - MenhirLib.EngineTypes.endp = _endpos_e1_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let op : ( +# 826 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 11578 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic op in let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = let _1 = + let e2 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 11593 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 11598 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 11604 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 11615 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 11621 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 11641 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 11647 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in let op = let _1 = -# 3813 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("&&") -# 11224 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4193 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( op ) +# 11654 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 -# 1031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkoperator ~loc:_sloc _1 ) -# 11232 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11663 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkinfix e1 op e2 ) -# 11238 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11669 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 11248 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11679 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 11254 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11685 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11263,9 +11694,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e2; - MenhirLib.EngineTypes.startp = _startpos_e2_; - MenhirLib.EngineTypes.endp = _endpos_e2_; + 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 = _1; @@ -11280,49 +11711,62 @@ module Tables = struct }; }; } = _menhir_stack in - let e2 : (Parsetree.expression) = Obj.magic e2 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_e1_ in - let _endpos = _endpos_e2_ in + let _endpos = _endpos__1_inlined1_ in let _v : (Parsetree.expression) = let _1 = let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 11728 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 11733 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in let op = let _1 = -# 3814 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (":=") -# 11296 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4194 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("+") +# 11740 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkoperator ~loc:_sloc _1 ) -# 11304 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11748 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkinfix e1 op e2 ) -# 11310 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11754 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 11320 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11764 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 11326 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11770 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11335,45 +11779,152 @@ module Tables = struct 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.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 = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; } = _menhir_stack in - let _2 : (Parsetree.expression) = Obj.magic _2 in - let _1 : (string) = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = let _1 = - let _loc__1_ = (_startpos__1_, _endpos__1_) in + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 11837 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 11842 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 11848 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 11859 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 11865 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 11885 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 11891 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4194 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("+") +# 11898 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 11906 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 2513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkuminus ~oploc:_loc__1_ _1 _2 ) -# 11361 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 11912 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos__1_ = _endpos__2_ in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 11371 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11922 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 11377 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 11928 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11386,87 +11937,79 @@ module Tables = struct 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.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.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : (Parsetree.expression) = Obj.magic _2 in - let _1 : (string) = Obj.magic _1 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in let _v : (Parsetree.expression) = let _1 = let _1 = - let _loc__1_ = (_startpos__1_, _endpos__1_) in + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 11971 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 11976 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4195 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("+.") +# 11983 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 11991 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 2515 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkuplus ~oploc:_loc__1_ _1 _2 ) -# 11412 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 11997 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos__1_ = _endpos__2_ in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 11422 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 12007 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 11428 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _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 : (Parsetree.expression) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Ast_helper.let_bindings) = 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 _endpos = _endpos__3_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2433 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( expr_of_let_bindings ~loc:_sloc _1 (merloc _endpos__2_ _3) ) -# 11470 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 12013 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11479,62 +12022,152 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = body; - MenhirLib.EngineTypes.startp = _startpos_body_; - MenhirLib.EngineTypes.endp = _endpos_body_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = bindings; - MenhirLib.EngineTypes.startp = _startpos_bindings_; - MenhirLib.EngineTypes.endp = _endpos_bindings_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; } = _menhir_stack in - let body : (Parsetree.expression) = Obj.magic body in - let _3 : unit = Obj.magic _3 in - let bindings : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = Obj.magic bindings in - let _1 : ( -# 783 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 11512 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos_body_ in - let _v : (Parsetree.expression) = let pbop_op = + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 12080 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 12085 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 12091 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12102 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 12108 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 12128 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12134 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4195 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("+.") +# 12141 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12149 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 12155 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 11524 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 12165 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _startpos_pbop_op_ = _startpos__1_ in - let _endpos = _endpos_body_ in - let _symbolstartpos = _startpos_pbop_op_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2435 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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}) ) -# 11538 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12171 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11547,98 +12180,79 @@ 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.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 : (Parsetree.expression) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.expression) = 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 _endpos = _endpos__3_ in - let _symbolstartpos = _startpos__1_ in - let _loc__2_ = (_startpos__2_, _endpos__2_) in - let _sloc = (_symbolstartpos, _endpos) in - -# 2441 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkexp_cons ~loc:_sloc _loc__2_ (ghexp ~loc:_sloc (Pexp_tuple[_1;(merloc _endpos__2_ _3)])) ) -# 11581 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.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.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 11616 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in let _v : (Parsetree.expression) = let _1 = - let _1 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 11625 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12214 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12219 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4196 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("+=") +# 12226 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12234 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 12240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 11633 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 12250 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos__3_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2443 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkexp ~loc:_sloc (Pexp_setinstvar(_1, _3)) ) -# 11642 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12256 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11651,61 +12265,152 @@ 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; }; } = _menhir_stack in - let _5 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _1_inlined1 : (Longident.t) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 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 _3 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 12323 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 12328 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 12334 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12345 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 12351 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 12371 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12377 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4196 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("+=") +# 12384 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12392 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 12398 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 11700 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 12408 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos__5_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2445 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkexp ~loc:_sloc (Pexp_setfield(_1, _3, _5)) ) -# 11709 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12414 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11718,77 +12423,79 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + 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 = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { - 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 = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - 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 = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let _5 : unit = Obj.magic _5 in - let i : (Parsetree.expression) = Obj.magic i in - let _3 : unit = Obj.magic _3 in - let d : unit = Obj.magic d in - let array : (Parsetree.expression) = Obj.magic array in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in let _v : (Parsetree.expression) = let _1 = - let r = -# 2446 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (Some v) -# 11777 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12457 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12462 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("-") +# 12469 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12477 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 12483 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2406 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( array, d, Paren, i, r ) -# 11782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 12493 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2447 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 11792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12499 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11801,77 +12508,152 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; + 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 = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let _5 : unit = Obj.magic _5 in - let i : (Parsetree.expression) = Obj.magic i in - let _3 : unit = Obj.magic _3 in - let d : unit = Obj.magic d in - let array : (Parsetree.expression) = Obj.magic array in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let r = -# 2446 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (Some v) -# 11860 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 12566 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 12571 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 12577 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12588 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 12594 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 12614 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12620 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("-") +# 12627 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12635 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 12641 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2408 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( array, d, Brace, i, r ) -# 11865 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 12651 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2447 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 11875 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12657 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11884,77 +12666,79 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + 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 = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { - 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 = i; - MenhirLib.EngineTypes.startp = _startpos_i_; - MenhirLib.EngineTypes.endp = _endpos_i_; - 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 = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let _5 : unit = Obj.magic _5 in - let i : (Parsetree.expression) = Obj.magic i in - let _3 : unit = Obj.magic _3 in - let d : unit = Obj.magic d in - let array : (Parsetree.expression) = Obj.magic array in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in let _v : (Parsetree.expression) = let _1 = - let r = -# 2446 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (Some v) -# 11943 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12700 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12705 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4198 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("-.") +# 12712 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12720 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 12726 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2410 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( array, d, Bracket, i, r ) -# 11948 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 12736 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2447 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 11958 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12742 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11967,98 +12751,152 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = es; - MenhirLib.EngineTypes.startp = _startpos_es_; - MenhirLib.EngineTypes.endp = _endpos_es_; + 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 = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; 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 = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( -# 782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 12020 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _2 in - let array : (Parsetree.expression) = Obj.magic array in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let r = -# 2448 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (Some v) -# 12030 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let i = -# 2904 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( es ) -# 12035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let d = - let _1 = -# 124 "" - ( None ) -# 12041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 12809 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 12814 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 12820 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12831 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 12837 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 12857 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12863 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4198 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("-.") +# 12870 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12878 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 2422 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 12046 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 12884 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2406 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( array, d, Paren, i, r ) -# 12052 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 12894 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2449 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 12062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12900 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12071,123 +12909,79 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + 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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { - 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 = _; - 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; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in - let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( -# 782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 12136 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _2 in - let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let array : (Parsetree.expression) = Obj.magic array in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in let _v : (Parsetree.expression) = let _1 = - let r = - let _1 = _1_inlined1 in - -# 2448 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (Some v) -# 12150 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let i = -# 2904 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( es ) -# 12156 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let d = - let _1 = - let _2 = _2_inlined1 in - let x = -# 2422 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (_2) -# 12164 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12943 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 126 "" - ( Some x ) -# 12169 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12948 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4199 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("*") +# 12955 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 12963 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2422 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 12175 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 12969 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2406 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( array, d, Paren, i, r ) -# 12181 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 12979 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2449 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 12191 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 12985 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12200,98 +12994,152 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = es; - MenhirLib.EngineTypes.startp = _startpos_es_; - MenhirLib.EngineTypes.endp = _endpos_es_; + 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 = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; 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 = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( -# 782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 12253 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _2 in - let array : (Parsetree.expression) = Obj.magic array in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let r = -# 2448 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (Some v) -# 12263 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let i = -# 2904 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( es ) -# 12268 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let d = - let _1 = -# 124 "" - ( None ) -# 12274 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 13052 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 13057 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 13063 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 13074 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 13080 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 13100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 13106 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4199 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("*") +# 13113 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13121 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 2422 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 12279 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 13127 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2408 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( array, d, Brace, i, r ) -# 12285 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 13137 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2449 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 12295 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 13143 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12304,123 +13152,79 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + 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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { - 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 = _; - 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; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in - let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( -# 782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 12369 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _2 in - let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let array : (Parsetree.expression) = Obj.magic array in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in let _v : (Parsetree.expression) = let _1 = - let r = - let _1 = _1_inlined1 in - -# 2448 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (Some v) -# 12383 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let i = -# 2904 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( es ) -# 12389 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let d = - let _1 = - let _2 = _2_inlined1 in - let x = -# 2422 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (_2) -# 12397 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 13186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 126 "" - ( Some x ) -# 12402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 13191 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4200 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("%") +# 13198 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13206 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2422 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 12408 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 13212 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2408 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( array, d, Brace, i, r ) -# 12414 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 13222 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2449 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 12424 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 13228 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12433,98 +13237,152 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = es; - MenhirLib.EngineTypes.startp = _startpos_es_; - MenhirLib.EngineTypes.endp = _endpos_es_; + 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 = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; 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 = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( -# 782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 12486 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _2 in - let array : (Parsetree.expression) = Obj.magic array in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let r = -# 2448 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (Some v) -# 12496 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let i = -# 2904 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( es ) -# 12501 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let d = - let _1 = -# 124 "" - ( None ) -# 12507 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 2422 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 12512 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 13295 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 13300 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 13306 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 13317 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 13323 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 13343 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 13349 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4200 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("%") +# 13356 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13364 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 13370 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2410 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( array, d, Bracket, i, r ) -# 12518 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 13380 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2449 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 12528 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 13386 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12537,123 +13395,79 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = v; - MenhirLib.EngineTypes.startp = _startpos_v_; - MenhirLib.EngineTypes.endp = _endpos_v_; + 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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { - 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 = _; - 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; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = array; - MenhirLib.EngineTypes.startp = _startpos_array_; - MenhirLib.EngineTypes.endp = _endpos_array_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let v : (Parsetree.expression) = Obj.magic v in - let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( -# 782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 12602 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _2 in - let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in - let array : (Parsetree.expression) = Obj.magic array in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_array_ in - let _endpos = _endpos_v_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in let _v : (Parsetree.expression) = let _1 = - let r = - let _1 = _1_inlined1 in - -# 2448 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (Some v) -# 12616 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let i = -# 2904 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( es ) -# 12622 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let d = - let _1 = - let _2 = _2_inlined1 in - let x = -# 2422 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (_2) -# 12630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 13429 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 126 "" - ( Some x ) -# 12635 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 13434 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4201 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("=") +# 13441 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13449 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2422 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 12641 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 13455 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2410 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( array, d, Bracket, i, r ) -# 12647 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 13465 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2449 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 12657 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 13471 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12666,44 +13480,152 @@ module Tables = struct 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.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 = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; } = _menhir_stack in - let _2 : (Parsetree.attribute) = Obj.magic _2 in - let _1 : (Parsetree.expression) = 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) = -# 2451 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Exp.attr _1 _2 ) -# 12689 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (string Location.loc option) = -# 4110 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( None ) -# 12707 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 13538 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 13543 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 13549 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 13560 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 13566 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 13586 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 13592 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4201 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("=") +# 13599 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13607 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 13613 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 13623 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 13629 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12716,104 +13638,79 @@ module Tables = struct 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.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.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - } = _menhir_stack in - let _2 : (string Location.loc) = 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 : (string Location.loc option) = -# 4111 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Some _2 ) -# 12739 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.payload) = Obj.magic _3 in - let _2 : (string Location.loc) = Obj.magic _2 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : (Parsetree.extension) = -# 4123 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (_2, _3) ) -# 12785 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : ( -# 844 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string * Location.t * string * Location.t * string option) -# 12806 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.extension) = let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 13672 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 13677 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4202 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("<") +# 13684 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13692 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 13698 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 13708 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 4125 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mk_quotedext ~loc:_sloc _1 ) -# 12817 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 13714 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12826,82 +13723,152 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; }; } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let _1_inlined2 : (Longident.t) = Obj.magic _1_inlined2 in - let _3 : unit = Obj.magic _3 in - let _1_inlined1 : (string) = Obj.magic _1_inlined1 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined3_ in - let _v : (Parsetree.extension_constructor) = let attrs = - let _1 = _1_inlined3 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 13781 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 13786 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 13792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 12872 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos_attrs_ = _endpos__1_inlined3_ in - let lid = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in +# 13803 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 13809 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 13829 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 13835 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4202 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("<") +# 13842 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13850 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 13856 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 12884 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let cid = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 12895 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 13866 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos_attrs_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 3449 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let info = symbol_info _endpos in - Te.rebind cid lid ~attrs ~loc:(make_loc _sloc) ~info ) -# 12905 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 13872 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12914,80 +13881,79 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; 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 = _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 = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Longident.t) = Obj.magic _1_inlined1 in - let _3 : unit = Obj.magic _3 in - let _1 : (string) = Obj.magic _1 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined2_ in - let _v : (Parsetree.extension_constructor) = let attrs = - let _1 = _1_inlined2 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 12953 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos_attrs_ = _endpos__1_inlined2_ in - let lid = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 12965 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let cid = + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 13915 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 13920 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4203 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (">") +# 13927 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 13935 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 13941 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 12975 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 13951 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _startpos_cid_ = _startpos__1_ in - let _1 = -# 3928 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( () ) -# 12982 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos = _endpos_attrs_ in - let _symbolstartpos = _startpos_cid_ in - let _sloc = (_symbolstartpos, _endpos) in -# 3449 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let info = symbol_info _endpos in - Te.rebind cid lid ~attrs ~loc:(make_loc _sloc) ~info ) -# 12991 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 13957 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13000,67 +13966,152 @@ module Tables = struct 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.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; } = _menhir_stack in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.payload) = Obj.magic _3 in - let _2 : (string Location.loc) = Obj.magic _2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : (Parsetree.attribute) = let _endpos = _endpos__4_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 4098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mark_symbol_docs _sloc; - Attr.mk ~loc:(make_loc _sloc) _2 _3 ) -# 13041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = let params = -# 2199 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [] ) -# 13059 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 14024 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 14029 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 14035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 14046 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 14052 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 14072 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 14078 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4203 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (">") +# 14085 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14093 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 14099 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 14109 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 2016 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( params ) -# 13064 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 14115 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13073,77 +14124,79 @@ 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _3 : unit = Obj.magic _3 in - let xs : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic xs in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = let params = - let params = - let xs = -# 253 "" - ( List.rev xs ) -# 13105 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 14158 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 14163 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4204 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("or") +# 14170 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14178 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 1138 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 13110 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 14184 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2201 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( params ) -# 13116 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 14194 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2016 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( params ) -# 13122 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.expression) = 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.expression) = -# 2822 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 13147 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 14200 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13156,36 +14209,152 @@ 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 = 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.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; }; } = _menhir_stack in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 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 _endpos = _endpos__3_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 14267 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 14272 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 14278 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 14289 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 14295 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 14315 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 14321 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4204 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("or") +# 14328 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14336 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 14342 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 14352 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 2824 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkexp_constraint ~loc:_sloc _3 _1 ) -# 13189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 14358 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13198,26 +14367,79 @@ module Tables = struct 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.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.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : (Parsetree.expression) = Obj.magic _2 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.expression) = -# 2849 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (merloc _endpos__1_ _2) ) -# 13221 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 14401 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 14406 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4205 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("||") +# 14413 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14421 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 14427 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 14437 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 14443 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13230,56 +14452,152 @@ module Tables = struct 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.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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.core_type) = Obj.magic _2 in + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let _1 = -# 2851 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pexp_constraint ((merloc _endpos__3_ _4), _2) ) -# 13268 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos__1_ = _endpos__4_ in + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 14510 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 14515 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 14521 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 14532 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 14538 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 14558 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 14564 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4205 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("||") +# 14571 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14579 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 14585 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 13277 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 14595 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2852 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 13283 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 14601 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13292,32 +14610,79 @@ module Tables = struct 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.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.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let _2 : (Parsetree.expression) = Obj.magic _2 in - let _1 : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = Obj.magic _1 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 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 _endpos = _endpos__2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 14644 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 14649 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4206 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("&") +# 14656 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14664 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 14670 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 14680 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 2855 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let (l,o,p) = _1 in - ghexp ~loc:_sloc (Pexp_fun(l, o, p, _2)) - ) -# 13321 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 14686 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13330,80 +14695,152 @@ 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; }; } = _menhir_stack in - let _5 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let xs : (string Location.loc list) = Obj.magic xs in - let _2 : unit = Obj.magic _2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 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 _3 = -# 2723 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 14753 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 13374 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos = _endpos__5_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in +# 14758 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 14764 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 14775 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 14781 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 14801 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 14807 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4206 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("&") +# 14814 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14822 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 14828 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 14838 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 2860 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mk_newtypes ~loc:_sloc _3 _5 ) -# 13382 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let ty : (Parsetree.core_type) = Obj.magic ty in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_ty_ in - let _endpos = _endpos_ty_ in - let _v : (Parsetree.core_type) = -# 3565 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( ty ) -# 13407 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 14844 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13416,68 +14853,79 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = codomain; - MenhirLib.EngineTypes.startp = _startpos_codomain_; - MenhirLib.EngineTypes.endp = _endpos_codomain_; + 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 = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = label; - MenhirLib.EngineTypes.startp = _startpos_label_; - MenhirLib.EngineTypes.endp = _endpos_label_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let codomain : (Parsetree.core_type) = Obj.magic codomain in - let _3 : unit = Obj.magic _3 in - let _1 : (Parsetree.core_type) = Obj.magic _1 in - let label : (string) = Obj.magic label in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_label_ in - let _endpos = _endpos_codomain_ in - let _v : (Parsetree.core_type) = let _1 = + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = let _1 = - let domain = -# 1002 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 13455 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let label = -# 3577 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Optional label ) -# 13460 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 14887 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 14892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4207 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("&&") +# 14899 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 14907 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 3571 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_arrow(label, domain, codomain) ) -# 13465 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 14913 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mktyp ~loc:_sloc _1 ) -# 13475 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 14923 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3573 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 13481 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 14929 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13490,79 +14938,152 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = codomain; - MenhirLib.EngineTypes.startp = _startpos_codomain_; - MenhirLib.EngineTypes.endp = _endpos_codomain_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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 = label; - MenhirLib.EngineTypes.startp = _startpos_label_; - MenhirLib.EngineTypes.endp = _endpos_label_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; }; } = _menhir_stack in - let codomain : (Parsetree.core_type) = Obj.magic codomain in - let _3 : unit = Obj.magic _3 in - let _1 : (Parsetree.core_type) = Obj.magic _1 in - let _2 : unit = Obj.magic _2 in - let label : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 13530 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic label in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_label_ in - let _endpos = _endpos_codomain_ in - let _v : (Parsetree.core_type) = let _1 = + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = let _1 = - let domain = -# 1002 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 13540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let label = -# 3579 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Labelled label ) -# 13545 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 14996 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 15001 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 15007 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 15018 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 15024 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 15044 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 15050 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4207 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("&&") +# 15057 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 15065 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 3571 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_arrow(label, domain, codomain) ) -# 13550 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 15071 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mktyp ~loc:_sloc _1 ) -# 13560 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 15081 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3573 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 13566 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 15087 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13575,94 +15096,79 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = codomain; - MenhirLib.EngineTypes.startp = _startpos_codomain_; - MenhirLib.EngineTypes.endp = _endpos_codomain_; + 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 = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let codomain : (Parsetree.core_type) = Obj.magic codomain in - let _3 : unit = Obj.magic _3 in - let _1 : (Parsetree.core_type) = Obj.magic _1 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos_codomain_ in - let _v : (Parsetree.core_type) = let _1 = + let _startpos = _startpos_e1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = let _1 = - let domain = -# 1002 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 13607 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let label = -# 3581 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Nolabel ) -# 13612 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let e2 = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 15130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 15135 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4208 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (":=") +# 15142 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 15150 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 3571 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_arrow(label, domain, codomain) ) -# 13617 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 15156 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos__1_ = _endpos_codomain_ in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mktyp ~loc:_sloc _1 ) -# 13627 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 15166 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3573 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 13633 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Lexing.position * Parsetree.functor_parameter) = let _startpos = _startpos__1_ in - -# 1393 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _startpos, Unit ) -# 13666 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 15172 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13675,59 +15181,152 @@ 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = mty; - MenhirLib.EngineTypes.startp = _startpos_mty_; - MenhirLib.EngineTypes.endp = _endpos_mty_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = e1; + MenhirLib.EngineTypes.startp = _startpos_e1_; + MenhirLib.EngineTypes.endp = _endpos_e1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; }; }; } = _menhir_stack in - let _5 : unit = Obj.magic _5 in - let mty : (Parsetree.module_type) = Obj.magic mty in - let _3 : unit = Obj.magic _3 in - let _1_inlined1 : (string option) = Obj.magic _1_inlined1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Lexing.position * Parsetree.functor_parameter) = let x = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _startpos = _startpos_e1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let e2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 15239 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 15244 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 15250 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 15261 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 15267 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 15287 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 15293 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let op = + let _1 = +# 4208 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (":=") +# 15300 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkoperator ~loc:_sloc _1 ) +# 15308 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkinfix e1 op e2 ) +# 15314 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_e1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 13724 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 15324 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _startpos = _startpos__1_ in -# 1396 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _startpos, Named (x, mty) ) -# 13731 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 15330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13739,39 +15338,63 @@ module Tables = struct (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; + 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 _1 : ((Lexing.position * Parsetree.functor_parameter) list) = Obj.magic _1 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : (string) = 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 : ((Lexing.position * Parsetree.functor_parameter) list) = -# 1385 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 13756 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Mlx_ocaml_parsing.Ast_helper.str list * Parsetree.constructor_arguments * - Parsetree.core_type option) = -# 3364 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( ([],Pcstr_tuple [],None) ) -# 13775 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let _2 = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 15366 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 15371 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__2_ = _endpos__1_inlined1_ in + let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 2602 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkuminus ~sloc:_sloc ~oploc:_loc__1_ _1 _2 ) +# 15382 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__1_ = _endpos__1_inlined1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 15392 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 15398 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13784,27 +15407,135 @@ module Tables = struct 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.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 = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _2 : (Parsetree.constructor_arguments) = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : (string) = 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 : (Mlx_ocaml_parsing.Ast_helper.str list * Parsetree.constructor_arguments * - Parsetree.core_type option) = -# 3365 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( ([],_2,None) ) -# 13808 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let _2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 15458 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 15463 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 15469 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 15480 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 15486 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 15506 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 15512 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__2_ = _endpos_xs_ in + let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 2602 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkuminus ~sloc:_sloc ~oploc:_loc__1_ _1 _2 ) +# 15523 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__1_ = _endpos_xs_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 15533 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 15539 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13817,41 +15548,62 @@ module Tables = struct 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.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; 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; - }; - }; + 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.core_type) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let _2 : (Parsetree.constructor_arguments) = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : (string) = 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 : (Mlx_ocaml_parsing.Ast_helper.str list * Parsetree.constructor_arguments * - Parsetree.core_type option) = -# 3367 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( ([],_2,Some _4) ) -# 13855 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let _1 = + let _2 = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 15575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 15580 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__2_ = _endpos__1_inlined1_ in + let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 2604 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkuplus ~sloc:_sloc ~oploc:_loc__1_ _1 _2 ) +# 15591 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__1_ = _endpos__1_inlined1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 15601 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 15607 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13864,74 +15616,135 @@ 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 = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + 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 = 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 _6 : (Parsetree.core_type) = Obj.magic _6 in - let _5 : unit = Obj.magic _5 in - let _4 : (Parsetree.constructor_arguments) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let xs : (string Location.loc list) = Obj.magic xs in - let _1 : unit = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : (string) = 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 : (Mlx_ocaml_parsing.Ast_helper.str list * Parsetree.constructor_arguments * - Parsetree.core_type option) = let _2 = + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = let _1 = - let xs = + let _2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = # 253 "" ( List.rev xs ) -# 13918 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1106 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 15667 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 15672 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 13923 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 15678 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 15689 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 15695 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 15715 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 15721 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__2_ = _endpos_xs_ in + let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 2604 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkuplus ~sloc:_sloc ~oploc:_loc__1_ _1 _2 ) +# 15732 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos__1_ = _endpos_xs_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 13929 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 15742 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3370 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (_2,_4,Some _6) ) -# 13935 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 15748 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13944,27 +15757,36 @@ module Tables = struct 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.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 _2 : (Parsetree.core_type) = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _3 : (Parsetree.expression) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Ast_helper.let_bindings) = 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 : (Mlx_ocaml_parsing.Ast_helper.str list * Parsetree.constructor_arguments * - Parsetree.core_type option) = -# 3372 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( ([],Pcstr_tuple [],Some _2) ) -# 13968 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__3_ in + let _v : (Parsetree.expression) = let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2519 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( expr_of_let_bindings ~loc:_sloc _1 (merloc _endpos__2_ _3) ) +# 15790 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13977,9 +15799,9 @@ module Tables = struct 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.semv = body; + MenhirLib.EngineTypes.startp = _startpos_body_; + MenhirLib.EngineTypes.endp = _endpos_body_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _3; @@ -13987,9 +15809,9 @@ module Tables = struct 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.semv = bindings; + MenhirLib.EngineTypes.startp = _startpos_bindings_; + MenhirLib.EngineTypes.endp = _endpos_bindings_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -14000,37 +15822,39 @@ module Tables = struct }; }; } = _menhir_stack in - let _4 : (Parsetree.core_type) = Obj.magic _4 in + let body : (Parsetree.expression) = Obj.magic body in let _3 : unit = Obj.magic _3 in - let xs : (string Location.loc list) = Obj.magic xs in - let _1 : unit = Obj.magic _1 in + let bindings : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = Obj.magic bindings in + let _1 : ( +# 828 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 15832 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Mlx_ocaml_parsing.Ast_helper.str list * Parsetree.constructor_arguments * - Parsetree.core_type option) = let _2 = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 14017 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1106 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 14022 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _endpos = _endpos_body_ in + let _v : (Parsetree.expression) = let pbop_op = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 14028 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 15844 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _startpos_pbop_op_ = _startpos__1_ in + let _endpos = _endpos_body_ in + let _symbolstartpos = _startpos_pbop_op_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3374 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (_2,Pcstr_tuple [],Some _4) ) -# 14034 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2521 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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}) ) +# 15858 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14043,71 +15867,183 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = vars_args_res; - MenhirLib.EngineTypes.startp = _startpos_vars_args_res_; - MenhirLib.EngineTypes.endp = _endpos_vars_args_res_; + 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 _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _3 = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 15899 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 15904 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos__1_inlined1_ in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _loc__2_ = (_startpos__2_, _endpos__2_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 2527 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp_cons ~loc:_sloc _loc__2_ + (ghexp ~loc:_sloc (Pexp_tuple[None,_1;None,(merloc _endpos__2_ _3)])) ) +# 15916 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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 = _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 _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let vars_args_res : (Mlx_ocaml_parsing.Ast_helper.str list * Parsetree.constructor_arguments * - Parsetree.core_type option) = Obj.magic vars_args_res in - let _1_inlined1 : (string) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined2_ in - let _v : (Mlx_ocaml_parsing.Ast_helper.str * Mlx_ocaml_parsing.Ast_helper.str list * - Parsetree.constructor_arguments * Parsetree.core_type option * - Parsetree.attributes * Warnings.loc * Mlx_ocaml_parsing.Docstrings.info) = let attrs = - let _1 = _1_inlined2 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _3 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 15981 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 15986 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 15992 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 14085 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos_attrs_ = _endpos__1_inlined2_ in - let cid = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in +# 16003 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 16009 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 16029 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 14097 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 16035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos_attrs_ in + let _endpos__3_ = _endpos_xs_ in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in + let _loc__2_ = (_startpos__2_, _endpos__2_) in let _sloc = (_symbolstartpos, _endpos) in -# 3312 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 - ) -# 14111 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2527 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp_cons ~loc:_sloc _loc__2_ + (ghexp ~loc:_sloc (Pexp_tuple[None,_1;None,(merloc _endpos__2_ _3)])) ) +# 16047 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14125,9 +16061,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = vars_args_res; - MenhirLib.EngineTypes.startp = _startpos_vars_args_res_; - MenhirLib.EngineTypes.endp = _endpos_vars_args_res_; + 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; @@ -14137,52 +16073,52 @@ module Tables = struct }; }; } = _menhir_stack in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let vars_args_res : (Mlx_ocaml_parsing.Ast_helper.str list * Parsetree.constructor_arguments * - Parsetree.core_type option) = Obj.magic vars_args_res in - let _1 : (string) = Obj.magic _1 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 16082 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_inlined1_ in - let _v : (Mlx_ocaml_parsing.Ast_helper.str * Mlx_ocaml_parsing.Ast_helper.str list * - Parsetree.constructor_arguments * Parsetree.core_type option * - Parsetree.attributes * Warnings.loc * Mlx_ocaml_parsing.Docstrings.info) = let attrs = + let _v : (Parsetree.expression) = let _3 = let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 16092 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 14155 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 16097 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos_attrs_ = _endpos__1_inlined1_ in - let cid = + let _endpos__3_ = _endpos__1_inlined1_ in + let _1 = + let _1 = +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 16105 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 14166 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 16113 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _startpos_cid_ = _startpos__1_ in - let _1 = -# 3928 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( () ) -# 14173 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos = _endpos_attrs_ in - let _symbolstartpos = _startpos_cid_ in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3312 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 - ) -# 14186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2530 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc (Pexp_setinstvar(_1, _3)) ) +# 16122 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14195,150 +16131,142 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined4; - MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = params; - MenhirLib.EngineTypes.startp = _startpos_params_; - MenhirLib.EngineTypes.endp = _endpos_params_; - 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 = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; - 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 _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in - let xs : ((Parsetree.core_type * Parsetree.core_type * Warnings.loc) list) = Obj.magic xs in - 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 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 14259 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 - let ext : (string Location.loc option) = Obj.magic ext in - let _1 : unit = Obj.magic _1 in +# 16178 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined4_ in - let _v : ((Asttypes.rec_flag * string Location.loc option) * - Parsetree.type_declaration) = let attrs2 = - let _1 = _1_inlined4 in - -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 14274 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined4_ in - let cstrs = + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _3 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in let _1 = - let xs = + let _3 = + let xs = + let xs = # 253 "" ( List.rev xs ) -# 14283 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1088 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 16191 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 16196 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 14288 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 16202 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 16213 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 16219 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 16239 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3215 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 14294 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let kind_priv_manifest = - let _1 = _1_inlined3 in - -# 3250 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _2 ) -# 14302 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 16245 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos__3_ = _endpos_xs_ in + let _1 = + let _1 = +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 16253 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 14313 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let flag = -# 3948 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Recursive ) -# 14319 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let attrs1 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 14326 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 16261 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos_attrs2_ in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3187 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let (kind, priv, manifest) = kind_priv_manifest in - let docs = symbol_docs _sloc in - let attrs = attrs1 @ attrs2 in - let loc = make_loc _sloc in - (flag, ext), - Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs - ) -# 14342 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2530 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc (Pexp_setinstvar(_1, _3)) ) +# 16270 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14351,163 +16279,75 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined5; - MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; 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 = _; - MenhirLib.EngineTypes.semv = _1_inlined4; - MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = params; - MenhirLib.EngineTypes.startp = _startpos_params_; - MenhirLib.EngineTypes.endp = _endpos_params_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; - 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 _1_inlined5 : (Parsetree.attributes) = Obj.magic _1_inlined5 in - let xs : ((Parsetree.core_type * Parsetree.core_type * Warnings.loc) list) = Obj.magic xs in - 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 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 14421 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let ext : (string Location.loc option) = Obj.magic ext in - let _1 : unit = Obj.magic _1 in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _4 : unit = Obj.magic _4 in + let _1_inlined1 : (Longident.t) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined5_ in - let _v : ((Asttypes.rec_flag * string Location.loc option) * - Parsetree.type_declaration) = let attrs2 = - let _1 = _1_inlined5 in + let _endpos = _endpos__1_inlined2_ in + let _v : (Parsetree.expression) = let _5 = + let _1 = _1_inlined2 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 16325 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 14437 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 16330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos_attrs2_ = _endpos__1_inlined5_ in - let cstrs = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 14446 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1088 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 14451 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _endpos__5_ = _endpos__1_inlined2_ in + let _3 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3215 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 14457 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let kind_priv_manifest = - let _1 = _1_inlined4 in - -# 3250 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _2 ) -# 14465 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 14476 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let flag = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _startpos = _startpos__1_ in - let _loc = (_startpos, _endpos) in - -# 3950 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( not_expecting _loc "nonrec flag"; Recursive ) -# 14487 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 14495 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 16342 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos_attrs2_ in + let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3187 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let (kind, priv, manifest) = kind_priv_manifest in - let docs = symbol_docs _sloc in - let attrs = attrs1 @ attrs2 in - let loc = make_loc _sloc in - (flag, ext), - Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs - ) -# 14511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2532 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc (Pexp_setfield(_1, _3, _5)) ) +# 16351 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14520,19 +16360,19 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = kind_priv_manifest; - MenhirLib.EngineTypes.startp = _startpos_kind_priv_manifest_; - MenhirLib.EngineTypes.endp = _endpos_kind_priv_manifest_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined2; @@ -14540,9 +16380,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = params; - MenhirLib.EngineTypes.startp = _startpos_params_; - MenhirLib.EngineTypes.endp = _endpos_params_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined1; @@ -14550,9 +16390,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; + 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; @@ -14567,88 +16407,101 @@ module Tables = struct }; }; } = _menhir_stack in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let xs : ((Parsetree.core_type * Parsetree.core_type * Warnings.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 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 14577 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 - let ext : (string Location.loc option) = Obj.magic ext in - let _1 : unit = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Location.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _4 : unit = Obj.magic _4 in + let _1_inlined1 : (Longident.t) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined3_ in - let _v : ((Asttypes.rec_flag * string Location.loc option) * - Parsetree.type_declaration) = let attrs2 = - let _1 = _1_inlined3 in - -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 14592 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let cstrs = + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _5 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined2_, _1_inlined4, _1_inlined3, _1_inlined2) in let _1 = - let xs = + let _3 = + let xs = + let xs = # 253 "" ( List.rev xs ) -# 14601 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1088 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 16430 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 16435 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 14606 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 16441 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 16452 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 16458 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 16478 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3215 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 14612 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 16484 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos__5_ = _endpos_xs_ in + let _3 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 14623 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let flag = -# 3944 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Recursive ) -# 14629 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let attrs1 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 14636 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 16496 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos_attrs2_ in + let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3187 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let (kind, priv, manifest) = kind_priv_manifest in - let docs = symbol_docs _sloc in - let attrs = attrs1 @ attrs2 in - let loc = make_loc _sloc in - (flag, ext), - Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs - ) -# 14652 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2532 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc (Pexp_setfield(_1, _3, _5)) ) +# 16505 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14661,52 +16514,40 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined4; - MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + 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 = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = kind_priv_manifest; - MenhirLib.EngineTypes.startp = _startpos_kind_priv_manifest_; - MenhirLib.EngineTypes.endp = _endpos_kind_priv_manifest_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = params; - MenhirLib.EngineTypes.startp = _startpos_params_; - MenhirLib.EngineTypes.endp = _endpos_params_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; 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 = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; - 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 = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; @@ -14714,92 +16555,51 @@ module Tables = struct }; }; } = _menhir_stack in - let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in - let xs : ((Parsetree.core_type * Parsetree.core_type * Warnings.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 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 14724 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let ext : (string Location.loc option) = Obj.magic ext in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let i : (Parsetree.expression) = Obj.magic i in + let _3 : unit = Obj.magic _3 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined4_ in - let _v : ((Asttypes.rec_flag * string Location.loc option) * - Parsetree.type_declaration) = let attrs2 = - let _1 = _1_inlined4 in - -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 14740 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined4_ in - let cstrs = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 14749 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 16576 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 16581 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 1088 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 14754 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2533 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (Some v) +# 16587 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3215 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 14760 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 14771 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let flag = - let _1 = _1_inlined2 in - -# 3945 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Nonrecursive ) -# 14779 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 14787 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2492 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( array, d, Paren, i, r ) +# 16593 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos_attrs2_ in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_array_) in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3187 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let (kind, priv, manifest) = kind_priv_manifest in - let docs = symbol_docs _sloc in - let attrs = attrs1 @ attrs2 in - let loc = make_loc _sloc in - (flag, ext), - Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs - ) -# 14803 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2534 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 16603 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14811,24 +16611,166 @@ module Tables = struct (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; + 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 = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + 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 = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; } = _menhir_stack in - let _1 : ( -# 856 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 14824 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let i : (Parsetree.expression) = Obj.magic i in + let _3 : unit = Obj.magic _3 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 16698 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 16703 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 16709 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 16720 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 16726 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 16746 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 16752 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2533 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (Some v) +# 16758 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2492 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( array, d, Paren, i, r ) +# 16764 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in let _endpos = _endpos__1_ in - let _v : (string) = -# 3765 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 14832 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2534 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 16774 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14840,24 +16782,93 @@ module Tables = struct (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; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + 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 = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; } = _menhir_stack in - let _1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 14853 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let i : (Parsetree.expression) = Obj.magic i in + let _3 : unit = Obj.magic _3 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 16845 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 16850 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2533 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (Some v) +# 16856 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2494 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( array, d, Brace, i, r ) +# 16862 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_array_) in let _endpos = _endpos__1_ in - let _v : (string) = -# 3766 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 14861 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2534 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 16872 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14870,76 +16881,165 @@ module Tables = struct 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.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 _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.structure) = 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.structure) = -# 1259 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 14893 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (string) = -# 3817 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( "" ) -# 14911 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + 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 = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; }; } = _menhir_stack in - let _2 : unit = Obj.magic _2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let i : (Parsetree.expression) = Obj.magic i in + let _3 : unit = Obj.magic _3 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (string) = -# 3818 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( ";.." ) -# 14943 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 16967 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 16972 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 16978 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 16989 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 16995 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 17015 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 17021 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2533 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (Some v) +# 17027 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2494 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( array, d, Brace, i, r ) +# 17033 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2534 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 17043 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14952,26 +17052,92 @@ module Tables = struct 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.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.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + 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 = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; }; } = _menhir_stack in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.signature) = Obj.magic _1 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let i : (Parsetree.expression) = Obj.magic i in + let _3 : unit = Obj.magic _3 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.signature) = -# 1266 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 14975 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 17114 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 17119 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2533 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (Some v) +# 17125 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2496 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( array, d, Bracket, i, r ) +# 17131 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2534 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 17141 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14984,72 +17150,165 @@ module Tables = struct 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.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + 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 = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; }; }; }; } = _menhir_stack in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.payload) = Obj.magic _3 in - let _2 : (string Location.loc) = Obj.magic _2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let i : (Parsetree.expression) = Obj.magic i in + let _3 : unit = Obj.magic _3 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : (Parsetree.extension) = -# 4128 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (_2, _3) ) -# 15021 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : ( -# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string * Location.t * string * Location.t * string option) -# 15042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 17236 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 17241 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 17247 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 17258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 17264 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 17284 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 17290 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2533 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (Some v) +# 17296 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2496 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( array, d, Bracket, i, r ) +# 17302 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in let _endpos = _endpos__1_ in - let _v : (Parsetree.extension) = let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mk_quotedext ~loc:_sloc _1 ) -# 15053 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2534 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 17312 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15062,57 +17321,113 @@ 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = tag; - MenhirLib.EngineTypes.startp = _startpos_tag_; - MenhirLib.EngineTypes.endp = _endpos_tag_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; }; } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 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 xs : (((Lexing.position * Lexing.position) * - [ `Prop of string * Parsetree.expression - | `Prop_opt of string * Parsetree.expression - | `Prop_opt_punned of string - | `Prop_punned of string ]) - list) = Obj.magic xs in - let tag : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * Longident.t) = Obj.magic tag in + let _2 : ( +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 17374 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _2 in + let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_tag_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.expression_desc) = let props = - let xs = -# 253 "" - ( List.rev xs ) -# 15098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 17387 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 17392 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2535 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (Some v) +# 17398 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let i = +# 3117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( es ) +# 17404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let d = + let _1 = +# 124 "" + ( None ) +# 17410 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 17415 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 1088 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 15103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2492 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( array, d, Paren, i, r ) +# 17421 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _loc_tag_ = (_startpos_tag_, _endpos_tag_) in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2680 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let children = - let children, loc = mktailexp _loc_tag_ [] in - mkexp ~loc children - in - Jsx_helper.make_jsx_element () ~raise:raise_error ~loc:_loc_tag_ ~tag ~end_tag:None ~props ~children - ) -# 15116 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2536 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 17431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15125,96 +17440,9770 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = end_tag_; - MenhirLib.EngineTypes.startp = _startpos_end_tag__; - MenhirLib.EngineTypes.endp = _endpos_end_tag__; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = end_tag; - MenhirLib.EngineTypes.startp = _startpos_end_tag_; - MenhirLib.EngineTypes.endp = _endpos_end_tag_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs_inlined1; - MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; - MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + 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 = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = tag; - MenhirLib.EngineTypes.startp = _startpos_tag_; - MenhirLib.EngineTypes.endp = _endpos_tag_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - } = _menhir_stack in - let end_tag_ : unit = Obj.magic end_tag_ in + 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 = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 17514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _2 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 17530 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 17535 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 17541 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 17552 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 17558 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 17578 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 17584 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2535 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (Some v) +# 17590 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let i = +# 3117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( es ) +# 17596 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let d = + let _1 = +# 124 "" + ( None ) +# 17602 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 17607 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2492 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( array, d, Paren, i, r ) +# 17613 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2536 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 17623 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _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 = _; + 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; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 17697 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined2_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let v = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 17713 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 17718 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2535 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (Some v) +# 17724 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let i = +# 3117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( es ) +# 17730 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (_2) +# 17738 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 126 "" + ( Some x ) +# 17743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 17749 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2492 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( array, d, Paren, i, r ) +# 17755 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined2_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2536 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 17765 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _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 = _; + 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; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Location.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 17860 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined2_, _1_inlined4, _1_inlined3, _1_inlined2, _1_inlined1) in + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 17879 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 17884 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 17890 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 17901 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 17907 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 17927 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 17933 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2535 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (Some v) +# 17939 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let i = +# 3117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( es ) +# 17945 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (_2) +# 17953 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 126 "" + ( Some x ) +# 17958 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 17964 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2492 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( array, d, Paren, i, r ) +# 17970 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2536 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 17980 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + 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 = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 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 : ( +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 18042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _2 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 18055 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 18060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2535 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (Some v) +# 18066 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let i = +# 3117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( es ) +# 18072 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let d = + let _1 = +# 124 "" + ( None ) +# 18078 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 18083 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2494 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( array, d, Brace, i, r ) +# 18089 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2536 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 18099 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + 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 = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 18182 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _2 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 18198 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 18203 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 18209 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 18220 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 18226 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 18246 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 18252 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2535 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (Some v) +# 18258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let i = +# 3117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( es ) +# 18264 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let d = + let _1 = +# 124 "" + ( None ) +# 18270 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 18275 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2494 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( array, d, Brace, i, r ) +# 18281 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2536 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 18291 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _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 = _; + 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; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 18365 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined2_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let v = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 18381 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 18386 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2535 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (Some v) +# 18392 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let i = +# 3117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( es ) +# 18398 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (_2) +# 18406 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 126 "" + ( Some x ) +# 18411 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 18417 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2494 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( array, d, Brace, i, r ) +# 18423 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined2_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2536 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 18433 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _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 = _; + 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; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Location.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 18528 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined2_, _1_inlined4, _1_inlined3, _1_inlined2, _1_inlined1) in + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 18547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 18552 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 18558 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 18569 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 18575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 18595 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 18601 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2535 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (Some v) +# 18607 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let i = +# 3117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( es ) +# 18613 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (_2) +# 18621 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 126 "" + ( Some x ) +# 18626 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 18632 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2494 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( array, d, Brace, i, r ) +# 18638 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2536 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 18648 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + 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 = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 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 : ( +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 18710 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _2 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 18723 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 18728 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2535 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (Some v) +# 18734 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let i = +# 3117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( es ) +# 18740 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let d = + let _1 = +# 124 "" + ( None ) +# 18746 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 18751 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2496 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( array, d, Bracket, i, r ) +# 18757 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined1_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2536 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 18767 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + 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 = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 18850 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _2 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 18866 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 18871 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 18877 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 18888 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 18894 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 18914 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 18920 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2535 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (Some v) +# 18926 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let i = +# 3117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( es ) +# 18932 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let d = + let _1 = +# 124 "" + ( None ) +# 18938 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 18943 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2496 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( array, d, Bracket, i, r ) +# 18949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2536 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 18959 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _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 = _; + 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; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 19033 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos__1_inlined2_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let v = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 19049 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 19054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2535 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (Some v) +# 19060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let i = +# 3117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( es ) +# 19066 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (_2) +# 19074 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 126 "" + ( Some x ) +# 19079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 19085 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2496 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( array, d, Bracket, i, r ) +# 19091 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__1_inlined2_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2536 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 19101 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _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 = _; + 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; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Location.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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 : ( +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 19196 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined2_, _1_inlined4, _1_inlined3, _1_inlined2, _1_inlined1) in + let v = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 19215 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 19220 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 19226 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 19237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 19243 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 19263 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 19269 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2535 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (Some v) +# 19275 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let i = +# 3117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( es ) +# 19281 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (_2) +# 19289 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 126 "" + ( Some x ) +# 19294 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 19300 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2496 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( array, d, Bracket, i, r ) +# 19306 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2536 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 19316 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.attribute) = Obj.magic _2 in + let _1 : (Parsetree.expression) = 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) = +# 2538 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Exp.attr _1 _2 ) +# 19348 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (string Location.loc list) = Obj.magic xs 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__4_ in + let _v : (Parsetree.function_param list) = let ty_params = +# 2830 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 19394 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__4_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2979 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (* We desugar (type a b c) to (type a) (type b) (type c). + If we do this desugaring, the loc for each parameter is a ghost. + *) + let loc = + match ty_params with + | [] -> assert false (* lident_list is non-empty *) + | [_] -> make_loc _sloc + | _ :: _ :: _ -> ghost_loc _sloc + in + List.map + (fun x -> { pparam_loc = loc; pparam_desc = Pparam_newtype x }) + ty_params + ) +# 19414 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = 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.function_param list) = let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2993 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let a, b, c = _1 in + [ { pparam_loc = make_loc _sloc; pparam_desc = Pparam_val (a, b, c) } ] + ) +# 19444 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let xs : (Parsetree.function_param list) = Obj.magic xs in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_xs_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.function_param list) = let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 19470 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1165 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 19475 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2998 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 19481 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.expression) = 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.expression) = +# 2429 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 19506 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Parsetree.expression) = 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) = +# 2430 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 19538 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _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 : (Parsetree.expression) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = 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 = +# 2432 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pexp_sequence(_1, _3) ) +# 19578 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc _1 ) +# 19587 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2433 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 19593 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _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 : (Parsetree.expression) = Obj.magic _5 in + let _4 : (string Location.loc) = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = 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 _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2435 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp_attrs ~loc:_sloc (Pexp_sequence (_1, _5)) (Some _4, []) ) +# 19649 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let ty : (Parsetree.core_type) = Obj.magic ty in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_ty_ in + let _endpos = _endpos_ty_ in + let _v : (Parsetree.core_type) = +# 3849 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ty ) +# 19674 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = codomain; + MenhirLib.EngineTypes.startp = _startpos_codomain_; + MenhirLib.EngineTypes.endp = _endpos_codomain_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + } = _menhir_stack in + let codomain : (Parsetree.core_type) = Obj.magic codomain in + let _3 : unit = Obj.magic _3 in + let _1 : (Parsetree.core_type) = Obj.magic _1 in + let label : (string) = Obj.magic label in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_label_ in + let _endpos = _endpos_codomain_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let domain = +# 1040 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) +# 19722 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let label = +# 3889 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Optional label ) +# 19727 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 3855 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_arrow(label, domain, codomain) ) +# 19732 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc _1 ) +# 19742 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3857 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 19748 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = codomain; + MenhirLib.EngineTypes.startp = _startpos_codomain_; + MenhirLib.EngineTypes.endp = _endpos_codomain_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let codomain : (Parsetree.core_type) = Obj.magic codomain in + let _3 : unit = Obj.magic _3 in + let _1 : (Parsetree.core_type) = Obj.magic _1 in + let _2 : unit = Obj.magic _2 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 19797 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_label_ in + let _endpos = _endpos_codomain_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let domain = +# 1040 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) +# 19807 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let label = +# 3891 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Labelled label ) +# 19812 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 3855 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_arrow(label, domain, codomain) ) +# 19817 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc _1 ) +# 19827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3857 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 19833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = codomain; + MenhirLib.EngineTypes.startp = _startpos_codomain_; + MenhirLib.EngineTypes.endp = _endpos_codomain_; + 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 = _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 codomain : (Parsetree.core_type) = Obj.magic codomain in + let _3 : unit = Obj.magic _3 in + let _1 : (Parsetree.core_type) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_codomain_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let domain = +# 1040 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) +# 19874 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let label = +# 3893 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Nolabel ) +# 19879 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 3855 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_arrow(label, domain, codomain) ) +# 19884 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__1_ = _endpos_codomain_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc _1 ) +# 19894 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3857 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 19900 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = codomain; + MenhirLib.EngineTypes.startp = _startpos_codomain_; + MenhirLib.EngineTypes.endp = _endpos_codomain_; + 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 = 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 = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let codomain : (Parsetree.core_type) = Obj.magic codomain in + let _4 : unit = Obj.magic _4 in + let xs : ((string option * Parsetree.core_type) list) = Obj.magic xs in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let ty : (Parsetree.core_type) = Obj.magic ty in + let _2 : unit = Obj.magic _2 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 19963 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_label_ in + let _endpos = _endpos_codomain_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let tuple = + let _2 = _2_inlined1 in + let ltys = + let xs = +# 253 "" + ( List.rev xs ) +# 19976 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 19981 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3919 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ty, ltys ) +# 19987 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos_tuple_, _startpos_tuple_) = (_endpos_xs_, _startpos_ty_) in + let _loc_tuple_ = (_startpos_tuple_, _endpos_tuple_) in + +# 3873 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let ty, ltys = tuple in + let tuple_loc = _loc_tuple_ in + let domain = + mktyp ~loc:tuple_loc (Ptyp_tuple ((None, ty) :: ltys)) + in + let domain = extra_rhs_core_type domain ~pos:(snd tuple_loc) in + Ptyp_arrow(Labelled label, domain, codomain) ) +# 20001 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc _1 ) +# 20011 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3881 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 20017 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = 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 = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let xs : ((string option * Parsetree.core_type) list) = Obj.magic xs in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let ty : (Parsetree.core_type) = Obj.magic ty in + let _2 : unit = Obj.magic _2 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 20066 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_label_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.core_type) = let _3 = + let _2 = _2_inlined1 in + let ltys = + let xs = +# 253 "" + ( List.rev xs ) +# 20077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 20082 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3919 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ty, ltys ) +# 20088 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos_label_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3883 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let ty, ltys = _3 in + mktyp ~loc:_sloc (Ptyp_tuple ((Some label, ty) :: ltys)) + ) +# 20100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Lexing.position * Parsetree.functor_parameter) = let _startpos = _startpos__1_ in + +# 1452 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _startpos, Unit ) +# 20133 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = mty; + MenhirLib.EngineTypes.startp = _startpos_mty_; + MenhirLib.EngineTypes.endp = _endpos_mty_; + 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 = _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 _5 : unit = Obj.magic _5 in + let mty : (Parsetree.module_type) = Obj.magic mty in + let _3 : unit = Obj.magic _3 in + let _1_inlined1 : (string option) = Obj.magic _1_inlined1 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 : (Lexing.position * Parsetree.functor_parameter) = let x = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 20191 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _startpos = _startpos__1_ in + +# 1455 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _startpos, Named (x, mty) ) +# 20198 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : ((Lexing.position * Parsetree.functor_parameter) list) = 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 : ((Lexing.position * Parsetree.functor_parameter) list) = +# 1444 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 20223 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Mlx_ocaml_parsing.Ast_helper.str list * Parsetree.constructor_arguments * + Parsetree.core_type option) = +# 3647 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ([],Pcstr_tuple [],None) ) +# 20242 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.constructor_arguments) = 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 : (Mlx_ocaml_parsing.Ast_helper.str list * Parsetree.constructor_arguments * + Parsetree.core_type option) = +# 3648 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ([],_2,None) ) +# 20275 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Parsetree.core_type) = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in + let _2 : (Parsetree.constructor_arguments) = 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 : (Mlx_ocaml_parsing.Ast_helper.str list * Parsetree.constructor_arguments * + Parsetree.core_type option) = +# 3650 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ([],_2,Some _4) ) +# 20322 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + 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 _6 : (Parsetree.core_type) = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let _4 : (Parsetree.constructor_arguments) = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in + let xs : (string Location.loc 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__6_ in + let _v : (Mlx_ocaml_parsing.Ast_helper.str list * Parsetree.constructor_arguments * + Parsetree.core_type option) = let _2 = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 20385 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1144 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 20390 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3784 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 20396 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3653 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (_2,_4,Some _6) ) +# 20402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.core_type) = 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 : (Mlx_ocaml_parsing.Ast_helper.str list * Parsetree.constructor_arguments * + Parsetree.core_type option) = +# 3655 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ([],Pcstr_tuple [],Some _2) ) +# 20435 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = 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 _4 : (Parsetree.core_type) = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in + let xs : (string Location.loc 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__4_ in + let _v : (Mlx_ocaml_parsing.Ast_helper.str list * Parsetree.constructor_arguments * + Parsetree.core_type option) = let _2 = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 20484 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1144 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 20489 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3784 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 20495 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3657 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (_2,Pcstr_tuple [],Some _4) ) +# 20501 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = vars_args_res; + MenhirLib.EngineTypes.startp = _startpos_vars_args_res_; + MenhirLib.EngineTypes.endp = _endpos_vars_args_res_; + 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 _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let vars_args_res : (Mlx_ocaml_parsing.Ast_helper.str list * Parsetree.constructor_arguments * + Parsetree.core_type option) = Obj.magic vars_args_res in + let _1_inlined1 : (string) = Obj.magic _1_inlined1 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__1_inlined2_ in + let _v : (Mlx_ocaml_parsing.Ast_helper.str * Mlx_ocaml_parsing.Ast_helper.str list * + Parsetree.constructor_arguments * Parsetree.core_type option * + Parsetree.attributes * Warnings.loc * Mlx_ocaml_parsing.Docstrings.info) = let attrs = + let _1 = _1_inlined2 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 20552 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_attrs_ = _endpos__1_inlined2_ in + let cid = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 20564 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos_attrs_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3595 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + ) +# 20578 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = vars_args_res; + MenhirLib.EngineTypes.startp = _startpos_vars_args_res_; + MenhirLib.EngineTypes.endp = _endpos_vars_args_res_; + 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 _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let vars_args_res : (Mlx_ocaml_parsing.Ast_helper.str list * Parsetree.constructor_arguments * + Parsetree.core_type option) = Obj.magic vars_args_res in + let _1 : (string) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Mlx_ocaml_parsing.Ast_helper.str * Mlx_ocaml_parsing.Ast_helper.str list * + Parsetree.constructor_arguments * Parsetree.core_type option * + Parsetree.attributes * Warnings.loc * Mlx_ocaml_parsing.Docstrings.info) = let attrs = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 20622 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_attrs_ = _endpos__1_inlined1_ in + let cid = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 20633 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _startpos_cid_ = _startpos__1_ in + let _1 = +# 4324 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( () ) +# 20640 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos_attrs_ in + let _symbolstartpos = _startpos_cid_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3595 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + ) +# 20653 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + 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 = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = params; + MenhirLib.EngineTypes.startp = _startpos_params_; + MenhirLib.EngineTypes.endp = _endpos_params_; + 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 = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + 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 _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let xs : ((Parsetree.core_type * Parsetree.core_type * Warnings.loc) list) = Obj.magic xs in + 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 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 20726 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + let ext : (string Location.loc option) = Obj.magic ext 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__1_inlined4_ in + let _v : ((Asttypes.rec_flag * string Location.loc option) * + Parsetree.type_declaration) = let attrs2 = + let _1 = _1_inlined4 in + +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 20741 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined4_ in + let cstrs = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 20750 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 20755 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3488 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 20761 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let kind_priv_manifest = + let _1 = _1_inlined3 in + +# 3523 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _2 ) +# 20769 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 20780 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let flag = +# 4344 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Recursive ) +# 20786 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 20793 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3460 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let (kind, priv, manifest) = kind_priv_manifest in + let docs = symbol_docs _sloc in + let attrs = attrs1 @ attrs2 in + let loc = make_loc _sloc in + (flag, ext), + Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs + ) +# 20809 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; + 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 = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = params; + MenhirLib.EngineTypes.startp = _startpos_params_; + MenhirLib.EngineTypes.endp = _endpos_params_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + 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 _1_inlined5 : (Parsetree.attributes) = Obj.magic _1_inlined5 in + let xs : ((Parsetree.core_type * Parsetree.core_type * Warnings.loc) list) = Obj.magic xs in + 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 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 20888 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let ext : (string Location.loc option) = Obj.magic ext 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__1_inlined5_ in + let _v : ((Asttypes.rec_flag * string Location.loc option) * + Parsetree.type_declaration) = let attrs2 = + let _1 = _1_inlined5 in + +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 20904 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined5_ in + let cstrs = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 20913 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 20918 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3488 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 20924 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let kind_priv_manifest = + let _1 = _1_inlined4 in + +# 3523 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _2 ) +# 20932 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 20943 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let flag = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _startpos = _startpos__1_ in + let _loc = (_startpos, _endpos) in + +# 4346 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( not_expecting _loc "nonrec flag"; Recursive ) +# 20954 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 20962 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3460 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let (kind, priv, manifest) = kind_priv_manifest in + let docs = symbol_docs _sloc in + let attrs = attrs1 @ attrs2 in + let loc = make_loc _sloc in + (flag, ext), + Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs + ) +# 20978 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = kind_priv_manifest; + MenhirLib.EngineTypes.startp = _startpos_kind_priv_manifest_; + MenhirLib.EngineTypes.endp = _endpos_kind_priv_manifest_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = params; + MenhirLib.EngineTypes.startp = _startpos_params_; + MenhirLib.EngineTypes.endp = _endpos_params_; + 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 = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + 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 _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let xs : ((Parsetree.core_type * Parsetree.core_type * Warnings.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 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 21044 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + let ext : (string Location.loc option) = Obj.magic ext 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__1_inlined3_ in + let _v : ((Asttypes.rec_flag * string Location.loc option) * + Parsetree.type_declaration) = let attrs2 = + let _1 = _1_inlined3 in + +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 21059 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let cstrs = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 21068 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 21073 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3488 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 21079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 21090 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let flag = +# 4340 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Recursive ) +# 21096 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 21103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3460 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let (kind, priv, manifest) = kind_priv_manifest in + let docs = symbol_docs _sloc in + let attrs = attrs1 @ attrs2 in + let loc = make_loc _sloc in + (flag, ext), + Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs + ) +# 21119 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + 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 = kind_priv_manifest; + MenhirLib.EngineTypes.startp = _startpos_kind_priv_manifest_; + MenhirLib.EngineTypes.endp = _endpos_kind_priv_manifest_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = params; + MenhirLib.EngineTypes.startp = _startpos_params_; + MenhirLib.EngineTypes.endp = _endpos_params_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + 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 _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let xs : ((Parsetree.core_type * Parsetree.core_type * Warnings.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 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 21191 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let ext : (string Location.loc option) = Obj.magic ext 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__1_inlined4_ in + let _v : ((Asttypes.rec_flag * string Location.loc option) * + Parsetree.type_declaration) = let attrs2 = + let _1 = _1_inlined4 in + +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 21207 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined4_ in + let cstrs = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 21216 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 21221 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3488 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 21227 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 21238 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let flag = + let _1 = _1_inlined2 in + +# 4341 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Nonrecursive ) +# 21246 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 21254 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3460 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let (kind, priv, manifest) = kind_priv_manifest in + let docs = symbol_docs _sloc in + let attrs = attrs1 @ attrs2 in + let loc = make_loc _sloc in + (flag, ext), + Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs + ) +# 21270 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : ( +# 901 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 21291 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = +# 4159 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 21299 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 21320 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = +# 4160 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 21328 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Parsetree.structure) = 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.structure) = +# 1318 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 21360 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (string) = +# 4211 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( "" ) +# 21378 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (string) = +# 4212 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ";.." ) +# 21410 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Parsetree.signature) = 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.signature) = +# 1325 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 21442 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Parsetree.payload) = Obj.magic _3 in + let _2 : (string Location.loc) = 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.extension) = +# 4525 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (_2, _3) ) +# 21488 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : ( +# 892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string * Location.t * string * Location.t * string option) +# 21509 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.extension) = let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4527 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mk_quotedext ~loc:_sloc _1 ) +# 21520 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = tag; + MenhirLib.EngineTypes.startp = _startpos_tag_; + MenhirLib.EngineTypes.endp = _endpos_tag_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let _3 : unit = Obj.magic _3 in + let xs : (((Lexing.position * Lexing.position) * + [ `Prop of string * Parsetree.expression + | `Prop_opt of string * Parsetree.expression + | `Prop_opt_punned of string + | `Prop_punned of string ]) + list) = Obj.magic xs in + let tag : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * Longident.t) = Obj.magic tag in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_tag_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.expression_desc) = let props = + let xs = +# 253 "" + ( List.rev xs ) +# 21565 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 21570 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _loc_tag_ = (_startpos_tag_, _endpos_tag_) in + +# 2787 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let children = + let children, loc = mktailexp _loc_tag_ [] in + mkexp ~loc children + in + Jsx_helper.make_jsx_element () ~raise:raise_error ~loc:_loc_tag_ ~tag ~end_tag:None ~props ~children + ) +# 21583 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = end_tag_; + MenhirLib.EngineTypes.startp = _startpos_end_tag__; + MenhirLib.EngineTypes.endp = _endpos_end_tag__; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = end_tag; + MenhirLib.EngineTypes.startp = _startpos_end_tag_; + MenhirLib.EngineTypes.endp = _endpos_end_tag_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs_inlined1; + MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; + 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 = tag; + MenhirLib.EngineTypes.startp = _startpos_tag_; + MenhirLib.EngineTypes.endp = _endpos_tag_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let end_tag_ : unit = Obj.magic end_tag_ in let end_tag : ([> `Module | `Value ] * (Lexing.position * Lexing.position) * Longident.t) = Obj.magic end_tag in let xs_inlined1 : (Parsetree.expression list) = Obj.magic xs_inlined1 in let _3 : unit = Obj.magic _3 in - let xs : (((Lexing.position * Lexing.position) * - [ `Prop of string * Parsetree.expression - | `Prop_opt of string * Parsetree.expression - | `Prop_opt_punned of string - | `Prop_punned of string ]) - list) = Obj.magic xs in - let tag : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * Longident.t) = Obj.magic tag in + let xs : (((Lexing.position * Lexing.position) * + [ `Prop of string * Parsetree.expression + | `Prop_opt of string * Parsetree.expression + | `Prop_opt_punned of string + | `Prop_punned of string ]) + list) = Obj.magic xs in + let tag : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * Longident.t) = Obj.magic tag in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_tag_ in + let _endpos = _endpos_end_tag__ in + let _v : (Parsetree.expression_desc) = let children = + let xs = xs_inlined1 in + let xs = +# 253 "" + ( List.rev xs ) +# 21650 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 21655 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos_children_, _startpos_children_) = (_endpos_xs_inlined1_, _startpos_xs_inlined1_) in + let props = + let xs = +# 253 "" + ( List.rev xs ) +# 21663 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 21668 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _loc_tag_ = (_startpos_tag_, _endpos_tag_) in + let _loc_end_tag__ = (_startpos_end_tag__, _endpos_end_tag__) in + let _loc_children_ = (_startpos_children_, _endpos_children_) in + +# 2795 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let children = + let children, loc = mktailexp _loc_children_ children in + mkexp ~loc children + in + let _ = end_tag_ in + Jsx_helper.make_jsx_element () + ~raise:raise_error ~loc:_loc_tag_ ~tag ~end_tag:(Some (end_tag, _loc_end_tag__)) ~props ~children + ) +# 21685 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let id : ( +# 902 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 21706 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic id in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_id_ in + let _endpos = _endpos_id_ in + let _v : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * Longident.t) = let _endpos = _endpos_id_ in + let _symbolstartpos = _startpos_id_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( `Module, _sloc, Lident id ) +# 21717 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let id : ( +# 848 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 21738 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic id in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_id_ in + let _endpos = _endpos_id_ in + let _v : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * Longident.t) = let _endpos = _endpos_id_ in + let _symbolstartpos = _startpos_id_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4241 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( `Value, _sloc, Lident id ) +# 21749 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; + 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 = prefix; + MenhirLib.EngineTypes.startp = _startpos_prefix_; + MenhirLib.EngineTypes.endp = _endpos_prefix_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let id : (Longident.t) = Obj.magic id in + let _2 : unit = Obj.magic _2 in + let prefix : ( +# 902 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 21784 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic prefix in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_prefix_ in + let _endpos = _endpos_id_ in + let _v : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * Longident.t) = let _endpos = _endpos_id_ in + let _symbolstartpos = _startpos_prefix_ in + let _loc_prefix_ = (_startpos_prefix_, _endpos_prefix_) in + let _loc_id_ = (_startpos_id_, _endpos_id_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 4242 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let rec rebase = function + | Lident id -> ldot (Lident prefix) _loc_prefix_ id _loc_id_ + | Ldot ({txt = prefix'; loc = prefix_loc}, {txt = id; loc = id_loc}) -> + Ldot (mkloc (rebase prefix') prefix_loc, mkloc id id_loc) + | Lapply _ -> assert false + in + `Module, _sloc, rebase id ) +# 21804 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; + 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 = prefix; + MenhirLib.EngineTypes.startp = _startpos_prefix_; + MenhirLib.EngineTypes.endp = _endpos_prefix_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let id : (Longident.t) = Obj.magic id in + let _2 : unit = Obj.magic _2 in + let prefix : ( +# 902 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 21839 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic prefix in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_prefix_ in + let _endpos = _endpos_id_ in + let _v : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * Longident.t) = let _endpos = _endpos_id_ in + let _symbolstartpos = _startpos_prefix_ in + let _loc_prefix_ = (_startpos_prefix_, _endpos_prefix_) in + let _loc_id_ = (_startpos_id_, _endpos_id_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 4250 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let rec rebase = function + | Lident id -> ldot (Lident prefix) _loc_prefix_ id _loc_id_ + | Ldot ({txt = prefix'; loc = prefix_loc}, {txt = id; loc = id_loc}) -> + Ldot (mkloc (rebase prefix') prefix_loc, mkloc id id_loc) + | Lapply _ -> assert false + in + `Value, _sloc, rebase id ) +# 21859 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let id : ( +# 903 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 21880 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic id in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_id_ in + let _endpos = _endpos_id_ in + let _v : ([> `Module | `Value ] * (Lexing.position * Lexing.position) * Longident.t) = let _endpos = _endpos_id_ in + let _symbolstartpos = _startpos_id_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( `Module, _sloc, Lident id ) +# 21891 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let id : ( +# 849 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 21912 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic id in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_id_ in + let _endpos = _endpos_id_ in + let _v : ([> `Module | `Value ] * (Lexing.position * Lexing.position) * Longident.t) = let _endpos = _endpos_id_ in + let _symbolstartpos = _startpos_id_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4241 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( `Value, _sloc, Lident id ) +# 21923 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; + 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 = prefix; + MenhirLib.EngineTypes.startp = _startpos_prefix_; + MenhirLib.EngineTypes.endp = _endpos_prefix_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let id : (Longident.t) = Obj.magic id in + let _2 : unit = Obj.magic _2 in + let prefix : ( +# 903 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 21958 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic prefix in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_prefix_ in + let _endpos = _endpos_id_ in + let _v : ([> `Module | `Value ] * (Lexing.position * Lexing.position) * Longident.t) = let _endpos = _endpos_id_ in + let _symbolstartpos = _startpos_prefix_ in + let _loc_prefix_ = (_startpos_prefix_, _endpos_prefix_) in + let _loc_id_ = (_startpos_id_, _endpos_id_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 4242 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let rec rebase = function + | Lident id -> ldot (Lident prefix) _loc_prefix_ id _loc_id_ + | Ldot ({txt = prefix'; loc = prefix_loc}, {txt = id; loc = id_loc}) -> + Ldot (mkloc (rebase prefix') prefix_loc, mkloc id id_loc) + | Lapply _ -> assert false + in + `Module, _sloc, rebase id ) +# 21978 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = id; + MenhirLib.EngineTypes.startp = _startpos_id_; + MenhirLib.EngineTypes.endp = _endpos_id_; + 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 = prefix; + MenhirLib.EngineTypes.startp = _startpos_prefix_; + MenhirLib.EngineTypes.endp = _endpos_prefix_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let id : (Longident.t) = Obj.magic id in + let _2 : unit = Obj.magic _2 in + let prefix : ( +# 903 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 22013 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic prefix in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_prefix_ in + let _endpos = _endpos_id_ in + let _v : ([> `Module | `Value ] * (Lexing.position * Lexing.position) * Longident.t) = let _endpos = _endpos_id_ in + let _symbolstartpos = _startpos_prefix_ in + let _loc_prefix_ = (_startpos_prefix_, _endpos_prefix_) in + let _loc_id_ = (_startpos_id_, _endpos_id_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 4250 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let rec rebase = function + | Lident id -> ldot (Lident prefix) _loc_prefix_ id _loc_id_ + | Ldot ({txt = prefix'; loc = prefix_loc}, {txt = id; loc = id_loc}) -> + Ldot (mkloc (rebase prefix') prefix_loc, mkloc id id_loc) + | Lapply _ -> assert false + in + `Value, _sloc, rebase id ) +# 22033 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = name; + MenhirLib.EngineTypes.startp = _startpos_name_; + MenhirLib.EngineTypes.endp = _endpos_name_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let name : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 22054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic name in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_name_ in + let _endpos = _endpos_name_ in + let _v : ((Lexing.position * Lexing.position) * + [ `Prop of string * Parsetree.expression + | `Prop_opt of string * Parsetree.expression + | `Prop_opt_punned of string + | `Prop_punned of string ]) = let _loc_name_ = (_startpos_name_, _endpos_name_) in + +# 2806 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _loc_name_, `Prop_punned name ) +# 22067 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = name; + MenhirLib.EngineTypes.startp = _startpos_name_; + MenhirLib.EngineTypes.endp = _endpos_name_; + 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 name : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 22094 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic name 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_name_ in + let _v : ((Lexing.position * Lexing.position) * + [ `Prop of string * Parsetree.expression + | `Prop_opt of string * Parsetree.expression + | `Prop_opt_punned of string + | `Prop_punned of string ]) = let _loc_name_ = (_startpos_name_, _endpos_name_) in + +# 2807 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _loc_name_, `Prop_opt_punned name ) +# 22108 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = expr; + MenhirLib.EngineTypes.startp = _startpos_expr_; + MenhirLib.EngineTypes.endp = _endpos_expr_; + 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 = name; + MenhirLib.EngineTypes.startp = _startpos_name_; + MenhirLib.EngineTypes.endp = _endpos_name_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let expr : (Parsetree.expression) = Obj.magic expr in + let _2 : unit = Obj.magic _2 in + let name : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 22143 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic name in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_name_ in + let _endpos = _endpos_expr_ in + let _v : ((Lexing.position * Lexing.position) * + [ `Prop of string * Parsetree.expression + | `Prop_opt of string * Parsetree.expression + | `Prop_opt_punned of string + | `Prop_punned of string ]) = let _loc_name_ = (_startpos_name_, _endpos_name_) in + +# 2808 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _loc_name_, `Prop (name, expr) ) +# 22156 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = expr; + MenhirLib.EngineTypes.startp = _startpos_expr_; + MenhirLib.EngineTypes.endp = _endpos_expr_; + 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 = name; + MenhirLib.EngineTypes.startp = _startpos_name_; + MenhirLib.EngineTypes.endp = _endpos_name_; + 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 expr : (Parsetree.expression) = Obj.magic expr in + let _3 : unit = Obj.magic _3 in + let name : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 22197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic name 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_expr_ in + let _v : ((Lexing.position * Lexing.position) * + [ `Prop of string * Parsetree.expression + | `Prop_opt of string * Parsetree.expression + | `Prop_opt_punned of string + | `Prop_punned of string ]) = let _loc_name_ = (_startpos_name_, _endpos_name_) in + +# 2809 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _loc_name_, `Prop_opt (name, expr) ) +# 22211 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _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 _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in + let _3 : unit = Obj.magic _3 in + let _1_inlined1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 22259 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1_inlined1 in + let _1 : (Asttypes.mutable_flag) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined3_ in + let _v : (Parsetree.label_declaration) = let _5 = + let _1 = _1_inlined3 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 22270 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__5_ = _endpos__1_inlined3_ in + let _4 = + let _1 = _1_inlined2 in + +# 3802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 22279 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _2 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _1 = +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 22287 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 22295 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _startpos__2_ = _startpos__1_inlined1_ in + let _endpos = _endpos__5_ in + let _symbolstartpos = if _startpos__1_ != _endpos__1_ then + _startpos__1_ + else + _startpos__2_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3674 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let info = symbol_info _endpos in + Type.field _2 _4 ~mut:_1 ~attrs:_5 ~loc:(make_loc _sloc) ~info ) +# 22309 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _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 _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _6 : unit = Obj.magic _6 in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in + let _3 : unit = Obj.magic _3 in + let _1_inlined1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 22371 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1_inlined1 in + let _1 : (Asttypes.mutable_flag) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined4_ in + let _v : (Parsetree.label_declaration) = let _7 = + let _1 = _1_inlined4 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 22382 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__7_ = _endpos__1_inlined4_ in + let _5 = + let _1 = _1_inlined3 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 22391 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__5_ = _endpos__1_inlined3_ in + let _4 = + let _1 = _1_inlined2 in + +# 3802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 22400 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _2 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _1 = +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 22408 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 22416 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _startpos__2_ = _startpos__1_inlined1_ in + let _endpos = _endpos__7_ in + let _symbolstartpos = if _startpos__1_ != _endpos__1_ then + _startpos__1_ + else + _startpos__2_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3679 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let info = + match rhs_info _endpos__5_ with + | Some _ as info_before_semi -> info_before_semi + | None -> symbol_info _endpos + in + Type.field _2 _4 ~mut:_1 ~attrs:(_5 @ _7) ~loc:(make_loc _sloc) ~info ) +# 22434 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.label_declaration) = 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.label_declaration list) = +# 3668 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [_1] ) +# 22459 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.label_declaration) = 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.label_declaration list) = +# 3669 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [_1] ) +# 22484 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.label_declaration list) = Obj.magic _2 in + let _1 : (Parsetree.label_declaration) = 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.label_declaration list) = +# 3670 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 :: _2 ) +# 22516 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 22537 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 * Parsetree.pattern) = let x = + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 22550 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2480 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) +# 22559 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2472 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( x ) +# 22565 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 cty : (Parsetree.core_type) = Obj.magic cty in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 22600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_cty_ in + let _v : (string * Parsetree.pattern) = let x = + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 22613 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2480 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) +# 22622 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _startpos_x_ = _startpos__1_ in + let _endpos = _endpos_cty_ in + let _symbolstartpos = _startpos_x_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2474 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let lab, pat = x in + lab, + mkpat ~loc:_sloc (Ppat_constraint (pat, cty)) ) +# 22634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Longident.t) = 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) = +# 4263 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 22659 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.expression) = 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.arg_label * Parsetree.expression) = +# 2813 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Nolabel, _1) ) +# 22684 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 22712 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = +# 2815 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Labelled _1, _2) ) +# 22720 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 22747 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label 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_label_ in + let _v : (Asttypes.arg_label * Parsetree.expression) = let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 2817 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + (Labelled label, mkexpvar ~loc label) ) +# 22758 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 ty : (Parsetree.type_constraint) = Obj.magic ty in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 22805 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label 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__5_ in + let _v : (Asttypes.arg_label * Parsetree.expression) = let _endpos = _endpos__5_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 2820 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Labelled label, mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_label_ label) ty) ) +# 22818 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 22845 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label 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_label_ in + let _v : (Asttypes.arg_label * Parsetree.expression) = let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 2823 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + (Optional label, mkexpvar ~loc label) ) +# 22856 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : ( +# 866 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 22884 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = +# 2826 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Optional _1, _2) ) +# 22892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + 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 _1_inlined1 : (Parsetree.expression option) = Obj.magic _1_inlined1 in + let _3 : (string * Parsetree.pattern) = Obj.magic _3 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__5_ in + let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _4 = + let _1 = _1_inlined1 in + +# 2468 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 22947 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2442 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Optional (fst _3), _4, snd _3) ) +# 22953 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _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 _1_inlined1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 22980 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1_inlined1 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__1_inlined1_ in + let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _2 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 22995 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2480 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) +# 23004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2444 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Optional (fst _2), None, snd _2) ) +# 23010 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + 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 _1_inlined1 : (Parsetree.expression option) = Obj.magic _1_inlined1 in + let _3 : (Parsetree.pattern) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 866 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 23059 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _4 = + let _1 = _1_inlined1 in + +# 2468 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 23069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2446 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Optional _1, _4, _3) ) +# 23075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.pattern) = Obj.magic _2 in + let _1 : ( +# 866 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 23103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = +# 2448 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Optional _1, None, _2) ) +# 23111 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (string * Parsetree.pattern) = Obj.magic _3 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__4_ in + let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = +# 2450 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Labelled (fst _3), None, snd _3) ) +# 23157 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _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 _1_inlined1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 23184 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1_inlined1 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__1_inlined1_ in + let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _2 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 23199 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2480 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) +# 23208 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2452 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Labelled (fst _2), None, snd _2) ) +# 23214 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.pattern) = Obj.magic _2 in + let _1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 23242 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = +# 2454 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Labelled _1, None, _2) ) +# 23250 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.pattern) = 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.arg_label * Parsetree.expression option * Parsetree.pattern) = +# 2456 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Nolabel, None, _1) ) +# 23275 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _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 _1_inlined1 : (Parsetree.pattern) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ((string option * Parsetree.pattern) list) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + +# 3300 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 23316 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3328 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _3 :: _1 ) +# 23322 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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_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 _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1_inlined1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 23362 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ((string option * Parsetree.pattern) list) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_2, _1) = (_2_inlined1, _1_inlined1) in + +# 3302 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 23374 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3328 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _3 :: _1 ) +# 23380 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 23419 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ((string option * Parsetree.pattern) list) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3304 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 23434 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3328 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _3 :: _1 ) +# 23440 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 23506 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ((string option * Parsetree.pattern) list) = 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 : ((string option * Parsetree.pattern) list) = let _3 = + let (_startpos__2_, _2, _1) = (_startpos__2_inlined1_, _2_inlined1, _1_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 23525 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3328 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _3 :: _1 ) +# 23531 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _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 _1_inlined1 : (Parsetree.pattern) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + +# 3300 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 23572 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = +# 3314 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 23578 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 23583 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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_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 _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1_inlined1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 23623 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_2, _1) = (_2_inlined1, _1_inlined1) in + +# 3302 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 23635 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = +# 3314 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 23641 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 23646 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 23685 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3304 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 23700 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = +# 3314 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 23706 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 23711 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 23777 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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 : ((string option * Parsetree.pattern) list) = let _3 = + let (_startpos__2_, _2, _1) = (_startpos__2_inlined1_, _2_inlined1, _1_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 23796 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = +# 3314 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 23802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 23807 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _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 = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_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 _1_inlined1 : (Parsetree.pattern) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 23849 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + +# 3300 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 23859 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let _2 = _2_inlined1 in + +# 3316 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 23867 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 23873 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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_inlined2; + MenhirLib.EngineTypes.startp = _startpos__2_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined2_; + 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 = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_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 _2_inlined2 : (Parsetree.pattern) = Obj.magic _2_inlined2 in + let _1_inlined1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 23919 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 23926 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_inlined2_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_2, _1) = (_2_inlined2, _1_inlined1) in + +# 3302 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 23936 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let _2 = _2_inlined1 in + +# 3316 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 23944 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 23950 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_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 label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 23995 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 24003 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3304 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 24015 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let _2 = _2_inlined1 in + +# 3316 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 24023 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 24029 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined2; + MenhirLib.EngineTypes.startp = _startpos__2_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined2_; + 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 = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_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 _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 24101 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _2_inlined2 : unit = Obj.magic _2_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 24110 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = 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 : ((string option * Parsetree.pattern) list) = let _3 = + let (_startpos__2_, _2, _1) = (_startpos__2_inlined2_, _2_inlined2, _1_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 24125 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let _2 = _2_inlined1 in + +# 3316 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 24133 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 24139 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _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 = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 _1_inlined1 : (Parsetree.pattern) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 24180 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label 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__1_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + +# 3300 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 24191 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3318 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 24200 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 24206 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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_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 = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1_inlined1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 24252 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 24258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label 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_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_2, _1) = (_2_inlined1, _1_inlined1) in + +# 3302 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 24269 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3318 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 24278 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 24284 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = label_inlined1; + MenhirLib.EngineTypes.startp = _startpos_label_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_label_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 = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 label_inlined1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 24329 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 24336 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label 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_label_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_endpos_label_, _startpos_label_, label, _1) = (_endpos_label_inlined1_, _startpos_label_inlined1_, label_inlined1, _1_inlined1) in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3304 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 24349 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3318 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 24358 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 24364 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label_inlined1; + MenhirLib.EngineTypes.startp = _startpos_label_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_label_inlined1_; + 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 = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label_inlined1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 24436 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label_inlined1 in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 24444 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label 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__6_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_endpos_label_, _startpos_label_, _startpos__2_, label, _2, _1) = (_endpos_label_inlined1_, _startpos_label_inlined1_, _startpos__2_inlined1_, label_inlined1, _2_inlined1, _1_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 24460 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3318 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 24469 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 24475 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _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 = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _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_inlined1 : (Parsetree.pattern) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 24543 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 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__1_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + +# 3300 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 24555 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let (_startpos__2_, _2) = (_startpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3321 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 24568 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 24574 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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_inlined2; + MenhirLib.EngineTypes.startp = _startpos__2_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined2_; + 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 = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _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_inlined2 : (Parsetree.pattern) = Obj.magic _2_inlined2 in + let _1_inlined1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 24644 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 24653 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 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_inlined2_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_2, _1) = (_2_inlined2, _1_inlined1) in + +# 3302 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 24665 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let (_startpos__2_, _2) = (_startpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3321 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 24678 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 24684 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = label_inlined1; + MenhirLib.EngineTypes.startp = _startpos_label_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_label_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 = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _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 label_inlined1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 24753 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 24763 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 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_label_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_endpos_label_, _startpos_label_, label, _1) = (_endpos_label_inlined1_, _startpos_label_inlined1_, label_inlined1, _1_inlined1) in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3304 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 24777 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let (_startpos__2_, _2) = (_startpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3321 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 24790 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 24796 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _6_inlined1; + MenhirLib.EngineTypes.startp = _startpos__6_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__6_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty_inlined1; + MenhirLib.EngineTypes.startp = _startpos_cty_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_cty_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4_inlined1; + MenhirLib.EngineTypes.startp = _startpos__4_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__4_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = label_inlined1; + MenhirLib.EngineTypes.startp = _startpos_label_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_label_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined2; + MenhirLib.EngineTypes.startp = _startpos__2_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined2_; + 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 = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _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_inlined1 : unit = Obj.magic _6_inlined1 in + let cty_inlined1 : (Parsetree.core_type) = Obj.magic cty_inlined1 in + let _4_inlined1 : unit = Obj.magic _4_inlined1 in + let label_inlined1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 24892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label_inlined1 in + let _2_inlined2 : unit = Obj.magic _2_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 24903 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 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__6_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_endpos_label_, _startpos_label_, _endpos__6_, _startpos__2_, _6, cty, _4, label, _2, _1) = (_endpos_label_inlined1_, _startpos_label_inlined1_, _endpos__6_inlined1_, _startpos__2_inlined2_, _6_inlined1, cty_inlined1, _4_inlined1, label_inlined1, _2_inlined2, _1_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 24920 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let (_startpos__2_, _2) = (_startpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3321 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 24933 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 24939 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _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 _1_inlined1 : (Parsetree.pattern) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ((string option * Parsetree.pattern) list) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + +# 3300 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 24980 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3328 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _3 :: _1 ) +# 24986 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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_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 _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1_inlined1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 25026 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ((string option * Parsetree.pattern) list) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_2, _1) = (_2_inlined1, _1_inlined1) in + +# 3302 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 25038 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3328 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _3 :: _1 ) +# 25044 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 25083 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ((string option * Parsetree.pattern) list) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3304 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 25098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3328 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _3 :: _1 ) +# 25104 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 25170 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ((string option * Parsetree.pattern) list) = 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 : ((string option * Parsetree.pattern) list) = let _3 = + let (_startpos__2_, _2, _1) = (_startpos__2_inlined1_, _2_inlined1, _1_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 25189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3328 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _3 :: _1 ) +# 25195 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _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 _1_inlined1 : (Parsetree.pattern) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + +# 3300 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 25236 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = +# 3314 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 25242 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 25247 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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_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 _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1_inlined1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 25287 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_2, _1) = (_2_inlined1, _1_inlined1) in + +# 3302 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 25299 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = +# 3314 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 25305 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 25310 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 25349 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3304 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 25364 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = +# 3314 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 25370 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 25375 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 25441 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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 : ((string option * Parsetree.pattern) list) = let _3 = + let (_startpos__2_, _2, _1) = (_startpos__2_inlined1_, _2_inlined1, _1_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 25460 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = +# 3314 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 25466 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 25471 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _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 = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_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 _1_inlined1 : (Parsetree.pattern) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 25513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + +# 3300 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 25523 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let _2 = _2_inlined1 in + +# 3316 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 25531 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 25537 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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_inlined2; + MenhirLib.EngineTypes.startp = _startpos__2_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined2_; + 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 = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_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 _2_inlined2 : (Parsetree.pattern) = Obj.magic _2_inlined2 in + let _1_inlined1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 25583 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 25590 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_inlined2_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_2, _1) = (_2_inlined2, _1_inlined1) in + +# 3302 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 25600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let _2 = _2_inlined1 in + +# 3316 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 25608 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 25614 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_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 label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 25659 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 25667 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3304 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 25679 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let _2 = _2_inlined1 in + +# 3316 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 25687 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 25693 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined2; + MenhirLib.EngineTypes.startp = _startpos__2_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined2_; + 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 = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_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 _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 25765 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _2_inlined2 : unit = Obj.magic _2_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 25774 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = 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 : ((string option * Parsetree.pattern) list) = let _3 = + let (_startpos__2_, _2, _1) = (_startpos__2_inlined2_, _2_inlined2, _1_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 25789 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let _2 = _2_inlined1 in + +# 3316 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 25797 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 25803 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _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 = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 _1_inlined1 : (Parsetree.pattern) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 25844 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label 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__1_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + +# 3300 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 25855 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3318 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 25864 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 25870 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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_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 = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1_inlined1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 25916 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 25922 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label 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_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_2, _1) = (_2_inlined1, _1_inlined1) in + +# 3302 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 25933 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3318 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 25942 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 25948 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = label_inlined1; + MenhirLib.EngineTypes.startp = _startpos_label_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_label_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 = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 label_inlined1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 25993 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 26000 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label 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_label_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_endpos_label_, _startpos_label_, label, _1) = (_endpos_label_inlined1_, _startpos_label_inlined1_, label_inlined1, _1_inlined1) in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3304 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 26013 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3318 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 26022 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 26028 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label_inlined1; + MenhirLib.EngineTypes.startp = _startpos_label_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_label_inlined1_; + 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 = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label_inlined1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 26100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label_inlined1 in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 26108 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label 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__6_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_endpos_label_, _startpos_label_, _startpos__2_, label, _2, _1) = (_endpos_label_inlined1_, _startpos_label_inlined1_, _startpos__2_inlined1_, label_inlined1, _2_inlined1, _1_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 26124 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3318 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 26133 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 26139 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _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 = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _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_inlined1 : (Parsetree.pattern) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 26207 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 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__1_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let _1 = _1_inlined1 in + +# 3300 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 26219 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let (_startpos__2_, _2) = (_startpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3321 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 26232 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 26238 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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_inlined2; + MenhirLib.EngineTypes.startp = _startpos__2_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined2_; + 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 = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _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_inlined2 : (Parsetree.pattern) = Obj.magic _2_inlined2 in + let _1_inlined1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 26308 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 26317 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 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_inlined2_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_2, _1) = (_2_inlined2, _1_inlined1) in + +# 3302 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 26329 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let (_startpos__2_, _2) = (_startpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3321 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 26342 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 26348 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = label_inlined1; + MenhirLib.EngineTypes.startp = _startpos_label_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_label_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 = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _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 label_inlined1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 26417 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 26427 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 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_label_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_endpos_label_, _startpos_label_, label, _1) = (_endpos_label_inlined1_, _startpos_label_inlined1_, label_inlined1, _1_inlined1) in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3304 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 26441 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let (_startpos__2_, _2) = (_startpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3321 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 26454 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 26460 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _6_inlined1; + MenhirLib.EngineTypes.startp = _startpos__6_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__6_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty_inlined1; + MenhirLib.EngineTypes.startp = _startpos_cty_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_cty_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4_inlined1; + MenhirLib.EngineTypes.startp = _startpos__4_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__4_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = label_inlined1; + MenhirLib.EngineTypes.startp = _startpos_label_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_label_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined2; + MenhirLib.EngineTypes.startp = _startpos__2_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined2_; + 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 = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _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_inlined1 : unit = Obj.magic _6_inlined1 in + let cty_inlined1 : (Parsetree.core_type) = Obj.magic cty_inlined1 in + let _4_inlined1 : unit = Obj.magic _4_inlined1 in + let label_inlined1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 26556 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label_inlined1 in + let _2_inlined2 : unit = Obj.magic _2_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 26567 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 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__6_inlined1_ in + let _v : ((string option * Parsetree.pattern) list) = let _3 = + let (_endpos_label_, _startpos_label_, _endpos__6_, _startpos__2_, _6, cty, _4, label, _2, _1) = (_endpos_label_inlined1_, _startpos_label_inlined1_, _endpos__6_inlined1_, _startpos__2_inlined2_, _6_inlined1, cty_inlined1, _4_inlined1, label_inlined1, _2_inlined2, _1_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 26584 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let (_startpos__2_, _2) = (_startpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3321 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 26597 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ _3; _1 ] ) +# 26603 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = 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.pattern_desc) = +# 3344 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let closed, pat = _1 in + Ppat_tuple(List.rev pat, closed) ) +# 26629 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = 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.pattern_desc) = +# 3344 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let closed, pat = _1 in + Ppat_tuple(List.rev pat, closed) ) +# 26655 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.pattern * Parsetree.expression * + Parsetree.value_constraint option) = 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.pattern * Parsetree.expression * + Parsetree.value_constraint option * bool) = +# 2865 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let p,e,c = _1 in (p,e,c,false) ) +# 26682 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (string) = 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.pattern * Parsetree.expression * + Parsetree.value_constraint option * bool) = let _endpos = _endpos__1_ in + let _startpos = _startpos__1_ in + let _loc = (_startpos, _endpos) in + +# 2868 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (mkpatvar ~loc:_loc _1, mkexpvar ~loc:_loc _1, None, true) ) +# 26711 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (string) = 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 * Parsetree.expression * + Parsetree.value_constraint option) = let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkpatvar ~loc:_sloc _1 ) +# 26748 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2837 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (_1, _2, None) ) +# 26754 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Parsetree.expression) = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in + let _2 : (Parsetree.type_constraint) = Obj.magic _2 in + let _1 : (string) = 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.pattern * Parsetree.expression * + Parsetree.value_constraint option) = let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkpatvar ~loc:_sloc _1 ) +# 26805 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2839 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let v = _1 in (* PR#7344 *) + let t = + match _2 with + Pconstraint t -> + Pvc_constraint { locally_abstract_univars = []; typ=t } + | Pcoerce (ground, coercion) -> Pvc_coercion { ground; coercion} + in + (v, _4, Some t) + ) +# 26819 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + 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 _5 : (Parsetree.expression) = Obj.magic _5 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.core_type) = Obj.magic _3 in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let xs : (string Location.loc list) = Obj.magic xs in + let _2 : unit = Obj.magic _2 in + let _1 : (string) = 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.pattern * Parsetree.expression * + Parsetree.value_constraint option) = let _3 = + let _2 = _2_inlined1 in + let _1 = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 26891 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1144 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 26896 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3784 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 26902 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3788 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_poly(_1, _3) ) +# 26908 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _startpos__3_ = _startpos_xs_ in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkpatvar ~loc:_sloc _1 ) +# 26919 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _loc__3_ = (_startpos__3_, _endpos__3_) in + +# 2849 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let t = ghtyp ~loc:(_loc__3_) _3 in + (_1, _5, Some (Pvc_constraint { locally_abstract_univars = []; typ=t })) + ) +# 26929 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _8; + MenhirLib.EngineTypes.startp = _startpos__8_; + MenhirLib.EngineTypes.endp = _endpos__8_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + 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 _8 : (Parsetree.expression) = Obj.magic _8 in + let _7 : unit = Obj.magic _7 in + let _6 : (Parsetree.core_type) = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let xs : (string Location.loc list) = Obj.magic xs in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (string) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__8_ in + let _v : (Parsetree.pattern * Parsetree.expression * + Parsetree.value_constraint option) = let _4 = +# 2830 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 27004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkpatvar ~loc:_sloc _1 ) +# 27013 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2854 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let constraint' = + Pvc_constraint { locally_abstract_univars=_4; typ = _6} + in + (_1, _8, Some constraint') ) +# 27022 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _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 : (Parsetree.expression) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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 * Parsetree.expression * + Parsetree.value_constraint option) = +# 2859 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (_1, _3, None) ) +# 27062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _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 : (Parsetree.expression) = Obj.magic _5 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.core_type) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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.pattern * Parsetree.expression * + Parsetree.value_constraint option) = +# 2861 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (_1, _5, Some(Pvc_constraint { locally_abstract_univars=[]; typ=_3 })) ) +# 27116 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = body; + MenhirLib.EngineTypes.startp = _startpos_body_; + MenhirLib.EngineTypes.endp = _endpos_body_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = rec_flag; + MenhirLib.EngineTypes.startp = _startpos_rec_flag_; + MenhirLib.EngineTypes.endp = _endpos_rec_flag_; + 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 = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + 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 _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let body : (Parsetree.pattern * Parsetree.expression * + Parsetree.value_constraint option * bool) = Obj.magic body in + let rec_flag : (Asttypes.rec_flag) = Obj.magic rec_flag in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let ext : (string Location.loc option) = Obj.magic ext in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_tag_ in - let _endpos = _endpos_end_tag__ in - let _v : (Parsetree.expression_desc) = let children = - let xs = xs_inlined1 in - let xs = -# 253 "" - ( List.rev xs ) -# 15183 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1088 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 15188 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let (_endpos_children_, _startpos_children_) = (_endpos_xs_inlined1_, _startpos_xs_inlined1_) in - let props = - let xs = -# 253 "" - ( List.rev xs ) -# 15196 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined2_ in + let _v : (Ast_helper.let_bindings) = let _1 = + let attrs2 = + let _1 = _1_inlined2 in + +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 27180 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined2_ in + let attrs1 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 27189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 1088 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 15201 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2888 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let attrs = attrs1 @ attrs2 in + mklbs ext rec_flag (mklb ~loc:_sloc true body attrs) + ) +# 27201 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _loc_tag_ = (_startpos_tag_, _endpos_tag_) in - let _loc_end_tag__ = (_startpos_end_tag__, _endpos_end_tag__) in - let _loc_children_ = (_startpos_children_, _endpos_children_) in -# 2688 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let children = - let children, loc = mktailexp _loc_children_ children in - mkexp ~loc children - in - let _ = end_tag_ in - Jsx_helper.make_jsx_element () - ~raise:raise_error ~loc:_loc_tag_ ~tag ~end_tag:(Some (end_tag, _loc_end_tag__)) ~props ~children - ) -# 15218 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2878 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 27207 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15226,27 +27215,27 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = id; - MenhirLib.EngineTypes.startp = _startpos_id_; - MenhirLib.EngineTypes.endp = _endpos_id_; - 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 id : ( -# 857 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 15239 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic id in + let _2 : (Ast_helper.let_binding) = Obj.magic _2 in + let _1 : (Ast_helper.let_bindings) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_id_ in - let _endpos = _endpos_id_ in - let _v : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * Longident.t) = let _endpos = _endpos_id_ in - let _symbolstartpos = _startpos_id_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3849 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( `Module, _sloc, Lident id ) -# 15250 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : (Ast_helper.let_bindings) = +# 2879 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( addlb _1 _2 ) +# 27239 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15258,27 +27247,84 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = id; - MenhirLib.EngineTypes.startp = _startpos_id_; - MenhirLib.EngineTypes.endp = _endpos_id_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = body; + MenhirLib.EngineTypes.startp = _startpos_body_; + MenhirLib.EngineTypes.endp = _endpos_body_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = rec_flag; + MenhirLib.EngineTypes.startp = _startpos_rec_flag_; + MenhirLib.EngineTypes.endp = _endpos_rec_flag_; + 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 id : ( -# 803 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 15271 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic id in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let body : (Parsetree.pattern * Parsetree.expression * + Parsetree.value_constraint option * bool) = Obj.magic body in + let rec_flag : (Asttypes.rec_flag) = Obj.magic rec_flag in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_id_ in - let _endpos = _endpos_id_ in - let _v : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * Longident.t) = let _endpos = _endpos_id_ in - let _symbolstartpos = _startpos_id_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined2_ in + let _v : (Ast_helper.let_bindings) = let _1 = + let attrs2 = + let _1 = _1_inlined2 in + +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 27296 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined2_ in + let attrs1 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 27305 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let ext = +# 4511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None ) +# 27311 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2888 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let attrs = attrs1 @ attrs2 in + mklbs ext rec_flag (mklb ~loc:_sloc true body attrs) + ) +# 27322 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 3850 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( `Value, _sloc, Lident id ) -# 15282 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2878 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 27328 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15291,46 +27337,103 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = id; - MenhirLib.EngineTypes.startp = _startpos_id_; - MenhirLib.EngineTypes.endp = _endpos_id_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = body; + MenhirLib.EngineTypes.startp = _startpos_body_; + MenhirLib.EngineTypes.endp = _endpos_body_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = prefix; - MenhirLib.EngineTypes.startp = _startpos_prefix_; - MenhirLib.EngineTypes.endp = _endpos_prefix_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = rec_flag; + MenhirLib.EngineTypes.startp = _startpos_rec_flag_; + MenhirLib.EngineTypes.endp = _endpos_rec_flag_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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; + }; + }; + }; + }; }; }; } = _menhir_stack in - let id : (Longident.t) = Obj.magic id in - let _2 : unit = Obj.magic _2 in - let prefix : ( -# 857 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 15317 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic prefix in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let body : (Parsetree.pattern * Parsetree.expression * + Parsetree.value_constraint option * bool) = Obj.magic body in + let rec_flag : (Asttypes.rec_flag) = Obj.magic rec_flag in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _2 : (string Location.loc) = Obj.magic _2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_prefix_ in - let _endpos = _endpos_id_ in - let _v : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * Longident.t) = let _endpos = _endpos_id_ in - let _symbolstartpos = _startpos_prefix_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined3_ in + let _v : (Ast_helper.let_bindings) = let _1 = + let attrs2 = + let _1 = _1_inlined3 in + +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 27399 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let attrs1 = + let _1 = _1_inlined2 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 27408 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let ext = + let (_startpos__1_, _1) = (_startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__2_ in + let _startpos = _startpos__1_ in + let _loc = (_startpos, _endpos) in + +# 4513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( not_expecting _loc "extension"; None ) +# 27419 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2888 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let attrs = attrs1 @ attrs2 in + mklbs ext rec_flag (mklb ~loc:_sloc true body attrs) + ) +# 27431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 3851 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let rec rebase = function - | Lident id -> Ldot (Lident prefix, id) - | Ldot (prefix', id) -> Ldot (rebase prefix', id) - | Lapply _ -> assert false - in - `Module, _sloc, rebase id ) -# 15334 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2878 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 27437 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15343,9 +27446,66 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = id; - MenhirLib.EngineTypes.startp = _startpos_id_; - MenhirLib.EngineTypes.endp = _endpos_id_; + 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 : (Ast_helper.let_binding) = Obj.magic _2 in + let _1 : (Ast_helper.let_bindings) = 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 : (Ast_helper.let_bindings) = +# 2879 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( addlb _1 _2 ) +# 27469 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.pattern) = 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.pattern) = +# 2484 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 27494 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _2; @@ -15353,36 +27513,39 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = prefix; - MenhirLib.EngineTypes.startp = _startpos_prefix_; - MenhirLib.EngineTypes.endp = _endpos_prefix_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let id : (Longident.t) = Obj.magic id in + let _3 : (Parsetree.core_type) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let prefix : ( -# 857 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 15369 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic prefix in + let _1 : (Parsetree.pattern) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_prefix_ in - let _endpos = _endpos_id_ in - let _v : ([ `Module | `Value ] * (Lexing.position * Lexing.position) * Longident.t) = let _endpos = _endpos_id_ in - let _symbolstartpos = _startpos_prefix_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = +# 2486 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ppat_constraint(_1, _3) ) +# 27534 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkpat ~loc:_sloc _1 ) +# 27543 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 3858 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let rec rebase = function - | Lident id -> Ldot (Lident prefix, id) - | Ldot (prefix', id) -> Ldot (rebase prefix', id) - | Lapply _ -> assert false - in - `Value, _sloc, rebase id ) -# 15386 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2487 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 27549 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15394,27 +27557,37 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = id; - MenhirLib.EngineTypes.startp = _startpos_id_; - MenhirLib.EngineTypes.endp = _endpos_id_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = exp; + MenhirLib.EngineTypes.startp = _startpos_exp_; + MenhirLib.EngineTypes.endp = _endpos_exp_; + 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 id : ( -# 858 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 15407 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic id in + let exp : (Parsetree.expression) = Obj.magic exp in + let _1 : (string) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_id_ in - let _endpos = _endpos_id_ in - let _v : ([> `Module | `Value ] * (Lexing.position * Lexing.position) * Longident.t) = let _endpos = _endpos_id_ in - let _symbolstartpos = _startpos_id_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos__1_ in + let _endpos = _endpos_exp_ in + let _v : (Parsetree.pattern * Parsetree.expression) = let pat = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkpatvar ~loc:_sloc _1 ) +# 27585 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 3849 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( `Module, _sloc, Lident id ) -# 15418 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2905 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (pat, exp) ) +# 27591 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15427,26 +27600,22 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = id; - MenhirLib.EngineTypes.startp = _startpos_id_; - MenhirLib.EngineTypes.endp = _endpos_id_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let id : ( -# 804 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 15439 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic id in + let _1 : (string) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_id_ in - let _endpos = _endpos_id_ in - let _v : ([> `Module | `Value ] * (Lexing.position * Lexing.position) * Longident.t) = let _endpos = _endpos_id_ in - let _symbolstartpos = _startpos_id_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.pattern * Parsetree.expression) = let _endpos = _endpos__1_ in + let _startpos = _startpos__1_ in + let _loc = (_startpos, _endpos) in -# 3850 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( `Value, _sloc, Lident id ) -# 15450 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2908 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (mkpatvar ~loc:_loc _1, mkexpvar ~loc:_loc _1) ) +# 27619 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15459,46 +27628,48 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = id; - MenhirLib.EngineTypes.startp = _startpos_id_; - MenhirLib.EngineTypes.endp = _endpos_id_; + MenhirLib.EngineTypes.semv = exp; + MenhirLib.EngineTypes.startp = _startpos_exp_; + MenhirLib.EngineTypes.endp = _endpos_exp_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = prefix; - MenhirLib.EngineTypes.startp = _startpos_prefix_; - MenhirLib.EngineTypes.endp = _endpos_prefix_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = typ; + MenhirLib.EngineTypes.startp = _startpos_typ_; + MenhirLib.EngineTypes.endp = _endpos_typ_; + 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 = pat; + MenhirLib.EngineTypes.startp = _startpos_pat_; + MenhirLib.EngineTypes.endp = _endpos_pat_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; - } = _menhir_stack in - let id : (Longident.t) = Obj.magic id in - let _2 : unit = Obj.magic _2 in - let prefix : ( -# 858 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 15485 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic prefix in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_prefix_ in - let _endpos = _endpos_id_ in - let _v : ([> `Module | `Value ] * (Lexing.position * Lexing.position) * Longident.t) = let _endpos = _endpos_id_ in - let _symbolstartpos = _startpos_prefix_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3851 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let rec rebase = function - | Lident id -> Ldot (Lident prefix, id) - | Ldot (prefix', id) -> Ldot (rebase prefix', id) - | Lapply _ -> assert false - in - `Module, _sloc, rebase id ) -# 15502 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + } = _menhir_stack in + let exp : (Parsetree.expression) = Obj.magic exp in + let _4 : unit = Obj.magic _4 in + let typ : (Parsetree.core_type) = Obj.magic typ in + let _2 : unit = Obj.magic _2 in + let pat : (Parsetree.pattern) = Obj.magic pat in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_pat_ in + let _endpos = _endpos_exp_ in + let _v : (Parsetree.pattern * Parsetree.expression) = +# 2910 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = (_startpos_pat_, _endpos_typ_) in + (ghpat ~loc (Ppat_constraint(pat, typ)), exp) ) +# 27673 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15511,9 +27682,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = id; - MenhirLib.EngineTypes.startp = _startpos_id_; - MenhirLib.EngineTypes.endp = _endpos_id_; + MenhirLib.EngineTypes.semv = exp; + MenhirLib.EngineTypes.startp = _startpos_exp_; + MenhirLib.EngineTypes.endp = _endpos_exp_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -15521,36 +27692,23 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = prefix; - MenhirLib.EngineTypes.startp = _startpos_prefix_; - MenhirLib.EngineTypes.endp = _endpos_prefix_; + MenhirLib.EngineTypes.semv = pat; + MenhirLib.EngineTypes.startp = _startpos_pat_; + MenhirLib.EngineTypes.endp = _endpos_pat_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let id : (Longident.t) = Obj.magic id in + let exp : (Parsetree.expression) = Obj.magic exp in let _2 : unit = Obj.magic _2 in - let prefix : ( -# 858 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 15537 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic prefix in + let pat : (Parsetree.pattern) = Obj.magic pat in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_prefix_ in - let _endpos = _endpos_id_ in - let _v : ([> `Module | `Value ] * (Lexing.position * Lexing.position) * Longident.t) = let _endpos = _endpos_id_ in - let _symbolstartpos = _startpos_prefix_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3858 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let rec rebase = function - | Lident id -> Ldot (Lident prefix, id) - | Ldot (prefix', id) -> Ldot (rebase prefix', id) - | Lapply _ -> assert false - in - `Value, _sloc, rebase id ) -# 15554 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_pat_ in + let _endpos = _endpos_exp_ in + let _v : (Parsetree.pattern * Parsetree.expression) = +# 2913 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (pat, exp) ) +# 27712 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15563,28 +27721,20 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = name; - MenhirLib.EngineTypes.startp = _startpos_name_; - MenhirLib.EngineTypes.endp = _endpos_name_; + MenhirLib.EngineTypes.semv = body; + MenhirLib.EngineTypes.startp = _startpos_body_; + MenhirLib.EngineTypes.endp = _endpos_body_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let name : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 15575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic name in + let body : (Parsetree.pattern * Parsetree.expression) = Obj.magic body in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_name_ in - let _endpos = _endpos_name_ in - let _v : ((Lexing.position * Lexing.position) * - [ `Prop of string * Parsetree.expression - | `Prop_opt of string * Parsetree.expression - | `Prop_opt_punned of string - | `Prop_punned of string ]) = let _loc_name_ = (_startpos_name_, _endpos_name_) in - -# 2699 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _loc_name_, `Prop_punned name ) -# 15588 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_body_ in + let _endpos = _endpos_body_ in + let _v : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = +# 2917 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let let_pat, let_exp = body in + let_pat, let_exp, [] ) +# 27738 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15597,35 +27747,72 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = name; - MenhirLib.EngineTypes.startp = _startpos_name_; - MenhirLib.EngineTypes.endp = _endpos_name_; + MenhirLib.EngineTypes.semv = body; + MenhirLib.EngineTypes.startp = _startpos_body_; + MenhirLib.EngineTypes.endp = _endpos_body_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = bindings; + MenhirLib.EngineTypes.startp = _startpos_bindings_; + MenhirLib.EngineTypes.endp = _endpos_bindings_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let name : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let body : (Parsetree.pattern * Parsetree.expression) = Obj.magic body in + let _1 : ( +# 829 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 15615 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic name in - let _1 : unit = Obj.magic _1 in +# 27772 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 - let _startpos = _startpos__1_ in - let _endpos = _endpos_name_ in - let _v : ((Lexing.position * Lexing.position) * - [ `Prop of string * Parsetree.expression - | `Prop_opt of string * Parsetree.expression - | `Prop_opt_punned of string - | `Prop_punned of string ]) = let _loc_name_ = (_startpos_name_, _endpos_name_) in + let _startpos = _startpos_bindings_ in + let _endpos = _endpos_body_ in + let _v : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = let pbop_op = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 27785 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos_body_ in + let _symbolstartpos = _startpos_bindings_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2700 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _loc_name_, `Prop_opt_punned name ) -# 15629 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2920 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 ) +# 27798 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.class_expr Parsetree.class_infos list) = +# 211 "" + ( [] ) +# 27816 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15638,42 +27825,134 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = expr; - MenhirLib.EngineTypes.startp = _startpos_expr_; - MenhirLib.EngineTypes.endp = _endpos_expr_; + 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.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = name; - MenhirLib.EngineTypes.startp = _startpos_name_; - MenhirLib.EngineTypes.endp = _endpos_name_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = body; + MenhirLib.EngineTypes.startp = _startpos_body_; + MenhirLib.EngineTypes.endp = _endpos_body_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = params; + MenhirLib.EngineTypes.startp = _startpos_params_; + MenhirLib.EngineTypes.endp = _endpos_params_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = virt; + MenhirLib.EngineTypes.startp = _startpos_virt_; + MenhirLib.EngineTypes.endp = _endpos_virt_; + 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 expr : (Parsetree.expression) = Obj.magic expr in - let _2 : unit = Obj.magic _2 in - let name : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let xs : (Parsetree.class_expr Parsetree.class_infos list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let body : (Parsetree.class_expr) = Obj.magic body in + let _1_inlined2 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 15664 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic name in +# 27882 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_name_ in - let _endpos = _endpos_expr_ in - let _v : ((Lexing.position * Lexing.position) * - [ `Prop of string * Parsetree.expression - | `Prop_opt of string * Parsetree.expression - | `Prop_opt_punned of string - | `Prop_punned of string ]) = let _loc_name_ = (_startpos_name_, _endpos_name_) in + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.class_expr Parsetree.class_infos list) = let x = + let attrs2 = + let _1 = _1_inlined3 in + +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 27897 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 27909 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 27917 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2051 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let attrs = attrs1 @ attrs2 in + let loc = make_loc _sloc in + let docs = symbol_docs _sloc in + let text = symbol_text _symbolstartpos in + Ci.mk id body ~virt ~params ~attrs ~loc ~text ~docs + ) +# 27932 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 2701 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _loc_name_, `Prop (name, expr) ) -# 15677 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 213 "" + ( x :: xs ) +# 27938 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.class_type Parsetree.class_infos list) = +# 211 "" + ( [] ) +# 27956 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15686,49 +27965,141 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = expr; - MenhirLib.EngineTypes.startp = _startpos_expr_; - MenhirLib.EngineTypes.endp = _endpos_expr_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = name; - MenhirLib.EngineTypes.startp = _startpos_name_; - MenhirLib.EngineTypes.endp = _endpos_name_; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; 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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = params; + MenhirLib.EngineTypes.startp = _startpos_params_; + MenhirLib.EngineTypes.endp = _endpos_params_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = virt; + MenhirLib.EngineTypes.startp = _startpos_virt_; + MenhirLib.EngineTypes.endp = _endpos_virt_; + 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 expr : (Parsetree.expression) = Obj.magic expr in - let _3 : unit = Obj.magic _3 in - let name : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let xs : (Parsetree.class_type Parsetree.class_infos list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let cty : (Parsetree.class_type) = Obj.magic cty in + let _6 : unit = Obj.magic _6 in + let _1_inlined2 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 15718 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic name in +# 28029 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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_expr_ in - let _v : ((Lexing.position * Lexing.position) * - [ `Prop of string * Parsetree.expression - | `Prop_opt of string * Parsetree.expression - | `Prop_opt_punned of string - | `Prop_punned of string ]) = let _loc_name_ = (_startpos_name_, _endpos_name_) in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.class_type Parsetree.class_infos list) = let x = + let attrs2 = + let _1 = _1_inlined3 in + +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 28044 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 28056 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 28064 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2350 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let attrs = attrs1 @ attrs2 in + let loc = make_loc _sloc in + let docs = symbol_docs _sloc in + let text = symbol_text _symbolstartpos in + Ci.mk id cty ~virt ~params ~attrs ~loc ~text ~docs + ) +# 28079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 2702 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _loc_name_, `Prop_opt (name, expr) ) -# 15732 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 213 "" + ( x :: xs ) +# 28085 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.class_type Parsetree.class_infos list) = +# 211 "" + ( [] ) +# 28103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15741,92 +28112,141 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = csig; + MenhirLib.EngineTypes.startp = _startpos_csig_; + MenhirLib.EngineTypes.endp = _endpos_csig_; 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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = params; + MenhirLib.EngineTypes.startp = _startpos_params_; + MenhirLib.EngineTypes.endp = _endpos_params_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = virt; + MenhirLib.EngineTypes.startp = _startpos_virt_; + MenhirLib.EngineTypes.endp = _endpos_virt_; + 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 xs : (Parsetree.class_type Parsetree.class_infos list) = Obj.magic xs in let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in - let _3 : unit = Obj.magic _3 in - let _1_inlined1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let csig : (Parsetree.class_type) = Obj.magic csig in + let _6 : unit = Obj.magic _6 in + let _1_inlined2 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 15780 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1_inlined1 in - let _1 : (Asttypes.mutable_flag) = Obj.magic _1 in +# 28176 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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__1_inlined3_ in - let _v : (Parsetree.label_declaration) = let _5 = - let _1 = _1_inlined3 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 15791 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos__5_ = _endpos__1_inlined3_ in - let _4 = - let _1 = _1_inlined2 in - -# 3518 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _endpos = _endpos_xs_ in + let _v : (Parsetree.class_type Parsetree.class_infos list) = let x = + let attrs2 = + let _1 = _1_inlined3 in + +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 15800 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _2 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _1 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 15808 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos = _endpos__1_ in +# 28191 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 28203 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 28211 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 15816 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2389 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let attrs = attrs1 @ attrs2 in + let loc = make_loc _sloc in + let docs = symbol_docs _sloc in + let text = symbol_text _symbolstartpos in + Ci.mk id csig ~virt ~params ~attrs ~loc ~text ~docs + ) +# 28226 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _startpos__2_ = _startpos__1_inlined1_ in - let _endpos = _endpos__5_ in - let _symbolstartpos = if _startpos__1_ != _endpos__1_ then - _startpos__1_ - else - _startpos__2_ in - let _sloc = (_symbolstartpos, _endpos) in -# 3391 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let info = symbol_info _endpos in - Type.field _2 _4 ~mut:_1 ~attrs:_5 ~loc:(make_loc _sloc) ~info ) -# 15830 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 213 "" + ( x :: xs ) +# 28232 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.module_binding list) = +# 211 "" + ( [] ) +# 28250 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15839,19 +28259,19 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined4; - MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = body; + MenhirLib.EngineTypes.startp = _startpos_body_; + MenhirLib.EngineTypes.endp = _endpos_body_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined2; @@ -15859,124 +28279,78 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + 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 = _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 _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in - let _6 : unit = Obj.magic _6 in + let xs : (Parsetree.module_binding list) = Obj.magic xs in let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in - let _3 : unit = Obj.magic _3 in - let _1_inlined1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 15892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1_inlined1 in - let _1 : (Asttypes.mutable_flag) = Obj.magic _1 in + let body : (Parsetree.module_expr) = Obj.magic body in + let _1_inlined2 : (string option) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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__1_inlined4_ in - let _v : (Parsetree.label_declaration) = let _7 = - let _1 = _1_inlined4 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 15903 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos__7_ = _endpos__1_inlined4_ in - let _5 = - let _1 = _1_inlined3 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _endpos = _endpos_xs_ in + let _v : (Parsetree.module_binding list) = let x = + let attrs2 = + let _1 = _1_inlined3 in + +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 15912 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos__5_ = _endpos__1_inlined3_ in - let _4 = - let _1 = _1_inlined2 in - -# 3518 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 28313 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let name = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 28325 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 15921 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _2 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _1 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 15929 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos = _endpos__1_ in +# 28333 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 15937 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1699 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let loc = make_loc _sloc in + let attrs = attrs1 @ attrs2 in + let docs = symbol_docs _sloc in + let text = symbol_text _symbolstartpos in + Mb.mk name body ~attrs ~loc ~text ~docs + ) +# 28348 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _startpos__2_ = _startpos__1_inlined1_ in - let _endpos = _endpos__7_ in - let _symbolstartpos = if _startpos__1_ != _endpos__1_ then - _startpos__1_ - else - _startpos__2_ in - let _sloc = (_symbolstartpos, _endpos) in -# 3396 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let info = - match rhs_info _endpos__5_ with - | Some _ as info_before_semi -> info_before_semi - | None -> symbol_info _endpos - in - Type.field _2 _4 ~mut:_1 ~attrs:(_5 @ _7) ~loc:(make_loc _sloc) ~info ) -# 15955 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.label_declaration) = 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.label_declaration list) = -# 3385 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [_1] ) -# 15980 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 213 "" + ( x :: xs ) +# 28354 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15987,21 +28361,14 @@ module Tables = struct }); (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.label_declaration) = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Parsetree.label_declaration list) = -# 3386 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [_1] ) -# 16005 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.module_declaration list) = +# 211 "" + ( [] ) +# 28372 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16014,75 +28381,105 @@ module Tables = struct 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.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 = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = mty; + MenhirLib.EngineTypes.startp = _startpos_mty_; + MenhirLib.EngineTypes.endp = _endpos_mty_; + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _2 : (Parsetree.label_declaration list) = Obj.magic _2 in - let _1 : (Parsetree.label_declaration) = 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.label_declaration list) = -# 3387 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 :: _2 ) -# 16037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 16058 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 in + let xs : (Parsetree.module_declaration list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let mty : (Parsetree.module_type) = Obj.magic mty in + let _4 : unit = Obj.magic _4 in + let _1_inlined2 : (string option) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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__1_ in - let _v : (string * Parsetree.pattern) = let x = - let _1 = + let _endpos = _endpos_xs_ in + let _v : (Parsetree.module_declaration list) = let x = + let attrs2 = + let _1 = _1_inlined3 in + +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 28442 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let name = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 16071 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 28454 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos__1_ in + let attrs1 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 28462 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2394 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) -# 16080 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1992 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let attrs = attrs1 @ attrs2 in + let docs = symbol_docs _sloc in + let loc = make_loc _sloc in + let text = symbol_text _symbolstartpos in + Md.mk name mty ~attrs ~loc ~text ~docs + ) +# 28477 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2386 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( x ) -# 16086 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 213 "" + ( x :: xs ) +# 28483 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16093,65 +28490,14 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = cty; - MenhirLib.EngineTypes.startp = _startpos_cty_; - MenhirLib.EngineTypes.endp = _endpos_cty_; - 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 cty : (Parsetree.core_type) = Obj.magic cty in - let _2 : unit = Obj.magic _2 in - let _1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 16121 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos_cty_ in - let _v : (string * Parsetree.pattern) = let x = - let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 16134 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2394 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) -# 16143 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _startpos_x_ = _startpos__1_ in - let _endpos = _endpos_cty_ in - let _symbolstartpos = _startpos_x_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2388 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let lab, pat = x in - lab, - mkpat ~loc:_sloc (Ppat_constraint (pat, cty)) ) -# 16155 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.attributes) = +# 211 "" + ( [] ) +# 28501 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16163,20 +28509,27 @@ module Tables = struct (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; + 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 = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; } = _menhir_stack in - let _1 : (Longident.t) = Obj.magic _1 in + let xs : (Parsetree.attributes) = Obj.magic xs in + let x : (Parsetree.attribute) = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Longident.t) = -# 3867 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 16180 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.attributes) = +# 213 "" + ( x :: xs ) +# 28533 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16187,21 +28540,14 @@ module Tables = struct }); (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.expression) = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Asttypes.arg_label * Parsetree.expression) = -# 2706 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Nolabel, _1) ) -# 16205 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.type_declaration list) = +# 211 "" + ( [] ) +# 28551 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16214,30 +28560,137 @@ module Tables = struct 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.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 = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs_inlined1; + MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = kind_priv_manifest; + MenhirLib.EngineTypes.startp = _startpos_kind_priv_manifest_; + MenhirLib.EngineTypes.endp = _endpos_kind_priv_manifest_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = params; + MenhirLib.EngineTypes.startp = _startpos_params_; + MenhirLib.EngineTypes.endp = _endpos_params_; + 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 _2 : (Parsetree.expression) = Obj.magic _2 in - let _1 : ( -# 788 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let xs : (Parsetree.type_declaration list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let xs_inlined1 : ((Parsetree.core_type * Parsetree.core_type * Warnings.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 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 16233 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 in +# 28618 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + 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 : (Asttypes.arg_label * Parsetree.expression) = -# 2708 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Labelled _1, _2) ) -# 16241 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos_xs_ in + let _v : (Parsetree.type_declaration list) = let x = + let xs = xs_inlined1 in + let attrs2 = + let _1 = _1_inlined3 in + +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 28633 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let cstrs = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 28642 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 28647 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3488 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 28653 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 28664 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 28672 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3477 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let (kind, priv, manifest) = kind_priv_manifest in + let docs = symbol_docs _sloc in + let attrs = attrs1 @ attrs2 in + let loc = make_loc _sloc in + let text = symbol_text _symbolstartpos in + Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ~text + ) +# 28688 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 213 "" + ( x :: xs ) +# 28694 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16248,34 +28701,14 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = label; - MenhirLib.EngineTypes.startp = _startpos_label_; - MenhirLib.EngineTypes.endp = _endpos_label_; - 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 label : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 16268 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic label in - let _1 : unit = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos_label_ in - let _v : (Asttypes.arg_label * Parsetree.expression) = let _loc_label_ = (_startpos_label_, _endpos_label_) in - -# 2710 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let loc = _loc_label_ in - (Labelled label, mkexpvar ~loc label) ) -# 16279 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.type_declaration list) = +# 211 "" + ( [] ) +# 28712 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16288,54 +28721,152 @@ 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = label; - MenhirLib.EngineTypes.startp = _startpos_label_; - MenhirLib.EngineTypes.endp = _endpos_label_; + MenhirLib.EngineTypes.semv = xs_inlined1; + MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_xs_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; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = params; + MenhirLib.EngineTypes.startp = _startpos_params_; + MenhirLib.EngineTypes.endp = _endpos_params_; + 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 _5 : unit = Obj.magic _5 in - let ty : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic ty in - let label : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let xs : (Parsetree.type_declaration list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let xs_inlined1 : ((Parsetree.core_type * Parsetree.core_type * Warnings.loc) list) = Obj.magic xs_inlined1 in + 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 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 16326 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic label in - let _2 : unit = Obj.magic _2 in +# 28786 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 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 : (Asttypes.arg_label * Parsetree.expression) = let _endpos = _endpos__5_ in - let _loc_label_ = (_startpos_label_, _endpos_label_) in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.type_declaration list) = let x = + let xs = xs_inlined1 in + let attrs2 = + let _1 = _1_inlined4 in + +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 28801 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined4_ in + let cstrs = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 28810 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 28815 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3488 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 28821 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let kind_priv_manifest = + let _1 = _1_inlined3 in + +# 3523 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _2 ) +# 28829 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 28840 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 28848 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3477 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let (kind, priv, manifest) = kind_priv_manifest in + let docs = symbol_docs _sloc in + let attrs = attrs1 @ attrs2 in + let loc = make_loc _sloc in + let text = symbol_text _symbolstartpos in + Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ~text + ) +# 28864 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 2713 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Labelled label, mkexp_constraint ~loc:(_startpos__2_, _endpos) - (mkexpvar ~loc:_loc_label_ label) ty) ) -# 16339 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 213 "" + ( x :: xs ) +# 28870 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16346,34 +28877,14 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = label; - MenhirLib.EngineTypes.startp = _startpos_label_; - MenhirLib.EngineTypes.endp = _endpos_label_; - 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 label : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 16366 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic label in - let _1 : unit = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos_label_ in - let _v : (Asttypes.arg_label * Parsetree.expression) = let _loc_label_ = (_startpos_label_, _endpos_label_) in - -# 2716 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let loc = _loc_label_ in - (Optional label, mkexpvar ~loc label) ) -# 16377 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.attributes) = +# 211 "" + ( [] ) +# 28888 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16386,30 +28897,26 @@ module Tables = struct 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.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.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : (Parsetree.expression) = Obj.magic _2 in - let _1 : ( -# 821 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 16405 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 in + let xs : (Parsetree.attributes) = Obj.magic xs in + let x : (Parsetree.attribute) = Obj.magic x 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) = -# 2719 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Optional _1, _2) ) -# 16413 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_x_ in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.attributes) = +# 213 "" + ( x :: xs ) +# 28920 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16420,57 +28927,14 @@ module Tables = struct }); (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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - 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 _1_inlined1 : (Parsetree.expression option) = Obj.magic _1_inlined1 in - let _3 : (string * Parsetree.pattern) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 _4 = - let _1 = _1_inlined1 in - -# 2382 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 16468 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 2356 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Optional (fst _3), _4, snd _3) ) -# 16474 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.signature_item list list) = +# 211 "" + ( [] ) +# 28938 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16483,9 +28947,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + 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; @@ -16494,40 +28958,30 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _1_inlined1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 16501 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1_inlined1 in + let xs : (Parsetree.signature_item list 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__1_inlined1_ in - let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _2 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.signature_item list list) = let x = let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos__1_ in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 16516 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1052 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( text_sig _startpos ) +# 28973 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2394 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) -# 16525 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1845 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 28979 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2358 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Optional (fst _2), None, snd _2) ) -# 16531 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 213 "" + ( x :: xs ) +# 28985 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16540,59 +28994,59 @@ 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 = 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.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; - }; - }; - }; + 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 _1_inlined1 : (Parsetree.expression option) = Obj.magic _1_inlined1 in - let _3 : (Parsetree.pattern) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : ( -# 821 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 16580 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 in + let xs : (Parsetree.signature_item list list) = Obj.magic xs in + let _1 : (Parsetree.signature_item) = 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 _4 = - let _1 = _1_inlined1 in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.signature_item list list) = let x = + let _1 = + let _startpos = _startpos__1_ in + +# 1050 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( text_sig _startpos @ [_1] ) +# 29020 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 2382 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 16590 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1845 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 29026 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2360 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Optional _1, _4, _3) ) -# 16596 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 213 "" + ( x :: xs ) +# 29032 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.structure_item list list) = +# 211 "" + ( [] ) +# 29050 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16605,9 +29059,9 @@ module Tables = struct 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.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -16616,19 +29070,49 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : (Parsetree.pattern) = Obj.magic _2 in - let _1 : ( -# 821 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 16624 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 in + let xs : (Parsetree.structure_item list 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__2_ in - let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = -# 2362 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Optional _1, None, _2) ) -# 16632 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos_xs_ in + let _v : (Parsetree.structure_item list list) = let x = + let _1 = + let ys = + let items = +# 1112 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [] ) +# 29085 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1578 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( items ) +# 29090 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let xs = + let _startpos = _startpos__1_ in + +# 1048 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( text_str _startpos ) +# 29098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 267 "" + ( xs @ ys ) +# 29104 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1594 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 29110 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 213 "" + ( x :: xs ) +# 29116 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16641,19 +29125,19 @@ module Tables = struct 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.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + 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.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -16664,17 +29148,86 @@ module Tables = struct }; }; } = _menhir_stack in - let _4 : unit = Obj.magic _4 in - let _3 : (string * Parsetree.pattern) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in + let xs : (Parsetree.structure_item list list) = Obj.magic xs in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let e : (Parsetree.expression) = Obj.magic e 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 : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = -# 2364 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Labelled (fst _3), None, snd _3) ) -# 16678 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos_xs_ in + let _v : (Parsetree.structure_item list list) = let x = + let _1 = + let ys = + let (_endpos__1_, _1) = (_endpos__1_inlined1_, _1_inlined1) in + let items = + let x = + let _1 = + let _1 = + let attrs = +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 29170 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1585 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkstrexp e attrs ) +# 29175 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _startpos__1_ = _startpos_e_ in + let _startpos = _startpos__1_ in + +# 1046 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( text_str _startpos @ [_1] ) +# 29183 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _startpos__1_ = _startpos_e_ in + let _endpos = _endpos__1_ in + let _startpos = _startpos__1_ in + +# 1065 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mark_rhs_docs _startpos _endpos; + _1 ) +# 29193 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1114 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( x ) +# 29199 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1578 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( items ) +# 29205 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let xs = + let _startpos = _startpos__1_ in + +# 1048 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( text_str _startpos ) +# 29213 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 267 "" + ( xs @ ys ) +# 29219 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1594 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 29225 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 213 "" + ( x :: xs ) +# 29231 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16687,9 +29240,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + 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; @@ -16698,40 +29251,48 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _1_inlined1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 16705 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in + let xs : (Parsetree.structure_item list list) = Obj.magic xs in + let _1 : (Parsetree.structure_item) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined1_ in - let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _2 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.structure_item list list) = let x = let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos__1_ in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 16720 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1046 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( text_str _startpos @ [_1] ) +# 29266 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2394 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) -# 16729 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1594 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 29272 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2366 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Labelled (fst _2), None, snd _2) ) -# 16735 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 213 "" + ( x :: xs ) +# 29278 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.class_type_field list list) = +# 211 "" + ( [] ) +# 29296 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16744,9 +29305,9 @@ module Tables = struct 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.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -16755,19 +29316,23 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : (Parsetree.pattern) = Obj.magic _2 in - let _1 : ( -# 788 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 16763 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 in + let xs : (Parsetree.class_type_field list list) = Obj.magic xs in + let _1 : (Parsetree.class_type_field) = 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) = -# 2368 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Labelled _1, None, _2) ) -# 16771 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos_xs_ in + let _v : (Parsetree.class_type_field list list) = let x = + let _startpos = _startpos__1_ in + +# 1060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( text_csig _startpos @ [_1] ) +# 29330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 213 "" + ( x :: xs ) +# 29336 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16778,21 +29343,14 @@ module Tables = struct }); (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.pattern) = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = -# 2370 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Nolabel, None, _1) ) -# 16796 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.class_field list list) = +# 211 "" + ( [] ) +# 29354 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16804,22 +29362,35 @@ module Tables = struct (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; + 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 _1 : (Parsetree.pattern * Parsetree.expression * - Parsetree.value_constraint option) = Obj.magic _1 in + let xs : (Parsetree.class_field list list) = Obj.magic xs in + let _1 : (Parsetree.class_field) = 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.pattern * Parsetree.expression * - Parsetree.value_constraint option * bool) = -# 2759 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let p,e,c = _1 in (p,e,c,false) ) -# 16823 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos_xs_ in + let _v : (Parsetree.class_field list list) = let x = + let _startpos = _startpos__1_ in + +# 1058 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( text_cstr _startpos @ [_1] ) +# 29388 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 213 "" + ( x :: xs ) +# 29394 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16830,25 +29401,14 @@ module Tables = struct }); (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 : (string) = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Parsetree.pattern * Parsetree.expression * - Parsetree.value_constraint option * bool) = let _endpos = _endpos__1_ in - let _startpos = _startpos__1_ in - let _loc = (_startpos, _endpos) in - -# 2762 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (mkpatvar ~loc:_loc _1, mkexpvar ~loc:_loc _1, None, true) ) -# 16852 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.structure_item list list) = +# 211 "" + ( [] ) +# 29412 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16861,9 +29421,9 @@ module Tables = struct 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.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -16872,26 +29432,23 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : (Parsetree.expression) = Obj.magic _2 in - let _1 : (string) = Obj.magic _1 in + let xs : (Parsetree.structure_item list list) = Obj.magic xs in + let _1 : (Parsetree.structure_item) = 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 * Parsetree.expression * - Parsetree.value_constraint option) = let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.structure_item list list) = let x = + let _startpos = _startpos__1_ in -# 2726 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkpatvar ~loc:_sloc _1 ) -# 16889 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1046 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( text_str _startpos @ [_1] ) +# 29446 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2730 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (_1, _2, None) ) -# 16895 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 213 "" + ( x :: xs ) +# 29452 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16902,62 +29459,14 @@ module Tables = struct }); (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 : (Parsetree.expression) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let _2 : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic _2 in - let _1 : (string) = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : (Parsetree.pattern * Parsetree.expression * - Parsetree.value_constraint option) = let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2726 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkpatvar ~loc:_sloc _1 ) -# 16946 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 2732 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let v = _1 in (* PR#7344 *) - let t = - match _2 with - Some t, None -> - Pvc_constraint { locally_abstract_univars = []; typ=t } - | ground, Some coercion -> Pvc_coercion { ground; coercion} - | _ -> assert false - in - (v, _4, Some t) - ) -# 16961 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.toplevel_phrase list list) = +# 211 "" + ( [] ) +# 29470 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16970,104 +29479,52 @@ 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; 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 = _2_inlined1; - MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; - 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; - }; - }; - }; - }; - }; + 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 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.core_type) = Obj.magic _3 in - let _2_inlined1 : unit = Obj.magic _2_inlined1 in - let xs : (string Location.loc list) = Obj.magic xs in - let _2 : unit = Obj.magic _2 in - let _1 : (string) = Obj.magic _1 in + let xs : (Parsetree.toplevel_phrase list 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 : (Parsetree.pattern * Parsetree.expression * - Parsetree.value_constraint option) = let _3 = - let _2 = _2_inlined1 in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.toplevel_phrase list list) = let x = let _1 = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 17033 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let x = + let _1 = +# 1112 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [] ) +# 29505 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1106 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 17038 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1365 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 29510 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 17044 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 183 "" + ( x ) +# 29516 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_poly(_1, _3) ) -# 17050 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _startpos__3_ = _startpos_xs_ in - let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2726 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkpatvar ~loc:_sloc _1 ) -# 17061 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1377 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 29522 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let t = ghtyp ~loc:(_loc__3_) _3 in - (_1, _5, Some (Pvc_constraint { locally_abstract_univars = []; typ=t })) - ) -# 17071 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 213 "" + ( x :: xs ) +# 29528 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17080,127 +29537,97 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _8; - MenhirLib.EngineTypes.startp = _startpos__8_; - MenhirLib.EngineTypes.endp = _endpos__8_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + 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 = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; MenhirLib.EngineTypes.next = { - 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 = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - 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; - }; - }; - }; - }; + 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 _8 : (Parsetree.expression) = Obj.magic _8 in - let _7 : unit = Obj.magic _7 in - let _6 : (Parsetree.core_type) = Obj.magic _6 in - let _5 : unit = Obj.magic _5 in - let xs : (string Location.loc list) = Obj.magic xs in - let _3 : unit = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (string) = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__8_ in - let _v : (Parsetree.pattern * Parsetree.expression * - Parsetree.value_constraint option) = let _4 = -# 2723 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 17146 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2726 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkpatvar ~loc:_sloc _1 ) -# 17155 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 2748 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let constraint' = - Pvc_constraint { locally_abstract_univars=_4; typ = _6} - in - (_1, _8, Some constraint') ) -# 17164 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _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 : (Parsetree.expression) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let xs : (Parsetree.toplevel_phrase list list) = Obj.magic xs in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let e : (Parsetree.expression) = Obj.magic e 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 * Parsetree.expression * - Parsetree.value_constraint option) = -# 2753 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (_1, _3, None) ) -# 17204 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos_xs_ in + let _v : (Parsetree.toplevel_phrase list list) = let x = + let _1 = + let x = + let _1 = _1_inlined1 in + let _1 = + let x = + let _1 = + let _1 = + let attrs = +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 29582 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1585 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkstrexp e attrs ) +# 29587 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1056 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptop_def [_1] ) +# 29593 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _startpos__1_ = _startpos_e_ in + let _startpos = _startpos__1_ in + +# 1054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( text_def _startpos @ [_1] ) +# 29601 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1114 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( x ) +# 29607 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1365 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 29613 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 183 "" + ( x ) +# 29619 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1377 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 29625 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 213 "" + ( x :: xs ) +# 29631 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17213,48 +29640,46 @@ 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; 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 = _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; - }; - }; - }; + 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 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.core_type) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let xs : (Parsetree.toplevel_phrase list list) = Obj.magic xs in + let _1 : (Parsetree.structure_item) = 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.pattern * Parsetree.expression * - Parsetree.value_constraint option) = -# 2755 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (_1, _5, Some(Pvc_constraint { locally_abstract_univars=[]; typ=_3 })) ) -# 17258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos_xs_ in + let _v : (Parsetree.toplevel_phrase list list) = let x = + let _1 = + let _1 = +# 1056 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptop_def [_1] ) +# 29665 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _startpos = _startpos__1_ in + +# 1054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( text_def _startpos @ [_1] ) +# 29671 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1377 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 29677 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 213 "" + ( x :: xs ) +# 29683 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17267,85 +29692,51 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = body; - MenhirLib.EngineTypes.startp = _startpos_body_; - MenhirLib.EngineTypes.endp = _endpos_body_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = rec_flag; - MenhirLib.EngineTypes.startp = _startpos_rec_flag_; - MenhirLib.EngineTypes.endp = _endpos_rec_flag_; - 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 = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; - 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 _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let body : (Parsetree.pattern * Parsetree.expression * - Parsetree.value_constraint option * bool) = Obj.magic body in - let rec_flag : (Asttypes.rec_flag) = Obj.magic rec_flag in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let ext : (string Location.loc option) = Obj.magic ext in - let _1 : unit = Obj.magic _1 in + let xs : (Parsetree.toplevel_phrase list list) = Obj.magic xs in + let _1 : (Parsetree.toplevel_phrase) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined2_ in - let _v : (Ast_helper.let_bindings) = let _1 = - let attrs2 = - let _1 = _1_inlined2 in - -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 17322 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined2_ in - let attrs1 = - let _1 = _1_inlined1 in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.toplevel_phrase list list) = let x = + let _1 = + let _1 = + let _endpos = _endpos__1_ in + let _startpos = _startpos__1_ in + +# 1065 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mark_rhs_docs _startpos _endpos; + _1 ) +# 29721 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _startpos = _startpos__1_ in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 17331 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( text_def _startpos @ [_1] ) +# 29728 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let attrs = attrs1 @ attrs2 in - mklbs ext rec_flag (mklb ~loc:_sloc true body attrs) - ) -# 17343 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1377 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 29734 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2772 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 17349 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 213 "" + ( x :: xs ) +# 29740 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17358,26 +29749,71 @@ module Tables = struct 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.semv = opat; + MenhirLib.EngineTypes.startp = _startpos_opat_; + MenhirLib.EngineTypes.endp = _endpos_opat_; 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 = octy; + MenhirLib.EngineTypes.startp = _startpos_octy_; + MenhirLib.EngineTypes.endp = _endpos_octy_; + 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 : (Ast_helper.let_binding) = Obj.magic _2 in - let _1 : (Ast_helper.let_bindings) = Obj.magic _1 in + let opat : (Parsetree.pattern option) = Obj.magic opat in + let octy : (Parsetree.core_type option) = Obj.magic octy 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__2_ in - let _v : (Ast_helper.let_bindings) = -# 2773 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( addlb _1 _2 ) -# 17381 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos_opat_ in + let _v : ((Longident.t Location.loc * Parsetree.pattern) list * unit option) = let _2 = +# 124 "" + ( None ) +# 29779 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let x = + let label = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 29789 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _startpos_label_ = _startpos__1_ in + let _endpos = _endpos_opat_ in + let _symbolstartpos = _startpos_label_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3363 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let constraint_loc, label, pat = + match opat with + | None -> + (* No pattern; this is a pun. Desugar it. + But that the pattern was there and the label reconstructed (which + piece of AST is marked as ghost is important for warning + emission). *) + _sloc, make_ghost label, pat_of_label label + | Some pat -> + (_startpos_octy_, _endpos), label, pat + in + label, mkpat_opt_constraint ~loc:constraint_loc pat octy + ) +# 29811 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1302 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [x], None ) +# 29817 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17390,83 +29826,78 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = body; - MenhirLib.EngineTypes.startp = _startpos_body_; - MenhirLib.EngineTypes.endp = _endpos_body_; + MenhirLib.EngineTypes.semv = opat; + MenhirLib.EngineTypes.startp = _startpos_opat_; + MenhirLib.EngineTypes.endp = _endpos_opat_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = rec_flag; - MenhirLib.EngineTypes.startp = _startpos_rec_flag_; - MenhirLib.EngineTypes.endp = _endpos_rec_flag_; + MenhirLib.EngineTypes.semv = octy; + MenhirLib.EngineTypes.startp = _startpos_octy_; + MenhirLib.EngineTypes.endp = _endpos_octy_; 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 _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let body : (Parsetree.pattern * Parsetree.expression * - Parsetree.value_constraint option * bool) = Obj.magic body in - let rec_flag : (Asttypes.rec_flag) = Obj.magic rec_flag in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in + let x : unit = Obj.magic x in + let opat : (Parsetree.pattern option) = Obj.magic opat in + let octy : (Parsetree.core_type option) = Obj.magic octy 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__1_inlined2_ in - let _v : (Ast_helper.let_bindings) = let _1 = - let attrs2 = - let _1 = _1_inlined2 in - -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 17438 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined2_ in - let attrs1 = - let _1 = _1_inlined1 in + let _endpos = _endpos_x_ in + let _v : ((Longident.t Location.loc * Parsetree.pattern) list * unit option) = let _2 = +# 126 "" + ( Some x ) +# 29863 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let x = + let label = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 17447 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 29873 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let ext = -# 4114 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( None ) -# 17453 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in + let _startpos_label_ = _startpos__1_ in + let _endpos = _endpos_opat_ in + let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let attrs = attrs1 @ attrs2 in - mklbs ext rec_flag (mklb ~loc:_sloc true body attrs) +# 3363 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let constraint_loc, label, pat = + match opat with + | None -> + (* No pattern; this is a pun. Desugar it. + But that the pattern was there and the label reconstructed (which + piece of AST is marked as ghost is important for warning + emission). *) + _sloc, make_ghost label, pat_of_label label + | Some pat -> + (_startpos_octy_, _endpos), label, pat + in + label, mkpat_opt_constraint ~loc:constraint_loc pat octy ) -# 17464 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 29895 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2772 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 17470 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1302 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [x], None ) +# 29901 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17479,103 +29910,87 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = body; - MenhirLib.EngineTypes.startp = _startpos_body_; - MenhirLib.EngineTypes.endp = _endpos_body_; + MenhirLib.EngineTypes.semv = y; + MenhirLib.EngineTypes.startp = _startpos_y_; + MenhirLib.EngineTypes.endp = _endpos_y_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = rec_flag; - MenhirLib.EngineTypes.startp = _startpos_rec_flag_; - MenhirLib.EngineTypes.endp = _endpos_rec_flag_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = opat; + MenhirLib.EngineTypes.startp = _startpos_opat_; + MenhirLib.EngineTypes.endp = _endpos_opat_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = octy; + MenhirLib.EngineTypes.startp = _startpos_octy_; + MenhirLib.EngineTypes.endp = _endpos_octy_; 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 _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let body : (Parsetree.pattern * Parsetree.expression * - Parsetree.value_constraint option * bool) = Obj.magic body in - let rec_flag : (Asttypes.rec_flag) = Obj.magic rec_flag in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _2 : (string Location.loc) = Obj.magic _2 in - let _1_inlined1 : unit = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in + let _4 : (unit option) = Obj.magic _4 in + let y : unit = Obj.magic y in + let _2 : unit = Obj.magic _2 in + let opat : (Parsetree.pattern option) = Obj.magic opat in + let octy : (Parsetree.core_type option) = Obj.magic octy 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__1_inlined3_ in - let _v : (Ast_helper.let_bindings) = let _1 = - let attrs2 = - let _1 = _1_inlined3 in - -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 17541 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let attrs1 = - let _1 = _1_inlined2 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 17550 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let ext = - let (_startpos__1_, _1) = (_startpos__1_inlined1_, _1_inlined1) in - let _endpos = _endpos__2_ in - let _startpos = _startpos__1_ in - let _loc = (_startpos, _endpos) in + let _endpos = _endpos__4_ in + let _v : ((Longident.t Location.loc * Parsetree.pattern) list * unit option) = let x = + let label = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 4116 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( not_expecting _loc "extension"; None ) -# 17561 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 29966 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in + let _startpos_label_ = _startpos__1_ in + let _endpos = _endpos_opat_ in + let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let attrs = attrs1 @ attrs2 in - mklbs ext rec_flag (mklb ~loc:_sloc true body attrs) +# 3363 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let constraint_loc, label, pat = + match opat with + | None -> + (* No pattern; this is a pun. Desugar it. + But that the pattern was there and the label reconstructed (which + piece of AST is marked as ghost is important for warning + emission). *) + _sloc, make_ghost label, pat_of_label label + | Some pat -> + (_startpos_octy_, _endpos), label, pat + in + label, mkpat_opt_constraint ~loc:constraint_loc pat octy ) -# 17573 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 29988 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2772 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 17579 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1304 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [x], Some y ) +# 29994 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17588,51 +30003,81 @@ module Tables = struct 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.semv = tail; + MenhirLib.EngineTypes.startp = _startpos_tail_; + MenhirLib.EngineTypes.endp = _endpos_tail_; 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 = _; + MenhirLib.EngineTypes.semv = opat; + MenhirLib.EngineTypes.startp = _startpos_opat_; + MenhirLib.EngineTypes.endp = _endpos_opat_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = octy; + MenhirLib.EngineTypes.startp = _startpos_octy_; + MenhirLib.EngineTypes.endp = _endpos_octy_; + 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 : (Ast_helper.let_binding) = Obj.magic _2 in - let _1 : (Ast_helper.let_bindings) = 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 : (Ast_helper.let_bindings) = -# 2773 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( addlb _1 _2 ) -# 17611 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.pattern) = Obj.magic _1 in + let tail : ((Longident.t Location.loc * Parsetree.pattern) list * unit option) = Obj.magic tail in + let _2 : unit = Obj.magic _2 in + let opat : (Parsetree.pattern option) = Obj.magic opat in + let octy : (Parsetree.core_type option) = Obj.magic octy 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__1_ in - let _v : (Parsetree.pattern) = -# 2398 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 17636 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos_tail_ in + let _v : ((Longident.t Location.loc * Parsetree.pattern) list * unit option) = let x = + let label = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 30052 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _startpos_label_ = _startpos__1_ in + let _endpos = _endpos_opat_ in + let _symbolstartpos = _startpos_label_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3363 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let constraint_loc, label, pat = + match opat with + | None -> + (* No pattern; this is a pun. Desugar it. + But that the pattern was there and the label reconstructed (which + piece of AST is marked as ghost is important for warning + emission). *) + _sloc, make_ghost label, pat_of_label label + | Some pat -> + (_startpos_octy_, _endpos), label, pat + in + label, mkpat_opt_constraint ~loc:constraint_loc pat octy + ) +# 30074 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1308 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let xs, y = tail in + x :: xs, y ) +# 30081 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17662,102 +30107,16 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : (Parsetree.core_type) = Obj.magic _3 in + let _3 : (Parsetree.expression) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : (Parsetree.pattern) = 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 = -# 2400 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ppat_constraint(_1, _3) ) -# 17676 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkpat ~loc:_sloc _1 ) -# 17685 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 2401 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 17691 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = exp; - MenhirLib.EngineTypes.startp = _startpos_exp_; - MenhirLib.EngineTypes.endp = _endpos_exp_; - 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 exp : (Parsetree.expression) = Obj.magic exp in - let _1 : (string) = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos_exp_ in - let _v : (Parsetree.pattern * Parsetree.expression) = let pat = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2726 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkpatvar ~loc:_sloc _1 ) -# 17727 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 2799 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (pat, exp) ) -# 17733 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (string) = 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.pattern * Parsetree.expression) = let _endpos = _endpos__1_ in - let _startpos = _startpos__1_ in - let _loc = (_startpos, _endpos) in - -# 2802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (mkpatvar ~loc:_loc _1, mkexpvar ~loc:_loc _1) ) -# 17761 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.case) = +# 2953 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Exp.case _1 (merloc _endpos__2_ _3) ) +# 30120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17770,9 +30129,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = exp; - MenhirLib.EngineTypes.startp = _startpos_exp_; - MenhirLib.EngineTypes.endp = _endpos_exp_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _4; @@ -17780,9 +30139,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = typ; - MenhirLib.EngineTypes.startp = _startpos_typ_; - MenhirLib.EngineTypes.endp = _endpos_typ_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -17790,28 +30149,27 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = pat; - MenhirLib.EngineTypes.startp = _startpos_pat_; - MenhirLib.EngineTypes.endp = _endpos_pat_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; } = _menhir_stack in - let exp : (Parsetree.expression) = Obj.magic exp in + let _5 : (Parsetree.expression) = Obj.magic _5 in let _4 : unit = Obj.magic _4 in - let typ : (Parsetree.core_type) = Obj.magic typ in + let _3 : (Parsetree.expression) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let pat : (Parsetree.pattern) = Obj.magic pat in + let _1 : (Parsetree.pattern) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_pat_ in - let _endpos = _endpos_exp_ in - let _v : (Parsetree.pattern * Parsetree.expression) = -# 2804 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let loc = (_startpos_pat_, _endpos_typ_) in - (ghpat ~loc (Ppat_constraint(pat, typ)), exp) ) -# 17815 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : (Parsetree.case) = +# 2955 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Exp.case _1 ~guard:(merloc _endpos__2_ _3) (merloc _endpos__4_ _5) ) +# 30173 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17824,9 +30182,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = exp; - MenhirLib.EngineTypes.startp = _startpos_exp_; - MenhirLib.EngineTypes.endp = _endpos_exp_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -17834,127 +30192,25 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = pat; - MenhirLib.EngineTypes.startp = _startpos_pat_; - MenhirLib.EngineTypes.endp = _endpos_pat_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let exp : (Parsetree.expression) = Obj.magic exp in + let _3 : unit = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let pat : (Parsetree.pattern) = Obj.magic pat in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_pat_ in - let _endpos = _endpos_exp_ in - let _v : (Parsetree.pattern * Parsetree.expression) = -# 2807 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (pat, exp) ) -# 17854 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = body; - MenhirLib.EngineTypes.startp = _startpos_body_; - MenhirLib.EngineTypes.endp = _endpos_body_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let body : (Parsetree.pattern * Parsetree.expression) = Obj.magic body in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_body_ in - let _endpos = _endpos_body_ in - let _v : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = -# 2811 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let let_pat, let_exp = body in - let_pat, let_exp, [] ) -# 17880 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = body; - MenhirLib.EngineTypes.startp = _startpos_body_; - MenhirLib.EngineTypes.endp = _endpos_body_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = bindings; - MenhirLib.EngineTypes.startp = _startpos_bindings_; - MenhirLib.EngineTypes.endp = _endpos_bindings_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let body : (Parsetree.pattern * Parsetree.expression) = Obj.magic body in - let _1 : ( -# 784 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 17914 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 in - let bindings : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = Obj.magic bindings in + let _1 : (Parsetree.pattern) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_bindings_ in - let _endpos = _endpos_body_ in - let _v : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = let pbop_op = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 17927 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos = _endpos_body_ in - let _symbolstartpos = _startpos_bindings_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.case) = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2814 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 ) -# 17940 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.class_expr Parsetree.class_infos list) = -# 211 "" - ( [] ) -# 17958 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2957 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Exp.case _1 (merloc _endpos__2_ + (Exp.unreachable ~loc:(make_loc _loc__3_) ())) ) +# 30214 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17967,9 +30223,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = tail; + MenhirLib.EngineTypes.startp = _startpos_tail_; + MenhirLib.EngineTypes.endp = _endpos_tail_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined3; @@ -17977,9 +30233,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = body; - MenhirLib.EngineTypes.startp = _startpos_body_; - MenhirLib.EngineTypes.endp = _endpos_body_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined2; @@ -17987,26 +30243,20 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = params; - MenhirLib.EngineTypes.startp = _startpos_params_; - MenhirLib.EngineTypes.endp = _endpos_params_; + 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 = virt; - MenhirLib.EngineTypes.startp = _startpos_virt_; - MenhirLib.EngineTypes.endp = _endpos_virt_; + 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; }; }; }; @@ -18014,69 +30264,81 @@ module Tables = struct }; }; } = _menhir_stack in - let xs : (Parsetree.class_expr Parsetree.class_infos list) = Obj.magic xs in + let tail : (Parsetree.object_field list * Asttypes.closed_flag) = Obj.magic tail in let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let body : (Parsetree.class_expr) = Obj.magic body in - let _1_inlined2 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _5 : unit = Obj.magic _5 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 18024 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in +# 30277 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = 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 : (Parsetree.class_expr Parsetree.class_infos list) = let x = - let attrs2 = + let _endpos = _endpos_tail_ in + let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = + let _6 = let _1 = _1_inlined3 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 18039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 30288 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos__6_ = _endpos__1_inlined3_ in + let _4 = + let _1 = _1_inlined2 in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 18051 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 30297 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let attrs1 = + let _endpos__4_ = _endpos__1_inlined2_ in + let _3 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 18059 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 30306 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos_attrs2_ in + let _1 = + let _1 = +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 30313 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 30321 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1994 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let attrs = attrs1 @ attrs2 in - let loc = make_loc _sloc in - let docs = symbol_docs _sloc in - let text = symbol_text _symbolstartpos in - Ci.mk id body ~virt ~params ~attrs ~loc ~text ~docs - ) -# 18074 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4115 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let info = + match rhs_info _endpos__4_ with + | Some _ as info_before_semi -> info_before_semi + | None -> symbol_info _endpos + in + let attrs = add_info_attrs info (_4 @ _6) in + Of.tag ~loc:(make_loc _sloc) ~attrs _1 _3 ) +# 30336 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 213 "" - ( x :: xs ) -# 18080 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4096 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let (f, c) = tail in (head :: f, c) ) +# 30342 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18087,14 +30349,45 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = tail; + MenhirLib.EngineTypes.startp = _startpos_tail_; + MenhirLib.EngineTypes.endp = _endpos_tail_; + 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 = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let tail : (Parsetree.object_field list * Asttypes.closed_flag) = Obj.magic tail in + let _2 : unit = Obj.magic _2 in + let ty : (Parsetree.core_type) = Obj.magic ty in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.class_type Parsetree.class_infos list) = -# 211 "" - ( [] ) -# 18098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_ty_ in + let _endpos = _endpos_tail_ in + let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = + let _endpos = _endpos_ty_ in + let _symbolstartpos = _startpos_ty_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Of.inherit_ ~loc:(make_loc _sloc) ty ) +# 30385 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4096 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let (f, c) = tail in (head :: f, c) ) +# 30391 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18107,123 +30400,115 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = cty; - MenhirLib.EngineTypes.startp = _startpos_cty_; - MenhirLib.EngineTypes.endp = _endpos_cty_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = params; - MenhirLib.EngineTypes.startp = _startpos_params_; - MenhirLib.EngineTypes.endp = _endpos_params_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = virt; - MenhirLib.EngineTypes.startp = _startpos_virt_; - MenhirLib.EngineTypes.endp = _endpos_virt_; - 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 xs : (Parsetree.class_type Parsetree.class_infos list) = Obj.magic xs in let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let cty : (Parsetree.class_type) = Obj.magic cty in - let _6 : unit = Obj.magic _6 in - let _1_inlined2 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _5 : unit = Obj.magic _5 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 18171 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in +# 30447 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = 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 : (Parsetree.class_type Parsetree.class_infos list) = let x = - let attrs2 = + let _endpos = _endpos__1_inlined3_ in + let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = + let _6 = let _1 = _1_inlined3 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 18186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 30458 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos__6_ = _endpos__1_inlined3_ in + let _4 = + let _1 = _1_inlined2 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 30467 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__4_ = _endpos__1_inlined2_ in + let _3 = + let _1 = _1_inlined1 in + +# 3802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 30476 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let _1 = +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 30483 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 18198 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 18206 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 30491 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos_attrs2_ in + let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2293 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let attrs = attrs1 @ attrs2 in - let loc = make_loc _sloc in - let docs = symbol_docs _sloc in - let text = symbol_text _symbolstartpos in - Ci.mk id cty ~virt ~params ~attrs ~loc ~text ~docs - ) -# 18221 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4115 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let info = + match rhs_info _endpos__4_ with + | Some _ as info_before_semi -> info_before_semi + | None -> symbol_info _endpos + in + let attrs = add_info_attrs info (_4 @ _6) in + Of.tag ~loc:(make_loc _sloc) ~attrs _1 _3 ) +# 30506 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 213 "" - ( x :: xs ) -# 18227 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4099 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [head], Closed ) +# 30512 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18234,14 +30519,38 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + } = _menhir_stack in + let _2 : unit = Obj.magic _2 in + let ty : (Parsetree.core_type) = Obj.magic ty in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.class_type Parsetree.class_infos list) = -# 211 "" - ( [] ) -# 18245 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_ty_ in + let _endpos = _endpos__2_ in + let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = + let _endpos = _endpos_ty_ in + let _symbolstartpos = _startpos_ty_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Of.inherit_ ~loc:(make_loc _sloc) ty ) +# 30548 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4099 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [head], Closed ) +# 30554 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18254,123 +30563,88 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = csig; - MenhirLib.EngineTypes.startp = _startpos_csig_; - MenhirLib.EngineTypes.endp = _endpos_csig_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = params; - MenhirLib.EngineTypes.startp = _startpos_params_; - MenhirLib.EngineTypes.endp = _endpos_params_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = virt; - MenhirLib.EngineTypes.startp = _startpos_virt_; - MenhirLib.EngineTypes.endp = _endpos_virt_; - 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 xs : (Parsetree.class_type Parsetree.class_infos list) = Obj.magic xs in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let csig : (Parsetree.class_type) = Obj.magic csig in - let _6 : unit = Obj.magic _6 in - let _1_inlined2 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 18318 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in +# 30596 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = 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 : (Parsetree.class_type Parsetree.class_infos list) = let x = - let attrs2 = - let _1 = _1_inlined3 in + let _endpos = _endpos__1_inlined2_ in + let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = + let _4 = + let _1 = _1_inlined2 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 18333 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 30607 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos__4_ = _endpos__1_inlined2_ in + let _3 = + let _1 = _1_inlined1 in + +# 3802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 30616 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = + let _1 = +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 30623 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 18345 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 18353 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 30631 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos_attrs2_ in + let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2332 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let attrs = attrs1 @ attrs2 in - let loc = make_loc _sloc in - let docs = symbol_docs _sloc in - let text = symbol_text _symbolstartpos in - Ci.mk id csig ~virt ~params ~attrs ~loc ~text ~docs - ) -# 18368 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4108 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let info = symbol_info _endpos in + let attrs = add_info_attrs info _4 in + Of.tag ~loc:(make_loc _sloc) ~attrs _1 _3 ) +# 30642 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 213 "" - ( x :: xs ) -# 18374 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4102 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [head], Closed ) +# 30648 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18381,14 +30655,56 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let ty : (Parsetree.core_type) = Obj.magic ty in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.module_binding list) = -# 211 "" - ( [] ) -# 18392 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_ty_ in + let _endpos = _endpos_ty_ in + let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = + let _endpos = _endpos_ty_ in + let _symbolstartpos = _startpos_ty_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Of.inherit_ ~loc:(make_loc _sloc) ty ) +# 30677 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4102 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [head], Closed ) +# 30683 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : unit = 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.object_field list * Asttypes.closed_flag) = +# 4104 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [], Open ) +# 30708 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18401,98 +30717,86 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = body; - MenhirLib.EngineTypes.startp = _startpos_body_; - MenhirLib.EngineTypes.endp = _endpos_body_; + 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = private_; + MenhirLib.EngineTypes.startp = _startpos_private__; + MenhirLib.EngineTypes.endp = _endpos_private__; 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 xs : (Parsetree.module_binding list) = Obj.magic xs in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let body : (Parsetree.module_expr) = Obj.magic body in - let _1_inlined2 : (string option) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in + let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in + let _5 : unit = Obj.magic _5 in + let _1_inlined1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 30755 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1_inlined1 in + let private_ : (Asttypes.private_flag) = Obj.magic private_ 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_xs_ in - let _v : (Parsetree.module_binding list) = let x = - let attrs2 = - let _1 = _1_inlined3 in - -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 18455 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let name = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 18467 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _endpos = _endpos__1_inlined2_ in + let _v : ((string Location.loc * Asttypes.private_flag * Parsetree.class_field_kind) * + Parsetree.attributes) = let ty = + let _1 = _1_inlined2 in + +# 3798 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 18475 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos = _endpos_attrs2_ in +# 30768 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let label = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _1 = +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 30776 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1640 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let loc = make_loc _sloc in - let attrs = attrs1 @ attrs2 in - let docs = symbol_docs _sloc in - let text = symbol_text _symbolstartpos in - Mb.mk name body ~attrs ~loc ~text ~docs - ) -# 18490 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 30784 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let attrs = +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 30790 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _1 = +# 4402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Fresh ) +# 30795 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 213 "" - ( x :: xs ) -# 18496 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2195 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (label, private_, Cfk_virtual ty), attrs ) +# 30800 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18503,14 +30807,76 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + 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 = _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 : (Parsetree.expression) = Obj.magic _5 in + let _1_inlined1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 30840 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1_inlined1 in + let _3 : (Asttypes.private_flag) = Obj.magic _3 in + let _1 : (Parsetree.attributes) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.module_declaration list) = -# 211 "" - ( [] ) -# 18514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : ((string Location.loc * Asttypes.private_flag * Parsetree.class_field_kind) * + Parsetree.attributes) = let _4 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _1 = +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 30853 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 30861 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _2 = +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 30867 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _1 = +# 4405 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Fresh ) +# 30872 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 ) +# 30880 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18523,123 +30889,84 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = mty; - MenhirLib.EngineTypes.startp = _startpos_mty_; - MenhirLib.EngineTypes.endp = _endpos_mty_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 xs : (Parsetree.module_declaration list) = Obj.magic xs in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let mty : (Parsetree.module_type) = Obj.magic mty in - let _4 : unit = Obj.magic _4 in - let _1_inlined2 : (string option) = Obj.magic _1_inlined2 in + let _5 : (Parsetree.expression) = Obj.magic _5 in + let _1_inlined2 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 30926 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 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 : (Parsetree.module_declaration list) = let x = - let attrs2 = - let _1 = _1_inlined3 in - -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 18584 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let name = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 18596 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 18604 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos = _endpos_attrs2_ in + let _endpos = _endpos__5_ in + let _v : ((string Location.loc * Asttypes.private_flag * Parsetree.class_field_kind) * + Parsetree.attributes) = let _4 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _1 = +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 30940 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1935 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let attrs = attrs1 @ attrs2 in - let docs = symbol_docs _sloc in - let loc = make_loc _sloc in - let text = symbol_text _symbolstartpos in - Md.mk name mty ~attrs ~loc ~text ~docs - ) -# 18619 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 30948 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 30956 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - -# 213 "" - ( x :: xs ) -# 18625 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _1 = +# 4406 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Override ) +# 30962 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.attributes) = -# 211 "" - ( [] ) -# 18643 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + +# 2197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 ) +# 30970 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18652,44 +30979,104 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _8; + MenhirLib.EngineTypes.startp = _startpos__8_; + MenhirLib.EngineTypes.endp = _endpos__8_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + 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 = _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 : (Parsetree.attributes) = Obj.magic xs in - let x : (Parsetree.attribute) = Obj.magic x in + let _8 : (Parsetree.expression) = Obj.magic _8 in + let _7 : unit = Obj.magic _7 in + let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in + let _5 : unit = Obj.magic _5 in + let _1_inlined1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 31031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1_inlined1 in + let _3 : (Asttypes.private_flag) = Obj.magic _3 in + let _1 : (Parsetree.attributes) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : (Parsetree.attributes) = -# 213 "" - ( x :: xs ) -# 18675 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__8_ in + let _v : ((string Location.loc * Asttypes.private_flag * Parsetree.class_field_kind) * + Parsetree.attributes) = let _6 = + let _1 = _1_inlined2 in + +# 3798 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 31044 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 31053 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 31061 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _2 = +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 31067 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.type_declaration list) = -# 211 "" - ( [] ) -# 18693 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _1 = +# 4405 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Fresh ) +# 31072 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2203 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 ) +# 31080 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18702,24 +31089,24 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _8; + MenhirLib.EngineTypes.startp = _startpos__8_; + MenhirLib.EngineTypes.endp = _endpos__8_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs_inlined1; - MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; - MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = kind_priv_manifest; - MenhirLib.EngineTypes.startp = _startpos_kind_priv_manifest_; - MenhirLib.EngineTypes.endp = _endpos_kind_priv_manifest_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined2; @@ -18727,9 +31114,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = params; - MenhirLib.EngineTypes.startp = _startpos_params_; - MenhirLib.EngineTypes.endp = _endpos_params_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined1; @@ -18749,108 +31136,67 @@ module Tables = struct }; }; } = _menhir_stack in - let xs : (Parsetree.type_declaration list) = Obj.magic xs in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let xs_inlined1 : ((Parsetree.core_type * Parsetree.core_type * Warnings.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 _8 : (Parsetree.expression) = Obj.magic _8 in + let _7 : unit = Obj.magic _7 in + let _1_inlined3 : (Parsetree.core_type) = Obj.magic _1_inlined3 in + let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 18760 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 31147 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) = Obj.magic _1_inlined2 in - let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in + let _3 : (Asttypes.private_flag) = Obj.magic _3 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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 : (Parsetree.type_declaration list) = let x = - let xs = xs_inlined1 in - let attrs2 = - let _1 = _1_inlined3 in - -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 18775 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let cstrs = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 18784 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1088 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 18789 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3215 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 18795 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 18806 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _endpos = _endpos__8_ in + let _v : ((string Location.loc * Asttypes.private_flag * Parsetree.class_field_kind) * + Parsetree.attributes) = let _6 = + let _1 = _1_inlined3 in + +# 3798 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 18814 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos = _endpos_attrs2_ in +# 31161 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 31170 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3204 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let (kind, priv, manifest) = kind_priv_manifest in - let docs = symbol_docs _sloc in - let attrs = attrs1 @ attrs2 in - let loc = make_loc _sloc in - let text = symbol_text _symbolstartpos in - Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ~text - ) -# 18830 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 31178 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - -# 213 "" - ( x :: xs ) -# 18836 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 31186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _1 = +# 4406 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Override ) +# 31192 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.type_declaration list) = -# 211 "" - ( [] ) -# 18854 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + +# 2203 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 ) +# 31200 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18863,50 +31209,56 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _11; + MenhirLib.EngineTypes.startp = _startpos__11_; + MenhirLib.EngineTypes.endp = _endpos__11_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined4; - MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.semv = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs_inlined1; - MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; - MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; + MenhirLib.EngineTypes.semv = _9; + MenhirLib.EngineTypes.startp = _startpos__9_; + MenhirLib.EngineTypes.endp = _endpos__9_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _8; + MenhirLib.EngineTypes.startp = _startpos__8_; + MenhirLib.EngineTypes.endp = _endpos__8_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = params; - MenhirLib.EngineTypes.startp = _startpos_params_; - MenhirLib.EngineTypes.endp = _endpos_params_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; 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 = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + 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; + }; }; }; }; @@ -18916,214 +31268,84 @@ module Tables = struct }; }; } = _menhir_stack in - let xs : (Parsetree.type_declaration list) = Obj.magic xs in - let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in - let xs_inlined1 : ((Parsetree.core_type * Parsetree.core_type * Warnings.loc) list) = Obj.magic xs_inlined1 in - 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 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 18928 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 - 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 : (Parsetree.type_declaration list) = let x = - let xs = xs_inlined1 in - let attrs2 = - let _1 = _1_inlined4 in - -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 18943 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined4_ in - let cstrs = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 18952 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1088 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 18957 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3215 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 18963 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let kind_priv_manifest = - let _1 = _1_inlined3 in - -# 3250 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _2 ) -# 18971 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 18982 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 18990 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3204 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let (kind, priv, manifest) = kind_priv_manifest in - let docs = symbol_docs _sloc in - let attrs = attrs1 @ attrs2 in - let loc = make_loc _sloc in - let text = symbol_text _symbolstartpos in - Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ~text - ) -# 19006 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 213 "" - ( x :: xs ) -# 19012 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.attributes) = -# 211 "" - ( [] ) -# 19030 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - MenhirLib.EngineTypes.next = { - 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 xs : (Parsetree.attributes) = Obj.magic xs in - let x : (Parsetree.attribute) = Obj.magic x in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_xs_ in - let _v : (Parsetree.attributes) = -# 213 "" - ( x :: xs ) -# 19062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.signature_item list list) = -# 211 "" - ( [] ) -# 19080 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = 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 : (Parsetree.signature_item list list) = Obj.magic xs in - let _1 : unit = Obj.magic _1 in + let _11 : (Parsetree.expression) = Obj.magic _11 in + let _10 : unit = Obj.magic _10 in + let _9 : (Parsetree.core_type) = Obj.magic _9 in + let _8 : unit = Obj.magic _8 in + let xs : (string Location.loc list) = Obj.magic xs in + let _6 : unit = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let _1_inlined1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 31282 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1_inlined1 in + let _3 : (Asttypes.private_flag) = Obj.magic _3 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_xs_ in - let _v : (Parsetree.signature_item list list) = let x = - let _1 = - let _startpos = _startpos__1_ in - -# 1014 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( text_sig _startpos ) -# 19115 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _endpos = _endpos__11_ in + let _v : ((string Location.loc * Asttypes.private_flag * Parsetree.class_field_kind) * + Parsetree.attributes) = let _7 = +# 2830 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 31293 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 31301 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 1788 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 19121 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 31309 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _startpos__4_ = _startpos__1_inlined1_ in + let _2 = +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 31316 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let (_endpos__2_, _startpos__2_) = (_endpos__1_, _startpos__1_) in + let _1 = +# 4405 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Fresh ) +# 31322 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let (_endpos__1_, _startpos__1_) = (_endpos__0_, _endpos__0_) in + let _endpos = _endpos__11_ in + let _symbolstartpos = if _startpos__1_ != _endpos__1_ then + _startpos__1_ + else + if _startpos__2_ != _endpos__2_ then + _startpos__2_ + else + if _startpos__3_ != _endpos__3_ then + _startpos__3_ + else + _startpos__4_ in + let _sloc = (_symbolstartpos, _endpos) in -# 213 "" - ( x :: xs ) -# 19127 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2209 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let poly_exp_loc = (_startpos__7_, _endpos__11_) in + let poly_exp = + let exp, poly = + (* it seems odd to use the global ~loc here while poly_exp_loc + is tighter, but this is what ocamlyacc does; + TODO improve parser.mly *) + wrap_type_annotation ~loc:_sloc _7 _9 _11 in + ghexp ~loc:poly_exp_loc (Pexp_poly(exp, Some poly)) in + (_4, _3, + Cfk_concrete (_1, poly_exp)), _2 ) +# 31349 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19136,41 +31358,152 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _11; + MenhirLib.EngineTypes.startp = _startpos__11_; + MenhirLib.EngineTypes.endp = _endpos__11_; 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 = _10; + MenhirLib.EngineTypes.startp = _startpos__10_; + MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _9; + MenhirLib.EngineTypes.startp = _startpos__9_; + MenhirLib.EngineTypes.endp = _endpos__9_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _8; + MenhirLib.EngineTypes.startp = _startpos__8_; + MenhirLib.EngineTypes.endp = _endpos__8_; + 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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _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 xs : (Parsetree.signature_item list list) = Obj.magic xs in - let _1 : (Parsetree.signature_item) = Obj.magic _1 in + let _11 : (Parsetree.expression) = Obj.magic _11 in + let _10 : unit = Obj.magic _10 in + let _9 : (Parsetree.core_type) = Obj.magic _9 in + let _8 : unit = Obj.magic _8 in + let xs : (string Location.loc list) = Obj.magic xs in + let _6 : unit = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let _1_inlined2 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 31437 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + 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 : (Parsetree.signature_item list list) = let x = - let _1 = - let _startpos = _startpos__1_ in - -# 1012 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( text_sig _startpos @ [_1] ) -# 19162 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _endpos = _endpos__11_ in + let _v : ((string Location.loc * Asttypes.private_flag * Parsetree.class_field_kind) * + Parsetree.attributes) = let _7 = +# 2830 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 31449 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 31457 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 1788 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 19168 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 31465 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _startpos__4_ = _startpos__1_inlined2_ in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 31474 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let (_endpos__2_, _startpos__2_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in + let _1 = +# 4406 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Override ) +# 31481 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__11_ in + let _symbolstartpos = if _startpos__1_ != _endpos__1_ then + _startpos__1_ + else + if _startpos__2_ != _endpos__2_ then + _startpos__2_ + else + if _startpos__3_ != _endpos__3_ then + _startpos__3_ + else + _startpos__4_ in + let _sloc = (_symbolstartpos, _endpos) in -# 213 "" - ( x :: xs ) -# 19174 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2209 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let poly_exp_loc = (_startpos__7_, _endpos__11_) in + let poly_exp = + let exp, poly = + (* it seems odd to use the global ~loc here while poly_exp_loc + is tighter, but this is what ocamlyacc does; + TODO improve parser.mly *) + wrap_type_annotation ~loc:_sloc _7 _9 _11 in + ghexp ~loc:poly_exp_loc (Pexp_poly(exp, Some poly)) in + (_4, _3, + Cfk_concrete (_1, poly_exp)), _2 ) +# 31507 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19181,14 +31514,25 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 31528 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.structure_item list list) = -# 211 "" - ( [] ) -# 19192 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Longident.t) = +# 4236 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Lident _1 ) +# 31536 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19201,60 +31545,39 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 xs : (Parsetree.structure_item list list) = Obj.magic xs in - let _1 : unit = Obj.magic _1 in + let _3 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 31569 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = 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_xs_ in - let _v : (Parsetree.structure_item list list) = let x = - let _1 = - let ys = - let items = -# 1074 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [] ) -# 19227 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1519 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( items ) -# 19232 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let xs = - let _startpos = _startpos__1_ in - -# 1010 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( text_str _startpos ) -# 19240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 267 "" - ( xs @ ys ) -# 19246 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 1535 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 19252 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _endpos = _endpos__3_ in + let _v : (Longident.t) = let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 213 "" - ( x :: xs ) -# 19258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ldot _1 _loc__1_ _3 _loc__3_ ) +# 31581 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19266,110 +31589,24 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - 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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; - 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 xs : (Parsetree.structure_item list list) = Obj.magic xs in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let e : (Parsetree.expression) = Obj.magic e in - let _1 : unit = Obj.magic _1 in + let _1 : ( +# 901 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 31602 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = 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 : (Parsetree.structure_item list list) = let x = - let _1 = - let ys = - let (_endpos__1_, _1) = (_endpos__1_inlined1_, _1_inlined1) in - let items = - let x = - let _1 = - let _1 = - let attrs = -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 19312 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1526 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkstrexp e attrs ) -# 19317 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _startpos__1_ = _startpos_e_ in - let _startpos = _startpos__1_ in - -# 1008 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( text_str _startpos @ [_1] ) -# 19325 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _startpos__1_ = _startpos_e_ in - let _endpos = _endpos__1_ in - let _startpos = _startpos__1_ in - -# 1027 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mark_rhs_docs _startpos _endpos; - _1 ) -# 19335 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 1076 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( x ) -# 19341 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 1519 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( items ) -# 19347 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let xs = - let _startpos = _startpos__1_ in - -# 1010 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( text_str _startpos ) -# 19355 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 267 "" - ( xs @ ys ) -# 19361 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 1535 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 19367 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 213 "" - ( x :: xs ) -# 19373 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__1_ in + let _v : (Longident.t) = +# 4236 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Lident _1 ) +# 31610 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19382,41 +31619,39 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 xs : (Parsetree.structure_item list list) = Obj.magic xs in - let _1 : (Parsetree.structure_item) = Obj.magic _1 in + let _3 : ( +# 901 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 31643 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = 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_xs_ in - let _v : (Parsetree.structure_item list list) = let x = - let _1 = - let _startpos = _startpos__1_ in - -# 1008 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( text_str _startpos @ [_1] ) -# 19408 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 1535 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 19414 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _endpos = _endpos__3_ in + let _v : (Longident.t) = let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 213 "" - ( x :: xs ) -# 19420 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ldot _1 _loc__1_ _3 _loc__3_ ) +# 31655 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19427,14 +31662,26 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 : (string) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.class_type_field list list) = -# 211 "" - ( [] ) -# 19438 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Longident.t) = let _1 = +# 4296 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 31680 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 4236 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Lident _1 ) +# 31685 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19447,34 +31694,45 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 xs : (Parsetree.class_type_field list list) = Obj.magic xs in - let _1 : (Parsetree.class_type_field) = Obj.magic _1 in + let _3 : unit = Obj.magic _3 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_xs_ in - let _v : (Parsetree.class_type_field list list) = let x = - let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Longident.t) = let _1 = + let _1 = +# 4216 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( "::" ) +# 31725 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 1022 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( text_csig _startpos @ [_1] ) -# 19472 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4296 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 31730 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 213 "" - ( x :: xs ) -# 19478 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4236 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Lident _1 ) +# 31736 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19485,14 +31743,26 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 : (string) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.class_field list list) = -# 211 "" - ( [] ) -# 19496 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Longident.t) = let _1 = +# 4296 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 31761 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 4236 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Lident _1 ) +# 31766 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19505,34 +31775,44 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + 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 xs : (Parsetree.class_field list list) = Obj.magic xs in - let _1 : (Parsetree.class_field) = Obj.magic _1 in + let _1_inlined1 : (string) = 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_xs_ in - let _v : (Parsetree.class_field list list) = let x = - let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Longident.t) = let _3 = + let _1 = _1_inlined1 in -# 1020 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( text_cstr _startpos @ [_1] ) -# 19530 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4296 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 31807 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let (_endpos__3_, _startpos__3_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in + let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 213 "" - ( x :: xs ) -# 19536 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ldot _1 _loc__1_ _3 _loc__3_ ) +# 31816 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19543,14 +31823,65 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 = _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 _3 : unit = Obj.magic _3 in + let _2_inlined1 : unit = 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 = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.structure_item list list) = -# 211 "" - ( [] ) -# 19554 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Longident.t) = let _3 = + let (_2, _1) = (_2_inlined1, _1_inlined1) in + let _1 = +# 4216 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( "::" ) +# 31871 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 4296 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 31876 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _startpos__3_ = _startpos__1_inlined1_ in + let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + +# 4237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ldot _1 _loc__1_ _3 _loc__3_ ) +# 31885 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19563,34 +31894,44 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + 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 xs : (Parsetree.structure_item list list) = Obj.magic xs in - let _1 : (Parsetree.structure_item) = Obj.magic _1 in + let _1_inlined1 : (string) = 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_xs_ in - let _v : (Parsetree.structure_item list list) = let x = - let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined1_ in + let _v : (Longident.t) = let _3 = + let _1 = _1_inlined1 in -# 1008 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( text_str _startpos @ [_1] ) -# 19588 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4296 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 31926 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let (_endpos__3_, _startpos__3_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in + let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 213 "" - ( x :: xs ) -# 19594 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ldot _1 _loc__1_ _3 _loc__3_ ) +# 31935 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19601,14 +31942,21 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 : (string) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.toplevel_phrase list list) = -# 211 "" - ( [] ) -# 19612 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Longident.t) = +# 4236 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Lident _1 ) +# 31960 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19621,52 +31969,35 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 xs : (Parsetree.toplevel_phrase list list) = Obj.magic xs in - let _1 : unit = Obj.magic _1 in + let _3 : (string) = 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_xs_ in - let _v : (Parsetree.toplevel_phrase list list) = let x = - let _1 = - let x = - let _1 = -# 1074 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [] ) -# 19647 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1306 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 19652 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 183 "" - ( x ) -# 19658 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 1318 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 19664 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _endpos = _endpos__3_ in + let _v : (Longident.t) = let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 213 "" - ( x :: xs ) -# 19670 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ldot _1 _loc__1_ _3 _loc__3_ ) +# 32001 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19678,98 +32009,24 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - 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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; - 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 xs : (Parsetree.toplevel_phrase list list) = Obj.magic xs in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let e : (Parsetree.expression) = Obj.magic e in - let _1 : unit = Obj.magic _1 in + let _1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 32022 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = 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 : (Parsetree.toplevel_phrase list list) = let x = - let _1 = - let x = - let _1 = _1_inlined1 in - let _1 = - let x = - let _1 = - let _1 = - let attrs = -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 19724 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1526 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkstrexp e attrs ) -# 19729 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 1018 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptop_def [_1] ) -# 19735 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _startpos__1_ = _startpos_e_ in - let _startpos = _startpos__1_ in - -# 1016 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( text_def _startpos @ [_1] ) -# 19743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 1076 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( x ) -# 19749 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 1306 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 19755 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 183 "" - ( x ) -# 19761 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 1318 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 19767 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 213 "" - ( x :: xs ) -# 19773 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__1_ in + let _v : (Longident.t) = +# 4236 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Lident _1 ) +# 32030 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19782,46 +32039,39 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 xs : (Parsetree.toplevel_phrase list list) = Obj.magic xs in - let _1 : (Parsetree.structure_item) = Obj.magic _1 in + let _3 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 32063 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = 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_xs_ in - let _v : (Parsetree.toplevel_phrase list list) = let x = - let _1 = - let _1 = -# 1018 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptop_def [_1] ) -# 19807 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _startpos = _startpos__1_ in - -# 1016 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( text_def _startpos @ [_1] ) -# 19813 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 1318 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 19819 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _endpos = _endpos__3_ in + let _v : (Longident.t) = let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 213 "" - ( x :: xs ) -# 19825 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ldot _1 _loc__1_ _3 _loc__3_ ) +# 32075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19833,52 +32083,24 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - 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 xs : (Parsetree.toplevel_phrase list list) = Obj.magic xs in - let _1 : (Parsetree.toplevel_phrase) = Obj.magic _1 in + let _1 : ( +# 901 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 32096 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = 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 : (Parsetree.toplevel_phrase list list) = let x = - let _1 = - let _1 = - let _endpos = _endpos__1_ in - let _startpos = _startpos__1_ in - -# 1027 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mark_rhs_docs _startpos _endpos; - _1 ) -# 19863 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _startpos = _startpos__1_ in - -# 1016 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( text_def _startpos @ [_1] ) -# 19870 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 1318 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 19876 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 213 "" - ( x :: xs ) -# 19882 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__1_ in + let _v : (Longident.t) = +# 4236 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Lident _1 ) +# 32104 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19891,14 +32113,14 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = opat; - MenhirLib.EngineTypes.startp = _startpos_opat_; - MenhirLib.EngineTypes.endp = _endpos_opat_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = octy; - MenhirLib.EngineTypes.startp = _startpos_octy_; - MenhirLib.EngineTypes.endp = _endpos_octy_; + 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; @@ -19908,54 +32130,22 @@ module Tables = struct }; }; } = _menhir_stack in - let opat : (Parsetree.pattern option) = Obj.magic opat in - let octy : (Parsetree.core_type option) = Obj.magic octy in + let _3 : ( +# 901 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 32137 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = 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_opat_ in - let _v : ((Longident.t Location.loc * Parsetree.pattern) list * unit option) = let _2 = -# 124 "" - ( None ) -# 19921 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let x = - let label = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 19931 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _startpos_label_ = _startpos__1_ in - let _endpos = _endpos_opat_ in - let _symbolstartpos = _startpos_label_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3090 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let constraint_loc, label, pat = - match opat with - | None -> - (* No pattern; this is a pun. Desugar it. - But that the pattern was there and the label reconstructed (which - piece of AST is marked as ghost is important for warning - emission). *) - _sloc, make_ghost label, pat_of_label label - | Some pat -> - (_startpos_octy_, _endpos), label, pat - in - label, mkpat_opt_constraint ~loc:constraint_loc pat octy - ) -# 19953 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _endpos = _endpos__3_ in + let _v : (Longident.t) = let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1243 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [x], None ) -# 19959 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ldot _1 _loc__1_ _3 _loc__3_ ) +# 32149 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19967,79 +32157,20 @@ module Tables = struct (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 = _; - MenhirLib.EngineTypes.semv = opat; - MenhirLib.EngineTypes.startp = _startpos_opat_; - MenhirLib.EngineTypes.endp = _endpos_opat_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = octy; - MenhirLib.EngineTypes.startp = _startpos_octy_; - MenhirLib.EngineTypes.endp = _endpos_octy_; - 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 x : unit = Obj.magic x in - let opat : (Parsetree.pattern option) = Obj.magic opat in - let octy : (Parsetree.core_type option) = Obj.magic octy in - let _1 : (Longident.t) = Obj.magic _1 in + let _1 : (string) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_x_ in - let _v : ((Longident.t Location.loc * Parsetree.pattern) list * unit option) = let _2 = -# 126 "" - ( Some x ) -# 20005 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let x = - let label = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 20015 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _startpos_label_ = _startpos__1_ in - let _endpos = _endpos_opat_ in - let _symbolstartpos = _startpos_label_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3090 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let constraint_loc, label, pat = - match opat with - | None -> - (* No pattern; this is a pun. Desugar it. - But that the pattern was there and the label reconstructed (which - piece of AST is marked as ghost is important for warning - emission). *) - _sloc, make_ghost label, pat_of_label label - | Some pat -> - (_startpos_octy_, _endpos), label, pat - in - label, mkpat_opt_constraint ~loc:constraint_loc pat octy - ) -# 20037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 1243 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [x], None ) -# 20043 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__1_ in + let _v : (Longident.t) = +# 4236 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Lident _1 ) +# 32174 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20052,87 +32183,35 @@ module Tables = struct 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.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = y; - MenhirLib.EngineTypes.startp = _startpos_y_; - MenhirLib.EngineTypes.endp = _endpos_y_; + 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 = opat; - MenhirLib.EngineTypes.startp = _startpos_opat_; - MenhirLib.EngineTypes.endp = _endpos_opat_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = octy; - MenhirLib.EngineTypes.startp = _startpos_octy_; - MenhirLib.EngineTypes.endp = _endpos_octy_; - 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 _4 : (unit option) = Obj.magic _4 in - let y : unit = Obj.magic y in + let _3 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let opat : (Parsetree.pattern option) = Obj.magic opat in - let octy : (Parsetree.core_type option) = Obj.magic octy 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 : ((Longident.t Location.loc * Parsetree.pattern) list * unit option) = let x = - let label = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 20108 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _startpos_label_ = _startpos__1_ in - let _endpos = _endpos_opat_ in - let _symbolstartpos = _startpos_label_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3090 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let constraint_loc, label, pat = - match opat with - | None -> - (* No pattern; this is a pun. Desugar it. - But that the pattern was there and the label reconstructed (which - piece of AST is marked as ghost is important for warning - emission). *) - _sloc, make_ghost label, pat_of_label label - | Some pat -> - (_startpos_octy_, _endpos), label, pat - in - label, mkpat_opt_constraint ~loc:constraint_loc pat octy - ) -# 20130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _endpos = _endpos__3_ in + let _v : (Longident.t) = let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1245 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [x], Some y ) -# 20136 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ldot _1 _loc__1_ _3 _loc__3_ ) +# 32215 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20144,82 +32223,20 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = tail; - MenhirLib.EngineTypes.startp = _startpos_tail_; - MenhirLib.EngineTypes.endp = _endpos_tail_; - 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 = opat; - MenhirLib.EngineTypes.startp = _startpos_opat_; - MenhirLib.EngineTypes.endp = _endpos_opat_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = octy; - MenhirLib.EngineTypes.startp = _startpos_octy_; - MenhirLib.EngineTypes.endp = _endpos_octy_; - 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 tail : ((Longident.t Location.loc * Parsetree.pattern) list * unit option) = Obj.magic tail in - let _2 : unit = Obj.magic _2 in - let opat : (Parsetree.pattern option) = Obj.magic opat in - let octy : (Parsetree.core_type option) = Obj.magic octy 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_tail_ in - let _v : ((Longident.t Location.loc * Parsetree.pattern) list * unit option) = let x = - let label = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 20194 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _startpos_label_ = _startpos__1_ in - let _endpos = _endpos_opat_ in - let _symbolstartpos = _startpos_label_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3090 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let constraint_loc, label, pat = - match opat with - | None -> - (* No pattern; this is a pun. Desugar it. - But that the pattern was there and the label reconstructed (which - piece of AST is marked as ghost is important for warning - emission). *) - _sloc, make_ghost label, pat_of_label label - | Some pat -> - (_startpos_octy_, _endpos), label, pat - in - label, mkpat_opt_constraint ~loc:constraint_loc pat octy - ) -# 20216 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 1249 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let xs, y = tail in - x :: xs, y ) -# 20223 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__1_ in + let _v : (Longident.t) = +# 4272 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 32240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20232,81 +32249,45 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let _4 : (Parsetree.pattern * Parsetree.expression * - Parsetree.value_constraint option * bool) = Obj.magic _4 in - let _3 : (Asttypes.rec_flag) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in + let _4 : unit = Obj.magic _4 in + let _3 : (Longident.t) = 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__1_inlined3_ in - let _v : (Ast_helper.let_bindings) = let _5 = - let _1 = _1_inlined3 in - -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 20286 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 20296 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 20302 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _loc__4_ = (_startpos__4_, _endpos__4_) in + let _endpos = _endpos__4_ in + let _v : (Longident.t) = let _endpos = _endpos__4_ in + let _symbolstartpos = _startpos__1_ in + let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _loc__1_ = (_startpos__1_, _endpos__1_) in + let _sloc = (_symbolstartpos, _endpos) in -# 4154 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let (ext, attr) = _2 in - mklbs ext _3 (mklb ~loc:_loc__4_ true _4 (attr@_5)) ) -# 20310 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4274 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( lapply ~loc:_sloc _1 _loc__1_ _3 _loc__3_ ) +# 32291 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20324,14 +32305,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Ast_helper.let_bindings) = Obj.magic _1 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__1_ in - let _v : (Ast_helper.let_bindings) = -# 4158 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 20335 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Longident.t) = +# 4269 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 32316 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20344,9 +32325,9 @@ module Tables = struct 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.semv = me; + MenhirLib.EngineTypes.startp = _startpos_me_; + MenhirLib.EngineTypes.endp = _endpos_me_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -20355,15 +32336,15 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : (Ast_helper.let_binding) = Obj.magic _2 in - let _1 : (Ast_helper.let_bindings) = Obj.magic _1 in + let me : (Parsetree.module_expr) = Obj.magic me 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 : (Ast_helper.let_bindings) = -# 4159 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( addlb _1 _2 ) -# 20367 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos_me_ in + let _v : (Parsetree.module_expr) = +# 1654 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( me ) +# 32348 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20376,33 +32357,56 @@ 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 = me; + MenhirLib.EngineTypes.startp = _startpos_me_; + MenhirLib.EngineTypes.endp = _endpos_me_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 = mty; + MenhirLib.EngineTypes.startp = _startpos_mty_; + MenhirLib.EngineTypes.endp = _endpos_mty_; + 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 : (Parsetree.expression) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let me : (Parsetree.module_expr) = Obj.magic me in + let _3 : unit = Obj.magic _3 in + let mty : (Parsetree.module_type) = Obj.magic mty 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.case) = -# 2840 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Exp.case _1 (merloc _endpos__2_ _3) ) -# 20406 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos_me_ in + let _v : (Parsetree.module_expr) = let _1 = + let _1 = +# 1661 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pmod_constraint(me, mty) ) +# 32395 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos__1_ = _endpos_me_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1085 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmod ~loc:_sloc _1 ) +# 32404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1665 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 32410 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20415,47 +32419,43 @@ 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 = body; + MenhirLib.EngineTypes.startp = _startpos_body_; + MenhirLib.EngineTypes.endp = _endpos_body_; 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 = _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; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = arg_and_pos; + MenhirLib.EngineTypes.startp = _startpos_arg_and_pos_; + MenhirLib.EngineTypes.endp = _endpos_arg_and_pos_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _5 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.expression) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let body : (Parsetree.module_expr) = Obj.magic body in + let arg_and_pos : (Lexing.position * Parsetree.functor_parameter) = Obj.magic arg_and_pos in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Parsetree.case) = -# 2842 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Exp.case _1 ~guard:(merloc _endpos__2_ _3) (merloc _endpos__4_ _5) ) -# 20459 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_arg_and_pos_ in + let _endpos = _endpos_body_ in + let _v : (Parsetree.module_expr) = let _1 = + let _1 = +# 1663 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let (_, arg) = arg_and_pos in + Pmod_functor(arg, body) ) +# 32444 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + +# 1085 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmod ~loc:_sloc _1 ) +# 32453 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1665 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 32459 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20468,35 +32468,26 @@ 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 = mty; + MenhirLib.EngineTypes.startp = _startpos_mty_; + MenhirLib.EngineTypes.endp = _endpos_mty_; 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; - }; + 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 _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let mty : (Parsetree.module_type) = Obj.magic mty 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.case) = let _loc__3_ = (_startpos__3_, _endpos__3_) in - -# 2844 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Exp.case _1 (merloc _endpos__2_ - (Exp.unreachable ~loc:(make_loc _loc__3_) ())) ) -# 20500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos_mty_ in + let _v : (Parsetree.module_type) = +# 1912 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mty ) +# 32491 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20509,122 +32500,43 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = tail; - MenhirLib.EngineTypes.startp = _startpos_tail_; - MenhirLib.EngineTypes.endp = _endpos_tail_; + MenhirLib.EngineTypes.semv = body; + MenhirLib.EngineTypes.startp = _startpos_body_; + MenhirLib.EngineTypes.endp = _endpos_body_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; - MenhirLib.EngineTypes.next = { - 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = arg_and_pos; + MenhirLib.EngineTypes.startp = _startpos_arg_and_pos_; + MenhirLib.EngineTypes.endp = _endpos_arg_and_pos_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let tail : (Parsetree.object_field list * Asttypes.closed_flag) = Obj.magic tail in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let _5 : unit = Obj.magic _5 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in - let _1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 20563 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 in + let body : (Parsetree.module_type) = Obj.magic body in + let arg_and_pos : (Lexing.position * Parsetree.functor_parameter) = Obj.magic arg_and_pos in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos_tail_ in - let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = - let _6 = - let _1 = _1_inlined3 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 20574 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos__6_ = _endpos__1_inlined3_ in - let _4 = - let _1 = _1_inlined2 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 20583 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos__4_ = _endpos__1_inlined2_ in - let _3 = - let _1 = _1_inlined1 in - -# 3518 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 20592 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _1 = - let _1 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 20599 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 20607 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos = _endpos__6_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3728 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let info = - match rhs_info _endpos__4_ with - | Some _ as info_before_semi -> info_before_semi - | None -> symbol_info _endpos - in - let attrs = add_info_attrs info (_4 @ _6) in - Of.tag ~loc:(make_loc _sloc) ~attrs _1 _3 ) -# 20622 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_arg_and_pos_ in + let _endpos = _endpos_body_ in + let _v : (Parsetree.module_type) = let _1 = + let _1 = +# 1919 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let (_, arg) = arg_and_pos in + Pmty_functor(arg, body) ) +# 32525 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + +# 1087 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmty ~loc:_sloc _1 ) +# 32534 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3709 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let (f, c) = tail in (head :: f, c) ) -# 20628 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1922 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 32540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20637,43 +32549,51 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = tail; - MenhirLib.EngineTypes.startp = _startpos_tail_; - MenhirLib.EngineTypes.endp = _endpos_tail_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 tail : (Parsetree.object_field list * Asttypes.closed_flag) = Obj.magic tail in - let _2 : unit = Obj.magic _2 in - let ty : (Parsetree.core_type) = Obj.magic ty in + let _4 : unit = Obj.magic _4 in + let s : (Parsetree.structure) = Obj.magic s in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_ty_ in - let _endpos = _endpos_tail_ in - let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = - let _endpos = _endpos_ty_ in - let _symbolstartpos = _startpos_ty_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : (Parsetree.module_expr) = let attrs = + let _1 = _1_inlined1 in -# 3739 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Of.inherit_ ~loc:(make_loc _sloc) ty ) -# 20671 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 32588 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos = _endpos__4_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3709 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let (f, c) = tail in (head :: f, c) ) -# 20677 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1478 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmod ~loc:_sloc ~attrs (Pmod_structure s) ) +# 32597 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20686,115 +32606,62 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = me; + MenhirLib.EngineTypes.startp = _startpos_me_; + MenhirLib.EngineTypes.endp = _endpos_me_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = args; + MenhirLib.EngineTypes.startp = _startpos_args_; + MenhirLib.EngineTypes.endp = _endpos_args_; 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; - }; + 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_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let _5 : unit = Obj.magic _5 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in - let _1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 20733 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 in + let me : (Parsetree.module_expr) = Obj.magic me in + let _4 : unit = Obj.magic _4 in + let args : ((Lexing.position * Parsetree.functor_parameter) list) = Obj.magic args in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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__1_inlined3_ in - let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = - let _6 = - let _1 = _1_inlined3 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 20744 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos__6_ = _endpos__1_inlined3_ in - let _4 = - let _1 = _1_inlined2 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 20753 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos__4_ = _endpos__1_inlined2_ in - let _3 = - let _1 = _1_inlined1 in - -# 3518 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 20762 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _1 = - let _1 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 20769 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 20777 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos = _endpos__6_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos_me_ in + let _v : (Parsetree.module_expr) = let attrs = + let _1 = _1_inlined1 in -# 3728 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let info = - match rhs_info _endpos__4_ with - | Some _ as info_before_semi -> info_before_semi - | None -> symbol_info _endpos - in - let attrs = add_info_attrs info (_4 @ _6) in - Of.tag ~loc:(make_loc _sloc) ~attrs _1 _3 ) -# 20792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 32652 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos = _endpos_me_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3712 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [head], Closed ) -# 20798 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1488 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( wrap_mod_attrs ~loc:_sloc attrs ( + List.fold_left (fun acc (startpos, arg) -> + mkmod ~loc:(startpos, _endpos) (Pmod_functor (arg, acc)) + ) me args + ) ) +# 32665 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20806,37 +32673,20 @@ module Tables = struct (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 = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = me; + MenhirLib.EngineTypes.startp = _startpos_me_; + MenhirLib.EngineTypes.endp = _endpos_me_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : unit = Obj.magic _2 in - let ty : (Parsetree.core_type) = Obj.magic ty in + let me : (Parsetree.module_expr) = Obj.magic me in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_ty_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = - let _endpos = _endpos_ty_ in - let _symbolstartpos = _startpos_ty_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3739 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Of.inherit_ ~loc:(make_loc _sloc) ty ) -# 20834 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3712 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [head], Closed ) -# 20840 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_me_ in + let _endpos = _endpos_me_ in + let _v : (Parsetree.module_expr) = +# 1494 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( me ) +# 32690 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20849,123 +32699,26 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = attr; + MenhirLib.EngineTypes.startp = _startpos_attr_; + MenhirLib.EngineTypes.endp = _endpos_attr_; 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; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = me; + MenhirLib.EngineTypes.startp = _startpos_me_; + MenhirLib.EngineTypes.endp = _endpos_me_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in - let _1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 20882 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined2_ in - let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = - let _4 = - let _1 = _1_inlined2 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 20893 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos__4_ = _endpos__1_inlined2_ in - let _3 = - let _1 = _1_inlined1 in - -# 3518 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 20902 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _1 = - let _1 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 20909 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 20917 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos = _endpos__4_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3721 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let info = symbol_info _endpos in - let attrs = add_info_attrs info _4 in - Of.tag ~loc:(make_loc _sloc) ~attrs _1 _3 ) -# 20928 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3715 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [head], Closed ) -# 20934 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let ty : (Parsetree.core_type) = Obj.magic ty in + let attr : (Parsetree.attribute) = Obj.magic attr in + let me : (Parsetree.module_expr) = Obj.magic me in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_ty_ in - let _endpos = _endpos_ty_ in - let _v : (Parsetree.object_field list * Asttypes.closed_flag) = let head = - let _endpos = _endpos_ty_ in - let _symbolstartpos = _startpos_ty_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3739 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Of.inherit_ ~loc:(make_loc _sloc) ty ) -# 20963 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3715 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [head], Closed ) -# 20969 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_me_ in + let _endpos = _endpos_attr_ in + let _v : (Parsetree.module_expr) = +# 1496 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Mod.attr me attr ) +# 32722 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20983,14 +32736,41 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : unit = Obj.magic _1 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__1_ in - let _v : (Parsetree.object_field list * Asttypes.closed_flag) = -# 3717 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [], Open ) -# 20994 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.module_expr) = let _1 = + let _1 = + let x = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 32753 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pmod_ident x ) +# 32759 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1085 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmod ~loc:_sloc _1 ) +# 32768 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1515 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 32774 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21003,86 +32783,42 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = me2; + MenhirLib.EngineTypes.startp = _startpos_me2_; + MenhirLib.EngineTypes.endp = _endpos_me2_; MenhirLib.EngineTypes.next = { - 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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = private_; - MenhirLib.EngineTypes.startp = _startpos_private__; - MenhirLib.EngineTypes.endp = _endpos_private__; - 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 = me1; + MenhirLib.EngineTypes.startp = _startpos_me1_; + MenhirLib.EngineTypes.endp = _endpos_me1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in - let _5 : unit = Obj.magic _5 in - let _1_inlined1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 21041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1_inlined1 in - let private_ : (Asttypes.private_flag) = Obj.magic private_ in - let _1 : (Parsetree.attributes) = Obj.magic _1 in + let me2 : (Parsetree.module_expr) = Obj.magic me2 in + let me1 : (Parsetree.module_expr) = Obj.magic me1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined2_ in - let _v : ((string Location.loc * Asttypes.private_flag * Parsetree.class_field_kind) * - Parsetree.attributes) = let ty = - let _1 = _1_inlined2 in - -# 3514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 21054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let label = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _startpos = _startpos_me1_ in + let _endpos = _endpos_me2_ in + let _v : (Parsetree.module_expr) = let _1 = let _1 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 21062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1503 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pmod_apply(me1, me2) ) +# 32807 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 21070 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1085 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmod ~loc:_sloc _1 ) +# 32816 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let attrs = -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 21076 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _1 = -# 4006 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Fresh ) -# 21081 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in -# 2138 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (label, private_, Cfk_virtual ty), attrs ) -# 21086 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1515 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 32822 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21095,74 +32831,49 @@ 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; 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 = _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 = me; + MenhirLib.EngineTypes.startp = _startpos_me_; + MenhirLib.EngineTypes.endp = _endpos_me_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _5 : (Parsetree.expression) = Obj.magic _5 in - let _1_inlined1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 21126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1_inlined1 in - let _3 : (Asttypes.private_flag) = Obj.magic _3 in - let _1 : (Parsetree.attributes) = Obj.magic _1 in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let me : (Parsetree.module_expr) = Obj.magic me in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : ((string Location.loc * Asttypes.private_flag * Parsetree.class_field_kind) * - Parsetree.attributes) = let _4 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _startpos = _startpos_me_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.module_expr) = let _1 = let _1 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 21139 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1506 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pmod_apply_unit me ) +# 32862 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let (_endpos__1_, _startpos__1_) = (_endpos__3_, _startpos_me_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 21147 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1085 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmod ~loc:_sloc _1 ) +# 32871 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _2 = -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 21153 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _1 = -# 4009 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Fresh ) -# 21158 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in -# 2140 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 ) -# 21166 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1515 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 32877 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21174,85 +32885,36 @@ module Tables = struct (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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 = _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 _5 : (Parsetree.expression) = Obj.magic _5 in - let _1_inlined2 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 21212 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 - let _1 : unit = Obj.magic _1 in + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = ex; + MenhirLib.EngineTypes.startp = _startpos_ex_; + MenhirLib.EngineTypes.endp = _endpos_ex_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let ex : (Parsetree.extension) = Obj.magic ex in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : ((string Location.loc * Asttypes.private_flag * Parsetree.class_field_kind) * - Parsetree.attributes) = let _4 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _startpos = _startpos_ex_ in + let _endpos = _endpos_ex_ in + let _v : (Parsetree.module_expr) = let _1 = let _1 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 21226 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1509 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pmod_extension ex ) +# 32903 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 21234 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _2 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 21242 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1085 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmod ~loc:_sloc _1 ) +# 32912 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _1 = -# 4010 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Override ) -# 21248 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in -# 2140 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 ) -# 21256 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1515 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 32918 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21264,105 +32926,95 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _8; - MenhirLib.EngineTypes.startp = _startpos__8_; - MenhirLib.EngineTypes.endp = _endpos__8_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - MenhirLib.EngineTypes.next = { - 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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - 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 = _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 _8 : (Parsetree.expression) = Obj.magic _8 in - let _7 : unit = Obj.magic _7 in - let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in - let _5 : unit = Obj.magic _5 in - let _1_inlined1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 21317 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1_inlined1 in - let _3 : (Asttypes.private_flag) = Obj.magic _3 in - let _1 : (Parsetree.attributes) = Obj.magic _1 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__8_ in - let _v : ((string Location.loc * Asttypes.private_flag * Parsetree.class_field_kind) * - Parsetree.attributes) = let _6 = - let _1 = _1_inlined2 in - -# 3514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 21330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 21339 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _endpos = _endpos__1_ in + let _v : (Parsetree.module_expr) = let _1 = + let _1 = + let _endpos = _endpos__1_ in + let _startpos = _startpos__1_ in + let _loc = (_startpos, _endpos) in + +# 1512 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let id = mkrhs Ast_helper.hole_txt _loc in + Pmod_extension (id, PStr []) ) +# 32949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 21347 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1085 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmod ~loc:_sloc _1 ) +# 32958 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _2 = -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + +# 1515 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 21353 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 32964 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _1 = -# 4009 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Fresh ) -# 21358 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + { + 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 : ( +# 901 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 32985 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = +# 1461 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some x ) +# 32993 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - -# 2146 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 ) -# 21366 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + { + 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 : unit = 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 option) = +# 1464 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None ) +# 33018 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21375,46 +33027,40 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _8; - MenhirLib.EngineTypes.startp = _startpos__8_; - MenhirLib.EngineTypes.endp = _endpos__8_; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; 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; }; }; }; @@ -21422,67 +33068,71 @@ module Tables = struct }; }; } = _menhir_stack in - let _8 : (Parsetree.expression) = Obj.magic _8 in - let _7 : unit = Obj.magic _7 in - let _1_inlined3 : (Parsetree.core_type) = Obj.magic _1_inlined3 in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (Longident.t) = Obj.magic _1_inlined3 in let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 901 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 21433 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 33078 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + let ext : (string Location.loc option) = Obj.magic ext 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__8_ in - let _v : ((string Location.loc * Asttypes.private_flag * Parsetree.class_field_kind) * - Parsetree.attributes) = let _6 = - let _1 = _1_inlined3 in + let _endpos = _endpos__1_inlined4_ in + let _v : (Parsetree.module_substitution * string Location.loc option) = let attrs2 = + let _1 = _1_inlined4 in -# 3514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 21447 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 33091 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _startpos__6_ = _startpos__1_inlined3_ in - let _4 = + let _endpos_attrs2_ = _endpos__1_inlined4_ in + let body = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 33103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let uid = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _1 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 21456 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 21464 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 33114 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _2 = + let attrs1 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 21472 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 33122 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _1 = -# 4010 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Override ) -# 21478 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2146 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 ) -# 21486 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1952 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + ) +# 33136 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21495,143 +33145,51 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _11; - MenhirLib.EngineTypes.startp = _startpos__11_; - MenhirLib.EngineTypes.endp = _endpos__11_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _10; - MenhirLib.EngineTypes.startp = _startpos__10_; - MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.semv = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _9; - MenhirLib.EngineTypes.startp = _startpos__9_; - MenhirLib.EngineTypes.endp = _endpos__9_; + 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 = _8; - MenhirLib.EngineTypes.startp = _startpos__8_; - MenhirLib.EngineTypes.endp = _endpos__8_; - 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 = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - 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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; - 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 = _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 _11 : (Parsetree.expression) = Obj.magic _11 in - let _10 : unit = Obj.magic _10 in - let _9 : (Parsetree.core_type) = Obj.magic _9 in - let _8 : unit = Obj.magic _8 in - let xs : (string Location.loc list) = Obj.magic xs in - let _6 : unit = Obj.magic _6 in - let _5 : unit = Obj.magic _5 in - let _1_inlined1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 21568 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1_inlined1 in - let _3 : (Asttypes.private_flag) = Obj.magic _3 in - let _1 : (Parsetree.attributes) = Obj.magic _1 in + let _4 : unit = Obj.magic _4 in + let s : (Parsetree.signature) = Obj.magic s in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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__11_ in - let _v : ((string Location.loc * Asttypes.private_flag * Parsetree.class_field_kind) * - Parsetree.attributes) = let _7 = -# 2723 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 21579 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 21587 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos__4_ in + let _v : (Parsetree.module_type) = let attrs = + let _1 = _1_inlined1 in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 21595 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 33184 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _startpos__4_ = _startpos__1_inlined1_ in - let _2 = -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 21602 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let (_endpos__2_, _startpos__2_) = (_endpos__1_, _startpos__1_) in - let _1 = -# 4009 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Fresh ) -# 21608 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let (_endpos__1_, _startpos__1_) = (_endpos__0_, _endpos__0_) in - let _endpos = _endpos__11_ in - let _symbolstartpos = if _startpos__1_ != _endpos__1_ then - _startpos__1_ - else - if _startpos__2_ != _endpos__2_ then - _startpos__2_ - else - if _startpos__3_ != _endpos__3_ then - _startpos__3_ - else - _startpos__4_ in + let _endpos = _endpos__4_ in + let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2152 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let poly_exp_loc = (_startpos__7_, _endpos__11_) in - let poly_exp = - let exp, poly = - (* it seems odd to use the global ~loc here while poly_exp_loc - is tighter, but this is what ocamlyacc does; - TODO improve parser.mly *) - wrap_type_annotation ~loc:_sloc _7 _9 _11 in - ghexp ~loc:poly_exp_loc (Pexp_poly(exp, Some poly)) in - (_4, _3, - Cfk_concrete (_1, poly_exp)), _2 ) -# 21635 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1790 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmty ~loc:_sloc ~attrs (Pmty_signature s) ) +# 33193 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21644,152 +33202,58 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _11; - MenhirLib.EngineTypes.startp = _startpos__11_; - MenhirLib.EngineTypes.endp = _endpos__11_; + MenhirLib.EngineTypes.semv = mty; + MenhirLib.EngineTypes.startp = _startpos_mty_; + MenhirLib.EngineTypes.endp = _endpos_mty_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _10; - MenhirLib.EngineTypes.startp = _startpos__10_; - MenhirLib.EngineTypes.endp = _endpos__10_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _9; - MenhirLib.EngineTypes.startp = _startpos__9_; - MenhirLib.EngineTypes.endp = _endpos__9_; + MenhirLib.EngineTypes.semv = args; + MenhirLib.EngineTypes.startp = _startpos_args_; + MenhirLib.EngineTypes.endp = _endpos_args_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _8; - MenhirLib.EngineTypes.startp = _startpos__8_; - MenhirLib.EngineTypes.endp = _endpos__8_; + 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 = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - 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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 = _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 _11 : (Parsetree.expression) = Obj.magic _11 in - let _10 : unit = Obj.magic _10 in - let _9 : (Parsetree.core_type) = Obj.magic _9 in - let _8 : unit = Obj.magic _8 in - let xs : (string Location.loc list) = Obj.magic xs in - let _6 : unit = Obj.magic _6 in - let _5 : unit = Obj.magic _5 in - let _1_inlined2 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 21723 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 - let _1 : unit = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__11_ in - let _v : ((string Location.loc * Asttypes.private_flag * Parsetree.class_field_kind) * - Parsetree.attributes) = let _7 = -# 2723 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 21735 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 21743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 21751 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _startpos__4_ = _startpos__1_inlined2_ in - let _2 = + let mty : (Parsetree.module_type) = Obj.magic mty in + let _4 : unit = Obj.magic _4 in + let args : ((Lexing.position * Parsetree.functor_parameter) list) = Obj.magic args in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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_mty_ in + let _v : (Parsetree.module_type) = let attrs = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 21760 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 33248 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__2_, _startpos__2_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in - let _1 = -# 4010 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Override ) -# 21767 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos = _endpos__11_ in - let _symbolstartpos = if _startpos__1_ != _endpos__1_ then - _startpos__1_ - else - if _startpos__2_ != _endpos__2_ then - _startpos__2_ - else - if _startpos__3_ != _endpos__3_ then - _startpos__3_ - else - _startpos__4_ in + let _endpos = _endpos_mty_ in + let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2152 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let poly_exp_loc = (_startpos__7_, _endpos__11_) in - let poly_exp = - let exp, poly = - (* it seems odd to use the global ~loc here while poly_exp_loc - is tighter, but this is what ocamlyacc does; - TODO improve parser.mly *) - wrap_type_annotation ~loc:_sloc _7 _9 _11 in - ghexp ~loc:poly_exp_loc (Pexp_poly(exp, Some poly)) in - (_4, _3, - Cfk_concrete (_1, poly_exp)), _2 ) -# 21793 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( wrap_mty_attrs ~loc:_sloc attrs (mk_functor_typ args mty) ) +# 33257 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21801,24 +33265,98 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = mty; + MenhirLib.EngineTypes.startp = _startpos_mty_; + MenhirLib.EngineTypes.endp = _endpos_mty_; + 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 = args; + MenhirLib.EngineTypes.startp = _startpos_args_; + MenhirLib.EngineTypes.endp = _endpos_args_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let mty : (Parsetree.module_type) = Obj.magic mty in + let _2 : unit = Obj.magic _2 in + let args : ((Lexing.position * Parsetree.functor_parameter) list) = Obj.magic args in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_args_ in + let _endpos = _endpos_mty_ in + let _v : (Parsetree.module_type) = +# 1806 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mk_functor_typ args mty ) +# 33296 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + 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 _1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 21814 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 in + let _5 : (Parsetree.module_expr) = Obj.magic _5 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let _3 : unit = Obj.magic _3 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__1_ in - let _v : (Longident.t) = -# 3842 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Lident _1 ) -# 21822 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__5_ in + let _v : (Parsetree.module_type) = let _4 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 33351 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1808 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmty ~loc:_sloc ~attrs:_4 (Pmty_typeof _5) ) +# 33360 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21848,20 +33386,48 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 21855 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Longident.t) = Obj.magic _1 in + let _3 : unit = Obj.magic _3 in + let _2 : (Parsetree.module_type) = 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 : (Longident.t) = -# 3843 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ldot(_1,_3) ) -# 21865 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.module_type) = +# 1810 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _2 ) +# 33399 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.attribute) = Obj.magic _2 in + let _1 : (Parsetree.module_type) = 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.module_type) = +# 1816 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Mty.attr _1 _2 ) +# 33431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21879,18 +33445,41 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 856 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 21886 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 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__1_ in - let _v : (Longident.t) = -# 3842 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Lident _1 ) -# 21894 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.module_type) = let _1 = + let _1 = + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 33462 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1819 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pmty_ident _1 ) +# 33468 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1087 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmty ~loc:_sloc _1 ) +# 33477 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1830 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 33483 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21920,50 +33509,32 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : ( -# 856 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 21927 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _3 in + let _3 : (Parsetree.module_type) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : (Longident.t) = Obj.magic _1 in + let _1 : (Parsetree.module_type) = 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 : (Longident.t) = -# 3843 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ldot(_1,_3) ) -# 21937 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (string) = 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) = let _1 = -# 3900 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 21962 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _v : (Parsetree.module_type) = let _1 = + let _1 = +# 1822 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pmty_functor(Named (mknoloc None, _1), _3) ) +# 33523 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1087 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmty ~loc:_sloc _1 ) +# 33532 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 3842 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Lident _1 ) -# 21967 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1830 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 33538 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21976,9 +33547,9 @@ 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -21993,28 +33564,46 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : unit = Obj.magic _3 in + let xs : (Parsetree.with_constraint list) = Obj.magic xs in let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.module_type) = 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 : (Longident.t) = let _1 = - let _1 = -# 3822 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( "::" ) -# 22007 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _endpos = _endpos_xs_ in + let _v : (Parsetree.module_type) = let _1 = + let _1 = + let _3 = + let xs = +# 253 "" + ( List.rev xs ) +# 33580 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 33585 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1824 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pmty_with(_1, _3) ) +# 33591 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__1_ = _endpos_xs_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3900 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 22012 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1087 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmty ~loc:_sloc _1 ) +# 33601 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3842 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Lident _1 ) -# 22018 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1830 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 33607 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22032,19 +33621,132 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (string) = Obj.magic _1 in + let _1 : (Parsetree.extension) = 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) = let _1 = -# 3900 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 22043 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.module_type) = let _1 = + let _1 = +# 1828 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pmty_extension _1 ) +# 33633 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1087 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmty ~loc:_sloc _1 ) +# 33641 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1830 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 33647 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = typ; + MenhirLib.EngineTypes.startp = _startpos_typ_; + MenhirLib.EngineTypes.endp = _endpos_typ_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + 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 _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let typ : (Parsetree.module_type option) = Obj.magic typ in + let _1_inlined2 : (string) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let ext : (string Location.loc option) = Obj.magic ext 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__1_inlined3_ in + let _v : (Parsetree.module_type_declaration * string Location.loc option) = let attrs2 = + let _1 = _1_inlined3 in + +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 33716 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 33728 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 33736 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3842 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Lident _1 ) -# 22048 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1736 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + ) +# 33750 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22057,41 +33759,147 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = typ; + MenhirLib.EngineTypes.startp = _startpos_typ_; + MenhirLib.EngineTypes.endp = _endpos_typ_; 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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + 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 _1_inlined1 : (string) = Obj.magic _1_inlined1 in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let typ : (Parsetree.module_type) = Obj.magic typ in + let _6 : unit = Obj.magic _6 in + let _1_inlined2 : (string) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let ext : (string Location.loc option) = Obj.magic ext in let _2 : unit = Obj.magic _2 in - let _1 : (Longident.t) = Obj.magic _1 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__1_inlined1_ in - let _v : (Longident.t) = let _3 = + let _endpos = _endpos__1_inlined3_ in + let _v : (Parsetree.module_type_declaration * string Location.loc option) = let attrs2 = + let _1 = _1_inlined3 in + +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 33826 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 33838 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let attrs1 = let _1 = _1_inlined1 in -# 3900 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 22089 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 33846 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3843 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ldot(_1,_3) ) -# 22095 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2010 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + ) +# 33860 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Longident.t) = 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) = +# 4281 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 33885 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Asttypes.mutable_flag) = +# 4362 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Immutable ) +# 33903 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22103,61 +33911,38 @@ module Tables = struct (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 = _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; - }; - }; - }; - }; + 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 _2_inlined1 : unit = 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 _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 : (Longident.t) = let _3 = - let (_2, _1) = (_2_inlined1, _1_inlined1) in - let _1 = -# 3822 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( "::" ) -# 22150 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 3900 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 22155 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3843 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ldot(_1,_3) ) -# 22161 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__1_ in + let _v : (Asttypes.mutable_flag) = +# 4363 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Mutable ) +# 33928 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = +# 4371 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Immutable, Concrete ) +# 33946 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22169,42 +33954,20 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - 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; - }; - }; + 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_inlined1 : (string) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in - let _1 : (Longident.t) = Obj.magic _1 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__1_inlined1_ in - let _v : (Longident.t) = let _3 = - let _1 = _1_inlined1 in - -# 3900 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 22202 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3843 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ldot(_1,_3) ) -# 22208 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__1_ in + let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = +# 4373 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Mutable, Concrete ) +# 33971 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22222,14 +33985,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (string) = Obj.magic _1 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__1_ in - let _v : (Longident.t) = -# 3842 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Lident _1 ) -# 22233 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = +# 4375 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Immutable, Virtual ) +# 33996 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22242,33 +34005,26 @@ 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 = _; - 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; - }; + 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 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : (Longident.t) = Obj.magic _1 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 : (Longident.t) = -# 3843 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ldot(_1,_3) ) -# 22272 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__2_ in + let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = +# 4378 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Mutable, Virtual ) +# 34028 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22280,24 +34036,27 @@ module Tables = struct (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; + 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 _1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 22293 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 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__1_ in - let _v : (Longident.t) = -# 3842 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Lident _1 ) -# 22301 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__2_ in + let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = +# 4378 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Mutable, Virtual ) +# 34060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22310,37 +34069,26 @@ 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 = _; - 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; - }; + 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 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 22334 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Longident.t) = Obj.magic _1 in + let _2 : (string) = 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 : (Longident.t) = -# 3843 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ldot(_1,_3) ) -# 22344 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__2_ in + let _v : (string) = +# 4333 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _2 ) +# 34092 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22359,17 +34107,27 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 856 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 22365 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 34113 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = -# 3842 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Lident _1 ) -# 22373 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (string Location.loc list) = let x = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 34125 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 221 "" + ( [ x ] ) +# 34131 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22382,37 +34140,40 @@ 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 = 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; - }; + 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 : ( -# 856 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let xs : (string Location.loc list) = Obj.magic xs in + let _1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 22406 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Longident.t) = Obj.magic _1 in +# 34159 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Longident.t) = -# 3843 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ldot(_1,_3) ) -# 22416 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos_xs_ in + let _v : (string Location.loc list) = let x = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 34171 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 223 "" + ( x :: xs ) +# 34177 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22425,19 +34186,28 @@ module Tables = struct 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.semv = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (string) = Obj.magic _1 in + let s : ( +# 887 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string * Location.t * string option) +# 34198 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic s in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Longident.t) = -# 3842 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Lident _1 ) -# 22441 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_s_ in + let _endpos = _endpos_s_ in + let _v : (string list) = let x = +# 4329 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let body, _, _ = s in body ) +# 34206 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 221 "" + ( [ x ] ) +# 34211 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22450,33 +34220,35 @@ 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 = 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; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = s; + MenhirLib.EngineTypes.startp = _startpos_s_; + MenhirLib.EngineTypes.endp = _endpos_s_; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _3 : (string) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Longident.t) = Obj.magic _1 in + let xs : (string list) = Obj.magic xs in + let s : ( +# 887 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string * Location.t * string option) +# 34239 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic s in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Longident.t) = -# 3843 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ldot(_1,_3) ) -# 22480 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_s_ in + let _endpos = _endpos_xs_ in + let _v : (string list) = let x = +# 4329 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let body, _, _ = s in body ) +# 34247 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 223 "" + ( x :: xs ) +# 34252 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22489,19 +34261,24 @@ module Tables = struct 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.semv = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Longident.t) = Obj.magic _1 in + let ty : (Parsetree.core_type) = Obj.magic ty in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Longident.t) = -# 3876 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 22505 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_ty_ in + let _endpos = _endpos_ty_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4358 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Public ) +# 34277 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 3497 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Ptype_abstract, priv, Some ty) ) +# 34282 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22514,43 +34291,31 @@ module Tables = struct 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.semv = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; 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; - }; - }; + 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 : (Longident.t) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Longident.t) = Obj.magic _1 in + let ty : (Parsetree.core_type) = Obj.magic ty 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 : (Longident.t) = let _endpos = _endpos__4_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos_ty_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4359 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Private ) +# 34314 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 3878 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( lapply ~loc:_sloc _1 _3 ) -# 22554 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3497 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Ptype_abstract, priv, Some ty) ) +# 34319 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22563,19 +34328,36 @@ module Tables = struct 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.semv = cs; + MenhirLib.EngineTypes.startp = _startpos_cs_; + MenhirLib.EngineTypes.endp = _endpos_cs_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Longident.t) = Obj.magic _1 in + let cs : (Parsetree.constructor_declaration list) = Obj.magic cs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Longident.t) = -# 3873 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 22579 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_cs_ in + let _endpos = _endpos_cs_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4358 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Public ) +# 34344 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let oty = + let _1 = +# 124 "" + ( None ) +# 34350 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 3513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 34355 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3501 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Ptype_variant cs, priv, oty) ) +# 34361 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22588,9 +34370,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = me; - MenhirLib.EngineTypes.startp = _startpos_me_; - MenhirLib.EngineTypes.endp = _endpos_me_; + MenhirLib.EngineTypes.semv = cs; + MenhirLib.EngineTypes.startp = _startpos_cs_; + MenhirLib.EngineTypes.endp = _endpos_cs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -22599,15 +34381,32 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let me : (Parsetree.module_expr) = Obj.magic me in + let cs : (Parsetree.constructor_declaration list) = Obj.magic cs 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_me_ in - let _v : (Parsetree.module_expr) = -# 1595 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( me ) -# 22611 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos_cs_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4359 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Private ) +# 34393 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let oty = + let _1 = +# 124 "" + ( None ) +# 34399 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 3513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 34404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3501 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Ptype_variant cs, priv, oty) ) +# 34410 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22620,56 +34419,127 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = me; - MenhirLib.EngineTypes.startp = _startpos_me_; - MenhirLib.EngineTypes.endp = _endpos_me_; + MenhirLib.EngineTypes.semv = cs; + MenhirLib.EngineTypes.startp = _startpos_cs_; + MenhirLib.EngineTypes.endp = _endpos_cs_; + 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 = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + } = _menhir_stack in + let cs : (Parsetree.constructor_declaration list) = Obj.magic cs in + let _2 : unit = Obj.magic _2 in + let x : (Parsetree.core_type) = Obj.magic x in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_x_ in + let _endpos = _endpos_cs_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4358 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Public ) +# 34449 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let oty = + let _1 = + let x = +# 191 "" + ( x ) +# 34456 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 126 "" + ( Some x ) +# 34461 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 34467 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3501 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Ptype_variant cs, priv, oty) ) +# 34473 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = cs; + MenhirLib.EngineTypes.startp = _startpos_cs_; + MenhirLib.EngineTypes.endp = _endpos_cs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = mty; - MenhirLib.EngineTypes.startp = _startpos_mty_; - MenhirLib.EngineTypes.endp = _endpos_mty_; + 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.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let me : (Parsetree.module_expr) = Obj.magic me in - let _3 : unit = Obj.magic _3 in - let mty : (Parsetree.module_type) = Obj.magic mty in + let cs : (Parsetree.constructor_declaration list) = Obj.magic cs in let _1 : unit = Obj.magic _1 in + let _2 : unit = Obj.magic _2 in + let x : (Parsetree.core_type) = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos_me_ in - let _v : (Parsetree.module_expr) = let _1 = - let _1 = -# 1602 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pmod_constraint(me, mty) ) -# 22658 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos__1_ = _endpos_me_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos_x_ in + let _endpos = _endpos_cs_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4359 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Private ) +# 34519 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let oty = + let _1 = + let x = +# 191 "" + ( x ) +# 34526 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 126 "" + ( Some x ) +# 34531 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 1047 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkmod ~loc:_sloc _1 ) -# 22667 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 34537 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1606 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 22673 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3501 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Ptype_variant cs, priv, oty) ) +# 34543 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22681,44 +34551,37 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = body; - MenhirLib.EngineTypes.startp = _startpos_body_; - MenhirLib.EngineTypes.endp = _endpos_body_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = arg_and_pos; - MenhirLib.EngineTypes.startp = _startpos_arg_and_pos_; - MenhirLib.EngineTypes.endp = _endpos_arg_and_pos_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let body : (Parsetree.module_expr) = Obj.magic body in - let arg_and_pos : (Lexing.position * Parsetree.functor_parameter) = Obj.magic arg_and_pos in + let _3 : unit = Obj.magic _3 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_arg_and_pos_ in - let _endpos = _endpos_body_ in - let _v : (Parsetree.module_expr) = let _1 = + let _startpos = _startpos__3_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4358 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Public ) +# 34568 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let oty = let _1 = -# 1604 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let (_, arg) = arg_and_pos in - Pmod_functor(arg, body) ) -# 22707 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 124 "" + ( None ) +# 34574 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 -# 1047 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkmod ~loc:_sloc _1 ) -# 22716 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 34579 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1606 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 22722 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3505 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Ptype_open, priv, oty) ) +# 34585 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22731,9 +34594,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = mty; - MenhirLib.EngineTypes.startp = _startpos_mty_; - MenhirLib.EngineTypes.endp = _endpos_mty_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -22742,15 +34605,32 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let mty : (Parsetree.module_type) = Obj.magic mty in + let _3 : unit = Obj.magic _3 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_mty_ in - let _v : (Parsetree.module_type) = -# 1855 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mty ) -# 22754 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__3_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4359 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Private ) +# 34617 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let oty = + let _1 = +# 124 "" + ( None ) +# 34623 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 3513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 34628 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3505 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Ptype_open, priv, oty) ) +# 34634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22763,43 +34643,57 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = body; - MenhirLib.EngineTypes.startp = _startpos_body_; - MenhirLib.EngineTypes.endp = _endpos_body_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = arg_and_pos; - MenhirLib.EngineTypes.startp = _startpos_arg_and_pos_; - MenhirLib.EngineTypes.endp = _endpos_arg_and_pos_; - 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 = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in - let body : (Parsetree.module_type) = Obj.magic body in - let arg_and_pos : (Lexing.position * Parsetree.functor_parameter) = Obj.magic arg_and_pos in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let x : (Parsetree.core_type) = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_arg_and_pos_ in - let _endpos = _endpos_body_ in - let _v : (Parsetree.module_type) = let _1 = - let _1 = -# 1862 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let (_, arg) = arg_and_pos in - Pmty_functor(arg, body) ) -# 22788 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + let _startpos = _startpos_x_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4358 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Public ) +# 34673 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let oty = + let _1 = + let x = +# 191 "" + ( x ) +# 34680 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 126 "" + ( Some x ) +# 34685 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 1049 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkmty ~loc:_sloc _1 ) -# 22797 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 34691 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1865 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 22803 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3505 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Ptype_open, priv, oty) ) +# 34697 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22812,51 +34706,64 @@ module Tables = struct 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.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; 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; + 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.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let _4 : unit = Obj.magic _4 in - let s : (Parsetree.structure) = Obj.magic s in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let _3 : unit = Obj.magic _3 in let _1 : unit = Obj.magic _1 in + let _2 : unit = Obj.magic _2 in + let x : (Parsetree.core_type) = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__4_ in - let _v : (Parsetree.module_expr) = let attrs = - let _1 = _1_inlined1 in + let _startpos = _startpos_x_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4359 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Private ) +# 34743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let oty = + let _1 = + let x = +# 191 "" + ( x ) +# 34750 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 126 "" + ( Some x ) +# 34755 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 22851 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 34761 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos__4_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1419 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkmod ~loc:_sloc ~attrs (Pmod_structure s) ) -# 22860 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3505 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Ptype_open, priv, oty) ) +# 34767 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22869,62 +34776,50 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = me; - MenhirLib.EngineTypes.startp = _startpos_me_; - MenhirLib.EngineTypes.endp = _endpos_me_; + 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.semv = ls; + MenhirLib.EngineTypes.startp = _startpos_ls_; + MenhirLib.EngineTypes.endp = _endpos_ls_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = args; - MenhirLib.EngineTypes.startp = _startpos_args_; - MenhirLib.EngineTypes.endp = _endpos_args_; - 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let me : (Parsetree.module_expr) = Obj.magic me in - let _4 : unit = Obj.magic _4 in - let args : ((Lexing.position * Parsetree.functor_parameter) list) = Obj.magic args in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let ls : (Parsetree.label_declaration list) = Obj.magic ls in + let _3 : unit = Obj.magic _3 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos_me_ in - let _v : (Parsetree.module_expr) = let attrs = - let _1 = _1_inlined1 in + let _startpos = _startpos__3_ in + let _endpos = _endpos__5_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4358 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Public ) +# 34806 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let oty = + let _1 = +# 124 "" + ( None ) +# 34812 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 22915 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 34817 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos_me_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1429 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( wrap_mod_attrs ~loc:_sloc attrs ( - List.fold_left (fun acc (startpos, arg) -> - mkmod ~loc:(startpos, _endpos) (Pmod_functor (arg, acc)) - ) me args - ) ) -# 22928 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3509 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Ptype_record ls, priv, oty) ) +# 34823 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22936,20 +34831,58 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = me; - MenhirLib.EngineTypes.startp = _startpos_me_; - MenhirLib.EngineTypes.endp = _endpos_me_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 = ls; + MenhirLib.EngineTypes.startp = _startpos_ls_; + MenhirLib.EngineTypes.endp = _endpos_ls_; + 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 = _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 me : (Parsetree.module_expr) = Obj.magic me in + let _5 : unit = Obj.magic _5 in + let ls : (Parsetree.label_declaration list) = Obj.magic ls in + let _3 : unit = Obj.magic _3 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_me_ in - let _endpos = _endpos_me_ in - let _v : (Parsetree.module_expr) = -# 1435 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( me ) -# 22953 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4359 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Private ) +# 34869 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let oty = + let _1 = +# 124 "" + ( None ) +# 34875 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 3513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 34880 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3509 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Ptype_record ls, priv, oty) ) +# 34886 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22962,78 +34895,71 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = attr; - MenhirLib.EngineTypes.startp = _startpos_attr_; - MenhirLib.EngineTypes.endp = _endpos_attr_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = me; - MenhirLib.EngineTypes.startp = _startpos_me_; - MenhirLib.EngineTypes.endp = _endpos_me_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = ls; + MenhirLib.EngineTypes.startp = _startpos_ls_; + MenhirLib.EngineTypes.endp = _endpos_ls_; + 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 = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; }; } = _menhir_stack in - let attr : (Parsetree.attribute) = Obj.magic attr in - let me : (Parsetree.module_expr) = Obj.magic me in + let _5 : unit = Obj.magic _5 in + let ls : (Parsetree.label_declaration list) = Obj.magic ls in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let x : (Parsetree.core_type) = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_me_ in - let _endpos = _endpos_attr_ in - let _v : (Parsetree.module_expr) = -# 1437 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Mod.attr me attr ) -# 22985 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_x_ in + let _endpos = _endpos__5_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4358 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Public ) +# 34939 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Longident.t) = 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.module_expr) = let _1 = + let oty = let _1 = - let x = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 23016 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let x = +# 191 "" + ( x ) +# 34946 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 1441 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pmod_ident x ) -# 23022 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 126 "" + ( Some x ) +# 34951 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1047 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkmod ~loc:_sloc _1 ) -# 23031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 34957 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1456 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 23037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3509 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Ptype_record ls, priv, oty) ) +# 34963 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23046,42 +34972,78 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = me2; - MenhirLib.EngineTypes.startp = _startpos_me2_; - MenhirLib.EngineTypes.endp = _endpos_me2_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = me1; - MenhirLib.EngineTypes.startp = _startpos_me1_; - MenhirLib.EngineTypes.endp = _endpos_me1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = ls; + MenhirLib.EngineTypes.startp = _startpos_ls_; + MenhirLib.EngineTypes.endp = _endpos_ls_; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + 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 = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; } = _menhir_stack in - let me2 : (Parsetree.module_expr) = Obj.magic me2 in - let me1 : (Parsetree.module_expr) = Obj.magic me1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_me1_ in - let _endpos = _endpos_me2_ in - let _v : (Parsetree.module_expr) = let _1 = - let _1 = -# 1444 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pmod_apply(me1, me2) ) -# 23070 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + let _5 : unit = Obj.magic _5 in + let ls : (Parsetree.label_declaration list) = Obj.magic ls in + let _3 : unit = Obj.magic _3 in + let _1 : unit = Obj.magic _1 in + let _2 : unit = Obj.magic _2 in + let x : (Parsetree.core_type) = Obj.magic x in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_x_ in + let _endpos = _endpos__5_ in + let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = +# 4359 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Private ) +# 35023 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let oty = + let _1 = + let x = +# 191 "" + ( x ) +# 35030 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 126 "" + ( Some x ) +# 35035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 1047 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkmod ~loc:_sloc _1 ) -# 23079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 35041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1456 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 23085 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3509 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( (Ptype_record ls, priv, oty) ) +# 35047 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23099,44 +35061,44 @@ 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 = meth_list; + MenhirLib.EngineTypes.startp = _startpos_meth_list_; + MenhirLib.EngineTypes.endp = _endpos_meth_list_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = me; - MenhirLib.EngineTypes.startp = _startpos_me_; - MenhirLib.EngineTypes.endp = _endpos_me_; + 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 _2 : unit = Obj.magic _2 in - let me : (Parsetree.module_expr) = Obj.magic me in + let meth_list : (Parsetree.object_field list * Asttypes.closed_flag) = Obj.magic meth_list in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_me_ in + let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in - let _v : (Parsetree.module_expr) = let _1 = + let _v : (Parsetree.core_type) = let _1 = let _1 = -# 1447 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pmod_apply_unit me ) -# 23125 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3989 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let (f, c) = meth_list in Ptyp_object (f, c) ) +# 35087 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos__3_, _startpos_me_) in + let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1047 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkmod ~loc:_sloc _1 ) -# 23134 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc _1 ) +# 35096 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1456 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 23140 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3993 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 35102 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23148,36 +35110,43 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ex; - MenhirLib.EngineTypes.startp = _startpos_ex_; - MenhirLib.EngineTypes.endp = _endpos_ex_; - 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 ex : (Parsetree.extension) = Obj.magic ex 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_ex_ in - let _endpos = _endpos_ex_ in - let _v : (Parsetree.module_expr) = let _1 = + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : (Parsetree.core_type) = let _1 = let _1 = -# 1450 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pmod_extension ex ) -# 23166 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3991 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_object ([], Closed) ) +# 35135 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_ex_, _startpos_ex_) in + let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1047 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkmod ~loc:_sloc _1 ) -# 23175 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc _1 ) +# 35144 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1456 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 23181 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3993 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 35150 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23189,41 +35158,78 @@ module Tables = struct (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; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = me; + MenhirLib.EngineTypes.startp = _startpos_me_; + MenhirLib.EngineTypes.endp = _endpos_me_; + 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 = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + 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 _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let me : (Parsetree.module_expr) = Obj.magic me in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let ext : (string Location.loc option) = Obj.magic ext 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__1_ in - let _v : (Parsetree.module_expr) = let _1 = - let _1 = - let _endpos = _endpos__1_ in - let _startpos = _startpos__1_ in - let _loc = (_startpos, _endpos) in - -# 1453 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let id = mkrhs Ast_helper.hole_txt _loc in - Pmod_extension (id, PStr []) ) -# 23212 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos__1_inlined2_ in + let _v : (Parsetree.module_expr Parsetree.open_infos * string Location.loc option) = let attrs2 = + let _1 = _1_inlined2 in -# 1047 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkmod ~loc:_sloc _1 ) -# 23221 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 35205 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - -# 1456 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _endpos_attrs2_ = _endpos__1_inlined2_ in + let attrs1 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 23227 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 35214 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let override = +# 4405 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Fresh ) +# 35220 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1755 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + ) +# 35233 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23235,24 +35241,88 @@ module Tables = struct (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; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = me; + MenhirLib.EngineTypes.startp = _startpos_me_; + MenhirLib.EngineTypes.endp = _endpos_me_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + 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 x : ( -# 856 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 23248 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic x in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let me : (Parsetree.module_expr) = Obj.magic me in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let ext : (string Location.loc option) = Obj.magic ext in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : (string option) = -# 1402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Some x ) -# 23256 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined3_ in + let _v : (Parsetree.module_expr Parsetree.open_infos * string Location.loc option) = let attrs2 = + let _1 = _1_inlined3 in + +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 35295 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let attrs1 = + let _1 = _1_inlined2 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 35304 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let override = + let _1 = _1_inlined1 in + +# 4406 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Override ) +# 35312 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1755 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + ) +# 35326 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23264,20 +35334,89 @@ module Tables = struct (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; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + 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 _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (Longident.t) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let ext : (string Location.loc option) = Obj.magic ext 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__1_ in - let _v : (string option) = -# 1405 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( None ) -# 23281 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__1_inlined3_ in + let _v : (Longident.t Location.loc Parsetree.open_infos * string Location.loc option) = let attrs2 = + let _1 = _1_inlined3 in + +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 35381 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 35393 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let attrs1 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 35401 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let override = +# 4405 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Fresh ) +# 35407 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1770 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + ) +# 35420 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23300,31 +35439,25 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; 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 = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; - 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; }; }; }; @@ -23333,69 +35466,148 @@ module Tables = struct } = _menhir_stack in let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in let _1_inlined3 : (Longident.t) = Obj.magic _1_inlined3 in - let _5 : unit = Obj.magic _5 in - let _1_inlined2 : ( -# 856 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 23341 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in let ext : (string Location.loc option) = Obj.magic ext in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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__1_inlined4_ in - let _v : (Parsetree.module_substitution * string Location.loc option) = let attrs2 = + let _v : (Longident.t Location.loc Parsetree.open_infos * string Location.loc option) = let attrs2 = let _1 = _1_inlined4 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 23354 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 35482 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in - let body = + let id = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 23366 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 35494 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let uid = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let attrs1 = + let _1 = _1_inlined2 in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 23377 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 35502 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let attrs1 = + let override = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 23385 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4406 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Override ) +# 35510 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1895 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1770 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 + Opn.mk id ~override ~attrs ~loc ~docs, ext ) -# 23399 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 35524 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : ( +# 873 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 35545 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = +# 4175 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 35553 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : ( +# 828 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 35574 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = +# 4176 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 35582 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : ( +# 829 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 35603 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = +# 4177 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 35611 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23413,14 +35625,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -23432,27 +35644,77 @@ module Tables = struct }; } = _menhir_stack in let _4 : unit = Obj.magic _4 in - let s : (Parsetree.signature) = Obj.magic s in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in + let _3 : (string) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 35653 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (string) = +# 4178 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( "."^ _1 ^"(" ^ _3 ^ ")" ) +# 35661 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _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 _4 : unit = Obj.magic _4 in + let _3 : (string) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 35710 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Parsetree.module_type) = let attrs = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 23447 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos = _endpos__4_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1731 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkmty ~loc:_sloc ~attrs (Pmty_signature s) ) -# 23456 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__5_ in + let _v : (string) = +# 4179 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( "."^ _1 ^ "(" ^ _3 ^ ")<-" ) +# 35718 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23465,62 +35727,44 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = mty; - MenhirLib.EngineTypes.startp = _startpos_mty_; - MenhirLib.EngineTypes.endp = _endpos_mty_; + 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 = args; - MenhirLib.EngineTypes.startp = _startpos_args_; - MenhirLib.EngineTypes.endp = _endpos_args_; + 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 mty : (Parsetree.module_type) = Obj.magic mty in let _4 : unit = Obj.magic _4 in - let args : ((Lexing.position * Parsetree.functor_parameter) list) = Obj.magic args in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in + let _3 : (string) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 35760 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_mty_ in - let _v : (Parsetree.module_type) = let attrs = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 23511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos = _endpos_mty_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( wrap_mty_attrs ~loc:_sloc attrs ( - List.fold_left (fun acc (startpos, arg) -> - mkmty ~loc:(startpos, _endpos) (Pmty_functor (arg, acc)) - ) mty args - ) ) -# 23524 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__4_ in + let _v : (string) = +# 4180 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( "."^ _1 ^"[" ^ _3 ^ "]" ) +# 35768 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23538,9 +35782,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__5_; 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 = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _3; @@ -23562,29 +35806,22 @@ module Tables = struct }; }; } = _menhir_stack in - let _5 : (Parsetree.module_expr) = Obj.magic _5 in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _3 : unit = Obj.magic _3 in + let _5 : unit = Obj.magic _5 in + let _4 : unit = Obj.magic _4 in + let _3 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _1 : ( +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 35817 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Parsetree.module_type) = let _4 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 23579 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos = _endpos__5_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1749 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkmty ~loc:_sloc ~attrs:_4 (Pmty_typeof _5) ) -# 23588 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (string) = +# 4181 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( "."^ _1 ^ "[" ^ _3 ^ "]<-" ) +# 35825 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23597,33 +35834,44 @@ 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; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 : unit = Obj.magic _3 in - let _2 : (Parsetree.module_type) = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _4 : unit = Obj.magic _4 in + let _3 : (string) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 35867 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.module_type) = -# 1751 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _2 ) -# 23627 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__4_ in + let _v : (string) = +# 4182 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( "."^ _1 ^"{" ^ _3 ^ "}" ) +# 35875 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23636,26 +35884,51 @@ module Tables = struct 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.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; 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 = _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 _2 : (Parsetree.attribute) = Obj.magic _2 in - let _1 : (Parsetree.module_type) = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let _4 : unit = Obj.magic _4 in + let _3 : (string) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : ( +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 35924 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Parsetree.module_type) = -# 1757 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Mty.attr _1 _2 ) -# 23659 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__5_ in + let _v : (string) = +# 4183 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( "."^ _1 ^ "{" ^ _3 ^ "}<-" ) +# 35932 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23673,41 +35946,18 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Longident.t) = Obj.magic _1 in + let _1 : ( +# 884 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 35953 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.module_type) = let _1 = - let _1 = - let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 23690 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 1760 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pmty_ident _1 ) -# 23696 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1049 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkmty ~loc:_sloc _1 ) -# 23705 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 1773 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 23711 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (string) = +# 4184 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 35961 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23719,57 +35969,20 @@ module Tables = struct (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; - }; - }; - }; + 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.module_type) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 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__4_ in - let _v : (Parsetree.module_type) = let _1 = - let _1 = -# 1762 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pmty_functor(Unit, _4) ) -# 23758 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos__1_ = _endpos__4_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1049 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkmty ~loc:_sloc _1 ) -# 23767 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 1773 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 23773 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__1_ in + let _v : (string) = +# 4185 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( "!" ) +# 35986 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23781,50 +35994,29 @@ module Tables = struct (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 = _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; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _3 : (Parsetree.module_type) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.module_type) = Obj.magic _1 in + let op : ( +# 822 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 36007 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.module_type) = let _1 = - let _1 = -# 1765 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pmty_functor(Named (mknoloc None, _1), _3) ) -# 23813 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1049 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkmty ~loc:_sloc _1 ) -# 23822 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _startpos = _startpos_op_ in + let _endpos = _endpos_op_ in + let _v : (string) = let _1 = +# 4189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( op ) +# 36015 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 1773 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 23828 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 36020 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23836,64 +36028,29 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - 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; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let xs : (Parsetree.with_constraint list) = Obj.magic xs in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.module_type) = Obj.magic _1 in + let op : ( +# 823 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 36041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos_xs_ in - let _v : (Parsetree.module_type) = let _1 = - let _1 = - let _3 = - let xs = -# 253 "" - ( List.rev xs ) -# 23870 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1138 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 23875 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 1767 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pmty_with(_1, _3) ) -# 23881 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos__1_ = _endpos_xs_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1049 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkmty ~loc:_sloc _1 ) -# 23891 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _startpos = _startpos_op_ in + let _endpos = _endpos_op_ in + let _v : (string) = let _1 = +# 4190 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( op ) +# 36049 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 1773 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 23897 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 36054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23906,34 +36063,28 @@ module Tables = struct 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.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Parsetree.extension) = Obj.magic _1 in + let op : ( +# 824 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 36075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Parsetree.module_type) = let _1 = - let _1 = -# 1771 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pmty_extension _1 ) -# 23923 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1049 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkmty ~loc:_sloc _1 ) -# 23931 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _startpos = _startpos_op_ in + let _endpos = _endpos_op_ in + let _v : (string) = let _1 = +# 4191 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( op ) +# 36083 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 1773 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 23937 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 36088 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23945,98 +36096,29 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = typ; - MenhirLib.EngineTypes.startp = _startpos_typ_; - MenhirLib.EngineTypes.endp = _endpos_typ_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; - 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; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let typ : (Parsetree.module_type option) = Obj.magic typ in - let _1_inlined2 : (string) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let ext : (string Location.loc option) = Obj.magic ext in - let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let op : ( +# 825 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 36109 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined3_ in - let _v : (Parsetree.module_type_declaration * string Location.loc option) = let attrs2 = - let _1 = _1_inlined3 in - -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 24006 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 24018 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 24026 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos_op_ in + let _endpos = _endpos_op_ in + let _v : (string) = let _1 = +# 4192 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( op ) +# 36117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 1677 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 - ) -# 24040 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 36122 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24048,105 +36130,29 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = typ; - MenhirLib.EngineTypes.startp = _startpos_typ_; - MenhirLib.EngineTypes.endp = _endpos_typ_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; - 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; - }; - }; - }; - }; - }; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = op; + MenhirLib.EngineTypes.startp = _startpos_op_; + MenhirLib.EngineTypes.endp = _endpos_op_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let typ : (Parsetree.module_type) = Obj.magic typ in - let _6 : unit = Obj.magic _6 in - let _1_inlined2 : (string) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let ext : (string Location.loc option) = Obj.magic ext in - let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let op : ( +# 826 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 36143 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined3_ in - let _v : (Parsetree.module_type_declaration * string Location.loc option) = let attrs2 = - let _1 = _1_inlined3 in - -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 24116 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 24128 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 24136 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos_op_ in + let _endpos = _endpos_op_ in + let _v : (string) = let _1 = +# 4193 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( op ) +# 36151 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 1953 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 - ) -# 24150 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 36156 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24164,14 +36170,19 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Longident.t) = Obj.magic _1 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__1_ in - let _v : (Longident.t) = -# 3885 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 24175 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (string) = let _1 = +# 4194 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("+") +# 36181 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 4186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 36186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24182,14 +36193,26 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Asttypes.mutable_flag) = -# 3966 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Immutable ) -# 24193 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (string) = let _1 = +# 4195 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("+.") +# 36211 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 4186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 36216 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24211,10 +36234,15 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : (Asttypes.mutable_flag) = -# 3967 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Mutable ) -# 24218 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (string) = let _1 = +# 4196 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("+=") +# 36241 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 4186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 36246 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24225,14 +36253,26 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3975 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Immutable, Concrete ) -# 24236 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (string) = let _1 = +# 4197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("-") +# 36271 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 4186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 36276 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24254,10 +36294,15 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3977 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Mutable, Concrete ) -# 24261 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (string) = let _1 = +# 4198 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("-.") +# 36301 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 4186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 36306 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24279,10 +36324,15 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3979 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Immutable, Virtual ) -# 24286 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (string) = let _1 = +# 4199 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("*") +# 36331 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 4186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 36336 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24294,27 +36344,25 @@ module Tables = struct (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; - }; + 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 : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3982 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Mutable, Virtual ) -# 24318 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__1_ in + let _v : (string) = let _1 = +# 4200 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("%") +# 36361 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 4186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 36366 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24326,27 +36374,25 @@ module Tables = struct (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; - }; + 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 : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3982 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Mutable, Virtual ) -# 24350 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__1_ in + let _v : (string) = let _1 = +# 4201 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("=") +# 36391 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 4186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 36396 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24358,27 +36404,25 @@ module Tables = struct (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; - }; + 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 : (string) = 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 : (string) = -# 3937 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _2 ) -# 24382 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__1_ in + let _v : (string) = let _1 = +# 4202 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("<") +# 36421 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 4186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 36426 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24396,28 +36440,19 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 24403 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 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__1_ in - let _v : (string Location.loc list) = let x = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 24415 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _v : (string) = let _1 = +# 4203 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (">") +# 36451 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 221 "" - ( [ x ] ) -# 24421 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 36456 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24429,41 +36464,25 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - 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 xs : (string Location.loc list) = Obj.magic xs in - let _1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 24449 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 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 : (string Location.loc list) = let x = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 24461 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _endpos = _endpos__1_ in + let _v : (string) = let _1 = +# 4204 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("or") +# 36481 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 223 "" - ( x :: xs ) -# 24467 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 36486 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24476,28 +36495,24 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let s : ( -# 842 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string * Location.t * string option) -# 24488 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic s in + let _1 : unit = Obj.magic _1 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 = -# 3933 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let body, _, _ = s in body ) -# 24496 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (string) = let _1 = +# 4205 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("||") +# 36511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 221 "" - ( [ x ] ) -# 24501 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 36516 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24509,36 +36524,25 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - 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 = s; - MenhirLib.EngineTypes.startp = _startpos_s_; - MenhirLib.EngineTypes.endp = _endpos_s_; - 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 xs : (string list) = Obj.magic xs in - let s : ( -# 842 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string * Location.t * string option) -# 24529 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic s in + let _1 : unit = Obj.magic _1 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 = -# 3933 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let body, _, _ = s in body ) -# 24537 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (string) = let _1 = +# 4206 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("&") +# 36541 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 223 "" - ( x :: xs ) -# 24542 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 36546 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24551,24 +36555,24 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let ty : (Parsetree.core_type) = Obj.magic ty in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_ty_ in - let _endpos = _endpos_ty_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3962 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Public ) -# 24567 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (string) = let _1 = +# 4207 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ("&&") +# 36571 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3224 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Ptype_abstract, priv, Some ty) ) -# 24572 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 36576 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24580,32 +36584,25 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; - 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 ty : (Parsetree.core_type) = Obj.magic ty 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_ty_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3963 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Private ) -# 24604 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__1_ in + let _v : (string) = let _1 = +# 4208 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (":=") +# 36601 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3224 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Ptype_abstract, priv, Some ty) ) -# 24609 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 36606 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24618,36 +36615,55 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = cs; - MenhirLib.EngineTypes.startp = _startpos_cs_; - MenhirLib.EngineTypes.endp = _endpos_cs_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let cs : (Parsetree.constructor_declaration list) = Obj.magic cs in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_cs_ in - let _endpos = _endpos_cs_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3962 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Public ) -# 24634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (bool) = +# 4081 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( true ) +# 36631 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let oty = - let _1 = -# 124 "" + { + 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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (bool) = +# 4082 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( false ) +# 36649 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (unit option) = +# 114 "" ( None ) -# 24640 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 3240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 24645 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3228 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Ptype_variant cs, priv, oty) ) -# 24651 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 36667 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24659,44 +36675,20 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = cs; - MenhirLib.EngineTypes.startp = _startpos_cs_; - MenhirLib.EngineTypes.endp = _endpos_cs_; - 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 = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let cs : (Parsetree.constructor_declaration list) = Obj.magic cs 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_cs_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3963 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Private ) -# 24683 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let oty = - let _1 = -# 124 "" - ( None ) -# 24689 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 3240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 24694 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3228 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Ptype_variant cs, priv, oty) ) -# 24700 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let x : unit = 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 : (unit option) = +# 116 "" + ( Some x ) +# 36692 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24707,59 +36699,14 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = cs; - MenhirLib.EngineTypes.startp = _startpos_cs_; - MenhirLib.EngineTypes.endp = _endpos_cs_; - 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 = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let cs : (Parsetree.constructor_declaration list) = Obj.magic cs in - let _2 : unit = Obj.magic _2 in - let x : (Parsetree.core_type) = Obj.magic x in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_cs_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3962 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Public ) -# 24739 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let oty = - let _1 = - let x = -# 191 "" - ( x ) -# 24746 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 126 "" - ( Some x ) -# 24751 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 24757 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3228 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Ptype_variant cs, priv, oty) ) -# 24763 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (unit option) = +# 114 "" + ( None ) +# 36710 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24771,65 +36718,20 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = cs; - MenhirLib.EngineTypes.startp = _startpos_cs_; - MenhirLib.EngineTypes.endp = _endpos_cs_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - 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 = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; + 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 cs : (Parsetree.constructor_declaration list) = Obj.magic cs in - let _1 : unit = Obj.magic _1 in - let _2 : unit = Obj.magic _2 in - let x : (Parsetree.core_type) = Obj.magic x in + let x : unit = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x_ in - let _endpos = _endpos_cs_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3963 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Private ) -# 24809 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let oty = - let _1 = - let x = -# 191 "" - ( x ) -# 24816 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 126 "" + let _endpos = _endpos_x_ in + let _v : (unit option) = +# 116 "" ( Some x ) -# 24821 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 24827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3228 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Ptype_variant cs, priv, oty) ) -# 24833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 36735 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24840,38 +36742,14 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let _3 : unit = Obj.magic _3 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__3_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3962 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Public ) -# 24858 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let oty = - let _1 = -# 124 "" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (string Location.loc option) = +# 114 "" ( None ) -# 24864 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 3240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 24869 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3232 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Ptype_open, priv, oty) ) -# 24875 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 36753 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24884,9 +36762,9 @@ 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 = _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; @@ -24895,32 +36773,37 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _3 : unit = Obj.magic _3 in + let _1_inlined1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 36780 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1_inlined1 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.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3963 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Private ) -# 24907 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let oty = - let _1 = -# 124 "" - ( None ) -# 24913 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _endpos = _endpos__1_inlined1_ in + let _v : (string Location.loc option) = let x = + let x = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 36795 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 3240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 24918 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 183 "" + ( x ) +# 36801 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3232 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Ptype_open, priv, oty) ) -# 24924 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 116 "" + ( Some x ) +# 36807 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24931,59 +36814,14 @@ module Tables = struct }); (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 = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - 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 _3 : unit = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let x : (Parsetree.core_type) = Obj.magic x in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3962 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Public ) -# 24963 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let oty = - let _1 = - let x = -# 191 "" - ( x ) -# 24970 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 126 "" - ( Some x ) -# 24975 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 24981 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3232 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Ptype_open, priv, oty) ) -# 24987 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.core_type option) = +# 114 "" + ( None ) +# 36825 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24996,64 +36834,31 @@ 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 = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - 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 = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _3 : unit = Obj.magic _3 in - let _1 : unit = Obj.magic _1 in - let _2 : unit = Obj.magic _2 in let x : (Parsetree.core_type) = Obj.magic x in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3963 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Private ) -# 25033 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let oty = - let _1 = - let x = -# 191 "" + let _startpos = _startpos__1_ in + let _endpos = _endpos_x_ in + let _v : (Parsetree.core_type option) = let x = +# 183 "" ( x ) -# 25040 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 126 "" - ( Some x ) -# 25045 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 25051 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in +# 36857 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 3232 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Ptype_open, priv, oty) ) -# 25057 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 116 "" + ( Some x ) +# 36862 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25064,52 +36869,14 @@ module Tables = struct }); (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 = ls; - MenhirLib.EngineTypes.startp = _startpos_ls_; - MenhirLib.EngineTypes.endp = _endpos_ls_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - } = _menhir_stack in - let _5 : unit = Obj.magic _5 in - let ls : (Parsetree.label_declaration list) = Obj.magic ls in - let _3 : unit = Obj.magic _3 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__3_ in - let _endpos = _endpos__5_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3962 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Public ) -# 25096 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let oty = - let _1 = -# 124 "" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.core_type option) = +# 114 "" ( None ) -# 25102 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 3240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 25107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3236 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Ptype_record ls, priv, oty) ) -# 25113 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 36880 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25122,57 +36889,31 @@ 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 = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = ls; - MenhirLib.EngineTypes.startp = _startpos_ls_; - MenhirLib.EngineTypes.endp = _endpos_ls_; - 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 = _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 ls : (Parsetree.label_declaration list) = Obj.magic ls in - let _3 : unit = Obj.magic _3 in + let x : (Parsetree.core_type) = Obj.magic x 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 : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3963 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Private ) -# 25159 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos_x_ in + let _v : (Parsetree.core_type option) = let x = +# 183 "" + ( x ) +# 36912 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let oty = - let _1 = -# 124 "" - ( None ) -# 25165 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 3240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 25170 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in -# 3236 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Ptype_record ls, priv, oty) ) -# 25176 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 116 "" + ( Some x ) +# 36917 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25183,73 +36924,14 @@ module Tables = struct }); (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 = ls; - MenhirLib.EngineTypes.startp = _startpos_ls_; - MenhirLib.EngineTypes.endp = _endpos_ls_; - 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 = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - } = _menhir_stack in - let _5 : unit = Obj.magic _5 in - let ls : (Parsetree.label_declaration list) = Obj.magic ls in - let _3 : unit = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let x : (Parsetree.core_type) = Obj.magic x in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos__5_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3962 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Public ) -# 25229 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let oty = - let _1 = - let x = -# 191 "" - ( x ) -# 25236 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 126 "" - ( Some x ) -# 25241 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 25247 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3236 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Ptype_record ls, priv, oty) ) -# 25253 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.expression option) = +# 114 "" + ( None ) +# 36935 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25262,78 +36944,46 @@ 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = ls; - MenhirLib.EngineTypes.startp = _startpos_ls_; - MenhirLib.EngineTypes.endp = _endpos_ls_; - 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 = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - 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 = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - } = _menhir_stack in - let _5 : unit = Obj.magic _5 in - let ls : (Parsetree.label_declaration list) = Obj.magic ls in - let _3 : unit = Obj.magic _3 in - let _1 : unit = Obj.magic _1 in - let _2 : unit = Obj.magic _2 in - let x : (Parsetree.core_type) = Obj.magic x in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos__5_ in - let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3963 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Private ) -# 25313 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let oty = - let _1 = - let x = -# 191 "" - ( x ) -# 25320 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + 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_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 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__1_inlined1_ in + let _v : (Parsetree.expression option) = let x = + let x = + let _1 = _1_inlined1 in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 36970 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 126 "" - ( Some x ) -# 25325 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 36975 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 25331 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 183 "" + ( x ) +# 36981 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3236 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Ptype_record ls, priv, oty) ) -# 25337 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 116 "" + ( Some x ) +# 36987 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25346,24 +36996,24 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = me; - MenhirLib.EngineTypes.startp = _startpos_me_; - MenhirLib.EngineTypes.endp = _endpos_me_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; + 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; @@ -25375,48 +37025,108 @@ module Tables = struct }; }; } = _menhir_stack in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let me : (Parsetree.module_expr) = Obj.magic me in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let ext : (string Location.loc option) = Obj.magic ext in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 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__1_inlined2_ in - let _v : (Parsetree.module_expr Parsetree.open_infos * string Location.loc option) = let attrs2 = - let _1 = _1_inlined2 in - -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _endpos = _endpos_xs_ in + let _v : (Parsetree.expression option) = let x = + let x = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 37046 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 37051 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 37057 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 25392 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined2_ in - let attrs1 = - let _1 = _1_inlined1 in +# 37068 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 37074 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 37094 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 37100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 25401 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 183 "" + ( x ) +# 37106 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let override = -# 4009 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Fresh ) -# 25407 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1696 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 - ) -# 25420 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 116 "" + ( Some x ) +# 37112 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.module_type option) = +# 114 "" + ( None ) +# 37130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25429,87 +37139,49 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = me; - MenhirLib.EngineTypes.startp = _startpos_me_; - MenhirLib.EngineTypes.endp = _endpos_me_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; - 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 _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let me : (Parsetree.module_expr) = Obj.magic me in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let ext : (string Location.loc option) = Obj.magic ext in - let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let x : (Parsetree.module_type) = Obj.magic x 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__1_inlined3_ in - let _v : (Parsetree.module_expr Parsetree.open_infos * string Location.loc option) = let attrs2 = - let _1 = _1_inlined3 in - -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 25482 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let attrs1 = - let _1 = _1_inlined2 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 25491 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let override = - let _1 = _1_inlined1 in - -# 4010 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Override ) -# 25499 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos_x_ in + let _v : (Parsetree.module_type option) = let x = +# 183 "" + ( x ) +# 37162 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 1696 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 - ) -# 25513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 116 "" + ( Some x ) +# 37167 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.pattern option) = +# 114 "" + ( None ) +# 37185 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25522,88 +37194,49 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; - 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 _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let _1_inlined2 : (Longident.t) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let ext : (string Location.loc option) = Obj.magic ext in + let x : (Parsetree.pattern) = Obj.magic x 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__1_inlined3_ in - let _v : (Longident.t Location.loc Parsetree.open_infos * string Location.loc option) = let attrs2 = - let _1 = _1_inlined3 in - -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 25568 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 25580 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 25588 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let override = -# 4009 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Fresh ) -# 25594 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos_x_ in + let _v : (Parsetree.pattern option) = let x = +# 183 "" + ( x ) +# 37217 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1711 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 - ) -# 25607 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 116 "" + ( Some x ) +# 37222 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.expression option) = +# 114 "" + ( None ) +# 37240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25616,98 +37249,146 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined4; - MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.semv = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; - 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 _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in - let _1_inlined3 : (Longident.t) = Obj.magic _1_inlined3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let ext : (string Location.loc option) = Obj.magic ext in - let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let x : (Parsetree.expression) = Obj.magic x 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__1_inlined4_ in - let _v : (Longident.t Location.loc Parsetree.open_infos * string Location.loc option) = let attrs2 = - let _1 = _1_inlined4 in - -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 25669 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined4_ in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 25681 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let attrs1 = - let _1 = _1_inlined2 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 25689 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let override = - let _1 = _1_inlined1 in - -# 4010 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Override ) -# 25697 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos_x_ in + let _v : (Parsetree.expression option) = let x = +# 183 "" + ( x ) +# 37272 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 1711 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 - ) -# 25711 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 116 "" + ( Some x ) +# 37277 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Parsetree.type_constraint option) = +# 114 "" + ( None ) +# 37295 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Parsetree.type_constraint) = 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 : (Parsetree.type_constraint option) = +# 116 "" + ( Some x ) +# 37320 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : ( +# 866 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 37341 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = +# 4417 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 37349 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _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 : unit = Obj.magic _3 in + let _2 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 37383 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = +# 4418 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _2 ) +# 37392 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25719,24 +37400,51 @@ module Tables = struct (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; + 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 = mty; + MenhirLib.EngineTypes.startp = _startpos_mty_; + MenhirLib.EngineTypes.endp = _endpos_mty_; + 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 = me; + MenhirLib.EngineTypes.startp = _startpos_me_; + MenhirLib.EngineTypes.endp = _endpos_me_; + 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 _1 : ( -# 828 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 25732 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let mty : (Parsetree.module_type) = Obj.magic mty in + let _3 : unit = Obj.magic _3 in + let me : (Parsetree.module_expr) = Obj.magic me 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__1_ in - let _v : (string) = -# 3781 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 25740 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__5_ in + let _v : (Parsetree.module_expr) = let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1524 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmod ~loc:_sloc (Pmod_constraint(me, mty)) ) +# 37448 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25748,24 +37456,34 @@ module Tables = struct (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; + 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 = me; + MenhirLib.EngineTypes.startp = _startpos_me_; + MenhirLib.EngineTypes.endp = _endpos_me_; + 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 _1 : ( -# 783 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 25761 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 in + let _3 : unit = Obj.magic _3 in + let me : (Parsetree.module_expr) = Obj.magic me 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__1_ in - let _v : (string) = -# 3782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 25769 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__3_ in + let _v : (Parsetree.module_expr) = +# 1531 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( me (* TODO consider reloc *) ) +# 37487 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25777,24 +37495,79 @@ module Tables = struct (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; + 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _1 : ( -# 784 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 25790 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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__1_ in - let _v : (string) = -# 3783 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 25798 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__5_ in + let _v : (Parsetree.module_expr) = let e = + let _1 = _1_inlined2 in + let e = + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 37543 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 37548 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1554 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( e ) +# 37554 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let attrs = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 37562 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1539 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) +# 37571 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25807,44 +37580,151 @@ module Tables = struct 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.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + 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.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; 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 = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _3 : (string) = Obj.magic _3 in + let _5 : unit = Obj.magic _5 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Location.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let _1 : ( -# 782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 25840 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 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 : (string) = -# 3784 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( "."^ _1 ^"(" ^ _3 ^ ")" ) -# 25848 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__5_ in + let _v : (Parsetree.module_expr) = let e = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined2_, _1_inlined4, _1_inlined3, _1_inlined2) in + let e = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 37651 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 37656 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 37662 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 37673 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 37679 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 37699 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 37705 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1554 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( e ) +# 37711 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let attrs = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 37719 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1539 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) +# 37728 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25862,46 +37742,114 @@ module Tables = struct 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.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + 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_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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 = _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 _5 : unit = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _3 : (string) = Obj.magic _3 in + let _1_inlined3 : (Parsetree.module_type) = Obj.magic _1_inlined3 in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let _1 : ( -# 782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 25897 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 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 : (string) = -# 3785 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( "."^ _1 ^ "(" ^ _3 ^ ")<-" ) -# 25905 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.module_expr) = let e = + let (_endpos__1_inlined1_, _startpos__1_inlined1_, _startpos__1_, _1_inlined1, _2, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _startpos__1_inlined2_, _1_inlined3, _2_inlined1, _1_inlined2) in + let ty = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 37804 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4058 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc (Ptyp_package _1) ) +# 37813 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_ty_ = _endpos__1_inlined1_ in + let e = + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 37821 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 37826 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _startpos_e_ = _startpos__1_ in + let _endpos = _endpos_ty_ in + let _startpos = _startpos_e_ in + let _loc = (_startpos, _endpos) in + +# 1556 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ghexp ~loc:_loc (Pexp_constraint (e, ty)) ) +# 37836 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let attrs = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 37844 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1539 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) +# 37853 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25914,44 +37862,192 @@ module Tables = struct 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.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _3 : (string) = Obj.magic _3 in + let _5 : unit = Obj.magic _5 in + let _1_inlined5 : (Parsetree.module_type) = Obj.magic _1_inlined5 in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Location.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let _1 : ( -# 782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 25947 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 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 : (string) = -# 3786 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( "."^ _1 ^"[" ^ _3 ^ "]" ) -# 25955 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__5_ in + let _v : (Parsetree.module_expr) = let e = + let (_endpos__1_inlined3_, _startpos__1_inlined3_, _startpos__1_, _1_inlined3, _2, _1_inlined2, _1_inlined1, _1) = (_endpos__1_inlined5_, _startpos__1_inlined5_, _startpos__1_inlined2_, _1_inlined5, _2_inlined1, _1_inlined4, _1_inlined3, _1_inlined2) in + let ty = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 37950 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4058 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc (Ptyp_package _1) ) +# 37959 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_ty_ = _endpos__1_inlined3_ in + let e = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 37970 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 37975 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 37981 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 37992 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 37998 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 38018 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 38024 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _startpos_e_ = _startpos__1_ in + let _endpos = _endpos_ty_ in + let _startpos = _startpos_e_ in + let _loc = (_startpos, _endpos) in + +# 1556 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ghexp ~loc:_loc (Pexp_constraint (e, ty)) ) +# 38034 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let attrs = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 38042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1539 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) +# 38051 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25969,46 +38065,150 @@ module Tables = struct 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.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; MenhirLib.EngineTypes.next = { 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; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; 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_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _5 : unit = Obj.magic _5 in + let _1_inlined4 : (Parsetree.module_type) = Obj.magic _1_inlined4 in let _4 : unit = Obj.magic _4 in - let _3 : (string) = Obj.magic _3 in + let _1_inlined3 : (Parsetree.module_type) = Obj.magic _1_inlined3 in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let _1 : ( -# 782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 26004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 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 : (string) = -# 3787 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( "."^ _1 ^ "[" ^ _3 ^ "]<-" ) -# 26012 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.module_expr) = let e = + let (_endpos__1_inlined2_, _startpos__1_inlined2_, _endpos__1_inlined1_, _startpos__1_inlined1_, _startpos__1_, _1_inlined2, _1_inlined1, _2, _1) = (_endpos__1_inlined4_, _startpos__1_inlined4_, _endpos__1_inlined3_, _startpos__1_inlined3_, _startpos__1_inlined2_, _1_inlined4, _1_inlined3, _2_inlined1, _1_inlined2) in + let ty2 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 38141 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4058 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc (Ptyp_package _1) ) +# 38150 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_ty2_ = _endpos__1_inlined2_ in + let ty1 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 38164 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4058 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc (Ptyp_package _1) ) +# 38173 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let e = + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 38180 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 38185 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _startpos_e_ = _startpos__1_ in + let _endpos = _endpos_ty2_ in + let _startpos = _startpos_e_ in + let _loc = (_startpos, _endpos) in + +# 1558 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ghexp ~loc:_loc (Pexp_coerce (e, Some ty1, ty2)) ) +# 38195 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let attrs = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 38203 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1539 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) +# 38212 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26021,44 +38221,228 @@ module Tables = struct 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.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _1_inlined6; + MenhirLib.EngineTypes.startp = _startpos__1_inlined6_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined6_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; 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 = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; + 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _5 : unit = Obj.magic _5 in + let _1_inlined6 : (Parsetree.module_type) = Obj.magic _1_inlined6 in let _4 : unit = Obj.magic _4 in - let _3 : (string) = Obj.magic _3 in + let _1_inlined5 : (Parsetree.module_type) = Obj.magic _1_inlined5 in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Location.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let _1 : ( -# 782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 26054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 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 : (string) = -# 3788 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( "."^ _1 ^"{" ^ _3 ^ "}" ) -# 26062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__5_ in + let _v : (Parsetree.module_expr) = let e = + let (_endpos__1_inlined4_, _startpos__1_inlined4_, _endpos__1_inlined3_, _startpos__1_inlined3_, _startpos__1_, _1_inlined4, _1_inlined3, _2, _1_inlined2, _1_inlined1, _1) = (_endpos__1_inlined6_, _startpos__1_inlined6_, _endpos__1_inlined5_, _startpos__1_inlined5_, _startpos__1_inlined2_, _1_inlined6, _1_inlined5, _2_inlined1, _1_inlined4, _1_inlined3, _1_inlined2) in + let ty2 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined4_, _startpos__1_inlined4_, _1_inlined4) in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 38323 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4058 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc (Ptyp_package _1) ) +# 38332 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_ty2_ = _endpos__1_inlined4_ in + let ty1 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 38346 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4058 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc (Ptyp_package _1) ) +# 38355 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let e = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 38365 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 38370 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 38376 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 38387 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 38393 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 38413 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 38419 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _startpos_e_ = _startpos__1_ in + let _endpos = _endpos_ty2_ in + let _startpos = _startpos_e_ in + let _loc = (_startpos, _endpos) in + +# 1558 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ghexp ~loc:_loc (Pexp_coerce (e, Some ty1, ty2)) ) +# 38429 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let attrs = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 38437 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1539 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) +# 38446 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26076,202 +38460,114 @@ module Tables = struct 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.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + 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_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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 = _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 _5 : unit = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let _3 : (string) = Obj.magic _3 in + let _1_inlined3 : (Parsetree.module_type) = Obj.magic _1_inlined3 in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined2 : (Parsetree.expression) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let _1 : ( -# 782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 26111 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (string) = -# 3789 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( "."^ _1 ^ "{" ^ _3 ^ "}<-" ) -# 26119 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : ( -# 839 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 26140 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = -# 3790 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 26148 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : unit = 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) = -# 3791 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( "!" ) -# 26173 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let op : ( -# 777 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 26194 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (string) = let _1 = -# 3795 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( op ) -# 26202 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 3792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 26207 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let op : ( -# 778 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 26228 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (string) = let _1 = -# 3796 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( op ) -# 26236 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 3792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 26241 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; - MenhirLib.EngineTypes.next = _menhir_stack; - } = _menhir_stack in - let op : ( -# 779 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 26262 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (string) = let _1 = -# 3797 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( op ) -# 26270 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _endpos = _endpos__5_ in + let _v : (Parsetree.module_expr) = let e = + let (_endpos__1_inlined1_, _startpos__1_inlined1_, _startpos__1_, _1_inlined1, _2, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _startpos__1_inlined2_, _1_inlined3, _2_inlined1, _1_inlined2) in + let ty2 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 38522 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4058 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc (Ptyp_package _1) ) +# 38531 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_ty2_ = _endpos__1_inlined1_ in + let e = + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 38539 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 38544 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _startpos_e_ = _startpos__1_ in + let _endpos = _endpos_ty2_ in + let _startpos = _startpos_e_ in + let _loc = (_startpos, _endpos) in + +# 1560 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ghexp ~loc:_loc (Pexp_coerce (e, None, ty2)) ) +# 38554 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let attrs = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 38562 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 26275 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1539 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) +# 38571 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26283,29 +38579,193 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 = _1_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; + 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 op : ( -# 780 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 26296 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic op in + let _5 : unit = Obj.magic _5 in + let _1_inlined5 : (Parsetree.module_type) = Obj.magic _1_inlined5 in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined4 : (Parsetree.attributes) = Obj.magic _1_inlined4 in + let _1_inlined3 : (string Location.loc option) = Obj.magic _1_inlined3 in + let _1_inlined2 : unit = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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_op_ in - let _endpos = _endpos_op_ in - let _v : (string) = let _1 = -# 3798 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( op ) -# 26304 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_ in + let _v : (Parsetree.module_expr) = let e = + let (_endpos__1_inlined3_, _startpos__1_inlined3_, _startpos__1_, _1_inlined3, _2, _1_inlined2, _1_inlined1, _1) = (_endpos__1_inlined5_, _startpos__1_inlined5_, _startpos__1_inlined2_, _1_inlined5, _2_inlined1, _1_inlined4, _1_inlined3, _1_inlined2) in + let ty2 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 38668 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4058 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc (Ptyp_package _1) ) +# 38677 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_ty2_ = _endpos__1_inlined3_ in + let e = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 38688 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 38693 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 38699 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 38710 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 38716 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 38736 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 38742 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _startpos_e_ = _startpos__1_ in + let _endpos = _endpos_ty2_ in + let _startpos = _startpos_e_ in + let _loc = (_startpos, _endpos) in + +# 1560 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ghexp ~loc:_loc (Pexp_coerce (e, None, ty2)) ) +# 38752 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let attrs = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 38760 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__5_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 26309 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1539 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) +# 38769 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26317,29 +38777,27 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = op; - MenhirLib.EngineTypes.startp = _startpos_op_; - MenhirLib.EngineTypes.endp = _endpos_op_; - 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 op : ( -# 781 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 26330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic op 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_op_ in - let _endpos = _endpos_op_ in - let _v : (string) = let _1 = -# 3799 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( op ) -# 26338 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 3792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 26343 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : (Longident.t) = +# 1433 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 38801 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26351,25 +38809,27 @@ module Tables = struct (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; + 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 _1 : unit = Obj.magic _1 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__1_ in - let _v : (string) = let _1 = -# 3800 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("+") -# 26368 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 3792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 26373 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__2_ in + let _v : (Longident.t) = +# 1418 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 38833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26381,25 +38841,27 @@ module Tables = struct (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; + 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 _1 : unit = Obj.magic _1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.core_type) = 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) = let _1 = -# 3801 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("+.") -# 26398 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 3792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 26403 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__2_ in + let _v : (Parsetree.core_type) = +# 1393 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 38865 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26411,25 +38873,27 @@ module Tables = struct (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; + 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 _1 : unit = Obj.magic _1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = 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) = let _1 = -# 3802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("+=") -# 26428 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 3792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 26433 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__2_ in + let _v : (Parsetree.expression) = +# 1398 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 38897 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26441,25 +38905,27 @@ module Tables = struct (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; + 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 _1 : unit = Obj.magic _1 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__1_ in - let _v : (string) = let _1 = -# 3803 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("-") -# 26458 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 3792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 26463 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__2_ in + let _v : (Longident.t) = +# 1423 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 38929 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26471,25 +38937,27 @@ module Tables = struct (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; + 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 _1 : unit = Obj.magic _1 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__1_ in - let _v : (string) = let _1 = -# 3804 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("-.") -# 26488 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 3792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 26493 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__2_ in + let _v : (Longident.t) = +# 1428 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 38961 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26501,25 +38969,27 @@ module Tables = struct (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; + 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 _1 : unit = Obj.magic _1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.module_expr) = 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) = let _1 = -# 3805 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("*") -# 26518 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 3792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 26523 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__2_ in + let _v : (Parsetree.module_expr) = +# 1388 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 38993 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26531,25 +39001,27 @@ module Tables = struct (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; + 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 _1 : unit = Obj.magic _1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.module_type) = 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) = let _1 = -# 3806 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("%") -# 26548 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 3792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 26553 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__2_ in + let _v : (Parsetree.module_type) = +# 1383 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39025 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26561,25 +39033,27 @@ module Tables = struct (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; + 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 _1 : unit = Obj.magic _1 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__1_ in - let _v : (string) = let _1 = -# 3807 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("=") -# 26578 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 3792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 26583 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__2_ in + let _v : (Longident.t) = +# 1408 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39057 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26591,25 +39065,27 @@ module Tables = struct (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; + 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 _1 : unit = Obj.magic _1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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) = let _1 = -# 3808 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("<") -# 26608 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 3792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 26613 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__2_ in + let _v : (Parsetree.pattern) = +# 1403 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39089 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26621,25 +39097,27 @@ module Tables = struct (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; + 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 _1 : unit = Obj.magic _1 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__1_ in - let _v : (string) = let _1 = -# 3809 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (">") -# 26638 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 3792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 26643 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__2_ in + let _v : (Longident.t) = +# 1413 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39121 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26651,25 +39129,46 @@ module Tables = struct (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; + 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 _1 : unit = 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) = let _1 = -# 3810 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("or") -# 26668 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _3 : (Parsetree.pattern) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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 _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _loc__2_ = (_startpos__2_, _endpos__2_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 3164 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkpat_cons ~loc:_sloc _loc__2_ + (ghpat ~loc:_sloc (Ppat_tuple ([None, _1; None, _3], Closed))) ) +# 39166 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 3792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 26673 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3150 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39172 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26681,25 +39180,32 @@ module Tables = struct (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; + 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 _1 : unit = Obj.magic _1 in + let _2 : (Parsetree.attribute) = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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) = let _1 = -# 3811 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("||") -# 26698 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__2_ in + let _v : (Parsetree.pattern) = let _1 = +# 3167 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pat.attr _1 _2 ) +# 39204 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 26703 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3150 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39209 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26717,19 +39223,19 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.pattern) = 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) = let _1 = -# 3812 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("&") -# 26728 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.pattern) = let _1 = +# 3169 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39234 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 26733 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3150 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39239 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26741,25 +39247,70 @@ module Tables = struct (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; + 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 _1 : unit = Obj.magic _1 in + let _1_inlined1 : (string) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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) = let _1 = -# 3813 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ("&&") -# 26758 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = + let _3 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 39286 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3172 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ppat_alias(_1, _3) ) +# 39292 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__1_ = _endpos__1_inlined1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkpat ~loc:_sloc _1 ) +# 39302 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3183 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39308 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 3792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 26763 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3150 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39314 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26777,19 +39328,36 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : unit = Obj.magic _1 in + let _1 : (Parsetree.pattern_desc) = 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) = let _1 = -# 3814 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (":=") -# 26788 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = +# 3176 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39341 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkpat ~loc:_sloc _1 ) +# 39349 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3183 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39355 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 3792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 26793 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3150 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39361 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26801,20 +39369,57 @@ module Tables = struct (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; + 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 _1 : unit = Obj.magic _1 in + let _3 : (Parsetree.pattern) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = 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 : (bool) = -# 3694 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( true ) -# 26818 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__3_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = +# 3180 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ppat_or(_1, _3) ) +# 39402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkpat ~loc:_sloc _1 ) +# 39411 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3183 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39417 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3150 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39423 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26825,14 +39430,61 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _3 : (Parsetree.pattern) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (bool) = -# 3695 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( false ) -# 26836 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.pattern) = let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39473 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 39479 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3152 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkpat_attrs ~loc:_sloc (Ppat_exception _3) _2) +# 39488 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26843,14 +39495,45 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 : (Parsetree.pattern) = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in + let _2 : (Parsetree.pattern) = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (unit option) = -# 114 "" - ( None ) -# 26854 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__4_ in + let _v : (Parsetree.pattern) = let _endpos = _endpos__4_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 3154 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkpat ~loc:_sloc (Ppat_effect(_2,_4)) ) +# 39537 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26863,19 +39546,19 @@ module Tables = struct 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.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : unit = Obj.magic x in + let _1 : (Parsetree.pattern) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : (unit option) = -# 116 "" - ( Some x ) -# 26879 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.pattern) = +# 3188 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39562 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26886,14 +39569,56 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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.pattern) = Obj.magic _2 in + let _1 : (Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (unit option) = -# 114 "" - ( None ) -# 26897 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 39600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3191 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ppat_construct(_1, Some ([], _2)) ) +# 39606 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__1_ = _endpos__2_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkpat ~loc:_sloc _1 ) +# 39616 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39622 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26905,20 +39630,88 @@ module Tables = struct (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; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = pat; + MenhirLib.EngineTypes.startp = _startpos_pat_; + MenhirLib.EngineTypes.endp = _endpos_pat_; + MenhirLib.EngineTypes.next = { + 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + 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 x : unit = Obj.magic x in + let pat : (Parsetree.pattern) = Obj.magic pat in + let _5 : unit = Obj.magic _5 in + let xs : (string Location.loc list) = Obj.magic xs 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_x_ in - let _endpos = _endpos_x_ in - let _v : (unit option) = -# 116 "" - ( Some x ) -# 26922 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos_pat_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let newtypes = +# 2830 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 39684 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let constr = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 39693 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3194 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ppat_construct(constr, Some (newtypes, pat)) ) +# 39699 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__1_ = _endpos_pat_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkpat ~loc:_sloc _1 ) +# 39709 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39715 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26929,14 +39722,44 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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.pattern) = Obj.magic _2 in + let _1 : (string) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (string Location.loc option) = -# 114 "" - ( None ) -# 26940 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = +# 3196 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ppat_variant(_1, Some _2) ) +# 39748 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos__1_ = _endpos__2_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkpat ~loc:_sloc _1 ) +# 39757 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39763 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26949,48 +39772,59 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _1_inlined1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 26967 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1_inlined1 in + let _3 : (Parsetree.pattern) = Obj.magic _3 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 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__1_inlined1_ in - let _v : (string Location.loc option) = let x = - let x = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos__3_ in + let _v : (Parsetree.pattern) = let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 26982 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39813 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 183 "" - ( x ) -# 26988 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 39819 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 116 "" - ( Some x ) -# 26994 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3199 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkpat_attrs ~loc:_sloc (Ppat_lazy _3) _2) +# 39828 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27001,14 +39835,47 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 = _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 : (Parsetree.pattern) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.core_type option) = -# 114 "" - ( None ) -# 27012 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Parsetree.pattern) = let _1 = + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _loc__2_ = (_startpos__2_, _endpos__2_) in + let _sloc = (_symbolstartpos, _endpos) in + +# 3164 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkpat_cons ~loc:_sloc _loc__2_ + (ghpat ~loc:_sloc (Ppat_tuple ([None, _1; None, _3], Closed))) ) +# 39873 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3159 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39879 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27021,9 +39888,9 @@ module Tables = struct 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.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -27032,20 +39899,20 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let x : (Parsetree.core_type) = Obj.magic x in - let _1 : unit = Obj.magic _1 in + let _2 : (Parsetree.attribute) = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_x_ in - let _v : (Parsetree.core_type option) = let x = -# 183 "" - ( x ) -# 27044 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__2_ in + let _v : (Parsetree.pattern) = let _1 = +# 3167 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pat.attr _1 _2 ) +# 39911 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 116 "" - ( Some x ) -# 27049 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3159 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39916 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27056,14 +39923,26 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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.pattern) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.expression option) = -# 114 "" - ( None ) -# 27067 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.pattern) = let _1 = +# 3169 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39941 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 3159 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 39946 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27076,31 +39955,69 @@ module Tables = struct 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.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 x : (Parsetree.expression) = Obj.magic x in - let _1 : unit = Obj.magic _1 in + let _1_inlined1 : (string) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_x_ in - let _v : (Parsetree.expression option) = let x = -# 183 "" - ( x ) -# 27099 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _endpos = _endpos__1_inlined1_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = + let _3 = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 39993 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3172 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ppat_alias(_1, _3) ) +# 39999 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__1_ = _endpos__1_inlined1_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkpat ~loc:_sloc _1 ) +# 40009 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3183 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 40015 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 116 "" - ( Some x ) -# 27104 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3159 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 40021 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27111,14 +40028,43 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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.pattern_desc) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.module_type option) = -# 114 "" - ( None ) -# 27122 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = +# 3176 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 40048 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkpat ~loc:_sloc _1 ) +# 40056 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3183 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 40062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3159 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 40068 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27131,31 +40077,56 @@ module Tables = struct 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.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 x : (Parsetree.module_type) = Obj.magic x in - let _1 : unit = Obj.magic _1 in + let _3 : (Parsetree.pattern) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_x_ in - let _v : (Parsetree.module_type option) = let x = -# 183 "" - ( x ) -# 27154 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _endpos = _endpos__3_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = +# 3180 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ppat_or(_1, _3) ) +# 40109 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos__1_ = _endpos__3_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkpat ~loc:_sloc _1 ) +# 40118 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3183 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 40124 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 116 "" - ( Some x ) -# 27159 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3159 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 40130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27166,14 +40137,52 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 40151 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.pattern option) = -# 114 "" - ( None ) -# 27177 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 40165 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2461 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ppat_var _1 ) +# 40171 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkpat ~loc:_sloc _1 ) +# 40180 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2463 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 40186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27185,32 +40194,35 @@ module Tables = struct (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 = _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 x : (Parsetree.pattern) = Obj.magic x 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_x_ in - let _v : (Parsetree.pattern option) = let x = -# 183 "" - ( x ) -# 27209 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _endpos = _endpos__1_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = +# 2462 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ppat_any ) +# 40212 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkpat ~loc:_sloc _1 ) +# 40220 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 116 "" - ( Some x ) -# 27214 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2463 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 40226 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27221,14 +40233,21 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current 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.structure) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Parsetree.expression option) = -# 114 "" - ( None ) -# 27232 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.payload) = +# 4530 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( PStr _1 ) +# 40251 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27241,9 +40260,9 @@ module Tables = struct 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.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -27252,38 +40271,15 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let x : (Parsetree.expression) = Obj.magic x in + let _2 : (Parsetree.signature) = 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_x_ in - let _v : (Parsetree.expression option) = let x = -# 183 "" - ( x ) -# 27264 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 116 "" - ( Some x ) -# 27269 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : ((Parsetree.core_type option * Parsetree.core_type option) option) = -# 114 "" - ( None ) -# 27287 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__2_ in + let _v : (Parsetree.payload) = +# 4531 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( PSig _2 ) +# 40283 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27295,20 +40291,27 @@ module Tables = struct (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; + 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 x : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic x in + let _2 : (Parsetree.core_type) = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in - let _v : ((Parsetree.core_type option * Parsetree.core_type option) option) = -# 116 "" - ( Some x ) -# 27312 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__2_ in + let _v : (Parsetree.payload) = +# 4532 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( PTyp _2 ) +# 40315 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27320,24 +40323,27 @@ module Tables = struct (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; + 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 _1 : ( -# 821 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 27333 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 in + let _2 : (Parsetree.pattern) = 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__1_ in - let _v : (string) = -# 4021 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 27341 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__2_ in + let _v : (Parsetree.payload) = +# 4533 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( PPat (_2, None) ) +# 40347 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27350,37 +40356,40 @@ 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; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 _4 : (Parsetree.expression) = Obj.magic _4 in let _3 : unit = Obj.magic _3 in - let _2 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - (string) -# 27375 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _2 in + let _2 : (Parsetree.pattern) = 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) = -# 4022 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _2 ) -# 27384 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__4_ in + let _v : (Parsetree.payload) = +# 4534 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( PPat (_2, Some _4) ) +# 40393 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27392,51 +40401,20 @@ module Tables = struct (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 = mty; - MenhirLib.EngineTypes.startp = _startpos_mty_; - MenhirLib.EngineTypes.endp = _endpos_mty_; - 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 = me; - MenhirLib.EngineTypes.startp = _startpos_me_; - MenhirLib.EngineTypes.endp = _endpos_me_; - 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 mty : (Parsetree.module_type) = Obj.magic mty in - let _3 : unit = Obj.magic _3 in - let me : (Parsetree.module_expr) = Obj.magic me in - let _1 : unit = Obj.magic _1 in + 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.core_type) = 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.module_expr) = let _endpos = _endpos__5_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1465 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkmod ~loc:_sloc (Pmod_constraint(me, mty)) ) -# 27440 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__1_ in + let _v : (Parsetree.core_type) = +# 3792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 40418 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27454,28 +40432,95 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = me; - MenhirLib.EngineTypes.startp = _startpos_me_; - MenhirLib.EngineTypes.endp = _endpos_me_; + 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.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _3 : unit = Obj.magic _3 in - let me : (Parsetree.module_expr) = Obj.magic me in - let _1 : unit = Obj.magic _1 in + let _3 : (Parsetree.core_type) = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let xs : (string Location.loc list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in + let _startpos = _startpos_xs_ in let _endpos = _endpos__3_ in - let _v : (Parsetree.module_expr) = -# 1472 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( me (* TODO consider reloc *) ) -# 27479 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let _1 = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 40461 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1144 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 40466 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3784 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 40472 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3788 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_poly(_1, _3) ) +# 40478 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__3_, _startpos_xs_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc _1 ) +# 40488 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3794 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 40494 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.core_type) = 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.core_type) = let _1 = +# 3823 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 40519 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 3792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 40524 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27488,63 +40533,75 @@ 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + 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 = _; - 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; - }; - }; + 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 _5 : unit = Obj.magic _5 in - let e : (Parsetree.expression) = Obj.magic e in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let _1 : (Parsetree.core_type) = Obj.magic _1 in let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let xs : (string Location.loc list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Parsetree.module_expr) = let e = -# 1495 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( e ) -# 27532 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let attrs = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _startpos = _startpos_xs_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.core_type) = let _1 = + let _1 = + let _3 = +# 3823 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 40565 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let _1 = + let _1 = + let xs = +# 253 "" + ( List.rev xs ) +# 40572 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1144 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 40577 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3784 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 27539 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 40583 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3788 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Ptyp_poly(_1, _3) ) +# 40589 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _startpos__1_ = _startpos_xs_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc _1 ) +# 40599 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos__5_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1480 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) -# 27548 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3794 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 40605 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27557,96 +40614,43 @@ 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 = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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 = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; - 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; - }; - }; - }; + 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 _1_inlined2 : (Parsetree.module_type) = Obj.magic _1_inlined2 in - let _2_inlined1 : unit = Obj.magic _2_inlined1 in - let e : (Parsetree.expression) = Obj.magic e in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in + let _4 : unit = Obj.magic _4 in + let _3 : (Parsetree.payload) = Obj.magic _3 in + let _2 : (string Location.loc) = 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 : (Parsetree.module_expr) = let e = - let (_endpos__1_, _startpos__1_, _1, _2) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2, _2_inlined1) in - let ty = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3669 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in - let descr = Ptyp_package (lid, cstrs) in - mktyp ~loc:_sloc ~attrs descr ) -# 27623 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos_ty_ = _endpos__1_ in - let _endpos = _endpos_ty_ in - let _startpos = _startpos_e_ in - let _loc = (_startpos, _endpos) in - -# 1497 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( ghexp ~loc:_loc (Pexp_constraint (e, ty)) ) -# 27633 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let attrs = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 27641 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos = _endpos__5_ in + let _endpos = _endpos__4_ in + let _v : (Parsetree.attribute) = let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1480 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) -# 27650 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4491 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mk_attr ~loc:(make_loc _sloc) _2 _3 ) +# 40654 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27659,34 +40663,34 @@ 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 = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = prim; + MenhirLib.EngineTypes.startp = _startpos_prim_; + MenhirLib.EngineTypes.endp = _endpos_prim_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _7; + MenhirLib.EngineTypes.startp = _startpos__7_; + MenhirLib.EngineTypes.endp = _endpos__7_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; 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 = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined1; @@ -27694,9 +40698,9 @@ module Tables = struct 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.semv = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -27712,70 +40716,80 @@ module Tables = struct }; }; } = _menhir_stack in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let prim : (string list) = Obj.magic prim in + let _7 : unit = Obj.magic _7 in + let ty : (Parsetree.core_type) = Obj.magic ty in let _5 : unit = Obj.magic _5 in - let _1_inlined3 : (Parsetree.module_type) = Obj.magic _1_inlined3 in - let _4 : unit = Obj.magic _4 in - let _1_inlined2 : (Parsetree.module_type) = Obj.magic _1_inlined2 in - let _2_inlined1 : unit = Obj.magic _2_inlined1 in - let e : (Parsetree.expression) = Obj.magic e in + let _1_inlined2 : (string) = Obj.magic _1_inlined2 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in + let ext : (string Location.loc option) = Obj.magic ext 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 : (Parsetree.module_expr) = let e = - let (_endpos__1_inlined1_, _startpos__1_inlined1_, _endpos__1_, _startpos__1_, _1_inlined1, _1, _2) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined3, _1_inlined2, _2_inlined1) in - let ty2 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3669 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in - let descr = Ptyp_package (lid, cstrs) in - mktyp ~loc:_sloc ~attrs descr ) -# 27740 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos_ty2_ = _endpos__1_inlined1_ in - let ty1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3669 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in - let descr = Ptyp_package (lid, cstrs) in - mktyp ~loc:_sloc ~attrs descr ) -# 27753 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos = _endpos_ty2_ in - let _startpos = _startpos_e_ in - let _loc = (_startpos, _endpos) in + let _endpos = _endpos__1_inlined3_ in + let _v : (Parsetree.value_description * string Location.loc option) = let attrs2 = + let _1 = _1_inlined3 in -# 1499 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( ghexp ~loc:_loc (Pexp_coerce (e, Some ty1, ty2)) ) -# 27762 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 40737 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let attrs = + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _1 _sloc ) +# 40749 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let attrs1 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 27770 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 40757 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos__5_ in + let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1480 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) -# 27779 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3407 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 ) +# 40770 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Asttypes.private_flag) = let _1 = +# 4358 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Public ) +# 40788 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 4355 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 40793 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27787,97 +40801,93 @@ module Tables = struct (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 = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; - 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 = e; - MenhirLib.EngineTypes.startp = _startpos_e_; - MenhirLib.EngineTypes.endp = _endpos_e_; - 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; - }; - }; - }; - }; - }; - }; + 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 _1_inlined2 : (Parsetree.module_type) = Obj.magic _1_inlined2 in - let _2_inlined1 : unit = Obj.magic _2_inlined1 in - let e : (Parsetree.expression) = Obj.magic e in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 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__5_ in - let _v : (Parsetree.module_expr) = let e = - let (_endpos__1_, _startpos__1_, _1, _2) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2, _2_inlined1) in - let ty2 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3669 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in - let descr = Ptyp_package (lid, cstrs) in - mktyp ~loc:_sloc ~attrs descr ) -# 27854 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos_ty2_ = _endpos__1_ in - let _endpos = _endpos_ty2_ in - let _startpos = _startpos_e_ in - let _loc = (_startpos, _endpos) in - -# 1501 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( ghexp ~loc:_loc (Pexp_coerce (e, None, ty2)) ) -# 27864 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let attrs = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 27872 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos = _endpos__5_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos__1_ in + let _v : (Asttypes.private_flag) = let _1 = +# 4359 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Private ) +# 40818 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 1480 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) -# 27881 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4355 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 40823 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = +# 4381 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Public, Concrete ) +# 40841 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : unit = 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.private_flag * Asttypes.virtual_flag) = +# 4382 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Private, Concrete ) +# 40866 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : unit = 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.private_flag * Asttypes.virtual_flag) = +# 4383 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Public, Virtual ) +# 40891 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27902,14 +40912,14 @@ module Tables = struct }; } = _menhir_stack in let _2 : unit = Obj.magic _2 in - let _1 : (Longident.t) = Obj.magic _1 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 : (Longident.t) = -# 1374 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 27913 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = +# 4384 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Private, Virtual ) +# 40923 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27934,14 +40944,14 @@ module Tables = struct }; } = _menhir_stack in let _2 : unit = Obj.magic _2 in - let _1 : (Longident.t) = Obj.magic _1 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 : (Longident.t) = -# 1359 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 27945 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = +# 4385 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Private, Virtual ) +# 40955 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27952,28 +40962,14 @@ module Tables = struct }); (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 : (Parsetree.core_type) = Obj.magic _1 in + let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.core_type) = -# 1334 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 27977 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in + let _endpos = _startpos in + let _v : (Asttypes.rec_flag) = +# 4336 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Nonrecursive ) +# 40973 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27985,27 +40981,20 @@ module Tables = struct (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; - }; + 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 : (Parsetree.expression) = Obj.magic _1 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) = -# 1339 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 28009 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__1_ in + let _v : (Asttypes.rec_flag) = +# 4337 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Recursive ) +# 40998 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28017,27 +41006,26 @@ module Tables = struct (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; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = fields; + MenhirLib.EngineTypes.startp = _startpos_fields_; + MenhirLib.EngineTypes.endp = _endpos_fields_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : unit = Obj.magic _2 in - let _1 : (Longident.t) = Obj.magic _1 in + let fields : ((Longident.t Location.loc * Parsetree.expression) list) = Obj.magic fields in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Longident.t) = -# 1364 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 28041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_fields_ in + let _endpos = _endpos_fields_ in + let _v : (Parsetree.expression option * + (Longident.t Location.loc * Parsetree.expression) list) = let eo = +# 124 "" + ( None ) +# 41024 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 3082 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( eo, fields ) +# 41029 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28050,26 +41038,46 @@ module Tables = struct 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.semv = fields; + MenhirLib.EngineTypes.startp = _startpos_fields_; + MenhirLib.EngineTypes.endp = _endpos_fields_; 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 = x; + MenhirLib.EngineTypes.startp = _startpos_x_; + MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; } = _menhir_stack in + let fields : ((Longident.t Location.loc * Parsetree.expression) list) = Obj.magic fields in let _2 : unit = Obj.magic _2 in - let _1 : (Longident.t) = Obj.magic _1 in + let x : (Parsetree.expression) = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Longident.t) = -# 1369 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 28073 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_x_ in + let _endpos = _endpos_fields_ in + let _v : (Parsetree.expression option * + (Longident.t Location.loc * Parsetree.expression) list) = let eo = + let x = +# 191 "" + ( x ) +# 41070 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 126 "" + ( Some x ) +# 41075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3082 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( eo, fields ) +# 41081 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28081,27 +41089,30 @@ module Tables = struct (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; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.module_expr) = Obj.magic _1 in + let d : (Mlx_ocaml_parsing.Ast_helper.str * Mlx_ocaml_parsing.Ast_helper.str list * + Parsetree.constructor_arguments * Parsetree.core_type option * + Parsetree.attributes * Warnings.loc * Mlx_ocaml_parsing.Docstrings.info) = Obj.magic d in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.module_expr) = -# 1329 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 28105 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_d_ in + let _endpos = _endpos_d_ in + let _v : (Parsetree.constructor_declaration list) = let x = +# 3604 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let cid, vars, args, res, attrs, loc, info = d in + Type.constructor cid ~vars ~args ?res ~attrs ~loc ~info + ) +# 41111 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1275 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [x] ) +# 41116 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28113,27 +41124,30 @@ module Tables = struct (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; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.module_type) = Obj.magic _1 in + let d : (Mlx_ocaml_parsing.Ast_helper.str * Mlx_ocaml_parsing.Ast_helper.str list * + Parsetree.constructor_arguments * Parsetree.core_type option * + Parsetree.attributes * Warnings.loc * Mlx_ocaml_parsing.Docstrings.info) = Obj.magic d in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.module_type) = -# 1324 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 28137 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_d_ in + let _endpos = _endpos_d_ in + let _v : (Parsetree.constructor_declaration list) = let x = +# 3604 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let cid, vars, args, res, attrs, loc, info = d in + Type.constructor cid ~vars ~args ?res ~attrs ~loc ~info + ) +# 41146 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1278 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [x] ) +# 41151 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28146,26 +41160,36 @@ module Tables = struct 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.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : unit = Obj.magic _2 in - let _1 : (Longident.t) = Obj.magic _1 in + let d : (Mlx_ocaml_parsing.Ast_helper.str * Mlx_ocaml_parsing.Ast_helper.str list * + Parsetree.constructor_arguments * Parsetree.core_type option * + Parsetree.attributes * Warnings.loc * Mlx_ocaml_parsing.Docstrings.info) = Obj.magic d in + let xs : (Parsetree.constructor_declaration list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Longident.t) = -# 1349 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 28169 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_xs_ in + let _endpos = _endpos_d_ in + let _v : (Parsetree.constructor_declaration list) = let x = +# 3604 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let cid, vars, args, res, attrs, loc, info = d in + Type.constructor cid ~vars ~args ?res ~attrs ~loc ~info + ) +# 41188 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1282 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( x :: xs ) +# 41193 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28177,27 +41201,37 @@ module Tables = struct (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; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let d : (Mlx_ocaml_parsing.Ast_helper.str * Mlx_ocaml_parsing.Ast_helper.str list * + Parsetree.constructor_arguments * Parsetree.core_type option * + Parsetree.attributes * Warnings.loc * Mlx_ocaml_parsing.Docstrings.info) = Obj.magic d in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__2_ in - let _v : (Parsetree.pattern) = -# 1344 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 28201 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_d_ in + let _endpos = _endpos_d_ in + let _v : (Parsetree.extension_constructor list) = let x = + let _1 = +# 3722 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let cid, vars, args, res, attrs, loc, info = d in + Te.decl cid ~vars ~args ?res ~attrs ~loc ~info + ) +# 41224 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 3716 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 41229 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1275 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [x] ) +# 41235 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28209,27 +41243,25 @@ module Tables = struct (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; - }; + 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 : (Longident.t) = Obj.magic _1 in + let _1 : (Parsetree.extension_constructor) = 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 : (Longident.t) = -# 1354 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 28233 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__1_ in + let _v : (Parsetree.extension_constructor list) = let x = +# 3718 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 41260 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1275 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [x] ) +# 41265 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28241,45 +41273,67 @@ module Tables = struct (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 = _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; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _3 : (Parsetree.pattern) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let d : (Mlx_ocaml_parsing.Ast_helper.str * Mlx_ocaml_parsing.Ast_helper.str list * + Parsetree.constructor_arguments * Parsetree.core_type option * + Parsetree.attributes * Warnings.loc * Mlx_ocaml_parsing.Docstrings.info) = Obj.magic d 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 _endpos = _endpos__3_ in - let _symbolstartpos = _startpos__1_ in - let _loc__2_ = (_startpos__2_, _endpos__2_) in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos_d_ in + let _endpos = _endpos_d_ in + let _v : (Parsetree.extension_constructor list) = let x = + let _1 = +# 3722 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let cid, vars, args, res, attrs, loc, info = d in + Te.decl cid ~vars ~args ?res ~attrs ~loc ~info + ) +# 41296 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkpat_cons ~loc:_sloc _loc__2_ (ghpat ~loc:_sloc (Ppat_tuple[_1;_3])) ) -# 28277 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3716 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 41301 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2937 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1278 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [x] ) +# 41307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.extension_constructor) = 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.extension_constructor list) = let x = +# 3718 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 28283 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 41332 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1278 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [x] ) +# 41337 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28292,31 +41346,43 @@ module Tables = struct 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.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _2 : (Parsetree.attribute) = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let d : (Mlx_ocaml_parsing.Ast_helper.str * Mlx_ocaml_parsing.Ast_helper.str list * + Parsetree.constructor_arguments * Parsetree.core_type option * + Parsetree.attributes * Warnings.loc * Mlx_ocaml_parsing.Docstrings.info) = Obj.magic d in + let xs : (Parsetree.extension_constructor list) = Obj.magic xs 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 = -# 2951 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pat.attr _1 _2 ) -# 28315 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 2937 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _startpos = _startpos_xs_ in + let _endpos = _endpos_d_ in + let _v : (Parsetree.extension_constructor list) = let x = + let _1 = +# 3722 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let cid, vars, args, res, attrs, loc, info = d in + Te.decl cid ~vars ~args ?res ~attrs ~loc ~info + ) +# 41375 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 3716 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 28320 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 41380 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1282 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( x :: xs ) +# 41386 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28328,25 +41394,32 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 _1 : (Parsetree.pattern) = Obj.magic _1 in + let _1 : (Parsetree.extension_constructor) = Obj.magic _1 in + let xs : (Parsetree.extension_constructor list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in + let _startpos = _startpos_xs_ in let _endpos = _endpos__1_ in - let _v : (Parsetree.pattern) = let _1 = -# 2953 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _v : (Parsetree.extension_constructor list) = let x = +# 3718 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 28345 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 41418 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2937 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 28350 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1282 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( x :: xs ) +# 41423 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28357,71 +41430,31 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - 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 _1_inlined1 : (string) = Obj.magic _1_inlined1 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_inlined1_ in - let _v : (Parsetree.pattern) = let _1 = - let _1 = - let _1 = - let _3 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 28397 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 2956 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ppat_alias(_1, _3) ) -# 28403 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos__1_ = _endpos__1_inlined1_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkpat ~loc:_sloc _1 ) -# 28413 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 2967 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 28419 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let d : (Mlx_ocaml_parsing.Ast_helper.str * Mlx_ocaml_parsing.Ast_helper.str list * + Parsetree.constructor_arguments * Parsetree.core_type option * + Parsetree.attributes * Warnings.loc * Mlx_ocaml_parsing.Docstrings.info) = Obj.magic d in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_d_ in + let _endpos = _endpos_d_ in + let _v : (Parsetree.extension_constructor list) = let x = +# 3722 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let cid, vars, args, res, attrs, loc, info = d in + Te.decl cid ~vars ~args ?res ~attrs ~loc ~info + ) +# 41453 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 2937 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 28425 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1275 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [x] ) +# 41458 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28434,41 +41467,29 @@ module Tables = struct 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.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Parsetree.pattern list) = Obj.magic _1 in + let d : (Mlx_ocaml_parsing.Ast_helper.str * Mlx_ocaml_parsing.Ast_helper.str list * + Parsetree.constructor_arguments * Parsetree.core_type option * + Parsetree.attributes * Warnings.loc * Mlx_ocaml_parsing.Docstrings.info) = Obj.magic d in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Parsetree.pattern) = let _1 = - let _1 = - let _1 = -# 2960 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ppat_tuple(List.rev _1) ) -# 28452 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkpat ~loc:_sloc _1 ) -# 28460 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 2967 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 28466 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _startpos = _startpos_d_ in + let _endpos = _endpos_d_ in + let _v : (Parsetree.extension_constructor list) = let x = +# 3722 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let cid, vars, args, res, attrs, loc, info = d in + Te.decl cid ~vars ~args ?res ~attrs ~loc ~info + ) +# 41488 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 2937 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 28472 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1278 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [x] ) +# 41493 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28481,9 +41502,51 @@ 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 = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + 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 d : (Mlx_ocaml_parsing.Ast_helper.str * Mlx_ocaml_parsing.Ast_helper.str list * + Parsetree.constructor_arguments * Parsetree.core_type option * + Parsetree.attributes * Warnings.loc * Mlx_ocaml_parsing.Docstrings.info) = Obj.magic d in + let xs : (Parsetree.extension_constructor list) = Obj.magic xs in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_xs_ in + let _endpos = _endpos_d_ in + let _v : (Parsetree.extension_constructor list) = let x = +# 3722 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + let cid, vars, args, res, attrs, loc, info = d in + Te.decl cid ~vars ~args ?res ~attrs ~loc ~info + ) +# 41530 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1282 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( x :: xs ) +# 41535 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -28491,46 +41554,42 @@ module Tables = struct 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.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let _3 : (Parsetree.pattern) = Obj.magic _3 in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let xs : ((string option * Parsetree.expression) list) = Obj.magic xs 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 _startpos = _startpos_xs_ in + let _endpos = _endpos__1_ in + let _v : ((string option * Parsetree.expression) list) = let x = let _1 = let _1 = -# 2964 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ppat_or(_1, _3) ) -# 28513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 41576 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkpat ~loc:_sloc _1 ) -# 28522 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 41581 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2967 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 28528 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 41587 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2937 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 28534 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3051 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( x :: xs ) +# 41593 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28543,9 +41602,9 @@ 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 = xs_inlined1; + MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1_inlined2; @@ -28557,45 +41616,112 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1; MenhirLib.EngineTypes.startp = _startpos__1_; MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; } = _menhir_stack in - let _3 : (Parsetree.pattern) = Obj.magic _3 in + let xs_inlined1 : (Parsetree.case list) = Obj.magic xs_inlined1 in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in + let _2 : unit = Obj.magic _2 in + let xs : ((string option * Parsetree.expression) list) = Obj.magic xs 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 _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _startpos = _startpos_xs_ in + let _endpos = _endpos_xs_inlined1_ in + let _v : ((string option * Parsetree.expression) list) = let x = + let (_endpos_xs_, xs) = (_endpos_xs_inlined1_, xs_inlined1) in + let _1 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 41659 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 41664 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 41670 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 28584 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 41681 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 41687 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 41707 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 41713 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 28590 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 41719 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos__3_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2939 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkpat_attrs ~loc:_sloc (Ppat_exception _3) _2) -# 28599 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3051 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( x :: xs ) +# 41725 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28608,33 +41734,52 @@ 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_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; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let _3 : (Parsetree.pattern) = Obj.magic _3 in + let _2_inlined1 : (Parsetree.expression) = Obj.magic _2_inlined1 in + let _1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 41765 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1 in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern list) = Obj.magic _1 in + let xs : ((string option * Parsetree.expression) list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.pattern list) = -# 3070 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _3 :: _1 ) -# 28638 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_xs_ in + let _endpos = _endpos__2_inlined1_ in + let _v : ((string option * Parsetree.expression) list) = let x = + let _2 = _2_inlined1 in + +# 3037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 41777 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3051 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( x :: xs ) +# 41783 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28647,33 +41792,53 @@ 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; }; }; } = _menhir_stack in - let _3 : (Parsetree.pattern) = Obj.magic _3 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 41822 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _1 : unit = Obj.magic _1 in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let xs : ((string option * Parsetree.expression) list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.pattern list) = -# 3071 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [_3; _1] ) -# 28677 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_xs_ in + let _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.expression) list) = let x = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkexpvar ~loc label ) +# 41836 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3051 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( x :: xs ) +# 41842 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28686,33 +41851,77 @@ 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 = _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 = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; }; } = _menhir_stack in - let _3 : (Parsetree.pattern) = Obj.magic _3 in + let _5 : unit = Obj.magic _5 in + let c : (Parsetree.type_constraint) = Obj.magic c in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 41901 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern list) = Obj.magic _1 in + let xs : ((string option * Parsetree.expression) list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.pattern list) = -# 3070 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _3 :: _1 ) -# 28716 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_xs_ in + let _endpos = _endpos__5_ in + let _v : ((string option * Parsetree.expression) list) = let x = + let (_startpos__2_, _2) = (_startpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__5_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some label, + mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_label_ label) c ) +# 41919 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3051 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( x :: xs ) +# 41925 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28725,9 +41934,9 @@ 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 = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -28742,101 +41951,48 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : (Parsetree.pattern) = Obj.magic _3 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = 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 list) = -# 3071 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [_3; _1] ) -# 28755 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.pattern) = 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.pattern) = -# 2972 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 28780 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.pattern) = Obj.magic _2 in - let _1 : (Longident.t) = Obj.magic _1 in + let _1 : (Parsetree.expression) = 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 _endpos = _endpos__1_inlined1_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _1 = _1_inlined1 in let _1 = - let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 28818 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 41967 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 2975 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ppat_construct(_1, Some ([], _2)) ) -# 28824 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 41972 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos__1_ = _endpos__2_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkpat ~loc:_sloc _1 ) -# 28834 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 41978 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - -# 2981 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let x1 = + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 28840 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 41985 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 41990 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3056 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ x2; None, x1 ] ) +# 41996 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28849,24 +42005,24 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = pat; - MenhirLib.EngineTypes.startp = _startpos_pat_; - MenhirLib.EngineTypes.endp = _endpos_pat_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + 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; @@ -28884,52 +42040,103 @@ module Tables = struct }; }; } = _menhir_stack in - let pat : (Parsetree.pattern) = Obj.magic pat in - let _5 : unit = Obj.magic _5 in - let xs : (string Location.loc list) = Obj.magic xs in - let _3 : unit = Obj.magic _3 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 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 _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos_pat_ in - let _v : (Parsetree.pattern) = let _1 = + let _endpos = _endpos_xs_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in let _1 = - let newtypes = -# 2723 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 42062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 28902 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let constr = - let _endpos = _endpos__1_ in +# 42067 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 42073 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 42084 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 42090 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 28911 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 42110 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2978 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ppat_construct(constr, Some (newtypes, pat)) ) -# 28917 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 42116 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos__1_ = _endpos_pat_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkpat ~loc:_sloc _1 ) -# 28927 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 42122 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let x1 = + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 42129 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 42134 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2981 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 28933 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3056 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ x2; None, x1 ] ) +# 42140 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28942,42 +42149,64 @@ module Tables = struct 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.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_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 = _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 _2 : (Parsetree.pattern) = Obj.magic _2 in - let _1 : (string) = Obj.magic _1 in + let _2_inlined1 : (Parsetree.expression) = Obj.magic _2_inlined1 in + let _1_inlined1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 42180 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = 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 _endpos = _endpos__2_inlined1_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let (_2, _1) = (_2_inlined1, _1_inlined1) in + +# 3037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 42192 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let x1 = let _1 = -# 2980 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ppat_variant(_1, Some _2) ) -# 28966 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 42199 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos__1_ = _endpos__2_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkpat ~loc:_sloc _1 ) -# 28975 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 42204 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2981 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 28981 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3056 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ x2; None, x1 ] ) +# 42210 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28990,19 +42219,19 @@ 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + 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; @@ -29013,36 +42242,43 @@ module Tables = struct }; }; } = _menhir_stack in - let _3 : (Parsetree.pattern) = Obj.magic _3 in - let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in - let _1 : unit = Obj.magic _1 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 42249 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = 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 _2 = - let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in - let _2 = - let _1 = _1_inlined1 in - -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 29031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _1 = _1_inlined1 in + let _loc_label_ = (_startpos_label_, _endpos_label_) in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1, _2 ) -# 29037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkexpvar ~loc label ) +# 42264 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let x1 = + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 42271 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 42276 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos__3_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2983 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkpat_attrs ~loc:_sloc (Ppat_lazy _3) _2) -# 29046 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3056 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ x2; None, x1 ] ) +# 42282 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29055,44 +42291,89 @@ 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 = _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 = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 _3 : (Parsetree.pattern) = Obj.magic _3 in + let _5 : unit = Obj.magic _5 in + let c : (Parsetree.type_constraint) = Obj.magic c in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 42341 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let _1 : (Parsetree.expression) = 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 _endpos = _endpos__3_ in - let _symbolstartpos = _startpos__1_ in - let _loc__2_ = (_startpos__2_, _endpos__2_) in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos__5_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let (_startpos__2_, _2, _1) = (_startpos__2_inlined1_, _2_inlined1, _1_inlined1) in + let _endpos = _endpos__5_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in -# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkpat_cons ~loc:_sloc _loc__2_ (ghpat ~loc:_sloc (Ppat_tuple[_1;_3])) ) -# 29090 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some label, + mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_label_ label) c ) +# 42359 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - -# 2944 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let x1 = + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 29096 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 42366 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 42371 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3056 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ x2; None, x1 ] ) +# 42377 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29105,61 +42386,138 @@ module Tables = struct 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.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; 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 = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _2 : (Parsetree.attribute) = Obj.magic _2 in - let _1 : (Parsetree.pattern) = 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 = -# 2951 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pat.attr _1 _2 ) -# 29128 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 2944 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 29133 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.pattern) = Obj.magic _1 in + let _1_inlined3 : (Parsetree.expression) = Obj.magic _1_inlined3 in + let _2 : unit = Obj.magic _2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 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__1_ in - let _v : (Parsetree.pattern) = let _1 = -# 2953 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _endpos = _endpos__1_inlined3_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _1 = _1_inlined3 in + let _1 = + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 29158 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in +# 42440 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 42445 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 42451 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let x1 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 42461 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 42466 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 42472 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 42483 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 42489 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 42509 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 42515 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 2944 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 29163 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3056 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ x2; None, x1 ] ) +# 42521 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29172,69 +42530,211 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = xs_inlined1; + MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_xs_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_inlined5; + MenhirLib.EngineTypes.startp = _startpos__1_inlined5_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined5_; 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 = _1_inlined4; + MenhirLib.EngineTypes.startp = _startpos__1_inlined4_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _1_inlined1 : (string) = Obj.magic _1_inlined1 in + let xs_inlined1 : (Parsetree.case list) = Obj.magic xs_inlined1 in + let _1_inlined5 : (Parsetree.attributes) = Obj.magic _1_inlined5 in + let _1_inlined4 : (string Location.loc option) = Obj.magic _1_inlined4 in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 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__1_inlined1_ in - let _v : (Parsetree.pattern) = let _1 = + let _endpos = _endpos_xs_inlined1_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let (_endpos_xs_, _startpos__1_, xs, _1_inlined2, _1_inlined1, _1) = (_endpos_xs_inlined1_, _startpos__1_inlined3_, xs_inlined1, _1_inlined5, _1_inlined4, _1_inlined3) in let _1 = let _1 = let _3 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 42608 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 42613 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 29210 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 42619 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 42630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 42636 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2956 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ppat_alias(_1, _3) ) -# 29216 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 42656 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos__1_ = _endpos__1_inlined1_ in - let _endpos = _endpos__1_ in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 42662 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 42668 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let x1 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 42678 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 42683 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 42689 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 42700 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 42706 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkpat ~loc:_sloc _1 ) -# 29226 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 42726 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2967 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 29232 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 42732 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2944 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 29238 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3056 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ x2; None, x1 ] ) +# 42738 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29246,42 +42746,138 @@ module Tables = struct (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; + 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_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _1 : (Parsetree.pattern list) = Obj.magic _1 in + let _2_inlined1 : (Parsetree.expression) = Obj.magic _2_inlined1 in + let _1_inlined3 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 42796 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1_inlined3 in + let _2 : unit = Obj.magic _2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 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__1_ in - let _v : (Parsetree.pattern) = let _1 = + let _endpos = _endpos__2_inlined1_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let (_2, _1) = (_2_inlined1, _1_inlined3) in + +# 3037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 42811 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let x1 = let _1 = - let _1 = -# 2960 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ppat_tuple(List.rev _1) ) -# 29265 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos = _endpos__1_ in + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 42821 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 42826 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 42832 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 42843 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 42849 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkpat ~loc:_sloc _1 ) -# 29273 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 42869 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2967 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 29279 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 42875 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2944 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 29285 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3056 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ x2; None, x1 ] ) +# 42881 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29294,56 +42890,139 @@ 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; 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 = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _3 : (Parsetree.pattern) = Obj.magic _3 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 42938 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.pattern) = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 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 _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _1 = _1_inlined3 in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkexpvar ~loc label ) +# 42956 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let x1 = let _1 = - let _1 = -# 2964 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ppat_or(_1, _3) ) -# 29326 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 42966 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 42971 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 42977 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 42988 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 42994 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkpat ~loc:_sloc _1 ) -# 29335 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 43014 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2967 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 29341 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 43020 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2944 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 29347 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3056 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ x2; None, x1 ] ) +# 43026 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29355,91 +43034,163 @@ module Tables = struct (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; + 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 = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 _1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _5 : unit = Obj.magic _5 in + let c : (Parsetree.type_constraint) = Obj.magic c in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 29368 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - ) = Obj.magic _1 in +# 43103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined3 : unit = Obj.magic _1_inlined3 in + let _2 : unit = Obj.magic _2 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 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__1_ in - let _v : (Parsetree.pattern) = let _1 = + let _endpos = _endpos__5_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let (_startpos__2_, _2, _1) = (_startpos__2_inlined1_, _2_inlined1, _1_inlined3) in + let _endpos = _endpos__5_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some label, + mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_label_ label) c ) +# 43124 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let x1 = let _1 = - let _1 = - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 43134 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 43139 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 29382 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 43145 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 43156 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 43162 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2375 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ppat_var _1 ) -# 29388 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 43182 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkpat ~loc:_sloc _1 ) -# 29397 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 2377 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 29403 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : unit = 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.pattern) = let _1 = - let _1 = -# 2376 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ppat_any ) -# 29429 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkpat ~loc:_sloc _1 ) -# 29437 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 43188 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2377 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 29443 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3056 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ x2; None, x1 ] ) +# 43194 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29451,131 +43202,10 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.state = _; 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.structure) = 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) = -# 4133 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( PStr _1 ) -# 29468 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.signature) = 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.payload) = -# 4134 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( PSig _2 ) -# 29500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.core_type) = 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.payload) = -# 4135 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( PTyp _2 ) -# 29532 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.pattern) = 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.payload) = -# 4136 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( PPat (_2, None) ) -# 29564 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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; @@ -29583,55 +43213,53 @@ 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 = x1; + MenhirLib.EngineTypes.startp = _startpos_x1_; + MenhirLib.EngineTypes.endp = _endpos_x1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; } = _menhir_stack in - let _4 : (Parsetree.expression) = Obj.magic _4 in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _3 : unit = Obj.magic _3 in - let _2 : (Parsetree.pattern) = 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.payload) = -# 4137 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( PPat (_2, Some _4) ) -# 29610 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.core_type) = Obj.magic _1 in + let x1 : (Parsetree.expression) = Obj.magic x1 in + let l1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 43236 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic l1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in + let _startpos = _startpos_l1_ in let _endpos = _endpos__1_ in - let _v : (Parsetree.core_type) = -# 3508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 29635 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _1 = + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 43246 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 43251 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 43257 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ x2; Some l1, x1 ] ) +# 43263 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29644,70 +43272,136 @@ 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 = 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.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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; + 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 = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + 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 = x1; + MenhirLib.EngineTypes.startp = _startpos_x1_; + MenhirLib.EngineTypes.endp = _endpos_x1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; }; }; } = _menhir_stack in - let _3 : (Parsetree.core_type) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let xs : (string Location.loc list) = Obj.magic xs in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 in + let _1 : unit = Obj.magic _1 in + let _3 : unit = Obj.magic _3 in + let x1 : (Parsetree.expression) = Obj.magic x1 in + let l1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 43326 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic l1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_xs_ in - let _endpos = _endpos__3_ in - let _v : (Parsetree.core_type) = let _1 = + let _startpos = _startpos_l1_ in + let _endpos = _endpos_xs_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = let _1 = let _1 = - let _1 = - let xs = + let _3 = + let xs = + let xs = # 253 "" ( List.rev xs ) -# 29678 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in +# 43339 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 43344 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 1106 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 29683 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 43350 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 43361 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 43367 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 29689 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 43387 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_poly(_1, _3) ) -# 29695 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 43393 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos__3_, _startpos_xs_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mktyp ~loc:_sloc _1 ) -# 29705 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 43399 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3510 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 29711 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ x2; Some l1, x1 ] ) +# 43405 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29719,25 +43413,131 @@ module Tables = struct (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 = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + 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 = x1; + MenhirLib.EngineTypes.startp = _startpos_x1_; + MenhirLib.EngineTypes.endp = _endpos_x1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let _2 : (Parsetree.expression) = Obj.magic _2 in + let _1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 43451 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1 in + let _3 : unit = Obj.magic _3 in + let x1 : (Parsetree.expression) = Obj.magic x1 in + let l1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 43458 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic l1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_l1_ in + let _endpos = _endpos__2_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = +# 3037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 43466 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 3060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ x2; Some l1, x1 ] ) +# 43471 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + 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 = x1; + MenhirLib.EngineTypes.startp = _startpos_x1_; + MenhirLib.EngineTypes.endp = _endpos_x1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; } = _menhir_stack in - let _1 : (Parsetree.core_type) = Obj.magic _1 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 43516 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _1 : unit = Obj.magic _1 in + let _3 : unit = Obj.magic _3 in + let x1 : (Parsetree.expression) = Obj.magic x1 in + let l1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 43524 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic l1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__1_ in - let _v : (Parsetree.core_type) = let _1 = -# 3539 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 29736 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _startpos = _startpos_l1_ in + let _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkexpvar ~loc label ) +# 43535 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 3508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 29741 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ x2; Some l1, x1 ] ) +# 43541 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29750,75 +43550,87 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + 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 = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; 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; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + 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 = x1; + MenhirLib.EngineTypes.startp = _startpos_x1_; + MenhirLib.EngineTypes.endp = _endpos_x1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; }; }; } = _menhir_stack in - let _1 : (Parsetree.core_type) = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let c : (Parsetree.type_constraint) = Obj.magic c in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 43606 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in let _2 : unit = Obj.magic _2 in - let xs : (string Location.loc list) = Obj.magic xs in + let _1 : unit = Obj.magic _1 in + let _3 : unit = Obj.magic _3 in + let x1 : (Parsetree.expression) = Obj.magic x1 in + let l1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 43615 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic l1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_xs_ in - let _endpos = _endpos__1_ in - let _v : (Parsetree.core_type) = let _1 = - let _1 = - let _3 = -# 3539 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 29782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _1 = - let _1 = - let xs = -# 253 "" - ( List.rev xs ) -# 29789 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1106 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 29794 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 29800 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 3504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_poly(_1, _3) ) -# 29806 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _startpos__1_ = _startpos_xs_ in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _startpos = _startpos_l1_ in + let _endpos = _endpos__5_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _endpos = _endpos__5_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mktyp ~loc:_sloc _1 ) -# 29816 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some label, + mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_label_ label) c ) +# 43628 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3510 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 29822 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ x2; Some l1, x1 ] ) +# 43634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29831,9 +43643,9 @@ module Tables = struct 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.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _3; @@ -29841,9 +43653,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 = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -29854,20 +43666,43 @@ module Tables = struct }; }; } = _menhir_stack in - let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.payload) = Obj.magic _3 in - let _2 : (string Location.loc) = Obj.magic _2 in + let _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _3 : unit = Obj.magic _3 in + let l1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 43675 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic l1 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.attribute) = let _endpos = _endpos__4_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos__1_inlined1_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _1 = _1_inlined1 in + let _1 = + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 43687 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 43692 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 43698 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _loc_l1_ = (_startpos_l1_, _endpos_l1_) in -# 4094 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Attr.mk ~loc:(make_loc _sloc) _2 _3 ) -# 29871 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3064 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_l1_ in + [ x2; Some l1, mkexpvar ~loc l1] ) +# 43706 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29880,52 +43715,40 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined3; - MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = prim; - MenhirLib.EngineTypes.startp = _startpos_prim_; - MenhirLib.EngineTypes.endp = _endpos_prim_; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = ty; - MenhirLib.EngineTypes.startp = _startpos_ty_; - MenhirLib.EngineTypes.endp = _endpos_ty_; + 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 = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined2; - MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; 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 = ext; - MenhirLib.EngineTypes.startp = _startpos_ext_; - MenhirLib.EngineTypes.endp = _endpos_ext_; - 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; }; }; }; @@ -29933,80 +43756,98 @@ module Tables = struct }; }; } = _menhir_stack in + let xs : (Parsetree.case list) = Obj.magic xs in let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let prim : (string list) = Obj.magic prim in - let _7 : unit = Obj.magic _7 in - let ty : (Parsetree.core_type) = Obj.magic ty in - let _5 : unit = Obj.magic _5 in - let _1_inlined2 : (string) = Obj.magic _1_inlined2 in - let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in - let ext : (string Location.loc option) = Obj.magic ext in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _3 : unit = Obj.magic _3 in + let l1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 43768 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic l1 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__1_inlined3_ in - let _v : (Parsetree.value_description * string Location.loc option) = let attrs2 = - let _1 = _1_inlined3 in - -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _endpos = _endpos_xs_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 43783 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 43788 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 43794 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 29954 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let _endpos_attrs2_ = _endpos__1_inlined3_ in - let id = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 29966 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - let attrs1 = - let _1 = _1_inlined1 in +# 43805 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 43811 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 43831 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 43837 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 29974 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 43843 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos_attrs2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 3134 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 ) -# 29987 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Asttypes.private_flag) = let _1 = -# 3962 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Public ) -# 30005 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _loc_l1_ = (_startpos_l1_, _endpos_l1_) in -# 3959 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 30010 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3064 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_l1_ in + [ x2; Some l1, mkexpvar ~loc l1] ) +# 43851 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30018,68 +43859,66 @@ module Tables = struct (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; + 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 = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + 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_inlined1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 43897 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1_inlined1 in + let _3 : unit = Obj.magic _3 in + let l1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 43903 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic l1 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__1_ in - let _v : (Asttypes.private_flag) = let _1 = -# 3963 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Private ) -# 30035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _endpos = _endpos__2_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _1 = _1_inlined1 in + +# 3037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 43914 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _loc_l1_ = (_startpos_l1_, _endpos_l1_) in -# 3959 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 30040 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3985 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Public, Concrete ) -# 30058 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : unit = 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.private_flag * Asttypes.virtual_flag) = -# 3986 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Private, Concrete ) -# 30083 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3064 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_l1_ in + [ x2; Some l1, mkexpvar ~loc l1] ) +# 43922 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30091,20 +43930,68 @@ module Tables = struct (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; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + 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 label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 43967 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _3 : unit = Obj.magic _3 in + let l1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 43974 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic l1 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__1_ in - let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3987 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Public, Virtual ) -# 30108 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _1 = _1_inlined1 in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkexpvar ~loc label ) +# 43987 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _loc_l1_ = (_startpos_l1_, _endpos_l1_) in + +# 3064 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_l1_ in + [ x2; Some l1, mkexpvar ~loc l1] ) +# 43995 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30117,26 +44004,90 @@ module Tables = struct 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.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; 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 = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + 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 c : (Parsetree.type_constraint) = Obj.magic c in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 44060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in let _2 : unit = Obj.magic _2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _3 : unit = Obj.magic _3 in + let l1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 44068 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic l1 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 : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3988 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Private, Virtual ) -# 30140 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__5_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _1 = _1_inlined1 in + let _endpos = _endpos__5_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some label, + mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_label_ label) c ) +# 44083 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _loc_l1_ = (_startpos_l1_, _endpos_l1_) in + +# 3064 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_l1_ in + [ x2; Some l1, mkexpvar ~loc l1] ) +# 44091 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30149,26 +44100,92 @@ module Tables = struct 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.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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + 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 = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + 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 _1_inlined1 : (Parsetree.expression) = Obj.magic _1_inlined1 in + let _6 : unit = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let c : (Parsetree.type_constraint) = Obj.magic c in + let l1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 44152 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic l1 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 : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3989 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Private, Virtual ) -# 30172 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__1_inlined1_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _1 = _1_inlined1 in + let _1 = + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 44165 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 44170 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 44176 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_x2_ = _endpos__1_inlined1_ in + let _endpos = _endpos_x2_ in + let _loc_l1_ = (_startpos_l1_, _endpos_l1_) in + +# 3069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let x1 = + mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_l1_ l1) c + in + [ x2; Some l1, x1] ) +# 44189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30179,14 +44196,167 @@ module Tables = struct }); (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let _menhir_s = _menhir_env.MenhirLib.EngineTypes.current in + let { + 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 = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + 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 = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + 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 xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let _1_inlined2 : (string Location.loc option) = Obj.magic _1_inlined2 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _6 : unit = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let c : (Parsetree.type_constraint) = Obj.magic c in + let l1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 44271 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic l1 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 = _menhir_stack.MenhirLib.EngineTypes.endp in - let _endpos = _startpos in - let _v : (Asttypes.rec_flag) = -# 3940 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Nonrecursive ) -# 30190 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos_xs_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let (_startpos__1_, _1_inlined2, _1_inlined1, _1) = (_startpos__1_inlined1_, _1_inlined3, _1_inlined2, _1_inlined1) in + let _1 = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 44287 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 44292 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 44298 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 44309 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 44315 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 44335 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 44341 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 3035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 44347 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_x2_ = _endpos_xs_ in + let _endpos = _endpos_x2_ in + let _loc_l1_ = (_startpos_l1_, _endpos_l1_) in + +# 3069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let x1 = + mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_l1_ l1) c + in + [ x2; Some l1, x1] ) +# 44360 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30198,20 +44368,92 @@ module Tables = struct (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; + 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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + 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 = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + 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 _2_inlined1 : (Parsetree.expression) = Obj.magic _2_inlined1 in + let _1_inlined1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 44424 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1_inlined1 in + let _6 : unit = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let c : (Parsetree.type_constraint) = Obj.magic c in + let l1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 44432 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic l1 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__1_ in - let _v : (Asttypes.rec_flag) = -# 3941 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Recursive ) -# 30215 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _endpos = _endpos__2_inlined1_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let (_2, _1) = (_2_inlined1, _1_inlined1) in + +# 3037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 44444 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_x2_ = _endpos__2_inlined1_ in + let _endpos = _endpos_x2_ in + let _loc_l1_ = (_startpos_l1_, _endpos_l1_) in + +# 3069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let x1 = + mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_l1_ l1) c + in + [ x2; Some l1, x1] ) +# 44457 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30223,26 +44465,94 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = fields; - MenhirLib.EngineTypes.startp = _startpos_fields_; - MenhirLib.EngineTypes.endp = _endpos_fields_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + 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 = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + 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 fields : ((Longident.t Location.loc * Parsetree.expression) list) = Obj.magic fields in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 44520 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _6 : unit = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let c : (Parsetree.type_constraint) = Obj.magic c in + let l1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 44529 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic l1 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_fields_ in - let _endpos = _endpos_fields_ in - let _v : (Parsetree.expression option * - (Longident.t Location.loc * Parsetree.expression) list) = let eo = -# 124 "" - ( None ) -# 30241 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _startpos = _startpos__1_ in + let _endpos = _endpos_label_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let _1 = _1_inlined1 in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkexpvar ~loc label ) +# 44543 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos_x2_ = _endpos_label_ in + let _endpos = _endpos_x2_ in + let _loc_l1_ = (_startpos_l1_, _endpos_l1_) in -# 2869 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( eo, fields ) -# 30246 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let x1 = + mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_l1_ l1) c + in + [ x2; Some l1, x1] ) +# 44556 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30255,46 +44565,116 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = fields; - MenhirLib.EngineTypes.startp = _startpos_fields_; - MenhirLib.EngineTypes.endp = _endpos_fields_; + MenhirLib.EngineTypes.semv = _5_inlined1; + MenhirLib.EngineTypes.startp = _startpos__5_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__5_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = c_inlined1; + MenhirLib.EngineTypes.startp = _startpos_c_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_c_inlined1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + 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 = c; + MenhirLib.EngineTypes.startp = _startpos_c_; + MenhirLib.EngineTypes.endp = _endpos_c_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = l1; + MenhirLib.EngineTypes.startp = _startpos_l1_; + MenhirLib.EngineTypes.endp = _endpos_l1_; + 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 fields : ((Longident.t Location.loc * Parsetree.expression) list) = Obj.magic fields in + let _5_inlined1 : unit = Obj.magic _5_inlined1 in + let c_inlined1 : (Parsetree.type_constraint) = Obj.magic c_inlined1 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 44639 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in + let _6 : unit = Obj.magic _6 in + let _5 : unit = Obj.magic _5 in + let c : (Parsetree.type_constraint) = Obj.magic c in + let l1 : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 44649 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic l1 in let _2 : unit = Obj.magic _2 in - let x : (Parsetree.expression) = Obj.magic x in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_fields_ in - let _v : (Parsetree.expression option * - (Longident.t Location.loc * Parsetree.expression) list) = let eo = - let x = -# 191 "" - ( x ) -# 30287 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _startpos = _startpos__1_ in + let _endpos = _endpos__5_inlined1_ in + let _v : ((string option * Parsetree.expression) list) = let x2 = + let (_endpos__5_, _startpos__2_, _5, c, _2, _1) = (_endpos__5_inlined1_, _startpos__2_inlined1_, _5_inlined1, c_inlined1, _2_inlined1, _1_inlined1) in + let _endpos = _endpos__5_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in -# 126 "" - ( Some x ) -# 30292 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some label, + mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_label_ label) c ) +# 44665 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let _endpos_x2_ = _endpos__5_inlined1_ in + let _endpos = _endpos_x2_ in + let _loc_l1_ = (_startpos_l1_, _endpos_l1_) in -# 2869 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( eo, fields ) -# 30298 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let x1 = + mkexp_constraint ~loc:(_startpos__2_, _endpos) + (mkexpvar ~loc:_loc_l1_ l1) c + in + [ x2; Some l1, x1] ) +# 44678 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30307,29 +44687,19 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let d : (Mlx_ocaml_parsing.Ast_helper.str * Mlx_ocaml_parsing.Ast_helper.str list * - Parsetree.constructor_arguments * Parsetree.core_type option * - Parsetree.attributes * Warnings.loc * Mlx_ocaml_parsing.Docstrings.info) = Obj.magic d in + let _1 : ((string option * Parsetree.pattern) list) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_d_ in - let _endpos = _endpos_d_ in - let _v : (Parsetree.constructor_declaration list) = let x = -# 3321 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let cid, vars, args, res, attrs, loc, info = d in - Type.constructor cid ~vars ~args ?res ~attrs ~loc ~info - ) -# 30328 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1216 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [x] ) -# 30333 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = +# 3336 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Closed, _1 ) +# 44703 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30341,30 +44711,34 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - 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 d : (Mlx_ocaml_parsing.Ast_helper.str * Mlx_ocaml_parsing.Ast_helper.str list * - Parsetree.constructor_arguments * Parsetree.core_type option * - Parsetree.attributes * Warnings.loc * Mlx_ocaml_parsing.Docstrings.info) = Obj.magic d in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : ((string option * Parsetree.pattern) list) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_d_ in - let _endpos = _endpos_d_ in - let _v : (Parsetree.constructor_declaration list) = let x = -# 3321 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let cid, vars, args, res, attrs, loc, info = d in - Type.constructor cid ~vars ~args ?res ~attrs ~loc ~info - ) -# 30363 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1219 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [x] ) -# 30368 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = +# 3338 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Open, _1 ) +# 44742 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30377,36 +44751,38 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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; + 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 d : (Mlx_ocaml_parsing.Ast_helper.str * Mlx_ocaml_parsing.Ast_helper.str list * - Parsetree.constructor_arguments * Parsetree.core_type option * - Parsetree.attributes * Warnings.loc * Mlx_ocaml_parsing.Docstrings.info) = Obj.magic d in - let xs : (Parsetree.constructor_declaration list) = Obj.magic xs in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_xs_ in - let _endpos = _endpos_d_ in - let _v : (Parsetree.constructor_declaration list) = let x = -# 3321 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let cid, vars, args, res, attrs, loc, info = d in - Type.constructor cid ~vars ~args ?res ~attrs ~loc ~info - ) -# 30405 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = let _1 = +# 3314 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 44781 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1223 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( x :: xs ) -# 30410 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3340 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Open, [ _1 ] ) +# 44786 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30418,37 +44794,53 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - 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 = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_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 d : (Mlx_ocaml_parsing.Ast_helper.str * Mlx_ocaml_parsing.Ast_helper.str list * - Parsetree.constructor_arguments * Parsetree.core_type option * - Parsetree.attributes * Warnings.loc * Mlx_ocaml_parsing.Docstrings.info) = Obj.magic d in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 44828 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_d_ in - let _endpos = _endpos_d_ in - let _v : (Parsetree.extension_constructor list) = let x = - let _1 = -# 3438 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let cid, vars, args, res, attrs, loc, info = d in - Te.decl cid ~vars ~args ?res ~attrs ~loc ~info - ) -# 30441 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = let _1 = + let _2 = _2_inlined1 in -# 3432 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 30446 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3316 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 44838 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1216 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [x] ) -# 30452 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3340 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Open, [ _1 ] ) +# 44844 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30460,25 +44852,54 @@ module Tables = struct (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; + 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 = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 _1 : (Parsetree.extension_constructor) = Obj.magic _1 in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 44885 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label 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__1_ in - let _v : (Parsetree.extension_constructor list) = let x = -# 3434 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 30477 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _endpos = _endpos__3_ in + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = let _1 = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3318 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 44897 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 1216 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [x] ) -# 30482 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3340 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Open, [ _1 ] ) +# 44903 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30490,37 +44911,86 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - 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 = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _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 d : (Mlx_ocaml_parsing.Ast_helper.str * Mlx_ocaml_parsing.Ast_helper.str list * - Parsetree.constructor_arguments * Parsetree.core_type option * - Parsetree.attributes * Warnings.loc * Mlx_ocaml_parsing.Docstrings.info) = Obj.magic d in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 44971 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_d_ in - let _endpos = _endpos_d_ in - let _v : (Parsetree.extension_constructor list) = let x = - let _1 = -# 3438 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let cid, vars, args, res, attrs, loc, info = d in - Te.decl cid ~vars ~args ?res ~attrs ~loc ~info - ) -# 30513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = let _1 = + let (_startpos__2_, _2) = (_startpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in -# 3432 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 30518 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3321 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 44988 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1219 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [x] ) -# 30524 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3340 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Open, [ _1 ] ) +# 44994 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30538,19 +45008,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let _1 : (Parsetree.extension_constructor) = Obj.magic _1 in + let _1 : ((string option * Parsetree.pattern) list) = 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.extension_constructor list) = let x = -# 3434 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 30549 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1219 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [x] ) -# 30554 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = +# 3336 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Closed, _1 ) +# 45019 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30563,43 +45028,33 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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; + 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 d : (Mlx_ocaml_parsing.Ast_helper.str * Mlx_ocaml_parsing.Ast_helper.str list * - Parsetree.constructor_arguments * Parsetree.core_type option * - Parsetree.attributes * Warnings.loc * Mlx_ocaml_parsing.Docstrings.info) = Obj.magic d in - let xs : (Parsetree.extension_constructor list) = Obj.magic xs in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : ((string option * Parsetree.pattern) list) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_xs_ in - let _endpos = _endpos_d_ in - let _v : (Parsetree.extension_constructor list) = let x = - let _1 = -# 3438 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let cid, vars, args, res, attrs, loc, info = d in - Te.decl cid ~vars ~args ?res ~attrs ~loc ~info - ) -# 30592 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 3432 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 30597 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in - -# 1223 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( x :: xs ) -# 30603 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = +# 3338 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Open, _1 ) +# 45058 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30612,31 +45067,38 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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; + 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 _1 : (Parsetree.extension_constructor) = Obj.magic _1 in - let xs : (Parsetree.extension_constructor list) = Obj.magic xs in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.pattern) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_xs_ in - let _endpos = _endpos__1_ in - let _v : (Parsetree.extension_constructor list) = let x = -# 3434 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 30635 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = let _1 = +# 3314 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 45097 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1223 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( x :: xs ) -# 30640 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3340 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Open, [ _1 ] ) +# 45102 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30648,30 +45110,53 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - 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 = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_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 d : (Mlx_ocaml_parsing.Ast_helper.str * Mlx_ocaml_parsing.Ast_helper.str list * - Parsetree.constructor_arguments * Parsetree.core_type option * - Parsetree.attributes * Warnings.loc * Mlx_ocaml_parsing.Docstrings.info) = Obj.magic d in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _2_inlined1 : (Parsetree.pattern) = Obj.magic _2_inlined1 in + let _1 : ( +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 45144 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_d_ in - let _endpos = _endpos_d_ in - let _v : (Parsetree.extension_constructor list) = let x = -# 3438 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let cid, vars, args, res, attrs, loc, info = d in - Te.decl cid ~vars ~args ?res ~attrs ~loc ~info - ) -# 30670 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = let _1 = + let _2 = _2_inlined1 in + +# 3316 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some _1, _2 ) +# 45154 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 1216 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [x] ) -# 30675 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3340 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Open, [ _1 ] ) +# 45160 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30683,30 +45168,54 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; - 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 = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 d : (Mlx_ocaml_parsing.Ast_helper.str * Mlx_ocaml_parsing.Ast_helper.str list * - Parsetree.constructor_arguments * Parsetree.core_type option * - Parsetree.attributes * Warnings.loc * Mlx_ocaml_parsing.Docstrings.info) = Obj.magic d in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 45201 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_d_ in - let _endpos = _endpos_d_ in - let _v : (Parsetree.extension_constructor list) = let x = -# 3438 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let cid, vars, args, res, attrs, loc, info = d in - Te.decl cid ~vars ~args ?res ~attrs ~loc ~info - ) -# 30705 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = let _1 = + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3318 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = _loc_label_ in + Some label, mkpatvar ~loc label ) +# 45213 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 1219 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [x] ) -# 30710 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3340 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Open, [ _1 ] ) +# 45219 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30719,36 +45228,85 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = d; - MenhirLib.EngineTypes.startp = _startpos_d_; - MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; 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; + 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 = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = cty; + MenhirLib.EngineTypes.startp = _startpos_cty_; + MenhirLib.EngineTypes.endp = _endpos_cty_; + 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 = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = _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 d : (Mlx_ocaml_parsing.Ast_helper.str * Mlx_ocaml_parsing.Ast_helper.str list * - Parsetree.constructor_arguments * Parsetree.core_type option * - Parsetree.attributes * Warnings.loc * Mlx_ocaml_parsing.Docstrings.info) = Obj.magic d in - let xs : (Parsetree.extension_constructor list) = Obj.magic xs in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _6 : unit = Obj.magic _6 in + let cty : (Parsetree.core_type) = Obj.magic cty in + let _4 : unit = Obj.magic _4 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 45287 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_xs_ in - let _endpos = _endpos_d_ in - let _v : (Parsetree.extension_constructor list) = let x = -# 3438 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( - let cid, vars, args, res, attrs, loc, info = d in - Te.decl cid ~vars ~args ?res ~attrs ~loc ~info - ) -# 30747 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in + let _startpos = _startpos__1_ in + let _endpos = _endpos__3_ in + let _v : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) = let _1 = + let (_startpos__2_, _2) = (_startpos__2_inlined1_, _2_inlined1) in + let _endpos = _endpos__6_ in + let _loc_label_ = (_startpos_label_, _endpos_label_) in + +# 3321 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let lbl_loc = _loc_label_ in + let pat_loc = _startpos__2_, _endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) ) +# 45304 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 1223 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( x :: xs ) -# 30752 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3340 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Open, [ _1 ] ) +# 45310 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30769,9 +45327,9 @@ module Tables = struct | `Prop_opt_punned of string | `Prop_punned of string ]) list) = -# 1082 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [] ) -# 30775 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45333 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30815,9 +45373,9 @@ module Tables = struct | `Prop_opt_punned of string | `Prop_punned of string ]) list) = -# 1084 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1122 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( x :: xs ) -# 30821 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45379 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30833,9 +45391,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : ((Parsetree.core_type * Parsetree.core_type * Warnings.loc) list) = -# 1082 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [] ) -# 30839 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45397 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30892,21 +45450,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2255 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2312 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _3, make_loc _sloc ) -# 30898 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45456 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in # 183 "" ( x ) -# 30904 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45462 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1084 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1122 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( x :: xs ) -# 30910 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45468 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30922,9 +45480,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Parsetree.expression list) = -# 1082 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [] ) -# 30928 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45486 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30954,9 +45512,66 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.expression list) = -# 1084 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1122 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( x :: xs ) -# 30960 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45518 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Parsetree.function_param list) = 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 : (Parsetree.function_param list) = +# 1153 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( List.rev x ) +# 45543 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Parsetree.function_param list) = Obj.magic x in + let xs : (Parsetree.function_param 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 : (Parsetree.function_param list) = +# 1155 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( List.rev_append x xs ) +# 45575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30979,9 +45594,9 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : ((Lexing.position * Parsetree.functor_parameter) list) = -# 1096 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1134 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [ x ] ) -# 30985 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31011,9 +45626,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : ((Lexing.position * Parsetree.functor_parameter) list) = -# 1098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1136 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( x :: xs ) -# 31017 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45632 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31036,9 +45651,9 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : ((Asttypes.arg_label * Parsetree.expression) list) = -# 1096 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1134 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [ x ] ) -# 31042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45657 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31068,9 +45683,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : ((Asttypes.arg_label * Parsetree.expression) list) = -# 1098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1136 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( x :: xs ) -# 31074 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45689 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31093,9 +45708,9 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (string list) = -# 1096 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1134 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [ x ] ) -# 31099 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45714 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31125,9 +45740,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (string list) = -# 1098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1136 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( x :: xs ) -# 31131 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45746 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31140,9 +45755,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + 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; @@ -31151,33 +45766,25 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let _1_inlined1 : (string) = Obj.magic _1_inlined1 in + let _2 : (string) = 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__1_inlined1_ in + let _endpos = _endpos__2_ in let _v : (string Location.loc list) = let x = - let _2 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 31169 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3496 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _2 ) -# 31175 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3780 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _2 _sloc ) +# 45782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1096 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1134 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [ x ] ) -# 31181 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45788 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31190,9 +45797,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _1_inlined1; - MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; - MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _1; @@ -31207,34 +45814,26 @@ module Tables = struct }; }; } = _menhir_stack in - let _1_inlined1 : (string) = Obj.magic _1_inlined1 in + let _2 : (string) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let xs : (string Location.loc list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_xs_ in - let _endpos = _endpos__1_inlined1_ in + let _endpos = _endpos__2_ in let _v : (string Location.loc list) = let x = - let _2 = - let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkrhs _1 _sloc ) -# 31226 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in + let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3496 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _2 ) -# 31232 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3780 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkrhs _2 _sloc ) +# 45831 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1136 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( x :: xs ) -# 31238 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45837 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31259,12 +45858,12 @@ module Tables = struct let _v : (Parsetree.case list) = let _1 = # 124 "" ( None ) -# 31263 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45862 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1187 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1246 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [x] ) -# 31268 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45867 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31298,13 +45897,13 @@ module Tables = struct # 126 "" ( Some x ) -# 31302 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45901 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1187 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1246 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [x] ) -# 31308 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45907 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31341,9 +45940,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.case list) = -# 1191 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1250 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( x :: xs ) -# 31347 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45946 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31367,20 +45966,20 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.core_type list) = let xs = let x = -# 3539 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3823 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 31373 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45972 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1122 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1181 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [ x ] ) -# 31378 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45977 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 31384 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 45983 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31418,20 +46017,20 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.core_type list) = let xs = let x = -# 3539 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3823 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 31424 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46023 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1185 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( x :: xs ) -# 31429 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46028 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 31435 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46034 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31454,14 +46053,14 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (Parsetree.with_constraint list) = let xs = -# 1122 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1181 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [ x ] ) -# 31460 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46059 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 31465 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46064 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31498,14 +46097,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.with_constraint list) = let xs = -# 1126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1185 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( x :: xs ) -# 31504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 31509 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46108 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31528,14 +46127,14 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (Parsetree.row_field list) = let xs = -# 1122 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1181 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [ x ] ) -# 31534 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46133 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 31539 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46138 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31572,14 +46171,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.row_field list) = let xs = -# 1126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1185 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( x :: xs ) -# 31578 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46177 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 31583 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46182 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31602,14 +46201,14 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = let xs = -# 1122 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1181 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [ x ] ) -# 31608 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46207 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 31613 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46212 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31646,14 +46245,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = let xs = -# 1126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1185 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( x :: xs ) -# 31652 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46251 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 31657 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46256 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31676,14 +46275,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 = -# 1122 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1181 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [ x ] ) -# 31682 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46281 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 31687 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46286 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31720,14 +46319,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 = -# 1126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1185 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( x :: xs ) -# 31726 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46325 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 31731 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31750,14 +46349,14 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = let xs = -# 1122 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1181 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [ x ] ) -# 31756 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46355 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 31761 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46360 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31794,14 +46393,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = let xs = -# 1126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1185 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( x :: xs ) -# 31800 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46399 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 31805 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31813,34 +46412,32 @@ module Tables = struct (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 = _; - 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 = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; - 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 x : (Parsetree.core_type) = Obj.magic x in - let _2 : unit = Obj.magic _2 in - let xs : (Parsetree.core_type list) = Obj.magic xs in + let _1 : (Parsetree.core_type) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_xs_ in - let _endpos = _endpos_x_ in - let _v : (Parsetree.core_type list) = -# 1153 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( x :: xs ) -# 31844 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : ((string option * Parsetree.core_type) list) = let xs = + let x = +# 3923 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 46430 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1181 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ x ] ) +# 46435 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 46441 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31853,9 +46450,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = x2; - MenhirLib.EngineTypes.startp = _startpos_x2_; - MenhirLib.EngineTypes.endp = _endpos_x2_; + MenhirLib.EngineTypes.semv = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -31863,23 +46460,39 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x1; - MenhirLib.EngineTypes.startp = _startpos_x1_; - MenhirLib.EngineTypes.endp = _endpos_x1_; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in - let x2 : (Parsetree.core_type) = Obj.magic x2 in + let ty : (Parsetree.core_type) = Obj.magic ty in let _2 : unit = Obj.magic _2 in - let x1 : (Parsetree.core_type) = Obj.magic x1 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 46476 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x1_ in - let _endpos = _endpos_x2_ in - let _v : (Parsetree.core_type list) = -# 1157 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [ x2; x1 ] ) -# 31883 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_label_ in + let _endpos = _endpos_ty_ in + let _v : ((string option * Parsetree.core_type) list) = let xs = + let x = +# 3925 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some label, ty ) +# 46485 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1181 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [ x ] ) +# 46490 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 46496 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31892,9 +46505,9 @@ module Tables = struct 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.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -31909,16 +46522,28 @@ module Tables = struct }; }; } = _menhir_stack in - let x : (Parsetree.expression) = Obj.magic x in + let _1 : (Parsetree.core_type) = Obj.magic _1 in let _2 : unit = Obj.magic _2 in - let xs : (Parsetree.expression list) = Obj.magic xs in + let xs : ((string option * Parsetree.core_type) 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 : (Parsetree.expression list) = -# 1153 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _endpos = _endpos__1_ in + let _v : ((string option * Parsetree.core_type) list) = let xs = + let x = +# 3923 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( None, _1 ) +# 46536 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1185 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( x :: xs ) -# 31922 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46541 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 46547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31931,33 +46556,66 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = x2; - MenhirLib.EngineTypes.startp = _startpos_x2_; - MenhirLib.EngineTypes.endp = _endpos_x2_; + MenhirLib.EngineTypes.semv = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x1; - MenhirLib.EngineTypes.startp = _startpos_x1_; - MenhirLib.EngineTypes.endp = _endpos_x1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = label; + MenhirLib.EngineTypes.startp = _startpos_label_; + MenhirLib.EngineTypes.endp = _endpos_label_; + 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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; } = _menhir_stack in - let x2 : (Parsetree.expression) = Obj.magic x2 in + let ty : (Parsetree.core_type) = Obj.magic ty in + let _2_inlined1 : unit = Obj.magic _2_inlined1 in + let label : ( +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + (string) +# 46594 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + ) = Obj.magic label in let _2 : unit = Obj.magic _2 in - let x1 : (Parsetree.expression) = Obj.magic x1 in + let xs : ((string option * Parsetree.core_type) list) = Obj.magic xs in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x1_ in - let _endpos = _endpos_x2_ in - let _v : (Parsetree.expression list) = -# 1157 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( [ x2; x1 ] ) -# 31961 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _startpos = _startpos_xs_ in + let _endpos = _endpos_ty_ in + let _v : ((string option * Parsetree.core_type) list) = let xs = + let x = + let _2 = _2_inlined1 in + +# 3925 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Some label, ty ) +# 46607 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1185 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( x :: xs ) +# 46613 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 46619 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31994,9 +46652,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = -# 1153 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1212 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( x :: xs ) -# 32000 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46658 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32033,9 +46691,9 @@ module Tables = struct let _startpos = _startpos_x1_ in let _endpos = _endpos_x2_ in let _v : (Parsetree.core_type list) = -# 1157 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1216 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [ x2; x1 ] ) -# 32039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46697 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32058,9 +46716,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.row_field) = -# 3679 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4066 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 32064 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46722 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32086,9 +46744,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3681 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4068 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Rf.inherit_ ~loc:(make_loc _sloc) _1 ) -# 32092 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46750 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32101,24 +46759,36 @@ module Tables = struct 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.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in - let x : (Parsetree.expression) = Obj.magic x in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_ in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in let _v : (Parsetree.expression list) = let _2 = # 124 "" ( None ) -# 32117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46775 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let x = + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 46781 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 46786 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in -# 1174 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1233 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [x] ) -# 32122 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 46792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32131,34 +46801,280 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = x_inlined1; - MenhirLib.EngineTypes.startp = _startpos_x_inlined1_; - MenhirLib.EngineTypes.endp = _endpos_x_inlined1_; + 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 = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; } = _menhir_stack in - let x_inlined1 : unit = Obj.magic x_inlined1 in - let x : (Parsetree.expression) = Obj.magic x in + let x : unit = Obj.magic x in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in - let _endpos = _endpos_x_inlined1_ in - let _v : (Parsetree.expression list) = let _2 = - let x = x_inlined1 in + let _startpos = _startpos__1_ in + let _endpos = _endpos_x_ in + let _v : (Parsetree.expression list) = let _2 = +# 126 "" + ( Some x ) +# 46824 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let x = + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 46830 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 46835 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1233 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [x] ) +# 46841 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 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 : (Parsetree.expression list) = let _2 = +# 124 "" + ( None ) +# 46887 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let x = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 46896 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 46901 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 46907 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 46918 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 46924 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 46944 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 46950 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1233 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( [x] ) +# 46956 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 x : unit = Obj.magic x in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 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_x_ in + let _v : (Parsetree.expression list) = let _2 = # 126 "" ( Some x ) -# 32156 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47009 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + let x = + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 47018 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 47023 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 47029 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 47040 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 47046 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 47066 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 47072 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1174 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1233 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [x] ) -# 32162 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47078 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32181,23 +47097,160 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = x; - MenhirLib.EngineTypes.startp = _startpos_x_; - MenhirLib.EngineTypes.endp = _endpos_x_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; } = _menhir_stack in let xs : (Parsetree.expression list) = Obj.magic xs in let _2 : unit = Obj.magic _2 in - let x : (Parsetree.expression) = Obj.magic x in + let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_x_ in + let _startpos = _startpos__1_ in let _endpos = _endpos_xs_ in - let _v : (Parsetree.expression list) = -# 1178 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + let _v : (Parsetree.expression list) = let x = + let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 47118 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 47123 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( x :: xs ) +# 47129 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = 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 = _; + MenhirLib.EngineTypes.semv = xs_inlined1; + MenhirLib.EngineTypes.startp = _startpos_xs_inlined1_; + MenhirLib.EngineTypes.endp = _endpos_xs_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + 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 xs : (Parsetree.expression list) = Obj.magic xs in + let _2 : unit = Obj.magic _2 in + let xs_inlined1 : (Parsetree.case list) = Obj.magic xs_inlined1 in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 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 : (Parsetree.expression list) = let x = + let (_endpos_xs_, xs) = (_endpos_xs_inlined1_, xs_inlined1) in + let _1 = + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 47194 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 47199 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 47205 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 47216 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 47222 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 47242 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 47248 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 1237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( x :: xs ) -# 32201 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47254 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32223,9 +47276,9 @@ module Tables = struct } = _menhir_stack in let oe : (Parsetree.expression option) = Obj.magic oe in let _1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 32229 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47282 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -32233,26 +47286,26 @@ module Tables = struct let _v : ((string Location.loc * Parsetree.expression) list) = let _2 = # 124 "" ( None ) -# 32237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47290 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let x = let label = let _1 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 32244 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47297 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 32252 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47305 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3105 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let label, e = match oe with | None -> @@ -32262,13 +47315,13 @@ module Tables = struct label, e in label, e ) -# 32266 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47319 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1174 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1233 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [x] ) -# 32272 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47325 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32301,9 +47354,9 @@ module Tables = struct let x : unit = Obj.magic x in let oe : (Parsetree.expression option) = Obj.magic oe in let _1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 32307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47360 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -32311,26 +47364,26 @@ module Tables = struct let _v : ((string Location.loc * Parsetree.expression) list) = let _2 = # 126 "" ( Some x ) -# 32315 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47368 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let x = let label = let _1 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 32322 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47375 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 32330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47383 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3105 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let label, e = match oe with | None -> @@ -32340,13 +47393,13 @@ module Tables = struct label, e in label, e ) -# 32344 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47397 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1174 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1233 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [x] ) -# 32350 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47403 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32386,9 +47439,9 @@ module Tables = struct let _2 : unit = Obj.magic _2 in let oe : (Parsetree.expression option) = Obj.magic oe in let _1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 32392 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47445 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -32396,21 +47449,21 @@ module Tables = struct let _v : ((string Location.loc * Parsetree.expression) list) = let x = let label = let _1 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 32402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47455 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 32410 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47463 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3105 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let label, e = match oe with | None -> @@ -32420,13 +47473,13 @@ module Tables = struct label, e in label, e ) -# 32424 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47477 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1178 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( x :: xs ) -# 32430 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47483 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32451,12 +47504,12 @@ module Tables = struct let _v : (Parsetree.pattern list) = let _2 = # 124 "" ( None ) -# 32455 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1174 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1233 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [x] ) -# 32460 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32490,13 +47543,13 @@ module Tables = struct # 126 "" ( Some x ) -# 32494 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1174 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1233 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [x] ) -# 32500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47553 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32533,9 +47586,9 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_xs_ in let _v : (Parsetree.pattern list) = -# 1178 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( x :: xs ) -# 32539 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47592 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32566,7 +47619,7 @@ module Tables = struct }; } = _menhir_stack in let eo : (Parsetree.expression option) = Obj.magic eo in - let c : ((Parsetree.core_type option * Parsetree.core_type option) option) = Obj.magic c in + let c : (Parsetree.type_constraint option) = Obj.magic c in let _1 : (Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -32574,7 +47627,7 @@ module Tables = struct let _v : ((Longident.t Location.loc * Parsetree.expression) list) = let _2 = # 124 "" ( None ) -# 32578 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47631 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let x = let label = @@ -32582,9 +47635,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 32588 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47641 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _startpos_label_ = _startpos__1_ in @@ -32592,7 +47645,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2875 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3088 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let constraint_loc, label, e = match eo with | None -> @@ -32602,13 +47655,13 @@ module Tables = struct (_startpos_c_, _endpos), label, e in label, mkexp_opt_constraint ~loc:constraint_loc e c ) -# 32606 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47659 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1174 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1233 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [x] ) -# 32612 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47665 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32646,7 +47699,7 @@ module Tables = struct } = _menhir_stack in let x : unit = Obj.magic x in let eo : (Parsetree.expression option) = Obj.magic eo in - let c : ((Parsetree.core_type option * Parsetree.core_type option) option) = Obj.magic c in + let c : (Parsetree.type_constraint option) = Obj.magic c in let _1 : (Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -32654,7 +47707,7 @@ module Tables = struct let _v : ((Longident.t Location.loc * Parsetree.expression) list) = let _2 = # 126 "" ( Some x ) -# 32658 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47711 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let x = let label = @@ -32662,9 +47715,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 32668 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47721 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _startpos_label_ = _startpos__1_ in @@ -32672,7 +47725,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2875 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3088 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let constraint_loc, label, e = match eo with | None -> @@ -32682,13 +47735,13 @@ module Tables = struct (_startpos_c_, _endpos), label, e in label, mkexp_opt_constraint ~loc:constraint_loc e c ) -# 32686 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47739 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1174 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1233 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [x] ) -# 32692 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47745 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32733,7 +47786,7 @@ module Tables = struct let xs : ((Longident.t Location.loc * Parsetree.expression) list) = Obj.magic xs in let _2 : unit = Obj.magic _2 in let eo : (Parsetree.expression option) = Obj.magic eo in - let c : ((Parsetree.core_type option * Parsetree.core_type option) option) = Obj.magic c in + let c : (Parsetree.type_constraint option) = Obj.magic c in let _1 : (Longident.t) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -32744,9 +47797,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 32750 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47803 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _startpos_label_ = _startpos__1_ in @@ -32754,7 +47807,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2875 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3088 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let constraint_loc, label, e = match eo with | None -> @@ -32764,13 +47817,13 @@ module Tables = struct (_startpos_c_, _endpos), label, e in label, mkexp_opt_constraint ~loc:constraint_loc e c ) -# 32768 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47821 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1178 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( x :: xs ) -# 32774 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 47827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32792,42 +47845,15 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : (Parsetree.expression) = -# 2344 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 32799 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.expression) = let _1 = +# 2402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 47852 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Parsetree.expression) = 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) = -# 2345 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 32831 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + +# 2438 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 47857 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32840,107 +47866,97 @@ 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 = 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.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; 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 = _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 _3 : (Parsetree.expression) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let xs : (Parsetree.case list) = Obj.magic xs in + let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in + let _1_inlined1 : (string Location.loc option) = Obj.magic _1_inlined1 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 _endpos = _endpos_xs_ in let _v : (Parsetree.expression) = let _1 = - let _1 = -# 2347 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pexp_sequence(_1, _3) ) -# 32871 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos__1_ = _endpos__3_ in - let _endpos = _endpos__1_ in + let _3 = + let xs = + let xs = +# 253 "" + ( List.rev xs ) +# 47906 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in + +# 1258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 47911 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 47917 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos__3_ = _endpos_xs_ in + let _2 = + let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in + let _2 = + let _1 = _1_inlined1 in + +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 47928 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1, _2 ) +# 47934 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mkexp ~loc:_sloc _1 ) -# 32880 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let loc = make_loc _sloc in + let cases = _3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:_sloc desc _2 + ) +# 47954 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2348 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 32886 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _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 : (Parsetree.expression) = Obj.magic _5 in - let _4 : (string Location.loc) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.expression) = 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 _endpos = _endpos__5_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2350 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let seq = mkexp ~loc:_sloc (Pexp_sequence (_1, _5)) in - let payload = PStr [mkstrexp seq []] in - mkexp ~loc:_sloc (Pexp_extension (_4, payload)) ) -# 32944 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2438 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 47960 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33008,18 +48024,18 @@ module Tables = struct let _v : (Parsetree.type_exception * string Location.loc option) = let attrs = let _1 = _1_inlined4 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33014 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48030 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_attrs_ = _endpos__1_inlined4_ in let attrs2 = let _1 = _1_inlined3 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33023 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -33029,17 +48045,17 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 33035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48051 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33043 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48059 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_attrs_ in @@ -33047,14 +48063,14 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3351 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.mk_exception ~attrs ~loc (Te.decl id ~vars ~args ?res ~attrs:(attrs1 @ attrs2) ~loc ~docs) , ext ) -# 33058 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48074 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33080,21 +48096,21 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 33084 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 997 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( extra_sig _startpos _endpos _1 ) -# 33092 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48108 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1779 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1836 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48114 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33126,9 +48142,9 @@ module Tables = struct let _v : (Parsetree.signature_item) = let _2 = let _1 = _1_inlined1 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33132 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48148 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -33136,10 +48152,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1794 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1851 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let docs = symbol_docs _sloc in mksig ~loc:_sloc (Psig_extension (_1, (add_docs_attrs docs _2))) ) -# 33143 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48159 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33163,23 +48179,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1798 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1855 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Psig_attribute _1 ) -# 33169 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48185 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1045 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1083 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mksig ~loc:_sloc _1 ) -# 33177 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48193 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1800 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1857 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33183 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48199 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33203,23 +48219,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1803 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1860 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( psig_value _1 ) -# 33209 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48225 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33217 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48233 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1835 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33223 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48239 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33243,23 +48259,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1805 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1862 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( psig_value _1 ) -# 33249 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48265 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33257 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48273 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1835 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33263 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48279 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33294,26 +48310,26 @@ module Tables = struct let _1 = let _1 = let _1 = -# 1235 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1294 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (x, b) = a in x, b :: bs ) -# 33300 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48316 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3170 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3443 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33305 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48321 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3153 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3426 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33311 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48327 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1807 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1864 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( psig_type _1 ) -# 33317 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48333 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_bs_, _startpos_a_) in @@ -33321,15 +48337,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33327 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48343 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1835 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33333 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48349 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33364,26 +48380,26 @@ module Tables = struct let _1 = let _1 = let _1 = -# 1235 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1294 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (x, b) = a in x, b :: bs ) -# 33370 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48386 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3170 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3443 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33375 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48391 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3158 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33381 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48397 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1809 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1866 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( psig_typesubst _1 ) -# 33387 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48403 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_bs_, _startpos_a_) in @@ -33391,15 +48407,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33397 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48413 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1835 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33403 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48419 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33484,16 +48500,16 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33490 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48506 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in let cs = -# 1227 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1286 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( List.rev xs ) -# 33497 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let tid = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in @@ -33501,46 +48517,47 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 33507 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48523 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _4 = -# 3948 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4344 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Recursive ) -# 33513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48529 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33520 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48536 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3425 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3708 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let docs = symbol_docs _sloc in let attrs = attrs1 @ attrs2 in - Te.mk tid cs ~params ~priv ~attrs ~docs, + let loc = make_loc _sloc in + Te.mk tid cs ~params ~priv ~attrs ~docs ~loc, ext ) -# 33532 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48549 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3412 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3695 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33538 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48555 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1811 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1868 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( psig_typext _1 ) -# 33544 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48561 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -33548,15 +48565,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33554 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48571 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1835 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33560 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48577 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33648,16 +48665,16 @@ module Tables = struct let attrs2 = let _1 = _1_inlined4 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33654 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48671 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in let cs = -# 1227 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1286 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( List.rev xs ) -# 33661 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48678 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let tid = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in @@ -33665,9 +48682,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 33671 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48688 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _4 = @@ -33676,41 +48693,42 @@ module Tables = struct let _startpos = _startpos__1_ in let _loc = (_startpos, _endpos) in -# 3950 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4346 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( not_expecting _loc "nonrec flag"; Recursive ) -# 33682 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48699 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33690 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48707 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3425 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3708 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let docs = symbol_docs _sloc in let attrs = attrs1 @ attrs2 in - Te.mk tid cs ~params ~priv ~attrs ~docs, + let loc = make_loc _sloc in + Te.mk tid cs ~params ~priv ~attrs ~docs ~loc, ext ) -# 33702 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48720 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3412 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3695 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33708 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48726 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1811 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1868 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( psig_typext _1 ) -# 33714 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48732 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__1_inlined4_ in @@ -33718,15 +48736,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33724 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48742 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1835 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33730 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48748 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33750,23 +48768,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1813 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1870 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( psig_exception _1 ) -# 33756 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48774 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33764 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1835 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33770 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48788 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33829,9 +48847,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33835 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48853 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -33841,37 +48859,37 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 33847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48865 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33855 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48873 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1844 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1901 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 ) -# 33869 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48887 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1815 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1872 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (body, ext) = _1 in (Psig_module body, ext) ) -# 33875 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48893 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -33879,15 +48897,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33885 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48903 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1835 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33891 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48909 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33957,9 +48975,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined4 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 33963 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48981 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in @@ -33970,9 +48988,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 33976 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 48994 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos_id_, _startpos_id_) = (_endpos__1_, _startpos__1_) in @@ -33980,9 +48998,9 @@ module Tables = struct let _symbolstartpos = _startpos_id_ in let _sloc = (_symbolstartpos, _endpos) in -# 1885 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1942 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Mty.alias ~loc:(make_loc _sloc) id ) -# 33986 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let name = @@ -33991,37 +49009,37 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 33997 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49015 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 34005 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49023 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1876 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1933 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 ) -# 34019 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1817 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1874 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (body, ext) = _1 in (Psig_module body, ext) ) -# 34025 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49043 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__1_inlined4_ in @@ -34029,15 +49047,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 34035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49053 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1835 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 34041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49059 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34061,23 +49079,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1819 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1876 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (body, ext) = _1 in (Psig_modsubst body, ext) ) -# 34067 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49085 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 34075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49093 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1835 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 34081 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49099 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34163,9 +49181,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 34169 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49187 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -34175,49 +49193,49 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 34181 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49199 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 34189 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49207 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1921 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1978 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 ) -# 34203 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49221 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1235 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1294 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (x, b) = a in x, b :: bs ) -# 34209 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49227 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1910 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1967 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 34215 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49233 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1821 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1878 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (ext, l) = _1 in (Psig_recmodule l, ext) ) -# 34221 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49239 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos_bs_ in @@ -34225,15 +49243,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 34231 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49249 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1835 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 34237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49255 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34257,23 +49275,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1823 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1880 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (body, ext) = _1 in (Psig_modtype body, ext) ) -# 34263 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49281 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 34271 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49289 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1835 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 34277 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49295 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34297,23 +49315,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1825 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1882 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (body, ext) = _1 in (Psig_modtypesubst body, ext) ) -# 34303 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49321 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 34311 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49329 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1835 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 34317 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49335 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34337,23 +49355,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1884 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (body, ext) = _1 in (Psig_open body, ext) ) -# 34343 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49361 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 34351 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49369 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1835 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 34357 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49375 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34409,38 +49427,38 @@ module Tables = struct let attrs2 = let _1 = _1_inlined2 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 34415 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49433 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_attrs2_ = _endpos__1_inlined2_ in let attrs1 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 34424 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49442 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1661 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1720 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Incl.mk thing ~attrs ~loc ~docs, ext ) -# 34438 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49456 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1829 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1886 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( psig_include _1 ) -# 34444 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49462 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__1_inlined2_ in @@ -34448,15 +49466,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 34454 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49472 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1835 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 34460 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49478 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34533,9 +49551,9 @@ module Tables = struct let cty : (Parsetree.class_type) = Obj.magic cty in let _7 : unit = Obj.magic _7 in let _1_inlined2 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 34539 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49557 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 @@ -34553,9 +49571,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 34559 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49577 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -34565,24 +49583,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 34571 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49589 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 34579 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49597 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2276 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2333 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -34590,25 +49608,25 @@ module Tables = struct ext, Ci.mk id cty ~virt ~params ~attrs ~loc ~docs ) -# 34594 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49612 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1235 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1294 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (x, b) = a in x, b :: bs ) -# 34600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49618 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2264 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2321 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 34606 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49624 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1831 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1888 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (ext, l) = _1 in (Psig_class l, ext) ) -# 34612 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos_bs_ in @@ -34616,15 +49634,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 34622 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49640 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1835 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 34628 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49646 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34648,23 +49666,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1890 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (ext, l) = _1 in (Psig_class_type l, ext) ) -# 34654 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49672 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 34662 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49680 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1835 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 34668 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49686 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34687,9 +49705,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.constant) = -# 3755 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4145 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 34693 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49711 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34714,18 +49732,22 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 787 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 832 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string * char option) -# 34720 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49738 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = -# 3756 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let (n, m) = _2 in Pconst_integer("-" ^ n, m) ) -# 34729 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.constant) = let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4146 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let (n, m) = _2 in + mkconst ~loc:_sloc (Pconst_integer("-" ^ n, m)) ) +# 49751 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34750,18 +49772,22 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 765 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 810 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string * char option) -# 34756 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49778 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = -# 3757 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let (f, m) = _2 in Pconst_float("-" ^ f, m) ) -# 34765 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.constant) = let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4148 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let (f, m) = _2 in + mkconst ~loc:_sloc (Pconst_float("-" ^ f, m)) ) +# 49791 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34786,18 +49812,22 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 787 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 832 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string * char option) -# 34792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49818 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = -# 3758 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let (n, m) = _2 in Pconst_integer (n, m) ) -# 34801 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.constant) = let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4150 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let (n, m) = _2 in + mkconst ~loc:_sloc (Pconst_integer (n, m)) ) +# 49831 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34822,18 +49852,22 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 765 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 810 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string * char option) -# 34828 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49858 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = -# 3759 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let (f, m) = _2 in Pconst_float(f, m) ) -# 34837 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.constant) = let _endpos = _endpos__2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4152 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let (f, m) = _2 in + mkconst ~loc:_sloc (Pconst_float(f, m)) ) +# 49871 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34874,18 +49908,18 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3082 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3355 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let fields, closed = _1 in let closed = match closed with Some () -> Open | None -> Closed in fields, closed ) -# 34882 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49916 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3053 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3270 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (fields, closed) = _2 in Ppat_record(fields, closed) ) -# 34889 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49923 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__3_ in @@ -34893,15 +49927,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkpat ~loc:_sloc _1 ) -# 34899 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49933 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3067 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3284 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 34905 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49939 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34940,15 +49974,15 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _2 = -# 3076 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3349 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( ps ) -# 34946 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49980 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 3058 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3275 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( fst (mktailpat _loc__3_ _2) ) -# 34952 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49986 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__3_ in @@ -34956,15 +49990,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkpat ~loc:_sloc _1 ) -# 34962 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 49996 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3067 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3284 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 34968 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50002 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35003,14 +50037,14 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _2 = -# 3076 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3349 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( ps ) -# 35009 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50043 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3279 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Ppat_array _2 ) -# 35014 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50048 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__3_ in @@ -35018,15 +50052,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkpat ~loc:_sloc _1 ) -# 35024 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50058 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3067 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3284 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 35030 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50064 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35057,99 +50091,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 3064 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3281 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Ppat_array [] ) -# 35063 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50097 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkpat ~loc:_sloc _1 ) -# 35072 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50106 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3067 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3284 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 35078 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = _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 : unit = 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 : (Parsetree.expression) = let _endpos = _endpos__3_ in - let _startpos = _startpos__1_ in - -# 4142 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Fake.Meta.code _startpos _endpos _2 ) -# 35119 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Parsetree.expression) = let _endpos = _endpos__2_ in - let _startpos = _startpos__1_ in - -# 4144 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Fake.Meta.uncode _startpos _endpos _2 ) -# 35153 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50112 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35189,9 +50148,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2520 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2609 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( reloc_exp ~loc:_sloc _2 ) -# 35195 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50154 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35228,7 +50187,7 @@ module Tables = struct }; } = _menhir_stack in let _4 : unit = Obj.magic _4 in - let _3 : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic _3 in + let _3 : (Parsetree.type_constraint) = 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 @@ -35238,9 +50197,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2526 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2615 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp_constraint ~loc:_sloc _2 _3 ) -# 35244 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50203 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35292,14 +50251,14 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2527 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2616 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( None ) -# 35298 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50257 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2406 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2492 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( array, d, Paren, i, r ) -# 35303 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50262 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -35307,9 +50266,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2528 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2617 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 35313 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50272 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35361,14 +50320,14 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2527 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2616 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( None ) -# 35367 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50326 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2408 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2494 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( array, d, Brace, i, r ) -# 35372 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50331 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -35376,9 +50335,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2528 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2617 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 35382 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50341 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35430,14 +50389,14 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2527 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2616 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( None ) -# 35436 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50395 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2410 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2496 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( array, d, Bracket, i, r ) -# 35441 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50400 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -35445,9 +50404,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2528 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2617 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) -# 35451 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50410 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35493,9 +50452,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 35499 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50458 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) = Obj.magic _2 in let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -35503,31 +50462,31 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2529 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2618 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( None ) -# 35509 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50468 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let i = -# 2904 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( es ) -# 35514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50473 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let d = let _1 = # 124 "" ( None ) -# 35520 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50479 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2422 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _2 ) -# 35525 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50484 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2406 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2492 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( array, d, Paren, i, r ) -# 35531 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50490 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -35535,9 +50494,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2530 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2619 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 35541 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35595,9 +50554,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 35601 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50560 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) = Obj.magic _2 in let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in let _1 : unit = Obj.magic _1 in @@ -35607,39 +50566,39 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2529 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2618 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( None ) -# 35613 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50572 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let i = -# 2904 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( es ) -# 35618 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50577 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let d = let _1 = let _2 = _2_inlined1 in let x = -# 2422 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (_2) -# 35626 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50585 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in # 126 "" ( Some x ) -# 35631 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50590 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2422 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _2 ) -# 35637 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50596 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2406 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2492 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( array, d, Paren, i, r ) -# 35643 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50602 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -35647,9 +50606,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2530 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2619 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 35653 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50612 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35695,9 +50654,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 35701 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50660 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) = Obj.magic _2 in let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -35705,31 +50664,31 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2529 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2618 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( None ) -# 35711 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50670 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let i = -# 2904 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( es ) -# 35716 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50675 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let d = let _1 = # 124 "" ( None ) -# 35722 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50681 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2422 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _2 ) -# 35727 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50686 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2408 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2494 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( array, d, Brace, i, r ) -# 35733 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50692 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -35737,9 +50696,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2530 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2619 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 35743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50702 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35797,9 +50756,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 35803 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50762 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) = Obj.magic _2 in let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in let _1 : unit = Obj.magic _1 in @@ -35809,39 +50768,39 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2529 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2618 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( None ) -# 35815 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50774 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let i = -# 2904 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( es ) -# 35820 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50779 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let d = let _1 = let _2 = _2_inlined1 in let x = -# 2422 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (_2) -# 35828 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50787 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in # 126 "" ( Some x ) -# 35833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50792 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2422 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _2 ) -# 35839 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50798 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2408 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2494 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( array, d, Brace, i, r ) -# 35845 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50804 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -35849,9 +50808,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2530 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2619 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 35855 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50814 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35897,9 +50856,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 35903 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50862 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) = Obj.magic _2 in let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -35907,31 +50866,31 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2529 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2618 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( None ) -# 35913 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50872 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let i = -# 2904 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( es ) -# 35918 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50877 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let d = let _1 = # 124 "" ( None ) -# 35924 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50883 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2422 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _2 ) -# 35929 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50888 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2410 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2496 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( array, d, Bracket, i, r ) -# 35935 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50894 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -35939,9 +50898,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2530 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2619 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 35945 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50904 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35999,9 +50958,9 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 36005 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50964 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) = Obj.magic _2 in let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in let _1 : unit = Obj.magic _1 in @@ -36011,39 +50970,39 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _1 = let r = -# 2529 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2618 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( None ) -# 36017 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50976 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let i = -# 2904 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( es ) -# 36022 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50981 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let d = let _1 = let _2 = _2_inlined1 in let x = -# 2422 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (_2) -# 36030 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50989 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in # 126 "" ( Some x ) -# 36035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 50994 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2422 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _2 ) -# 36041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51000 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2410 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2496 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( array, d, Bracket, i, r ) -# 36047 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51006 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in @@ -36051,9 +51010,100 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2530 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2619 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) -# 36057 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51016 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; + 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 e : (Parsetree.expression) = Obj.magic e 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_e_ in + let _v : (Parsetree.expression) = let _1 = + let _endpos = _endpos_e_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2670 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc (pexp_extension ~id:(mknoloc "metaocaml.escape") e) ) +# 51052 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2624 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 51058 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 = e; + MenhirLib.EngineTypes.startp = _startpos_e_; + MenhirLib.EngineTypes.endp = _endpos_e_; + 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 e : (Parsetree.expression) = Obj.magic e 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 _endpos = _endpos__3_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2672 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mkexp ~loc:_sloc (pexp_extension ~id:(mknoloc "metaocaml.bracket") e) ) +# 51101 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in + +# 2624 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( _1 ) +# 51107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36107,15 +51157,15 @@ module Tables = struct let attrs = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 36113 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51163 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2544 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( e.pexp_desc, (ext, attrs @ e.pexp_attributes) ) -# 36119 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51169 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__5_ in @@ -36123,10 +51173,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2536 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2626 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 36130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51180 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36175,24 +51225,24 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 36181 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51231 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _2 ) -# 36187 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2546 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2636 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pexp_construct (mkloc (Lident "()") (make_loc _sloc), None), _2 ) -# 36196 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51246 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__3_ in @@ -36200,10 +51250,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2536 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2626 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 36207 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51257 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36253,9 +51303,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 36259 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51309 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _2 = @@ -36263,21 +51313,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 36269 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51319 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _2 ) -# 36275 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51325 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2552 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2642 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pexp_new(_3), _2 ) -# 36281 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51331 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -36285,10 +51335,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2536 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2626 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 36292 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51342 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36351,21 +51401,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 36357 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51407 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _2 ) -# 36363 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51413 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2554 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pexp_pack _4, _3 ) -# 36369 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2644 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pexp_pack (_4, None), _3 ) +# 51419 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__5_ in @@ -36373,10 +51423,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2536 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2626 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 36380 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51430 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36454,11 +51504,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3669 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in - let descr = Ptyp_package (lid, cstrs) in - mktyp ~loc:_sloc ~attrs descr ) -# 36462 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 51511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _3 = @@ -36466,24 +51515,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 36472 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51521 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _2 ) -# 36478 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51527 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _endpos = _endpos__7_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2556 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Pexp_constraint (ghexp ~loc:_sloc (Pexp_pack _4), _6), _3 ) -# 36487 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2646 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pexp_pack (_4, Some _6), _3 ) +# 51533 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__7_ in @@ -36491,10 +51537,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2536 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2626 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 36498 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51544 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36559,27 +51605,27 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 36563 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51609 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2090 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2147 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 36568 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51614 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 998 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1036 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( extra_cstr _startpos _endpos _1 ) -# 36577 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51623 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2134 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Cstr.mk _1 _2 ) -# 36583 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51629 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _2 = @@ -36587,21 +51633,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 36593 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51639 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _2 ) -# 36599 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51645 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2562 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2652 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pexp_object _3, _2 ) -# 36605 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51651 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__4_ in @@ -36609,10 +51655,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2536 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2626 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 36616 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51662 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36636,9 +51682,9 @@ module Tables = struct let _endpos = _endpos_e_ in let _v : (Parsetree.expression) = let _loc_e_ = (_startpos_e_, _endpos_e_) in -# 2538 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2628 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Jsx_helper.mkjsxexp ~loc:_loc_e_ e ) -# 36642 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51688 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36667,30 +51713,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 36673 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51719 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2570 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2677 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pexp_ident (_1) ) -# 36679 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51725 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 36688 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51734 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 36694 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51740 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36714,23 +51760,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2572 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2679 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pexp_constant _1 ) -# 36720 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51766 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 36728 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51774 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 36734 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51780 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36759,30 +51805,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 36765 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51811 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2574 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2681 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pexp_construct(_1, None) ) -# 36771 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51817 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 36780 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51826 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 36786 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51832 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36806,23 +51852,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2576 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2683 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pexp_variant(_1, None) ) -# 36812 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51858 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 36820 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51866 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 36826 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51872 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36848,9 +51894,9 @@ module Tables = struct } = _menhir_stack in let _2 : (Parsetree.expression) = Obj.magic _2 in let _1 : ( -# 828 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 873 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 36854 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51900 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -36862,15 +51908,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkoperator ~loc:_sloc _1 ) -# 36868 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51914 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2578 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2685 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pexp_apply(_1, [Nolabel,_2]) ) -# 36874 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51920 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__2_ in @@ -36878,15 +51924,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 36884 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51930 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 36890 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51936 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36919,23 +51965,23 @@ module Tables = struct let _1 = let _1 = let _1 = -# 2579 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2686 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ("!") -# 36925 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51971 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkoperator ~loc:_sloc _1 ) -# 36933 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51979 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2580 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2687 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pexp_apply(_1, [Nolabel,_2]) ) -# 36939 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51985 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__2_ in @@ -36943,15 +51989,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 36949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 51995 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 36955 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52001 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36990,14 +52036,14 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _2 = -# 2887 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 36996 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2582 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2689 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pexp_override _2 ) -# 37001 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52047 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__3_ in @@ -37005,15 +52051,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 37011 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52057 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 37017 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52063 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37044,24 +52090,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2588 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2695 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pexp_override [] ) -# 37050 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52096 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 37059 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52105 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 37065 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52111 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37105,15 +52151,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 37111 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52157 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2590 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2697 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pexp_field(_1, _3) ) -# 37117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52163 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -37121,15 +52167,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 37127 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52173 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 37133 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52179 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37187,24 +52233,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 37193 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52239 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1720 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1779 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 37202 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52248 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2592 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2699 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pexp_open(od, _4) ) -# 37208 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52254 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__5_ in @@ -37212,15 +52258,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 37218 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52264 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 37224 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52270 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37273,9 +52319,9 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _4 = -# 2887 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3100 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 37279 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52325 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let od = let _1 = @@ -37283,18 +52329,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 37289 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52335 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1720 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1779 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 37298 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52344 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _startpos_od_ = _startpos__1_ in @@ -37302,10 +52348,10 @@ module Tables = struct let _symbolstartpos = _startpos_od_ in let _sloc = (_symbolstartpos, _endpos) in -# 2594 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2701 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( (* TODO: review the location of Pexp_override *) Pexp_open(od, mkexp ~loc:_sloc (Pexp_override _4)) ) -# 37309 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52355 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__5_ in @@ -37313,15 +52359,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 37319 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52365 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 37325 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52371 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37352,9 +52398,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 37358 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52404 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : (Parsetree.expression) = Obj.magic _1 in @@ -37366,23 +52412,23 @@ module Tables = struct let _3 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 37372 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52418 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 37380 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52426 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2601 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2708 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pexp_send(_1, _3) ) -# 37386 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52432 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -37390,15 +52436,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 37396 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52442 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 37402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52448 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37430,9 +52476,9 @@ module Tables = struct } = _menhir_stack in let _3 : (Parsetree.expression) = Obj.magic _3 in let _1_inlined1 : ( -# 839 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 884 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 37436 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52482 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) = Obj.magic _1_inlined1 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -37446,15 +52492,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkoperator ~loc:_sloc _1 ) -# 37452 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52498 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2603 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2710 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkinfix _1 _2 _3 ) -# 37458 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__3_ in @@ -37462,15 +52508,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 37468 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 37474 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52520 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37494,23 +52540,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2605 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2712 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pexp_extension _1 ) -# 37500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52546 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 37508 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52554 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 37514 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52560 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37538,25 +52584,25 @@ module Tables = struct let _startpos = _startpos__1_ in let _loc = (_startpos, _endpos) in -# 2607 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2714 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let id = mkrhs Ast_helper.hole_txt _loc in Pexp_extension (id, PStr []) ) -# 37545 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52591 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 37554 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 37560 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52606 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37604,18 +52650,18 @@ module Tables = struct let _3 = let (_endpos__2_, _startpos__1_, _2, _1) = (_endpos__2_inlined1_, _startpos__1_inlined1_, _2_inlined1, _1_inlined1) in let _1 = -# 2609 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2716 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (Lident "()") -# 37610 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52656 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 37619 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52665 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__3_, _startpos__3_) = (_endpos__2_inlined1_, _startpos__1_inlined1_) in @@ -37625,25 +52671,25 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 37631 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52677 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1720 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1779 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 37640 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52686 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2610 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2717 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pexp_open(od, mkexp ~loc:(_loc__3_) (Pexp_construct(_3, None))) ) -# 37647 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52693 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__2_inlined1_ in @@ -37651,15 +52697,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 37657 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52703 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 37663 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52709 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37698,25 +52744,25 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2616 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2723 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (exten, fields) = _2 in Pexp_record(fields, exten) ) -# 37705 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52751 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 37714 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52760 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 37720 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52766 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37775,27 +52821,27 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 37781 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1720 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1779 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 37790 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52836 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__5_ in -# 2623 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2730 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (exten, fields) = _4 in Pexp_open(od, mkexp ~loc:(_startpos__3_, _endpos) (Pexp_record(fields, exten))) ) -# 37799 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52845 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__5_ in @@ -37803,15 +52849,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 37809 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52855 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 37815 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52861 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37850,14 +52896,14 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _2 = -# 2904 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( es ) -# 37856 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52902 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2631 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2738 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pexp_array(_2) ) -# 37861 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52907 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__3_ in @@ -37865,15 +52911,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 37871 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52917 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 37877 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52923 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37904,24 +52950,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2637 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2744 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pexp_array [] ) -# 37910 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52956 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 37919 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52965 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 37925 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 52971 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37974,9 +53020,9 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _4 = -# 2904 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( es ) -# 37980 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53026 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let od = let _1 = @@ -37984,25 +53030,25 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 37990 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53036 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1720 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1779 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 37999 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53045 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__5_ in -# 2639 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2746 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pexp_open(od, mkexp ~loc:(_startpos__3_, _endpos) (Pexp_array(_4))) ) -# 38006 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53052 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__5_ in @@ -38010,15 +53056,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 38016 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 38022 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53068 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38069,26 +53115,26 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 38075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53121 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1720 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1779 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 38084 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__4_ in -# 2641 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2748 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( (* TODO: review the location of Pexp_array *) Pexp_open(od, mkexp ~loc:(_startpos__3_, _endpos) (Pexp_array [])) ) -# 38092 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53138 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__4_ in @@ -38096,15 +53142,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 38102 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53148 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 38108 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53154 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38143,15 +53189,15 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _2 = -# 2904 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( es ) -# 38149 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53195 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2649 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2756 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( fst (mktailexp _loc__3_ _2) ) -# 38155 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53201 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__3_ in @@ -38159,15 +53205,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 38165 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53211 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 38171 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53217 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38220,9 +53266,9 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _4 = -# 2904 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3117 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( es ) -# 38226 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53272 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let od = let _1 = @@ -38230,30 +53276,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 38236 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53282 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1720 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1779 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 38245 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53291 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__5_ in let _loc__5_ = (_startpos__5_, _endpos__5_) in -# 2655 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2762 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) ) -# 38257 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53303 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__5_ in @@ -38261,15 +53307,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 38267 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53313 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 38273 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53319 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38317,18 +53363,18 @@ module Tables = struct let _3 = let (_endpos__2_, _startpos__1_, _2, _1) = (_endpos__2_inlined1_, _startpos__1_inlined1_, _2_inlined1, _1_inlined1) in let _1 = -# 2660 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2767 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (Lident "[]") -# 38323 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53369 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 38332 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53378 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__3_, _startpos__3_) = (_endpos__2_inlined1_, _startpos__1_inlined1_) in @@ -38338,25 +53384,25 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 38344 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53390 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1720 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1779 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 38353 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53399 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2661 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2768 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pexp_open(od, mkexp ~loc:_loc__3_ (Pexp_construct(_3, None))) ) -# 38360 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53406 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__2_inlined1_ in @@ -38364,15 +53410,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 38370 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53416 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 38376 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53422 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38459,17 +53505,16 @@ module Tables = struct let _endpos = _endpos__9_ in let _v : (Parsetree.expression) = let _1 = let _1 = - let _8 = + let ptyp = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3669 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in - let descr = Ptyp_package (lid, cstrs) in - mktyp ~loc:_sloc ~attrs descr ) -# 38473 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 53518 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _5 = @@ -38477,15 +53522,15 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 38483 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53528 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _2 ) -# 38489 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53534 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let od = @@ -38494,31 +53539,28 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 38500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53545 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1720 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1779 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 38509 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53554 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let _startpos_od_ = _startpos__1_ in let _endpos = _endpos__9_ in - let _symbolstartpos = _startpos_od_ in - let _sloc = (_symbolstartpos, _endpos) in -# 2669 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2776 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let modexp = mkexp_attrs ~loc:(_startpos__3_, _endpos) - (Pexp_constraint (ghexp ~loc:_sloc (Pexp_pack _6), _8)) _5 in + (Pexp_pack (_6, Some ptyp)) _5 in Pexp_open(od, modexp) ) -# 38522 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53564 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__9_ in @@ -38526,15 +53568,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkexp ~loc:_sloc _1 ) -# 38532 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53574 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 38538 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53580 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38563,30 +53605,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 38569 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53611 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2987 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3204 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Ppat_var (_1) ) -# 38575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53617 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkpat ~loc:_sloc _1 ) -# 38584 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53626 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2988 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3205 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 38590 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53632 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38609,9 +53651,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = -# 2989 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3206 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 38615 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53657 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38651,9 +53693,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2994 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3211 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( reloc_pat ~loc:_sloc _2 ) -# 38657 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53699 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38676,9 +53718,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = -# 2996 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3213 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 38682 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53724 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38741,9 +53783,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 38747 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53789 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _3 = @@ -38751,24 +53793,24 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 38757 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53799 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _2 ) -# 38763 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53805 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2998 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3215 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkpat_attrs ~loc:_sloc (Ppat_unpack _4) _3 ) -# 38772 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53814 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38841,15 +53883,24 @@ module Tables = struct let _endpos = _endpos__7_ in let _v : (Parsetree.pattern) = let _6 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined4_, _startpos__1_inlined4_, _1_inlined4) in + let _1 = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 4054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in + Typ.package_type ~loc:(make_loc _sloc) ~attrs lid cstrs ) +# 53895 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + + in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3669 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in - let descr = Ptyp_package (lid, cstrs) in - mktyp ~loc:_sloc ~attrs descr ) -# 38853 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 4058 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( mktyp ~loc:_sloc (Ptyp_package _1) ) +# 53904 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _4 = @@ -38858,9 +53909,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 38864 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53915 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__4_, _startpos__4_) = (_endpos__1_inlined3_, _startpos__1_inlined3_) in @@ -38869,15 +53920,15 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 38875 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53926 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 4120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1, _2 ) -# 38881 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53932 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__7_ in @@ -38885,11 +53936,11 @@ module Tables = struct let _loc__4_ = (_startpos__4_, _endpos__4_) in let _sloc = (_symbolstartpos, _endpos) in -# 3000 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3217 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkpat_attrs ~loc:_sloc (Ppat_constraint(mkpat ~loc:_loc__4_ (Ppat_unpack _4), _6)) _3 ) -# 38893 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53944 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38913,23 +53964,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 3008 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3225 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Ppat_any ) -# 38919 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53970 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkpat ~loc:_sloc _1 ) -# 38927 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53978 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3221 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 38933 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 53984 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38953,23 +54004,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 3010 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3227 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Ppat_constant _1 ) -# 38959 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54010 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkpat ~loc:_sloc _1 ) -# 38967 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54018 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3221 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 38973 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54024 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39007,24 +54058,24 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 3012 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3229 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Ppat_interval (_1, _3) ) -# 39013 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54064 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkpat ~loc:_sloc _1 ) -# 39022 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54073 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3221 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 39028 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39053,30 +54104,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 39059 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54110 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3014 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3231 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Ppat_construct(_1, None) ) -# 39065 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54116 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkpat ~loc:_sloc _1 ) -# 39074 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54125 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3221 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 39080 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54131 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39100,23 +54151,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 3016 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3233 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Ppat_variant(_1, None) ) -# 39106 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54157 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkpat ~loc:_sloc _1 ) -# 39114 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54165 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3221 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 39120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54171 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39153,15 +54204,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 39159 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54210 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3018 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3235 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Ppat_type (_2) ) -# 39165 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54216 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -39169,15 +54220,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkpat ~loc:_sloc _1 ) -# 39175 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54226 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3221 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 39181 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54232 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39220,15 +54271,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 39226 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54277 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3020 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Ppat_open(_1, _3) ) -# 39232 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54283 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__3_ in @@ -39236,15 +54287,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkpat ~loc:_sloc _1 ) -# 39242 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54293 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3221 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 39248 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54299 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39292,18 +54343,18 @@ module Tables = struct let _3 = let (_endpos__2_, _startpos__1_, _2, _1) = (_endpos__2_inlined1_, _startpos__1_inlined1_, _2_inlined1, _1_inlined1) in let _1 = -# 3021 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3238 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (Lident "[]") -# 39298 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54349 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 39307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54358 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__3_ = _endpos__2_inlined1_ in @@ -39312,18 +54363,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 39318 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54369 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3022 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3239 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Ppat_open(_1, mkpat ~loc:_sloc (Ppat_construct(_3, None))) ) -# 39327 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54378 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__2_inlined1_ in @@ -39331,15 +54382,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkpat ~loc:_sloc _1 ) -# 39337 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54388 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3221 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 39343 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54394 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39387,18 +54438,18 @@ module Tables = struct let _3 = let (_endpos__2_, _startpos__1_, _2, _1) = (_endpos__2_inlined1_, _startpos__1_inlined1_, _2_inlined1, _1_inlined1) in let _1 = -# 3023 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3240 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (Lident "()") -# 39393 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54444 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 39402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54453 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__3_ = _endpos__2_inlined1_ in @@ -39407,18 +54458,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 39413 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54464 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3024 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3241 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Ppat_open(_1, mkpat ~loc:_sloc (Ppat_construct(_3, None))) ) -# 39422 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54473 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__2_inlined1_ in @@ -39426,15 +54477,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkpat ~loc:_sloc _1 ) -# 39432 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54483 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3221 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 39438 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54489 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39491,15 +54542,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 39497 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54548 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3026 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3243 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Ppat_open (_1, _4) ) -# 39503 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54554 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__5_ in @@ -39507,15 +54558,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkpat ~loc:_sloc _1 ) -# 39513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54564 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3221 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 39519 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54570 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39567,24 +54618,24 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 3036 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3253 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Ppat_constraint(_2, _4) ) -# 39573 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54624 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__5_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkpat ~loc:_sloc _1 ) -# 39582 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54633 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3221 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 39588 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54639 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39608,23 +54659,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 3047 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3264 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Ppat_extension _1 ) -# 39614 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54665 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkpat ~loc:_sloc _1 ) -# 39622 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54673 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3221 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 39628 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54679 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39643,17 +54694,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 39649 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54700 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = -# 4028 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4424 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 39657 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54708 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39672,17 +54723,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 856 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 901 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 39678 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54729 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = -# 4029 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4425 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 39686 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54737 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39705,9 +54756,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4030 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4426 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "and" ) -# 39711 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54762 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39730,9 +54781,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4427 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "as" ) -# 39736 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54787 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39755,9 +54806,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4032 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4428 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "assert" ) -# 39761 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54812 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39780,9 +54831,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4033 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4429 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "begin" ) -# 39786 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54837 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39805,9 +54856,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4034 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4430 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "class" ) -# 39811 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54862 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39830,9 +54881,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4431 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "constraint" ) -# 39836 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54887 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39855,9 +54906,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4036 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4432 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "do" ) -# 39861 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54912 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39880,9 +54931,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4433 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "done" ) -# 39886 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54937 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39905,9 +54956,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4038 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4434 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "downto" ) -# 39911 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 54962 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39930,9 +54981,34 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4435 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( "effect" ) +# 54987 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : unit = 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) = +# 4436 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "else" ) -# 39936 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55012 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39955,9 +55031,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4040 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4437 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "end" ) -# 39961 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39980,9 +55056,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4438 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "exception" ) -# 39986 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40005,9 +55081,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4439 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "external" ) -# 40011 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55087 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40030,9 +55106,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4043 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4440 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "false" ) -# 40036 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55112 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40055,9 +55131,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4044 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4441 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "for" ) -# 40061 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55137 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40080,9 +55156,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4045 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4442 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "fun" ) -# 40086 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55162 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40105,9 +55181,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4046 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4443 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "function" ) -# 40111 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55187 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40130,9 +55206,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4047 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4444 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "functor" ) -# 40136 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55212 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40155,9 +55231,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4048 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4445 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "if" ) -# 40161 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40180,9 +55256,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4049 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4446 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "in" ) -# 40186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55262 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40205,9 +55281,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4050 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4447 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "include" ) -# 40211 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55287 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40230,9 +55306,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4051 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4448 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "inherit" ) -# 40236 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55312 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40255,9 +55331,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4052 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4449 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "initializer" ) -# 40261 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55337 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40280,9 +55356,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4053 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4450 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "lazy" ) -# 40286 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55362 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40305,9 +55381,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4451 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "let" ) -# 40311 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55387 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40330,9 +55406,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4055 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4452 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "match" ) -# 40336 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55412 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40355,9 +55431,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4056 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4453 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "method" ) -# 40361 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55437 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40380,9 +55456,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4057 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4454 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "module" ) -# 40386 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55462 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40405,9 +55481,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4058 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4455 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "mutable" ) -# 40411 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55487 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40430,9 +55506,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4059 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4456 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "new" ) -# 40436 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55512 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40455,9 +55531,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4457 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "nonrec" ) -# 40461 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55537 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40480,9 +55556,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4061 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4458 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "object" ) -# 40486 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55562 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40505,9 +55581,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4062 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4459 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "of" ) -# 40511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55587 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40530,9 +55606,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4063 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4460 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "open" ) -# 40536 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55612 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40555,9 +55631,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4064 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4461 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "or" ) -# 40561 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55637 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40580,9 +55656,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4065 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4462 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "private" ) -# 40586 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55662 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40605,9 +55681,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4066 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4463 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "rec" ) -# 40611 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55687 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40630,9 +55706,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4067 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4464 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "sig" ) -# 40636 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55712 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40655,9 +55731,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4068 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4465 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "struct" ) -# 40661 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55737 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40680,9 +55756,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4466 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "then" ) -# 40686 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55762 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40705,9 +55781,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4070 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4467 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "to" ) -# 40711 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55787 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40730,9 +55806,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4071 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4468 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "true" ) -# 40736 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55812 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40755,9 +55831,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4072 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4469 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "try" ) -# 40761 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55837 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40780,9 +55856,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4073 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4470 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "type" ) -# 40786 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55862 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40805,9 +55881,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4074 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4471 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "val" ) -# 40811 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55887 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40830,9 +55906,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4075 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4472 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "virtual" ) -# 40836 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55912 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40855,9 +55931,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4076 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4473 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "when" ) -# 40861 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55937 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40880,9 +55956,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4474 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "while" ) -# 40886 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55962 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40905,9 +55981,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4078 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4475 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "with" ) -# 40911 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 55987 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40930,9 +56006,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.type_exception * string Location.loc option) = -# 3328 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3611 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 40936 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56012 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41006,18 +56082,18 @@ module Tables = struct let _v : (Parsetree.type_exception * string Location.loc option) = let attrs = let _1 = _1_inlined5 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 41012 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56088 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_attrs_ = _endpos__1_inlined5_ in let attrs2 = let _1 = _1_inlined4 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 41021 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56097 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let lid = @@ -41026,9 +56102,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 41032 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56108 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let id = @@ -41037,30 +56113,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 41043 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56119 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 41051 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56127 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_attrs_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3337 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3620 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let loc = make_loc _sloc in let docs = symbol_docs _sloc in - Te.mk_exception ~attrs + Te.mk_exception ~attrs ~loc (Te.rebind id lid ~attrs:(attrs1 @ attrs2) ~loc ~docs) , ext ) -# 41064 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56140 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41090,9 +56166,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = -# 2828 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2928 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _2 ) -# 41096 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56172 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41105,90 +56181,44 @@ module Tables = struct 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 : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = 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 _endpos = _endpos__2_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2830 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( let (l, o, p) = _1 in ghexp ~loc:_sloc (Pexp_fun(l, o, p, _2)) ) -# 41131 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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.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 = xs; - MenhirLib.EngineTypes.startp = _startpos_xs_; - MenhirLib.EngineTypes.endp = _endpos_xs_; + 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 = _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 : (Parsetree.expression) = Obj.magic _5 in - let _4 : unit = Obj.magic _4 in - let xs : (string Location.loc list) = Obj.magic xs in - let _2 : unit = Obj.magic _2 in - let _1 : unit = Obj.magic _1 in + let _4 : (Parsetree.function_body) = Obj.magic _4 in + let _3 : unit = Obj.magic _3 in + let _2 : (Parsetree.type_constraint option) = Obj.magic _2 in + let _1 : (Parsetree.function_param list) = 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 _3 = -# 2723 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 41184 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - let _endpos = _endpos__5_ in + let _endpos = _endpos__4_ in + let _v : (Parsetree.expression) = let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2832 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mk_newtypes ~loc:_sloc _3 _5 ) -# 41192 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 2930 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ghexp ~loc:_sloc (mkfunction _1 _2 _4) + ) +# 56222 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41215,39 +56245,39 @@ module Tables = struct let ys = # 260 "" ( List.flatten xss ) -# 41219 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56249 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let xs = let items = -# 1074 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1112 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [] ) -# 41225 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56255 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1519 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1578 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( items ) -# 41230 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56260 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in # 267 "" ( xs @ ys ) -# 41236 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56266 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 996 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1034 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( extra_str _startpos _endpos _1 ) -# 41245 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56275 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1512 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1571 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 41251 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56281 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41288,7 +56318,7 @@ module Tables = struct let ys = # 260 "" ( List.flatten xss ) -# 41292 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56322 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let xs = let items = @@ -41296,93 +56326,65 @@ module Tables = struct let _1 = let _1 = let attrs = -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 41302 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56332 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1526 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1585 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkstrexp e attrs ) -# 41307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56337 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _startpos__1_ = _startpos_e_ in let _startpos = _startpos__1_ in -# 1008 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1046 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( text_str _startpos @ [_1] ) -# 41315 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56345 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _startpos__1_ = _startpos_e_ in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 1027 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1065 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mark_rhs_docs _startpos _endpos; _1 ) -# 41325 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56355 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1076 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1114 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( x ) -# 41331 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56361 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1519 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1578 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( items ) -# 41337 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56367 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in # 267 "" ( xs @ ys ) -# 41343 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56373 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_e_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 996 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1034 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( extra_str _startpos _endpos _1 ) -# 41352 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56382 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1512 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1571 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 41358 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 : (Ast_helper.let_bindings) = 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.structure_item) = let _endpos = _endpos__1_ in - let _startpos = _startpos__1_ in - let _loc = (_startpos, _endpos) in - -# 4150 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( val_of_lwt_bindings ~loc:_loc _1 ) -# 41386 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56388 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41408,9 +56410,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1541 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1600 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( val_of_let_bindings ~loc:_sloc _1 ) -# 41414 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56416 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41444,9 +56446,9 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 41450 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56452 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -41454,10 +56456,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1544 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1603 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let docs = symbol_docs _sloc in Pstr_extension (_1, add_docs_attrs docs _2) ) -# 41461 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56463 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -41465,15 +56467,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1043 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1081 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkstr ~loc:_sloc _1 ) -# 41471 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56473 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 41477 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56479 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41497,23 +56499,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1606 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pstr_attribute _1 ) -# 41503 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56505 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1043 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1081 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkstr ~loc:_sloc _1 ) -# 41511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 41517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56519 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41537,23 +56539,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1551 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1610 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( pstr_primitive _1 ) -# 41543 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56545 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 41551 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56553 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 41557 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56559 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41577,23 +56579,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1553 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1612 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( pstr_primitive _1 ) -# 41583 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56585 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 41591 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56593 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 41597 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56599 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41628,26 +56630,26 @@ module Tables = struct let _1 = let _1 = let _1 = -# 1235 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1294 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (x, b) = a in x, b :: bs ) -# 41634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56636 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3170 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3443 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 41639 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56641 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3153 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3426 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 41645 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56647 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1555 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1614 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( pstr_type _1 ) -# 41651 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56653 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_bs_, _startpos_a_) in @@ -41655,15 +56657,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 41661 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56663 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 41667 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56669 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41748,16 +56750,16 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 41754 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56756 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in let cs = -# 1227 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1286 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( List.rev xs ) -# 41761 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56763 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let tid = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in @@ -41765,46 +56767,47 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 41771 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56773 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _4 = -# 3948 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4344 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Recursive ) -# 41777 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56779 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 41784 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56786 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3425 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3708 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let docs = symbol_docs _sloc in let attrs = attrs1 @ attrs2 in - Te.mk tid cs ~params ~priv ~attrs ~docs, + let loc = make_loc _sloc in + Te.mk tid cs ~params ~priv ~attrs ~docs ~loc, ext ) -# 41796 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56799 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3408 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3691 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 41802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56805 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1557 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1616 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( pstr_typext _1 ) -# 41808 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56811 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -41812,15 +56815,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 41818 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56821 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 41824 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41912,16 +56915,16 @@ module Tables = struct let attrs2 = let _1 = _1_inlined4 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 41918 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56921 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in let cs = -# 1227 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1286 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( List.rev xs ) -# 41925 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56928 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let tid = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in @@ -41929,9 +56932,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 41935 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56938 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _4 = @@ -41940,41 +56943,42 @@ module Tables = struct let _startpos = _startpos__1_ in let _loc = (_startpos, _endpos) in -# 3950 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4346 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( not_expecting _loc "nonrec flag"; Recursive ) -# 41946 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56949 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 41954 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56957 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3425 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3708 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let docs = symbol_docs _sloc in let attrs = attrs1 @ attrs2 in - Te.mk tid cs ~params ~priv ~attrs ~docs, + let loc = make_loc _sloc in + Te.mk tid cs ~params ~priv ~attrs ~docs ~loc, ext ) -# 41966 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56970 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3408 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3691 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 41972 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56976 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1557 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1616 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( pstr_typext _1 ) -# 41978 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56982 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__1_inlined4_ in @@ -41982,15 +56986,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 41988 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56992 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 41994 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 56998 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42014,23 +57018,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1559 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1618 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( pstr_exception _1 ) -# 42020 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57024 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 42028 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57032 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 42034 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57038 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42093,9 +57097,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 42099 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -42105,36 +57109,36 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 42111 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57115 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 42119 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57123 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1585 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1644 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 ) -# 42132 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57136 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1561 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1620 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 42138 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57142 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -42142,15 +57146,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 42148 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57152 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 42154 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57158 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42229,9 +57233,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 42235 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57239 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -42241,24 +57245,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 42247 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57251 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 42255 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57259 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1624 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1683 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let loc = make_loc _sloc in let attrs = attrs1 @ attrs2 in @@ -42266,25 +57270,25 @@ module Tables = struct ext, Mb.mk name body ~attrs ~loc ~docs ) -# 42270 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57274 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1235 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1294 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (x, b) = a in x, b :: bs ) -# 42276 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57280 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1612 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1671 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 42282 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57286 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1563 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1622 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( pstr_recmodule _1 ) -# 42288 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57292 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos_bs_ in @@ -42292,15 +57296,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 42298 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57302 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 42304 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57308 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42324,23 +57328,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1565 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1624 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (body, ext) = _1 in (Pstr_modtype body, ext) ) -# 42330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57334 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 42338 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57342 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 42344 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57348 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42364,23 +57368,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1567 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1626 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (body, ext) = _1 in (Pstr_open body, ext) ) -# 42370 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57374 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 42378 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57382 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 42384 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57388 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42450,9 +57454,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 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 42456 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57460 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 @@ -42470,9 +57474,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 42476 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57480 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -42482,24 +57486,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 42488 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57492 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 42496 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1978 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2035 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -42507,25 +57511,25 @@ module Tables = struct ext, Ci.mk id body ~virt ~params ~attrs ~loc ~docs ) -# 42511 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57515 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1235 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1294 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (x, b) = a in x, b :: bs ) -# 42517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57521 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1967 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2024 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 42523 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57527 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1569 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1628 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (ext, l) = _1 in (Pstr_class l, ext) ) -# 42529 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57533 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos_bs_ in @@ -42533,15 +57537,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 42539 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57543 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 42545 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57549 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42565,23 +57569,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1571 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1630 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (ext, l) = _1 in (Pstr_class_type l, ext) ) -# 42571 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 42579 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57583 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 42585 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57589 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42637,38 +57641,38 @@ module Tables = struct let attrs2 = let _1 = _1_inlined2 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 42643 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57647 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_attrs2_ = _endpos__1_inlined2_ in let attrs1 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 42652 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57656 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1661 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1720 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Incl.mk thing ~attrs ~loc ~docs, ext ) -# 42666 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57670 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1573 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1632 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( pstr_include _1 ) -# 42672 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57676 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos__1_inlined2_ in @@ -42676,15 +57680,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 42682 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57686 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1575 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1634 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 42688 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57692 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42707,9 +57711,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4013 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4409 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "-" ) -# 42713 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57717 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42732,9 +57736,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 4014 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4410 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( "-." ) -# 42738 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57742 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42787,9 +57791,9 @@ module Tables = struct let _v : (Parsetree.row_field) = let _5 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 42793 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57797 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__5_ = _endpos__1_inlined1_ in @@ -42798,18 +57802,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 42802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57806 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1138 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 42807 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57811 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3699 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4086 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 42813 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57817 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _1 = @@ -42817,20 +57821,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 42823 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3685 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4072 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 ) -# 42834 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57838 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42862,9 +57866,9 @@ module Tables = struct let _v : (Parsetree.row_field) = let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 42868 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57872 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -42873,20 +57877,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 42879 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57883 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3689 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4076 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let info = symbol_info _endpos in let attrs = add_info_attrs info _2 in Rf.tag ~loc:(make_loc _sloc) ~attrs _1 true [] ) -# 42890 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57894 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42918,7 +57922,7 @@ module Tables = struct let _v : (Parsetree.toplevel_phrase) = let arg = # 124 "" ( None ) -# 42922 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57926 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_arg_ = _endpos__1_inlined1_ in let dir = @@ -42927,18 +57931,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 42933 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57937 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3911 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mk_directive ~loc:_sloc dir arg ) -# 42942 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57946 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42969,9 +57973,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined2 : ( -# 842 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 887 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string * Location.t * string option) -# 42975 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57979 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) = Obj.magic _1_inlined2 in let _1_inlined1 : (string) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in @@ -42982,23 +57986,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3915 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4311 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (s, _, _) = _1 in Pdir_string s ) -# 42988 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 57992 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1065 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 42996 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58000 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in # 126 "" ( Some x ) -# 43002 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58006 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -43008,18 +58012,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 43014 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58018 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3911 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mk_directive ~loc:_sloc dir arg ) -# 43023 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58027 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43050,9 +58054,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined2 : ( -# 787 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 832 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string * char option) -# 43056 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58060 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) = Obj.magic _1_inlined2 in let _1_inlined1 : (string) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in @@ -43063,23 +58067,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3916 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4312 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let (n, m) = _1 in Pdir_int (n ,m) ) -# 43069 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58073 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1065 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 43077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58081 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in # 126 "" ( Some x ) -# 43083 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58087 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -43089,18 +58093,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 43095 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58099 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3911 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mk_directive ~loc:_sloc dir arg ) -# 43104 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58108 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43140,23 +58144,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3917 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4313 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pdir_ident _1 ) -# 43146 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58150 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1065 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 43154 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58158 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in # 126 "" ( Some x ) -# 43160 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58164 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -43166,18 +58170,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 43172 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58176 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3911 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mk_directive ~loc:_sloc dir arg ) -# 43181 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58185 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43217,23 +58221,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3918 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4314 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pdir_ident _1 ) -# 43223 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58227 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1065 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 43231 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58235 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in # 126 "" ( Some x ) -# 43237 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58241 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -43243,18 +58247,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 43249 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58253 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3911 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mk_directive ~loc:_sloc dir arg ) -# 43258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58262 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43294,23 +58298,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3919 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4315 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pdir_bool false ) -# 43300 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58304 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1065 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 43308 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58312 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in # 126 "" ( Some x ) -# 43314 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58318 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -43320,18 +58324,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 43326 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58330 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3911 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mk_directive ~loc:_sloc dir arg ) -# 43335 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58339 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43371,23 +58375,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3920 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4316 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pdir_bool true ) -# 43377 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58381 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1065 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 43385 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58389 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in # 126 "" ( Some x ) -# 43391 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58395 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -43397,18 +58401,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 43403 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58407 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3911 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mk_directive ~loc:_sloc dir arg ) -# 43412 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58416 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43448,37 +58452,37 @@ module Tables = struct let _1 = let _1 = let attrs = -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 43454 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58458 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1526 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1585 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkstrexp e attrs ) -# 43459 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58463 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _startpos__1_ = _startpos_e_ in let _startpos = _startpos__1_ in -# 1008 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1046 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( text_str _startpos @ [_1] ) -# 43467 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58471 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _startpos__1_ = _startpos_e_ in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 996 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1034 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( extra_str _startpos _endpos _1 ) -# 43476 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58480 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1275 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1334 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Ptop_def _1 ) -# 43482 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58486 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43511,21 +58515,21 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 43515 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58519 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 996 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1034 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( extra_str _startpos _endpos _1 ) -# 43523 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58527 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1279 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1338 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Ptop_def _1 ) -# 43529 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58533 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43555,9 +58559,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.toplevel_phrase) = -# 1283 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1342 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 43561 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58565 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43580,9 +58584,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.toplevel_phrase) = -# 1286 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1345 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( raise End_of_file ) -# 43586 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58590 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43605,9 +58609,9 @@ module Tables = struct let _startpos = _startpos_ty_ in let _endpos = _endpos_ty_ in let _v : (Parsetree.core_type) = -# 3591 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3910 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( ty ) -# 43611 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58615 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43619,50 +58623,58 @@ module Tables = struct (fun _menhir_env -> let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { - MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = xs; MenhirLib.EngineTypes.startp = _startpos_xs_; MenhirLib.EngineTypes.endp = _endpos_xs_; - MenhirLib.EngineTypes.next = _menhir_stack; + 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 = ty; + MenhirLib.EngineTypes.startp = _startpos_ty_; + MenhirLib.EngineTypes.endp = _endpos_ty_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; } = _menhir_stack in - let xs : (Parsetree.core_type list) = Obj.magic xs in + let xs : ((string option * Parsetree.core_type) list) = Obj.magic xs in + let _2 : unit = Obj.magic _2 in + let ty : (Parsetree.core_type) = Obj.magic ty in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos_xs_ in + let _startpos = _startpos_ty_ in let _endpos = _endpos_xs_ in let _v : (Parsetree.core_type) = let _1 = - let _1 = - let tys = - let xs = + let ltys = + let xs = # 253 "" ( List.rev xs ) -# 43639 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - in - -# 1166 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( xs ) -# 43644 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" - - in +# 58656 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + in -# 3594 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( Ptyp_tuple tys ) -# 43650 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 1197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( xs ) +# 58661 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in - let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_xs_) in - let _endpos = _endpos__1_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( mktyp ~loc:_sloc _1 ) -# 43660 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3919 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( ty, ltys ) +# 58667 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in + let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_ty_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 3596 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( _1 ) -# 43666 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 3912 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( let ty, ltys = _1 in + mktyp ~loc:_sloc (Ptyp_tuple ((None, ty) :: ltys)) ) +# 58678 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43691,10 +58703,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : (Parsetree.core_type option * Parsetree.core_type option) = -# 2907 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Some _2, None) ) -# 43698 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.type_constraint) = +# 3120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pconstraint _2 ) +# 58710 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43737,10 +58749,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in - let _v : (Parsetree.core_type option * Parsetree.core_type option) = -# 2908 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (Some _2, Some _4) ) -# 43744 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.type_constraint) = +# 3121 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pcoerce (Some _2, _4) ) +# 58756 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43769,10 +58781,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : (Parsetree.core_type option * Parsetree.core_type option) = -# 2909 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( (None, Some _2) ) -# 43776 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + let _v : (Parsetree.type_constraint) = +# 3122 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( Pcoerce (None, _2) ) +# 58788 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43788,9 +58800,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) = -# 3244 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( (Ptype_abstract, Public, None) ) -# 43794 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58806 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43820,9 +58832,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) = -# 3246 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3519 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _2 ) -# 43826 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58838 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43845,9 +58857,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3870 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4266 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 43851 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58863 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43877,9 +58889,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) = -# 3261 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3534 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _2, _1 ) -# 43883 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58895 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43895,9 +58907,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) = -# 3254 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3527 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [] ) -# 43901 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58913 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43920,9 +58932,9 @@ module Tables = struct let _startpos = _startpos_p_ in let _endpos = _endpos_p_ in let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = -# 3256 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3529 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [p] ) -# 43926 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58938 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43962,18 +58974,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 43966 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58978 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1138 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 43971 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58983 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3258 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3531 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( ps ) -# 43977 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 58989 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44004,24 +59016,24 @@ module Tables = struct let _endpos = _endpos_tyvar_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3266 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3539 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Ptyp_var tyvar ) -# 44010 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59022 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__1_ = _endpos_tyvar_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mktyp ~loc:_sloc _1 ) -# 44019 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59031 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3269 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3542 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 44025 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59037 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44045,23 +59057,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3268 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3541 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Ptyp_any ) -# 44051 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59063 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1041 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1079 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mktyp ~loc:_sloc _1 ) -# 44059 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59071 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3269 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3542 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 44065 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44077,9 +59089,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3273 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3546 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( NoVariance, NoInjectivity ) -# 44083 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59095 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44102,9 +59114,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3274 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3547 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Covariant, NoInjectivity ) -# 44108 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44127,9 +59139,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3275 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3548 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Contravariant, NoInjectivity ) -# 44133 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59145 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44152,9 +59164,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3276 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3549 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( NoVariance, Injective ) -# 44158 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59170 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44184,9 +59196,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3277 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3550 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Covariant, Injective ) -# 44190 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59202 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44216,9 +59228,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3277 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3550 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Covariant, Injective ) -# 44222 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59234 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44248,9 +59260,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3278 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3551 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Contravariant, Injective ) -# 44254 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59266 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44280,9 +59292,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 3278 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3551 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Contravariant, Injective ) -# 44286 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59298 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44301,21 +59313,27 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 779 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 824 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 44307 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59319 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 -# 3280 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( if _1 = "+!" then Covariant, Injective else +# 3553 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + if _1 = "+!" then Covariant, Injective else if _1 = "-!" then Contravariant, Injective else - (expecting _loc__1_ "type_variance"; - NoVariance, NoInjectivity) ) -# 44319 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + if _1 = "+-" then Bivariant, NoInjectivity else + if _1 = "-+" then Bivariant, NoInjectivity else + if _1 = "+-!" then Bivariant, Injective else + if _1 = "-+!" then Bivariant, Injective else begin + expecting _loc__1_ "type_variance"; + NoVariance, NoInjectivity + end ) +# 59337 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44334,21 +59352,25 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 828 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 873 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 44340 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59358 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 -# 3285 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" - ( if _1 = "!+" then Covariant, Injective else +# 3564 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" + ( + if _1 = "!+" then Covariant, Injective else if _1 = "!-" then Contravariant, Injective else - (expecting _loc__1_ "type_variance"; - NoVariance, NoInjectivity) ) -# 44352 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" + if _1 = "!+-" then Bivariant, Injective else + if _1 = "!-+" then Bivariant, Injective else begin + expecting _loc__1_ "type_variance"; + NoVariance, NoInjectivity + end ) +# 59374 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44382,39 +59404,39 @@ module Tables = struct let ys = # 260 "" ( List.flatten xss ) -# 44386 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59408 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let xs = let _1 = -# 1074 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1112 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( [] ) -# 44392 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59414 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1306 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1365 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 44397 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59419 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in # 267 "" ( xs @ ys ) -# 44403 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59425 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 1000 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1038 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( extra_def _startpos _endpos _1 ) -# 44412 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59434 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1299 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1358 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 44418 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59440 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44462,7 +59484,7 @@ module Tables = struct let ys = # 260 "" ( List.flatten xss ) -# 44466 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59488 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let xs = let _1 = @@ -44470,61 +59492,61 @@ module Tables = struct let _1 = let _1 = let attrs = -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 44476 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59498 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1526 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1585 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkstrexp e attrs ) -# 44481 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59503 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1018 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1056 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Ptop_def [_1] ) -# 44487 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59509 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _startpos__1_ = _startpos_e_ in let _startpos = _startpos__1_ in -# 1016 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( text_def _startpos @ [_1] ) -# 44495 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59517 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1076 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1114 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( x ) -# 44501 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59523 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1306 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1365 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 44507 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59529 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in # 267 "" ( xs @ ys ) -# 44513 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59535 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_e_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 1000 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1038 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( extra_def _startpos _endpos _1 ) -# 44522 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59544 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1299 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1358 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 44528 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59550 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44561,9 +59583,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (string) = -# 3769 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4163 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _2 ) -# 44567 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59589 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44582,17 +59604,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 44588 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59610 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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) = -# 3777 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4171 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 44596 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59618 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44615,9 +59637,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3778 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4172 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 44621 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59643 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44640,9 +59662,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3846 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4260 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 44646 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59668 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44687,9 +59709,9 @@ module Tables = struct let ty : (Parsetree.core_type) = Obj.magic ty in let _5 : unit = Obj.magic _5 in let _1_inlined1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 44693 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59715 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) = Obj.magic _1_inlined1 in let mutable_ : (Asttypes.mutable_flag) = Obj.magic mutable_ in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -44700,33 +59722,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 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 44706 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59728 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 44714 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59736 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let attrs = -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 44720 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59742 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _1 = -# 4006 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4402 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Fresh ) -# 44725 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59747 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2124 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2181 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( (label, mutable_, Cfk_virtual ty), attrs ) -# 44730 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59752 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44771,9 +59793,9 @@ module Tables = struct let _6 : (Parsetree.expression) = Obj.magic _6 in let _5 : unit = Obj.magic _5 in let _1_inlined1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 44777 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59799 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) = Obj.magic _1_inlined1 in let _3 : (Asttypes.mutable_flag) = Obj.magic _3 in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -44784,33 +59806,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 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 44790 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59812 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 44798 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59820 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _2 = -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 44804 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59826 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _1 = -# 4009 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4405 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Fresh ) -# 44809 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59831 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2183 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( (_4, _3, Cfk_concrete (_1, _6)), _2 ) -# 44814 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59836 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44861,9 +59883,9 @@ module Tables = struct let _6 : (Parsetree.expression) = Obj.magic _6 in let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 44867 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59889 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 @@ -44875,36 +59897,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 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 44881 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59903 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 44889 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59911 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 44897 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59919 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _1 = -# 4010 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4406 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Override ) -# 44903 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59925 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 2126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2183 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( (_4, _3, Cfk_concrete (_1, _6)), _2 ) -# 44908 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59930 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44954,11 +59976,11 @@ module Tables = struct } = _menhir_stack in let _7 : (Parsetree.expression) = Obj.magic _7 in let _6 : unit = Obj.magic _6 in - let _5 : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic _5 in + let _5 : (Parsetree.type_constraint) = Obj.magic _5 in let _1_inlined1 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 44962 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59984 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) = Obj.magic _1_inlined1 in let _3 : (Asttypes.mutable_flag) = Obj.magic _3 in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -44969,30 +59991,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 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 44975 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 59997 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 44983 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60005 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _startpos__4_ = _startpos__1_inlined1_ in let _2 = -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 44990 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60012 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__2_, _startpos__2_) = (_endpos__1_, _startpos__1_) in let _1 = -# 4009 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4405 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Fresh ) -# 44996 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60018 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__0_, _endpos__0_) in let _endpos = _endpos__7_ in @@ -45008,11 +60030,11 @@ module Tables = struct _startpos__4_ in let _sloc = (_symbolstartpos, _endpos) in -# 2129 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let e = mkexp_constraint ~loc:_sloc _7 _5 in (_4, _3, Cfk_concrete (_1, e)), _2 ) -# 45016 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60038 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45068,11 +60090,11 @@ module Tables = struct } = _menhir_stack in let _7 : (Parsetree.expression) = Obj.magic _7 in let _6 : unit = Obj.magic _6 in - let _5 : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic _5 in + let _5 : (Parsetree.type_constraint) = Obj.magic _5 in let _1_inlined2 : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 45076 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 @@ -45084,33 +60106,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 = -# 3743 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4130 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 45090 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60112 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 45098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60120 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _startpos__4_ = _startpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 45107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60129 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let (_endpos__2_, _startpos__2_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in let _1 = -# 4010 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4406 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Override ) -# 45114 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60136 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = if _startpos__1_ != _endpos__1_ then @@ -45125,11 +60147,11 @@ module Tables = struct _startpos__4_ in let _sloc = (_symbolstartpos, _endpos) in -# 2129 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 2186 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let e = mkexp_constraint ~loc:_sloc _7 _5 in (_4, _3, Cfk_concrete (_1, e)), _2 ) -# 45133 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60155 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45196,9 +60218,9 @@ module Tables = struct let _v : (Parsetree.value_description * string Location.loc option) = let attrs2 = let _1 = _1_inlined3 in -# 4103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4500 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 45202 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60224 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -45208,30 +60230,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 45214 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60236 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let attrs1 = let _1 = _1_inlined1 in -# 4107 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4504 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 45222 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60244 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3115 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3388 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.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 ) -# 45235 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60257 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45247,9 +60269,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.virtual_flag) = -# 3970 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4366 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Concrete ) -# 45253 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60275 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45272,9 +60294,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.virtual_flag) = -# 3971 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4367 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Virtual ) -# 45278 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60300 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45297,9 +60319,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.mutable_flag) = -# 3994 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4390 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Immutable ) -# 45303 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60325 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45329,9 +60351,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.mutable_flag) = -# 3995 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4391 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Mutable ) -# 45335 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60357 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45361,9 +60383,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.mutable_flag) = -# 3996 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4392 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Mutable ) -# 45367 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60389 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45386,9 +60408,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.private_flag) = -# 4001 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4397 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Public ) -# 45392 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60414 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45418,9 +60440,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.private_flag) = -# 4002 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4398 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Private ) -# 45424 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60446 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45450,9 +60472,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.private_flag) = -# 4003 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4399 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Private ) -# 45456 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60478 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45514,27 +60536,27 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 45518 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60540 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 1088 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1126 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( xs ) -# 45523 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60545 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3215 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3488 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 45529 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60551 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__6_ = _endpos_xs_ in let _5 = let _1 = _1_inlined2 in -# 3539 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3823 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 45538 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60560 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _3 = @@ -45543,16 +60565,16 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 45549 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60571 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3458 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3742 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let lident = loc_last _3 in Pwith_type (_3, @@ -45562,7 +60584,7 @@ module Tables = struct ~manifest:_5 ~priv:_4 ~loc:(make_loc _sloc))) ) -# 45566 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60588 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45615,9 +60637,9 @@ module Tables = struct let _v : (Parsetree.with_constraint) = let _5 = let _1 = _1_inlined2 in -# 3539 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3823 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( _1 ) -# 45621 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60643 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos__5_ = _endpos__1_inlined2_ in @@ -45627,16 +60649,16 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 45633 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60655 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3471 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3755 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( let lident = loc_last _3 in Pwith_typesubst (_3, @@ -45644,7 +60666,7 @@ module Tables = struct ~params:_2 ~manifest:_5 ~loc:(make_loc _sloc))) ) -# 45648 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60670 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45693,9 +60715,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 45699 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60721 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _2 = @@ -45704,15 +60726,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 45710 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60732 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3479 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3763 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pwith_module (_2, _4) ) -# 45716 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60738 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45761,9 +60783,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 45767 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60789 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in let _2 = @@ -45772,15 +60794,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 45778 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60800 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3481 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3765 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pwith_modsubst (_2, _4) ) -# 45784 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60806 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45836,15 +60858,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 45842 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60864 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3483 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3767 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pwith_modtype (l, rhs) ) -# 45848 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60870 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45900,15 +60922,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1004 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 1042 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( mkrhs _1 _sloc ) -# 45906 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60928 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in -# 3485 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3769 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Pwith_modtypesubst (l, rhs) ) -# 45912 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60934 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45931,9 +60953,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.private_flag) = -# 3488 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3772 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Public ) -# 45937 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60959 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45963,9 +60985,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.private_flag) = -# 3489 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 3773 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" ( Private ) -# 45969 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 60991 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45994,19 +61016,17 @@ module MenhirInterpreter = struct type _ terminal = | T_error : unit terminal | T_WITH : unit terminal - | T_WHILE_LWT : unit terminal | T_WHILE : unit terminal | T_WHEN : unit terminal | T_VIRTUAL : unit terminal | T_VAL : unit terminal | T_UNDERSCORE : unit terminal | T_UIDENT : ( -# 856 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 901 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 46007 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61028 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal | T_TYPE : unit terminal - | T_TRY_LWT : unit terminal | T_TRY : unit terminal | T_TRUE : unit terminal | T_TO : unit terminal @@ -46014,9 +61034,9 @@ module MenhirInterpreter = struct | T_THEN : unit terminal | T_STRUCT : unit terminal | T_STRING : ( -# 842 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 887 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string * Location.t * string option) -# 46020 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61040 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal | T_STAR : unit terminal | T_SLASHGREATER : unit terminal @@ -46028,22 +61048,22 @@ module MenhirInterpreter = struct | T_RBRACKET : unit terminal | T_RBRACE : unit terminal | T_QUOTED_STRING_ITEM : ( -# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 892 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string * Location.t * string * Location.t * string option) -# 46034 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61054 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal | T_QUOTED_STRING_EXPR : ( -# 844 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 889 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string * Location.t * string * Location.t * string option) -# 46039 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61059 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal | T_QUOTE : unit terminal | T_QUESTION : unit terminal | T_PRIVATE : unit terminal | T_PREFIXOP : ( -# 828 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 873 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 46047 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61067 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal | T_PLUSEQ : unit terminal | T_PLUSDOT : unit terminal @@ -46051,9 +61071,9 @@ module MenhirInterpreter = struct | T_PERCENT : unit terminal | T_OR : unit terminal | T_OPTLABEL : ( -# 821 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 866 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 46057 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61077 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal | T_OPEN : unit terminal | T_OF : unit terminal @@ -46066,19 +61086,20 @@ module MenhirInterpreter = struct | T_MINUSDOT : unit terminal | T_MINUS : unit terminal | T_METHOD : unit terminal - | T_MATCH_LWT : unit terminal + | T_METAOCAML_ESCAPE : unit terminal + | T_METAOCAML_BRACKET_OPEN : unit terminal + | T_METAOCAML_BRACKET_CLOSE : unit terminal | T_MATCH : unit terminal | T_LPAREN : unit terminal | T_LIDENT : ( -# 802 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 847 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 46076 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61098 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal - | T_LET_LWT : unit terminal | T_LETOP : ( -# 783 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 828 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 46082 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal | T_LET : unit terminal | T_LESSSLASH : unit terminal @@ -46097,86 +61118,83 @@ module MenhirInterpreter = struct | T_LBRACE : unit terminal | T_LAZY : unit terminal | T_LABEL : ( -# 788 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 833 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 46103 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61124 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal | T_JSX_UIDENT_E : ( -# 858 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 903 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 46108 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61129 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal | T_JSX_UIDENT : ( -# 857 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 902 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 46113 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61134 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal | T_JSX_LIDENT_E : ( -# 804 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 849 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 46118 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61139 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal | T_JSX_LIDENT : ( -# 803 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 848 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 46123 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61144 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal | T_INT : ( -# 787 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 832 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string * char option) -# 46128 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61149 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal | T_INITIALIZER : unit terminal | T_INHERIT : unit terminal | T_INFIXOP4 : ( -# 781 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 826 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 46135 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61156 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal | T_INFIXOP3 : ( -# 780 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 825 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 46140 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61161 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal | T_INFIXOP2 : ( -# 779 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 824 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 46145 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61166 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal | T_INFIXOP1 : ( -# 778 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 823 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 46150 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61171 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal | T_INFIXOP0 : ( -# 777 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 822 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 46155 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61176 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal | T_INCLUDE : unit terminal | T_IN : unit terminal | T_IF : unit terminal | T_HASHOP : ( -# 839 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 884 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 46163 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61184 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal | T_HASH : unit terminal | T_GREATERRBRACKET : unit terminal | T_GREATERRBRACE : unit terminal - | T_GREATERDOT : unit terminal | T_GREATER : unit terminal | T_FUNCTOR : unit terminal | T_FUNCTION : unit terminal | T_FUN : unit terminal - | T_FOR_LWT : unit terminal | T_FOR : unit terminal | T_FLOAT : ( -# 765 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 810 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string * char option) -# 46178 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61197 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal - | T_FINALLY_LWT : unit terminal | T_FALSE : unit terminal | T_EXTERNAL : unit terminal | T_EXCEPTION : unit terminal @@ -46185,28 +61203,27 @@ module MenhirInterpreter = struct | T_EOF : unit terminal | T_END : unit terminal | T_ELSE : unit terminal + | T_EFFECT : unit terminal | T_DOWNTO : unit terminal - | T_DOTTILDE : unit terminal | T_DOTOP : ( -# 782 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 827 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 46194 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61212 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal - | T_DOTLESS : unit terminal | T_DOTDOT : unit terminal | T_DOT : unit terminal | T_DONE : unit terminal | T_DOCSTRING : ( -# 866 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 911 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (Docstrings.docstring) -# 46203 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61220 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal | T_DO : unit terminal | T_CONSTRAINT : unit terminal | T_COMMENT : ( -# 865 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 910 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string * Location.t) -# 46210 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61227 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal | T_COMMA : unit terminal | T_COLONGREATER : unit terminal @@ -46215,9 +61232,9 @@ module MenhirInterpreter = struct | T_COLON : unit terminal | T_CLASS : unit terminal | T_CHAR : ( -# 745 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 789 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (char) -# 46221 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61238 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal | T_BEGIN : unit terminal | T_BARRBRACKET : unit terminal @@ -46228,9 +61245,9 @@ module MenhirInterpreter = struct | T_ASSERT : unit terminal | T_AS : unit terminal | T_ANDOP : ( -# 784 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 829 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" (string) -# 46234 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 61251 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" ) terminal | T_AND : unit terminal | T_AMPERSAND : unit terminal @@ -46255,7 +61272,7 @@ module MenhirInterpreter = struct | N_type_parameter : (Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) nonterminal | N_type_longident : (Longident.t) nonterminal | N_type_kind : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) nonterminal - | N_type_constraint : (Parsetree.core_type option * Parsetree.core_type option) nonterminal + | N_type_constraint : (Parsetree.type_constraint) nonterminal | N_tuple_type : (Parsetree.core_type) nonterminal | N_toplevel_phrase : (Parsetree.toplevel_phrase) nonterminal | N_toplevel_directive : (Parsetree.toplevel_phrase) nonterminal @@ -46280,9 +61297,8 @@ module MenhirInterpreter = struct | N_separated_or_terminated_nonempty_list_SEMI_object_expr_field_ : ((string Location.loc * Parsetree.expression) list) nonterminal | N_separated_or_terminated_nonempty_list_SEMI_expr_ : (Parsetree.expression list) nonterminal | N_row_field : (Parsetree.row_field) nonterminal - | N_reversed_separated_nontrivial_llist_STAR_atomic_type_ : (Parsetree.core_type list) nonterminal - | N_reversed_separated_nontrivial_llist_COMMA_expr_ : (Parsetree.expression list) nonterminal | N_reversed_separated_nontrivial_llist_COMMA_core_type_ : (Parsetree.core_type list) nonterminal + | N_reversed_separated_nonempty_llist_STAR_labeled_tuple_typ_element_ : ((string option * Parsetree.core_type) list) nonterminal | N_reversed_separated_nonempty_llist_STAR_atomic_type_ : (Parsetree.core_type list) nonterminal | N_reversed_separated_nonempty_llist_COMMA_type_parameter_ : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) nonterminal | N_reversed_separated_nonempty_llist_COMMA_core_type_ : (Parsetree.core_type list) nonterminal @@ -46294,6 +61310,7 @@ module MenhirInterpreter = struct | N_reversed_nonempty_llist_name_tag_ : (string list) nonterminal | N_reversed_nonempty_llist_labeled_simple_expr_ : ((Asttypes.arg_label * Parsetree.expression) list) nonterminal | N_reversed_nonempty_llist_functor_arg_ : ((Lexing.position * Parsetree.functor_parameter) list) nonterminal + | N_reversed_nonempty_concat_fun_param_as_list_ : (Parsetree.function_param list) nonterminal | N_reversed_llist_simple_expr_ : (Parsetree.expression list) nonterminal | N_reversed_llist_preceded_CONSTRAINT_constrain__ : ((Parsetree.core_type * Parsetree.core_type * Warnings.loc) list) nonterminal | N_reversed_llist_jsx_prop_ : (((Lexing.position * Lexing.position) * @@ -46302,6 +61319,9 @@ module MenhirInterpreter = struct | `Prop_opt_punned of string | `Prop_punned of string ]) list) nonterminal + | N_reversed_labeled_tuple_pattern_pattern_no_exn_ : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) nonterminal + | N_reversed_labeled_tuple_pattern_pattern_ : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) nonterminal + | N_reversed_labeled_tuple_body : ((string option * Parsetree.expression) list) nonterminal | N_reversed_bar_llist_extension_constructor_declaration_ : (Parsetree.extension_constructor list) nonterminal | N_reversed_bar_llist_extension_constructor_ : (Parsetree.extension_constructor list) nonterminal | N_reversed_bar_llist_constructor_declaration_ : (Parsetree.constructor_declaration list) nonterminal @@ -46318,8 +61338,6 @@ module MenhirInterpreter = struct | N_pattern_var : (Parsetree.pattern) nonterminal | N_pattern_no_exn : (Parsetree.pattern) nonterminal | N_pattern_gen : (Parsetree.pattern) nonterminal - | N_pattern_comma_list_pattern_no_exn_ : (Parsetree.pattern list) nonterminal - | N_pattern_comma_list_pattern_ : (Parsetree.pattern list) nonterminal | N_pattern : (Parsetree.pattern) nonterminal | N_parse_val_longident : (Longident.t) nonterminal | N_parse_pattern : (Parsetree.pattern) nonterminal @@ -46334,12 +61352,13 @@ module MenhirInterpreter = struct | N_parse_any_longident : (Longident.t) nonterminal | N_paren_module_expr : (Parsetree.module_expr) nonterminal | N_optlabel : (string) nonterminal - | N_option_type_constraint_ : ((Parsetree.core_type option * Parsetree.core_type option) option) nonterminal + | N_option_type_constraint_ : (Parsetree.type_constraint option) nonterminal | N_option_preceded_EQUAL_seq_expr__ : (Parsetree.expression option) nonterminal | N_option_preceded_EQUAL_pattern__ : (Parsetree.pattern option) nonterminal | N_option_preceded_EQUAL_module_type__ : (Parsetree.module_type option) nonterminal | N_option_preceded_EQUAL_expr__ : (Parsetree.expression option) nonterminal | N_option_preceded_COLON_core_type__ : (Parsetree.core_type option) nonterminal + | N_option_preceded_COLON_atomic_type__ : (Parsetree.core_type option) nonterminal | N_option_preceded_AS_mkrhs_LIDENT___ : (string Location.loc option) nonterminal | N_option_SEMI_ : (unit option) nonterminal | N_option_BAR_ : (unit option) nonterminal @@ -46347,6 +61366,7 @@ module MenhirInterpreter = struct | N_operator : (string) nonterminal | N_open_description : (Longident.t Location.loc Parsetree.open_infos * string Location.loc option) nonterminal | N_open_declaration : (Parsetree.module_expr Parsetree.open_infos * string Location.loc option) nonterminal + | N_object_type : (Parsetree.core_type) nonterminal | N_nonempty_type_kind : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) nonterminal | N_nonempty_list_raw_string_ : (string list) nonterminal | N_nonempty_list_mkrhs_LIDENT__ : (string Location.loc list) nonterminal @@ -46368,15 +61388,13 @@ module MenhirInterpreter = struct | N_mk_longident_mod_longident_UIDENT_ : (Longident.t) nonterminal | N_mk_longident_mod_longident_LIDENT_ : (Longident.t) nonterminal | N_mk_longident_mod_ext_longident_ident_ : (Longident.t) nonterminal - | N_mk_longident_mod_ext_longident___anonymous_41_ : (Longident.t) nonterminal + | N_mk_longident_mod_ext_longident___anonymous_42_ : (Longident.t) nonterminal | N_mk_longident_mod_ext_longident_UIDENT_ : (Longident.t) nonterminal | N_mk_longident_mod_ext_longident_LIDENT_ : (Longident.t) nonterminal | N_method_ : ((string Location.loc * Asttypes.private_flag * Parsetree.class_field_kind) * Parsetree.attributes) nonterminal | N_meth_list : (Parsetree.object_field list * Asttypes.closed_flag) nonterminal | N_match_case : (Parsetree.case) nonterminal - | N_lwt_bindings : (Ast_helper.let_bindings) nonterminal - | N_lwt_binding : (Ast_helper.let_bindings) nonterminal | N_listx_SEMI_record_pat_field_UNDERSCORE_ : ((Longident.t Location.loc * Parsetree.pattern) list * unit option) nonterminal | N_list_use_file_element_ : (Parsetree.toplevel_phrase list list) nonterminal | N_list_text_str_structure_item__ : (Parsetree.structure_item list list) nonterminal @@ -46402,6 +61420,10 @@ module MenhirInterpreter = struct Parsetree.value_constraint option) nonterminal | N_let_binding_body : (Parsetree.pattern * Parsetree.expression * Parsetree.value_constraint option * bool) nonterminal + | N_labeled_tuple_pattern_pattern_no_exn_ : (Parsetree.pattern_desc) nonterminal + | N_labeled_tuple_pattern_pattern_ : (Parsetree.pattern_desc) nonterminal + | N_labeled_tuple_pat_element_list_pattern_no_exn_ : ((string option * Parsetree.pattern) list) nonterminal + | N_labeled_tuple_pat_element_list_pattern_ : ((string option * Parsetree.pattern) list) nonterminal | N_labeled_simple_pattern : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) nonterminal | N_labeled_simple_expr : (Asttypes.arg_label * Parsetree.expression) nonterminal | N_label_longident : (Longident.t) nonterminal @@ -46437,16 +61459,21 @@ module MenhirInterpreter = struct | N_functor_args : ((Lexing.position * Parsetree.functor_parameter) list) nonterminal | N_functor_arg : (Lexing.position * Parsetree.functor_parameter) nonterminal | N_function_type : (Parsetree.core_type) nonterminal - | N_fun_def : (Parsetree.expression) nonterminal - | N_fun_binding : (Parsetree.expression) nonterminal + | N_fun_seq_expr : (Parsetree.expression) nonterminal + | N_fun_params : (Parsetree.function_param list) nonterminal + | N_fun_param_as_list : (Parsetree.function_param list) nonterminal + | N_fun_expr : (Parsetree.expression) nonterminal + | N_fun_body : (Parsetree.function_body) nonterminal | N_formal_class_parameters : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) nonterminal | N_floating_attribute : (Parsetree.attribute) nonterminal + | N_extension_type : (Parsetree.core_type) nonterminal | N_extension_constructor_rebind_epsilon_ : (Parsetree.extension_constructor) nonterminal | N_extension_constructor_rebind_BAR_ : (Parsetree.extension_constructor) nonterminal | N_extension : (Parsetree.extension) nonterminal | N_ext : (string Location.loc option) nonterminal - | N_expr : (Parsetree.expression) nonterminal | N_direction_flag : (Asttypes.direction_flag) nonterminal + | N_delimited_type_supporting_local_open : (Parsetree.core_type) nonterminal + | N_delimited_type : (Parsetree.core_type) nonterminal | N_core_type : (Parsetree.core_type) nonterminal | N_constructor_declarations : (Parsetree.constructor_declaration list) nonterminal | N_constructor_arguments : (Parsetree.constructor_arguments) nonterminal @@ -46469,6 +61496,7 @@ module MenhirInterpreter = struct | N_class_field : (Parsetree.class_field) nonterminal | N_class_expr : (Parsetree.class_expr) nonterminal | N_attribute : (Parsetree.attribute) nonterminal + | N_attr_payload : (Parsetree.payload) nonterminal | N_attr_id : (string Location.loc) nonterminal | N_atomic_type : (Parsetree.core_type) nonterminal | N_any_longident : (Longident.t) nonterminal @@ -46496,103 +61524,103 @@ module MenhirInterpreter = struct | 1 -> X (T T_WITH) | 2 -> - X (T T_WHILE_LWT) - | 3 -> X (T T_WHILE) - | 4 -> + | 3 -> X (T T_WHEN) - | 5 -> + | 4 -> X (T T_VIRTUAL) - | 6 -> + | 5 -> X (T T_VAL) - | 7 -> + | 6 -> X (T T_UNDERSCORE) - | 8 -> + | 7 -> X (T T_UIDENT) - | 9 -> + | 8 -> X (T T_TYPE) + | 9 -> + X (T T_TRY) | 10 -> - X (T T_TRY_LWT) + X (T T_TRUE) | 11 -> - X (T T_TRY) + X (T T_TO) | 12 -> - X (T T_TRUE) + X (T T_TILDE) | 13 -> - X (T T_TO) + X (T T_THEN) | 14 -> - X (T T_TILDE) + X (T T_STRUCT) | 15 -> - X (T T_THEN) + X (T T_STRING) | 16 -> - X (T T_STRUCT) + X (T T_STAR) | 17 -> - X (T T_STRING) + X (T T_SLASHGREATER) | 18 -> - X (T T_STAR) + X (T T_SIG) | 19 -> - X (T T_SLASHGREATER) + X (T T_SEMISEMI) | 20 -> - X (T T_SIG) + X (T T_SEMI) | 21 -> - X (T T_SEMISEMI) + X (T T_RPAREN) | 22 -> - X (T T_SEMI) + X (T T_REC) | 23 -> - X (T T_RPAREN) + X (T T_RBRACKET) | 24 -> - X (T T_REC) + X (T T_RBRACE) | 25 -> - X (T T_RBRACKET) + X (T T_QUOTED_STRING_ITEM) | 26 -> - X (T T_RBRACE) + X (T T_QUOTED_STRING_EXPR) | 27 -> - X (T T_QUOTED_STRING_ITEM) + X (T T_QUOTE) | 28 -> - X (T T_QUOTED_STRING_EXPR) + X (T T_QUESTION) | 29 -> - X (T T_QUOTE) + X (T T_PRIVATE) | 30 -> - X (T T_QUESTION) + X (T T_PREFIXOP) | 31 -> - X (T T_PRIVATE) + X (T T_PLUSEQ) | 32 -> - X (T T_PREFIXOP) + X (T T_PLUSDOT) | 33 -> - X (T T_PLUSEQ) + X (T T_PLUS) | 34 -> - X (T T_PLUSDOT) + X (T T_PERCENT) | 35 -> - X (T T_PLUS) + X (T T_OR) | 36 -> - X (T T_PERCENT) + X (T T_OPTLABEL) | 37 -> - X (T T_OR) + X (T T_OPEN) | 38 -> - X (T T_OPTLABEL) + X (T T_OF) | 39 -> - X (T T_OPEN) + X (T T_OBJECT) | 40 -> - X (T T_OF) + X (T T_NONREC) | 41 -> - X (T T_OBJECT) + X (T T_NEW) | 42 -> - X (T T_NONREC) + X (T T_MUTABLE) | 43 -> - X (T T_NEW) + X (T T_MODULE) | 44 -> - X (T T_MUTABLE) + X (T T_MINUSGREATER) | 45 -> - X (T T_MODULE) + X (T T_MINUSDOT) | 46 -> - X (T T_MINUSGREATER) + X (T T_MINUS) | 47 -> - X (T T_MINUSDOT) + X (T T_METHOD) | 48 -> - X (T T_MINUS) + X (T T_METAOCAML_ESCAPE) | 49 -> - X (T T_METHOD) + X (T T_METAOCAML_BRACKET_OPEN) | 50 -> - X (T T_MATCH_LWT) + X (T T_METAOCAML_BRACKET_CLOSE) | 51 -> X (T T_MATCH) | 52 -> @@ -46600,174 +61628,164 @@ module MenhirInterpreter = struct | 53 -> X (T T_LIDENT) | 54 -> - X (T T_LET_LWT) - | 55 -> X (T T_LETOP) - | 56 -> + | 55 -> X (T T_LET) - | 57 -> + | 56 -> X (T T_LESSSLASH) - | 58 -> + | 57 -> X (T T_LESSMINUS) - | 59 -> + | 58 -> X (T T_LESS) - | 60 -> + | 59 -> X (T T_LBRACKETPERCENTPERCENT) - | 61 -> + | 60 -> X (T T_LBRACKETPERCENT) - | 62 -> + | 61 -> X (T T_LBRACKETLESS) - | 63 -> + | 62 -> X (T T_LBRACKETGREATER) - | 64 -> + | 63 -> X (T T_LBRACKETBAR) - | 65 -> + | 64 -> X (T T_LBRACKETATATAT) - | 66 -> + | 65 -> X (T T_LBRACKETATAT) - | 67 -> + | 66 -> X (T T_LBRACKETAT) - | 68 -> + | 67 -> X (T T_LBRACKET) - | 69 -> + | 68 -> X (T T_LBRACELESS) - | 70 -> + | 69 -> X (T T_LBRACE) - | 71 -> + | 70 -> X (T T_LAZY) - | 72 -> + | 71 -> X (T T_LABEL) - | 73 -> + | 72 -> X (T T_JSX_UIDENT_E) - | 74 -> + | 73 -> X (T T_JSX_UIDENT) - | 75 -> + | 74 -> X (T T_JSX_LIDENT_E) - | 76 -> + | 75 -> X (T T_JSX_LIDENT) - | 77 -> + | 76 -> X (T T_INT) - | 78 -> + | 77 -> X (T T_INITIALIZER) - | 79 -> + | 78 -> X (T T_INHERIT) - | 80 -> + | 79 -> X (T T_INFIXOP4) - | 81 -> + | 80 -> X (T T_INFIXOP3) - | 82 -> + | 81 -> X (T T_INFIXOP2) - | 83 -> + | 82 -> X (T T_INFIXOP1) - | 84 -> + | 83 -> X (T T_INFIXOP0) - | 85 -> + | 84 -> X (T T_INCLUDE) - | 86 -> + | 85 -> X (T T_IN) - | 87 -> + | 86 -> X (T T_IF) - | 88 -> + | 87 -> X (T T_HASHOP) - | 89 -> + | 88 -> X (T T_HASH) - | 90 -> + | 89 -> X (T T_GREATERRBRACKET) - | 91 -> + | 90 -> X (T T_GREATERRBRACE) + | 91 -> + X (T T_GREATER) | 92 -> - X (T T_GREATERDOT) + X (T T_FUNCTOR) | 93 -> - X (T T_GREATER) + X (T T_FUNCTION) | 94 -> - X (T T_FUNCTOR) + X (T T_FUN) | 95 -> - X (T T_FUNCTION) + X (T T_FOR) | 96 -> - X (T T_FUN) + X (T T_FLOAT) | 97 -> - X (T T_FOR_LWT) + X (T T_FALSE) | 98 -> - X (T T_FOR) + X (T T_EXTERNAL) | 99 -> - X (T T_FLOAT) + X (T T_EXCEPTION) | 100 -> - X (T T_FINALLY_LWT) + X (T T_EQUAL) | 101 -> - X (T T_FALSE) + X (T T_EOL) | 102 -> - X (T T_EXTERNAL) + X (T T_EOF) | 103 -> - X (T T_EXCEPTION) + X (T T_END) | 104 -> - X (T T_EQUAL) + X (T T_ELSE) | 105 -> - X (T T_EOL) + X (T T_EFFECT) | 106 -> - X (T T_EOF) - | 107 -> - X (T T_END) - | 108 -> - X (T T_ELSE) - | 109 -> X (T T_DOWNTO) - | 110 -> - X (T T_DOTTILDE) - | 111 -> + | 107 -> X (T T_DOTOP) - | 112 -> - X (T T_DOTLESS) - | 113 -> + | 108 -> X (T T_DOTDOT) - | 114 -> + | 109 -> X (T T_DOT) - | 115 -> + | 110 -> X (T T_DONE) - | 116 -> + | 111 -> X (T T_DOCSTRING) - | 117 -> + | 112 -> X (T T_DO) - | 118 -> + | 113 -> X (T T_CONSTRAINT) - | 119 -> + | 114 -> X (T T_COMMENT) - | 120 -> + | 115 -> X (T T_COMMA) - | 121 -> + | 116 -> X (T T_COLONGREATER) - | 122 -> + | 117 -> X (T T_COLONEQUAL) - | 123 -> + | 118 -> X (T T_COLONCOLON) - | 124 -> + | 119 -> X (T T_COLON) - | 125 -> + | 120 -> X (T T_CLASS) - | 126 -> + | 121 -> X (T T_CHAR) - | 127 -> + | 122 -> X (T T_BEGIN) - | 128 -> + | 123 -> X (T T_BARRBRACKET) - | 129 -> + | 124 -> X (T T_BARBAR) - | 130 -> + | 125 -> X (T T_BAR) - | 131 -> + | 126 -> X (T T_BANG) - | 132 -> + | 127 -> X (T T_BACKQUOTE) - | 133 -> + | 128 -> X (T T_ASSERT) - | 134 -> + | 129 -> X (T T_AS) - | 135 -> + | 130 -> X (T T_ANDOP) - | 136 -> + | 131 -> X (T T_AND) - | 137 -> + | 132 -> X (T T_AMPERSAND) - | 138 -> + | 133 -> X (T T_AMPERAMPER) | _ -> assert false @@ -46775,322 +61793,344 @@ module MenhirInterpreter = struct and nonterminal = fun nt -> match nt with - | 231 -> + | 242 -> X (N N_additive) - | 230 -> + | 241 -> X (N N_alias_type) - | 229 -> + | 240 -> X (N N_and_let_binding) - | 228 -> + | 239 -> X (N N_any_longident) - | 227 -> + | 238 -> X (N N_atomic_type) - | 226 -> + | 237 -> X (N N_attr_id) - | 225 -> + | 236 -> + X (N N_attr_payload) + | 235 -> X (N N_attribute) - | 224 -> + | 234 -> X (N N_class_expr) - | 223 -> + | 233 -> X (N N_class_field) - | 222 -> + | 232 -> X (N N_class_fun_binding) - | 221 -> + | 231 -> X (N N_class_fun_def) - | 220 -> + | 230 -> X (N N_class_longident) - | 219 -> + | 229 -> X (N N_class_self_pattern) - | 218 -> + | 228 -> X (N N_class_self_type) - | 217 -> + | 227 -> X (N N_class_sig_field) - | 216 -> + | 226 -> X (N N_class_signature) - | 215 -> + | 225 -> X (N N_class_simple_expr) - | 214 -> + | 224 -> X (N N_class_type) - | 213 -> + | 223 -> X (N N_class_type_declarations) - | 212 -> + | 222 -> X (N N_clty_longident) - | 211 -> + | 221 -> X (N N_constant) - | 210 -> + | 220 -> X (N N_constr_extra_nonprefix_ident) - | 209 -> + | 219 -> X (N N_constr_ident) - | 208 -> + | 218 -> X (N N_constr_longident) - | 207 -> + | 217 -> X (N N_constrain_field) - | 206 -> + | 216 -> X (N N_constructor_arguments) - | 205 -> + | 215 -> X (N N_constructor_declarations) - | 204 -> + | 214 -> X (N N_core_type) - | 203 -> + | 213 -> + X (N N_delimited_type) + | 212 -> + X (N N_delimited_type_supporting_local_open) + | 211 -> X (N N_direction_flag) + | 210 -> + X (N N_ext) + | 209 -> + X (N N_extension) + | 208 -> + X (N N_extension_constructor_rebind_BAR_) + | 207 -> + X (N N_extension_constructor_rebind_epsilon_) + | 206 -> + X (N N_extension_type) + | 205 -> + X (N N_floating_attribute) + | 204 -> + X (N N_formal_class_parameters) + | 203 -> + X (N N_fun_body) | 202 -> - X (N N_expr) + X (N N_fun_expr) | 201 -> - X (N N_ext) + X (N N_fun_param_as_list) | 200 -> - X (N N_extension) + X (N N_fun_params) | 199 -> - X (N N_extension_constructor_rebind_BAR_) + X (N N_fun_seq_expr) | 198 -> - X (N N_extension_constructor_rebind_epsilon_) + X (N N_function_type) | 197 -> - X (N N_floating_attribute) + X (N N_functor_arg) | 196 -> - X (N N_formal_class_parameters) + X (N N_functor_args) | 195 -> - X (N N_fun_binding) + X (N N_generalized_constructor_arguments) | 194 -> - X (N N_fun_def) + X (N N_generic_constructor_declaration_BAR_) | 193 -> - X (N N_function_type) + X (N N_generic_constructor_declaration_epsilon_) | 192 -> - X (N N_functor_arg) + X (N N_generic_type_declaration_no_nonrec_flag_type_subst_kind_) | 191 -> - X (N N_functor_args) + X (N N_generic_type_declaration_nonrec_flag_type_kind_) | 190 -> - X (N N_generalized_constructor_arguments) + X (N N_ident) | 189 -> - X (N N_generic_constructor_declaration_BAR_) + X (N N_implementation) | 188 -> - X (N N_generic_constructor_declaration_epsilon_) + X (N N_index_mod) | 187 -> - X (N N_generic_type_declaration_no_nonrec_flag_type_subst_kind_) + X (N N_interface) | 186 -> - X (N N_generic_type_declaration_nonrec_flag_type_kind_) + X (N N_item_extension) | 185 -> - X (N N_ident) + X (N N_jsx_element) | 184 -> - X (N N_implementation) + X (N N_jsx_longident_JSX_UIDENT_JSX_LIDENT_) | 183 -> - X (N N_index_mod) + X (N N_jsx_longident_JSX_UIDENT_E_JSX_LIDENT_E_) | 182 -> - X (N N_interface) + X (N N_jsx_prop) | 181 -> - X (N N_item_extension) + X (N N_label_declaration) | 180 -> - X (N N_jsx_element) + X (N N_label_declaration_semi) | 179 -> - X (N N_jsx_longident_JSX_UIDENT_JSX_LIDENT_) + X (N N_label_declarations) | 178 -> - X (N N_jsx_longident_JSX_UIDENT_E_JSX_LIDENT_E_) + X (N N_label_let_pattern) | 177 -> - X (N N_jsx_prop) + X (N N_label_longident) | 176 -> - X (N N_label_declaration) + X (N N_labeled_simple_expr) | 175 -> - X (N N_label_declaration_semi) + X (N N_labeled_simple_pattern) | 174 -> - X (N N_label_declarations) + X (N N_labeled_tuple_pat_element_list_pattern_) | 173 -> - X (N N_label_let_pattern) + X (N N_labeled_tuple_pat_element_list_pattern_no_exn_) | 172 -> - X (N N_label_longident) + X (N N_labeled_tuple_pattern_pattern_) | 171 -> - X (N N_labeled_simple_expr) + X (N N_labeled_tuple_pattern_pattern_no_exn_) | 170 -> - X (N N_labeled_simple_pattern) - | 169 -> X (N N_let_binding_body) - | 168 -> + | 169 -> X (N N_let_binding_body_no_punning) - | 167 -> + | 168 -> X (N N_let_bindings_ext_) - | 166 -> + | 167 -> X (N N_let_bindings_no_ext_) - | 165 -> + | 166 -> X (N N_let_pattern) - | 164 -> + | 165 -> X (N N_letop_binding_body) - | 163 -> + | 164 -> X (N N_letop_bindings) - | 162 -> + | 163 -> X (N N_list_and_class_declaration_) - | 161 -> + | 162 -> X (N N_list_and_class_description_) - | 160 -> + | 161 -> X (N N_list_and_class_type_declaration_) - | 159 -> + | 160 -> X (N N_list_and_module_binding_) - | 158 -> + | 159 -> X (N N_list_and_module_declaration_) - | 157 -> + | 158 -> X (N N_list_attribute_) - | 156 -> + | 157 -> X (N N_list_generic_and_type_declaration_type_kind__) - | 155 -> + | 156 -> X (N N_list_generic_and_type_declaration_type_subst_kind__) - | 154 -> + | 155 -> X (N N_list_post_item_attribute_) - | 153 -> + | 154 -> X (N N_list_signature_element_) - | 152 -> + | 153 -> X (N N_list_structure_element_) - | 151 -> + | 152 -> X (N N_list_text_csig_class_sig_field__) - | 150 -> + | 151 -> X (N N_list_text_cstr_class_field__) - | 149 -> + | 150 -> X (N N_list_text_str_structure_item__) - | 148 -> + | 149 -> X (N N_list_use_file_element_) - | 147 -> + | 148 -> X (N N_listx_SEMI_record_pat_field_UNDERSCORE_) + | 147 -> + X (N N_match_case) | 146 -> - X (N N_lwt_binding) + X (N N_meth_list) | 145 -> - X (N N_lwt_bindings) + X (N N_method_) | 144 -> - X (N N_match_case) + X (N N_mk_longident_mod_ext_longident_LIDENT_) | 143 -> - X (N N_meth_list) + X (N N_mk_longident_mod_ext_longident_UIDENT_) | 142 -> - X (N N_method_) + X (N N_mk_longident_mod_ext_longident___anonymous_42_) | 141 -> - X (N N_mk_longident_mod_ext_longident_LIDENT_) + X (N N_mk_longident_mod_ext_longident_ident_) | 140 -> - X (N N_mk_longident_mod_ext_longident_UIDENT_) + X (N N_mk_longident_mod_longident_LIDENT_) | 139 -> - X (N N_mk_longident_mod_ext_longident___anonymous_41_) + X (N N_mk_longident_mod_longident_UIDENT_) | 138 -> - X (N N_mk_longident_mod_ext_longident_ident_) + X (N N_mk_longident_mod_longident_val_ident_) | 137 -> - X (N N_mk_longident_mod_longident_LIDENT_) + X (N N_mod_ext_longident) | 136 -> - X (N N_mk_longident_mod_longident_UIDENT_) + X (N N_mod_longident) | 135 -> - X (N N_mk_longident_mod_longident_val_ident_) + X (N N_module_binding_body) | 134 -> - X (N N_mod_ext_longident) + X (N N_module_declaration_body) | 133 -> - X (N N_mod_longident) + X (N N_module_expr) | 132 -> - X (N N_module_binding_body) + X (N N_module_name) | 131 -> - X (N N_module_declaration_body) + X (N N_module_subst) | 130 -> - X (N N_module_expr) + X (N N_module_type) | 129 -> - X (N N_module_name) + X (N N_module_type_declaration) | 128 -> - X (N N_module_subst) + X (N N_module_type_subst) | 127 -> - X (N N_module_type) + X (N N_mty_longident) | 126 -> - X (N N_module_type_declaration) + X (N N_mutable_flag) | 125 -> - X (N N_module_type_subst) + X (N N_mutable_virtual_flags) | 124 -> - X (N N_mty_longident) + X (N N_name_tag) | 123 -> - X (N N_mutable_flag) + X (N N_nonempty_list_mkrhs_LIDENT__) | 122 -> - X (N N_mutable_virtual_flags) + X (N N_nonempty_list_raw_string_) | 121 -> - X (N N_name_tag) + X (N N_nonempty_type_kind) | 120 -> - X (N N_nonempty_list_mkrhs_LIDENT__) + X (N N_object_type) | 119 -> - X (N N_nonempty_list_raw_string_) + X (N N_open_declaration) | 118 -> - X (N N_nonempty_type_kind) + X (N N_open_description) | 117 -> - X (N N_open_declaration) + X (N N_operator) | 116 -> - X (N N_open_description) + X (N N_opt_ampersand) | 115 -> - X (N N_operator) + X (N N_option_BAR_) | 114 -> - X (N N_opt_ampersand) + X (N N_option_SEMI_) | 113 -> - X (N N_option_BAR_) + X (N N_option_preceded_AS_mkrhs_LIDENT___) | 112 -> - X (N N_option_SEMI_) + X (N N_option_preceded_COLON_atomic_type__) | 111 -> - X (N N_option_preceded_AS_mkrhs_LIDENT___) - | 110 -> X (N N_option_preceded_COLON_core_type__) - | 109 -> + | 110 -> X (N N_option_preceded_EQUAL_expr__) - | 108 -> + | 109 -> X (N N_option_preceded_EQUAL_module_type__) - | 107 -> + | 108 -> X (N N_option_preceded_EQUAL_pattern__) - | 106 -> + | 107 -> X (N N_option_preceded_EQUAL_seq_expr__) - | 105 -> + | 106 -> X (N N_option_type_constraint_) - | 104 -> + | 105 -> X (N N_optlabel) - | 103 -> + | 104 -> X (N N_paren_module_expr) - | 102 -> + | 103 -> X (N N_parse_any_longident) - | 101 -> + | 102 -> X (N N_parse_constr_longident) - | 100 -> + | 101 -> X (N N_parse_core_type) - | 99 -> + | 100 -> X (N N_parse_expression) - | 98 -> + | 99 -> X (N N_parse_mod_ext_longident) - | 97 -> + | 98 -> X (N N_parse_mod_longident) - | 96 -> + | 97 -> X (N N_parse_module_expr) - | 95 -> + | 96 -> X (N N_parse_module_type) - | 94 -> + | 95 -> X (N N_parse_mty_longident) - | 93 -> + | 94 -> X (N N_parse_pattern) - | 92 -> + | 93 -> X (N N_parse_val_longident) - | 91 -> + | 92 -> X (N N_pattern) + | 91 -> + X (N N_pattern_gen) | 90 -> - X (N N_pattern_comma_list_pattern_) + X (N N_pattern_no_exn) | 89 -> - X (N N_pattern_comma_list_pattern_no_exn_) + X (N N_pattern_var) | 88 -> - X (N N_pattern_gen) + X (N N_payload) | 87 -> - X (N N_pattern_no_exn) + X (N N_possibly_poly_core_type_) | 86 -> - X (N N_pattern_var) + X (N N_possibly_poly_core_type_no_attr_) | 85 -> - X (N N_payload) + X (N N_post_item_attribute) | 84 -> - X (N N_possibly_poly_core_type_) + X (N N_primitive_declaration) | 83 -> - X (N N_possibly_poly_core_type_no_attr_) + X (N N_private_flag) | 82 -> - X (N N_post_item_attribute) + X (N N_private_virtual_flags) | 81 -> - X (N N_primitive_declaration) + X (N N_rec_flag) | 80 -> - X (N N_private_flag) + X (N N_record_expr_content) | 79 -> - X (N N_private_virtual_flags) + X (N N_reversed_bar_llist_constructor_declaration_) | 78 -> - X (N N_rec_flag) + X (N N_reversed_bar_llist_extension_constructor_) | 77 -> - X (N N_record_expr_content) + X (N N_reversed_bar_llist_extension_constructor_declaration_) | 76 -> - X (N N_reversed_bar_llist_constructor_declaration_) + X (N N_reversed_labeled_tuple_body) | 75 -> - X (N N_reversed_bar_llist_extension_constructor_) + X (N N_reversed_labeled_tuple_pattern_pattern_) | 74 -> - X (N N_reversed_bar_llist_extension_constructor_declaration_) + X (N N_reversed_labeled_tuple_pattern_pattern_no_exn_) | 73 -> X (N N_reversed_llist_jsx_prop_) | 72 -> @@ -47098,33 +62138,33 @@ module MenhirInterpreter = struct | 71 -> X (N N_reversed_llist_simple_expr_) | 70 -> - X (N N_reversed_nonempty_llist_functor_arg_) + X (N N_reversed_nonempty_concat_fun_param_as_list_) | 69 -> - X (N N_reversed_nonempty_llist_labeled_simple_expr_) + X (N N_reversed_nonempty_llist_functor_arg_) | 68 -> - X (N N_reversed_nonempty_llist_name_tag_) + X (N N_reversed_nonempty_llist_labeled_simple_expr_) | 67 -> - X (N N_reversed_nonempty_llist_typevar_) + X (N N_reversed_nonempty_llist_name_tag_) | 66 -> - X (N N_reversed_preceded_or_separated_nonempty_llist_BAR_match_case_) + X (N N_reversed_nonempty_llist_typevar_) | 65 -> - X (N N_reversed_separated_nonempty_llist_AMPERSAND_core_type_no_attr_) + X (N N_reversed_preceded_or_separated_nonempty_llist_BAR_match_case_) | 64 -> - X (N N_reversed_separated_nonempty_llist_AND_with_constraint_) + X (N N_reversed_separated_nonempty_llist_AMPERSAND_core_type_no_attr_) | 63 -> - X (N N_reversed_separated_nonempty_llist_BAR_row_field_) + X (N N_reversed_separated_nonempty_llist_AND_with_constraint_) | 62 -> - X (N N_reversed_separated_nonempty_llist_COMMA_core_type_) + X (N N_reversed_separated_nonempty_llist_BAR_row_field_) | 61 -> - X (N N_reversed_separated_nonempty_llist_COMMA_type_parameter_) + X (N N_reversed_separated_nonempty_llist_COMMA_core_type_) | 60 -> - X (N N_reversed_separated_nonempty_llist_STAR_atomic_type_) + X (N N_reversed_separated_nonempty_llist_COMMA_type_parameter_) | 59 -> - X (N N_reversed_separated_nontrivial_llist_COMMA_core_type_) + X (N N_reversed_separated_nonempty_llist_STAR_atomic_type_) | 58 -> - X (N N_reversed_separated_nontrivial_llist_COMMA_expr_) + X (N N_reversed_separated_nonempty_llist_STAR_labeled_tuple_typ_element_) | 57 -> - X (N N_reversed_separated_nontrivial_llist_STAR_atomic_type_) + X (N N_reversed_separated_nontrivial_llist_COMMA_core_type_) | 56 -> X (N N_row_field) | 55 -> @@ -47213,22 +62253,22 @@ module MenhirInterpreter = struct assert false and lr0_incoming = - (16, "\000\000\000\006\000J\000\004\000\b\000\n\000\012\000\014\000\018\000\020\000\024\000\026\000\028\000 \000\"\000*\0002\000@\000L\000P\000R\000T\000V\000X\000Z\000\\\000d\000h\000l\000r\000\144\000\158\000\160\000\172\000\174\000\176\000\190\000\192\000\194\000\198\000\204\000\206\000\208\000\216\000\218\000\220\000\232\000\236\000\238\000\252\001\000\001\012\001\014\001\018\000U\000\230\001\197\001\197\001\147\000\136\001\197\000\b\001\147\001;\000\016\000\018\000\022\001\147\001;\000\024\001\147\001;\000\026\000$\000:\000B\000T\001\147\001;\000j\000\016\000H\000\156\000\200\000b\000\156\000\200\000j\000&\0000\000B\000D\000F\000H\000J\000L\000\\\001\147\001;\000\016\000\018\001\003\0000\000\250\000\018\000*\001;\000\014\001\147\001;\000j\000H\000`\000b\000p\000x\000\162\000\164\000\166\000\168\000\170\000\178\000\188\000\210\000\224\000j\000.\000\228\001o\0000\000v\000\138\001o\0004\000v\000\142\001o\0006\000v\000\246\001\004\001\b\001\016\001\020\001\022\000\231\0000\000l\000/\000\250\000\016\000\018\000<\000\018\000l\001s\000>\000l\000\250\000N\000j\000<\001s\000\\\001\147\001;\000\\\000\020\000R\001;\000\016\000\"\001;\000\020\001\147\001;\000B\000H\001\b\000V\000b\001\b\000j\000\166\001\b\000H\000b\0005\000\016\000<\001s\0007\000;\000{\0000\000\242\000;\0009\000l\000\210\000\018\000@\000j\000l\000\250\000l\000x\000l\000\250\000|\001\197\000,\0008\000F\000H\000P\001\b\001\147\001;\000j\000\014\001;\000X\001\147\001;\000l\001\011\000\230\000\018\000l\001\017\001\019\001\185\001\195\001;\000`\000b\000f\001\147\001;\000h\001\147\001;\000j\000B\000\130\000l\000v\000n\001\147\001;\0002\000\157\000\130\000\138\0004\000\142\001\019\001'\0006\001Y\000\250\000~\001\006\000\227\000\128\0004\000\227\000\138\000\180\001\r\000j\001\r\0000\000\230\000\018\001\025\000\230\000l\001\027\001\169\001\006\001\n\001s\000=\000C\000^\000s\000&\001\027\001\145\001\199\000\180\001\169\000=\000\209\000C\000^\001\131\001\199\000&\001\199\001\131\000I\000q\000\127\0004\001\006\000q\000\243\000R\001\020\000\229\000\131\001\020\001\131\001\205\001\014\000<\001s\001;\001\205\001;\001\153\001\195\001\205\000I\0004\000q\001\006\000\127\0004\000\127\0004\000\127\0004\000\188\000\137\0004\000\243\000\243\001\153\000\221\000\210\000\144\001\147\001;\000\156\000\180\000=\000\200\000\204\000\254\000/\0001\000W\000Y\000]\000_\000\228\000_\001\167\000\243\001\011\000\230\000j\0000\000\208\001\147\001;\000Y\000\177\000\181\000\242\000\183\000\242\000\183\000\248\000\183\001\006\000\183\001\014\000/\001\195\000\243\000\183\001\145\001\161\000j\000\020\000l\000\241\000\241\0000\000Y\001\161\001\165\000b\000\248\0000\000\183\0000\000\250\001\153\0000\000\183\000\183\000\248\0000\000\183\0000\000\138\0004\000k\0004\000\183\000.\000k\000]\000\183\000\215\000.\000\016\000.\000\225\001'\001\002\000k\001\002\000/\000\030\000j\000l\000\250\001\153\001[\0000\000l\000>\000j\001[\000\210\000p\000/\000N\000\016\000j\000\183\000\250\001\153\001K\000\213\0000\000l\000\173\000j\000\020\000\241\0000\000\146\000Y\000\210\000r\000P\001\b\001\147\001;\000\190\001;\000j\0000\001\003\000\250\000j\0000\000^\000\190\001;\000\141\001\129\001\127\000^\000\249\000\255\000\004\000\020\0009\001Y\000\210\000@\000\246\001\205\000\031\001\205\000\145\000\238\001\153\000\210\001\153\000;\000\\\000\020\000\249\000\210\000\255\000^\000\255\001\195\001\r\000\230\000\018\001s\001\021\001s\001\145\000\246\000\255\001\011\000\210\001\r\000\230\000\246\001\r\000!\000\129\001\018\000!\001\129\000\255\000\255\0000\000\255\0000\001\127\000^\000\207\001\005\000j\0000\001\005\0000\000\250\000\255\0000\000\207\001\195\001\011\001\145\001\005\000\174\000\138\000\140\000l\000\210\000\142\000l\000\150\000\230\000-\000/\001\011\000\230\000/\001\015\000\154\000\222\000\226\000\144\001\147\001;\001\000\001\147\001;\000\176\001\147\001;\000\192\001\147\001;\001\006\000\183\000\n\000\194\001\147\001;\000j\000\020\000\241\0000\000^\000\196\001\147\001;\000\183\000\174\000\198\001\147\001;\000\183\000\210\001\b\000-\000[\000\178\000[\000\180\000l\000\224\000j\001\012\001\147\001;\000[\000\230\000j\000K\000[\000\030\000j\000l\000\244\001\153\000\250\001\153\000\244\001\153\000A\0000\000l\000>\000l\000N\000[\000\243\001\011\000\230\000j\0000\000F\000H\000\\\001\147\001;\001\005\000\250\000\255\0000\000`\000b\000p\000Y\000\250\001\153\000\210\000g\000u\000\242\000\243\000[\001g\000\147\000(\000>\000l\000\210\000[\001i\001\145\001\161\001\167\000l\000\210\000[\000\188\000\143\000\148\000\230\000-\001\011\000\152\000[\001e\000\188\001c\001#\000\174\000g\001%\001O\000\174\000g\001\149\000&\001\149\000D\001\149\000F\001\149\000H\001\149\000J\001\149\000L\001\149\000`\001\149\000b\001\149\000x\001\149\000\162\001\149\000\164\001\149\000\166\001\149\000\168\001\149\000\170\001\149\000\188\001\149\000\210\001\149\000\242\001\149\000\246\001\149\000\248\001\149\001\004\001\149\001\020\001\149\001\022\001\149\001\195\001\161\000[\001\207\001\149\000.\000J\001\197\000g\000g\001\018\001;\000W\000\250\001\153\000\210\000g\000\175\000\210\000g\000\242\000\183\000\248\000\183\001\006\000\183\001\014\000/\001\195\000\177\000\179\000\242\000\183\001Q\001S\000\134\001\197\000>\000\183\000\n\000g\000\\\000\020\001\147\001;\001s\000\210\000\255\000\217\000\165\0015\0015\001\147\001;\0002\001\003\000\210\001\005\000\250\000\255\000\210\001\005\001\t\0015\001\018\001;\001\003\001\t\0015\001?\001\129\001\t\001?\001\003\001\t\0015\000z\001\197\000\132\001\197\000\172\001\147\001;\001\005\0015\000\206\001\147\001;\000/\000\250\000\135\000<\001s\000\230\001\153\000\169\000\210\000$\000\239\000\239\0015\001\153\000\208\001\147\001;\000\018\000j\000\248\0000\000\138\001\163\000R\000\142\000Z\000\247\000l\000\250\000\135\000\230\001\205\000\167\001;\000.\001;\001\205\001]\0006\001_\001]\001a\000y\000&\001\199\001\157\001\199\000\210\000j\001\011\000\230\000j\001\161\001;\0015\000\250\000\135\000\230\001\157\000^\001\199\001\199\001\157\000^\001\199\001\199\001}\001;\0015\001\165\000\250\000\020\001\147\001;\000V\0009\000l\000\246\000\138\000\142\001]\0006\000\228\001\006\001\163\001}\001;\000\153\001\006\001{\000\237\000\145\0015\001y\001{\001\153\000\210\000@\000\142\001]\0006\000\228\001\155\001\163\001}\001;\000\142\001]\0006\000\228\001\155\001\155\000?\000\145\0015\000=\000D\000@\000\161\000\149\0015\001{\001y\001{\0009\000l\000\246\000\237\000\145\0015\000?\000\145\0015\000=\000D\000\161\000\149\0015\000,\000P\001\b\001\147\001;\001\r\0015\001\147\001;\001\r\0015\000\\\000\020\001\147\001;\001s\000\246\000\255\0015\001\147\001;\000\018\000\246\001\r\0015\0002\001\003\000\250\000\255\0015\001\018\001;\001\003\000\250\000\255\0015\001=\001=\001\003\000\210\001\011\0015\000\250\000\255\001\007\0015\001\129\001\007\000\172\001\147\001;\000\255\0015\000\208\001\147\001;\001\163\000\252\000\020\001\147\001;\000\012\000'\000\138\000{\0004\001\137\000l\000\210\000T\001;\000j\001\153\0000\001\181\000\014\001;\000\012\000Z\000Z\000\012\000\245\000l\000\250\001\153\0015\000d\001;\000\012\000@\000@\000\012\000\159\000l\000\250\000\169\0015\000\160\001;\000r\000P\001\b\001;\001\011\000\174\000\138\000}\0004\001\169\000\242\001\153\001\153\001\145\001\169\001\177\001\195\001;\001\011\000\174\001\177\001\177\0015\000\238\001;\001\153\000\210\001\153\001\159\0015\001/\000\216\001k\0015\001\139\001\179\001/\001\177\0015\001\018\001;\000'\001\137\000l\000\210\001\177\0015\001A\001A\001\147\001;\000'\001\137\000l\000\250\000l\000\250\000C\000^\000\138\001\153\000C\000^\000\209\000C\000^\001\027\001\145\001\173\001\177\001\173\001\173\001\173\0015\001\018\001;\000'\001\137\000l\000\250\001\173\0015\001C\001C\000)\000a\000e\000\163\000\233\000\251\000\253\001\001\0013\001k\0015\001u\001\018\001;\0009\000l\000?\000\145\0015\0019\0019\001w\001\018\001;\0009\000l\000\246\000\237\000\145\0015\0017\0017\001\139\001\171\0013\000c\0013\001\153\000\252\001\147\001;\000'\001\137\000l\000\210\000T\001;\001\183\000\014\001\b\001;\000\247\000l\000\210\000g\000A\000\210\000g\000+\0015\001;\000\012\000Z\000Z\000\012\000%\000l\000\250\001\153\000\247\000l\000\210\000g\000A\000\210\000g\000d\001\b\001;\000\161\000l\000\250\000\020\000\241\000\230\001\153\000\210\000g\000\169\000\210\000g\000Q\000Y\001U\000A\000\210\000g\000Q\001\135\001\029\0015\001;\000\012\000@\000@\000\012\000#\000l\000\250\000\169\000\161\000l\000\250\000\020\000\241\000\230\001\153\000\210\000g\000\169\000\210\000g\000Q\000\158\001;\000g\0015\000\160\001\b\001;\000j\000r\000J\001\197\001;\000\157\001S\0015\000P\001\b\001;\001\011\000\174\000\138\000}\0004\001\185\000\194\001;\001U\000^\001M\000\174\001\145\001\175\000\146\000[\000[\000\139\001W\001W\001\185\001\193\001\195\001\203\001\193\001\187\001\187\001\193\001;\001\011\000\174\001\193\001;\000\157\001S\0015\001\193\0000\000\250\001\173\0000\001\193\001\014\000l\000\223\0015\001;\001\193\000\223\0015\000\238\001;\001\159\0015\001-\000\216\001k\0015\001\139\001\191\001-\001\193\000\250\001\173\000\210\001\193\001U\001\189\001\189\0015\001\018\001;\000'\001\137\000l\001\189\0015\001E\001E\000)\000M\000r\001\147\001;\000\157\001S\0015\000S\000e\000\163\000\235\000\253\001#\001\203\0011\001O\001\203\001k\0015\001u\0019\001\139\001\171\000O\000g\0015\0011\000\171\0004\001#\0011\001O\000\171\0004\000\171\0004\0015\001\149\000\175\000\210\000g\001G\000\174\000g\001\016\001I\001I\001\b\000g\0000\000\130\001\002\000o\001\002\001\149\000.\000o\000\138\0004\000o\0004\000\140\000m\000\184\000\142\000[\000\004\000i\001Y\000A\000\211\000\219\000.\000i\000i\000\155\0006\001\011\000\230\000l\000\224\000j\000o\0000\000v\001\149\000\138\000o\0004\000v\001\149\000\142\000o\0006\000v\001\149\000\230\000j\000g\0000\000v\001\149\000\138\000g\0004\000v\001\149\000\142\000g\0006\000v\001\149\001\011\000\224\000j\000o\0000\000v\001\149\000\138\000o\0004\000v\001\149\000\142\000o\0006\000v\001\149\001Y\000v\001\149\000\139\001\149\000g\0000\000\138\000g\0004\000\142\000g\0006\001\011\000\224\000j\000o\0000\000\138\000o\0004\000\142\000o\0006\001Y\000o\0000\000\138\000o\0004\000\142\000o\0006\000g\000\028\000\220\001\151\000g\000\236\000g\000\232\000g\000\236\000g\000\232\000\210\000g\001\151\000g\000\236\000g\000\232\000g\000j\000\020\000\241\0000\000\250\001\199\000^\000g\001U\001\133\001\133\001\133\001U\001\133\000g\000^\000g\000^\000\230\000g\001!\000\133\001\006\001!\001!\000g\000 \001\149\000\218\001\149\000\216\000g\000\216\000[\001\149\000\186\000[\000\155\0006\001\149\000\219\000.\000m\000\184\000m\000\184\000o\0004\000g\001\147\001;\001\005\000\174\000g\000\\\001\147\001;\001\003\001\t\000\174\000g\000\208\001\147\001;\001\163\001}\001;\000\174\000g\000g\001\135\000Q\000g\000\213\0000\000l\000\250\000\020\000\241\000\230\001\153\000\210\000g\000\135\000\230\001\153\000\210\000g\000A\000\210\000g\000Q\001S\0015\001\149\001\002\000o\001\002\000[\000\\\001\147\001;\001\005\0000\000\250\000\255\0000\000g\0000\000A\0000\000g\000\004\000\133\000g\000\004\000\133\001\149\0000\000\244\000\255\0000\000\250\000\255\0000\000\244\000\255\0000\001\005\0015\001\147\001;\001\005\0015\000g\0015\0011\0011\000\171\0004\000\167\001;\000.\001;\000\228\001\031\001\199\000.\001\031\000\188\001\031\000\188\000C\000^\001\131\000w\0000\000\180\001\169\000=\000\242\001\153\001\153\0000\000\242\001\153\000\142\001]\0006\000\228\001\153\001\155\000\237\000=\000D\000\161\001\006\001\163\000\210\001\161\001;\000\151\0015\001{\001\143\001y\001{\001\141\001\143\001\163\000\210\001\161\001;\0009\000l\000=\000D\000\161\000\151\0015\000O\000\216\001\005\000\255\0000\000\169\0015\000c\000\216\000\255\0000\000\183\0000\000\250\001\153\0000\001\183\001-\000\216\000g\000\004\000\133\000g\000\004\000\133\000\202\000g\000\202\000g\000g\000\236\000g\000\232\000\171\0004\001;\000g\000\236\000g\000\232\000O\000\214\001q\000\000\000c\000\214\001m\000\000\000j\000\248\0000\0001\000\205\001\r\000\230\000j\000\248\0000\0001\001s\001\023\001s\001\165\001\201\000\214\000\000\000\203\001\161\000\214\000\000\000\201\001\153\000\214\000\000\000g\000\214\000\199\000\000\000\197\001\r\000\214\000\000\000\195\001\011\000\214\000\000\000\193\001\005\000\214\000\000\000\191\000\255\000\214\000\000\000\189\000\249\000\214\000\000\000\183\000\214\000\187\000\000\000-\000\214\000\185\001\011\000\000\000\180\001s\000\026\000$\000\156\000\204\000-\001\011\000\214\000E\000G\000,\000M\001+\000g\0015\000,\001+\000,\000\000\000,\000G\000M\001)\001)\000g\0015\001)\001)\0003\000g\0015\001)\000\214\001)\000\214") + (16, "\000\000\000\006\000F\000\004\000\006\000\b\000\n\000\012\000\016\000\018\000\020\000\022\000\024\000\028\000\030\000&\000.\000<\000H\000L\000N\000P\000R\000T\000V\000X\000`\000h\000l\000p\000\142\000\156\000\158\000\170\000\172\000\174\000\186\000\188\000\190\000\192\000\196\000\198\000\200\000\208\000\210\000\212\000\214\000\222\000\226\000\228\000\242\000\246\001\002\001\004\001\b\000U\000\220\001\219\001\219\001\165\000\134\001\219\000\012\001\165\001=\000j\000\"\000>\000@\000B\000D\000F\000H\000\\\000^\000n\000v\000\160\000\162\000\164\000\166\000\168\000\176\000\184\000\202\000\216\000j\000*\000\218\001y\000,\000t\000\136\001y\0000\000t\000\140\001y\0002\000t\000\236\000\250\000\254\001\006\001\n\001\012\000\235\000,\000l\000/\000\240\000\014\000\016\0006\0008\000\016\000l\001}\000:\000l\000\240\000J\000j\0008\001}\000X\001\165\001=\000\016\000&\001=\000\018\001\165\001=\000>\000D\000\254\000R\000^\000\254\000j\000\164\000\254\000D\000^\0005\000\014\0008\001}\0007\000;\000y\000,\000\232\000;\0009\000l\000\202\000\016\000\022\000<\000j\000,\000l\000\240\000l\000v\000l\000\240\000z\001\219\000\014\000\016\000\018\001\165\001=\000R\0009\000l\000?\000\145\000\132\001\219\000\020\001\165\001=\000\026\000j\000l\000\234\000|\000\252\000\231\000~\0000\000\231\000\136\000\178\001\019\000j\001\019\000,\000\220\000\016\001\031\000\220\000l\001!\001\189\000\252\001\000\001}\000=\000C\000Z\000\211\000C\000Z\000\241\001\019\000\220\000j\001!\001\141\001\157\001\163\001\169\001\171\001\173\000,\001\215\001\221\000\"\000l\000\240\001\221\000\178\001\189\000=\000u\000\"\000l\000\240\001\221\001\221\001\221\001\227\001\004\0008\001}\001\169\001\141\001\141\000I\000q\000}\0000\000\252\000q\000\249\000N\001\n\000\233\000\129\001\n\001\227\001=\001\215\001=\001\227\001=\001\173\000I\0000\000q\000\252\000}\0000\000}\0000\000}\0000\000\184\000\135\0000\000\249\000\249\001\173\000\240\001\173\000\234\001\173\000A\000,\000\232\000\026\000j\000l\000A\000,\000l\000\232\000\026\000j\000l\000A\000,\000l\000 \000>\000P\001\165\001=\000j\000\014\000\026\000j\000l\000\240\001\173\000,\000\232\000\026\000j\000l\000\240\001\173\000,\000l\000\232\000\026\000j\000l\000\240\001\173\000,\000l\000D\000\154\000\194\000^\000\154\000\194\000j\000D\000X\001\165\001=\000\014\000\016\001\t\000,\000\240\000X\000\018\000N\001=\000\014\000\030\001=\000(\0004\000B\000D\000L\000\254\001\165\001=\000j\000\012\001=\000T\001\165\001=\000l\001\017\000\220\000\016\000l\001\023\001\025\001\205\000\\\000^\000b\000d\000h\001\165\001=\000j\000>\000\128\000l\000t\000n\000\026\000j\000l\000\240\001\173\000,\000\232\000\026\000j\000l\000\240\001\173\000,\000l\000\232\000\026\000j\000l\000\240\001\173\000,\000l\000\128\000\136\0000\000\140\001\025\001)\0002\001c\000\240\001\173\000\223\000\202\000\142\001\165\001=\000\154\000\178\000=\000\194\000\196\000\244\000/\0001\000W\000Y\000]\000_\000\218\000_\001\187\000\249\001\017\000\220\000j\000,\000\144\000Y\000\232\000\026\000j\000l\000\240\001\173\000,\000l\000\144\000Y\001\163\001\181\001\185\000\200\001\165\001=\000\212\000Y\000\183\000\232\000Y\000\249\000\151\000\183\000\185\000\232\000\026\000j\000l\000\240\001\173\000,\000l\000\144\000Y\000\218\000\185\000\238\000\185\000\252\000\185\001\004\000/\001\215\001Y\001]\000\232\000\026\000j\000l\000\240\001\173\000,\000l\000\144\000Y\000\218\000\185\001\181\000j\000\018\000l\000\247\000\247\000,\000Y\000^\000\238\000,\000\185\000,\000\240\001\173\000,\000\185\000\185\000\218\000\185\000\238\000,\000\185\000,\000\136\0000\000k\0000\000\185\000*\000k\000]\000\185\000\217\000*\000\014\000*\000\229\001)\000\248\000k\000\248\000\144\000Y\000\232\000\026\000j\000l\000\240\001\173\000,\000l\000\144\000Y\000\218\000\149\000\181\000\232\000\026\000j\000l\000\240\001\173\000,\000l\000\144\000Y\000\218\000\181\000\238\000\185\000\252\000\185\001\004\000/\001\215\000\183\001W\001[\000\232\000\026\000j\000l\000\240\001\173\000,\000l\000\144\000Y\000\218\000\181\000\218\000\181\000\144\000Y\000\218\000\181\000l\000\144\000Y\000/\000\026\000j\000l\000\240\001\173\001e\000,\000l\000:\000j\001e\000\202\000p\000L\000\254\001\165\001=\000\186\001=\000j\000,\001\t\000\240\000j\000\016\000\186\001=\000\139\001\139\001\137\000Z\000\255\001\005\000\004\000\018\0009\001c\000\202\000<\000\236\001\227\000\031\001\227\000\145\000\228\001\173\000\202\001\173\000;\000X\000\018\000\255\000\202\001\005\000Z\001\005\001\215\001\019\000\220\000\016\001}\001\027\001}\001\137\000Z\001\005\001\139\001\163\000\236\001\005\001\017\000\202\001\019\000\220\000\236\001\019\000!\000\127\001\b\000!\001\005\000,\001\005\000,\001\137\000Z\000\209\001\011\000j\000,\001\011\000,\000\240\001\005\000,\000\209\001\215\001\017\001\163\001\011\000\172\000\136\000\138\000l\000\202\000\140\000l\000\148\000\220\000-\000/\001\017\000\220\000/\001\021\000\152\000\246\001\165\001=\000\142\001\165\001=\000\254\000-\000[\000\176\000[\000\178\000l\000\216\000j\000\144\000[\000\220\000j\000\174\001\165\001=\000\188\001\165\001=\000\252\000\185\000\b\000\190\001\165\001=\000J\000\014\000j\000\185\000\240\001\173\001M\000\215\000,\000l\000\179\000j\000\018\000\247\000,\000\144\000Y\000Y\000\141\001_\001\147\001\145\000\240\001\221\000\225\000Z\000\188\001\165\001=\000\131\000\232\000\026\000j\000l\000A\000,\000l\000\144\000[\000\232\000\026\000j\000l\000A\000,\000l\000\144\000[\000\249\001\017\000\220\000j\000,\000B\000D\000X\001\165\001=\001\011\000\240\001\005\000,\000\\\000^\000n\000Y\000\240\001\173\000\202\000\192\001\165\001=\000\185\000\202\001\002\001\165\001=\000[\001q\000\147\000$\000:\000l\000\202\000[\001s\001\163\001\181\001\187\000l\000\202\000[\000\184\000\143\000\146\000\220\000-\001\017\000\150\000[\001o\000\184\001m\000K\000\188\001\165\001=\000\131\000\252\001'\001'\000[\000\026\000j\000l\000A\000,\000l\000:\000l\000J\000[\000\144\000[\000\216\000j\000\188\001\165\001=\000\131\000*\000o\000\153\000\232\000\026\000j\000l\000A\000,\000l\000\144\000[\000\188\001\165\001=\000\131\000\249\000[\001Q\000\172\000g\001\143\001\149\000\"\000\188\001\165\001=\000\131\001\149\000@\000\188\001\165\001=\000\131\001\149\000B\000\188\001\165\001=\000\131\001\149\000D\000\188\001\165\001=\000\131\001\149\000F\000\188\001\165\001=\000\131\001\149\000H\000\188\001\165\001=\000\131\001\149\000\\\000\188\001\165\001=\000\131\001\149\000^\000\188\001\165\001=\000\131\001\149\000v\000\188\001\165\001=\000\131\001\149\000\160\000\188\001\165\001=\000\131\001\149\000\162\000\188\001\165\001=\000\131\001\149\000\164\000\188\001\165\001=\000\131\001\149\000\166\000\188\001\165\001=\000\131\001\149\000\168\000\188\001\165\001=\000\131\001\149\000\184\000\188\001\165\001=\000\131\001\149\000\202\000\188\001\165\001=\000\131\001\149\000\232\000\026\000j\000l\000A\000,\000l\000\144\000[\000\188\001\165\001=\000\131\001\149\000\236\000\188\001\165\001=\000\131\001\149\000\238\000\188\001\165\001=\000\131\001\149\000\250\000\188\001\165\001=\000\131\001\149\001\n\000\188\001\165\001=\000\131\001\149\001\012\000\188\001\165\001=\000\131\001\149\001\215\001\181\000[\001\229\000\188\001\165\001=\000\131\001\149\000*\000F\001\219\000g\000g\001\b\001=\000/\000\202\000g\000\240\000\018\000\247\000\220\001\173\000\202\000g\000\133\0008\001}\000\220\001\173\000\202\000g\000A\000\202\000g\000Q\001\145\000A\000\213\000\202\001\143\001\151\001\147\000W\000\240\001\173\000\202\000g\000\181\000\202\000g\001S\001U\000\171\0017\0017\001\225\001\149\001\149\000*\000o\000o\000,\000t\000\188\001\165\001=\000\131\001\149\000\136\000o\0000\000t\000\188\001\165\001=\000\131\001\149\000\140\000o\0002\000t\000\188\001\165\001=\000\131\001\149\000\220\000j\000g\000,\000t\000\188\001\165\001=\000\131\001\149\000\136\000g\0000\000t\000\188\001\165\001=\000\131\001\149\000\140\000g\0002\000t\000\188\001\165\001=\000\131\001\149\001\017\000\216\000j\000o\000,\000t\000\188\001\165\001=\000\131\001\149\000\136\000o\0000\000t\000\188\001\165\001=\000\131\001\149\000\140\000o\0002\000t\000\188\001\165\001=\000\131\001\149\001c\000t\000\188\001\165\001=\000\131\001\149\000[\000\137\001a\001a\001\149\000g\000\024\000\214\001\167\000g\000\226\000g\000\222\000g\000\181\000\202\000g\001I\000\172\000g\001\006\001K\001K\000\254\000g\000,\000\128\000\248\000o\000\248\000\136\0000\000o\0000\000\138\000m\000\182\000\140\000[\000\004\000i\001c\000\213\000\221\000*\000i\000i\000\161\0002\001\017\000\220\000l\000\188\001\165\001=\000\131\001\149\000\188\001\165\001=\000\131\001\149\001\151\000g\000Z\000g\000Z\000\220\000g\001'\000\131\000g\000\028\000\188\001\165\001=\000\131\000\210\000\188\001\165\001=\000\131\001\149\001\149\000\210\000\188\001\165\001=\000\131\001\149\000g\000,\000\136\000g\0000\000\140\000g\0002\001\017\000\216\000j\000o\000,\000\136\000o\0000\000\140\000o\0002\001c\000o\000,\000\136\000o\0000\000\140\000o\0002\000[\000\208\000g\000\208\000\161\0002\000\188\001\165\001=\000\131\001\149\000\221\000*\000m\000\182\000m\000\182\000o\0000\000g\001\165\001=\001\011\000\172\000g\000X\001\165\001=\001\t\000\202\001\011\000\240\001\005\000\202\001\011\001\015\000\172\000g\001\139\001\015\000\200\001\165\001=\000\016\000j\000\238\000,\000\136\001\183\000N\000\140\000V\000\253\000l\000\240\000\133\000\220\001\227\000\173\001=\000*\001=\001\227\001g\0002\001i\001g\001k\000w\000\"\001\221\001\177\001\221\000\240\000\133\000\220\001\177\000Z\001\221\001\221\001\177\000Z\001\221\001\221\001\135\001=\000\172\000g\001\185\001\165\001=\000.\000\163\001U\0017\000g\000\215\000,\000l\000Q\000\188\001\165\001=\000\131\001\149\000\248\000o\000\248\000[\000X\001\165\001=\001\011\000,\000\240\001\005\000,\000g\000,\000A\000,\000g\000\004\000\131\000g\000f\000[\000\188\001\165\001=\000\131\000,\000\234\001\005\000,\000\240\001\005\000,\000\234\001\005\000,\001\149\000,\000\234\001\005\000,\000\240\001\005\000,\000\234\001\005\000,\001\011\0017\001\165\001=\001\011\0017\000X\000\018\001\165\001=\001}\000\202\001\005\000\219\0017\001\165\001=\000.\001\t\001\015\0017\001\b\001=\001\t\001\015\0017\001A\001A\001\t\001\015\0017\000x\001\219\000:\000\185\000\b\000g\000\130\001\219\000\170\001\165\001=\001\011\0017\000\198\001\165\001=\000/\000\240\000\133\000\220\001\173\000\175\000\202\000 \000\245\000\245\0017\001\173\000\200\001\165\001=\001\183\000\202\000j\001\017\000\220\000j\001\181\001=\0017\001\135\001=\0017\000\240\000(\000L\000\254\001\165\001=\001\019\0017\001\165\001=\001\019\0017\000X\000\018\001\165\001=\001}\000\236\001\005\0017\001\165\001=\000\016\000\236\001\019\0017\000.\001\t\000\240\001\005\0017\001\b\001=\001\t\000\240\001\005\0017\001?\001?\001\t\000\202\001\017\0017\000\240\001\005\001\r\0017\001\139\001\r\000\170\001\165\001=\001\005\0017\000\200\001\165\001=\001\183\000\242\000\018\001\165\001=\000\n\000'\000\136\000y\0000\001\153\000l\000\202\000P\001=\000j\001\173\000,\001\201\000\012\001=\000\n\000V\000V\000\n\000\251\000l\000\240\001\173\0017\000`\001=\000\n\000<\000<\000\n\000\165\000l\000\240\000\175\0017\000\158\001=\000p\000L\000\254\001=\001\017\000\172\000\136\000{\0000\001\189\000\232\001\173\001\173\001\163\001\189\001\197\001\215\001=\001\017\000\172\001\197\001\197\0017\000\228\001=\001\173\000\202\001\173\001\179\0017\0011\000\208\001u\0017\001\155\001\199\0011\001\197\0017\001\b\001=\000'\001\153\000l\000\202\001\197\0017\001C\001C\001\165\001=\000'\001\153\000l\000\240\000l\000\240\000C\000Z\000\136\001\173\000C\000Z\000\211\000C\000Z\001!\001\163\001\193\001\197\001\193\001\193\001\193\0017\001\b\001=\000'\001\153\000l\000\240\001\193\0017\001E\001E\000)\000a\000e\000\169\000\237\001\001\001\003\001\007\0015\001u\0017\001\127\001\b\001=\0009\000l\000?\000\145\0017\001;\001;\001\129\001\b\001=\0009\000l\000\236\000\136\000\140\001g\0002\000\218\000\252\001\183\001\135\001=\000\159\000\252\001\133\000\243\000\145\0017\0019\001\131\001\133\001\173\000\202\000<\000\140\001g\0002\000\218\001\175\001\183\001\135\001=\000\140\001g\0002\000\218\001\175\001\175\0019\001\155\001\191\0015\000c\0015\001\173\000\242\001\165\001=\000'\001\153\000l\000\202\000P\001=\001\203\000\012\000\254\001=\000\253\000l\000\202\000g\000A\000\202\000g\000+\0017\001=\000\n\000V\000V\000\n\000%\000l\000\240\001\173\000\253\000l\000\202\000g\000A\000\202\000g\000`\000\254\001=\000<\000\167\000l\000\240\000\018\000\247\000\220\001\173\000\202\000g\000\175\000\202\000g\000Q\001#\0017\001=\000\n\000<\000<\000\n\000#\000l\000\240\000\175\000\167\000l\000\240\000\018\000\247\000\220\001\173\000\202\000g\000\175\000\202\000g\000Q\000\156\001=\000g\0017\000\158\000\254\001=\000j\000p\000F\001\219\001=\000\163\001U\0017\000L\000\254\001=\001\017\000\172\000\136\000{\0000\001\205\000\190\001=\001_\000Z\001O\000\172\001\163\001\195\000\137\001\205\001\213\001\215\001\225\001\213\001\207\001\207\001\213\001=\001\017\000\172\001\213\001=\000\163\001U\0017\001\213\000,\000\240\001\193\000,\001\213\001\004\000l\000\227\0017\001=\001\213\000\227\0017\000\228\001=\001\179\0017\001/\000\208\001u\0017\001\155\001\211\001/\001\213\000\240\001\193\000\202\001\213\001_\001\209\001\209\0017\001\b\001=\000'\001\153\000l\001\209\0017\001G\001G\000)\000M\000p\000S\000e\000\169\000\239\001\003\0013\001Q\001u\0017\001\127\001;\001\155\001\191\000O\000g\0017\0013\000\177\0013\001Q\001\217\0000\000\177\0000\000g\0017\0013\0013\000O\000\208\001\011\001\005\000,\000\144\000Y\000\218\000\185\000\144\000Y\000\218\000\185\000l\000\185\000,\000\240\001\173\000,\001\203\001/\000\208\000\144\000[\000\188\001\165\001=\000\131\001\149\000\144\000[\000\188\001\165\001=\000\131\001\149\000l\000g\000\004\000\131\001\217\0000\0017\000=\000@\000\167\000\252\001\183\000\202\001\181\001=\000\157\0017\001\133\001\161\001\131\001\133\001\159\001\161\001\183\000\202\001\181\001=\0009\000l\000?\000\145\0017\000=\000@\000\167\000\157\0017\000\177\0000\000\173\001=\000*\001=\000\218\001%\001\221\000*\001%\000\184\001%\000\184\000C\000Z\001\141\001\221\000\"\000u\000Z\001\141\000s\000,\000\178\001\189\000=\000\232\001\173\001\173\000\232\001\173\000\140\001g\0002\000\218\001\173\001\175\000\243\000\236\000\243\000\145\0017\000=\000@\000\167\000\155\0017\001\133\001\131\001\133\0009\000l\000\236\000\243\000\145\0017\000=\000@\000\167\000\155\0017\000c\000\208\001\005\000,\000\175\0017\001\217\0000\001=\000g\000\226\000g\000\222\000O\000\206\001{\000\000\000c\000\206\001w\000\000\000j\000\238\000,\0001\000\207\001\019\000\220\000j\000\238\000,\0001\001}\001\029\001}\001\185\001\223\000\206\000\000\000\205\001\181\000\206\000\000\000\203\001\173\000\206\000\000\000g\000\206\000\201\000\000\000\199\001\019\000\206\000\000\000\197\001\017\000\206\000\000\000\195\001\011\000\206\000\000\000\193\001\005\000\206\000\000\000\191\000\255\000\206\000\000\000\185\000\206\000\189\000\000\000-\000\206\000\187\001\017\000\000\000\178\001}\000\022\000 \000\154\000\196\000-\001\017\000\206\000E\000G\000(\000M\001-\000g\0017\000(\001-\000(\000\000\000(\000G\000M\001+\001+\000g\0017\001+\001+\0003\000g\0017\001+\000\206\001+\000\206") and rhs = - ((16, "\001q\001m\000\205\000\203\000\201\000\199\000\197\000\195\000\193\000\191\000\189\000\187\000\185\000E\0003\000H\000F\001\131\001\205\001\014\000<\001s\001\018\001;\001S\0015\001\023\001\165\000j\001\153\0000\000j\000\\\001\147\001;\000\255\0000\000<\001s\000\016\000=\001\199\000=\000j\000w\0000\000=\000x\001\031\000\188\000x\000\188\000\180\001\169\001\199\000\180\001\169\000j\000w\0000\000\180\001\169\000\138\000I\0004\000\138\001\006\000\127\0004\000\138\000q\001\006\000\127\0004\000\128\000\227\000\127\0004\000\128\0004\000~\000\227\000\127\0004\000~\000\227\000\127\000\188\000\137\0004\001\145\000U\000U\000\230\001\197\000\136\001\197\000\171\0004\001\175\000\194\001;\001\187\001M\000\174\001\193\000r\000P\001;\001\011\000\174\001\193\000r\000P\001\b\001;\001\011\000\174\001\193\001\193\001\195\001\175\000\139\001\145\000\160\001;\001\193\000\223\0015\000\160\001\b\001;\001\193\000\223\0015\000\014\000+\0015\000d\001\029\0015\000\238\001;\001\159\0015\000\158\001;\000g\0015\001k\0015\001\139\000\210\001\193\000\250\001\173\000\210\001\193\001U\001\189\001U\000^\001\193\001U\001\187\001\019\000j\000\183\0000\000j\000\183\000\250\001\153\0000\000j\001\153\0000\000\160\001;\001\177\0015\000\014\001;\000\245\000l\000\250\001\153\0015\000d\001;\000\159\000l\000\250\000\169\0015\000\238\001;\001\159\0015\001k\0015\001\139\001\169\000\138\000}\0004\001\169\001\145\000T\001;\001\181\001/\000\216\001\177\001\195\000r\000P\001;\001\011\000\174\001\177\000r\000P\001\b\001;\001\011\000\174\001\177\000j\001\193\0000\001\185\000\138\000}\0004\001\185\000j\001\193\000\250\001\173\0000\000T\001;\001\183\001-\000\216\001\177\000\209\000C\000^\001\173\000l\000\250\000C\000^\001\173\000C\000^\001\173\000\252\000\020\001\147\001;\000'\001\137\000l\000\210\001\177\0015\001A\001\027\000\156\000\254\000$\000\200\000\138\0004\000j\0000\000\204\000\026\000\018\000j\000\248\0000\001\165\001\011\001\011\000\230\000j\000\248\0000\000j\000\248\0000\001\165\001\153\000\210\001\153\001\199\000y\000&\001\199\000\142\001]\0006\001\006\000\153\001\205\001\153\001\195\000\028\000\220\001#\000\174\000g\000f\001\147\001;\000g\000\004\000\133\000\022\001\147\001;\000g\000\022\001\147\001;\000g\000\004\000\133\000\022\001\147\001;\000g\000\202\000g\000\022\001\147\001;\000g\000\004\000\133\000\202\000g\000\006\001\147\001;\000g\000\236\000g\000\232\000\196\001\147\001;\000\183\000\210\000g\001\151\000g\000\236\000g\000\232\000\196\001\147\001;\000\183\000\174\000g\000\236\000g\000\232\000[\000r\000\\\001\147\001;\001\003\001\t\000\174\000g\000r\000\208\001\147\001;\001\163\001}\001;\000\174\000g\000r\000P\001\147\001;\001\005\000\174\000g\000r\000P\001\b\001\147\001;\001\005\000\174\000g\000\192\001\147\001;\000\133\000\194\001\147\001;\001U\001\133\000\194\001\147\001;\000j\000\020\000\241\0000\001\133\000h\001\147\001;\000g\000\004\000\133\000\024\001\147\001;\000g\000\004\000\133\000\176\001\147\001;\000g\000 \001\149\000\218\001\149\000\176\001\147\001;\000g\000 \001\149\000\b\001\147\001;\000g\000\236\000g\000\232\000\198\001\147\001;\000\183\000\210\000g\001\151\000g\000\236\000g\000\232\001\012\001\147\001;\000[\000\144\001\147\001;\000[\000[\000\139\000u\001\161\000[\000\243\000[\001\149\000\170\001\149\001\149\000\168\001\149\001\149\000\166\001\149\001\149\000\164\001\149\001\149\000\162\001\149\001\149\000H\001\149\001\149\000F\001\149\001\149\000D\001\149\001\149\000b\001\149\001\149\000`\001\149\001\149\000&\001\149\001\149\000J\001\149\001\149\000\210\001\149\001\149\000x\001\149\001\149\000\188\001\149\001\149\000L\001\149\001\149\001\004\001\149\001\149\001\020\001\149\001\149\001\022\001\149\001\149\000\246\001\149\000K\001\149\001\207\001\149\001O\000\174\000g\000p\001G\000\174\000g\001\149\000\248\001\149\000l\000v\001\149\000[\000\230\001Y\000v\001\149\000[\000\230\000j\000g\0000\000v\001\149\000[\000\230\000\142\000g\0006\000v\001\149\000[\000\230\000\138\000g\0004\000v\001\149\000[\000\224\000j\000o\0000\000v\001\149\000[\000\230\001\011\000\224\000j\000o\0000\000v\001\149\000[\000\224\000\142\000o\0006\000v\001\149\000[\000\230\001\011\000\224\000\142\000o\0006\000v\001\149\000[\000\224\000\138\000o\0004\000v\001\149\000[\000\230\001\011\000\224\000\138\000o\0004\000v\001\149\001\149\001\195\000J\001\197\000|\001\197\000\171\0004\000:\001\006\001\163\000\210\001\161\001;\001\163\000\210\001\161\001;\000\132\001\197\000\171\0004\000\138\000{\0004\000Q\000A\000\210\000g\000^\000g\000\250\001\199\000^\000g\001U\001\133\000j\000\020\000\241\0000\001\133\000C\000\209\000C\000^\001\131\000l\000\250\000C\000^\001\131\000C\000^\001\131\000j\0000\000j\001\003\000\250\000\255\0000\000\141\000R\001\157\000\250\001\157\000^\001\199\000\250\000\135\000\230\001\157\000^\001\199\000\250\001\199\000\250\000\135\000\230\001\199\001\006\001\163\001}\001;\001\163\001}\001;\000\020\001\147\001;\0009\000l\000\246\000\237\000\145\0015\000\020\001\147\001;\000V\0009\000l\000\246\000\237\000\145\0015\000\020\001\147\001;\0009\000l\000?\000\145\0015\000\020\001\147\001;\000V\0009\000l\000?\000\145\0015\000\018\000l\000O\000\214\000.\000\228\000c\000\214\000z\001\197\000\171\0004\0008\001g\000\147\000(\001g\000\147\000\188\000\143\001e\000\188\000\150\000\154\000\150\000\230\001\011\000\150\000\230\000-\000\148\000\152\000\148\000\230\001\011\000\148\000\230\000-\000l\000>\000l\000l\000\210\000[\000>\000l\000\210\000[\000\247\000l\000\250\000\167\001;\000\247\000l\000\250\000\167\001;\000.\001;\001a\001_\001_\001]\000l\000l\000\250\001\153\001\019\000[\000\146\000[\000\030\000l\000\030\000j\000l\000A\0000\000>\000l\000N\000[\000>\000j\001[\000\213\0000\000>\000l\000N\000j\001K\000\213\0000\000N\000\173\000\030\000j\001[\0000\000\030\000l\000\146\000Y\000Y\001Q\000/\000/\000Q\000/\000A\000\210\000g\000/\000\250\000\135\000\230\001\153\000\210\000g\000/\000\250\000\020\000\241\000\230\001\153\000\210\000g\000\175\000\210\000g\000W\000\250\001\153\000\210\000g\000r\001\147\001;\000\157\001S\0015\001O\001\203\000r\001;\000\157\001S\0015\000r\000J\001\197\001;\000\157\001S\0015\001M\001\203\000\183\000\183\000\250\001\153\000/\000Q\000/\000Y\000\250\001\153\000\210\000g\000\175\000\210\000g\001I\001G\001\016\001I\001\018\001;\000'\001\137\000l\001\189\0015\001E\001\018\001;\000'\001\137\000l\000\250\001\173\0015\001C\001\018\001;\000'\001\137\000l\000\210\001\177\0015\001A\001\018\001;\001\003\001\t\0015\001?\001\018\001;\001\003\000\250\000\255\0015\001=\001\195\001;\001\018\001;\0009\000l\000?\000\145\0015\0019\001\018\001;\0009\000l\000\246\000\237\000\145\0015\0017\000\165\0015\000,\0013\000a\0013\000,\0011\000,\000g\0015\0011\000M\0011\001\179\001/\001\191\001-\000M\001+\000,\001)\000,\000g\0015\001)\000M\001)\000G\001)\001Y\000\221\000\215\001Y\000\221\000\215\000.\001Y\000\221\000\215\000.\000\016\000\225\001Y\000\221\000\215\000.\001'\000n\001\147\001;\000\157\001S\0015\001%\001#\001\203\000\183\000^\000g\000\183\000\n\000g\000^\000g\000\183\000^\000\230\000l\000\250\000\167\001;\000.\001;\001\031\001\199\000.\001\031\000l\000\250\000\167\001;\000.\001;\001\199\000.\000l\000\250\000\167\001;\001\199\000\228\001;\000#\000l\000\250\000\169\001;\000\161\000l\000Q\001\b\001;\000\161\000l\000Q\001;\000\161\000l\000\250\000\169\000\210\000g\001\b\001;\000\161\000l\000\250\000\169\000\210\000g\001;\000\161\000l\000\250\000\020\000\241\000\230\001\153\000\210\000g\001\b\001;\000\161\000l\000\250\000\020\000\241\000\230\001\153\000\210\000g\000l\001\r\000\230\000l\000\018\001\r\000\230\000\018\001s\000j\000\248\0000\0001\001\r\000\230\001s\001\r\000\230\000j\000\248\0000\001\r\000\230\0001\001s\001\r\000\230\001s\000l\001\011\000\230\000l\000\018\001\011\000\230\000\018\000/\001\011\000\230\000/\001\025\001\r\000j\001\r\0000\001\017\000\210\001\005\000\250\000\255\000\210\001\005\001\129\001\t\000\250\000\255\001\129\001\007\000\"\001;\000O\000\216\000\190\001;\001\127\000^\001\005\000\207\001\005\001\195\001\011\001\005\000\207\001\005\000j\0000\001\145\000\016\000\018\000\016\000\\\001\147\001;\000\018\000\246\001\r\0015\000*\001;\000c\000\216\000\190\001;\001\127\000^\000\255\000\\\000\020\000R\001;\001\005\000j\000\255\0000\000\255\001\195\000\249\000j\0000\000^\000\255\000\255\000^\000\255\000\255\000\004\000\129\001\145\000\\\000\020\001\147\001;\001s\000\217\0015\000\\\000\020\001\147\001;\001s\000\246\000\255\0015\001\021\000Z\000Z\000\012\000Z\000\012\000\012\000Z\001\n\001s\000l\000l\000\241\000$\000$\000\239\001\153\000@\001\153\001\155\000@\001\155\001\153\000\210\001\155\001\153\000\210\000@\001\155\000\228\000@\000\228\001\153\000\210\000\228\001\153\000\210\000@\000\228\000\142\001]\0006\000@\000\142\001]\0006\001\153\000\210\000\142\001]\0006\001\153\000\210\000@\000\142\001]\0006\000P\001\147\001;\001\005\0015\000P\001\b\001\147\001;\001\005\0015\000P\001\147\001;\001\r\0015\000P\001\b\001\147\001;\001\r\0015\000B\000p\001\016\000\224\000j\001o\0000\000\224\000j\001o\0000\000v\000\224\000\138\001o\0004\000\224\000\138\001o\0004\000v\000\224\000\142\001o\0006\000\224\000\142\001o\0006\000v\000\178\001\b\000\170\000\168\000\166\000\164\000\162\000H\000F\000D\000b\000`\000&\000J\000\210\000x\000\188\000L\001\004\001\020\001\022\000\246\001\020\001\006\000.\001\014\000l\000\250\001\153\000\210\001\149\000\210\000\255\000\210\000\183\000\210\000g\000A\000N\000>\000l\000\250\000j\001\005\000\250\000\255\0000\000j\001\005\0000\000j\000\014\001;\001\149\0000\000j\000\014\001;\001\149\000\250\000\255\0000\000j\000\014\001;\001\149\000\250\000\255\000\244\000\255\0000\000j\000\014\001;\001\149\000\244\000\255\0000\001\201\000\214\001\161\000\214\001\153\000\214\000g\000\214\001\r\000\214\001\011\000\214\001\005\000\214\000\255\000\214\000\249\000\214\000\183\000\214\000-\000\214\000\183\000\248\000\183\000\183\001\195\000\177\000\183\001\014\000/\000\181\000\183\001\006\000\183\000\208\001\147\001;\000\183\000\181\000\242\000\183\000\183\000\242\000\183\000\179\000\242\000\183\000\175\000\242\000\183\000Y\001\161\000\183\001\161\000j\000\020\000\241\0000\000Y\000\243\000\183\000\144\001\147\001;\000Y\000\175\000\248\000\183\000\175\001\195\000\177\000\175\001\014\000/\000\179\000\175\001\006\000\183\000l\000\016\000O\000\250\000c\000\250\001\153\000>\000\183\000>\000\183\000\n\000g\001\153\000\135\000\230\001\153\001\205\000\135\000\230\001\205\000\134\001\197\000\171\0004\000\206\001\147\001;\000/\000\250\000\169\000\210\000\239\0015\000@\000@\000\012\000@\000\012\000\012\000@\0002\000i\000[\000\004\000i\001y\001{\000\153\001{\001y\001\141\001{\001\143\000\151\001{\000\151\001\143\001y\001{\000\149\001{\000\147\001c\000\145\000\238\001\153\000\210\001\153\000\143\000[\001\129\000\141\001\129\001W\000\139\001W\000\243\000\137\000\243\000<\001s\000\135\000<\001s\001!\001\006\001!\000\133\001\006\001!\001\205\000\131\001\020\001\205\000!\000\129\001\018\000!\000q\000\127\001\006\000q\001\153\000}\000\242\001\153\000;\000{\000\242\000;\001\199\000y\000&\001\199\000w\000\242\001\153\001\153\000\242\001\153\000u\000\242\001\149\001\149\000\242\001\149\000s\000&\001\199\001\199\000&\001\199\000I\001\153\001\149\001\149\000.\001\149\000.\000o\000l\000\219\000l\000\219\000.\000l\000\219\000.\000m\000\183\000\183\000.\000\183\000.\000k\001Y\000\211\000\219\001Y\000\211\000\219\000.\001Y\000\211\000\219\000.\000i\001\149\001\149\000.\001\149\000.\000g\001\149\000.\000J\001\197\000g\000\208\001\147\001;\001\163\001}\001;\0015\0013\001k\0015\001\139\000)\000\163\001u\0019\001w\0017\000\020\001\147\001;\0009\000=\000D\000\161\000\149\0015\000\020\001\147\001;\000V\0009\000=\000D\000\161\000\149\0015\000e\000\\\001\147\001;\001\003\001\007\0015\000\\\001\147\001;\001\003\000\210\001\011\0015\001\001\000\\\001\147\001;\0002\001\003\000\250\000\255\0015\001=\000\253\000\251\000\233\000\172\001\147\001;\000\255\0015\000\252\001\147\001;\000'\001\137\000l\000\250\001\173\0015\001C\001\171\001\167\000b\000\156\000b\000\200\000H\000\156\000H\000\200\000\142\001'\0006\000\138\000k\0004\000\130\000k\001\002\000\130\001\002\000\226\001\149\000\186\000\222\000[\000j\000g\0000\000j\000g\000A\0000\000[\000\230\000j\000g\0000\000[\000\230\000\142\000g\0006\000[\000\230\000\138\000g\0004\000[\000\224\000j\000o\0000\000[\000\230\001\011\000\224\000j\000o\0000\000[\000\224\000\142\000o\0006\000[\000\230\001\011\000\224\000\142\000o\0006\000[\000\224\000\138\000o\0004\000[\000\230\001\011\000\224\000\138\000o\0004\001\000\001\147\001;\000g\000\216\001\000\001\147\001;\000\216\000X\001\147\001;\001\185\000j\000\\\001\147\001;\001\005\0000\000j\000\\\001\147\001;\001\005\000\250\000\255\0000\000T\001\147\001;\001\183\001-\000\216\001i\000-\001\167\001\161\000\243\000B\000[\001\b\000[\000\140\000m\000\184\000\140\000\184\000[\000\230\001Y\001\011\000\230\000j\000g\0000\001\011\000\230\000\140\000m\000\184\000[\000\180\000l\000[\000\178\000[\001\145\000\016\001\011\000\230\000j\0000\000\142\000\155\0006\001\011\000\230\000\142\000\155\0006\000\130\000o\001\002\000\130\001\002\001\011\000\230\000\130\000o\001\002\001\011\000\230\000\130\001\002\000\138\000o\0004\001\011\000\230\000\138\000o\0004\001\011\000\230\000\138\0004\001\011\000\230\000j\000\\\001\147\001;\001\005\000\250\000\255\0000\000/\000W\000j\000\183\0000\000]\000j\000\\\001\147\001;\001\003\0000\000j\000\\\001\147\001;\001\003\000\250\000\255\0000\000\016\000_\000_\000\228\000_\001\161\000\243\000\180\000=\001\011\000\230\000]\001\011\000\230\000\138\0004\001\011\000\230\000j\0000\001\011\000\230\000j\000\183\0000\000j\000\183\000\250\001\153\0000\001\145\000l\000\018\001\018\001\014\001\012\001\000\000\252\000\238\000\236\000\232\000\220\000\218\000\216\000\208\000\206\000\204\000\198\000\194\000\192\000\190\000\176\000\174\000\172\000\160\000\158\000\144\000r\000h\000d\000\\\000Z\000X\000V\000T\000R\000P\000L\000@\0002\000*\000\"\000 \000\028\000\026\000\024\000\020\000\014\000\012\000\n\000\b\000\004\000e\000\208\001\147\001;\001\163\000\210\001\161\001;\0015\000\210\000g\001U\001\135\000j\000\020\000\241\0000\001\135\0011\000g\0015\0011\001#\001O\001k\0015\001\139\000\163\000)\001u\0019\000\020\001\147\001;\0009\000=\000D\000\161\000\151\0015\000\020\001\147\001;\000V\0009\000=\000D\000\161\000\151\0015\000S\000\\\001\147\001;\001\003\001\t\0015\000\\\001\147\001;\0002\001\003\001\t\0015\001?\000\253\000\235\000\252\001\147\001;\000'\001\137\000l\001\189\0015\001E\001\171\000\172\001\147\001;\001\005\0015\000b\000`\000\243\000R\000\229\000\131\001;\000\243\001;\000\180\001s\000\180\001s\000$\000\180\001s\000\156\000\180\001s\000-\000\180\001s\001\011\000\180\001s\000\204\000\180\001s\000\026\000g\0015\000,\001+\000,\000G\000,\000\214\001\199\000s\000\250\001\153\000\250\001\153\000\244\001\153\000\244\001\153\000\210\000\237\001\027\0005\0007\000;\000j\000{\0000\000<\001s\000\016\000H\000b\001\b\000H\001\b\001\b\000H\000b\001\b\001\b\000b\000\166\000B\001)\000\214\000g\0015\001)\000\214\000j\000\231\0000\000l\0001\001\015\001;\000%\000l\000\250\001\153\001;\000\247\000l\000\210\000g\001\b\001;\000\247\000l\000\210\000g\001;\000\247\000l\000A\000\210\000g\001\b\001;\000\247\000l\000A\000\210\000g\000\014\001\147\001;\000/\000\250\000\169\0015\000\012\000\012\000Z\000\012\000\012\000Z\000\012\000@\000\012\000\012\000@\000\020\0009\001Y\000\031\001\205\000\145\000\020\0009\001Y\000\246\001\205\000\\\001\011\000\210\001\r\000\\\001\011\000\246\001\r\000\\\000\020\000\249\000\210\000\255\000\\\000\020\000\249\000\246\000\255\000\210\000\210\000@"), (16, "\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\b\000\t\000\n\000\011\000\012\000\r\000\014\000\015\000\016\000\017\000\018\000\022\000\026\000\027\000\028\000\031\000%\000'\000(\000)\000+\000/\0002\0004\0006\0009\000>\000A\000E\000J\000N\000P\000T\000Z\000[\000\\\000_\000c\000d\000g\000j\000p\000w\000y\000{\000|\000\129\000\135\000\138\000\141\000\145\000\149\000\151\000\152\000\154\000\158\000\160\000\163\000\165\000\166\000\169\000\174\000\174\000\177\000\177\000\181\000\188\000\195\000\199\000\201\000\202\000\203\000\207\000\208\000\213\000\215\000\221\000\228\000\231\000\232\000\236\000\241\000\246\000\247\000\251\001\000\001\003\001\014\001\015\001\016\001\017\001\018\001\019\001\021\001\023\001\024\001\025\001\026\001\029\001\030\001\031\001$\001'\001(\001+\001,\001/\0012\0013\0014\0015\0017\0018\0019\001<\001B\001F\001L\001R\001Z\001a\001l\001u\001v\001~\001\135\001\142\001\150\001\154\001\159\001\167\001\173\001\179\001\187\001\193\001\200\001\211\001\215\001\219\001\221\001\222\001\224\001\226\001\229\001\232\001\235\001\238\001\241\001\244\001\247\001\250\001\253\002\000\002\003\002\006\002\t\002\012\002\015\002\018\002\021\002\024\002\027\002\030\002 \002\"\002%\002)\002,\002/\0024\002;\002B\002I\002P\002Y\002`\002i\002p\002y\002{\002{\002}\002\129\002\130\002\135\002\139\002\143\002\143\002\146\002\147\002\150\002\152\002\156\002\158\002\163\002\164\002\168\002\173\002\176\002\178\002\183\002\184\002\184\002\186\002\190\002\196\002\198\002\202\002\206\002\209\002\218\002\228\002\236\002\245\002\246\002\247\002\249\002\249\002\251\002\253\003\001\003\002\003\005\003\011\003\012\003\r\003\016\003\019\003\020\003\021\003\024\003\027\003\028\003\030\003!\003%\003*\0031\0032\0033\0035\0036\0039\003:\003;\003=\003?\003D\003F\003H\003M\003O\003T\003V\003Z\003\\\003^\003_\003`\003a\003c\003g\003n\003v\003y\003~\003\132\003\134\003\139\003\146\003\148\003\149\003\152\003\154\003\155\003\160\003\163\003\164\003\167\003\167\003\175\003\175\003\184\003\184\003\193\003\193\003\199\003\199\003\206\003\206\003\208\003\208\003\216\003\216\003\225\003\225\003\227\003\227\003\229\003\231\003\231\003\233\003\237\003\239\003\239\003\241\003\241\003\243\003\243\003\245\003\245\003\247\003\251\003\253\003\255\004\002\004\006\004\012\004\017\004\023\004\024\004\026\004\029\004\"\004%\004,\004/\0045\0047\004;\004<\004=\004B\004F\004K\004R\004Z\004d\004o\004p\004s\004t\004w\004x\004{\004|\004\127\004\132\004\135\004\136\004\139\004\140\004\143\004\144\004\147\004\148\004\151\004\152\004\156\004\157\004\159\004\163\004\165\004\167\004\169\004\173\004\178\004\179\004\181\004\182\004\184\004\187\004\188\004\189\004\190\004\191\004\198\004\202\004\207\004\212\004\215\004\217\004\218\004\222\004\225\004\228\004\229\004\236\004\244\004\245\004\245\004\246\004\246\004\247\004\248\004\250\004\252\004\254\004\255\005\001\005\002\005\004\005\005\005\007\005\b\005\n\005\r\005\017\005\018\005\020\005\023\005\027\005\030\005\"\005'\005-\0052\0058\005=\005C\005D\005E\005F\005J\005O\005S\005X\005\\\005a\005b\005c\005d\005e\005f\005g\005h\005i\005j\005k\005l\005m\005n\005o\005p\005q\005r\005s\005t\005u\005v\005w\005x\005x\005x\005y\005y\005z\005z\005|\005|\005~\005~\005\128\005\128\005\130\005\130\005\132\005\132\005\134\005\134\005\135\005\136\005\139\005\144\005\147\005\152\005\159\005\168\005\175\005\177\005\179\005\181\005\183\005\185\005\187\005\189\005\191\005\193\005\195\005\197\005\200\005\202\005\203\005\206\005\207\005\210\005\214\005\217\005\220\005\223\005\226\005\227\005\229\005\235\005\237\005\241\005\244\005\246\005\247\005\250\005\251\005\254\005\255\006\000\006\001\006\003\006\005\006\007\006\011\006\012\006\015\006\016\006\019\006\023\006 \006 \006!\006!\006\"\006#\006%\006'\006'\006(\006)\006,\006-\006.\0060\0061\0062\0063\0064\0066\0068\0069\006:\006<\006<\006>\006>\006C\006C\006E\006F\006H\006I\006K\006L\006N\006P\006S\006T\006V\006Y\006Z\006]\006^\006a\006b\006e\006f\006i\006j\006m\006n\006q\006t\006w\006z\006}\006\128\006\131\006\132\006\133\006\134\006\136\006\139\006\141\006\144\006\148\006\149\006\151\006\154\006\157\006\161\006\166\006\167\006\169\006\172\006\177\006\184\006\185\006\187\006\188\006\189\006\190\006\192\006\194\006\203\006\213\006\214\006\220\006\227\006\228\006\237\006\238\006\239\006\240\006\245\006\255\007\000\007\001\007\003\007\005\007\007\007\t\007\012\007\015\007\018\007\020\007\023\007\025\007\028\007 \007%\007*\007/\0074\007;\007@\007G\007L\007S\007X\007\\\007`\007f\007n\007t\007u\007v\007w\007x\007y\007{\007}\007\128\007\130\007\133\007\138\007\143\007\146\007\149\007\150\007\151\007\155\007\158\007\163\007\166\007\168\007\173\007\177\007\180\007\185\007\189\007\199\007\200\007\201\007\204\007\205\007\211\007\219\007\220\007\221\007\224\007\225\007\226\007\228\007\231\007\235\007\239\007\244\007\249\007\250\007\251\007\252\007\253\007\254\007\255\b\000\b\001\b\002\b\003\b\004\b\005\b\006\b\007\b\b\b\t\b\n\b\011\b\012\b\r\b\014\b\015\b\016\b\017\b\018\b\019\b\020\b\021\b\022\b\023\b\024\b\025\b\026\b\027\b\028\b\029\b\030\b\031\b \b!\b\"\b#\b$\b%\b&\b'\b(\b)\b*\b+\b,\b-\b.\b6\b8\b:\b?\b@\bC\bD\bE\bG\bH\bI\bJ\bL\bU\b_\b`\bf\bn\bo\bp\by\bz\b\127\b\128\b\129\b\134\b\136\b\138\b\141\b\144\b\147\b\150\b\153\b\156\b\159\b\161\b\163\b\164\b\165\b\166\b\168\b\172\b\174\b\174\b\176\b\177\b\179\b\179\b\180\b\183\b\185\b\186\b\186\b\187\b\188\b\189\b\191\b\193\b\195\b\197\b\198\b\199\b\201\b\205\b\208\b\209\b\210\b\211\b\216\b\221\b\227\b\233\b\240\b\247\b\247\b\248\b\249\b\251\b\253\b\254\t\000\t\002\t\b\t\r\t\017\t\021\t\026\t\031\t \t\"")) + ((16, "\001{\001w\000\207\000\205\000\203\000\201\000\199\000\197\000\195\000\193\000\191\000\189\000\187\000E\0003\000D\000B\001\141\001\227\001\004\0008\001}\001\b\001=\001U\0017\001\029\001\185\001\171\000=\001\221\000=\000j\000s\000,\000=\000\178\001\189\001\221\000\178\001\189\000j\000s\000,\000\178\001\189\001\019\000\220\001\169\0008\001}\000\014\000U\000U\000\220\001\219\000\177\000\134\001\219\001\217\0000\001\195\000\190\001=\001\207\001O\000\172\001\213\000p\000L\001=\001\017\000\172\001\213\000p\000L\000\254\001=\001\017\000\172\001\213\001\213\001\215\001\195\000\137\001\163\000\158\001=\001\213\000\227\0017\000\158\000\254\001=\001\213\000\227\0017\000\012\000+\0017\000`\001#\0017\000\228\001=\001\179\0017\000\156\001=\000g\0017\001u\0017\001\155\000\202\001\213\000\240\001\193\000\202\001\213\001_\001\209\001_\000Z\001\213\001_\001\207\001\025\000j\000\185\000,\000j\000\185\000\240\001\173\000,\000j\001\173\000,\000\158\001=\001\197\0017\000\012\001=\000\251\000l\000\240\001\173\0017\000`\001=\000\165\000l\000\240\000\175\0017\000\228\001=\001\179\0017\001u\0017\001\155\001\189\000\136\000{\0000\001\189\001\163\000P\001=\001\201\0011\000\208\001\197\001\215\000p\000L\001=\001\017\000\172\001\197\000p\000L\000\254\001=\001\017\000\172\001\197\000j\001\213\000,\001\205\000\136\000{\0000\001\205\000j\001\213\000\240\001\193\000,\000P\001=\001\203\001/\000\208\001\197\000\211\000C\000Z\001\193\000l\000\240\000C\000Z\001\193\000C\000Z\001\193\000\242\000\018\001\165\001=\000'\001\153\000l\000\202\001\197\0017\001C\001!\000\154\000\244\000 \000\194\000\136\0000\000j\000,\000\196\000\022\000\016\000j\000\238\000,\001\185\001\017\001\017\000\220\000j\000\238\000,\000j\000\238\000,\001\185\001\173\000\202\001\173\001\221\000w\000\"\001\221\000\140\001g\0002\000\252\000\159\001\227\001\173\001\215\000\241\001\157\001\169\000j\001\173\000,\000j\000X\001\165\001=\001\005\000,\000\136\000I\0000\000\136\000\252\000}\0000\000\136\000q\000\252\000}\0000\000~\000\231\000}\0000\000~\0000\000|\000\231\000}\0000\000|\000\231\000}\000\184\000\135\0000\000\024\000\214\000F\001\219\000z\001\219\000\177\0000\0006\000\252\001\183\000\202\001\181\001=\001\183\000\202\001\181\001=\001\163\000\130\001\219\001\217\0000\000\136\000y\0000\000\188\001\165\001=\000\131\001\143\000[\000p\000X\001\165\001=\001\t\001\015\000\172\000g\000p\000\200\001\165\001=\001\183\001\135\001=\000\172\000g\000p\000L\001\165\001=\001\011\000\172\000g\000p\000L\000\254\001\165\001=\001\011\000\172\000g\000\190\001\165\001=\001\145\000\225\000Z\001\151\000h\001\165\001=\000g\000\004\000\131\000\020\001\165\001=\000g\000\004\000\131\000\174\001\165\001=\000g\000\028\001\149\000\210\001\149\000\174\001\165\001=\000g\000\028\001\149\000\210\000\188\001\165\001=\000\131\000\174\001\165\001=\000g\000\028\000\188\001\165\001=\000\131\000\210\001\149\000\174\001\165\001=\000g\000\028\000\188\001\165\001=\000\131\000\210\000\188\001\165\001=\000\131\000\174\001\165\001=\000g\000\028\001\149\000\174\001\165\001=\000g\000\028\000\188\001\165\001=\000\131\000\006\001\165\001=\000g\000\226\000g\000\222\000\192\001\165\001=\000\185\000\202\000g\001\167\000g\000\226\000g\000\222\001\002\001\165\001=\000[\000\142\001\165\001=\000[\000[\000\137\000\153\001\181\000[\000\249\000[\001\149\000\168\001\149\001\149\000\168\000\188\001\165\001=\000\131\001\149\000\166\001\149\001\149\000\166\000\188\001\165\001=\000\131\001\149\000\164\001\149\001\149\000\164\000\188\001\165\001=\000\131\001\149\000\162\001\149\001\149\000\162\000\188\001\165\001=\000\131\001\149\000\160\001\149\001\149\000\160\000\188\001\165\001=\000\131\001\149\000D\001\149\001\149\000D\000\188\001\165\001=\000\131\001\149\000B\001\149\001\149\000B\000\188\001\165\001=\000\131\001\149\000@\001\149\001\149\000@\000\188\001\165\001=\000\131\001\149\000^\001\149\001\149\000^\000\188\001\165\001=\000\131\001\149\000\\\001\149\001\149\000\\\000\188\001\165\001=\000\131\001\149\000\"\001\149\001\149\000\"\000\188\001\165\001=\000\131\001\149\000F\001\149\001\149\000F\000\188\001\165\001=\000\131\001\149\000\202\001\149\001\149\000\202\000\188\001\165\001=\000\131\001\149\000v\001\149\001\149\000v\000\188\001\165\001=\000\131\001\149\000\184\001\149\001\149\000\184\000\188\001\165\001=\000\131\001\149\000H\001\149\001\149\000H\000\188\001\165\001=\000\131\001\149\000\250\001\149\001\149\000\250\000\188\001\165\001=\000\131\001\149\001\n\001\149\001\149\001\n\000\188\001\165\001=\000\131\001\149\001\012\001\149\001\149\001\012\000\188\001\165\001=\000\131\001\149\000\236\001\149\001\149\000\236\000\188\001\165\001=\000\131\000K\001\149\000K\000\188\001\165\001=\000\131\001\229\001\149\001\229\000\188\001\165\001=\000\131\001Q\000\172\000g\000n\001I\000\172\000g\001\149\000\238\001\149\001\149\000\238\000\188\001\165\001=\000\131\000l\000t\001\149\000l\000t\000\188\001\165\001=\000\131\000[\000\220\001c\000t\001\149\000[\000\220\001c\000t\000\188\001\165\001=\000\131\000[\000\220\000j\000g\000,\000t\001\149\000[\000\220\000j\000g\000,\000t\000\188\001\165\001=\000\131\000[\000\220\000\140\000g\0002\000t\001\149\000[\000\220\000\140\000g\0002\000t\000\188\001\165\001=\000\131\000[\000\220\000\136\000g\0000\000t\001\149\000[\000\220\000\136\000g\0000\000t\000\188\001\165\001=\000\131\000[\000\216\000j\000o\000,\000t\001\149\000[\000\216\000j\000o\000,\000t\000\188\001\165\001=\000\131\000[\000\220\001\017\000\216\000j\000o\000,\000t\001\149\000[\000\220\001\017\000\216\000j\000o\000,\000t\000\188\001\165\001=\000\131\000[\000\216\000\140\000o\0002\000t\001\149\000[\000\216\000\140\000o\0002\000t\000\188\001\165\001=\000\131\000[\000\220\001\017\000\216\000\140\000o\0002\000t\001\149\000[\000\220\001\017\000\216\000\140\000o\0002\000t\000\188\001\165\001=\000\131\000[\000\216\000\136\000o\0000\000t\001\149\000[\000\216\000\136\000o\0000\000t\000\188\001\165\001=\000\131\000[\000\220\001\017\000\216\000\136\000o\0000\000t\001\149\000[\000\220\001\017\000\216\000\136\000o\0000\000t\000\188\001\165\001=\000\131\001\149\001\215\000j\000\018\000\247\000,\001_\000\141\001\149\001\149\000*\001\149\000*\000g\001\149\000*\000F\001\219\000g\000C\000\211\000C\000Z\001\141\000l\000\240\000C\000Z\001\141\000C\000Z\001\141\000l\000\240\001\221\000\"\000u\000Z\001\141\000l\000\240\001\221\000\"\000u\000j\000,\000j\001\t\000\240\001\005\000,\000\139\000N\001\177\000\240\001\177\000Z\001\221\000\240\000\133\000\220\001\177\000Z\001\221\000\240\001\221\000\240\000\133\000\220\001\221\000\252\001\183\001\135\001=\001\183\001\135\001=\000\018\001\165\001=\0009\000l\000\236\000\243\000\145\0017\000\018\001\165\001=\000R\0009\000l\000\236\000\243\000\145\0017\000\018\001\165\001=\0009\000l\000?\000\145\0017\000\018\001\165\001=\000R\0009\000l\000?\000\145\0017\000\016\000l\000O\000\206\000*\000\218\000c\000\206\000x\001\219\000\177\0000\0004\001q\000\147\000$\001q\000\147\000\184\000\143\001o\000\184\000\148\000\152\000\148\000\220\001\017\000\148\000\220\000-\000\146\000\150\000\146\000\220\001\017\000\146\000\220\000-\000l\000:\000l\000l\000\202\000[\000:\000l\000\202\000[\000\253\000l\000\240\000\173\001=\000\253\000l\000\240\000\173\001=\000*\001=\001k\001i\001i\001g\000l\000l\000\240\001\173\001\025\000[\000\144\000[\000\026\000l\000\026\000j\000l\000A\000,\000:\000l\000J\000[\000:\000j\001e\000\215\000,\000:\000l\000J\000j\001M\000\215\000,\000J\000\179\000\026\000j\001e\000,\000\026\000l\000\144\000Y\000Y\001]\000\232\000\185\001]\000\232\000\144\000Y\001]\000\232\000\026\000l\001]\000\232\000\026\000j\000l\000\240\001\173\000,\000\185\000\232\000\185\000\185\000\232\000\144\000Y\000\185\000\232\000\026\000l\000\185\000\232\000\026\000j\000l\000\240\001\173\000,\000\144\000Y\000\232\000\185\000\144\000Y\000\232\000\144\000Y\000\144\000Y\000\232\000\026\000l\000\144\000Y\000\232\000\026\000j\000l\000\240\001\173\000,\000\026\000l\000\232\000\185\000\026\000l\000\232\000\144\000Y\000\026\000l\000\232\000\026\000l\000\026\000l\000\232\000\026\000j\000l\000\240\001\173\000,\000\026\000j\000l\000\240\001\173\000,\000\232\000\185\000\026\000j\000l\000\240\001\173\000,\000\232\000\144\000Y\000\026\000j\000l\000\240\001\173\000,\000\232\000\026\000l\000\026\000j\000l\000\240\001\173\000,\000\232\000\026\000j\000l\000\240\001\173\000,\001[\000\232\000\181\001[\000\232\000\144\000Y\001[\000\232\000\026\000l\001[\000\232\000\026\000j\000l\000\240\001\173\000,\000\181\000\232\000\181\000\181\000\232\000\144\000Y\000\181\000\232\000\026\000l\000\181\000\232\000\026\000j\000l\000\240\001\173\000,\000\144\000Y\000\232\000\181\000\144\000Y\000\232\000\144\000Y\000\144\000Y\000\232\000\026\000l\000\144\000Y\000\232\000\026\000j\000l\000\240\001\173\000,\000\026\000l\000\232\000\181\000\026\000l\000\232\000\144\000Y\000\026\000l\000\232\000\026\000l\000\026\000l\000\232\000\026\000j\000l\000\240\001\173\000,\000\026\000j\000l\000\240\001\173\000,\000\232\000\181\000\026\000j\000l\000\240\001\173\000,\000\232\000\144\000Y\000\026\000j\000l\000\240\001\173\000,\000\232\000\026\000l\000\026\000j\000l\000\240\001\173\000,\000\232\000\026\000j\000l\000\240\001\173\000,\000\151\000\149\001S\000/\000/\000Q\000/\000A\000\202\000g\000/\000\240\000\133\000\220\001\173\000\202\000g\000/\000\240\000\018\000\247\000\220\001\173\000\202\000g\000\181\000\202\000g\000W\000\240\001\173\000\202\000g\000p\001\165\001=\000\163\001U\0017\001Q\001\225\000p\001=\000\163\001U\0017\000p\000F\001\219\001=\000\163\001U\0017\001O\001\225\000\185\000\185\000\240\001\173\000/\000Q\000/\000Y\000\240\001\173\000\202\000g\000\181\000\202\000g\001K\001I\001\006\001K\001\b\001=\000'\001\153\000l\001\209\0017\001G\001\b\001=\000'\001\153\000l\000\240\001\193\0017\001E\001\b\001=\000'\001\153\000l\000\202\001\197\0017\001C\001\b\001=\001\t\001\015\0017\001A\001\b\001=\001\t\000\240\001\005\0017\001?\001\215\001=\001\b\001=\0009\000l\000?\000\145\0017\001;\001\b\001=\0009\000l\000\236\000\243\000\145\0017\0019\000\171\0017\000(\0015\000a\0015\000(\0013\000(\000g\0017\0013\000M\0013\001\199\0011\001\211\001/\000M\001-\000(\001+\000(\000g\0017\001+\000M\001+\000G\001+\001c\000\223\000\217\001c\000\223\000\217\000*\001c\000\223\000\217\000*\000\014\000\229\001c\000\223\000\217\000*\001)\000\185\000Z\000g\000\185\000\b\000g\000Z\000g\000\185\000Z\000\220\000l\000\240\000\173\001=\000*\001=\001%\001\221\000*\001%\000l\000\240\000\173\001=\000*\001=\001\221\000*\000l\000\240\000\173\001=\001\221\000\218\001=\000#\000l\000\240\000\175\001=\000\167\000l\000Q\000\254\001=\000\167\000l\000Q\001=\000\167\000l\000\240\000\175\000\202\000g\000\254\001=\000\167\000l\000\240\000\175\000\202\000g\001=\000\167\000l\000\240\000\018\000\247\000\220\001\173\000\202\000g\000\254\001=\000\167\000l\000\240\000\018\000\247\000\220\001\173\000\202\000g\000l\001\019\000\220\000l\000\016\001\019\000\220\000\016\001}\000j\000\238\000,\0001\001\019\000\220\001}\001\019\000\220\000j\000\238\000,\001\019\000\220\0001\001}\001\019\000\220\001}\000l\001\017\000\220\000l\000\016\001\017\000\220\000\016\000/\001\017\000\220\000/\001\031\001\019\000j\001\019\000,\001\023\000\202\001\011\000\240\001\005\000\202\001\011\001\139\001\015\000\240\001\005\001\139\001\r\000\030\001=\000O\000\208\000\186\001=\001\137\000Z\001\011\000\209\001\011\001\215\001\017\001\011\000\209\001\011\000j\000,\001\163\000\014\000\016\000\014\000X\001\165\001=\000\016\000\236\001\019\0017\000&\001=\000c\000\208\000\186\001=\001\137\000Z\001\005\001\137\000Z\001\005\000X\000\018\000N\001=\001\011\000j\001\005\000,\001\005\001\215\000\255\001\005\000Z\001\005\001\005\000\004\000\127\001\163\000X\000\018\001\165\001=\001}\000\219\0017\000X\000\018\001\165\001=\001}\000\236\001\005\0017\001\027\000V\000V\000\n\000V\000\n\000\n\000V\001\000\001}\000l\000l\000\247\000 \000 \000\245\001\173\000<\001\173\001\175\000<\001\175\001\173\000\202\001\175\001\173\000\202\000<\001\175\000\218\000<\000\218\001\173\000\202\000\218\001\173\000\202\000<\000\218\000\140\001g\0002\000<\000\140\001g\0002\001\173\000\202\000\140\001g\0002\001\173\000\202\000<\000\140\001g\0002\000v\001%\000\184\000v\000\184\000L\001\165\001=\001\011\0017\000L\000\254\001\165\001=\001\011\0017\000L\001\165\001=\001\019\0017\000L\000\254\001\165\001=\001\019\0017\000>\000n\001\006\000\216\000j\001y\000,\000\216\000j\001y\000,\000t\000\216\000\136\001y\0000\000\216\000\136\001y\0000\000t\000\216\000\140\001y\0002\000\216\000\140\001y\0002\000t\000\176\000\254\000\168\000\166\000\164\000\162\000\160\000D\000B\000@\000^\000\\\000\"\000F\000\202\000v\000\184\000H\000\250\001\n\001\012\000\236\001\n\000\252\000*\001\004\000l\000\240\001\221\000\240\001\173\000\202\001\149\000\202\000\188\001\165\001=\000\131\000\202\001\005\000\202\000\185\000\202\000g\000A\000J\000:\000l\000\240\000j\001\011\000\240\001\005\000,\000j\001\011\000,\000j\000\012\001=\001\149\000,\000j\000\012\001=\000\188\001\165\001=\000\131\000,\000j\000\012\001=\001\149\000\240\001\005\000,\000j\000\012\001=\000\188\001\165\001=\000\131\000\240\001\005\000,\000j\000\012\001=\001\149\000\240\001\005\000\234\001\005\000,\000j\000\012\001=\000\188\001\165\001=\000\131\000\240\001\005\000\234\001\005\000,\000j\000\012\001=\001\149\000\234\001\005\000,\000j\000\012\001=\000\188\001\165\001=\000\131\000\234\001\005\000,\001\223\000\206\001\181\000\206\001\173\000\206\000g\000\206\001\019\000\206\001\017\000\206\001\011\000\206\001\005\000\206\000\255\000\206\000\185\000\206\000-\000\206\000\185\000\238\000\185\000\185\001\215\000\183\000\185\001\004\000/\001Y\000\185\000\252\000\185\000\200\001\165\001=\000\185\000\212\000\183\000\232\000Y\000Y\001\181\000\185\001\181\000j\000\018\000\247\000,\000Y\000\249\000\185\000\142\001\165\001=\000Y\000\181\000\238\000\185\000\181\001\215\000\183\000\181\001\004\000/\001W\000\181\000\252\000\185\000l\000\014\000O\000\240\000c\000\240\001\173\000:\000\185\000:\000\185\000\b\000g\001\173\000\133\000\220\001\173\001\227\000\133\000\220\001\227\000\132\001\219\001\217\0000\000\198\001\165\001=\000/\000\240\000\175\000\202\000\245\0017\000<\000<\000\n\000<\000\n\000\n\000<\000.\000i\000[\000\004\000i\001\131\001\133\000\159\001\133\001\131\001\159\001\133\001\161\000\157\001\133\000\157\001\161\001\131\001\133\000\155\001\133\000\153\000\232\001\149\000\153\000\232\000\188\001\165\001=\000\131\000\153\000\232\000\144\000[\000\153\000\232\000\026\000l\000\153\000\232\000\026\000j\000l\000A\000,\001\149\000\232\001\149\001\149\000\232\000\188\001\165\001=\000\131\001\149\000\232\000\144\000[\001\149\000\232\000\026\000l\001\149\000\232\000\026\000j\000l\000A\000,\000\188\001\165\001=\000\131\000\232\001\149\000\188\001\165\001=\000\131\000\232\000\188\001\165\001=\000\131\000\188\001\165\001=\000\131\000\232\000\144\000[\000\188\001\165\001=\000\131\000\232\000\026\000l\000\188\001\165\001=\000\131\000\232\000\026\000j\000l\000A\000,\000\144\000[\000\232\001\149\000\144\000[\000\232\000\188\001\165\001=\000\131\000\144\000[\000\232\000\144\000[\000\144\000[\000\232\000\026\000l\000\144\000[\000\232\000\026\000j\000l\000A\000,\000\026\000l\000\232\001\149\000\026\000l\000\232\000\188\001\165\001=\000\131\000\026\000l\000\232\000\144\000[\000\026\000l\000\232\000\026\000l\000\026\000l\000\232\000\026\000j\000l\000A\000,\000\026\000j\000l\000A\000,\000\232\001\149\000\026\000j\000l\000A\000,\000\232\000\188\001\165\001=\000\131\000\026\000j\000l\000A\000,\000\232\000\144\000[\000\026\000j\000l\000A\000,\000\232\000\026\000l\000\026\000j\000l\000A\000,\000\232\000\026\000j\000l\000A\000,\001]\001]\000\232\000\218\000\185\000\232\000\218\000\144\000Y\000\232\000\218\000\026\000l\000\232\000\218\000\026\000j\000l\000\240\001\173\000,\000\232\000\218\001[\001[\000\232\000\218\000\181\000\232\000\218\000\144\000Y\000\232\000\218\000\026\000l\000\232\000\218\000\026\000j\000l\000\240\001\173\000,\000\232\000\218\000\147\001m\000\145\000\228\001\173\000\202\001\173\000\143\000[\001\147\000\141\001\147\001\139\000\139\001\139\001a\000\137\001a\000\249\000\135\000\249\0008\001}\000\133\0008\001}\001'\000\252\001'\000\131\000\252\001'\001\227\000\129\001\n\001\227\000!\000\127\001\b\000!\000q\000}\000\252\000q\001\173\000{\000\232\001\173\000;\000y\000\232\000;\001\221\000w\000\"\001\221\001\221\000l\000\240\001\221\000u\000\"\001\221\000u\000\"\000l\000\240\001\221\000s\000\232\001\173\001\173\000\232\001\173\000I\001\173\001\149\001\149\000*\000\188\001\165\001=\000\131\000\188\001\165\001=\000\131\000*\001\149\000*\000o\000\188\001\165\001=\000\131\000*\000o\000l\000\221\000l\000\221\000*\000l\000\221\000*\000m\000\185\000\185\000*\000\185\000*\000k\001c\000\213\000\221\001c\000\213\000\221\000*\001c\000\213\000\221\000*\000i\001\143\000\188\001\165\001=\000\131\000\200\001\165\001=\001\183\001\135\001=\0017\0015\001u\0017\001\155\000)\000\169\001\127\001;\001\129\0019\000\018\001\165\001=\0009\000=\000@\000\167\000\155\0017\000\018\001\165\001=\000R\0009\000=\000@\000\167\000\155\0017\000e\000X\001\165\001=\001\t\001\r\0017\000X\001\165\001=\001\t\000\202\001\017\0017\001\007\000X\001\165\001=\000.\001\t\000\240\001\005\0017\001?\001\003\001\001\000\237\000\170\001\165\001=\001\005\0017\000\242\001\165\001=\000'\001\153\000l\000\240\001\193\0017\001E\001\191\001\187\000^\000\154\000^\000\194\000D\000\154\000D\000\194\000\140\001)\0002\000\136\000k\0000\000\128\000k\000\248\000\128\000\248\000j\000g\000,\000j\000g\000A\000,\000[\000\220\000j\000g\000,\000[\000\220\000\140\000g\0002\000[\000\220\000\136\000g\0000\000[\000\216\000j\000o\000,\000[\000\220\001\017\000\216\000j\000o\000,\000[\000\216\000\140\000o\0002\000[\000\220\001\017\000\216\000\140\000o\0002\000[\000\216\000\136\000o\0000\000[\000\220\001\017\000\216\000\136\000o\0000\000b\000[\000d\000g\000f\000\246\001\165\001=\000g\000\208\000\246\001\165\001=\000\208\000T\001\165\001=\001\205\000j\000X\001\165\001=\001\011\000,\000j\000X\001\165\001=\001\011\000\240\001\005\000,\000P\001\165\001=\001\203\001/\000\208\001s\000-\001\187\001\181\000\249\000>\000[\000\254\000[\000\138\000m\000\182\000\138\000\182\000[\000\220\001c\001\017\000\220\000j\000g\000,\001\017\000\220\000\138\000m\000\182\000[\000\178\000l\000[\000\176\000[\001\163\000\014\001\017\000\220\000j\000,\000\140\000\161\0002\001\017\000\220\000\140\000\161\0002\000\128\000o\000\248\000\128\000\248\001\017\000\220\000\128\000o\000\248\001\017\000\220\000\128\000\248\000\136\000o\0000\001\017\000\220\000\136\000o\0000\001\017\000\220\000\136\0000\001\017\000\220\000j\000X\001\165\001=\001\011\000\240\001\005\000,\000/\000W\000j\000\185\000,\000]\000j\000X\001\165\001=\001\t\000,\000j\000X\001\165\001=\001\t\000\240\001\005\000,\000\014\000_\000_\000\218\000_\001\181\000\249\000\178\000=\001\017\000\220\000]\001\017\000\220\000\136\0000\001\017\000\220\000j\000,\001\017\000\220\000j\000\185\000,\000j\000\185\000\240\001\173\000,\001\163\000l\000\016\001\b\001\004\001\002\000\246\000\242\000\228\000\226\000\222\000\214\000\212\000\210\000\208\000\200\000\198\000\196\000\192\000\190\000\188\000\186\000\174\000\172\000\170\000\158\000\156\000\142\000p\000h\000`\000X\000V\000T\000R\000P\000N\000L\000H\000<\000.\000&\000\030\000\028\000\024\000\022\000\020\000\018\000\012\000\n\000\b\000\006\000\004\000e\000\200\001\165\001=\001\183\000\202\001\181\001=\0017\000\202\000g\001\145\000\213\000\202\001\151\0013\000g\0017\0013\001Q\001u\0017\001\155\000\169\000)\001\127\001;\000\018\001\165\001=\0009\000=\000@\000\167\000\157\0017\000\018\001\165\001=\000R\0009\000=\000@\000\167\000\157\0017\000S\000X\001\165\001=\001\t\001\015\0017\000X\001\165\001=\000.\001\t\001\015\0017\001A\001\003\000\239\000\242\001\165\001=\000'\001\153\000l\001\209\0017\001G\001\191\000\170\001\165\001=\001\011\0017\000^\000\\\000\249\000N\000\233\000\129\001=\000\249\001=\000\178\001}\000\178\001}\000 \000\178\001}\000\154\000\178\001}\000-\000\178\001}\001\017\000\178\001}\000\196\000\178\001}\000\022\000g\0017\000(\001-\000(\000G\000(\000\206\001\221\001\221\000\"\000u\000\240\001\173\000\240\001\173\000\234\001\173\000\234\001\173\000\202\000\243\001!\0005\0007\000;\000j\000y\000,\0008\001}\000\014\000D\000^\000\254\000D\000\254\000\254\000D\000^\000\254\000\254\000^\000\164\000>\001+\000\206\000g\0017\001+\000\206\000j\000\235\000,\000l\0001\001\021\001=\000%\000l\000\240\001\173\001=\000\253\000l\000\202\000g\000\254\001=\000\253\000l\000\202\000g\001=\000\253\000l\000A\000\202\000g\000\254\001=\000\253\000l\000A\000\202\000g\000\012\001\165\001=\000/\000\240\000\175\0017\000\n\000\n\000V\000\n\000\n\000V\000\n\000<\000\n\000\n\000<\000\018\0009\001c\000\031\001\227\000\145\000\018\0009\001c\000\236\001\227\000X\001\017\000\202\001\019\000X\001\017\000\236\001\019\000X\000\018\000\255\000\202\001\005\000X\000\018\000\255\000\236\001\005\000\202\000\202\000<"), (16, "\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\b\000\t\000\n\000\011\000\012\000\r\000\014\000\015\000\016\000\017\000\018\000\022\000\026\000\027\000\028\000\029\000\030\000 \000$\000&\000)\000.\0001\0003\0004\0005\0008\0009\000=\000>\000A\000D\000J\000Q\000S\000U\000V\000[\000a\000d\000g\000k\000o\000q\000r\000t\000x\000z\000}\000\127\000\128\000\131\000\136\000\136\000\139\000\139\000\143\000\150\000\157\000\161\000\163\000\164\000\165\000\169\000\170\000\175\000\177\000\183\000\190\000\193\000\194\000\198\000\203\000\208\000\209\000\213\000\218\000\221\000\232\000\233\000\234\000\235\000\236\000\237\000\239\000\241\000\242\000\243\000\244\000\247\000\248\000\249\000\254\001\001\001\002\001\005\001\006\001\t\001\012\001\r\001\014\001\015\001\017\001\018\001\019\001\020\001\023\001\029\001 \001$\001)\001-\001/\0013\0019\001:\001;\001;\001=\001A\001B\001G\001K\001L\001P\001P\001S\001W\001X\001Y\001a\001j\001q\001y\001\128\001\134\001\140\001\148\001\159\001\170\001\184\001\190\001\199\001\206\001\217\001\221\001\225\001\227\001\228\001\230\001\232\001\235\001\241\001\244\001\250\001\253\002\003\002\006\002\012\002\015\002\021\002\024\002\030\002!\002'\002*\0020\0023\0029\002<\002B\002E\002K\002N\002T\002W\002]\002`\002f\002i\002o\002r\002x\002{\002\129\002\132\002\138\002\141\002\147\002\150\002\156\002\158\002\163\002\165\002\170\002\173\002\177\002\180\002\186\002\189\002\195\002\200\002\208\002\215\002\225\002\232\002\242\002\249\003\003\003\n\003\020\003\029\003)\0030\003:\003C\003O\003V\003`\003i\003u\003w\003{\003|\003}\003~\003\128\003\131\003\136\003\137\003\141\003\146\003\149\003\156\003\161\003\163\003\168\003\169\003\169\003\171\003\175\003\181\003\183\003\187\003\191\003\194\003\203\003\213\003\221\003\230\003\231\003\232\003\234\003\234\003\236\003\238\003\242\003\243\003\246\003\252\003\253\003\254\004\001\004\004\004\005\004\006\004\t\004\012\004\r\004\015\004\018\004\022\004\027\004\"\004#\004$\004&\004'\004*\004+\004,\004.\0040\0045\0047\0049\004>\004@\004E\004G\004K\004M\004O\004P\004S\004W\004[\004c\004f\004j\004n\004v\004z\004\127\004\132\004\141\004\145\004\150\004\155\004\164\004\172\004\181\004\190\004\203\004\206\004\210\004\214\004\222\004\225\004\229\004\233\004\241\004\245\004\250\004\255\005\b\005\012\005\017\005\022\005\031\005'\0050\0059\005F\005G\005H\005I\005J\005L\005P\005W\005_\005b\005g\005m\005o\005t\005{\005}\005~\005\129\005\131\005\132\005\137\005\140\005\141\005\144\005\144\005\152\005\152\005\161\005\161\005\170\005\170\005\176\005\176\005\183\005\183\005\185\005\185\005\193\005\193\005\202\005\202\005\204\005\204\005\206\005\208\005\208\005\210\005\214\005\216\005\216\005\218\005\218\005\220\005\220\005\222\005\222\005\224\005\228\005\230\005\232\005\235\005\239\005\245\005\250\005\253\006\002\006\005\006\012\006\015\006\021\006\023\006\027\006\028\006\029\006\"\006&\006+\0062\006:\006D\006O\006P\006S\006T\006W\006X\006[\006\\\006_\006d\006g\006h\006k\006l\006o\006p\006s\006t\006w\006x\006|\006}\006\127\006\131\006\133\006\135\006\137\006\141\006\146\006\147\006\149\006\150\006\152\006\155\006\156\006\157\006\158\006\159\006\166\006\170\006\175\006\178\006\183\006\186\006\188\006\189\006\192\006\195\006\196\006\203\006\211\006\212\006\212\006\213\006\213\006\214\006\215\006\217\006\219\006\221\006\222\006\224\006\225\006\227\006\228\006\230\006\231\006\233\006\236\006\240\006\241\006\243\006\246\006\250\006\253\007\001\007\006\007\012\007\015\007\017\007\022\007\028\007!\007'\007(\007)\007*\007.\0073\0077\007<\007@\007E\007F\007G\007H\007I\007J\007K\007L\007M\007N\007O\007P\007Q\007R\007S\007T\007U\007V\007W\007X\007Y\007Z\007[\007\\\007\\\007\\\007]\007]\007^\007^\007`\007`\007b\007b\007d\007d\007f\007k\007k\007m\007m\007o\007o\007q\007q\007r\007s\007v\007{\007~\007\131\007\139\007\146\007\156\007\165\007\177\007\184\007\194\007\196\007\198\007\200\007\202\007\204\007\206\007\208\007\210\007\212\007\214\007\216\007\219\007\221\007\222\007\225\007\226\007\229\007\233\007\237\007\238\007\240\007\246\007\248\007\252\007\255\b\001\b\002\b\005\b\006\b\t\b\n\b\011\b\012\b\014\b\016\b\018\b\022\b\023\b\026\b\027\b\030\b\"\b+\b+\b,\b,\b-\b.\b0\b2\b2\b3\b4\b7\b8\b9\b;\b<\b=\b>\b?\bA\bC\bD\bE\bG\bJ\bP\bT\bX\b_\bb\bh\bl\bp\bw\b}\b\134\b\141\b\148\b\158\b\162\b\169\b\174\b\179\b\187\b\191\b\198\b\203\b\208\b\216\b\223\b\233\b\241\b\249\t\004\t\005\t\b\t\011\t\015\t\019\t\027\t\028\t\031\t\"\t&\t*\t2\t2\t4\t4\t9\t9\t;\t<\t>\t?\tA\tB\tD\tE\tG\tI\tL\tM\tO\tR\tS\tV\tW\tZ\t[\t^\t_\tb\tc\tf\tg\tj\tk\tn\tq\tv\ty\t|\t}\t~\t\127\t\129\t\133\t\138\t\141\t\147\t\149\t\152\t\156\t\157\t\159\t\162\t\165\t\169\t\174\t\175\t\179\t\186\t\187\t\189\t\190\t\191\t\192\t\194\t\196\t\205\t\215\t\216\t\222\t\229\t\230\t\239\t\240\t\241\t\242\t\247\n\001\n\002\n\003\n\005\n\007\n\t\n\011\n\014\n\017\n\020\n\022\n\025\n\029\n\"\n'\n,\n1\n8\n=\nD\nI\nP\nR\nU\nZ\n^\nb\nh\np\nv\nw\nx\ny\nz\n{\n}\n\127\n\130\n\132\n\135\n\140\n\145\n\148\n\151\n\152\n\153\n\157\n\160\n\165\n\168\n\170\n\175\n\179\n\182\n\187\n\191\n\201\n\202\n\203\n\206\n\207\n\213\n\221\n\222\n\223\n\226\n\227\n\228\n\230\n\233\n\237\n\241\n\246\n\251\n\252\n\253\n\254\n\255\011\000\011\001\011\002\011\003\011\004\011\005\011\006\011\007\011\b\011\t\011\n\011\011\011\012\011\r\011\014\011\015\011\016\011\017\011\018\011\019\011\020\011\021\011\022\011\023\011\024\011\025\011\026\011\027\011\028\011\029\011\030\011\031\011 \011!\011\"\011#\011$\011%\011&\011'\011(\011)\011*\011+\011,\011-\011.\011/\0110\0111\0119\011;\011?\011@\011C\011D\011F\011G\011H\011I\011K\011T\011^\011_\011e\011m\011n\011o\011x\011y\011~\011\127\011\128\011\133\011\135\011\137\011\140\011\143\011\146\011\149\011\152\011\155\011\158\011\160\011\162\011\163\011\164\011\167\011\169\011\173\011\175\011\175\011\177\011\178\011\180\011\180\011\181\011\184\011\186\011\187\011\187\011\188\011\189\011\190\011\192\011\194\011\196\011\198\011\199\011\200\011\202\011\206\011\209\011\210\011\211\011\212\011\217\011\222\011\228\011\234\011\241\011\248\011\248\011\249\011\250\011\252\011\254\011\255\012\001\012\003\012\t\012\014\012\018\012\022\012\027\012 \012!\012#")) and lr0_core = - (16, "\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\b\000\t\000\n\000\011\000\012\000\r\000\014\000\015\000\016\000\017\000\018\000\019\000\020\000\021\000\022\000\023\000\024\000\025\000\026\000\027\000\028\000\029\000\030\000\031\000 \000!\000\"\000#\000$\000%\000&\000'\000(\000)\000*\000+\000,\000-\000.\000/\0000\0001\0002\0003\0004\0005\0006\0007\0008\0009\000:\000;\000<\000=\000>\000?\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\000\128\000\129\000\130\000\131\000\132\000\133\000\134\000\135\000\136\000\137\000\138\000\139\000\140\000\141\000\142\000\143\000\144\000\145\000\146\000\147\000\148\000\149\000\150\000\151\000\152\000\153\000\154\000\155\000\156\000\157\000\158\000\159\000\160\000\161\000\162\000\163\000\164\000\165\000\166\000\167\000\168\000\169\000\170\000\171\000\172\000\173\000\174\000\175\000\176\000\177\000\178\000\179\000\180\000\181\000\182\000\183\000\184\000\185\000\186\000\187\000\188\000\189\000\190\000\191\000\192\000\193\000\194\000\195\000\196\000\197\000\198\000\199\000\200\000\201\000\202\000\203\000\204\000\205\000\206\000\207\000\208\000\209\000\210\000\211\000\212\000\213\000\214\000\215\000\216\000\217\000\218\000\219\000\220\000\221\000\222\000\223\000\224\000\225\000\226\000\227\000\228\000\229\000\230\000\231\000\232\000\233\000\234\000\235\000\236\000\237\000\238\000\239\000\240\000\241\000\242\000\243\000\244\000\245\000\246\000\247\000\248\000\249\000\250\000\251\000\252\000\253\000\254\000\255\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\b\001\t\001\n\001\011\001\012\001\r\001\014\001\015\001\016\001\017\001\018\001\019\001\020\001\021\001\022\001\023\001\024\001\025\001\026\001\027\001\028\001\029\001\030\001\031\001 \001!\001\"\001#\001$\001%\001&\001'\001(\001)\001*\001+\001,\001-\001.\001/\0010\0011\0012\0013\0014\0015\0016\0017\0018\0019\001:\001;\001<\001=\001>\001?\001@\001A\001B\001C\001D\001E\001F\001G\001H\001I\001J\001K\001L\001M\001N\001O\001P\001Q\001R\001S\001T\001U\001V\001W\001X\001Y\001Z\001[\001\\\001]\001^\001_\001`\001a\001b\001c\001d\001e\001f\001g\001h\001i\001j\001k\001l\001m\001n\001o\001p\001q\001r\001s\001t\001u\001v\001y\001z\001\127\001\128\001\129\001\130\001\131\001\132\001\133\001\134\001\135\001\136\001\137\001\138\001\139\001\140\001\141\001\142\001\143\001\144\001\145\001w\001x\001\146\001\147\001\148\001{\001|\001}\001~\001\149\001\150\001\151\001\152\001\153\001\154\001\155\001\156\001\157\001\158\001\159\001\160\001\161\001\162\001\163\001\164\001\165\001\166\001\167\001\168\001\169\001\170\001\171\001\172\001\173\001\174\001\175\001\176\001\177\001\178\001\179\001\180\001\181\001\182\001\183\001\184\001\185\001\186\001\187\001\188\001\189\001\190\001\191\001\192\001\193\001\194\001\195\001\196\001\197\001\198\001\199\001\200\001\201\001\202\001\203\001\204\001\205\001\206\001\207\001\208\001\209\001\210\001\211\001\212\001\213\001\214\001\215\001\216\001\217\001\218\001\219\001\220\001\221\001\222\001\223\001\224\001\225\001\226\001\227\001\228\001\229\001\230\001\231\001\232\001\233\001\234\001\235\001\236\001\237\001\238\001\239\001\240\001\241\001\242\001\243\001\244\001\245\001\246\001\247\001\248\001\251\001\252\001\253\001\254\001\255\002\000\002\001\002\002\002\003\002\004\001\249\001\250\002\005\002\006\002\007\002\b\002\t\002\n\002\011\002\012\002\r\002\014\002\015\002\016\002\017\002\018\002\019\002\020\002\021\002\022\002\023\002\024\002\025\002\026\002\027\002\028\002\029\002\030\002\031\002 \002!\002\"\002#\002$\002%\002&\002'\002(\002)\002*\002+\002,\002-\002.\002/\0020\0021\0022\0023\0024\0025\0026\0027\0028\0029\002:\002;\002<\002=\002>\002?\002@\002A\002B\002C\002D\002E\002F\002G\002H\002I\002J\002K\002L\002M\002N\002O\002P\002Q\002R\002S\002T\002U\002V\002W\002X\002Y\002Z\002y\002z\002{\002|\002}\002~\002\127\002\128\002\129\002\130\002\131\002\132\002\133\002\134\002\135\002\136\002\137\002\138\002\139\002\140\002\141\002a\002b\002c\002d\002[\002\\\002_\002`\002g\002h\002i\002j\002k\002l\002m\002n\002o\002p\002q\002r\002s\002t\002u\002v\002w\002x\002]\002^\002e\002f\005\220\005\221\002\143\002\144\002\145\002\146\002\147\002\148\002\149\002\150\002\151\002\152\002\153\002\154\002\155\002\156\002\157\002\158\002\159\002\160\002\161\002\162\002\163\002\164\002\165\002\166\002\167\002\168\002\169\002\170\002\171\002\172\002\173\002\174\002\175\002\176\002\177\002\178\002\179\002\180\002\181\002\198\002\199\002\224\002\225\002\226\002\227\002\228\002\229\002\230\002\231\002\232\002\233\002\182\002\183\002\188\002\189\002\200\002\201\002\184\002\185\002\186\002\187\002\190\002\191\002\192\002\193\002\194\002\195\002\196\002\197\002\202\002\203\002\204\002\205\002\216\002\217\002\206\002\207\002\208\002\209\002\210\002\211\002\218\002\219\002\220\002\221\002\222\002\223\002\212\002\213\002\214\002\215\002\234\002\235\002\236\002\237\002\238\002\239\002\240\002\241\002\242\002\243\002\244\002\245\002\246\002\247\002\248\002\249\002\250\002\251\002\252\002\253\002\254\002\255\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\b\003\t\003\n\003\011\003\012\003\r\003\014\003\015\003\016\003\017\003\018\003\019\003\020\003\021\003\022\003\023\003\024\003\025\003\026\003\027\003\028\003\029\003\030\003\031\003 \003!\003\"\003#\003$\003%\003&\003'\003(\003)\003*\003+\003,\003-\003.\003/\0030\0031\0032\0033\0034\0035\0036\0037\0038\0039\003:\003;\003<\003=\003>\003?\003@\003A\003B\003C\003D\003E\003F\003G\003H\003I\003J\003K\003L\003M\003N\003O\003P\003Q\003R\003S\003T\003U\003V\003W\003X\003Y\003Z\003[\003\\\003]\003^\003_\003`\003a\003b\003c\003d\003e\003f\003g\003h\003i\003j\003k\003l\003m\003n\003o\003p\003q\003r\003s\003t\003u\003v\003w\003x\003y\003z\003{\003|\003}\003~\003\127\003\128\003\129\003\130\003\131\003\132\003\133\003\134\003\135\003\136\003\137\003\138\003\139\003\140\003\141\003\142\003\143\003\144\003\145\003\146\003\147\003\148\003\149\003\150\003\151\003\152\003\153\003\154\003\155\003\156\003\157\003\158\003\159\003\160\003\161\003\162\003\163\003\164\003\165\003\166\003\167\003\168\003\169\003\170\003\171\003\172\003\173\003\174\003\175\003\176\003\177\003\178\003\179\003\180\003\181\003\182\003\183\003\184\003\185\003\186\003\187\003\188\003\189\003\190\003\191\003\192\003\193\003\194\003\195\003\196\003\197\003\198\003\199\003\200\003\201\003\202\003\203\003\204\003\205\003\206\003\207\003\208\003\209\003\210\003\211\003\212\003\213\003\214\003\215\003\216\003\217\003\218\003\219\003\220\003\221\003\222\003\223\003\224\003\225\003\226\003\227\003\228\003\229\003\230\003\231\003\232\003\233\003\234\003\235\003\236\003\237\003\238\003\239\003\240\003\241\003\242\003\243\003\244\003\245\003\246\003\247\003\248\003\249\003\250\003\251\003\252\003\253\003\254\003\255\004\000\004\001\004\002\004\003\004\004\004\005\004\006\004\007\004\b\004\t\004\n\004\011\004\012\004\r\004\014\004\015\004\016\004\017\004\018\004\019\004\020\004\021\004\022\004\023\004\024\004\025\004\026\004\027\004\028\004\029\004\030\004\031\004 \004!\004\"\004#\004$\004%\004&\004'\004(\004)\004*\004+\004,\004-\004.\004/\0040\0041\0042\0043\0044\0045\0046\0047\0048\0049\004:\004;\004<\004=\004>\004?\004@\004A\004B\004C\004D\004E\004F\004G\004H\004I\004J\004K\004L\004M\004N\004O\004P\004Q\004R\004S\004T\004U\004V\004W\004X\004Y\004Z\004[\004\\\004]\004^\004_\004`\004a\004b\004c\004d\004e\004f\004g\004h\004i\004j\004k\004l\004m\004n\004o\004p\004q\004r\004s\004t\004u\004v\004w\004x\004y\004z\004{\004|\004}\004~\004\127\004\128\004\129\004\130\004\131\004\132\004\133\004\134\004\135\004\136\004\137\004\138\004\139\004\140\004\141\004\142\004\143\004\144\004\145\004\146\004\147\004\148\004\149\004\150\004\151\004\152\004\153\004\154\004\155\004\156\004\157\004\158\004\159\004\160\004\161\004\162\004\163\004\164\004\165\004\166\004\167\004\168\004\169\004\170\004\171\004\172\004\173\004\174\004\175\004\176\004\177\004\178\004\179\004\180\004\181\004\182\004\183\004\184\004\185\004\186\004\187\004\188\004\189\004\190\004\191\004\192\004\193\004\194\004\195\004\196\004\197\004\198\004\199\004\200\004\201\004\202\004\203\004\204\004\205\004\206\004\207\004\208\004\209\004\210\004\211\004\212\004\213\004\214\004\215\004\216\004\217\004\218\004\219\004\220\004\221\004\222\004\223\004\224\004\225\004\226\004\227\004\228\004\229\004\230\004\231\004\232\004\233\004\234\004\235\004\236\004\237\004\238\004\239\004\240\004\241\004\242\004\243\004\244\004\245\004\246\004\247\004\248\004\249\004\250\004\251\004\252\004\253\004\254\004\255\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\b\005\t\005\n\005\011\005\012\005\r\005\014\005\015\005\016\005\017\005\018\005\019\005\020\005\021\005\022\005\023\005\024\005\025\005\026\005\027\005\028\005\029\005\030\005\031\005 \005!\005\"\005#\005$\005%\005&\005'\005(\005)\005*\005+\005,\005-\005.\005/\0050\0051\0052\0053\0054\0055\0056\0057\0058\0059\005:\005;\005<\005=\005>\005?\005@\005A\005B\005C\005D\005E\005F\005G\005H\005I\005J\005K\005L\005M\005N\005O\005P\005Q\005R\005S\005T\005U\005V\005W\005X\005Y\005Z\005[\005\\\005]\005^\005_\005`\005a\005b\005c\005d\005e\005f\005g\005h\005i\005j\005k\005l\005m\005n\005o\005p\005q\005r\005s\005t\005u\005v\005w\005x\005y\005z\005{\005\222\005\223\005\224\005\225\005\226\005\227\005\228\005\229\005\230\005\231\005\232\005\140\005\141\005\142\005\233\005\234\005\235\005\236\005\237\005\238\005\239\005\166\005\167\005\168\005\169\005\170\005\171\005\172\005\173\005\174\005\175\005\176\005\177\005\178\005\179\005\180\005\181\005\182\005\183\005\184\005\185\005\186\005\187\005\188\005\189\005\190\005\191\005\192\005\193\005\194\005\195\005\196\005\197\005\198\005\199\005\200\005\201\005\202\005\203\005\204\005\205\005\206\005\207\005\208\005\209\005\210\005\211\005\212\005\213\005\214\005\215\005\216\005\217\005\218\005\219\005\240\005\241\005\242\005\243\005\244\005\245\005\246\005\247\002\142\005|\005}\005~\005\127\005\128\005\129\005\130\005\131\005\132\005\133\005\134\005\135\005\136\005\137\005\138\005\139\005\143\005\144\005\145\005\146\005\147\005\148\005\149\005\150\005\151\005\152\005\153\005\154\005\155\005\156\005\157\005\158\005\159\005\160\005\161\005\162\005\163\005\164\005\165\005\248\005\249\005\250\005\251\005\252\005\253\005\254\005\255\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\b\006\t\006\n\006\011\006\012\006\r\006\014\006\015\006\016\006\017\006\018\006\019\006\020\006\021\006\022\006\023\006\024\006\025\006\026\006\027\006\028\006\029\006\030\006\031\006 \006!\006\"\006#\006$\006%\006&\006'\006(\006)\006*\006+\006,\006-\006.\006/\0060\0061\0062\0063\0064\0065\0066\0067\0068\0069\006:\006;\006<\006=\006>\006?\006@\006A\006B\006C\006D\006E\006F\006G\006H\006I\006J\006K\006L\006M\006N\006O\006P\006Q\006R\006S\006T\006U\006V\006W\006X\006Y\006Z\006[\006\\\006]\006^\006_\006`\006a\006b\006c\006d\006e\006f\006g\006h\006i\006j\006k\006l\006m\006n\006o\006p\006q\006r\006s\006t\006u\006v\006w\006x\006y\006z\006{\006|\006}\006~\006\127\006\128\006\129\006\130\006\131\006\132\006\133\006\134\006\135\006\136\006\137\006\138\006\139\006\140\006\141\006\142\006\143\006\144\006\145\006\146\006\147\006\148\006\149\006\150\006\151\006\152\006\153\006\154\006\155\006\156\006\157\006\158\006\159\006\160\006\161\006\162\006\163\006\164\006\165\006\166\006\167\006\168\006\169\006\170\006\171\006\172\006\173\006\174\006\175\006\176\006\177\006\178\006\179\006\180\006\181\006\182\006\183\006\184\006\185\006\186\006\187\006\188\006\189\006\190\006\191\006\192\006\193\006\194\006\195\006\196\006\197\006\198\006\199\006\200\006\201\006\202\006\203\006\204\006\205\006\206\006\207\006\208\006\209\006\210\006\211\006\212\006\213\006\214\006\215\006\216\006\217\006\218\006\219\006\220\006\221\006\222\006\223\006\224\006\225\006\226\006\227\006\228\006\229\006\230\006\231\006\232\006\233\006\234\006\235\006\236\006\237\006\238\006\239\006\240\006\241\006\242\006\243\006\244\006\245\006\246\006\247\006\248\006\249\006\250\006\251\006\252\006\253\006\254\006\255\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\b\007\t\007\n\007\011\007\012\007\r\007\014\007\015\007\016\007\017\007\018\007\019\007\020\007\021\007\022\007\023\007\024\007\025\007\026\007\027\007\028\007\029\007\030\007\031\007 \007!\007\"\007#\007$\007%\007&\007'\007(\007)\007*\007+\007,\007-\007.\007/\0070\0071\0072\0073\0074\0075\0076\0077\0078\0079\007:\007;\007<\007=\007>\007?\007@\007A\007B\007C\007D\007E\007F\007G\007H\007I\007J\007K\007L\007M\007N\007O\007P\007Q\007R\007S\007T\007U\007V\007W\007X\007Y\007Z\007[\007\\\007]\007^\007_\007`\007a\007b") + (16, "\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\b\000\t\000\n\000\011\000\012\000\r\000\014\000\015\000\016\000\017\000\018\000\019\000\020\000\021\000\022\000\023\000\024\000\025\000\026\000\027\000\028\000\029\000\030\000\031\000 \000!\000\"\000#\000$\000%\000&\000'\000(\000)\000*\000+\000,\000-\000.\000/\0000\0001\0002\0003\0004\0005\0006\0007\0008\0009\000:\000;\000<\000=\000>\000?\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000Z\000[\000\\\000]\000^\000_\000`\000a\000b\000c\000d\000e\000f\000g\000h\000i\000j\000k\000l\000m\000n\000o\000p\000q\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\000\128\000\129\000\130\000\131\000\132\000\133\000\134\000\135\000\136\000\137\000\138\000\139\000\140\000\141\000\142\000\143\000\144\000\145\000\146\000\147\000\148\000\149\000\150\000\151\000\152\000\153\000\154\000\155\000\156\000\157\000\158\000\159\000\160\000\161\000\162\000\163\000\164\000\165\000\166\000\167\000\168\000\169\000\170\000\171\000\172\000\173\000\174\000\175\000\176\000\177\000\178\000\179\000\180\000\181\000\182\000\183\000\184\000\185\000\186\000\187\000\188\000\189\000\190\000\191\000\192\000\193\000\194\000\195\000\196\000\197\000\198\000\199\000\200\000\201\000\202\000\203\000\204\000\205\000\206\000\207\000\208\000\209\000\210\000\211\000\212\000\213\000\214\000\215\000\216\000\217\000\218\000\219\000\220\000\221\000\222\000\223\000\224\000\225\000\226\000\227\000\228\000\229\000\230\000\231\000\232\000\233\000\234\000\235\000\236\000\237\000\238\000\239\000\240\000\241\000\242\000\243\000\244\000\245\000\246\000\247\000\248\000\249\000\250\000\251\000\252\000\253\000\254\000\255\001\000\001\001\001\002\001\003\001\004\001\005\001\006\001\007\001\b\001\t\001\n\001\011\001\012\001\r\001\014\001\015\001\016\001\017\001\018\001\019\001\020\001\021\001\022\001\023\001\024\001\025\001\026\001\027\001\028\001\029\001\030\001\031\001 \001!\001\"\001#\001$\001%\001&\001'\001(\001)\001*\001+\001,\0014\0015\0016\0017\0018\0019\001:\001;\001<\001=\001>\001?\001@\001A\001B\001C\001D\001E\001F\001G\001H\001Q\001R\001S\001T\001U\001V\001W\001X\001Y\001Z\001[\001\\\001]\001^\001_\001`\001a\001b\001c\001d\001e\001f\001g\001h\001i\001j\001k\001l\001m\001n\001o\001p\001q\001r\001s\001t\001u\001v\001w\001x\001y\001z\001{\001|\001}\001~\001\127\001\128\001\129\001\130\001\131\001\132\001\133\001\134\001\135\001\136\001\137\001\138\001\139\001\140\001\141\001\142\001\143\001\144\001\145\001\146\001\147\001\148\001\149\001\150\001\151\001\152\001\161\001\162\001\163\001\164\001\165\001\166\001\167\001\168\001\169\001\170\001\171\001\172\001\173\001\174\001\175\001\176\001\177\001\178\001\179\001\180\001\181\001\182\001\183\001\184\001\185\001\186\001\187\001\188\001\189\001\190\001\191\001\192\001\193\001\194\001\195\001\196\001\197\001\198\001\199\001\200\001\201\001\202\001\203\001\204\001\205\001\206\001\207\001\208\001\209\001\210\001\211\001\212\001\213\001\214\001\215\001\216\001\217\001\218\001\219\001\220\001\221\001\222\001\241\001\242\001\243\001\244\001\245\001\246\001\247\001\248\001\249\001\250\001\251\001\252\001\253\001\254\001\255\001\235\001\236\002\000\002\001\002\002\002\003\002\004\002\005\002\006\002\007\002\b\002\t\002\n\002\011\002\012\001\223\001\224\001\225\001\226\001\227\001\228\001\229\001\230\001\231\001\232\001\233\001\234\002\r\002\014\002\015\001\237\001\238\001\239\001\240\002\016\002\017\002\018\002\019\002\020\002\021\002\022\002\023\002\024\002\025\002\026\002\027\002\028\002\029\002\030\002\031\002 \002!\002\"\002#\002$\002%\002&\002'\002(\002)\002]\002^\002_\0027\002`\002E\002F\002K\002L\002M\002N\002O\002P\002Q\002R\002S\002T\002U\002V\002W\002X\002Y\002Z\002a\001\153\001\154\001\155\001\156\001\157\001\158\001\159\001\160\002*\002+\002[\002\\\002b\002c\002,\002-\002.\002/\0020\0021\0022\0023\0024\0025\0026\0028\002d\002e\002f\002g\002h\002i\002j\002k\002l\002m\002n\002o\002p\002q\002r\002s\002t\002u\002v\002w\002x\002y\002z\002{\002|\002}\002~\002\127\002\128\002\129\002\130\002\131\002\132\002\133\002\134\002\135\002\136\002\137\002\138\002\139\002\140\002\141\002\142\002\143\002\144\002\145\002\146\002\147\002\148\002\149\002\150\002\151\002\152\002\153\002\154\002\157\002\158\002\159\002\160\002\161\002\162\002\163\002\164\002\165\002\166\002\155\002\156\002\167\002\168\002\169\002\170\002\171\002\172\002\173\002\174\002\175\002\176\002\177\002\178\002\179\002\180\002\181\002\182\002\183\002\184\002\185\002\186\002\187\002\188\002\189\002\190\002\191\002\192\002\193\002\194\002\195\002\196\002\197\002\198\002\199\002\200\002\201\002\202\002\203\002\204\002\205\002\206\002\207\002\208\002\209\002\210\002\211\002\212\002\213\002\214\002\215\002\216\002\217\002\218\002\219\002\220\002\221\002\222\002\223\002\224\002\225\003(\003)\003*\003+\003,\003-\003.\003/\0030\0031\0032\0033\0034\0035\0036\0037\0038\0039\003:\003;\003<\002\232\002\233\002\226\002\227\002\230\002\231\002\236\002\237\002\238\002\239\002\240\002\241\002\242\002\243\002\244\002\245\002\246\002\247\002\248\002\249\002\250\002\251\002\252\002\253\002\254\002\255\003\000\003\001\003\002\003\003\003\004\003\005\003\006\003\007\003\b\003\t\003\n\003\011\003\012\003\r\003\014\003\015\003\016\003\017\003\018\003\019\003\020\003\021\003\022\003\023\003\024\003\025\003\026\003\027\003\028\003\029\003\030\002\228\002\229\002\234\002\235\003=\003>\003?\003@\003A\003B\003C\003D\003E\003F\003G\003H\003I\003J\003K\003L\003M\003N\003O\003P\003Q\003R\003S\003T\003U\003V\003W\003X\003Y\003Z\003[\003\\\003]\003^\003_\003`\003a\003b\003c\003f\003g\003h\003i\003j\003k\003l\003m\003n\003o\003p\003q\003r\003s\003t\003u\003v\003w\003x\003y\003z\003{\003|\003}\003~\003\127\003\128\003\129\003\130\003\131\003\132\003\133\003\134\003\135\003\136\003\137\003d\003e\003\138\003\139\003\140\003\141\003\142\003\143\003\144\003\145\003\146\003\147\003\148\003\149\003\150\003\199\003\200\003\201\003\202\003\203\003\204\004\029\004\030\004\031\004 \004!\004\"\004#\004$\004%\004&\004'\004(\004)\004*\003\151\003\152\003\153\003\154\003\155\003\156\003\169\003\170\003\171\003\172\003\173\003\174\003\205\003\206\003\207\003\208\003\209\003\210\003\157\003\158\003\159\003\160\003\161\003\162\003\163\003\164\003\165\003\166\003\167\003\168\003\175\003\176\003\177\003\178\003\179\003\180\003\181\003\182\003\183\003\184\003\185\003\186\003\187\003\188\003\189\003\190\003\191\003\192\003\193\003\194\003\195\003\196\003\197\003\198\003\211\003\212\003\213\003\214\003\215\003\216\003\217\003\218\003\219\003\220\003\221\003\222\004\005\004\006\004\007\004\b\004\t\004\n\003\223\003\224\003\225\003\226\003\227\003\228\003\229\003\230\003\231\003\232\003\233\003\234\003\235\003\236\003\237\003\238\003\239\003\240\004\011\004\012\004\r\004\014\004\015\004\016\004\017\004\018\004\019\004\020\004\021\004\022\004\023\004\024\004\025\004\026\004\027\004\028\003\241\003\242\003\243\003\244\003\245\003\246\003\247\003\248\003\249\003\250\003\251\003\252\003\253\003\254\003\255\004\000\004\001\004\002\004\003\004\004\004+\004,\004-\004.\004/\0040\0041\0042\0043\0044\0045\0046\0047\0048\0049\004:\004;\004<\004=\004>\004?\004@\004A\004B\004C\004D\004E\004F\004G\004H\004I\004J\004K\004L\004M\004N\004O\004P\0029\002:\002;\002<\002=\002>\002?\002@\002A\002B\002C\002D\002G\002H\002I\002J\004Q\004R\004S\004T\004U\004V\004W\004X\004Y\004Z\004[\004\\\004]\004^\004_\004`\004a\004b\004c\004d\004e\004f\004g\004h\004i\004j\004k\004l\004m\004n\004o\004p\004q\004r\004s\004t\004u\004v\004w\004x\004y\004z\004{\004|\004}\004~\004\127\004\128\004\129\004\130\004\131\004\132\004\133\004\134\004\135\004\136\004\137\004\138\004\139\004\140\004\141\004\142\004\143\004\144\004\145\004\146\004\147\004\148\004\149\004\150\004\151\004\152\004\153\004\154\004\155\004\156\004\157\004\158\004\159\004\160\004\161\004\162\004\163\004\164\004\165\004\166\004\167\004\168\004\169\004\170\004\171\004\172\004\173\004\174\004\175\004\176\004\177\004\178\004\179\004\180\004\181\004\182\004\183\004\184\004\185\004\186\004\187\004\188\004\189\004\190\004\191\004\192\004\193\005\015\005\016\005\017\005\018\005\019\005\020\005\021\005\022\005\023\005\024\005\025\005\026\005\027\005\028\005\029\005\030\005\031\005 \005!\005\"\004\238\004\239\004\240\004\241\004\242\004\243\004\244\004\245\004\246\004\247\004\248\004\249\004\250\004\251\004\252\004\253\004\254\004\255\005\000\005\001\005\002\005\003\005\004\005\005\005\006\005\007\005\b\005\t\005\n\005\011\005\012\005\r\005\014\005#\005$\005%\005&\005'\005(\005)\005*\003\031\003 \003!\003\"\003#\003$\003%\003&\003'\004\233\004\234\004\235\004\236\004\237\004\194\004\195\004\196\004\197\004\198\004\199\004\200\004\201\004\202\004\203\004\204\004\205\004\206\004\207\004\208\004\209\004\210\004\211\004\212\004\213\004\214\004\215\004\216\004\217\004\218\004\219\004\220\004\221\004\222\004\223\004\224\004\225\004\226\004\227\004\228\004\229\004\230\004\231\004\232\005+\005,\005-\005.\005/\0050\0051\0052\0053\0054\0055\0056\0057\0058\0059\005:\005;\005<\005=\005>\005?\005@\005A\005B\005C\005D\005E\005F\005G\005H\005I\005J\005K\005L\005M\005N\005O\005P\005Q\005R\005S\005T\005U\005V\005W\005X\005Y\005Z\005[\005\\\005]\005^\005_\005`\005a\005b\005c\005d\005e\005f\005g\005h\005i\005j\005k\005l\005m\005n\005o\005p\005q\005r\005s\005t\005u\005v\005w\005x\005y\005z\005{\005|\005}\005~\005\127\005\128\005\129\005\130\005\131\005\132\005\133\005\134\005\135\005\136\005\137\005\138\005\139\005\140\005\141\005\142\005\143\005\144\005\145\005\146\005\147\005\148\005\149\005\150\005\151\005\152\005\153\005\154\005\155\005\156\005\157\005\158\005\159\005\160\005\161\005\162\005\163\005\164\005\165\005\166\005\167\005\168\005\169\005\170\005\171\005\172\005\173\005\174\005\175\005\176\005\177\005\178\005\179\005\180\005\181\005\182\005\183\005\184\005\185\005\186\005\187\005\188\005\189\005\190\005\191\005\192\005\193\005\194\005\195\005\196\005\197\005\198\005\199\005\200\005\201\005\202\005\203\005\204\005\205\005\206\005\207\005\208\005\209\005\210\005\211\005\212\005\213\005\214\005\215\005\216\005\217\005\218\005\219\005\220\005\221\005\222\005\223\005\224\005\225\005\226\005\227\005\228\005\229\005\230\005\231\005\232\005\233\005\234\005\235\005\236\005\237\005\238\005\239\005\240\005\241\005\242\005\243\005\244\005\245\005\246\005\247\005\248\005\249\005\250\005\251\005\252\005\253\005\254\005\255\006\000\006\001\006\002\006\003\006\004\006\005\006\006\006\007\006\b\006\t\006\n\006\011\006\012\006\r\006\014\006\015\006\016\006\017\006\018\006\019\006\020\006\021\006\022\006\023\006\024\006\025\006\026\006\027\006\028\006\029\006\030\006\031\006 \006!\006\"\006#\006$\006%\006&\006'\006(\006)\006*\006+\006,\006-\006.\006/\0060\0061\0062\0063\0064\0065\0066\0067\0068\0069\006:\006;\006<\006=\006>\006?\006@\006A\006B\006C\006D\006E\006F\006G\006H\006I\006J\006K\006L\006M\006N\006O\006P\006Q\006R\006S\006T\006U\006V\006W\006X\006Y\006Z\006[\006\\\006]\006^\006_\006`\006a\006b\006c\006d\006e\006f\006g\006h\006i\006j\006k\006l\006m\006n\006o\006p\006q\006r\006s\006t\006u\006v\006w\006x\006y\006z\006{\006|\006}\006~\006\127\006\128\006\129\006\130\006\131\006\132\006\133\006\134\006\135\006\136\006\137\006\138\006\139\006\140\006\141\006\142\006\143\006\144\006\145\006\146\006\147\006\148\006\149\006\150\006\151\006\152\006\153\006\154\006\155\006\156\006\157\006\158\006\159\006\160\006\161\006\162\006\163\006\164\006\165\006\166\006\167\006\168\006\169\006\170\006\171\006\172\006\173\006\174\006\175\006\176\006\177\006\178\006\179\006\180\006\181\006\182\006\183\006\184\006\185\006\186\006\187\006\188\006\189\006\190\006\191\006\192\006\193\006\194\006\195\006\196\006\197\006\198\006\199\006\200\006\201\006\202\006\203\006\204\006\205\006\206\006\207\006\208\006\209\006\210\006\211\006\212\006\213\006\214\006\215\006\216\006\217\006\218\006\219\006\220\006\221\006\222\006\223\006\224\006\225\006\226\006\227\006\228\006\229\006\230\006\231\006\232\006\233\006\234\006\235\006\236\006\237\006\238\006\239\006\240\006\241\006\242\006\243\006\244\006\245\006\246\006\247\006\248\006\249\006\250\006\251\006\252\006\253\006\254\006\255\007\000\007\001\007\002\007\003\007\004\007\005\007\006\007\007\007\b\007\t\007\n\007\011\007\012\007\r\007\014\007\015\007\016\007\017\007\018\007\019\007\020\007\021\007\022\007\023\007\024\007\025\007\026\007\027\007\028\007\029\007\030\007\031\007 \007!\007\"\007#\007$\007%\007&\007'\007(\007)\007*\007+\007,\007-\007.\007/\0070\0071\0072\0073\0074\0075\0076\0077\0078\0079\007:\007;\007<\007=\007>\007?\007@\007A\007B\007C\007D\007E\007F\007G\007H\007I\007J\007K\007L\007M\007N\007O\007P\007Q\007R\007S\007T\007U\007V\007W\007X\007Y\007Z\007[\007\\\007]\007^\007_\007`\007a\007b\007c\007d\007e\007f\007g\007h\007i\007j\007k\007l\007m\007n\007o\007p\007q\007r\007s\007t\007u\007v\007w\007x\007y\007z\007{\007|\007}\007~\007\127\007\128\007\129\007\130\007\131\007\132\007\133\007\134\007\135\007\136\007\137\007\138\007\139\007\140\007\141\007\142\007\143\007\144\007\145\007\146\007\147\007\148\007\149\007\150\007\151\007\152\007\153\007\154\007\155\007\156\007\157\007\158\007\159\007\160\007\161\007\162\007\163\007\164\007\165\007\166\007\167\007\168\007\169\007\170\007\171\007\172\007\173\007\174\007\175\007\176\007\177\007\178\007\179\007\180\007\181\007\182\007\183\007\184\007\185\007\186\007\187\007\188\007\189\007\190\007\191\007\192\007\193\007\194\007\195\007\196\007\197\007\198\007\199\007\200\007\201\007\202\007\203\007\204\007\205\007\206\007\207\007\208\007\209\007\210\007\211\007\212\007\213\007\214\007\215\007\216\007\221\007\222\007\223\007\224\007\225\001I\001J\001K\001L\001M\001N\001O\001P\007\217\007\218\007\219\007\220\007\226\007\227\007\228\007\229\007\230\007\231\007\232\007\233\007\241\007\242\007\243\007\244\007\245\007\246\007\247\007\248\001-\001.\001/\0010\0011\0012\0013\007\234\007\235\007\236\007\237\007\238\007\239\007\240\007\249\007\250\007\251\007\252\007\253\007\254\007\255\b\000\b\001\b\002\b\003\b\004\b\005\b\006\b\007\b\b\b\t\b\n\b\011\b\012\b\r\b\014\b\015\b\016\b\017\b\018\b\019\b\020\b\021\b\022\b\023\b\024\b\025\b\026\b\027\b\028\b\029\b\030\b\031\b \b!\b\"\b#\b$\b%\b&\b'\b(\b)\b*\b+\b,\b-\b.\b/\b0\b1\b2\b3\b4\b5\b6\b7\b8\b9\b:\b;\b<\b=\b>\b?\b@\bA\bB\bC\bD\bE\bF\bG\bH\bI\bJ\bK\bL\bM\bN\bO\bP\bQ\bR\bS\bT\bU\bV\bW\bX\bY\bZ\b[\b\\\b]\b^\b_\b`\ba\bb\bc\bd\be\bf\bg\bh\bi\bj\bk\bl\bm\bn\bo\bp\bq\br\bs\bt\bu\bv\bw\bx\by\bz\b{\b|\b}\b~\b\127\b\128\b\129\b\130\b\131\b\132\b\133\b\134\b\135\b\136\b\137\b\138\b\139\b\140\b\141\b\142\b\143\b\144\b\145\b\146\b\147\b\148\b\149\b\150\b\151\b\152\b\153\b\154\b\155\b\156\b\157\b\158\b\159\b\160\b\161\b\162\b\163\b\164\b\165\b\166\b\167\b\168\b\169\b\170\b\171\b\172\b\173\b\174\b\175\b\176\b\177\b\178\b\179\b\180\b\181\b\182\b\183\b\184\b\185\b\186\b\187\b\188\b\189\b\190\b\191\b\192\b\193\b\194\b\195\b\196\b\197\b\198\b\199\b\200\b\201\b\202\b\203\b\204\b\205\b\206") and lr0_items = - ((32, "\000\000\000\000\000\001\252\001\000\002\240\001\000\011\192\001\000\011\188\001\000\011\184\001\000\011\180\001\000\011\176\001\000\n\252\001\000\011\172\001\000\011\168\001\000\011\164\001\000\011\160\001\000\011\156\001\000\011\152\001\000\011\148\001\000\011\144\001\000\011\140\001\000\011\136\001\000\011\132\001\000\011\128\001\000\011|\001\000\011x\001\000\011t\001\000\011p\001\000\011l\001\000\011h\001\000\011d\001\000\n\248\001\000\011`\001\000\011\\\001\000\011X\001\000\011T\001\000\011P\001\000\011L\001\000\011H\001\000\011D\001\000\011@\001\000\011<\001\000\0118\001\000\0114\001\000\0110\001\000\011,\001\000\011(\001\000\011$\001\000\011 \001\000\011\028\001\000\011\024\001\000\011\020\001\000\011\016\001\000\011\012\001\000\011\b\001\000\011\004\001\000\011\000\001\000\000\172\001\000\000\168\001\000\000\172\002\000\000\172\003\000\002\240\002\000\001\252\002\000\000\176\001\000\000\176\002\000\0028\001\000\0028\002\000\0028\003\000\n\128\001\000\005\160\001\000\001\248\001\000\001\244\001\000\001\240\001\000\001\236\001\000\001\248\002\000\001\244\002\000\001\240\002\000\001\236\002\000\001\248\003\000\001\244\003\000\001\240\003\000\001\236\003\000\002,\001\000\002,\002\000\002,\003\000\001\156\001\000\001\136\001\000\002\248\001\000\nX\001\000\n@\001\000\n@\002\000\n@\003\000\001\016\001\000\001\012\001\000\n\200\001\000\t\228\001\000\t\224\001\000\t\224\002\000\t\228\002\000\t\220\001\000\t\216\001\000\t\216\002\000\t\220\002\000\012\200\001\000\n\240\001\000\n\196\001\000\n\192\001\000\n\184\001\000\001\180\001\000\001\148\001\000\007\000\001\000\001\148\002\000\006\172\001\000\006\244\001\000\006\240\001\000\t\228\001\000\t\224\001\000\006\236\001\000\007\004\001\000\007\020\001\000\n\196\002\000\n\192\002\000\n\196\003\000\n\192\003\000\n\196\004\000\n\192\004\000\005\248\001\000\005\244\001\000\n\196\005\000\n\192\005\000\n\192\006\000\n\196\006\000\005p\001\000\003t\001\000\006\000\001\000\006\000\002\000\012\236\001\000\012\236\002\000\012\236\003\000\012\200\001\000\006\236\001\000\006\252\001\000\006\248\001\000\006\176\001\000\007\012\001\000\006\232\001\000\006\228\001\000\006\224\001\000\006\220\001\000\006\216\001\000\006\208\001\000\007\016\001\000\007\b\001\000\006\204\001\000\006\200\001\000\006\196\001\000\006\192\001\000\006\188\001\000\006\184\001\000\006\188\002\000\006\184\002\000\003\132\001\000\003\132\002\000\006\188\003\000\006\184\003\000\006\188\004\000\006\184\004\000\006\188\005\000\006\196\002\000\006\192\002\000\006\196\003\000\006\192\003\000\006\196\004\000\006\192\004\000\006\196\005\000\006\204\002\000\006\200\002\000\006\204\003\000\006\200\003\000\006\204\004\000\006\200\004\000\006\204\005\000\007$\001\000\007\024\001\000\006\212\001\000\006\180\001\000\007\028\001\000\007 \001\000\012\200\002\000\012\200\003\000\012\204\001\000\012\236\004\000\012\236\005\000\000d\001\000\005p\001\000\b\220\001\000\000`\001\000\003t\001\000\003x\001\000\b\220\002\000\000`\002\000\007|\001\000\007|\002\000\007|\003\000\007x\001\000\000\132\001\000\000p\001\000\000\\\001\000\000X\001\000\000`\001\000\000`\002\000\000\\\002\000\000\\\003\000\000\\\004\000\006\b\001\000\006\b\002\000\006\b\003\000\006\b\004\000\005\240\001\000\005\208\001\000\005\208\002\000\012\000\001\000\011\252\001\000\003p\001\000\003l\001\000\012\000\002\000\011\252\002\000\003p\002\000\003l\002\000\012\000\003\000\011\252\003\000\003p\003\000\003l\003\000\012\188\001\000\012\168\001\000\012\156\001\000\012\168\002\000\012\000\004\000\003p\004\000\012\176\001\000\012\160\001\000\012\176\002\000\012\140\001\000\012\184\001\000\012\180\001\000\012\172\001\000\012\164\001\000\012\172\002\000\012\180\002\000\012\128\001\000\012\148\001\000\012\144\001\000\012\144\002\000\012\128\002\000\t\016\001\000\012\140\002\000\t\020\001\000\012\140\003\000\t\020\002\000\t\020\003\000\012\000\005\000\003p\005\000\005h\001\000\003p\006\000\012x\001\000\005p\001\000\001\160\001\000\006\144\001\000\006\128\001\000\006p\001\000\006h\001\000\001\164\001\000\001\148\001\000\000\132\001\000\000p\001\000\000\\\001\000\000X\001\000\005h\001\000\0030\001\000\0030\002\000\005h\001\000\000x\001\000\000t\001\000\005h\001\000\005@\001\000\0058\001\000\0050\001\000\005@\002\000\0058\002\000\0050\002\000\002\244\001\000\002\244\002\000\004\212\001\000\004\208\001\000\003\144\001\000\000@\001\000\000<\001\000\006\160\001\000\006\156\001\000\006\160\002\000\006\160\003\000\006\160\004\000\007\148\001\000\007\144\001\000\007\140\001\000\007\136\001\000\007\132\001\000\007\128\001\000\007\148\002\000\007\144\002\000\007\140\002\000\007\136\002\000\007\148\003\000\007\144\003\000\007\140\003\000\007\136\003\000\n4\001\000\n4\002\000\n4\003\000\005\152\001\000\005\164\001\000\005\156\001\000\005\164\002\000\005\156\002\000\005\164\003\000\005\156\003\000\005\184\001\000\001\b\001\000\n4\004\000\004\164\001\000\004\164\002\000\012(\001\000\012$\001\000\001\232\001\000\001\232\002\000\001\232\003\000\002(\001\000\002(\002\000\002(\003\000\012\200\001\000\n<\001\000\n8\001\000\n\004\001\000\n\000\001\000\001\180\001\000\001\148\001\000\nX\001\000\006\172\001\000\n\148\001\000\n\144\001\000\012\204\001\000\002\188\001\000\002\188\002\000\005\024\001\000\005\024\002\000\005\024\003\000\bp\001\000\005\024\004\000\t\244\001\000\t\240\001\000\t\236\001\000\001\144\001\000\001\144\002\000\t\232\001\000\003\232\001\000\t\232\002\000\t\232\003\000\005\020\001\000\005\016\001\000\005\012\001\000\005\b\001\000\007L\001\000\000\160\001\000\000\156\001\000\0074\001\000\000\160\002\000\000\156\002\000\000\152\001\000\000\148\001\000\000\152\002\000\000\148\002\000\000\144\001\000\000\140\001\000\000\136\001\000\000|\001\000\005\180\001\000\005t\001\000\005l\001\000\005\180\002\000\005\180\003\000\005\180\001\000\005t\001\000\005\180\004\000\005t\002\000\005t\003\000\005\176\001\000\005t\002\000\005l\002\000\005l\003\000\001|\001\000\000|\002\000\000\140\002\000\006P\001\000\006P\002\000\000h\001\000\0034\001\000\003(\001\000\0034\002\000\012d\001\000\t0\001\000\t0\002\000\012|\001\000\000\164\001\000\t0\003\000\000\128\001\000\000l\001\000\000\128\002\000\000\128\003\000\000l\002\000\003,\001\000\003,\002\000\003,\003\000\003,\004\000\012`\001\000\t4\001\000\000\128\001\000\000l\001\000\t4\002\000\t4\003\000\000\128\001\000\000l\001\000\0034\003\000\t8\001\000\t\000\001\000\t\004\001\000\000\140\003\000\000\140\004\000\t\004\002\000\t\004\003\000\0120\001\000\012,\001\000\012,\002\000\007(\001\000\012,\003\000\012,\004\000\b\244\001\000\b\244\002\000\000D\001\000\b\244\003\000\000H\001\000\000H\002\000\000H\003\000\000H\004\000\012,\005\000\b\240\001\000\000H\001\000\0120\002\000\t<\001\000\001\216\001\000\001\216\002\000\001\212\001\000\000H\001\000\t8\001\000\000\136\002\000\000\136\003\000\000\144\002\000\000\144\003\000\t\004\001\000\000\144\004\000\000\144\005\000\t\004\001\000\000\148\003\000\000\148\004\000\t\004\001\000\000\160\003\000\000\156\003\000\000\156\004\000\000\160\004\000\b\216\001\000\000\160\005\000\000\160\006\000\b\216\002\000\b\212\001\000\007L\002\000\001\216\001\000\005\020\002\000\005\016\002\000\005\012\002\000\005\b\002\000\007d\001\000\b\000\001\000\b\000\002\000\b\000\003\000\001\128\001\000\n\220\001\000\n\220\002\000\001\140\001\000\001\152\001\000\001\132\001\000\n\176\001\000\012\208\001\000\n\180\001\000\b\000\004\000\n\188\001\000\n\208\001\000\n\204\001\000\n\208\002\000\n\208\003\000\t\212\001\000\n\216\001\000\n\236\001\000\n\232\001\000\n\228\001\000\n\224\001\000\005\164\001\000\001\176\001\000\001\172\001\000\n\236\002\000\n\232\002\000\n\228\002\000\n\224\002\000\005\164\002\000\001\176\002\000\n\236\003\000\n\232\003\000\001\176\003\000\n\232\004\000\007\220\001\000\007\220\002\000\007\220\003\000\007\240\001\000\007\204\001\000\007\224\001\000\007\212\001\000\007\224\002\000\007\228\001\000\007\224\003\000\007\216\001\000\007\208\001\000\007\200\001\000\007\196\001\000\007\228\002\000\007\228\003\000\007\228\001\000\007\216\001\000\007\208\001\000\007\200\001\000\007\196\001\000\007\196\002\000\007\228\001\000\007\216\001\000\007\208\001\000\007\200\001\000\007\196\003\000\007\196\001\000\007\216\002\000\007\228\001\000\007\216\003\000\007\216\001\000\007\208\001\000\007\200\001\000\007\196\001\000\007\208\002\000\007\208\003\000\007\200\002\000\n\216\001\000\007\252\001\000\007\252\002\000\007\228\001\000\007\216\001\000\007\208\001\000\007\200\001\000\007\196\001\000\n\244\001\000\n\212\001\000\007\248\001\000\007\244\001\000\012\200\001\000\n\240\001\000\n\196\001\000\n\192\001\000\n\184\001\000\007\248\002\000\001\180\001\000\001\148\001\000\007\248\003\000\006X\001\000\006T\001\000\006X\002\000\007\248\004\000\007\248\005\000\007\248\006\000\n\212\001\000\001\184\001\000\t\220\001\000\t\216\001\000\006\248\001\000\001\180\002\000\001\180\003\000\n\240\002\000\n\184\002\000\007\228\001\000\007\216\001\000\007\208\001\000\007\200\001\000\007\196\001\000\n\184\003\000\n\240\003\000\n\240\004\000\001\216\001\000\n\240\005\000\007\244\002\000\007\228\001\000\007\216\001\000\007\208\001\000\007\200\001\000\007\196\001\000\007\228\001\000\007\220\004\000\007\216\001\000\007\208\001\000\007\200\001\000\007\196\001\000\001\176\004\000\001\176\005\000\n\236\004\000\007\228\001\000\007\216\001\000\007\208\001\000\007\200\001\000\007\196\001\000\n\236\005\000\n\228\003\000\t\236\001\000\n\228\004\000\t\236\002\000\t\236\003\000\t`\001\000\t\\\001\000\tX\001\000\007\228\001\000\007\216\001\000\007\208\001\000\007\200\001\000\007\196\001\000\t`\002\000\t\\\002\000\t`\003\000\n\224\003\000\007\228\001\000\007\216\001\000\007\208\001\000\007\200\001\000\007\196\001\000\007d\002\000\005\020\003\000\005\016\003\000\005\012\003\000\005\b\003\000\005\020\004\000\005\016\004\000\005\012\004\000\005\016\005\000\007<\001\000\005\016\006\000\005\020\005\000\t\244\002\000\t\240\002\000\t\240\003\000\n\176\001\000\0048\001\000\0044\001\000\0040\001\000\004,\001\000\004(\001\000\004\024\001\000\004\020\001\000\004\020\002\000\003\228\001\000\003\224\001\000\003\228\002\000\003\228\003\000\001\216\001\000\004\020\003\000\004\020\004\000\004\024\002\000\004\b\001\000\004\004\001\000\004\004\002\000\004\004\003\000\007l\001\000\002\180\001\000\n\176\001\000\004d\001\000\004`\001\000\004\016\001\000\004\012\001\000\b \001\000\004\012\002\000\007\228\001\000\007\216\001\000\007\208\001\000\007\200\001\000\007\196\001\000\004\\\001\000\004X\001\000\004\\\002\000\004\\\003\000\001\216\001\000\004\012\003\000\004\012\004\000\004\012\005\000\b\028\001\000\004\016\002\000\012\200\001\000\011\212\001\000\n\240\001\000\n\196\001\000\n\192\001\000\n\184\001\000\001\180\001\000\001\148\001\000\011\212\002\000\011\212\003\000\011\212\004\000\004\028\001\000\004\028\002\000\011\204\001\000\004D\001\000\002\024\001\000\002\020\001\000\002\016\001\000\002\012\001\000\002\024\002\000\002\020\002\000\002\024\003\000\002\024\004\000\002\024\005\000\005\212\001\000\005\212\002\000\003<\001\000\0038\001\000\0038\002\000\003<\002\000\003<\003\000\006\024\001\000\006\012\001\000\006\024\002\000\006\024\003\000\006\004\001\000\006\004\002\000\b\200\001\000\003@\001\000\b\200\002\000\006\004\003\000\006\004\004\000\006\020\001\000\006 \001\000\006\028\001\000\006\016\001\000\006\004\005\000\006 \002\000\r\020\001\000\r\016\001\000\r\020\002\000\r\016\002\000\r\020\003\000\r\016\003\000\r,\001\000\r(\001\000\r,\002\000\r\020\004\000\r\020\005\000\000H\001\000\r\016\004\000\r\016\005\000\000H\001\000\r\016\006\000\b\184\001\000\b\184\002\000\b\184\003\000\001\216\001\000\b\184\004\000\b\184\005\000\001\216\001\000\012\136\001\000\r$\001\000\r \001\000\r\028\001\000\r\024\001\000\r$\002\000\r \002\000\r$\003\000\r \003\000\r \004\000\r \005\000\006 \001\000\006\028\001\000\006\016\001\000\006\028\002\000\006 \001\000\006\028\003\000\006\028\001\000\006\016\001\000\006\016\002\000\005\180\001\000\005\148\001\000\005t\001\000\005\148\002\000\005t\002\000\005t\003\000\003t\001\000\005\148\003\000\0060\001\000\005\144\001\000\006$\001\000\r$\004\000\r$\005\000\006 \001\000\006\028\001\000\006\016\001\000\r\028\002\000\r\024\002\000\005\164\001\000\r\024\003\000\r\024\004\000\005\180\001\000\005t\001\000\005\164\002\000\r\028\003\000\r\028\004\000\005\180\001\000\005t\001\000\b\248\001\000\b\252\001\000\006 \003\000\b\252\002\000\b\252\003\000\b\196\001\000\006 \001\000\006\028\001\000\006\024\004\000\006\016\001\000\006 \001\000\006\028\001\000\006\016\001\000\006\012\002\000\006\012\003\000\006 \001\000\006\028\001\000\006\016\001\000\003<\004\000\003<\005\000\005\212\003\000\005\212\004\000\005\216\001\000\005\232\001\000\005\228\001\000\005\220\001\000\005\212\005\000\007\148\001\000\007\144\001\000\007\140\001\000\007\136\001\000\007\132\001\000\007\128\001\000\005\232\002\000\005\232\003\000\007\132\002\000\007\128\002\000\005\232\001\000\005\228\001\000\005\220\001\000\007\132\003\000\007\128\003\000\007\128\004\000\006 \001\000\006\028\001\000\006\016\001\000\007\128\005\000\005\228\002\000\005\220\002\000\005\224\001\000\005\164\001\000\005\236\001\000\005\232\001\000\005\228\001\000\005\220\001\000\002\024\006\000\002\024\007\000\n\160\001\000\001\144\001\000\nd\001\000\n`\001\000\tT\001\000\tP\001\000\tL\001\000\007T\001\000\n\136\001\000\012\204\001\000\005\152\001\000\003\168\001\000\003\164\001\000\003\156\001\000\003\168\002\000\003\164\002\000\003\168\003\000\005\168\001\000\005\172\001\000\005\164\001\000\003\164\003\000\005\172\002\000\005\164\002\000\005\172\003\000\012\212\001\000\003\160\001\000\t\252\001\000\t\248\001\000\002D\001\000\002D\002\000\002D\003\000\n0\001\000\n,\001\000\n0\002\000\n,\002\000\n0\003\000\n,\003\000\0024\001\000\0020\001\000\0024\002\000\0020\002\000\0024\003\000\0020\003\000\002\028\001\000\002\028\002\000\002\028\003\000\b\232\001\000\007\228\001\000\007\216\001\000\007\208\001\000\007\200\001\000\007\196\001\000\005,\001\000\005(\001\000\005$\001\000\005(\002\000\002$\001\000\002 \001\000\002$\002\000\002 \002\000\002$\003\000\002 \003\000\012\200\001\000\n\240\001\000\n\196\001\000\n\192\001\000\n\184\001\000\002$\004\000\001\180\001\000\001\148\001\000\002$\005\000\002$\006\000\002$\007\000\003\024\001\000\002\004\001\000\002\000\001\000\002\004\002\000\002\000\002\000\002\004\003\000\002\000\003\000\007\228\001\000\007\216\001\000\007\208\001\000\007\200\001\000\007\196\001\000\002\004\004\000\002\000\004\000\002\004\005\000\002<\001\000\002<\002\000\002<\003\000\007\228\001\000\007\216\001\000\007\208\001\000\007\200\001\000\007\196\001\000\002<\004\000\002<\005\000\n\\\001\000\nH\001\000\nx\001\000\nt\001\000\nh\001\000\n\\\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\nx\002\000\nx\003\000\nx\001\000\nt\001\000\nh\001\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\nt\002\000\nt\003\000\n$\002\000\n\028\002\000\n\020\002\000\n\020\003\000\002@\001\000\002@\002\000\002@\003\000\nx\001\000\nt\001\000\nh\001\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\002@\004\000\nh\002\000\n(\002\000\n \002\000\n\024\002\000\n\016\002\000\n\012\002\000\n\b\002\000\n\b\003\000\002\168\001\000\nx\001\000\nt\001\000\nh\001\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002H\001\000\002\b\001\000\003\248\001\000\003\244\001\000\003\248\002\000\003\248\003\000\012p\001\000\012p\002\000\001\216\001\000\012l\001\000\012h\001\000\012l\002\000\012h\002\000\001\216\001\000\012l\003\000\012l\004\000\001\216\001\000\003\248\004\000\003\248\005\000\003\244\002\000\003\252\001\000\003\252\002\000\004\000\001\000\nx\001\000\nt\001\000\nh\001\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\004\000\002\000\nT\001\000\n\172\001\000\n\168\001\000\n\164\001\000\n\156\001\000\n\152\001\000\n\140\001\000\n\132\001\000\np\001\000\nl\001\000\005\172\001\000\005\164\001\000\001\176\001\000\001\172\001\000\n\172\002\000\n\168\002\000\n\164\002\000\n\156\002\000\n\152\002\000\n\140\002\000\n\132\002\000\np\002\000\nl\002\000\005\172\002\000\005\164\002\000\001\176\002\000\012\200\001\000\n\172\003\000\n\132\003\000\nl\003\000\001\176\003\000\n\132\004\000\006\240\001\000\000@\001\000\006\236\001\000\000<\001\000\n\172\004\000\n\172\005\000\n\172\006\000\n\172\007\000\005\232\001\000\005\228\001\000\005\220\001\000\n\172\b\000\n\172\t\000\006 \001\000\006\028\001\000\006\016\001\000\n\172\n\000\012(\001\000\006\252\001\000\012$\001\000\006\248\001\000\006\176\001\000\002\180\001\000\007\240\001\000\004h\001\000\004h\002\000\004h\003\000\001\216\001\000\004h\004\000\004h\005\000\t(\001\000\002L\001\000\t(\002\000\nT\001\000\002T\001\000\nx\001\000\nt\001\000\nh\001\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\002T\002\000\003\152\001\000\003\148\001\000\b\176\001\000\003\152\002\000\003\148\002\000\003\148\003\000\003\200\001\000\003\192\001\000\003\200\002\000\003\192\002\000\003\200\003\000\nx\001\000\nt\001\000\nh\001\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\003\200\004\000\nD\001\000\n|\001\000\nP\001\000\nL\001\000\003\196\001\000\003\188\001\000\003\196\002\000\nx\001\000\nt\001\000\nh\001\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\003\196\003\000\003\152\003\000\b\192\001\000\003\152\004\000\003\184\001\000\003\180\001\000\003\172\001\000\003\184\002\000\003\180\002\000\003\184\003\000\005\172\001\000\005\164\001\000\003\180\003\000\003\176\001\000\nx\001\000\nt\001\000\nh\001\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\b\192\002\000\003\152\005\000\003\152\006\000\b\176\002\000\005 \001\000\001\228\001\000\001\228\002\000\001\228\003\000\005\028\001\000\004H\001\000\002\176\001\000\002\176\002\000\002\176\003\000\t|\001\000\tx\001\000\tt\001\000\tp\001\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\002\128\002\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\003\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\002t\002\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\003\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\002p\002\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\003\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\002l\002\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\003\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\002\132\002\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\003\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\002\148\002\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\003\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\002|\002\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\003\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\002x\002\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\003\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\002\140\002\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\003\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\002h\002\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\003\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\002d\002\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\003\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\002`\002\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\003\000\002`\001\000\002\\\001\000\002X\001\000\002\\\002\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\003\000\002\\\001\000\002X\001\000\002X\002\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\003\000\002X\001\000\002\144\002\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\003\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\002\136\002\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\003\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\t,\002\000\t,\003\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\002\164\002\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\003\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\002\184\002\000\t,\001\000\002\232\001\000\002\184\003\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\002\152\002\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\003\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\002\156\002\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\003\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\002\160\002\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\003\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\002\232\002\000\nP\001\000\002P\001\000\nx\001\000\nt\001\000\nh\001\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\002P\002\000\002\172\001\000\t,\001\000\002\232\001\000\002\184\001\000\002\172\002\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\t|\002\000\tx\002\000\tt\002\000\t|\003\000\t|\004\000\t|\005\000\tx\003\000\000L\001\000\000L\002\000\n\180\001\000\004@\001\000\004@\002\000\004@\003\000\001\216\001\000\004@\004\000\004@\005\000\b\024\001\000\b\016\001\000\b\b\001\000\b\004\001\000\007\236\001\000\004<\001\000\004<\002\000\004<\003\000\007\236\002\000\007\236\003\000\007\228\001\000\007\216\001\000\007\208\001\000\007\200\001\000\007\196\001\000\b\004\002\000\b\004\003\000\007\228\001\000\007\216\001\000\007\208\001\000\007\200\001\000\007\196\001\000\b\024\002\000\b\024\003\000\007\228\001\000\007\216\001\000\007\208\001\000\007\200\001\000\007\196\001\000\b\016\002\000\b\016\003\000\b\b\002\000\b\012\001\000\b\020\001\000\007\232\001\000\007\232\002\000\007\232\003\000\007\228\001\000\007\216\001\000\007\208\001\000\007\200\001\000\007\196\001\000\004$\001\000\000L\003\000\bH\001\000\bH\002\000\b4\001\000\b0\001\000\b4\002\000\b0\002\000\007\228\001\000\007\216\001\000\007\208\001\000\007\200\001\000\007\196\001\000\b4\003\000\b4\004\000\012\012\001\000\012\b\001\000\006(\001\000\006(\002\000\006(\003\000\006(\004\000\006(\005\000\007\\\001\000\007\\\002\000\006 \001\000\006\028\001\000\006\016\001\000\006(\006\000\004\188\001\000\004\188\002\000\006(\007\000\012\012\002\000\012\b\002\000\012\012\003\000\012\b\003\000\012\012\004\000\012\012\005\000\005\188\001\000\005\232\001\000\005\228\001\000\005\220\001\000\005\188\002\000\005\192\001\000\006 \001\000\006\028\001\000\006\016\001\000\005\192\002\000\005\192\003\000\005\232\001\000\005\228\001\000\005\220\001\000\005\192\004\000\012\012\006\000\012\012\007\000\004\148\001\000\004\148\002\000\004\148\003\000\004\148\004\000\004\148\005\000\004\148\006\000\005\196\001\000\005\196\002\000\012\012\b\000\012\b\004\000\012\b\005\000\012\b\006\000\003\140\001\000\003\140\002\000\003\004\001\000\003\004\002\000\012 \001\000\012 \002\000\012 \003\000\012 \004\000\005\232\001\000\005\228\001\000\005\220\001\000\012 \005\000\bL\001\000\bL\002\000\bL\003\000\bL\004\000\bL\005\000\b\224\001\000\b<\001\000\b\224\002\000\b\224\003\000\b<\002\000\b<\003\000\001\216\001\000\bL\006\000\bL\007\000\006`\001\000\006\\\001\000\006`\002\000\bL\b\000\bL\t\000\b8\001\000\001\216\001\000\011\200\001\000\t\128\001\000\011\200\002\000\t\128\002\000\011\200\003\000\t\128\003\000\001\160\001\000\001\164\001\000\001\148\001\000\001\164\002\000\001\164\003\000\001\144\001\000\011\200\004\000\t\128\004\000\003H\001\000\001\200\001\000\0068\001\000\003\208\001\000\003\204\001\000\003\208\002\000\003\204\002\000\003\208\003\000\003\204\003\000\b\224\001\000\bD\001\000\bD\002\000\bD\003\000\000H\001\000\003\208\004\000\003\204\004\000\003\208\005\000\003\204\005\000\003\208\006\000\003\208\007\000\b@\001\000\000H\001\000\001\200\002\000\001\200\003\000\003\220\001\000\003\216\001\000\003\220\002\000\003\212\001\000\t\028\001\000\001\196\001\000\t\028\002\000\001\196\002\000\t\028\003\000\001\196\003\000\000\128\001\000\000l\001\000\003H\002\000\t\024\001\000\001\192\001\000\000\128\001\000\000l\001\000\011\200\005\000\001\180\001\000\001\148\001\000\005\164\001\000\001\176\001\000\001\172\001\000\005\164\002\000\001\176\002\000\001\176\003\000\011\200\006\000\011\200\007\000\011\200\b\000\003X\001\000\003T\001\000\003P\001\000\003L\001\000\b\224\001\000\003X\002\000\003P\002\000\003X\003\000\003P\003\000\003P\004\000\003P\005\000\003P\006\000\000\128\001\000\000l\001\000\t\024\001\000\003X\004\000\001\192\001\000\000\128\001\000\000l\001\000\003L\002\000\003L\003\000\003L\004\000\000\128\001\000\000l\001\000\t\024\001\000\003T\002\000\001\192\001\000\000\128\001\000\000l\001\000\t\128\005\000\t\128\006\000\t\128\007\000\001\168\001\000\b,\001\000\b(\001\000\t\164\001\000\t\160\001\000\003p\001\000\003l\001\000\003h\001\000\003d\001\000\t\164\002\000\t\160\002\000\003p\002\000\003l\002\000\003h\002\000\003d\002\000\t\164\003\000\t\160\003\000\003p\003\000\003l\003\000\003h\003\000\003d\003\000\t\164\004\000\003p\004\000\003h\004\000\t\164\005\000\003p\005\000\003h\005\000\005h\001\000\003p\006\000\003h\006\000\003h\007\000\001\144\001\000\000\144\001\000\000\140\001\000\000\136\001\000\006\140\001\000\006\140\002\000\006\140\003\000\006|\001\000\003\\\001\000\001\204\001\000\003\\\002\000\003\\\003\000\003\\\004\000\b\132\001\000\001\208\001\000\003\\\001\000\b\132\002\000\003h\b\000\b\184\001\000\003h\t\000\003h\n\000\b|\001\000\b\128\001\000\006\152\001\000\006\148\001\000\006\136\001\000\006\132\001\000\006x\001\000\006t\001\000\006d\001\000\001\216\001\000\006\152\002\000\006\148\002\000\006\136\002\000\006\132\002\000\006x\002\000\006t\002\000\006\152\003\000\006\136\003\000\006x\003\000\006\152\004\000\006\152\005\000\006\152\006\000\006\136\004\000\006x\004\000\003`\001\000\003`\002\000\003`\003\000\006\148\003\000\006\148\004\000\006\148\005\000\006\132\003\000\006t\003\000\006l\001\000\003p\007\000\b\184\001\000\003p\b\000\003p\t\000\t\164\006\000\t\164\007\000\bT\001\000\t\164\b\000\t\164\t\000\b\168\001\000\t\164\n\000\b\168\002\000\b\160\001\000\b\164\001\000\t\160\004\000\003l\004\000\003d\004\000\005h\001\000\003l\005\000\003d\005\000\003d\006\000\003d\007\000\b\184\001\000\003d\b\000\003d\t\000\003l\006\000\b\184\001\000\003l\007\000\003l\b\000\t\160\005\000\t\160\006\000\t\160\007\000\t\160\b\000\b\168\001\000\t\160\t\000\004\196\001\000\006\168\001\000\006\164\001\000\006\168\002\000\006\168\003\000\006\168\004\000\006\168\005\000\005\180\001\000\005t\001\000\006\168\006\000\006\164\002\000\006\164\003\000\006\164\004\000\005\180\001\000\005t\001\000\006\164\005\000\t\184\001\000\t\176\001\000\t\172\001\000\006,\001\000\006(\001\000\005\252\001\000\006,\002\000\006(\002\000\006,\003\000\006(\003\000\006,\004\000\006(\004\000\006,\005\000\006(\005\000\006,\006\000\006,\007\000\006 \001\000\006\028\001\000\006\016\001\000\006,\b\000\t\184\002\000\t\176\002\000\t\172\002\000\005\252\002\000\t\184\003\000\t\176\003\000\t\172\003\000\005\252\003\000\005\252\004\000\005\244\001\000\005\252\005\000\005\252\006\000\005\180\001\000\005t\001\000\005\252\007\000\t\184\004\000\t\184\005\000\t\184\006\000\t\184\007\000\006 \001\000\006\028\001\000\006\016\001\000\t\184\b\000\004\156\001\000\004\156\002\000\004\156\003\000\004\156\004\000\006 \001\000\006\028\001\000\006\016\001\000\004\156\005\000\004\156\006\000\004\156\007\000\t\184\t\000\t\176\004\000\t\172\004\000\t\176\005\000\t\176\006\000\005\164\001\000\t\176\007\000\005\200\001\000\006 \001\000\006\028\001\000\006\016\001\000\005\200\002\000\t\172\005\000\t\172\006\000\005\204\001\000\005\204\002\000\t\200\001\000\t\200\002\000\t\200\003\000\t\200\004\000\006 \001\000\006\028\001\000\006\016\001\000\t\200\005\000\t\128\001\000\t\128\002\000\t\128\003\000\t\128\004\000\t\204\001\000\001x\001\000\001x\002\000\001x\003\000\001x\004\000\012\244\001\000\001x\005\000\003\012\001\000\t\020\001\000\003\012\002\000\003\012\003\000\001x\006\000\001x\007\000\001x\b\000\001D\001\000\001D\002\000\001\024\001\000\001\216\001\000\001\024\002\000\001\024\003\000\001D\003\000\001$\001\000\001$\002\000\006L\001\000\006D\001\000\006L\002\000\006H\001\000\006@\001\000\006H\002\000\001$\003\000\001$\004\000\001$\005\000\001\216\001\000\001$\006\000\001$\007\000\001(\001\000\001(\002\000\bh\001\000\b`\001\000\bh\002\000\bd\001\000\b\\\001\000\bd\002\000\001(\003\000\001(\004\000\001(\005\000\001(\006\000\001(\007\000\001 \001\000\001 \002\000\001P\001\000\001L\001\000\001P\002\000\001L\002\000\001P\003\000\001P\004\000\005\164\001\000\001P\005\000\001P\006\000\001<\001\000\t\012\001\000\001<\002\000\001<\003\000\001<\004\000\t\012\002\000\t\012\003\000\001\216\001\000\t\b\001\000\001\216\001\000\001@\001\000\0018\001\000\001P\007\000\001H\001\000\001H\002\000\001L\003\000\005\164\001\000\001L\004\000\001L\005\000\001L\006\000\001H\001\000\001H\001\000\001 \003\000\001 \004\000\001,\001\000\001,\002\000\001\216\001\000\001\188\001\000\001\188\002\000\001\216\001\000\001\188\003\000\001,\003\000\001,\004\000\001D\004\000\001D\005\000\0010\001\000\0010\002\000\0014\001\000\004\224\001\000\004\224\002\000\001x\t\000\001H\001\000\001x\n\000\004\140\001\000\004\140\002\000\004\140\003\000\004\140\004\000\004\140\005\000\004\140\006\000\004\140\007\000\001H\001\000\004\140\b\000\004\140\t\000\001x\011\000\t\204\002\000\t\204\003\000\t\204\004\000\t\204\005\000\t\204\006\000\t\204\007\000\005h\001\000\001p\001\000\001p\002\000\001p\003\000\001p\004\000\001<\001\000\000\144\001\000\000\140\001\000\000\136\001\000\t<\001\000\t\b\001\000\001\216\001\000\001t\001\000\001t\002\000\001l\001\000\001l\002\000\001l\003\000\012|\001\000\001|\001\000\001@\001\000\000\164\001\000\001l\004\000\001h\001\000\001H\001\000\001t\003\000\001p\005\000\t\204\b\000\t\204\t\000\004\132\001\000\004\132\002\000\004\132\003\000\004\132\004\000\004\132\005\000\004\132\006\000\004\132\007\000\004\132\b\000\004\132\t\000\t\204\n\000\t\144\001\000\004\200\001\000\t\168\001\000\t\148\001\000\t\196\001\000\t\192\001\000\t\188\001\000\t\180\001\000\004\200\002\000\t\136\001\000\t\136\002\000\t\152\001\000\004\172\001\000\004\172\002\000\004\172\003\000\004\172\004\000\004\172\005\000\b\184\001\000\004\172\006\000\004\172\007\000\004\172\b\000\t\152\002\000\t\156\001\000\004\180\001\000\004\180\002\000\004\180\003\000\004\180\004\000\004\180\005\000\004\180\006\000\b\184\001\000\004\180\007\000\004\180\b\000\004\180\t\000\t\156\002\000\t\140\001\000\t\208\001\000\004\196\002\000\b(\002\000\t\132\001\000\b,\002\000\001\216\001\000\012\024\001\000\001x\001\000\012\024\002\000\012\024\003\000\012\024\004\000\012\024\005\000\012\024\006\000\000\244\001\000\001d\001\000\001d\002\000\001d\003\000\000\220\001\000\012\232\001\000\012\224\001\000\012\232\002\000\012\224\002\000\012\232\003\000\012\224\003\000\012\232\004\000\012\224\004\000\012\224\005\000\012\224\006\000\012\232\005\000\012\232\006\000\012\232\007\000\000\220\002\000\000\220\003\000\012\228\001\000\012\220\001\000\012\216\001\000\r\000\001\000\012\248\001\000\r\000\002\000\012\252\001\000\0068\001\000\012\252\002\000\012\216\002\000\012\216\003\000\012\216\004\000\012\216\005\000\001\216\001\000\012\228\002\000\012\220\002\000\012\228\003\000\012\220\003\000\012\220\004\000\012\220\005\000\012\228\004\000\012\228\005\000\012\228\006\000\000\224\001\000\005d\001\000\005\\\001\000\005T\001\000\005d\002\000\005\\\002\000\005T\002\000\005d\003\000\005\\\003\000\005T\003\000\005d\004\000\005\\\004\000\005T\004\000\005d\005\000\005\\\005\000\005d\006\000\005d\007\000\005d\b\000\005d\t\000\001\216\001\000\005d\n\000\005d\011\000\005\\\006\000\005\\\007\000\005\\\b\000\005T\005\000\004 \001\000\011\208\001\000\003\020\001\000\003\020\002\000\003\020\003\000\003\016\001\000\011\208\002\000\000\224\002\000\000\224\003\000\005`\001\000\005X\001\000\005P\001\000\005L\001\000\r\012\001\000\r\004\001\000\r\012\002\000\r\b\001\000\bT\001\000\r\b\002\000\005L\002\000\005L\003\000\005L\004\000\005L\005\000\005`\002\000\005X\002\000\005P\002\000\005`\003\000\005X\003\000\005P\003\000\005`\004\000\005X\004\000\005`\005\000\005`\006\000\005`\007\000\005`\b\000\001\216\001\000\005`\t\000\005`\n\000\005X\005\000\005X\006\000\005X\007\000\005P\004\000\000\232\001\000\000\232\002\000\000\232\003\000\000\232\004\000\000\216\001\000\000\212\001\000\000\216\002\000\000\216\003\000\001`\001\000\001T\001\000\004P\001\000\004L\001\000\000\196\001\000\000\192\001\000\004P\002\000\004P\003\000\004P\004\000\004P\005\000\004P\006\000\004P\007\000\000\196\002\000\000\192\002\000\000\196\003\000\000\196\004\000\005\164\001\000\000\196\005\000\000\196\006\000\001\\\001\000\t\012\001\000\001\\\002\000\001\\\003\000\001\\\004\000\000\184\001\000\000\184\002\000\001\004\001\000\001\000\001\000\001\000\002\000\004T\001\000\000\188\001\000\000\188\002\000\000\208\001\000\000\204\001\000\000\180\001\000\003\240\001\000\nx\001\000\nt\001\000\nh\001\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\003\240\002\000\nx\001\000\nt\001\000\nh\001\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\003\236\001\000\b\208\001\000\000\204\002\000\b\208\002\000\b\204\001\000\001X\001\000\000\200\001\000\000\188\003\000\000\200\002\000\004T\002\000\001\000\003\000\000\200\001\000\001\004\002\000\000\184\003\000\000\200\001\000\000\196\007\000\000\192\003\000\005\164\001\000\000\192\004\000\000\192\005\000\000\200\001\000\000\192\006\000\004L\002\000\004L\003\000\004L\004\000\004L\005\000\001`\002\000\001T\002\000\000\200\001\000\001T\003\000\001`\003\000\001`\004\000\001`\005\000\000\216\004\000\000\200\001\000\007D\001\000\007D\002\000\000\216\005\000\000\216\006\000\000\212\002\000\000\212\003\000\000\200\001\000\000\212\004\000\000\212\005\000\000\228\001\000\000\228\002\000\000\228\003\000\000\228\004\000\001d\004\000\001d\005\000\000\236\001\000\000\236\002\000\000\240\001\000\004\232\001\000\004\232\002\000\000\244\002\000\000\200\001\000\000\248\001\000\000\248\002\000\000\248\003\000\000\248\004\000\000\200\001\000\000\252\001\000\000\252\002\000\012\024\007\000\012\024\b\000\004|\001\000\004|\002\000\004|\003\000\004|\004\000\004|\005\000\004|\006\000\004|\007\000\004|\b\000\012\024\t\000\011\244\001\000\004\216\001\000\004D\001\000\004D\002\000\004D\003\000\004D\004\000\004D\005\000\004D\006\000\012\004\001\000\011\196\001\000\011\240\001\000\012\020\001\000\012\016\001\000\011\224\001\000\005 \001\000\005 \002\000\004\216\002\000\011\228\001\000\004H\001\000\004H\002\000\011\232\001\000\011\232\002\000\011\248\001\000\011\248\002\000\011\236\001\000\012\028\001\000\b$\001\000\011\220\001\000\011\220\002\000\011\220\003\000\003\004\003\000\003\004\004\000\011\224\001\000\005 \001\000\001\228\001\000\011\216\001\000\011\228\001\000\004H\001\000\002\176\001\000\003\140\003\000\003\140\004\000\bH\003\000\bH\004\000\000L\004\000\t,\001\000\t(\003\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\b\024\001\000\b\016\001\000\b\b\001\000\b\004\001\000\007\236\001\000\004l\001\000\004l\002\000\004l\003\000\004t\001\000\002\180\002\000\002\180\003\000\002\180\004\000\004t\002\000\004t\003\000\004p\001\000\n\\\001\000\006\212\001\000\nl\004\000\nl\005\000\n\156\003\000\n\152\003\000\n\156\004\000\n\152\004\000\n\152\005\000\tH\001\000\tD\001\000\t@\001\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\tH\002\000\tD\002\000\tH\003\000\n\168\003\000\n\164\003\000\n\168\004\000\n\164\004\000\n\164\005\000\np\003\000\np\004\000\np\005\000\n\140\003\000\nx\001\000\nt\001\000\nh\001\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\bx\001\000\bx\002\000\bx\003\000\tl\001\000\th\001\000\td\001\000\007t\001\000\tl\002\000\th\002\000\td\002\000\tl\003\000\th\003\000\td\003\000\tl\004\000\th\004\000\tl\005\000\bt\001\000\n\140\004\000\n\140\005\000\n\172\001\000\n\168\001\000\n\164\001\000\n\156\001\000\n\152\001\000\n\140\001\000\n\132\001\000\np\001\000\nl\001\000\005\172\001\000\005\164\001\000\005\156\001\000\001\176\001\000\001\172\001\000\n\172\002\000\n\168\002\000\n\164\002\000\n\156\002\000\n\152\002\000\n\140\002\000\n\132\002\000\np\002\000\nl\002\000\005\172\002\000\005\164\002\000\005\156\002\000\001\176\002\000\012\204\001\000\005\156\003\000\n$\002\000\n\028\002\000\n\020\002\000\002\224\002\000\002\216\002\000\002\208\002\000\n\020\003\000\002\208\003\000\n\020\004\000\002\208\004\000\n\020\005\000\002\208\005\000\002\208\006\000\t,\001\000\002\232\001\000\002\208\007\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\n$\003\000\002\224\003\000\n$\004\000\002\224\004\000\n$\005\000\002\224\005\000\002\224\006\000\t,\001\000\002\232\001\000\002\224\007\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\n\028\003\000\002\216\003\000\n\028\004\000\002\216\004\000\n\028\005\000\002\216\005\000\002\216\006\000\t,\001\000\002\232\001\000\002\216\007\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\nh\002\000\n(\002\000\n \002\000\n\024\002\000\n\016\002\000\n\012\002\000\n\b\002\000\002\228\002\000\002\220\002\000\002\212\002\000\002\204\002\000\002\200\002\000\002\196\002\000\002\192\002\000\n\b\003\000\002\196\003\000\n\b\004\000\002\196\004\000\n\b\005\000\002\196\005\000\002\196\006\000\t,\001\000\002\232\001\000\002\196\007\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\n\016\003\000\002\204\003\000\n\016\004\000\002\204\004\000\n\016\005\000\002\204\005\000\002\204\006\000\t,\001\000\002\232\001\000\002\204\007\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\n\012\003\000\002\200\003\000\n\012\004\000\002\200\004\000\n\012\005\000\002\200\005\000\002\200\006\000\t,\001\000\002\232\001\000\002\200\007\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\n(\003\000\n \003\000\n\024\003\000\005\164\001\000\005\156\001\000\002\228\003\000\002\220\003\000\002\212\003\000\n(\004\000\n \004\000\n\024\004\000\002\228\004\000\002\220\004\000\002\212\004\000\n\024\005\000\002\212\005\000\n\024\006\000\002\212\006\000\n\024\007\000\002\212\007\000\002\212\b\000\t,\001\000\002\232\001\000\002\212\t\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\n(\005\000\002\228\005\000\n(\006\000\002\228\006\000\n(\007\000\002\228\007\000\002\228\b\000\t,\001\000\002\232\001\000\002\228\t\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\n \005\000\002\220\005\000\n \006\000\002\220\006\000\n \007\000\002\220\007\000\002\220\b\000\t,\001\000\002\232\001\000\002\220\t\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\nh\003\000\002\192\003\000\002\192\004\000\t,\001\000\002\232\001\000\002\192\005\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\b\208\001\000\002H\002\000\t,\001\000\002\232\001\000\002\184\001\000\002\168\002\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\n\b\004\000\n\b\005\000\n\016\003\000\n\016\004\000\n\016\005\000\n\012\003\000\n\012\004\000\n\012\005\000\n(\003\000\n \003\000\n\024\003\000\005\164\001\000\005\156\001\000\n(\004\000\n \004\000\n\024\004\000\n\024\005\000\n\024\006\000\n\024\007\000\n(\005\000\n(\006\000\n(\007\000\n \005\000\n \006\000\n \007\000\nh\003\000\n\020\004\000\n\020\005\000\n$\003\000\n$\004\000\n$\005\000\n\028\003\000\n\028\004\000\n\028\005\000\002<\006\000\001\220\001\000\001\224\001\000\002<\007\000\002<\b\000\002<\t\000\002<\n\000\002<\011\000\002\004\006\000\002\004\007\000\002\004\b\000\002\004\t\000\002\000\005\000\002\000\006\000\002\000\007\000\002\000\b\000\002\000\t\000\002\000\n\000\002\000\011\000\003\024\002\000\012\200\001\000\n\240\001\000\n\196\001\000\n\192\001\000\n\184\001\000\003$\001\000\001\180\001\000\001\148\001\000\003$\002\000\003$\003\000\003$\004\000\003\028\001\000\003\028\002\000\000\128\001\000\000l\001\000\003\028\003\000\003\028\004\000\003 \001\000\003 \002\000\003$\005\000\002$\b\000\002 \004\000\002 \005\000\005(\003\000\005(\004\000\005(\005\000\005,\002\000\005$\002\000\005,\003\000\005$\003\000\b\232\002\000\b\236\001\000\002\028\004\000\b\236\002\000\b\236\003\000\b\228\001\000\0024\004\000\0020\004\000\0024\005\000\0020\005\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\0024\006\000\0020\006\000\0020\007\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\0020\b\000\n0\004\000\n,\004\000\n,\005\000\nx\001\000\nt\001\000\nh\001\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\002D\004\000\t\248\002\000\t,\001\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\t\248\003\000\nx\001\000\nt\001\000\nh\001\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\t\252\002\000\n\136\002\000\n\136\003\000\t,\001\000\007T\002\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\tT\002\000\tP\002\000\tL\002\000\tT\003\000\tP\003\000\tT\004\000\nd\002\000\n`\002\000\n`\003\000\n\160\002\000\n\160\003\000\002\024\b\000\002\020\003\000\002\020\004\000\005\232\001\000\005\228\001\000\005\220\001\000\002\020\005\000\002\020\006\000\002\020\007\000\002\012\002\000\002\012\003\000\002\012\004\000\002\012\005\000\002\012\006\000\002\012\007\000\002\012\b\000\002\016\002\000\002\016\003\000\002\016\004\000\002\016\005\000\002\016\006\000\002\016\007\000\002\016\b\000\002\016\t\000\011\204\002\000\011\212\005\000\004`\002\000\007l\002\000\004\004\004\000\004\004\005\000\004\b\002\000\012l\001\000\012h\001\000\0048\002\000\0044\002\000\0048\003\000\0048\004\000\0048\005\000\0048\006\000\001\216\001\000\0048\007\000\0048\b\000\b\224\001\000\0044\003\000\0044\004\000\0044\005\000\001\216\001\000\0044\006\000\0044\007\000\0040\002\000\0040\003\000\0040\004\000\004,\002\000\005\024\005\000\005\024\006\000\t,\001\000\002\232\001\000\002\188\003\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\n\148\002\000\n\144\002\000\n\144\003\000\nx\001\000\nt\001\000\nh\001\000\nX\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n<\002\000\n8\002\000\n<\003\000\n8\003\000\n<\004\000\n8\004\000\n<\005\000\n8\005\000\005\232\001\000\005\228\001\000\005\220\001\000\n8\006\000\n<\006\000\n<\007\000\006 \001\000\006\028\001\000\006\016\001\000\n<\b\000\n\004\002\000\n\000\002\000\n\000\003\000\n\004\003\000\n\004\004\000\002(\004\000\002(\005\000\b\236\001\000\002(\006\000\001\232\004\000\001\232\005\000\b\236\001\000\001\232\006\000\t,\001\000\007\148\004\000\007\144\004\000\007\140\004\000\007\136\004\000\002\232\001\000\002\184\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002t\001\000\002p\001\000\002l\001\000\002h\001\000\002d\001\000\002`\001\000\002\\\001\000\002X\001\000\007\136\005\000\007\148\005\000\007\148\006\000\006 \001\000\006\028\001\000\006\016\001\000\007\148\007\000\007\144\005\000\007\140\005\000\007\144\006\000\007\140\006\000\006 \001\000\006\028\001\000\006\016\001\000\007\140\007\000\007\144\007\000\007\144\b\000\006 \001\000\006\028\001\000\006\016\001\000\007\144\t\000\006\160\005\000\005\232\001\000\005\228\001\000\005\220\001\000\006\160\006\000\006\156\002\000\006\156\003\000\006\156\004\000\005\232\001\000\005\228\001\000\005\220\001\000\006\156\005\000\004\212\002\000\004\212\003\000\004\212\004\000\004\208\002\000\002\244\003\000\002\244\004\000\005@\003\000\0058\003\000\0050\003\000\005@\004\000\0058\004\000\0050\004\000\0058\005\000\0050\005\000\0058\006\000\0050\006\000\005H\001\000\0050\007\000\005D\001\000\005<\001\000\0054\001\000\000\128\001\000\000l\001\000\005<\002\000\0054\002\000\0054\003\000\000x\002\000\000t\002\000\000t\003\000\0030\003\000\0030\004\000\0030\005\000\t \001\000\000\132\002\000\000p\002\000\000\132\003\000\000p\003\000\000\132\004\000\000\132\005\000\000p\004\000\t \002\000\t \003\000\001\216\001\000\t$\001\000\001\216\001\000\000X\002\000\000X\003\000\t$\002\000\t$\003\000\001\216\001\000\006\144\002\000\006\144\003\000\006\144\004\000\006\128\002\000\006h\002\000\001\216\001\000\006p\002\000\012x\002\000\012\000\006\000\012\000\007\000\012\000\b\000\003\\\001\000\002\252\001\000\003\\\002\000\002\252\002\000\002\252\003\000\002\252\004\000\002\252\005\000\012\000\t\000\b\156\001\000\b\152\001\000\012\000\n\000\b\152\002\000\b\156\002\000\b\136\001\000\b\144\001\000\b\140\001\000\b\148\001\000\003`\001\000\003\000\001\000\003\000\002\000\003\000\003\000\003\000\004\000\011\252\004\000\003l\004\000\005h\001\000\003l\005\000\011\252\005\000\011\252\006\000\011\252\007\000\011\252\b\000\b\156\001\000\b\152\001\000\011\252\t\000\005\208\003\000\005\208\004\000\006\b\005\000\005\232\001\000\005\228\001\000\005\220\001\000\006 \001\000\006\028\001\000\006\016\001\000\000\\\005\000\000\\\006\000\012\236\006\000\012\236\007\000\006\000\003\000\006\000\004\000\n\196\007\000\006 \001\000\006\028\001\000\006\016\001\000\n\196\b\000\007\228\001\000\007\216\001\000\007\208\001\000\007\200\001\000\007\196\001\000\001\016\002\000\001\012\002\000\001\012\003\000\001\016\003\000\001\216\001\000\001\016\004\000\001\016\005\000\n@\004\000\n@\005\000\n@\006\000\002,\004\000\002,\005\000\b\236\001\000\002,\006\000\001\248\004\000\001\244\004\000\001\240\004\000\001\236\004\000\001\248\005\000\001\240\005\000\b\236\001\000\001\248\006\000\001\240\006\000\001\248\007\000\001\248\b\000\001\244\005\000\001\244\006\000\0028\004\000\0028\005\000\0028\006\000\0028\007\000\000\176\003\000\000\176\004\000\001\252\003\000\001\252\004\000\001\252\005\000\001\252\006\000\001\252\007\000\003|\001\000\003|\002\000\000\000\001\000\000\004\000\000\003\136\001\000\003\136\002\000\000\004\001\000\000\b\000\000\012\200\001\000\005|\001\000\001\148\001\000\005|\002\000\005|\003\000\005\128\001\000\000\b\001\000\005\180\001\000\005\140\001\000\005\136\001\000\005\132\001\000\005t\001\000\005\140\002\000\005\136\002\000\005\132\002\000\005t\002\000\012\200\001\000\005\136\003\000\005\136\004\000\005\136\005\000\005\140\003\000\005\132\003\000\000P\001\000\005x\001\000\000T\001\000\007\152\001\000\007\152\002\000\000\012\000\000\000\012\001\000\007\156\001\000\007\156\002\000\000\016\000\000\000\016\001\000\007\160\001\000\001\216\001\000\007\160\002\000\000\020\000\000\007\164\001\000\007\164\002\000\000\020\001\000\000\024\000\000\000\024\001\000\007\168\001\000\005\180\001\000\005t\001\000\007\168\002\000\000\028\000\000\000\028\001\000\007\172\001\000\005\164\001\000\007\172\002\000\000 \000\000\000 \001\000\007\176\001\000\005\232\001\000\005\228\001\000\005\220\001\000\007\176\002\000\000$\000\000\000$\001\000\007\180\001\000\006 \001\000\006\028\001\000\006\016\001\000\007\180\002\000\000(\000\000\000(\001\000\007\184\001\000\007\184\002\000\000,\000\000\007\228\001\000\007\216\001\000\007\208\001\000\007\200\001\000\007\196\001\000\007\188\001\000\007\188\002\000\000,\001\000\0000\000\000\007\192\001\000\007\192\002\000\0000\001\000\005\172\001\000\005\164\001\000\0004\000\000\012L\001\000\012H\001\000\012D\001\000\012@\001\000\012<\001\000\0128\001\000\0124\001\000\012L\002\000\012H\002\000\012D\002\000\012@\002\000\012<\002\000\0128\002\000\0124\002\000\012L\003\000\0128\003\000\012<\003\000\012H\003\000\012@\003\000\012D\003\000\005\172\001\000\005\164\001\000\012\\\001\000\0004\001\000\012X\001\000\012X\002\000\004\240\001\000\004\240\002\000\012P\001\000\012P\002\000\012P\003\000\012T\001\000\012T\002\000\0008\000\000\004\252\001\000\004\248\001\000\005\004\001\000\005\000\001\000\005\000\002\000\005\004\002\000\004\252\002\000\004\252\003\000\004\252\004\000\004\248\002\000\0008\001\000\012\196\001\000\012\196\002\000\012\196\003\000\012\196\004\000\012\192\001\000\012\192\002"), (16, "\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\b\000\t\000\n\000\011\000\012\000\r\000\014\000\015\000\016\000\017\000\018\000\019\000\020\000\021\000\022\000\023\000\024\000\025\000\026\000\027\000\028\000\029\000\030\000\031\000 \000!\000\"\000#\000$\000%\000&\000'\000(\000)\000*\000+\000,\000-\000.\000/\0000\0001\0002\0003\0004\0005\0006\0008\0009\000:\000;\000<\000=\000>\000?\000@\000A\000B\000C\000G\000K\000O\000P\000Q\000R\000S\000T\000U\000V\000W\000X\000Y\000[\000\\\000^\000_\000`\000b\000c\000d\000k\000l\000m\000n\000o\000p\000s\000t\000u\000w\000y\000{\000|\000}\000\127\000\128\000\129\000\131\000\132\000\133\000\134\000\135\000\136\000\137\000\138\000\139\000\140\000\141\000\142\000\143\000\144\000\145\000\146\000\147\000\148\000\149\000\150\000\156\000\158\000\159\000\160\000\162\000\164\000\165\000\167\000\169\000\171\000\172\000\174\000\176\000\178\000\179\000\180\000\181\000\182\000\183\000\184\000\185\000\186\000\187\000\188\000\189\000\190\000\191\000\192\000\194\000\195\000\196\000\198\000\199\000\200\000\201\000\202\000\206\000\207\000\208\000\209\000\210\000\211\000\212\000\213\000\214\000\215\000\216\000\217\000\218\000\222\000\226\000\230\000\231\000\233\000\234\000\236\000\238\000\239\000\240\000\241\000\244\000\245\000\246\000\247\000\248\000\249\000\250\000\251\000\252\000\254\000\255\001\000\001\001\001\003\001\005\001\006\001\b\001\012\001\018\001\020\001\021\001\022\001\024\001\028\001\031\001 \001!\001#\001$\001%\001&\001(\001)\001*\001+\0011\0015\0019\001:\001;\001<\001=\001?\001A\001B\001C\001D\001E\001F\001G\001H\001I\001J\001K\001L\001M\001N\001O\001P\001W\001Y\001[\001]\001^\001_\001`\001a\001b\001c\001e\001g\001h\001i\001j\001k\001l\001p\001q\001s\001t\001v\001x\001y\001z\001}\001~\001\129\001\130\001\133\001\134\001\135\001\136\001\137\001\139\001\140\001\141\001\142\001\143\001\144\001\145\001\146\001\148\001\149\001\151\001\152\001\153\001\154\001\157\001\158\001\159\001\160\001\161\001\162\001\163\001\164\001\168\001\169\001\172\001\173\001\174\001\175\001\177\001\178\001\179\001\180\001\182\001\183\001\184\001\185\001\187\001\188\001\189\001\191\001\192\001\193\001\194\001\195\001\197\001\198\001\200\001\201\001\203\001\205\001\206\001\207\001\208\001\210\001\211\001\213\001\214\001\217\001\218\001\219\001\221\001\222\001\223\001\224\001\226\001\230\001\231\001\232\001\233\001\234\001\235\001\236\001\237\001\238\001\239\001\240\001\241\001\242\001\243\001\244\001\245\001\247\001\248\001\249\001\250\001\251\002\002\002\b\002\011\002\012\002\r\002\014\002\015\002\016\002\017\002\019\002\020\002\026\002\027\002!\002\"\002(\002)\002/\0020\0021\0022\0024\002:\002;\002>\002F\002G\002I\002J\002K\002L\002M\002N\002O\002R\002S\002T\002[\002\\\002]\002_\002`\002f\002l\002m\002n\002t\002u\002w\002x\002y\002z\002\130\002\132\002\133\002\134\002\140\002\144\002\147\002\148\002\149\002\150\002\151\002\152\002\153\002\154\002\160\002\162\002\163\002\165\002\166\002\168\002\169\002\170\002\171\002\173\002\174\002\175\002\176\002\177\002\180\002\182\002\183\002\184\002\191\002\192\002\194\002\195\002\196\002\197\002\198\002\199\002\207\002\208\002\209\002\210\002\211\002\212\002\213\002\218\002\220\002\221\002\222\002\223\002\224\002\225\002\227\002\228\002\229\002\230\002\232\002\233\002\234\002\235\002\236\002\238\002\239\002\240\002\241\002\242\002\246\002\247\002\249\002\251\002\253\002\255\003\000\003\001\003\003\003\004\003\006\003\b\003\t\003\011\003\012\003\014\003\015\003\019\003\021\003\023\003\024\003\028\003\029\003!\003\"\003%\003'\003)\003*\003+\003,\003-\003.\0032\0035\0036\0039\003:\003;\003>\003?\003A\003B\003C\003D\003H\003L\003M\003Q\003R\003S\003T\003U\003Y\003`\003a\003f\003g\003h\003l\003m\003n\003o\003q\003r\003v\003w\003y\003{\003~\003\127\003\128\003\130\003\133\003\135\003\136\003\137\003\140\003\142\003\143\003\144\003\145\003\146\003\147\003\148\003\149\003\150\003\152\003\154\003\156\003\158\003\160\003\162\003\163\003\164\003\165\003\166\003\174\003\175\003\177\003\179\003\181\003\189\003\190\003\191\003\192\003\193\003\195\003\197\003\199\003\206\003\207\003\208\003\209\003\210\003\216\003\217\003\218\003\219\003\232\003\233\003\246\003\247\003\248\003\251\003\252\003\253\003\254\003\255\004\012\004\019\004\020\004\021\004-\004/\0040\0041\0042\0044\0046\0049\004:\004<\004=\004>\004?\004@\004A\004B\004O\004P\004]\004i\004n\004o\004q\004s\004t\004u\004v\004z\004{\004\127\004\128\004\130\004\132\004\134\004\136\004\137\004\139\004\140\004\141\004\143\004\144\004\146\004\159\004\161\004\164\004\165\004\167\004\169\004\170\004\183\004\184\004\185\004\186\004\187\004\189\004\190\004\203\004\204\004\206\004\209\004\211\004\212\004\215\004\216\004\229\004\230\004\231\004\232\004\234\004\235\004\236\004\237\004\239\004\240\004\241\005\012\005\r\005%\005&\005>\005?\005W\005X\005p\005q\005\137\005\138\005\162\005\163\005\187\005\188\005\212\005\213\005\237\005\238\006\006\006\007\006\031\006 \0068\0069\006Q\006R\006j\006k\006\131\006\132\006\156\006\157\006\181\006\182\006\206\006\207\006\231\006\232\007\000\007\001\007\025\007\026\0072\0073\0075\007B\007C\007[\007^\007_\007`\007a\007b\007c\007d\007f\007g\007i\007j\007k\007q\007r\007s\007t\007z\007{\007\129\007\130\007\136\007\137\007\138\007\139\007\140\007\142\007\143\007\149\007\150\007\151\007\152\007\153\007\155\007\162\007\163\007\164\007\167\007\168\007\169\007\170\007\171\007\172\007\176\007\177\007\178\007\179\007\180\007\182\007\184\007\185\007\186\007\187\007\191\007\192\007\196\007\197\007\201\007\202\007\203\007\204\007\205\007\206\007\207\007\208\007\209\007\210\007\211\007\212\007\213\007\214\007\215\007\216\007\217\007\218\007\219\007\220\007\221\007\222\007\226\007\227\007\228\007\229\007\230\007\231\007\232\007\234\007\235\007\236\007\237\007\239\007\240\007\241\007\243\007\244\007\245\007\246\007\248\007\250\007\252\007\254\007\255\b\001\b\002\b\003\b\004\b\006\b\007\b\b\b\t\b\011\b\r\b\015\b\017\b\018\b\020\b\022\b\024\b\025\b\026\b\028\b\029\b\030\b \b!\b\"\b$\b&\b*\b+\b/\b0\b2\b5\b7\b8\b9\b:\b;\b?\bB\bD\bE\bF\bI\bN\bO\bP\bS\bX\bY\bZ\b[\b\\\b^\bd\bj\bp\bs\bv\by\bz\b~\b\127\b\128\b\129\b\130\b\132\b\133\b\134\b\135\b\137\b\138\b\139\b\140\b\142\b\143\b\144\b\145\b\153\b\159\b\162\b\163\b\164\b\165\b\166\b\167\b\168\b\169\b\170\b\171\b\172\b\173\b\174\b\175\b\176\b\177\b\179\b\180\b\181\b\182\b\183\b\184\b\186\b\187\b\188\b\189\b\190\b\193\b\196\b\197\b\198\b\200\b\201\b\202\b\204\b\205\b\206\b\207\b\208\b\210\b\211\b\212\b\214\b\215\b\216\b\217\b\220\b\221\b\222\b\223\b\226\b\227\b\233\b\235\b\237\b\239\b\241\b\242\b\246\b\247\b\251\b\255\t\001\t\002\t\005\t\006\t\007\t\b\t\t\t\r\t\014\t\015\t\016\t\017\t\018\t\022\t\023\t\024\t\025\t\027\t\028\t\030\t\031\t \t$\t%\t&\t'\t(\t)\t*\t+\t/\t0\t1\t2\t3\t4\t6\t7\t8\t9\t:\t;\t<\t>\t?\t@\tA\tB\tC\tD\tE\tG\tH\tI\tJ\tK\tM\tN\tP\tQ\tR\tS\tT\tV\tW\tX\tY\t[\t\\\t^\t_\t`\ta\tb\tc\td\te\tf\th\tj\tk\tl\tn\to\tp\tr\ts\tt\tu\tw\ty\tz\t{\t}\t~\t\127\t\129\t\130\t\132\t\134\t\135\t\136\t\137\t\139\t\140\t\142\t\143\t\144\t\145\t\146\t\147\t\148\t\149\t\150\t\151\t\153\t\154\t\155\t\156\t\157\t\158\t\159\t\160\t\162\t\163\t\164\t\165\t\166\t\167\t\168\t\169\t\170\t\171\t\173\t\174\t\175\t\176\t\180\t\183\t\184\t\185\t\186\t\187\t\188\t\190\t\192\t\193\t\195\t\196\t\197\t\198\t\199\t\200\t\201\t\202\t\203\t\204\t\205\t\206\t\207\t\208\t\209\t\210\t\211\t\212\t\213\t\214\t\215\t\216\t\217\t\218\t\219\t\220\t\221\t\222\t\223\t\224\t\225\t\226\t\228\t\229\t\230\t\231\t\232\t\233\t\234\t\235\t\236\t\237\t\238\t\240\t\241\t\242\t\243\t\244\t\245\t\246\t\247\t\248\t\250\t\252\t\253\t\254\t\255\n\000\n\001\n\002\n\003\n\004\n\005\n\006\n\b\n\n\n\012\n\014\n\015\n\016\n\017\n\018\n\019\n\020\n\021\n\024\n\026\n\027\n\029\n\030\n\031\n \n!\n#\n%\n'\n(\n)\n*\n+\n,\n-\n0\n3\n6\n9\n;\n<\n=\n>\n@\nA\nB\nC\nD\nE\nF\nG\nH\nI\nJ\nK\nL\nM\nN\nO\nS\nU\nV\nX\nY\nZ\n[\n\\\n]\n`\nc\ne\nf\ng\nh\nj\nk\nl\nm\nn\no\np\nq\nr\ns\nt\nv\nw\nx\nz\n~\n\127\n\128\n\129\n\130\n\131\n\132\n\134\n\135\n\136\n\138\n\139\n\140\n\142\n\143\n\144\n\145\n\146\n\148\n\149\n\151\n\152\n\153\n\155\n\156\n\169\n\182\n\184\n\185\n\186\n\187\n\189\n\190\n\191\n\193\n\194\n\195\n\197\n\198\n\200\n\201\n\203\n\204\n\205\n\206\n\207\n\210\n\211\n\212\n\213\n\214\n\216\n\217\n\218\n\219\n\220\n\221\n\223\n\224\n\225\n\226\n\227\n\228\n\229\n\230\n\231\n\232\n\233\n\234\n\235\n\236\n\238\n\239\n\240\n\241\n\243\n\244\n\245\n\246\n\247\n\248\n\249\n\250\n\251\n\252\n\253\n\254\n\255\011\000\011\001\011\002\011\003\011\004\011\005\011\006\011\007\011\b\011\t\011\n\011\011\011\012\011\r\011\015\011\016\011\017\011\019\011\020\011\021\011\022\011\023\011\024\011\025\011\026\011\027\011\028\011\029\011\030\011\031\011 \011#\011$\011'\011(\011)\011*\011+\011,\011D\011J\011K\011L\011N\011O\011P\011Q\011R\011S\011U\011V\011W\011Y\011Z\011[\011\\\011v\011x\011y\011{\011|\011}\011~\011\127\011\128\011\129\011\130\011\143\011\144\011\145\011\148\011\149\011\152\011\155\011\157\011\158\011\159\011\160\011\161\011\175\011\188\011\190\011\196\011\198\011\200\011\202\011\203\011\227\011\229\011\231\011\233\011\234\012\002\012\004\012\006\012\b\012\t\012!\012/\0121\0123\0125\0126\012N\012P\012R\012T\012U\012m\012o\012q\012s\012t\012\140\012\148\012\154\012\156\012\158\012\160\012\161\012\185\012\187\012\189\012\191\012\192\012\216\012\218\012\220\012\222\012\223\012\247\012\249\012\250\r\018\r\020\r,\r-\r.\r/\r0\r1\r2\r3\r4\r9\r<\r=\r>\r?\r@\rA\rB\rC\rD\rE\rF\rG\rH\rI\rJ\rK\rL\rM\rN\rO\rP\rQ\rR\rS\rT\rU\rV\rW\rX\rY\rZ\r[\r\\\r]\r^\r_\r`\ra\rb\rj\rk\rl\rm\rn\rq\rr\rs\rt\ru\rv\rw\rx\ry\rz\r{\r|\r~\r\127\r\128\r\129\r\131\r\132\r\133\r\134\r\136\r\138\r\163\r\164\r\188\r\189\r\190\r\191\r\204\r\228\r\229\r\242\r\243\r\244\014\012\014\015\014\017\014\018\014\019\014\020\014\021\014\022\014\023\014\024\014\025\014\026\014\030\014\031\014 \014!\014\"\014#\014$\014%\014&\014'\014(\014)\014*\014+\014,\014-\014.\014/\0140\0141\0142\0143\0144\0145\0146\014:\014;\014<\014=\014?\014@\014A\014C\014D\014F\014G\014H\014I\014J\014K\014L\014M\014N\014f\014g\014h\014i\014v\014x\014z\014|\014\129\014\130\014\131\014\135\014\136\014\138\014\139\014\140\014\141\014\142\014\143\014\145\014\146\014\147\014\149\014\176\014\177\014\178\014\182\014\183\014\185\014\190\014\191\014\192\014\196\014\197\014\201\014\202\014\203\014\204\014\208\014\209\014\210\014\211\014\212\014\213\014\214\014\215\014\218\014\221\014\223\014\225\014\226\014\227\014\232\014\234\014\235\014\236\014\237\014\238\014\239\014\240\014\241\014\244\014\246\014\247\014\248\014\249\014\250\014\252\014\255\015\000\015\001\015\003\015\004\015\005\015\006\015\007\015\t\015\n\015\011\015\012\015\r\015\014\015\016\015\018\015\019\015\020\015\021\015\024\015\025\015\026\015\027\015\028\015\029\015\030\015\031\015!\015\"\015#\015$\015&\015(\015)\015*\015+\015.\015/\0150\0151\0155\0159\015:\015;\015<\015=\015>\015B\015C\015J\015K\015L\015N\015O\015P\015Q\015R\015S\015T\015V\015Z\015\\\015_\015`\015a\015b\015c\015d\015e\015f\015g\015h\015i\015j\015k\015l\015m\015n\015o\015p\015q\015r\015s\015t\015u\015v\015y\015z\015{\015|\015}\015\130\015\134\015\136\015\137\015\138\015\139\015\140\015\141\015\142\015\143\015\144\015\145\015\146\015\147\015\148\015\149\015\150\015\151\015\153\015\154\015\155\015\156\015\157\015\158\015\159\015\160\015\163\015\164\015\165\015\166\015\168\015\169\015\170\015\171\015\175\015\176\015\177\015\178\015\182\015\183\015\184\015\185\015\186\015\187\015\188\015\194\015\195\015\196\015\197\015\198\015\199\015\200\015\202\015\203\015\210\015\217\015\218\015\219\015\220\015\221\015\222\015\225\015\226\015\227\015\228\015\229\015\230\015\231\015\232\015\233\015\234\015\235\015\236\015\237\015\239\015\240\015\241\015\242\015\243\015\244\015\245\015\246\015\247\015\248\015\249\015\250\015\251\015\252\015\253\015\254")) + ((32, "\000\000\000\000\000\002X\001\000\001\244\001\000\r\188\001\000\r\184\001\000\r\180\001\000\r\176\001\000\r\172\001\000\012\244\001\000\r\168\001\000\r\164\001\000\r\160\001\000\r\156\001\000\r\152\001\000\r\148\001\000\r\144\001\000\r\140\001\000\r\136\001\000\r\132\001\000\r\128\001\000\r|\001\000\rx\001\000\rt\001\000\rp\001\000\rl\001\000\rh\001\000\rd\001\000\r`\001\000\012\240\001\000\r\\\001\000\rX\001\000\rT\001\000\rP\001\000\rL\001\000\rH\001\000\rD\001\000\r@\001\000\r<\001\000\r8\001\000\r4\001\000\r0\001\000\r,\001\000\r(\001\000\r$\001\000\r \001\000\r\028\001\000\r\024\001\000\r\020\001\000\r\016\001\000\r\012\001\000\r\b\001\000\r\004\001\000\r\000\001\000\012\252\001\000\012\248\001\000\000\132\001\000\000\128\001\000\000\132\002\000\000\132\003\000\001\244\002\000\002X\002\000\000\140\001\000\000\140\002\000\014\224\001\000\014\224\002\000\014\224\003\000\014\188\001\000\b4\001\000\007\224\001\000\b(\001\000\b$\001\000\b \001\000\b8\001\000\bH\001\000\b0\001\000\b,\001\000\007\228\001\000\b@\001\000\b\028\001\000\b\024\001\000\b\020\001\000\b\016\001\000\b\012\001\000\b\004\001\000\bD\001\000\b<\001\000\b\000\001\000\007\252\001\000\007\248\001\000\007\244\001\000\007\240\001\000\007\236\001\000\007\240\002\000\007\236\002\000\004\020\001\000\004\020\002\000\007\240\003\000\007\236\003\000\007\240\004\000\007\236\004\000\007\240\005\000\007\248\002\000\007\244\002\000\007\248\003\000\007\244\003\000\007\248\004\000\007\244\004\000\007\248\005\000\b\000\002\000\007\252\002\000\b\000\003\000\007\252\003\000\b\000\004\000\007\252\004\000\b\000\005\000\bX\001\000\bL\001\000\b\b\001\000\007\232\001\000\bP\001\000\bT\001\000\014\188\002\000\014\188\003\000\014\192\001\000\014\224\004\000\014\224\005\000\000|\001\000\006\156\001\000\001\252\001\000\n\208\001\000\000x\001\000\004\004\001\000\004\b\001\000\n\208\002\000\000x\002\000\b\188\001\000\b\188\002\000\b\188\003\000\b\184\001\000\001\200\001\000\001\196\001\000\000p\001\000\000d\001\000\000x\001\000\000x\002\000\001\200\002\000\001\200\003\000\001\200\004\000\006\156\001\000\004\004\001\000\007,\001\000\007,\002\000\011\156\001\000\011\152\001\000\004\000\001\000\003\252\001\000\003\248\001\000\003\244\001\000\011\156\002\000\011\152\002\000\004\000\002\000\003\252\002\000\003\248\002\000\003\244\002\000\011\156\003\000\011\152\003\000\004\000\003\000\003\252\003\000\003\248\003\000\003\244\003\000\014\176\001\000\014\156\001\000\014\144\001\000\014\156\002\000\011\156\004\000\004\000\004\000\003\248\004\000\014\164\001\000\014\148\001\000\014\164\002\000\014\128\001\000\014\172\001\000\014\168\001\000\014\160\001\000\014\152\001\000\014\160\002\000\014\168\002\000\014t\001\000\014\136\001\000\014\132\001\000\014\132\002\000\014t\002\000\011\004\001\000\014\128\002\000\011\b\001\000\014\128\003\000\011\b\002\000\011\b\003\000\011\156\005\000\004\000\005\000\003\248\005\000\006\148\001\000\004\000\006\000\003\248\006\000\014l\001\000\006\156\001\000\001|\001\000\001x\001\000\007\188\001\000\007\172\001\000\007\156\001\000\007\148\001\000\001\200\001\000\001\196\001\000\001\128\001\000\001p\001\000\000p\001\000\000d\001\000\001p\002\000\006\148\001\000\003\196\001\000\003\192\001\000\003\184\001\000\003\196\002\000\003\192\002\000\003\184\002\000\006\148\001\000\007\204\001\000\007\200\001\000\006\148\001\000\006l\001\000\006d\001\000\006\\\001\000\006l\002\000\006d\002\000\006\\\002\000\001\248\001\000\001\248\002\000\012x\001\000\006\204\001\000\r\244\001\000\r\240\001\000\004\000\001\000\003\252\001\000\r\244\002\000\r\240\002\000\004\000\002\000\003\252\002\000\r\244\003\000\r\240\003\000\004\000\003\000\003\252\003\000\r\244\004\000\004\000\004\000\r\244\005\000\004\000\005\000\006\148\001\000\004\000\006\000\004\000\007\000\n\164\001\000\004\000\b\000\t\140\001\000\t\140\002\000\002<\001\000\002<\002\000\002<\003\000\nd\001\000\n`\001\000\n\\\001\000\nX\001\000\nT\001\000\nP\001\000\nL\001\000\nH\001\000\nD\001\000\n@\001\000\nd\002\000\n`\002\000\n\\\002\000\nX\002\000\nT\002\000\nd\003\000\n`\003\000\n\\\003\000\nX\003\000\nT\003\000\014d\001\000\001\228\001\000\001\224\001\000\bh\001\000\001\228\002\000\001\224\002\000\001\220\001\000\001\216\001\000\001\220\002\000\001\216\002\000\001\212\001\000\001\208\001\000\001\204\001\000\000h\001\000\006\224\001\000\006\160\001\000\006\152\001\000\006\224\002\000\006\224\003\000\006\224\001\000\006\160\001\000\006\224\004\000\006\160\002\000\006\160\003\000\006\220\001\000\006\160\002\000\006\152\002\000\006\152\003\000\001X\001\000\000h\002\000\001\208\002\000\007|\001\000\007|\002\000\000\\\001\000\003\188\001\000\003\176\001\000\003\188\002\000\003\180\001\000\003\180\002\000\003\180\003\000\001\184\001\000\006\224\001\000\006\160\001\000\006\152\001\000\000t\001\000\006\160\002\000\006\152\002\000\000t\002\000\001\200\001\000\001\196\001\000\014p\001\000\000D\001\000\001\188\001\000\002\b\001\000\001\192\001\000\000X\001\000\001\196\002\000\001\180\001\000\001\196\003\000\001\180\002\000\014X\001\000\014T\001\000\000l\001\000\000`\001\000\014X\002\000\011\024\001\000\006\148\001\000\011\024\002\000\011\024\003\000\000l\001\000\000`\001\000\000l\002\000\000l\003\000\000`\002\000\014X\003\000\011 \001\000\011\028\001\000\011 \002\000\011\028\002\000\011 \003\000\006\148\001\000\011 \004\000\011 \005\000\000l\001\000\000`\001\000\011\028\003\000\000l\001\000\000`\001\000\011\020\001\000\000l\001\000\000`\001\000\001\176\001\000\000H\001\000\000H\002\000\000H\003\000\000H\004\000\000t\003\000\003\180\004\000\003\188\003\000\011,\001\000\n\244\001\000\n\248\001\000\001\208\003\000\001\208\004\000\n\248\002\000\n\248\003\000\014$\001\000\014 \001\000\014 \002\000\b\\\001\000\014 \003\000\014 \004\000\n\232\001\000\n\232\002\000\n\232\003\000\000H\001\000\014 \005\000\005\220\001\000\005\220\002\000\n\228\001\000\000H\001\000\014$\002\000\0110\001\000\001\180\001\000\011,\001\000\001\204\002\000\001\204\003\000\001\212\002\000\001\212\003\000\n\248\001\000\001\212\004\000\001\212\005\000\n\248\001\000\001\216\003\000\001\216\004\000\n\248\001\000\001\228\003\000\001\224\003\000\001\224\004\000\001\228\004\000\n\204\001\000\001\228\005\000\001\228\006\000\n\204\002\000\n\200\001\000\014d\002\000\001\180\001\000\014`\001\000\014\\\001\000\014`\002\000\014\\\002\000\001\180\001\000\014`\003\000\014`\004\000\001\180\001\000\nd\004\000\n`\004\000\n\\\004\000\nX\004\000\nT\004\000\nd\005\000\n`\005\000\n\\\005\000\nX\005\000\nT\005\000\nd\006\000\n`\006\000\n\\\006\000\nX\006\000\nT\006\000\nd\007\000\nd\001\000\n`\007\000\n`\001\000\n\\\001\000\nX\001\000\nT\001\000\nP\001\000\nL\001\000\nH\001\000\nD\001\000\n@\001\000\nd\b\000\nd\002\000\n`\002\000\n\\\002\000\nX\002\000\nT\002\000\nd\t\000\nd\003\000\n`\003\000\n\\\003\000\nX\003\000\nT\003\000\nd\n\000\nd\004\000\n`\004\000\n\\\004\000\nX\004\000\nT\004\000\nd\011\000\nd\005\000\n`\005\000\n\\\005\000\nX\005\000\nT\005\000\n`\b\000\nP\002\000\nL\002\000\nH\002\000\nD\002\000\n@\002\000\nP\003\000\nL\003\000\nH\003\000\nD\003\000\n@\003\000\nd\001\000\n`\001\000\n\\\001\000\nX\001\000\nT\001\000\nP\004\000\nP\001\000\nL\004\000\nL\001\000\nH\001\000\nD\001\000\n@\001\000\nd\002\000\n`\002\000\n\\\002\000\nX\002\000\nT\002\000\nP\005\000\nd\003\000\n`\003\000\n\\\003\000\nX\003\000\nT\003\000\nP\006\000\nd\004\000\n`\004\000\n\\\004\000\nX\004\000\nT\004\000\nP\007\000\nd\005\000\n`\005\000\n\\\005\000\nX\005\000\nT\005\000\nP\b\000\nP\002\000\nL\005\000\nL\002\000\nH\002\000\nD\002\000\n@\002\000\001d\001\000\012P\001\000\0128\001\000\0128\002\000\0128\003\000\000\236\001\000\000\232\001\000\012\192\001\000\n|\001\000\nx\001\000\005\000\001\000\004\252\001\000\004\248\001\000\004\244\001\000\004\240\001\000\004\236\001\000\004\232\001\000\004\228\001\000\n|\002\000\005\000\002\000\004\252\002\000\004\248\002\000\004\244\002\000\n|\003\000\005\000\003\000\004\252\003\000\004\248\003\000\004\244\003\000\n|\004\000\005\000\004\000\004\252\004\000\004\248\004\000\004\244\004\000\n|\005\000\005\000\005\000\004\252\005\000\004\248\005\000\004\244\005\000\001\180\001\000\n|\006\000\005\000\006\000\004\252\006\000\004\248\006\000\004\244\006\000\n|\007\000\005\000\007\000\004\252\007\000\004\248\007\000\004\244\007\000\n|\001\000\nx\001\000\005\000\b\000\005\000\001\000\004\252\b\000\004\252\001\000\004\248\001\000\004\244\001\000\004\240\001\000\004\236\001\000\004\232\001\000\004\228\001\000\n|\002\000\005\000\t\000\005\000\002\000\004\252\002\000\004\248\002\000\004\244\002\000\n|\003\000\005\000\n\000\005\000\003\000\004\252\003\000\004\248\003\000\004\244\003\000\n|\004\000\005\000\011\000\005\000\004\000\004\252\004\000\004\248\004\000\004\244\004\000\n|\005\000\005\000\012\000\005\000\005\000\004\252\005\000\004\248\005\000\004\244\005\000\001\180\001\000\n|\006\000\005\000\r\000\005\000\006\000\004\252\006\000\004\248\006\000\004\244\006\000\nx\002\000\004\252\t\000\004\240\002\000\004\236\002\000\004\232\002\000\004\228\002\000\nx\003\000\004\240\003\000\004\236\003\000\004\232\003\000\004\228\003\000\n|\001\000\nx\001\000\005\000\001\000\004\252\001\000\004\248\001\000\004\244\001\000\004\240\004\000\004\240\001\000\004\236\004\000\004\236\001\000\004\232\001\000\004\228\001\000\n|\002\000\005\000\002\000\004\252\002\000\004\248\002\000\004\244\002\000\004\240\005\000\n|\003\000\005\000\003\000\004\252\003\000\004\248\003\000\004\244\003\000\004\240\006\000\n|\004\000\005\000\004\000\004\252\004\000\004\248\004\000\004\244\004\000\004\240\007\000\n|\005\000\005\000\005\000\004\252\005\000\004\248\005\000\004\244\005\000\004\240\b\000\001\180\001\000\n|\006\000\005\000\006\000\004\252\006\000\004\248\006\000\004\244\006\000\004\240\t\000\nx\002\000\004\240\002\000\004\236\005\000\004\236\002\000\004\232\002\000\004\228\002\000\011\220\001\000\011\216\001\000\011\216\002\000\011\220\002\000\011\212\001\000\011\208\001\000\011\208\002\000\011\212\002\000\014\188\001\000\012\232\001\000\012\188\001\000\012\184\001\000\012\176\001\000\001\144\001\000\001p\001\000\011\220\001\000\011\216\001\000\b \001\000\012\188\002\000\012\184\002\000\012\188\003\000\012\184\003\000\012\188\004\000\012\184\004\000\007$\001\000\007 \001\000\012\188\005\000\012\184\005\000\012\184\006\000\012\188\006\000\0078\001\000\0078\002\000\0078\003\000\0078\004\000\007\028\001\000\006\252\001\000\006\252\002\000\006\012\001\000\006\b\001\000\004 \001\000\000@\001\000\000<\001\000\007\212\001\000\007\208\001\000\007\212\002\000\007\212\003\000\007\212\004\000\b\228\001\000\b\224\001\000\b\220\001\000\b\216\001\000\b\212\001\000\b\208\001\000\b\204\001\000\b\200\001\000\b\196\001\000\b\192\001\000\b\228\002\000\b\224\002\000\b\220\002\000\b\216\002\000\b\212\002\000\b\208\002\000\b\204\002\000\b\200\002\000\b\228\003\000\b\224\003\000\b\220\003\000\b\216\003\000\b\212\003\000\b\208\003\000\b\204\003\000\b\200\003\000\012,\001\000\012,\002\000\012,\003\000\006\196\001\000\006\208\001\000\006\200\001\000\006\208\002\000\006\200\002\000\006\208\003\000\006\200\003\000\006\228\001\000\000\228\001\000\012,\004\000\014\028\001\000\014\024\001\000\012\028\001\000\012 \001\000\0028\001\000\0028\002\000\0028\003\000\014\188\001\000\0124\001\000\0120\001\000\011\244\001\000\011\240\001\000\001\144\001\000\001p\001\000\012P\001\000\007\224\001\000\012\140\001\000\012\136\001\000\014\192\001\000\003<\001\000\0038\001\000\003<\002\000\0038\002\000\003,\001\000\n\148\001\000\n\144\001\000\005P\001\000\005L\001\000\005H\001\000\005D\001\000\005@\001\000\005<\001\000\0058\001\000\0054\001\000\n\148\002\000\005P\002\000\005L\002\000\005H\002\000\005D\002\000\n\148\003\000\005P\003\000\005L\003\000\005H\003\000\005D\003\000\n\148\004\000\005P\004\000\005L\004\000\005H\004\000\005D\004\000\n\148\005\000\005P\005\000\005L\005\000\005H\005\000\005D\005\000\001\180\001\000\n\148\006\000\005P\006\000\005L\006\000\005H\006\000\005D\006\000\n\148\007\000\005P\007\000\005L\007\000\005H\007\000\005D\007\000\n\148\001\000\n\144\001\000\005P\b\000\005P\001\000\005L\b\000\005L\001\000\005H\001\000\005D\001\000\005@\001\000\005<\001\000\0058\001\000\0054\001\000\n\148\002\000\005P\t\000\005P\002\000\005L\002\000\005H\002\000\005D\002\000\n\148\003\000\005P\n\000\005P\003\000\005L\003\000\005H\003\000\005D\003\000\n\148\004\000\005P\011\000\005P\004\000\005L\004\000\005H\004\000\005D\004\000\n\148\005\000\005P\012\000\005P\005\000\005L\005\000\005H\005\000\005D\005\000\001\180\001\000\n\148\006\000\005P\r\000\005P\006\000\005L\006\000\005H\006\000\005D\006\000\n\144\002\000\005L\t\000\005@\002\000\005<\002\000\0058\002\000\0054\002\000\n\144\003\000\005@\003\000\005<\003\000\0058\003\000\0054\003\000\n\148\001\000\n\144\001\000\005P\001\000\005L\001\000\005H\001\000\005D\001\000\005@\004\000\005@\001\000\005<\004\000\005<\001\000\0058\001\000\0054\001\000\n\148\002\000\005P\002\000\005L\002\000\005H\002\000\005D\002\000\005@\005\000\n\148\003\000\005P\003\000\005L\003\000\005H\003\000\005D\003\000\005@\006\000\n\148\004\000\005P\004\000\005L\004\000\005H\004\000\005D\004\000\005@\007\000\n\148\005\000\005P\005\000\005L\005\000\005H\005\000\005D\005\000\005@\b\000\001\180\001\000\n\148\006\000\005P\006\000\005L\006\000\005H\006\000\005D\006\000\005@\t\000\n\144\002\000\005@\002\000\005<\005\000\005<\002\000\0058\002\000\0054\002\000\011\236\001\000\011\232\001\000\011\228\001\000\001l\001\000\001l\002\000\011\224\001\000\004x\001\000\011\224\002\000\011\224\003\000\006L\001\000\006H\001\000\006D\001\000\006@\001\000\b\136\001\000\b\136\002\000\001\180\001\000\006L\002\000\006H\002\000\006D\002\000\006@\002\000\b\164\001\000\tD\001\000\tD\002\000\tD\003\000\001\\\001\000\012\212\001\000\012\212\002\000\001h\001\000\001t\001\000\001`\001\000\012\168\001\000\014\196\001\000\012\172\001\000\tD\004\000\012\180\001\000\012\200\001\000\012\196\001\000\012\200\002\000\012\200\003\000\011\204\001\000\012\208\001\000\012\228\001\000\012\224\001\000\012\220\001\000\012\216\001\000\006\208\001\000\001\140\001\000\001\136\001\000\012\228\002\000\012\224\002\000\012\220\002\000\012\216\002\000\006\208\002\000\001\140\002\000\012\228\003\000\012\224\003\000\001\140\003\000\012\224\004\000\nt\001\000\004\224\001\000\004\220\001\000\004\216\001\000\004\212\001\000\nt\002\000\004\224\002\000\004\220\002\000\004\216\002\000\004\212\002\000\nt\003\000\004\224\003\000\004\220\003\000\004\216\003\000\004\212\003\000\n|\001\000\nx\001\000\005\000\001\000\004\252\001\000\004\248\001\000\004\244\001\000\004\240\001\000\004\236\001\000\004\232\001\000\004\228\001\000\004\224\004\000\004\220\004\000\n|\002\000\005\000\002\000\004\252\002\000\004\248\002\000\004\244\002\000\004\224\005\000\n|\003\000\005\000\003\000\004\252\003\000\004\248\003\000\004\244\003\000\004\224\006\000\n|\004\000\005\000\004\000\004\252\004\000\004\248\004\000\004\244\004\000\004\224\007\000\n|\005\000\005\000\005\000\004\252\005\000\004\248\005\000\004\244\005\000\004\224\b\000\001\180\001\000\n|\006\000\005\000\006\000\004\252\006\000\004\248\006\000\004\244\006\000\004\224\t\000\nx\002\000\004\240\002\000\004\236\002\000\004\232\002\000\004\228\002\000\004\220\005\000\nt\001\000\004\224\001\000\004\220\001\000\004\216\004\000\004\216\001\000\004\212\001\000\nt\002\000\004\224\002\000\004\220\002\000\004\216\005\000\004\216\002\000\004\212\002\000\012\236\001\000\012\204\001\000\001\148\001\000\t,\001\000\t,\002\000\t,\003\000\t0\001\000\t4\001\000\t0\002\000\t0\003\000\t0\004\000\012\208\001\000\t@\001\000\005T\001\000\t\028\001\000\np\001\000\t@\002\000\t(\001\000\t \001\000\t\024\001\000\t\020\001\000\004\208\001\000\004\204\001\000\004\200\001\000\004\196\001\000\np\002\000\004\208\002\000\004\204\002\000\004\200\002\000\004\196\002\000\n|\001\000\nx\001\000\005\000\001\000\004\252\001\000\004\248\001\000\004\244\001\000\004\240\001\000\004\236\001\000\004\232\001\000\004\228\001\000\004\208\003\000\004\204\003\000\n|\002\000\005\000\002\000\004\252\002\000\004\248\002\000\004\244\002\000\004\208\004\000\n|\003\000\005\000\003\000\004\252\003\000\004\248\003\000\004\244\003\000\004\208\005\000\n|\004\000\005\000\004\000\004\252\004\000\004\248\004\000\004\244\004\000\004\208\006\000\n|\005\000\005\000\005\000\004\252\005\000\004\248\005\000\004\244\005\000\004\208\007\000\001\180\001\000\n|\006\000\005\000\006\000\004\252\006\000\004\248\006\000\004\244\006\000\004\208\b\000\nx\002\000\004\240\002\000\004\236\002\000\004\232\002\000\004\228\002\000\004\204\004\000\nt\001\000\004\224\001\000\004\220\001\000\004\216\001\000\004\212\001\000\004\200\003\000\nt\002\000\004\224\002\000\004\220\002\000\004\216\002\000\004\212\002\000\004\200\004\000\np\003\000\np\001\000\t(\001\000\t \001\000\t\024\001\000\t\020\001\000\004\208\001\000\004\204\001\000\004\200\001\000\004\196\003\000\004\196\001\000\t\020\002\000\np\001\000\t(\001\000\t \001\000\t\024\001\000\t\020\003\000\t\020\001\000\004\208\001\000\004\204\001\000\004\200\001\000\004\196\001\000\t(\002\000\np\001\000\t(\003\000\t(\001\000\t \001\000\t\024\001\000\t\020\001\000\004\208\001\000\004\204\001\000\004\200\001\000\004\196\001\000\t \002\000\t \003\000\t\024\002\000\t$\001\000\nl\001\000\nh\001\000\004\192\001\000\004\188\001\000\004\184\001\000\004\180\001\000\nl\002\000\004\192\002\000\004\188\002\000\004\184\002\000\004\180\002\000\n|\001\000\nx\001\000\005\000\001\000\004\252\001\000\004\248\001\000\004\244\001\000\004\240\001\000\004\236\001\000\004\232\001\000\004\228\001\000\004\192\003\000\004\188\003\000\n|\002\000\005\000\002\000\004\252\002\000\004\248\002\000\004\244\002\000\004\192\004\000\n|\003\000\005\000\003\000\004\252\003\000\004\248\003\000\004\244\003\000\004\192\005\000\n|\004\000\005\000\004\000\004\252\004\000\004\248\004\000\004\244\004\000\004\192\006\000\n|\005\000\005\000\005\000\004\252\005\000\004\248\005\000\004\244\005\000\004\192\007\000\001\180\001\000\n|\006\000\005\000\006\000\004\252\006\000\004\248\006\000\004\244\006\000\004\192\b\000\nx\002\000\004\240\002\000\004\236\002\000\004\232\002\000\004\228\002\000\004\188\004\000\nt\001\000\004\224\001\000\004\220\001\000\004\216\001\000\004\212\001\000\004\184\003\000\nt\002\000\004\224\002\000\004\220\002\000\004\216\002\000\004\212\002\000\004\184\004\000\nl\003\000\np\001\000\t(\001\000\t \001\000\t\024\001\000\t\020\001\000\004\208\001\000\004\204\001\000\004\200\001\000\004\196\001\000\004\180\003\000\012\204\001\000\t<\001\000\t8\001\000\014\188\001\000\012\232\001\000\012\188\001\000\012\184\001\000\012\176\001\000\t<\002\000\001\144\001\000\001p\001\000\t<\003\000\007\132\001\000\007\128\001\000\007\132\002\000\t<\004\000\t<\005\000\t<\006\000\011\212\001\000\011\208\001\000\b,\001\000\001\144\002\000\001\144\003\000\012\232\002\000\012\176\002\000\np\001\000\t(\001\000\t \001\000\t\024\001\000\t\020\001\000\004\208\001\000\004\204\001\000\004\200\001\000\004\196\001\000\012\176\003\000\012\232\003\000\012\232\004\000\001\180\001\000\012\232\005\000\np\001\000\t8\002\000\t(\001\000\t \001\000\t\024\001\000\t\020\001\000\004\208\001\000\004\204\001\000\004\200\001\000\004\196\001\000\np\001\000\t,\004\000\t(\001\000\t \001\000\t\024\001\000\t\020\001\000\004\208\001\000\004\204\001\000\004\200\001\000\004\196\001\000\nt\004\000\np\001\000\t(\001\000\t \001\000\t\024\001\000\t\020\001\000\004\212\004\000\004\208\001\000\004\204\001\000\004\200\001\000\004\196\001\000\001\140\004\000\001\140\005\000\012\228\004\000\np\001\000\t(\001\000\t \001\000\t\024\001\000\t\020\001\000\004\208\001\000\004\204\001\000\004\200\001\000\004\196\001\000\012\228\005\000\012\220\003\000\011\228\001\000\012\220\004\000\011\228\002\000\011\228\003\000\011`\001\000\011\\\001\000\011X\001\000\np\001\000\t(\001\000\t \001\000\t\024\001\000\t\020\001\000\004\208\001\000\004\204\001\000\004\200\001\000\004\196\001\000\011`\002\000\011\\\002\000\011`\003\000\012\216\003\000\np\001\000\t(\001\000\t \001\000\t\024\001\000\t\020\001\000\b\164\002\000\004\208\001\000\004\204\001\000\004\200\001\000\004\196\001\000\006L\003\000\006H\003\000\006D\003\000\006@\003\000\006L\004\000\006H\004\000\006D\004\000\006H\005\000\bp\001\000\006H\006\000\006L\005\000\011\236\002\000\011\232\002\000\011\232\003\000\n\140\001\000\0058\004\000\0050\001\000\005,\001\000\005(\001\000\005$\001\000\n\140\002\000\0058\005\000\0050\002\000\005,\002\000\005(\002\000\005$\002\000\n\140\003\000\0050\003\000\005,\003\000\005(\003\000\005$\003\000\n\148\001\000\n\144\001\000\005P\001\000\005L\001\000\005H\001\000\005D\001\000\005@\001\000\005<\001\000\0058\001\000\0054\001\000\0050\004\000\005,\004\000\n\148\002\000\005P\002\000\005L\002\000\005H\002\000\005D\002\000\0050\005\000\n\148\003\000\005P\003\000\005L\003\000\005H\003\000\005D\003\000\0050\006\000\n\148\004\000\005P\004\000\005L\004\000\005H\004\000\005D\004\000\0050\007\000\n\148\005\000\005P\005\000\005L\005\000\005H\005\000\005D\005\000\0050\b\000\001\180\001\000\n\148\006\000\005P\006\000\005L\006\000\005H\006\000\005D\006\000\0050\t\000\n\144\002\000\005@\002\000\005<\002\000\0058\002\000\0054\002\000\005,\005\000\n\140\001\000\0050\001\000\005,\001\000\005(\004\000\005(\001\000\005$\001\000\n\140\002\000\0050\002\000\005,\002\000\005(\005\000\005(\002\000\005$\002\000\n\140\004\000\005X\001\000\n\136\001\000\t\\\001\000\tT\001\000\tL\001\000\tH\001\000\005$\004\000\005 \001\000\005\028\001\000\005\024\001\000\005\020\001\000\n\136\002\000\005 \002\000\005\028\002\000\005\024\002\000\005\020\002\000\n\148\001\000\n\144\001\000\005P\001\000\005L\001\000\005H\001\000\005D\001\000\005@\001\000\005<\001\000\0058\001\000\0054\001\000\005 \003\000\005\028\003\000\n\148\002\000\005P\002\000\005L\002\000\005H\002\000\005D\002\000\005 \004\000\n\148\003\000\005P\003\000\005L\003\000\005H\003\000\005D\003\000\005 \005\000\n\148\004\000\005P\004\000\005L\004\000\005H\004\000\005D\004\000\005 \006\000\n\148\005\000\005P\005\000\005L\005\000\005H\005\000\005D\005\000\005 \007\000\001\180\001\000\n\148\006\000\005P\006\000\005L\006\000\005H\006\000\005D\006\000\005 \b\000\n\144\002\000\005@\002\000\005<\002\000\0058\002\000\0054\002\000\005\028\004\000\n\140\001\000\0050\001\000\005,\001\000\005(\001\000\005$\001\000\005\024\003\000\n\140\002\000\0050\002\000\005,\002\000\005(\002\000\005$\002\000\005\024\004\000\n\136\003\000\n\136\001\000\t\\\001\000\tT\001\000\tL\001\000\tH\001\000\005 \001\000\005\028\001\000\005\024\001\000\005\020\003\000\005\020\001\000\tH\002\000\np\001\000\tH\003\000\t(\001\000\t \001\000\t\024\001\000\t\020\001\000\004\208\001\000\004\204\001\000\004\200\001\000\004\196\001\000\t\\\002\000\np\001\000\t\\\003\000\t(\001\000\t \001\000\t\024\001\000\t\020\001\000\004\208\001\000\004\204\001\000\004\200\001\000\004\196\001\000\tT\002\000\tT\003\000\tL\002\000\tP\001\000\tX\001\000\n\132\001\000\n\128\001\000\005\016\001\000\005\012\001\000\005\b\001\000\005\004\001\000\n\132\002\000\005\016\002\000\005\012\002\000\005\b\002\000\005\004\002\000\n\148\001\000\n\144\001\000\005P\001\000\005L\001\000\005H\001\000\005D\001\000\005@\001\000\005<\001\000\0058\001\000\0054\001\000\005\016\003\000\005\012\003\000\n\148\002\000\005P\002\000\005L\002\000\005H\002\000\005D\002\000\005\016\004\000\n\148\003\000\005P\003\000\005L\003\000\005H\003\000\005D\003\000\005\016\005\000\n\148\004\000\005P\004\000\005L\004\000\005H\004\000\005D\004\000\005\016\006\000\n\148\005\000\005P\005\000\005L\005\000\005H\005\000\005D\005\000\005\016\007\000\001\180\001\000\n\148\006\000\005P\006\000\005L\006\000\005H\006\000\005D\006\000\005\016\b\000\n\144\002\000\005@\002\000\005<\002\000\0058\002\000\0054\002\000\005\012\004\000\n\140\001\000\0050\001\000\005,\001\000\005(\001\000\005$\001\000\005\b\003\000\n\140\002\000\0050\002\000\005,\002\000\005(\002\000\005$\002\000\005\b\004\000\n\132\003\000\n\136\001\000\t\\\001\000\tT\001\000\tL\001\000\tH\001\000\005 \001\000\005\028\001\000\005\024\001\000\005\020\001\000\005\004\003\000\n\144\004\000\n\136\001\000\t\\\001\000\tT\001\000\tL\001\000\tH\001\000\0054\004\000\005 \001\000\005\028\001\000\005\024\001\000\005\020\001\000\n\140\001\000\005H\b\000\0050\001\000\005,\001\000\005(\001\000\005$\001\000\n\140\002\000\005H\t\000\0050\002\000\005,\002\000\005(\002\000\005$\002\000\n\148\b\000\n\136\001\000\t\\\001\000\tT\001\000\tL\001\000\tH\001\000\005D\b\000\005 \001\000\005\028\001\000\005\024\001\000\005\020\001\000\n\144\002\000\005@\002\000\005<\002\000\0058\002\000\0054\002\000\n\140\001\000\0050\001\000\005,\001\000\005(\001\000\005$\001\000\n\140\002\000\0050\002\000\005,\002\000\005(\002\000\005$\002\000\012\168\001\000\005\156\001\000\005\152\001\000\004\168\001\000\004\164\001\000\004\164\002\000\004t\001\000\004p\001\000\004t\002\000\004t\003\000\001\180\001\000\004\164\003\000\004\164\004\000\004\168\002\000\004\152\001\000\004\148\001\000\004\148\002\000\004\148\003\000\b\172\001\000\005|\001\000\0020\001\000\002,\001\000\002(\001\000\002$\001\000\0020\002\000\002,\002\000\0020\003\000\0020\004\000\0020\005\000\007\000\001\000\007\000\002\000\003\204\001\000\003\200\001\000\003\200\002\000\003\204\002\000\003\204\003\000\007<\001\000\003\204\001\000\003\200\001\000\007 \001\000\006\156\001\000\004\004\001\000\0070\001\000\0070\002\000\n\188\001\000\003\208\001\000\n\188\002\000\0070\003\000\0070\004\000\007D\001\000\007L\001\000\007H\001\000\007@\001\000\0070\005\000\007L\002\000\015\b\001\000\015\004\001\000\015\b\002\000\015\004\002\000\015\b\003\000\015\004\003\000\015 \001\000\015\028\001\000\015 \002\000\015\b\004\000\015\b\005\000\000H\001\000\015\004\004\000\015\004\005\000\000H\001\000\015\004\006\000\n\164\001\000\n\164\002\000\n\164\003\000\001\180\001\000\n\164\004\000\n\164\005\000\001\180\001\000\014|\001\000\015\024\001\000\015\020\001\000\015\016\001\000\015\012\001\000\015\024\002\000\015\020\002\000\015\024\003\000\015\020\003\000\015\020\004\000\015\020\005\000\007L\001\000\007H\001\000\007@\001\000\007H\002\000\007L\001\000\007H\003\000\007H\001\000\007@\001\000\007@\002\000\006\224\001\000\006\192\001\000\006\160\001\000\006\192\002\000\006\160\002\000\006\160\003\000\004\004\001\000\006\192\003\000\007\\\001\000\006\188\001\000\0074\001\000\0074\002\000\007L\001\000\007H\001\000\007@\001\000\0074\003\000\n\184\001\000\007P\001\000\015\024\004\000\015\024\005\000\007L\001\000\007H\001\000\007@\001\000\015\016\002\000\015\012\002\000\006\208\001\000\015\012\003\000\015\012\004\000\006\224\001\000\006\160\001\000\006\208\002\000\015\016\003\000\015\016\004\000\006\224\001\000\006\160\001\000\n\236\001\000\n\240\001\000\007L\003\000\n\240\002\000\n\240\003\000\007L\001\000\007H\001\000\007@\001\000\007<\002\000\007<\003\000\007L\001\000\007H\001\000\007@\001\000\003\204\004\000\003\204\005\000\007\000\003\000\007\000\004\000\007\004\001\000\007\020\001\000\007\016\001\000\007\b\001\000\007\000\005\000\b\228\001\000\b\224\001\000\b\220\001\000\b\216\001\000\b\212\001\000\b\208\001\000\b\204\001\000\b\200\001\000\b\196\001\000\b\192\001\000\007\020\002\000\007\020\003\000\b\196\002\000\b\192\002\000\007\020\001\000\007\016\001\000\007\b\001\000\b\196\003\000\b\192\003\000\b\192\004\000\007L\001\000\007H\001\000\007@\001\000\b\192\005\000\007\016\002\000\007\b\002\000\007\012\001\000\006\208\001\000\007\024\001\000\007\020\001\000\007\016\001\000\007\b\001\000\0020\006\000\0020\007\000\012\152\001\000\001l\001\000\012\\\001\000\012X\001\000\011T\001\000\011P\001\000\011L\001\000\b\148\001\000\b\144\001\000\012\128\001\000\014\192\001\000\006\196\001\000\0048\001\000\0044\001\000\004,\001\000\0048\002\000\0044\002\000\0048\003\000\006\212\001\000\006\216\001\000\006\208\001\000\0044\003\000\006\216\002\000\006\208\002\000\006\216\003\000\014\200\001\000\0040\001\000\012(\001\000\012$\001\000\012(\002\000\012$\002\000\012(\003\000\012$\003\000\002d\001\000\002d\002\000\002d\003\000\012T\001\000\012@\001\000\012p\001\000\012l\001\000\012`\001\000\012T\002\000\012\024\001\000\012\020\001\000\012\016\001\000\012\012\001\000\012\b\001\000\012\004\001\000\012\000\001\000\011\252\001\000\011\248\001\000\012p\002\000\012p\003\000\012p\001\000\012l\001\000\012`\001\000\012\024\001\000\012\020\001\000\012\016\001\000\012\012\001\000\012\b\001\000\012\004\001\000\012\000\001\000\011\252\001\000\011\248\001\000\012l\002\000\012l\003\000\012\020\002\000\012\012\002\000\012\004\002\000\012\004\003\000\n<\001\000\n8\001\000\n4\001\000\n0\001\000\n,\001\000\012p\001\000\012l\001\000\012`\001\000\012\024\001\000\012\020\001\000\012\016\001\000\012\012\001\000\012\b\001\000\012\004\001\000\012\000\001\000\011\252\001\000\011\248\001\000\n<\002\000\n8\002\000\n4\002\000\n0\002\000\n,\002\000\012`\002\000\012\024\002\000\012\016\002\000\012\b\002\000\012\000\002\000\011\252\002\000\011\248\002\000\011\248\003\000\002T\001\000\002P\001\000\002L\001\000\002H\001\000\002D\001\000\002@\001\000\002T\002\000\002P\002\000\002L\002\000\002H\002\000\002D\002\000\002@\002\000\002T\003\000\002P\003\000\002L\003\000\002H\003\000\002D\003\000\002@\003\000\011t\001\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\011t\002\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\011t\003\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\n\220\001\000\np\001\000\t(\001\000\t \001\000\t\024\001\000\t\020\001\000\006X\001\000\006T\001\000\006P\001\000\004\208\001\000\004\204\001\000\004\200\001\000\004\196\001\000\006T\002\000\0024\001\000\0024\002\000\0024\003\000\004\160\001\000\004\156\001\000\td\001\000\004\156\002\000\np\001\000\t(\001\000\t \001\000\t\024\001\000\t\020\001\000\005\148\001\000\005\144\001\000\004\208\001\000\004\204\001\000\004\200\001\000\004\196\001\000\005\148\002\000\005\148\003\000\001\180\001\000\004\156\003\000\004\156\004\000\004\156\005\000\t`\001\000\004\160\002\000\014\188\001\000\012\232\001\000\012\188\001\000\012\184\001\000\012\176\001\000\003\148\001\000\001\144\001\000\001p\001\000\003\148\002\000\003\148\003\000\003\148\004\000\004\172\001\000\004\172\002\000\004\176\001\000\n\180\001\000\003\156\001\000\003\152\001\000\n\180\002\000\0024\004\000\b\128\001\000\b\128\002\000\000l\001\000\000`\001\000\0024\005\000\0024\006\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\002\024\001\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\002\024\002\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\002\024\003\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\002\024\004\000\n(\005\000\n$\005\000\n \005\000\n\028\005\000\n\024\005\000\nd\001\000\n`\001\000\n\\\001\000\nX\001\000\nT\001\000\nP\001\000\nL\001\000\nH\001\000\nD\001\000\n@\001\000\n(\006\000\n$\006\000\nd\002\000\n`\002\000\n\\\002\000\nX\002\000\nT\002\000\n(\007\000\nd\003\000\n`\003\000\n\\\003\000\nX\003\000\nT\003\000\n(\b\000\nd\004\000\n`\004\000\n\\\004\000\nX\004\000\nT\004\000\n(\t\000\nd\005\000\n`\005\000\n\\\005\000\nX\005\000\nT\005\000\n(\n\000\nP\002\000\nL\002\000\nH\002\000\nD\002\000\n@\002\000\n$\007\000\n<\001\000\n8\001\000\n4\001\000\n0\001\000\n,\001\000\n \006\000\012p\001\000\012l\001\000\012`\001\000\012\024\001\000\012\020\001\000\012\016\001\000\012\012\001\000\012\b\001\000\012\004\001\000\012\000\001\000\011\252\001\000\011\248\001\000\n<\002\000\n8\002\000\n4\002\000\n0\002\000\n,\002\000\n \007\000\n<\003\000\n8\003\000\n4\003\000\n0\003\000\n,\003\000\nd\001\000\n`\001\000\n\\\001\000\nX\001\000\nT\001\000\nP\001\000\nL\001\000\nH\001\000\nD\001\000\n@\001\000\n<\004\000\n8\004\000\nd\002\000\n`\002\000\n\\\002\000\nX\002\000\nT\002\000\n<\005\000\nd\003\000\n`\003\000\n\\\003\000\nX\003\000\nT\003\000\n<\006\000\nd\004\000\n`\004\000\n\\\004\000\nX\004\000\nT\004\000\n<\007\000\nd\005\000\n`\005\000\n\\\005\000\nX\005\000\nT\005\000\n<\b\000\nP\002\000\nL\002\000\nH\002\000\nD\002\000\n@\002\000\n8\005\000\n<\001\000\n8\001\000\n4\004\000\n4\001\000\n0\001\000\n,\001\000\012p\001\000\012l\001\000\012`\001\000\012\024\001\000\012\020\001\000\012\016\001\000\012\012\001\000\012\b\001\000\012\004\001\000\012\000\001\000\011\252\001\000\011\248\001\000\n<\002\000\n8\002\000\n4\005\000\n4\002\000\n0\002\000\n,\002\000\012L\001\000\012\164\001\000\012\160\001\000\012\156\001\000\012\148\001\000\012\144\001\000\012\132\001\000\012|\001\000\012h\001\000\012d\001\000\006\216\001\000\006\208\001\000\001\140\001\000\001\136\001\000\012\164\002\000\012\160\002\000\012\156\002\000\012\148\002\000\012\144\002\000\012\132\002\000\012|\002\000\012h\002\000\012d\002\000\006\216\002\000\006\208\002\000\001\140\002\000\014\188\001\000\012\164\003\000\012|\003\000\012d\003\000\001\140\003\000\012|\004\000\b$\001\000\000@\001\000\b \001\000\000<\001\000\012\164\004\000\012\164\005\000\012\164\006\000\012\164\007\000\007\020\001\000\007\016\001\000\007\b\001\000\012\164\b\000\012\164\t\000\007L\001\000\007H\001\000\007@\001\000\012\164\n\000\014\028\001\000\b0\001\000\014\024\001\000\b,\001\000\007\228\001\000\003,\001\000\t4\001\000\005\160\001\000\005\160\002\000\005\160\003\000\001\180\001\000\005\160\004\000\002\\\001\000\002\\\002\000\002\\\003\000\np\001\000\t(\001\000\t \001\000\t\024\001\000\t\020\001\000\004\208\001\000\004\204\001\000\004\200\001\000\004\196\001\000\002\\\004\000\002\\\005\000\002`\001\000\002`\002\000\002`\003\000\012p\001\000\012l\001\000\012`\001\000\012\024\001\000\012\020\001\000\012\016\001\000\012\012\001\000\012\b\001\000\012\004\001\000\012\000\001\000\011\252\001\000\011\248\001\000\002`\004\000\004(\001\000\004$\001\000\n\156\001\000\004(\002\000\004$\002\000\004$\003\000\004X\001\000\004P\001\000\004X\002\000\004P\002\000\004X\003\000\012p\001\000\012l\001\000\012`\001\000\012\024\001\000\012\020\001\000\012\016\001\000\012\012\001\000\012\b\001\000\012\004\001\000\012\000\001\000\011\252\001\000\011\248\001\000\004X\004\000\012<\001\000\012t\001\000\012H\001\000\012D\001\000\004T\001\000\004L\001\000\004T\002\000\012p\001\000\012l\001\000\012`\001\000\012\024\001\000\012\020\001\000\012\016\001\000\012\012\001\000\012\b\001\000\012\004\001\000\012\000\001\000\011\252\001\000\011\248\001\000\004T\003\000\004(\003\000\n\172\001\000\004(\004\000\004H\001\000\004D\001\000\004<\001\000\004H\002\000\004D\002\000\004H\003\000\006\216\001\000\006\208\001\000\004D\003\000\004@\001\000\012p\001\000\012l\001\000\012`\001\000\012\024\001\000\012\020\001\000\012\016\001\000\012\012\001\000\012\b\001\000\012\004\001\000\012\000\001\000\011\252\001\000\011\248\001\000\n\172\002\000\004(\005\000\004(\006\000\n\156\002\000\003\028\001\000\003\024\001\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\003\028\002\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\003\028\003\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\003\028\004\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\003\028\005\000\n\224\002\000\n\224\003\000\n\216\001\000\012p\001\000\012l\001\000\012`\001\000\012\024\001\000\012\020\001\000\012\016\001\000\012\012\001\000\012\b\001\000\012\004\001\000\012\000\001\000\011\252\001\000\011\248\001\000\003\140\001\000\003\136\001\000\003\132\001\000\003\128\001\000\003|\001\000\003x\001\000\003t\001\000\003p\001\000\003l\001\000\003h\001\000\003d\001\000\003`\001\000\003\\\001\000\003X\001\000\003T\001\000\003P\001\000\003L\001\000\003H\001\000\003D\001\000\003@\001\000\002h\001\000\002 \001\000\004\136\001\000\004\132\001\000\004\136\002\000\004\136\003\000\004\136\004\000\004\136\005\000\004\132\002\000\004\140\001\000\004\140\002\000\004\144\001\000\012p\001\000\012l\001\000\012`\001\000\012\024\001\000\012\020\001\000\012\016\001\000\012\012\001\000\012\b\001\000\012\004\001\000\012\000\001\000\011\252\001\000\011\248\001\000\004\144\002\000\004\128\001\000\012p\001\000\012l\001\000\012`\001\000\012\024\001\000\012\020\001\000\012\016\001\000\012\012\001\000\012\b\001\000\012\004\001\000\012\000\001\000\011\252\001\000\011\248\001\000\004\128\002\000\012\020\002\000\012\012\002\000\012\004\002\000\003\132\002\000\003\128\002\000\003t\002\000\003p\002\000\003d\002\000\003`\002\000\012\004\003\000\003d\003\000\003`\003\000\011H\001\000\011@\001\000\011<\001\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\011H\002\000\011@\002\000\011<\002\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\011H\003\000\011@\003\000\011<\003\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\011H\004\000\011@\004\000\011<\004\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\011H\005\000\011@\005\000\011H\006\000\n\000\001\000\t\252\001\000\t\248\001\000\t\244\001\000\t\240\001\000\002l\001\000\n\000\002\000\t\252\002\000\t\248\002\000\t\244\002\000\t\240\002\000\nd\001\000\n`\001\000\n\\\001\000\nX\001\000\nT\001\000\nP\001\000\nL\001\000\nH\001\000\nD\001\000\n@\001\000\n\000\003\000\t\252\003\000\nd\002\000\n`\002\000\n\\\002\000\nX\002\000\nT\002\000\n\000\004\000\nd\003\000\n`\003\000\n\\\003\000\nX\003\000\nT\003\000\n\000\005\000\nd\004\000\n`\004\000\n\\\004\000\nX\004\000\nT\004\000\n\000\006\000\nd\005\000\n`\005\000\n\\\005\000\nX\005\000\nT\005\000\n\000\007\000\nP\002\000\nL\002\000\nH\002\000\nD\002\000\n@\002\000\t\252\004\000\n<\001\000\n8\001\000\n4\001\000\n0\001\000\n,\001\000\t\248\003\000\012p\001\000\012l\001\000\012`\001\000\012\024\001\000\012\020\001\000\012\016\001\000\012\012\001\000\012\b\001\000\012\004\001\000\012\000\001\000\011\252\001\000\011\248\001\000\n<\002\000\n8\002\000\n4\002\000\n0\002\000\n,\002\000\t\248\004\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\t\244\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\t\244\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\t\244\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\t\244\006\000\012L\001\000\002t\001\000\012p\001\000\012l\001\000\012`\001\000\012\024\001\000\012\020\001\000\012\016\001\000\012\012\001\000\012\b\001\000\012\004\001\000\012\000\001\000\011\252\001\000\011\248\001\000\002t\002\000\005\128\001\000\003(\001\000\003(\002\000\003(\003\000\011p\001\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\172\001\000\003\168\001\000\003\164\001\000\003\160\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002\204\002\000\002\200\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\002\204\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\002\204\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\002\204\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\002\204\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\003\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002\180\002\000\002\176\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\002\180\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\002\180\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\002\180\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\002\180\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\003\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002\172\002\000\002\168\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\002\172\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\002\172\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\002\172\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\002\172\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\003\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002\164\002\000\002\160\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\002\164\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\002\164\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\002\164\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\002\164\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\003\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002\212\002\000\002\208\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\002\212\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\002\212\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\002\212\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\002\212\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\003\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002\244\002\000\002\240\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\002\244\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\002\244\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\002\244\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\002\244\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\003\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002\196\002\000\002\192\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\002\196\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\002\196\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\002\196\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\002\196\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\003\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002\188\002\000\002\184\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\002\188\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\002\188\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\002\188\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\002\188\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\003\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002\228\002\000\002\224\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\002\228\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\002\228\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\002\228\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\002\228\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\003\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002\156\002\000\002\152\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\002\156\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\002\156\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\002\156\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\002\156\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\003\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002\148\002\000\002\144\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\002\148\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\002\148\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\002\148\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\002\148\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\003\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002\140\002\000\002\136\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\002\140\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\002\140\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\002\140\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\002\140\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\003\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002\132\002\000\002\128\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\002\132\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\002\132\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\002\132\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\002\132\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\003\000\002\128\001\000\002|\001\000\002x\001\000\002|\002\000\002x\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\002|\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\002|\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\002|\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\002|\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\003\000\002x\001\000\002\236\002\000\002\232\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\002\236\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\002\236\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\002\236\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\002\236\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\003\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002\220\002\000\002\216\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\002\220\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\002\220\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\002\220\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\002\220\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\003\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\n\020\002\000\n\016\002\000\n\012\002\000\n\b\002\000\n\004\002\000\nd\001\000\n`\001\000\n\\\001\000\nX\001\000\nT\001\000\nP\001\000\nL\001\000\nH\001\000\nD\001\000\n@\001\000\n\020\003\000\n\016\003\000\nd\002\000\n`\002\000\n\\\002\000\nX\002\000\nT\002\000\n\020\004\000\nd\003\000\n`\003\000\n\\\003\000\nX\003\000\nT\003\000\n\020\005\000\nd\004\000\n`\004\000\n\\\004\000\nX\004\000\nT\004\000\n\020\006\000\nd\005\000\n`\005\000\n\\\005\000\nX\005\000\nT\005\000\n\020\007\000\nP\002\000\nL\002\000\nH\002\000\nD\002\000\n@\002\000\n\016\004\000\n<\001\000\n8\001\000\n4\001\000\n0\001\000\n,\001\000\n\012\003\000\012p\001\000\012l\001\000\012`\001\000\012\024\001\000\012\020\001\000\012\016\001\000\012\012\001\000\012\b\001\000\012\004\001\000\012\000\001\000\011\252\001\000\011\248\001\000\n<\002\000\n8\002\000\n4\002\000\n0\002\000\n,\002\000\n\012\004\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\n\b\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\n\b\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\n\b\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\n\b\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\003\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\003\020\002\000\003\016\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\003\020\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\003\020\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\003\020\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\003\020\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\003\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\0034\002\000\0030\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\0034\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\0034\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\0034\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\0034\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\003\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002\252\002\000\002\248\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\002\252\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\002\252\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\002\252\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\002\252\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\003\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\003\004\002\000\003\000\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\003\004\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\003\004\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\003\004\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\003\004\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\003\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\003\012\002\000\003\b\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\003\012\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\003\012\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\003\012\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\003\012\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\003\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\003\144\002\000\012H\001\000\002p\001\000\012p\001\000\012l\001\000\012`\001\000\012\024\001\000\012\020\001\000\012\016\001\000\012\012\001\000\012\b\001\000\012\004\001\000\012\000\001\000\011\252\001\000\011\248\001\000\002p\002\000\003$\001\000\003 \001\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\003$\002\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\003$\003\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\003$\004\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\003$\005\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003 \002\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\003\172\002\000\003\168\002\000\003\164\002\000\003\172\003\000\003\172\004\000\003\172\005\000\003\168\003\000\000L\001\000\000L\002\000\012\168\001\000\005p\001\000\005l\001\000\005h\001\000\005d\001\000\005`\001\000\r\200\001\000\r\200\002\000\014`\001\000\014\\\001\000\005p\002\000\005l\002\000\005p\003\000\005p\004\000\005p\005\000\005p\006\000\001\180\001\000\005p\007\000\005p\b\000\n\212\001\000\005l\003\000\n\212\002\000\n\212\003\000\005l\004\000\005l\005\000\001\180\001\000\005l\006\000\005l\007\000\005h\002\000\005h\003\000\005h\004\000\005d\002\000\r\204\001\000\b\180\001\000\r\204\002\000\r\204\003\000\002\028\001\000\r\204\004\000\n\176\001\000\012\172\001\000\005x\001\000\005x\002\000\005x\003\000\001\180\001\000\005x\004\000\005x\005\000\n\136\001\000\t\\\001\000\tT\001\000\tL\001\000\tH\001\000\005t\001\000\005 \001\000\005\028\001\000\005\024\001\000\005\020\001\000\005t\002\000\005t\003\000\005\\\001\000\000L\003\000\005\244\001\000\005\244\002\000\000L\004\000\005\128\002\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\t\240\003\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\011D\001\000\0118\001\000\0114\001\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\011D\002\000\0118\002\000\011D\003\000\012\004\004\000\003d\004\000\003`\004\000\012\004\005\000\003d\005\000\003`\005\000\003d\006\000\003`\006\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\003d\007\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\003d\b\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\003d\t\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\003d\n\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\003`\007\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\012\020\003\000\003\132\003\000\003\128\003\000\012\020\004\000\003\132\004\000\003\128\004\000\012\020\005\000\003\132\005\000\003\128\005\000\003\132\006\000\003\128\006\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\003\132\007\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\003\132\b\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\003\132\t\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\003\132\n\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\003\128\007\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\012\012\003\000\003t\003\000\003p\003\000\012\012\004\000\003t\004\000\003p\004\000\012\012\005\000\003t\005\000\003p\005\000\003t\006\000\003p\006\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\003t\007\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\003t\b\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\003t\t\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\003t\n\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\003p\007\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\012`\002\000\012\024\002\000\012\016\002\000\012\b\002\000\012\000\002\000\011\252\002\000\011\248\002\000\003\140\002\000\003\136\002\000\003|\002\000\003x\002\000\003l\002\000\003h\002\000\003\\\002\000\003X\002\000\003T\002\000\003P\002\000\003L\002\000\003H\002\000\003D\002\000\003@\002\000\011\248\003\000\003L\003\000\003H\003\000\011\248\004\000\003L\004\000\003H\004\000\011\248\005\000\003L\005\000\003H\005\000\003L\006\000\003H\006\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\003L\007\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\003L\b\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\003L\t\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\003L\n\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\003H\007\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\012\000\003\000\003\\\003\000\003X\003\000\012\000\004\000\003\\\004\000\003X\004\000\012\000\005\000\003\\\005\000\003X\005\000\003\\\006\000\003X\006\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\003\\\007\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\003\\\b\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\003\\\t\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\003\\\n\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\003X\007\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\011\252\003\000\003T\003\000\003P\003\000\011\252\004\000\003T\004\000\003P\004\000\011\252\005\000\003T\005\000\003P\005\000\003T\006\000\003P\006\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\003T\007\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\003T\b\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\003T\t\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\003T\n\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\003P\007\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\012\024\003\000\012\016\003\000\012\b\003\000\006\208\001\000\006\200\001\000\003\140\003\000\003\136\003\000\003|\003\000\003x\003\000\003l\003\000\003h\003\000\012\024\004\000\012\016\004\000\012\b\004\000\003\140\004\000\003\136\004\000\003|\004\000\003x\004\000\003l\004\000\003h\004\000\012\b\005\000\003l\005\000\003h\005\000\012\b\006\000\003l\006\000\003h\006\000\012\b\007\000\003l\007\000\003h\007\000\003l\b\000\003h\b\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\003l\t\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\003l\n\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\003l\011\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\003l\012\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\003h\t\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\012\024\005\000\003\140\005\000\003\136\005\000\012\024\006\000\003\140\006\000\003\136\006\000\012\024\007\000\003\140\007\000\003\136\007\000\003\140\b\000\003\136\b\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\003\140\t\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\003\140\n\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\003\140\011\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\003\140\012\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\003\136\t\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\012\016\005\000\003|\005\000\003x\005\000\012\016\006\000\003|\006\000\003x\006\000\012\016\007\000\003|\007\000\003x\007\000\003|\b\000\003x\b\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\003|\t\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\003|\n\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\003|\011\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\003|\012\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\003x\t\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\012`\003\000\003D\003\000\003@\003\000\003D\004\000\003@\004\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\003D\005\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\003D\006\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\003D\007\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\003D\b\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\003@\005\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\012p\001\000\012l\001\000\012`\001\000\012\024\001\000\012\020\001\000\012\016\001\000\012\012\001\000\012\b\001\000\012\004\001\000\012\000\001\000\011\252\001\000\011\248\001\000\004|\001\000\n\196\001\000\002h\002\000\n\196\002\000\n\192\001\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\024\002\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002\\\006\000\001\232\001\000\001\236\001\000\002\\\007\000\002\\\b\000\002\\\t\000\002\\\n\000\002\\\011\000\005\160\005\000\n\136\001\000\t\\\001\000\tT\001\000\tL\001\000\tH\001\000\005\164\001\000\005 \001\000\005\028\001\000\005\024\001\000\005\020\001\000\005\164\002\000\005\164\003\000\005\172\001\000\003,\002\000\003,\003\000\003,\004\000\005\172\002\000\005\172\003\000\005\168\001\000\012T\001\000\b\b\001\000\012d\004\000\012d\005\000\012\148\003\000\012\144\003\000\012\148\004\000\012\144\004\000\012\144\005\000\012\160\003\000\012\156\003\000\012\160\004\000\012\156\004\000\012\156\005\000\012h\003\000\012h\004\000\012h\005\000\012\132\003\000\012p\001\000\012l\001\000\012`\001\000\012\024\001\000\012\020\001\000\012\016\001\000\012\012\001\000\012\b\001\000\012\004\001\000\012\000\001\000\011\252\001\000\011\248\001\000\t\188\001\000\t\188\002\000\t\188\003\000\011l\001\000\011h\001\000\011d\001\000\011l\002\000\011h\002\000\011d\002\000\011l\003\000\011h\003\000\011d\003\000\011l\004\000\011h\004\000\011l\005\000\t\184\001\000\012\132\004\000\012\132\005\000\012\164\001\000\012\160\001\000\012\156\001\000\012\148\001\000\012\144\001\000\012\132\001\000\012|\001\000\012h\001\000\012d\001\000\006\216\001\000\006\208\001\000\006\200\001\000\001\140\001\000\001\136\001\000\012\164\002\000\012\160\002\000\012\156\002\000\012\148\002\000\012\144\002\000\012\132\002\000\012|\002\000\012h\002\000\012d\002\000\006\216\002\000\006\208\002\000\006\200\002\000\001\140\002\000\014\192\001\000\006\200\003\000\n0\004\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\n0\005\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\n0\006\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\n\224\001\000\n0\007\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\n,\004\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\n(\001\000\n$\001\000\n \001\000\n\028\006\000\n\028\001\000\n\024\001\000\n(\002\000\n$\002\000\n \002\000\n\028\007\000\n\028\002\000\n\024\002\000\n(\003\000\n$\003\000\n \003\000\n\028\b\000\n\028\003\000\n\024\003\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\t\000\n\028\004\000\n\024\004\000\n\024\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\0024\007\000\006T\003\000\006T\004\000\006T\005\000\006X\002\000\006P\002\000\006X\003\000\006P\003\000\n\220\002\000\011t\004\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\002T\004\000\002P\004\000\002L\004\000\002H\004\000\002D\004\000\002@\004\000\002T\005\000\002P\005\000\002L\005\000\002H\005\000\002D\005\000\002@\005\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\002T\006\000\002L\006\000\002H\006\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\002T\007\000\002L\007\000\002H\007\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\002T\b\000\002L\b\000\002H\b\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\002T\t\000\002L\t\000\002H\t\000\002L\n\000\002H\n\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\002L\011\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\002L\012\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\002L\r\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\002L\014\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002H\011\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002P\006\000\002D\006\000\002@\006\000\002D\007\000\002@\007\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\002D\b\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\002D\t\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\002D\n\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\002D\011\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\002@\b\000\011\248\004\000\011\248\005\000\012\000\003\000\012\000\004\000\012\000\005\000\011\252\003\000\011\252\004\000\011\252\005\000\012\024\003\000\012\016\003\000\012\b\003\000\006\208\001\000\006\200\001\000\012\024\004\000\012\016\004\000\012\b\004\000\012\b\005\000\012\b\006\000\012\b\007\000\012\024\005\000\012\024\006\000\012\024\007\000\012\016\005\000\012\016\006\000\012\016\007\000\012`\003\000\012\004\004\000\012\004\005\000\012\020\003\000\012\020\004\000\012\020\005\000\012\012\003\000\012\012\004\000\012\012\005\000\012p\001\000\012l\001\000\012`\001\000\012\024\001\000\012\020\001\000\012\016\001\000\012\012\001\000\012\b\001\000\012\004\001\000\012\000\001\000\011\252\001\000\011\248\001\000\002d\004\000\012(\004\000\012$\004\000\012$\005\000\012\128\002\000\012\128\003\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\b\148\002\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\b\148\003\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\b\148\004\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\b\148\005\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\b\144\002\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\011T\002\000\011P\002\000\011L\002\000\011T\003\000\011P\003\000\011T\004\000\012\\\002\000\012X\002\000\012X\003\000\012\152\002\000\012\152\003\000\0020\b\000\002,\003\000\002,\004\000\007\020\001\000\007\016\001\000\007\b\001\000\002,\005\000\002,\006\000\002,\007\000\002$\002\000\002$\003\000\002$\004\000\002$\005\000\006\232\001\000\007\020\001\000\007\016\001\000\007\b\001\000\006\232\002\000\006\236\001\000\007L\001\000\007H\001\000\007@\001\000\006\236\002\000\006\236\003\000\007\020\001\000\007\016\001\000\007\b\001\000\006\236\004\000\002$\006\000\002$\007\000\002$\b\000\006\240\001\000\006\240\002\000\002(\002\000\002(\003\000\002(\004\000\001|\001\000\001\128\001\000\001p\001\000\001\128\002\000\001\128\003\000\001l\001\000\002(\005\000\003\216\001\000\001\164\001\000\007d\001\000\004`\001\000\004\\\001\000\004`\002\000\004\\\002\000\004`\003\000\004\\\003\000\n\212\001\000\t\136\001\000\t\136\002\000\t\136\003\000\000H\001\000\004`\004\000\004\\\004\000\004`\005\000\004\\\005\000\004`\006\000\004`\007\000\t\132\001\000\000H\001\000\001\164\002\000\001\164\003\000\004l\001\000\004h\001\000\004l\002\000\004d\001\000\011\016\001\000\001\160\001\000\011\016\002\000\001\160\002\000\011\016\003\000\001\160\003\000\000l\001\000\000`\001\000\003\216\002\000\011\012\001\000\001\156\001\000\000l\001\000\000`\001\000\003\232\001\000\003\228\001\000\003\224\001\000\003\220\001\000\n\212\001\000\003\232\002\000\003\224\002\000\003\232\003\000\003\224\003\000\003\224\004\000\003\224\005\000\003\224\006\000\000l\001\000\000`\001\000\011\012\001\000\003\232\004\000\001\156\001\000\000l\001\000\000`\001\000\003\220\002\000\003\220\003\000\003\220\004\000\000l\001\000\000`\001\000\011\012\001\000\003\228\002\000\001\156\001\000\000l\001\000\000`\001\000\002(\006\000\002(\007\000\002(\b\000\002(\t\000\001\132\001\000\005|\002\000\005|\003\000\t\180\001\000\005|\004\000\005|\005\000\005|\006\000\b\172\002\000\004\148\004\000\004\148\005\000\004\152\002\000\005\152\002\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\003<\003\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\003<\004\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\003<\005\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\003<\006\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0038\003\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\012\140\002\000\012\136\002\000\012\136\003\000\012p\001\000\012l\001\000\012`\001\000\012P\002\000\012\024\001\000\012\020\001\000\012\016\001\000\012\012\001\000\012\b\001\000\012\004\001\000\012\000\001\000\011\252\001\000\011\248\001\000\0124\002\000\0120\002\000\0124\003\000\0120\003\000\0124\004\000\0120\004\000\0124\005\000\0120\005\000\007\020\001\000\007\016\001\000\007\b\001\000\0120\006\000\0124\006\000\0124\007\000\007L\001\000\007H\001\000\007@\001\000\0124\b\000\011\244\002\000\011\240\002\000\011\240\003\000\011\244\003\000\011\244\004\000\0028\004\000\0028\005\000\n\224\001\000\0028\006\000\012 \002\000\012 \003\000\012p\001\000\012l\001\000\012`\001\000\012\028\002\000\012\024\001\000\012\020\001\000\012\016\001\000\012\012\001\000\012\b\001\000\012\004\001\000\012\000\001\000\011\252\001\000\011\248\001\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\b\228\004\000\b\220\004\000\b\212\004\000\b\204\004\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\b\228\005\000\b\220\005\000\b\212\005\000\b\204\005\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\b\228\006\000\b\220\006\000\b\212\006\000\b\204\006\000\n\224\001\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\b\228\007\000\b\220\007\000\b\212\007\000\b\204\007\000\b\204\b\000\b\228\b\000\b\228\t\000\007L\001\000\007H\001\000\007@\001\000\b\228\n\000\b\220\b\000\b\212\b\000\b\220\t\000\b\212\t\000\007L\001\000\007H\001\000\007@\001\000\b\212\n\000\b\220\n\000\b\220\011\000\007L\001\000\007H\001\000\007@\001\000\b\220\012\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\b\224\004\000\b\216\004\000\b\208\004\000\b\200\004\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\b\200\005\000\b\224\005\000\b\224\006\000\007L\001\000\007H\001\000\007@\001\000\b\224\007\000\b\216\005\000\b\208\005\000\b\216\006\000\b\208\006\000\007L\001\000\007H\001\000\007@\001\000\b\208\007\000\b\216\007\000\b\216\b\000\007L\001\000\007H\001\000\007@\001\000\b\216\t\000\007\212\005\000\007\020\001\000\007\016\001\000\007\b\001\000\007\212\006\000\007\208\002\000\007\208\003\000\007\208\004\000\007\020\001\000\007\016\001\000\007\b\001\000\007\208\005\000\014\000\001\000\r\252\001\000\007T\001\000\007T\002\000\007T\003\000\007T\004\000\007T\005\000\b\156\001\000\b\156\002\000\007L\001\000\007H\001\000\007@\001\000\007T\006\000\007T\007\000\014\000\002\000\r\252\002\000\014\000\003\000\r\252\003\000\014\000\004\000\014\000\005\000\014\000\006\000\014\000\007\000\005\204\001\000\005\204\002\000\005\204\003\000\005\204\004\000\005\204\005\000\005\204\006\000\014\000\b\000\r\252\004\000\r\252\005\000\r\252\006\000\004\028\001\000\004\028\002\000\tx\001\000\tt\001\000\np\001\000\tx\002\000\tt\002\000\t(\001\000\t \001\000\t\024\001\000\t\020\001\000\004\208\001\000\004\204\001\000\004\200\001\000\004\196\001\000\tx\003\000\tx\004\000\002\012\001\000\002\012\002\000\014\020\001\000\014\020\002\000\014\020\003\000\014\020\004\000\007\020\001\000\007\016\001\000\007\b\001\000\014\020\005\000\t\144\001\000\t\144\002\000\t\144\003\000\t\144\004\000\t\144\005\000\n\212\001\000\t\128\001\000\t\128\002\000\t\128\003\000\001\180\001\000\t\144\006\000\t\144\007\000\007\140\001\000\007\136\001\000\007\140\002\000\t\144\b\000\t\144\t\000\t|\001\000\001\180\001\000\r\196\001\000\011x\001\000\r\196\002\000\011x\002\000\r\196\003\000\011x\003\000\r\196\004\000\011x\004\000\r\196\005\000\001\144\001\000\001p\001\000\006\208\001\000\001\140\001\000\001\136\001\000\006\208\002\000\001\140\002\000\001\140\003\000\r\196\006\000\r\196\007\000\r\196\b\000\011x\005\000\011x\006\000\011x\007\000\tp\001\000\tl\001\000\005\252\001\000\007\220\001\000\007\216\001\000\007\220\002\000\007\220\003\000\007\220\004\000\007\220\005\000\006\224\001\000\006\160\001\000\007\220\006\000\007\216\002\000\007\216\003\000\007\216\004\000\006\224\001\000\006\160\001\000\007\216\005\000\011\176\001\000\011\168\001\000\011\164\001\000\007X\001\000\007T\001\000\007(\001\000\007X\002\000\007T\002\000\007X\003\000\007T\003\000\007X\004\000\007T\004\000\007X\005\000\007T\005\000\007X\006\000\007X\007\000\007L\001\000\007H\001\000\007@\001\000\007X\b\000\011\176\002\000\011\168\002\000\011\164\002\000\007(\002\000\011\176\003\000\011\168\003\000\011\164\003\000\007(\003\000\007(\004\000\007 \001\000\007(\005\000\007(\006\000\006\224\001\000\006\160\001\000\007(\007\000\011\176\004\000\011\176\005\000\011\176\006\000\011\176\007\000\007L\001\000\007H\001\000\007@\001\000\011\176\b\000\005\212\001\000\005\212\002\000\005\212\003\000\005\212\004\000\007L\001\000\007H\001\000\007@\001\000\005\212\005\000\005\212\006\000\005\212\007\000\011\176\t\000\011\168\004\000\011\164\004\000\011\168\005\000\011\168\006\000\006\208\001\000\011\168\007\000\006\244\001\000\007L\001\000\007H\001\000\007@\001\000\006\244\002\000\011\164\005\000\011\164\006\000\006\248\001\000\006\248\002\000\011\192\001\000\011\192\002\000\011\192\003\000\011\192\004\000\007L\001\000\007H\001\000\007@\001\000\011\192\005\000\011x\001\000\011x\002\000\011x\003\000\011x\004\000\011\196\001\000\001T\001\000\001T\002\000\001T\003\000\001T\004\000\014\232\001\000\001T\005\000\002\020\001\000\011\b\001\000\002\020\002\000\002\020\003\000\001T\006\000\001T\007\000\001T\b\000\001 \001\000\001 \002\000\000\244\001\000\001\180\001\000\000\244\002\000\000\244\003\000\001 \003\000\001\000\001\000\001\000\002\000\007x\001\000\007p\001\000\007x\002\000\007t\001\000\007l\001\000\007t\002\000\001\000\003\000\001\000\004\000\001\000\005\000\001\180\001\000\001\000\006\000\001\000\007\000\001\004\001\000\001\004\002\000\t\172\001\000\t\164\001\000\t\172\002\000\t\168\001\000\t\160\001\000\t\168\002\000\001\004\003\000\001\004\004\000\001\004\005\000\001\004\006\000\001\004\007\000\000\252\001\000\000\252\002\000\001,\001\000\001(\001\000\001,\002\000\001(\002\000\001,\003\000\001,\004\000\006\208\001\000\001,\005\000\001,\006\000\001\024\001\000\011\000\001\000\001\024\002\000\001\024\003\000\001\024\004\000\011\000\002\000\011\000\003\000\001\180\001\000\n\252\001\000\001\180\001\000\001\028\001\000\001\020\001\000\001,\007\000\001$\001\000\001$\002\000\001(\003\000\006\208\001\000\001(\004\000\001(\005\000\001(\006\000\001$\001\000\001$\001\000\000\252\003\000\000\252\004\000\001\b\001\000\001\b\002\000\001\180\001\000\001\152\001\000\001\152\002\000\001\180\001\000\001\152\003\000\001\b\003\000\001\b\004\000\001 \004\000\001 \005\000\001\012\001\000\001\012\002\000\001\016\001\000\006\024\001\000\006\024\002\000\001T\t\000\001$\001\000\001T\n\000\005\196\001\000\005\196\002\000\005\196\003\000\005\196\004\000\005\196\005\000\005\196\006\000\005\196\007\000\001$\001\000\005\196\b\000\005\196\t\000\001T\011\000\011\196\002\000\011\196\003\000\011\196\004\000\011\196\005\000\011\196\006\000\011\196\007\000\006\148\001\000\001L\001\000\001L\002\000\001L\003\000\001L\004\000\001\212\001\000\001\208\001\000\001\204\001\000\001\024\001\000\0110\001\000\n\252\001\000\001\180\001\000\001P\001\000\001P\002\000\001H\001\000\001H\002\000\001H\003\000\014p\001\000\001X\001\000\002\b\001\000\001\028\001\000\001H\004\000\001D\001\000\001$\001\000\001P\003\000\001L\005\000\011\196\b\000\011\196\t\000\005\188\001\000\005\188\002\000\005\188\003\000\005\188\004\000\005\188\005\000\005\188\006\000\005\188\007\000\005\188\b\000\005\188\t\000\011\196\n\000\011\136\001\000\006\000\001\000\011\160\001\000\011\140\001\000\011\188\001\000\011\184\001\000\011\180\001\000\011\172\001\000\006\000\002\000\011\128\001\000\011\128\002\000\011\144\001\000\005\228\001\000\005\228\002\000\005\228\003\000\005\228\004\000\005\228\005\000\n\164\001\000\005\228\006\000\005\228\007\000\005\228\b\000\011\144\002\000\011\148\001\000\005\236\001\000\005\236\002\000\005\236\003\000\005\236\004\000\005\236\005\000\001\212\001\000\001\208\001\000\001\204\001\000\001l\001\000\007\184\001\000\007\184\002\000\007\184\003\000\007\168\001\000\003\236\001\000\001\168\001\000\003\236\002\000\003\236\003\000\003\236\004\000\t\200\001\000\001\172\001\000\003\236\001\000\t\200\002\000\005\236\006\000\n\164\001\000\005\236\007\000\005\236\b\000\005\236\t\000\t\192\001\000\t\196\001\000\007\196\001\000\007\192\001\000\007\180\001\000\007\176\001\000\007\164\001\000\007\160\001\000\007\144\001\000\001\180\001\000\007\196\002\000\007\192\002\000\007\180\002\000\007\176\002\000\007\164\002\000\007\160\002\000\007\196\003\000\007\180\003\000\007\164\003\000\007\196\004\000\007\196\005\000\007\196\006\000\007\180\004\000\007\164\004\000\003\240\001\000\003\240\002\000\003\240\003\000\007\192\003\000\007\192\004\000\007\192\005\000\007\176\003\000\007\160\003\000\007\152\001\000\011\148\002\000\011\132\001\000\011\200\001\000\005\252\002\000\tl\002\000\011|\001\000\tp\002\000\001\180\001\000\014\012\001\000\001T\001\000\014\012\002\000\014\012\003\000\014\012\004\000\014\012\005\000\014\012\006\000\000\208\001\000\001@\001\000\001@\002\000\001@\003\000\000\184\001\000\014\220\001\000\014\212\001\000\014\220\002\000\014\212\002\000\014\220\003\000\014\212\003\000\014\220\004\000\014\212\004\000\014\212\005\000\014\212\006\000\014\220\005\000\014\220\006\000\014\220\007\000\000\184\002\000\000\184\003\000\014\216\001\000\014\208\001\000\014\204\001\000\014\244\001\000\014\236\001\000\014\244\002\000\014\240\001\000\007d\001\000\014\240\002\000\014\204\002\000\014\204\003\000\014\204\004\000\014\204\005\000\001\180\001\000\014\216\002\000\014\208\002\000\014\216\003\000\014\208\003\000\014\208\004\000\014\208\005\000\014\216\004\000\014\216\005\000\014\216\006\000\000\188\001\000\006\144\001\000\006\136\001\000\006\128\001\000\006\144\002\000\006\136\002\000\006\128\002\000\t\152\001\000\006\144\003\000\006\136\003\000\006\128\003\000\006\144\004\000\006\136\004\000\006\128\004\000\006\144\005\000\006\136\005\000\006\144\006\000\006\144\007\000\006\144\b\000\006\144\t\000\001\180\001\000\006\144\n\000\006\144\011\000\006\136\006\000\006\136\007\000\006\136\b\000\006\128\005\000\000\188\002\000\000\188\003\000\006\140\001\000\006\132\001\000\006|\001\000\006x\001\000\015\000\001\000\014\248\001\000\015\000\002\000\014\252\001\000\t\152\001\000\014\252\002\000\006x\002\000\006x\003\000\006x\004\000\006x\005\000\006\140\002\000\006\132\002\000\006|\002\000\006\140\003\000\006\132\003\000\006|\003\000\006\140\004\000\006\132\004\000\006\140\005\000\006\140\006\000\006\140\007\000\006\140\b\000\001\180\001\000\006\140\t\000\006\140\n\000\006\132\005\000\006\132\006\000\006\132\007\000\006|\004\000\000\196\001\000\000\196\002\000\000\196\003\000\000\196\004\000\000\180\001\000\000\176\001\000\000\180\002\000\000\180\003\000\001<\001\000\0010\001\000\005\136\001\000\005\132\001\000\000\160\001\000\000\156\001\000\005\136\002\000\005\136\003\000\005\136\004\000\005\136\005\000\005\136\006\000\005\136\007\000\000\160\002\000\000\156\002\000\000\160\003\000\000\160\004\000\006\208\001\000\000\160\005\000\000\160\006\000\0018\001\000\011\000\001\000\0018\002\000\0018\003\000\0018\004\000\000\148\001\000\000\148\002\000\000\224\001\000\000\220\001\000\000\220\002\000\005\140\001\000\000\152\001\000\000\152\002\000\000\172\001\000\000\168\001\000\000\144\001\000\n\196\001\000\000\168\002\000\0014\001\000\000\164\001\000\000\152\003\000\000\164\002\000\005\140\002\000\000\220\003\000\000\164\001\000\000\224\002\000\000\148\003\000\000\164\001\000\000\160\007\000\000\156\003\000\006\208\001\000\000\156\004\000\000\156\005\000\000\164\001\000\000\156\006\000\005\132\002\000\005\132\003\000\005\132\004\000\005\132\005\000\001<\002\000\0010\002\000\000\164\001\000\0010\003\000\001<\003\000\001<\004\000\001<\005\000\000\180\004\000\000\164\001\000\bx\001\000\bx\002\000\000\180\005\000\000\180\006\000\000\176\002\000\000\176\003\000\000\164\001\000\000\176\004\000\000\176\005\000\000\192\001\000\000\192\002\000\000\192\003\000\000\192\004\000\001@\004\000\001@\005\000\000\200\001\000\000\200\002\000\000\204\001\000\006 \001\000\006 \002\000\000\208\002\000\000\164\001\000\000\212\001\000\000\212\002\000\000\212\003\000\000\212\004\000\000\164\001\000\000\216\001\000\000\216\002\000\014\012\007\000\014\012\b\000\005\180\001\000\005\180\002\000\005\180\003\000\005\180\004\000\005\180\005\000\005\180\006\000\005\180\007\000\005\180\b\000\014\012\t\000\r\232\001\000\006\016\001\000\005|\001\000\r\248\001\000\r\192\001\000\r\228\001\000\014\b\001\000\014\004\001\000\006\016\002\000\r\216\001\000\005\128\001\000\r\220\001\000\r\220\002\000\r\236\001\000\r\236\002\000\r\224\001\000\014\016\001\000\th\001\000\r\212\001\000\r\212\002\000\r\212\003\000\000\136\001\000\r\208\001\000\r\216\001\000\005\128\001\000\003(\001\000\002\012\003\000\002\012\004\000\004\028\003\000\004\028\004\000\006\012\002\000\006\012\003\000\006\012\004\000\006\b\002\000\006\252\003\000\006\252\004\000\0078\005\000\007\020\001\000\007\016\001\000\007\b\001\000\012\188\007\000\007L\001\000\007H\001\000\007@\001\000\012\188\b\000\nt\001\000\004\232\004\000\004\224\001\000\004\220\001\000\004\216\001\000\004\212\001\000\nt\002\000\004\232\005\000\004\224\002\000\004\220\002\000\004\216\002\000\004\212\002\000\nx\004\000\np\001\000\t(\001\000\t \001\000\t\024\001\000\t\020\001\000\004\228\004\000\004\208\001\000\004\204\001\000\004\200\001\000\004\196\001\000\nt\001\000\004\248\b\000\004\224\001\000\004\220\001\000\004\216\001\000\004\212\001\000\nt\002\000\004\248\t\000\004\224\002\000\004\220\002\000\004\216\002\000\004\212\002\000\n|\b\000\np\001\000\t(\001\000\t \001\000\t\024\001\000\t\020\001\000\004\244\b\000\004\208\001\000\004\204\001\000\004\200\001\000\004\196\001\000\nx\002\000\004\240\002\000\004\236\002\000\004\232\002\000\004\228\002\000\np\001\000\t(\001\000\t \001\000\t\024\001\000\t\020\001\000\004\208\001\000\004\204\001\000\004\200\001\000\004\196\001\000\000\236\002\000\000\232\002\000\000\232\003\000\000\236\003\000\001\180\001\000\000\236\004\000\000\236\005\000\0128\004\000\0128\005\000\0128\006\000\nH\004\000\n<\001\000\n8\001\000\n4\001\000\n0\001\000\n,\001\000\012p\001\000\012l\001\000\012`\001\000\012\024\001\000\012\020\001\000\012\016\001\000\012\012\001\000\012\b\001\000\012\004\001\000\012\000\001\000\011\252\001\000\011\248\001\000\nH\005\000\n<\002\000\n8\002\000\n4\002\000\n0\002\000\n,\002\000\nD\004\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\nD\005\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\nD\006\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\n\224\001\000\nD\007\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\n@\004\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\n\\\007\000\n<\001\000\n8\001\000\n4\001\000\n0\001\000\n,\001\000\012p\001\000\012l\001\000\012`\001\000\012\024\001\000\012\020\001\000\012\016\001\000\012\012\001\000\012\b\001\000\012\004\001\000\012\000\001\000\011\252\001\000\011\248\001\000\n\\\b\000\n<\002\000\n8\002\000\n4\002\000\n0\002\000\n,\002\000\nX\007\000\n(\001\000\n$\001\000\n \001\000\n\028\001\000\n\024\001\000\nX\b\000\n(\002\000\n$\002\000\n \002\000\n\028\002\000\n\024\002\000\nX\t\000\n(\003\000\n$\003\000\n \003\000\n\028\003\000\n\024\003\000\n\224\001\000\nX\n\000\n(\004\000\n$\004\000\n \004\000\n\028\004\000\n\024\004\000\nT\007\000\n\020\001\000\n\016\001\000\n\012\001\000\n\b\001\000\n\004\001\000\003\144\001\000\0034\001\000\0030\001\000\003\020\001\000\003\016\001\000\003\012\001\000\003\b\001\000\003\004\001\000\003\000\001\000\002\252\001\000\002\248\001\000\002\244\001\000\002\240\001\000\002\236\001\000\002\232\001\000\002\228\001\000\002\224\001\000\002\220\001\000\002\216\001\000\002\212\001\000\002\208\001\000\002\204\001\000\002\200\001\000\002\196\001\000\002\192\001\000\002\188\001\000\002\184\001\000\002\180\001\000\002\176\001\000\002\172\001\000\002\168\001\000\002\164\001\000\002\160\001\000\002\156\001\000\002\152\001\000\002\148\001\000\002\144\001\000\002\140\001\000\002\136\001\000\002\132\001\000\002\128\001\000\002|\001\000\002x\001\000\nP\002\000\nL\002\000\nH\002\000\nD\002\000\n@\002\000\002<\004\000\002<\005\000\n\224\001\000\002<\006\000\t\140\003\000\t\140\004\000\004\000\t\000\r\244\006\000\r\244\007\000\r\244\b\000\003\236\001\000\002\000\001\000\003\236\002\000\002\000\002\000\002\000\003\000\002\000\004\000\002\000\005\000\r\244\t\000\t\224\001\000\t\220\001\000\r\244\n\000\t\220\002\000\t\224\002\000\t\204\001\000\t\212\001\000\t\208\001\000\t\216\001\000\003\240\001\000\002\004\001\000\002\004\002\000\002\004\003\000\002\004\004\000\r\240\004\000\003\252\004\000\006\148\001\000\003\252\005\000\003\252\006\000\n\164\001\000\003\252\007\000\003\252\b\000\r\240\005\000\r\240\006\000\r\240\007\000\r\240\b\000\t\224\001\000\t\220\001\000\r\240\t\000\001\248\003\000\001\248\004\000\006l\003\000\006d\003\000\006\\\003\000\006l\004\000\006d\004\000\006\\\004\000\006d\005\000\006\\\005\000\006d\006\000\006\\\006\000\006t\001\000\006\\\007\000\006p\001\000\006h\001\000\006`\001\000\000l\001\000\000`\001\000\006h\002\000\006`\002\000\006`\003\000\007\204\002\000\007\200\002\000\007\200\003\000\003\184\003\000\003\184\004\000\003\184\005\000\014X\001\000\014T\001\000\003\196\003\000\003\192\003\000\000l\001\000\000`\001\000\014X\002\000\003\196\004\000\003\192\004\000\014X\003\000\011 \001\000\011\028\001\000\003\196\005\000\003\192\005\000\003\192\006\000\003\192\007\000\011$\001\000\000p\002\000\000d\002\000\000p\003\000\000d\003\000\000p\004\000\000p\005\000\000d\004\000\011$\002\000\011$\003\000\001\180\001\000\011(\001\000\001\196\002\000\001\180\001\000\011(\002\000\011(\003\000\001\180\001\000\007\188\002\000\007\188\003\000\007\188\004\000\007\172\002\000\007\148\002\000\001\180\001\000\007\156\002\000\014l\002\000\003\248\007\000\003\248\b\000\n\164\001\000\003\248\t\000\003\248\n\000\011\156\006\000\011\156\007\000\011\156\b\000\011\156\t\000\t\236\001\000\011\156\n\000\t\236\002\000\t\228\001\000\t\232\001\000\011\152\004\000\003\252\004\000\003\244\004\000\006\148\001\000\003\252\005\000\003\244\005\000\003\244\006\000\003\244\007\000\n\164\001\000\003\244\b\000\003\244\t\000\011\152\005\000\011\152\006\000\011\152\007\000\011\152\b\000\t\236\001\000\011\152\t\000\007,\003\000\007,\004\000\007L\001\000\007H\001\000\007@\001\000\001\200\005\000\001\200\006\000\014\224\006\000\014\224\007\000\000\140\003\000\000\140\004\000\002X\003\000\002X\004\000\002X\005\000\002X\006\000\002X\007\000\004\012\001\000\004\012\002\000\000\000\001\000\000\004\000\000\004\024\001\000\004\024\002\000\000\004\001\000\000\b\000\000\014\188\001\000\006\168\001\000\001p\001\000\006\168\002\000\006\168\003\000\006\172\001\000\000\b\001\000\006\224\001\000\006\184\001\000\006\180\001\000\006\176\001\000\006\160\001\000\006\184\002\000\006\180\002\000\006\176\002\000\006\160\002\000\014\188\001\000\006\180\003\000\006\180\004\000\006\180\005\000\006\184\003\000\006\176\003\000\000P\001\000\006\164\001\000\000T\001\000\b\232\001\000\b\232\002\000\000\012\000\000\000\012\001\000\b\236\001\000\b\236\002\000\000\016\000\000\000\016\001\000\b\240\001\000\001\180\001\000\b\240\002\000\000\020\000\000\b\244\001\000\b\244\002\000\000\020\001\000\000\024\000\000\000\024\001\000\b\248\001\000\006\224\001\000\006\160\001\000\b\248\002\000\000\028\000\000\000\028\001\000\b\252\001\000\006\208\001\000\b\252\002\000\000 \000\000\000 \001\000\t\000\001\000\007\020\001\000\007\016\001\000\007\b\001\000\t\000\002\000\000$\000\000\000$\001\000\t\004\001\000\007L\001\000\007H\001\000\007@\001\000\t\004\002\000\000(\000\000\000(\001\000\t\b\001\000\t\b\002\000\000,\000\000\np\001\000\t(\001\000\t \001\000\t\024\001\000\t\020\001\000\t\012\001\000\004\208\001\000\004\204\001\000\004\200\001\000\004\196\001\000\t\012\002\000\000,\001\000\0000\000\000\t\016\001\000\t\016\002\000\0000\001\000\006\216\001\000\006\208\001\000\0004\000\000\014@\001\000\014<\001\000\0148\001\000\0144\001\000\0140\001\000\014,\001\000\014(\001\000\014@\002\000\014<\002\000\0148\002\000\0144\002\000\0140\002\000\014,\002\000\014(\002\000\014@\003\000\014,\003\000\0140\003\000\014<\003\000\0144\003\000\0148\003\000\006\216\001\000\006\208\001\000\014P\001\000\0004\001\000\014L\001\000\014L\002\000\006(\001\000\006(\002\000\014D\001\000\014D\002\000\014D\003\000\014H\001\000\014H\002\000\0008\000\000\0064\001\000\0060\001\000\006<\001\000\0068\001\000\0068\002\000\006<\002\000\0064\002\000\0064\003\000\0064\004\000\0060\002\000\0008\001\000\014\184\001\000\014\184\002\000\014\184\003\000\014\184\004\000\014\180\001\000\014\180\002"), (16, "\000\000\000\001\000\002\000\003\000\004\000\005\000\006\000\007\000\b\000\t\000\n\000\011\000\012\000\r\000\014\000\015\000\016\000\017\000\018\000\019\000\020\000\021\000\022\000\023\000\024\000\025\000\026\000\027\000\028\000\029\000\030\000\031\000 \000!\000\"\000#\000$\000%\000&\000'\000(\000)\000*\000+\000,\000-\000.\000/\0000\0001\0002\0003\0004\0005\0006\0007\0009\000:\000;\000<\000=\000>\000?\000@\000A\000B\000C\000D\000E\000F\000G\000H\000I\000J\000K\000L\000M\000N\000O\000P\000Q\000R\000S\000T\000U\000V\000\\\000^\000_\000`\000b\000d\000e\000g\000i\000k\000l\000n\000p\000r\000s\000t\000u\000v\000w\000x\000y\000z\000{\000|\000}\000~\000\127\000\128\000\129\000\131\000\132\000\133\000\135\000\136\000\137\000\138\000\139\000\143\000\144\000\145\000\146\000\147\000\148\000\150\000\151\000\152\000\158\000\164\000\170\000\171\000\173\000\174\000\177\000\179\000\180\000\181\000\182\000\185\000\186\000\187\000\188\000\189\000\190\000\191\000\192\000\193\000\195\000\196\000\197\000\198\000\201\000\204\000\205\000\207\000\208\000\212\000\218\000\219\000\223\000\226\000\227\000\229\000\233\000\236\000\237\000\238\000\239\000\240\000\244\000\248\000\252\000\254\001\000\001\002\001\003\001\005\001\006\001\007\001\b\001\t\001\n\001\020\001\025\001\030\001\031\001!\001\"\001$\001&\001'\001(\001+\001,\001/\0010\0013\0014\0015\0016\0017\0019\001:\001;\001<\001=\001>\001?\001@\001B\001C\001D\001E\001F\001G\001K\001N\001P\001Q\001R\001S\001T\001U\001V\001X\001Y\001Z\001^\001_\001a\001b\001e\001f\001g\001h\001k\001m\001o\001p\001s\001v\001y\001{\001|\001}\001~\001\127\001\128\001\129\001\130\001\131\001\133\001\134\001\135\001\136\001\138\001\139\001\140\001\141\001\143\001\144\001\146\001\147\001\148\001\149\001\151\001\152\001\154\001\156\001\157\001\158\001\159\001\161\001\162\001\164\001\165\001\168\001\169\001\170\001\172\001\173\001\174\001\175\001\177\001\179\001\182\001\183\001\185\001\190\001\195\001\200\001\212\001\218\001\224\001\230\001\236\001\242\001\247\002\003\002\t\002\015\002\021\002\027\002!\002\"\002#\002$\002%\002&\002(\002)\0023\0028\002=\002B\002H\002M\002R\002^\002d\002j\002p\002w\002}\002\131\002\136\002\148\002\154\002\160\002\166\002\173\002\179\002\185\002\187\002\188\002\189\002\191\002\192\002\193\002\200\002\203\002\205\002\207\002\209\002\210\002\211\002\213\002\214\002\215\002\216\002\217\002\218\002\219\002\220\002\221\002\222\002\224\002\225\002\226\002\227\002\229\002\230\002\231\002\232\002\242\002\250\003\002\003\003\003\004\003\005\003\006\003\b\003\n\003\011\003\012\003\r\003\014\003\015\003\016\003\017\003\018\003\019\003\020\003\021\003\022\003\029\003\031\003!\003$\003&\003'\0031\0036\003;\003@\003F\003K\003P\003\\\003b\003h\003n\003u\003{\003\129\003\134\003\146\003\152\003\158\003\164\003\171\003\177\003\183\003\185\003\187\003\188\003\189\003\190\003\191\003\192\003\196\003\197\003\199\003\203\003\204\003\205\003\206\003\207\003\208\003\209\003\210\003\211\003\212\003\213\003\214\003\215\003\216\003\217\003\218\003\220\003\221\003\222\003\223\003\224\003\231\003\237\003\240\003\241\003\246\003\251\004\000\004\012\004\018\004\024\004\030\004%\004+\0041\0047\004=\004>\004?\004@\004A\004B\004C\004D\004E\004F\004G\004H\004J\004K\004L\004V\004[\004g\004m\004s\004y\004\128\004\134\004\140\004\146\004\152\004\153\004\163\004\164\004\174\004\175\004\185\004\186\004\187\004\188\004\189\004\195\004\200\004\212\004\218\004\224\004\230\004\237\004\243\004\249\004\255\005\005\005\006\005\016\005\019\005\027\005\028\005\030\005\031\005 \005!\005\"\005%\005&\005'\0052\0053\0054\0056\0057\005A\005K\005L\005V\005W\005X\005b\005c\005e\005f\005g\005h\005t\005v\005w\005x\005\130\005\134\005\137\005\138\005\139\005\140\005\141\005\142\005\143\005\144\005\150\005\156\005\161\005\173\005\179\005\185\005\191\005\198\005\204\005\210\005\216\005\222\005\223\005\224\005\234\005\239\005\251\006\001\006\007\006\r\006\020\006\026\006 \006&\006,\006-\0067\0068\006B\006C\006M\006N\006O\006P\006Q\006R\006X\006]\006i\006o\006u\006{\006\130\006\136\006\142\006\148\006\154\006\155\006\165\006\166\006\176\006\182\006\188\006\189\006\199\006\204\006\209\006\214\006\217\006\219\006\220\006\222\006\223\006\225\006\226\006\227\006\228\006\230\006\231\006\232\006\233\006\238\006\240\006\241\006\242\006\243\006\244\006\245\006\247\006\248\006\249\006\250\006\253\007\000\007\001\007\002\007\004\007\005\007\006\007\007\007\b\007\012\007\r\007\015\007\017\007\019\007\021\007\022\007\023\007\025\007\026\007\028\007\030\007\031\007!\007\"\007$\007%\007)\007+\007-\007.\0072\0073\0077\0078\007;\007=\007?\007@\007A\007B\007C\007D\007H\007I\007J\007K\007O\007R\007S\007V\007W\007X\007[\007\\\007^\007_\007`\007d\007e\007i\007j\007k\007l\007m\007q\007|\007}\007\130\007\131\007\132\007\136\007\137\007\138\007\139\007\141\007\142\007\146\007\147\007\149\007\151\007\154\007\156\007\157\007\159\007\162\007\164\007\165\007\166\007\169\007\171\007\172\007\173\007\174\007\176\007\178\007\180\007\181\007\182\007\183\007\184\007\185\007\198\007\199\007\212\007\213\007\214\007\217\007\218\007\223\007\240\007\247\007\248\007\254\b\004\b\n\b\016\b\022\b\028\b\029\b)\b*\b+\b,\b-\b/\b0\b1\b<\b=\b?\b@\bA\bB\bC\bD\bL\bM\bN\bO\bP\bQ\bR\bT\bU\bV\bW\bX\b[\b\\\b]\bc\bi\bo\bv\b{\b\135\b\141\b\147\b\153\b\159\b\165\b\171\b\189\b\194\b\206\b\212\b\218\b\224\b\230\b\236\b\242\t\004\t\005\t\018\t\030\t#\t$\t&\t(\t)\t*\t+\t/\t0\t4\t5\t7\t9\t;\t=\t>\t@\tA\tB\tC\tD\tN\tO\tP\tQ\tR\t_\ta\td\te\tg\ti\tj\tw\tx\ty\tz\t{\t}\t~\t\139\t\140\t\142\t\145\t\147\t\148\t\151\t\152\t\165\t\166\t\167\t\168\t\170\t\176\t\182\t\188\t\195\t\196\t\197\t\198\t\232\t\234\t\235\t\236\t\237\t\238\t\239\t\240\t\241\t\242\t\255\n\000\n\r\n\022\n\025\n!\n)\n1\n:\n<\n=\nC\nH\nT\nZ\n`\nf\nl\nr\nx\n\138\n\144\n\150\n\156\n\163\n\165\n\178\n\180\n\181\n\182\n\183\n\235\n\237\n\243\n\249\n\255\011\006\0117\0119\011?\011E\011K\011R\011\131\011\133\011\139\011\145\011\151\011\158\011\207\011\209\011\215\011\221\011\227\011\234\012\027\012\029\012#\012)\012/\0126\012g\012i\012o\012u\012{\012\130\012\179\012\181\012\187\012\193\012\199\012\206\012\255\r\001\r\007\r\r\r\019\r\026\rK\rM\rS\rY\r_\rf\r\151\r\153\r\159\r\165\r\171\r\178\r\227\r\229\r\235\r\241\r\247\r\254\014/\0141\0147\014=\014C\014J\014{\014}\014\131\014\137\014\143\014\150\014\199\014\201\014\207\014\213\014\219\014\226\015\019\015\021\015\027\015!\015'\015.\015_\015a\015g\015m\015s\015z\015\171\015\176\015\188\015\194\015\200\015\206\015\212\015\218\015\224\015\242\015\248\015\254\016\004\016\011\016<\016>\016D\016J\016P\016W\016\136\016\138\016\144\016\150\016\156\016\163\016\212\016\214\016\220\016\226\016\232\016\239\017 \017\"\017(\017.\0174\017;\017l\017n\017t\017z\017\128\017\135\017\184\017\185\017\187\017\200\017\202\017\208\017\214\017\220\017\227\018\020\018\023\018\024\018\025\018\026\018\027\018\028\018\029\018#\018$\018%\018)\018*\018+\018,\018.\018/\0180\0182\0183\0184\0185\0187\0188\0189\018:\018;\018<\018=\018>\018?\018@\018A\018B\018C\018D\018F\018G\018I\018J\018K\018U\018V\018W\018X\018Y\018Z\018[\018\\\018]\018\142\018\193\018\195\018\196\018\199\018\202\018\204\018\210\018\216\018\222\018\229\019\022\019\025\019\028\019\031\019!\019'\019-\0193\019:\019k\019n\019q\019t\019v\019|\019\130\019\136\019\143\019\192\019\213\019\216\019\219\019\222\019\224\019\230\019\236\019\242\019\249\020*\020-\0200\0203\0205\020;\020A\020G\020N\020\127\020\130\020\133\020\136\020\138\020\144\020\150\020\156\020\163\020\212\020\223\020\232\020\235\020\238\020\241\020\243\020\249\020\255\021\005\021\012\021=\021@\021C\021F\021H\021N\021T\021Z\021a\021\146\021\149\021\152\021\155\021\157\021\163\021\169\021\175\021\182\021\231\021\234\021\236\021\242\021\248\021\254\022\005\0226\022C\022E\022F\022G\022x\022y\022z\022{\022|\022}\022~\022\127\022\128\022\129\022\139\022\140\022\141\022\143\022\144\022\145\022\146\022\147\022\148\022\150\022\151\022\152\022\154\022\155\022\156\022\157\022\159\022\160\022\161\022\162\022\163\022\164\022\165\022\166\022\179\022\180\022\181\022\184\022\187\022\190\022\192\022\193\022\194\022\195\022\196\022\210\022\223\022\225\022\231\022\237\022\243\022\250\023+\0231\0237\023=\023D\023u\023v\023w\023x\023y\023{\023|\023}\023~\023\133\023\139\023\145\023\153\023\161\023\169\023\178\023\180\023\186\023\192\023\198\023\205\023\254\0241\0243\0249\024?\024E\024L\024}\024~\024\127\024\128\024\129\024\130\024\131\024\132\024\133\024\138\024\141\024\142\024\143\024\144\024\145\024\146\024\147\024\148\024\149\024\150\024\151\024\152\024\153\024\154\024\155\024\156\024\157\024\158\024\159\024\172\024\173\024\174\024\175\024\176\024\177\024\183\024\189\024\195\024\202\024\251\024\254\025\000\025\001\025\002\025\003\025\004\025\005\025\006\025\007\025\b\025\t\025\r\025\014\025\015\025\016\025\017\025\018\025\019\025\020\025\024\025\025\025\029\025\030\025\"\025#\025$\025%\025&\025'\025(\025)\025*\025+\025-\025.\025/\0250\0251\0252\0253\0254\0256\0258\025:\025<\025=\025?\025A\025C\025D\025E\025G\025H\025I\025K\025L\025M\025O\025Q\025U\025V\025Z\025^\025a\025c\025d\025e\025h\025m\025n\025o\025r\025w\025x\025y\025z\025{\025|\025}\025~\025\127\025\128\025\129\025\130\025\131\025\132\025\133\025\134\025\135\025\141\025\147\025\153\025\160\025\209\025\210\025\211\025\212\025\225\025\227\025\229\025\231\025\236\025\237\025\238\025\242\025\243\025\245\025\246\025\247\025\248\025\249\025\250\025\252\025\253\025\254\026\011\026\020\026\029\026&\0260\0261\0262\0266\0267\0269\026>\026?\026@\026D\026E\026y\026z\026{\026\127\026\128\026\130\026\135\026\136\026\137\026\141\026\142\026\146\026\147\026\148\026\149\026\153\026\154\026\157\026\158\026\159\026\160\026\161\026\162\026\166\026\167\026\168\026\170\026\172\026\173\026\174\026\175\026\176\026\177\026\178\026\179\026\180\026\181\026\182\026\183\026\184\026\185\026\186\026\187\026\188\026\190\026\201\026\202\026\203\026\204\026\205\026\206\026\207\026\208\026\212\026\213\026\214\026\215\026\216\026\217\026\218\026\220\026\221\026\223\026\224\026\225\026\227\026\228\026\229\026\230\026\232\026\234\026\236\026\238\026\240\026\241\026\243\026\246\026\248\026\249\026\250\026\251\026\252\026\253\026\254\026\255\027\001\027\002\027\004\027\005\027\006\027\007\027\n\027\011\027\012\027\r\027\016\027\017\027\023\027\025\027\027\027\029\027\031\027 \027$\027%\027)\027-\027/\0270\0273\0274\0275\0276\0277\027;\027<\027=\027>\027?\027@\027D\027E\027F\027G\027I\027J\027L\027M\027N\027R\027S\027T\027U\027V\027W\027X\027Y\027]\027^\027_\027`\027a\027b\027d\027e\027f\027g\027h\027i\027j\027l\027m\027n\027o\027p\027q\027r\027s\027u\027v\027w\027x\027y\027{\027|\027~\027\127\027\128\027\129\027\130\027\132\027\133\027\134\027\135\027\137\027\138\027\140\027\141\027\142\027\143\027\144\027\145\027\146\027\147\027\148\027\150\027\152\027\153\027\154\027\156\027\157\027\158\027\160\027\161\027\162\027\163\027\165\027\167\027\168\027\169\027\171\027\172\027\173\027\175\027\176\027\178\027\180\027\181\027\182\027\183\027\185\027\186\027\188\027\189\027\190\027\191\027\192\027\193\027\194\027\195\027\196\027\197\027\199\027\200\027\201\027\202\027\203\027\204\027\205\027\206\027\208\027\209\027\210\027\211\027\212\027\213\027\214\027\215\027\216\027\217\027\219\027\220\027\221\027\222\027\226\027\229\027\230\027\231\027\232\027\233\027\234\027\236\027\238\027\239\027\241\027\242\027\243\027\244\027\245\027\246\027\247\027\248\027\249\027\250\027\251\027\252\027\253\027\254\027\255\028\000\028\001\028\002\028\003\028\004\028\005\028\006\028\007\028\b\028\t\028\n\028\011\028\012\028\r\028\014\028\015\028\016\028\018\028\019\028\020\028\021\028\022\028\023\028\024\028\025\028\026\028\027\028\031\028 \028!\028\"\028#\028%\028&\028'\028(\028*\028+\028,\028-\028/\0280\0281\0282\0283\028;\028A\028D\028E\028F\028G\028H\028I\028J\028K\028L\028M\028N\028O\028P\028Q\028R\028S\028T\028U\028V\028W\028X\028Z\028\\\028]\028^\028_\028`\028a\028b\028c\028d\028e\028f\028h\028j\028l\028n\028o\028p\028q\028r\028s\028t\028u\028x\028z\028{\028}\028~\028\127\028\128\028\129\028\131\028\133\028\135\028\136\028\137\028\138\028\139\028\140\028\141\028\144\028\147\028\148\028\151\028\154\028\156\028\157\028\158\028\159\028\161\028\162\028\163\028\164\028\165\028\166\028\167\028\168\028\169\028\173\028\175\028\176\028\178\028\179\028\180\028\181\028\182\028\183\028\186\028\189\028\191\028\192\028\193\028\194\028\196\028\197\028\198\028\199\028\200\028\201\028\202\028\203\028\204\028\205\028\206\028\208\028\209\028\210\028\212\028\216\028\217\028\218\028\219\028\220\028\221\028\222\028\224\028\225\028\226\028\228\028\229\028\230\028\232\028\233\028\234\028\235\028\236\028\238\028\239\028\241\028\242\028\243\028\245\028\247\028\248\028\250\028\251\028\252\028\254\028\255\029\000\029\002\029\003\029\005\029\006\029\b\029\t\029\n\029\011\029\012\029\015\029\016\029\017\029\018\029\019\029\021\029\022\029\023\029\024\029\025\029\026\029\028\029\029\029\030\029\031\029 \029!\029\"\029#\029$\029%\029&\029'\029(\029)\029+\029,\029-\029.\0290\0291\0292\0293\0294\0295\0296\0297\0298\0299\029:\029;\029<\029=\029>\029?\029@\029A\029B\029C\029D\029E\029F\029H\029I\029J\029K\029L\029M\029N\029O\029P\029Q\029R\029S\029T\029W\029X\029Y\029Z\029[\029\\\029]\029^\029_\029`\029a\029e\029i\029j\029p\029v\029w\029\129\029\135\029\141\029\142\029\152\029\157\029\168\029\169\029\170\029\172\029\173\029\174\029\175\029\176\029\182\029\200\029\206\029\212\029\218\029\225\030\018\030\024\030*\0300\0306\030<\030C\030t\030y\030z\030{\030}\030~\030\127\030\128\030\129\030\130\030\131\030\133\030\135\030\136\030\137\030\138\030\141\030\142\030\143\030\144\030\145\030\146\030\147\030\148\030\150\030\151\030\152\030\153\030\155\030\157\030\158\030\160\030\161\030\162\030\163\030\164\030\167\030\168\030\169\030\170\030\173\030\176\030\178\030\180\030\181\030\182\030\187\030\189\030\190\030\191\030\192\030\193\030\194\030\195\030\196\030\202\030\205\030\210\030\211\030\212\030\215\030\217\030\218\030\219\030\220\030\221\030\223\030\226\030\227\030\229\030\230\030\231\030\232\030\233\030\235\030\236\030\237\030\238\030\239\030\241\030\242\030\243\030\244\030\245\030\247\030\248\030\249\030\250\030\251\030\254\031\001\031\002\031\003\031\005\031\006\031\007\031\b\031\t\031\011\031\012\031\r\031\014\031\018\031\019\031\020\031\021\031\022\031\023\031\024\031\025\031\026\031\027\031\028\031\029\031\030\031\031\031 \031!\031\"\031#\031$\031'\031(\031)\031*\031+\0310\0314\0316\0317\0318\0319\031:\031;\031<\031=\031>\031?\031@\031A\031B\031C\031D\031E\031G\031H\031I\031J\031K\031L\031M\031N\031Q\031R\031S\031T\031V\031W\031X\031Y\031]\031^\031_\031`\031d\031e\031f\031g\031h\031i\031j\031t\031u\031v\031w\031x\031y\031z\031|\031}\031\132\031\139\031\140\031\141\031\142\031\143\031\144\031\147\031\148\031\149\031\150\031\151\031\152\031\153\031\154\031\155\031\156\031\157\031\158\031\159\031\161\031\162\031\163\031\164\031\165\031\166\031\167\031\168\031\169\031\170\031\171\031\172\031\173\031\174\031\175\031\176")) and nullable = - "\000\000\016)\001\000@\000\001\195\132\000\000\127\2240\000\000\015\255\224\000\001\002\b@\0000\000" + "\000\000\016)\001\000@\000\001\192p\128\000?\248\006\000\000\007\255\240\000\000\b\016\b \000\012\b\000" and first = - (139, "3\248D\024\177U\191\140\207,\005A\247\"\128\007\028\006\127\b\131\022*\183\241\153\229\128\168>\228P\000\227\128\002\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\196 \004\b\000F\002E\130\000 \n\128\000\001\004\000\b\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\001\000\016\016\000\b\024\b\000\000\000\004\000\000\000\000\000\000` \002\000\000\002\001\000\000\000\000\128\000\000\000\000\000\004\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\0067\b\001\022\n7\240\145\229\128 >\128P\000c\128\006\000\0008\b\0000\\ \000\001\000\000\000\000\000\000\000D\000\000\000\000\004\000\004\000\000\000\002\000\000\000\000\000\b\128\000\000\000\000\192\000\128\000\000\000@\000\000\000\000\004\128\b \002\b\000\016\128\000\b\000\006@\000\b\000\012\254\017\006,Uo\2273\203\001@}\200\160\001\199\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000@\000\000\000\004\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\016\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\b\000\000\000\000\016\b\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\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\006\127\b\131\022*\183\241\153\229\128\168>\228P\000\227\128\000\000\000\002@\002\000\000\000\000\128\000\000\000\000\000@\000\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000I\000\b\128\000\000\002\000\000\000\000\000\001\000\002\000\000\t \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\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\000\0000\000\001\128\000\001\130\225\000\000\b\000\000\000\000\000\000\207\225\016b\197V\2543<\176\021\007\220\138\000\028p\000\000\000\000\000\000\000\000\000\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\003\000\000\000\000\000\000\000\000\000\000\000\000\144\000\004\000A\000\162\016\000\001\000\000\192\000\001\000\001\159\194 \197\138\173\252fy`(\015\184\020\0008\224\001\138@\n\018\000\140\004\138\132\000@\020\128\000\002\b\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\001{v\"\004\023\241R\000\004\012\028\014\156pX\020\026\000\196 \004\b\000D\002E\002\000 \n\000\000\001\004\000\024\132\000\129\000\b\192H\160@\004\001@\000\000 \128\003\016\128\017\000\160\024\t\028X\000\000(\005\000\0060\000\000\000\000\000\000\000\000\"\128\000\000\000\000\000\000\000\000\000\002\000\000\128\004\000\000\000 \000\000\128\000\000\016\000\002@\000\016\001\004\000\b@\000\004\000\003\000\000\004\000\000H\000\130\000 \128\001\b\000\000\128\000`\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\024\220 \004X(\223\194G\150\000\128\250\001@\001\142\000\b\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\003\016\128\016 \001\024\t\022\b\000\128*\000\000\004\016\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\001\141\194\000E\130\141\252$y`\b\015\160\020\000\024\224\001\128\000\014\002\000\012\023\b\000\000@\000\000\000\000\b\0000\000\001\128\000\001\130\225\000\000\b\000\000\000\000\000\000\198\225\000\"\193F\254\018<\176\004\007\208\n\000\012p\000\192\000\007\001\000\006\011\132\000\000 \000\000\000\000\000\000\024\000\000\192\000\000\193p\128\000\004\000\000\000\000\000\000\002\000\000\t \001\000\000\000\000@\000\000\000\000\000 \000`\000\003\128\128\003\005\194\000\000\016\000\000\000\000\000\000\012\000\000p\016\000`\184@\000\002\000\000\000\000\000@\000@\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\0000\000\001\192@\001\130\225\000\000\b\000\000\000\000\000\000\006!\000 @\0020\018,\016\001\000T\000\000\b\160\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\128\003\020\128\021\004\160\024\t\029X\000\000(\005\000\0060\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\012B\000D\002\128`$q`\000\000\160\020\000\024\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000@\000\000\128\000\000\000\000\000\000\000\000\000\000\002 \000\000\000\000 \000 \000\000\000\016\000\000\000\128\000D\000\000\000\000\004\000\004\000\000\000\002\000\000\000\016\000\b\128\000\000\000\000\128\000\128\000\000\000@\000\000\002\000\003\016\128\017\000\160\024\t\028X\000\000(\005\000\0060\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\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\128\000\000\000\000\000\000\000\000\000\192\000\007\001\000\006\011\132\000\000 \000\000\000\000\000\000\024\000\000\224 \000\193p\128\000\004\000\000\000\000\000\000g\240\1365b\171\127\025\158X\n\003\238\005\000\0308\000@\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\012B\000@\128\004`$X \002\000\160\000\000\016@\001\136@\b\016\000\140\004\139\004\000@\020\000\000\002\b\0001\b\001\002\000\017\128\145`\128\b\002\128\000\000A\000\006!\000 @\0020\018,\016\001\000T\000\000\b \000\196 \004\b\000F\002E\130\000 \n\128\000\001\004\000\b\000\000\000\000\000\192\000\000\000\000\000\000\000\000\000\000\003\016\128\016 \001\024\t\022\b\000\128*\000\000\004\016\000 \000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\004\000@@\000 ` \000\000\000\016\000\000\000\000\000\001\128\128\b\000\000\b\004\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\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\220 \004X(\223\194G\150\000\128\250\001@\001\142\000\024\000\000\224 \000\193p\128\000\004\000\000\000\000\000\000\001\016\000\000\000\000\016\000\016\000\000\000\b\000\000\000\000\000\"\000\000\000\000\003\000\002\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\002\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\t\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\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\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\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\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\016\000~\000\192\136\000\000|B\000@\128\016(\176\000\000\000\000\016\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\000b\000\003\192\128\003\005\194\128\000\016\001\000\016\000\b\000\000\002\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\001\000\016\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\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\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\004\000@@\000 ` \000\000\000\016\000\000\000\000\000\000\000\000\000\000\004\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\000\006\002\000 \000\000 \016\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\128\000\000\000\000\000\b\000\000\128\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\004\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\016\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\016\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\001\000\000\000@\000\001\000\004\000\000\000\000\000\000\000\004\000\012\000\000`\000\000`\184@\000\002\000\000\002\000\000\000\001\136@\b\016\000\140\004\139\004\000@\021\000\000\002\b\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\002\000\000\000\000\000\000\000\000\000\000\000$\000A\000\016@(\132\000\000D\0000\000\000@\000\004\128\000 \002\b\005\016\128\000\b\000\006\000\000\b\000\000\128\000\004\000\000\016\002\016\000\192\000\000\000\000\128\000\000\016\000\000\128\000\002\000B\000\b\000\000\000\000\016\000\000\002@\004\016\001\004\002\136@\000\004\000\003\000\000\004\000\000H\000\130\000 \128\001\b\000\000\128\000`\000\000\128\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\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\004\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\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\196 \004\b\000F\002E\130\000 \n\000\000\001\004\000\024\132\000\129\000\b\192H\176@\004\001@\000\000 \128\003\016\128\016 \001\024\t\022\b\000\128*\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\004\000\000\000\000\000\000\000\000\000\000\001\136@\b\016\000\140\004\139\004\000@\020\000\000\002\b\0001\b\001\002\000\017\128\145`\128\b\002\128\000\000A\000\006)\000(H\0020\018*\016\001\000P\000\000\b \000\197 \005A(\006\002GV\000\000\n\001@\001\140\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\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\b\004\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\001@\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\000\000\000\000\000\000\000\002\128\000\000\000\000\000\000\000\000\000\000 \000\000\000\016\000\000\000\000\000\000\000\000\000\000\144\001\004\000A\000\002\016\000\001\000\000\200\000\001\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\0003\248D\024\177U\191\140\207,\005\001\247\"\128\007\028\000\016\000\000\000\000\000\128\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\b\128\000\000\000\000\128\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\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\000\000\000\000\000\000\000\000\0000\000\001\192@\001\130\225\000\000\b\000\000\000\000\000\000\006)\000(H\n0\018*\016\001\000P\000\000( \000\197 \005\t\000F\002EB\000 \n@\000%\004\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\128\000\000\000\000\000\000\000\000\000\"\000\000\000\000\002\000\002\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\000\000\b\000\000\000\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\198\225\000\"\193F\254\018<\176\004\007\208\n\000\012p\000\002\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\024\000\000\224 \000\193p\128\000\004\000\000\000\000\000\000\001\016\000\000\000\000\016\000\016\000\000\000\b\000\000\000@\000`\000\003\000\000\003\005\194\128\000\016\000\000\000\000\000\000\012\000\000p\016\000`\184@\000\002\000\000\000\000\000\000\000\136\000\000\000\000\b\000\b\000\000\000\004\000\000\000\000\000\017\000\000\000\000\001\000\001\000\000\000\000\128\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\002\000\000\b\000\000\001\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\b\000\000`\000\003\128\144\003%\194\000\000\016\000\000\000\000\000\000\004\000\000\000\002\000`\000@\000\000\000\000\000\000\000\000\000\128\000\b\000@\004\132\b\000\000\000\000\000\000\000\000\000@\000\002\000\000\b\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\000\000\004\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\003\020\128\020$\001\024\t\021\b\000\128(\000\000\004\016\000b\144\002\132\128#\001\"\161\000\016\005 \000\002\130\000\016\000\000\128\000\002\000B\000\024\000\000\000\000\016\000\000\000\128\000\b\000@\012\132\b\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\001{v\"\004\023\241R\000\004\012\028\014\156pX\020\026\000\192\000\006\000\000\006\011\132\000\000 \000\000\000\000\000\000\b\128\000\000\000\000\192\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\000`\000\003\128\128\003\005\194\000\000\016\000\000\000\000\000\000\000\000\000\001\128\000\000\000\000\000\000\000\000\000\000\000\000") + (134, "'\233\016b\197V\223\025\159X\n\135\242\000\000\227\128\159\164A\139\021[|f}`*\031\200\000\003\142\000\016\000\000\000\000\000\192\000\000\000\000\000\000\000\000\000\000\202@\b\016\000\131\002E\194\000 4\016\000\016@\001\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\004\000\128\128\000@0 \000\000\000 \000\000\000\000\0000 \002\000\000\000\128\128\000\000\000\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\141\164\000\139\005\027|$}`\b\031\000\000\001\142\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000H\000\000\000\000\002\000\004\000\000\000\016\000\000\000\000\001 \000\000\000\000\012\000\016\000\000\000@\000\000\000\000\018\000A\000\016@\000B\000\000 \000\200\000\002\000\002~\145\006,Um\241\153\245\128\160\127 \000\0148\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\128\000\000\000\016\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\128\000\000\000\002\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\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\128\016\000\128\000\000\000\000\000\000\b\000\016\000\000\000\000\000\192\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\b\000\000\000\000\000\000\000\000\000\000\159\164A\139\021[|f}`*\031\200\000\003\142\000\000\000\000$\000 \000\000\000\004\000\000\000\000\000 \000\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\018@\002\b\000\000\000@\000\000\000\000\002\000\b\000\000I\000\b\000\000\000\001\000\000\000\000\000\b\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\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\000\012\000\000\192\000\0000\184@\000\002\000\000\000\000\000\002~\145\006,Um\241\153\245\128\168\127 \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\001\000\000\000\000\000\000\024\000\000\000\000\000\000\000\000\000\000\000H\000\004\000A\000\017\b\000\000\128\003\000\000\b\000\t\250D\024\177U\183\198g\214\002\129\252\000\0008\224\003)\000(H\002\012\t\021\b\000\128\200\000\000A\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\007\223b A\127\017P\000 `\224\247\030,\n\r\000\200@\b\016\000\130\002E\002\000 0\000\000\016@\003!\000 @\002\012\t\020\b\000\128\192\000\000A\000\012\132\000\136\005\0030$q`\000\003\000\000\001\140\000\000\000\000\000\000\000\000\017@\000\000\000\000\000\000\000\000\000@\000\016\000\128\000\000\002\000\000 \000\000\016\000\004\128\000@\004\016\000\016\128\000\b\0000\000\000\128\000\018\000A\000\016@\000B\000\000 \000\192\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\001\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\012\164\000\129\000\b0$\\ \002\003A\000\001\004\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003\000\0008\b\000\012.\016\000\000\128\000\000\000\001\000\012\000\000\224 \0000\184@\000\002\000\000\000\000\000\0000\000\003\000\000\000\194\225\000\000\b\000\000\000\000\000\000\192\000\012\000\000\003\011\132\000\000 \000\000\000\000\000\002\000\000\018@\002\000\000\000\000@\000\000\000\000\002\000\012\000\000\224 \0000\184@\000\002\000\000\000\000\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\016\000 \000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\003\000\0008\b\000\012.\016\000\000\128\000\000\000\000\000\012\164\000\129\000\b0$\\ \002\003A\000\001\020\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@\003)\000*\t@\204\t\029X\000\000\192\000\000c\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\0002\144\002\132\128 \192\145P\128\b\012\000\000\004\016\000\200@\b\128P3\002G\022\000\0000\000\000\024\192\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\0002\144\002\004\000 \192\145p\128\b\012\000\000\004\016\000\202@\b\016\000\131\002E\194\000 4\016\000\016@#i\000\"\193F\223\t\031X\002\007\192\000\000c\128\004\128\000\000\000\000 \000@\000\000\001\000\000\000\016\000\018\000\000\000\000\000\128\001\000\000\000\004\000\000\000@\000H\000\000\000\000\002\000\004\000\000\000\016\000\000\001\000\003!\000\"\001@\204\t\028X\000\000\192\000\000c\000\000\000\b\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\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\001\000\000\000\000\000\000\000\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000\192\000\014\002\000\003\011\132\000\000 \000\000\000\000\000'\233\016j\197V\223\025\159X\n\007\240\000\001\227\128\b\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\0002\144\002\004\000 \192\145p\128\b\012\000\000\004\016\000\200@\b\016\000\131\002E\130\000 0\000\000\016@\003)\000 @\002\012\t\023\b\000\128\208@\000A\000\004\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\0002\144\002\004\000 \192\145p\128\b\r\004\000\004\016\000@\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\001\000 \000\016\012\b\000\000\000\b\000\000\000\000\000\012\b\000\128\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#i\000\"\193F\223\t\031X\002\007\192\000\000c\128\012\000\000\224 \0000\184@\000\002\000\000\000\000\000\000\018\000\000\000\000\000\128\001\000\000\000\004\000\000\000\000\000H\000\000\000\000\003\000\004\000\000\000\016\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\144\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\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\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\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\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\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\002\000\015\192\024\b\128\000\007\196@ @\016(\176\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\012\128\000\240 \0000\184P\000\002\001\000 \000\016\000\000\016\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\001\000 \000\000\000\000\128\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\001\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\016\002\002\000\001\000\192\128\000\000\000\128\000\000\000\000\000\000\000\000\000\004\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\012\b\000\128\000\000 \000\000\000 \000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\002\000\000\000\000\000\002\000\000@\000\001\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\016\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\001\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\016\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\001\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000 \000\000\016\000\000\016\000\128\000\000\000\000\000\000\b\0000\000\003\000\000\000\194\225\000\000\b\000\000\128\000\000\000\202@\b\016\000\131\002E\194\000 4\016\000\016@\001\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\018\000A\000\016@\004B\000\000\"\000\192\000\002\000\000H\000\004\000A\000\017\b\000\000\128\003\000\000\b\000\001\000\000\016\000\000@\004 \001\128\000\000\000\016\000\000\004\000\000@\000\001\000\016\128\002\000\000\000\000@\000\000\018\000A\000\016@\004B\000\000 \000\192\000\002\000\000H\001\004\000A\000\001\b\000\000\128\003\000\000\b\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\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\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\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\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\003)\000 @\002\012\t\023\b\000\128\192\000\000A\000\012\164\000\129\000\b0$\\ \002\003\000\000\001\004\0002\144\002\004\000 \192\145p\128\b\r\004\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\001\000\000\000\000\000\000\000\000\000\000\012\164\000\129\000\b0$\\ \002\003\000\000\001\004\0002\144\002\004\000 \192\145p\128\b\012\000\000\004\016\000\202@\b\016\000\131\002E\194\000 0\000\000\016@\003)\000 @\002\012\t\023\b\000\128\208@\000A\000\012\164\000\129\000\b0$\\ \002\003\000\000\001\004\0002\144\002\004\000 \192\145p\128\b\r\004\000\004\016\000\202@\n\018\000\131\002EB\000 0\000\000\016@\003)\000*\t@\204\t\029X\000\000\192\000\000c\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\000\000\000\000\000\000\000\000\000\000\000\000\b\001\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\128\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\000\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\000\000\000\000\000\000\000\000\000\000\000\000\001@\000\000\000\000\000\000\000\000\000\004\000\000\000\001\000\000\000\000\000\000\000\000\000\001 \004\016\001\004\000\004 \000\002\000\012\128\000 \000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\159\164A\139\021[|f}`(\031\200\000\003\142\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\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128\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\128\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\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\003)\000(H\002\012\t\021\b\000\128\192\000\000A\000\012\164\000\161 \b0$T \002\003\000\000\001\004\0026\144\002,\020m\240\145\245\128 |\000\000\0068\b\218@\b\176Q\183\194G\214\000\129\240\000\000\024\224\000\000\000\000\000\000\000\000\016\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\002\000\000\000\000\128\000\000\000\000\000\000\000\000\000H\000\000\000\000\002\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\004\000\000\000\000\128\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\b\000\000\000\000\000\000\000\000\000\b\006\016\000\000\000\000\000\000\000\000\000\000\000\128\000\000 \184@\000\000\000\000\000\000\000\0000\000\003\128\128\000\194\225\000\000\b\000\000\000\000\000\000H\000\000\000\000\002\000\004\000\000\000\016\000\000\001\000\003\000\0000\000\000\012.\020\000\000\128\000\000\000\000\000\012\000\000\224 \0000\184@\000\002\000\000\000\000\000\000\018\000\000\000\000\000\128\001\000\000\000\004\000\000\000\000\000H\000\000\000\000\002\000\004\000\000\000\016\000\000\000\000\000 \000\000\000\000\b\000\016\000\000\000@\000\000\000\000\000\004\000\000\000\000\000\000\000 \000\002\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\003\000\0008\t\000\r.\016\000\000\128\000\000\000\000\000\004\000\000\000\004\0000\000@\000\000\000\000\000\000\000\000\016\000\002\000\016\000P\129\000\000\000\000\000\000\000\000\001\000\000\016\000\000@\004 \000\128\000\000\000\016\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\016\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\202@\n\018\000\131\002EB\000 0\000\000\016@\003)\000(H\002\012\t\021\b\000\128\200\000\001A\000\016\000\001\000\000\004\000B\000\024\000\000\000\001\000\000\000\016\000\002\000\016\000\208\129\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000'\233\016j\197V\223\025\159X\n\007\240\000\001\227\129\247\216\136\016_\196T\000\b\0248=\199\139\002\131@0\000\003\000\000\000\194\225\000\000\b\000\000\000\000\000\000H\000\000\000\000\003\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\016\012\000\000\224 \0000\184@\000\002\000\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000") end) (ET) (TI) @@ -47236,59 +62276,59 @@ end let use_file = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Legacy 1874 lexer lexbuf) : (Parsetree.toplevel_phrase list)) + (Obj.magic (MenhirInterpreter.entry `Legacy 2238 lexer lexbuf) : (Parsetree.toplevel_phrase list)) and toplevel_phrase = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Legacy 1854 lexer lexbuf) : (Parsetree.toplevel_phrase)) + (Obj.magic (MenhirInterpreter.entry `Legacy 2218 lexer lexbuf) : (Parsetree.toplevel_phrase)) and parse_val_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Legacy 1849 lexer lexbuf) : (Longident.t)) + (Obj.magic (MenhirInterpreter.entry `Legacy 2213 lexer lexbuf) : (Longident.t)) and parse_pattern = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Legacy 1845 lexer lexbuf) : (Parsetree.pattern)) + (Obj.magic (MenhirInterpreter.entry `Legacy 2209 lexer lexbuf) : (Parsetree.pattern)) and parse_mty_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Legacy 1841 lexer lexbuf) : (Longident.t)) + (Obj.magic (MenhirInterpreter.entry `Legacy 2205 lexer lexbuf) : (Longident.t)) and parse_module_type = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Legacy 1837 lexer lexbuf) : (Parsetree.module_type)) + (Obj.magic (MenhirInterpreter.entry `Legacy 2201 lexer lexbuf) : (Parsetree.module_type)) and parse_module_expr = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Legacy 1833 lexer lexbuf) : (Parsetree.module_expr)) + (Obj.magic (MenhirInterpreter.entry `Legacy 2197 lexer lexbuf) : (Parsetree.module_expr)) and parse_mod_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Legacy 1829 lexer lexbuf) : (Longident.t)) + (Obj.magic (MenhirInterpreter.entry `Legacy 2193 lexer lexbuf) : (Longident.t)) and parse_mod_ext_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Legacy 1825 lexer lexbuf) : (Longident.t)) + (Obj.magic (MenhirInterpreter.entry `Legacy 2189 lexer lexbuf) : (Longident.t)) and parse_expression = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Legacy 1821 lexer lexbuf) : (Parsetree.expression)) + (Obj.magic (MenhirInterpreter.entry `Legacy 2185 lexer lexbuf) : (Parsetree.expression)) and parse_core_type = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Legacy 1817 lexer lexbuf) : (Parsetree.core_type)) + (Obj.magic (MenhirInterpreter.entry `Legacy 2181 lexer lexbuf) : (Parsetree.core_type)) and parse_constr_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Legacy 1813 lexer lexbuf) : (Longident.t)) + (Obj.magic (MenhirInterpreter.entry `Legacy 2177 lexer lexbuf) : (Longident.t)) and parse_any_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Legacy 1795 lexer lexbuf) : (Longident.t)) + (Obj.magic (MenhirInterpreter.entry `Legacy 2159 lexer lexbuf) : (Longident.t)) and interface = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry `Legacy 1791 lexer lexbuf) : (Parsetree.signature)) + (Obj.magic (MenhirInterpreter.entry `Legacy 2155 lexer lexbuf) : (Parsetree.signature)) and implementation = fun lexer lexbuf -> @@ -47298,59 +62338,59 @@ module Incremental = struct let use_file = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1874 initial_position) : (Parsetree.toplevel_phrase list) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2238 initial_position) : (Parsetree.toplevel_phrase list) MenhirInterpreter.checkpoint) and toplevel_phrase = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1854 initial_position) : (Parsetree.toplevel_phrase) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2218 initial_position) : (Parsetree.toplevel_phrase) MenhirInterpreter.checkpoint) and parse_val_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1849 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2213 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and parse_pattern = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1845 initial_position) : (Parsetree.pattern) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2209 initial_position) : (Parsetree.pattern) MenhirInterpreter.checkpoint) and parse_mty_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1841 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2205 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and parse_module_type = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1837 initial_position) : (Parsetree.module_type) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2201 initial_position) : (Parsetree.module_type) MenhirInterpreter.checkpoint) and parse_module_expr = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1833 initial_position) : (Parsetree.module_expr) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2197 initial_position) : (Parsetree.module_expr) MenhirInterpreter.checkpoint) and parse_mod_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1829 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2193 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and parse_mod_ext_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1825 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2189 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and parse_expression = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1821 initial_position) : (Parsetree.expression) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2185 initial_position) : (Parsetree.expression) MenhirInterpreter.checkpoint) and parse_core_type = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1817 initial_position) : (Parsetree.core_type) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2181 initial_position) : (Parsetree.core_type) MenhirInterpreter.checkpoint) and parse_constr_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1813 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2177 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and parse_any_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1795 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2159 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and interface = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1791 initial_position) : (Parsetree.signature) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 2155 initial_position) : (Parsetree.signature) MenhirInterpreter.checkpoint) and implementation = fun initial_position -> @@ -47358,12 +62398,12 @@ module Incremental = struct end -# 4194 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" +# 4543 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly" -# 47365 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 62405 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" # 269 "" -# 47370 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" +# 62410 "ocamlmerlin_mlx/ocaml/preprocess/parser_raw.ml" diff --git a/ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mli b/ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mli index e58d951..3fc10ce 100644 --- a/ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mli +++ b/ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mli @@ -3,7 +3,6 @@ type token = | WITH - | WHILE_LWT | WHILE | WHEN | VIRTUAL @@ -11,7 +10,6 @@ type token = | UNDERSCORE | UIDENT of (string) | TYPE - | TRY_LWT | TRY | TRUE | TO @@ -51,11 +49,12 @@ type token = | MINUSDOT | MINUS | METHOD - | MATCH_LWT + | METAOCAML_ESCAPE + | METAOCAML_BRACKET_OPEN + | METAOCAML_BRACKET_CLOSE | MATCH | LPAREN | LIDENT of (string) - | LET_LWT | LETOP of (string) | LET | LESSSLASH @@ -93,15 +92,12 @@ type token = | HASH | GREATERRBRACKET | GREATERRBRACE - | GREATERDOT | GREATER | FUNCTOR | FUNCTION | FUN - | FOR_LWT | FOR | FLOAT of (string * char option) - | FINALLY_LWT | FALSE | EXTERNAL | EXCEPTION @@ -110,10 +106,9 @@ type token = | EOF | END | ELSE + | EFFECT | DOWNTO - | DOTTILDE | DOTOP of (string) - | DOTLESS | DOTDOT | DOT | DONE @@ -189,7 +184,6 @@ module MenhirInterpreter : sig type _ terminal = | T_error : unit terminal | T_WITH : unit terminal - | T_WHILE_LWT : unit terminal | T_WHILE : unit terminal | T_WHEN : unit terminal | T_VIRTUAL : unit terminal @@ -197,7 +191,6 @@ module MenhirInterpreter : sig | T_UNDERSCORE : unit terminal | T_UIDENT : (string) terminal | T_TYPE : unit terminal - | T_TRY_LWT : unit terminal | T_TRY : unit terminal | T_TRUE : unit terminal | T_TO : unit terminal @@ -237,11 +230,12 @@ module MenhirInterpreter : sig | T_MINUSDOT : unit terminal | T_MINUS : unit terminal | T_METHOD : unit terminal - | T_MATCH_LWT : unit terminal + | T_METAOCAML_ESCAPE : unit terminal + | T_METAOCAML_BRACKET_OPEN : unit terminal + | T_METAOCAML_BRACKET_CLOSE : unit terminal | T_MATCH : unit terminal | T_LPAREN : unit terminal | T_LIDENT : (string) terminal - | T_LET_LWT : unit terminal | T_LETOP : (string) terminal | T_LET : unit terminal | T_LESSSLASH : unit terminal @@ -279,15 +273,12 @@ module MenhirInterpreter : sig | T_HASH : unit terminal | T_GREATERRBRACKET : unit terminal | T_GREATERRBRACE : unit terminal - | T_GREATERDOT : unit terminal | T_GREATER : unit terminal | T_FUNCTOR : unit terminal | T_FUNCTION : unit terminal | T_FUN : unit terminal - | T_FOR_LWT : unit terminal | T_FOR : unit terminal | T_FLOAT : (string * char option) terminal - | T_FINALLY_LWT : unit terminal | T_FALSE : unit terminal | T_EXTERNAL : unit terminal | T_EXCEPTION : unit terminal @@ -296,10 +287,9 @@ module MenhirInterpreter : sig | T_EOF : unit terminal | T_END : unit terminal | T_ELSE : unit terminal + | T_EFFECT : unit terminal | T_DOWNTO : unit terminal - | T_DOTTILDE : unit terminal | T_DOTOP : (string) terminal - | T_DOTLESS : unit terminal | T_DOTDOT : unit terminal | T_DOT : unit terminal | T_DONE : unit terminal @@ -348,7 +338,7 @@ module MenhirInterpreter : sig | N_type_parameter : (Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) nonterminal | N_type_longident : (Longident.t) nonterminal | N_type_kind : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) nonterminal - | N_type_constraint : (Parsetree.core_type option * Parsetree.core_type option) nonterminal + | N_type_constraint : (Parsetree.type_constraint) nonterminal | N_tuple_type : (Parsetree.core_type) nonterminal | N_toplevel_phrase : (Parsetree.toplevel_phrase) nonterminal | N_toplevel_directive : (Parsetree.toplevel_phrase) nonterminal @@ -373,9 +363,8 @@ module MenhirInterpreter : sig | N_separated_or_terminated_nonempty_list_SEMI_object_expr_field_ : ((string Location.loc * Parsetree.expression) list) nonterminal | N_separated_or_terminated_nonempty_list_SEMI_expr_ : (Parsetree.expression list) nonterminal | N_row_field : (Parsetree.row_field) nonterminal - | N_reversed_separated_nontrivial_llist_STAR_atomic_type_ : (Parsetree.core_type list) nonterminal - | N_reversed_separated_nontrivial_llist_COMMA_expr_ : (Parsetree.expression list) nonterminal | N_reversed_separated_nontrivial_llist_COMMA_core_type_ : (Parsetree.core_type list) nonterminal + | N_reversed_separated_nonempty_llist_STAR_labeled_tuple_typ_element_ : ((string option * Parsetree.core_type) list) nonterminal | N_reversed_separated_nonempty_llist_STAR_atomic_type_ : (Parsetree.core_type list) nonterminal | N_reversed_separated_nonempty_llist_COMMA_type_parameter_ : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) nonterminal | N_reversed_separated_nonempty_llist_COMMA_core_type_ : (Parsetree.core_type list) nonterminal @@ -387,6 +376,7 @@ module MenhirInterpreter : sig | N_reversed_nonempty_llist_name_tag_ : (string list) nonterminal | N_reversed_nonempty_llist_labeled_simple_expr_ : ((Asttypes.arg_label * Parsetree.expression) list) nonterminal | N_reversed_nonempty_llist_functor_arg_ : ((Lexing.position * Parsetree.functor_parameter) list) nonterminal + | N_reversed_nonempty_concat_fun_param_as_list_ : (Parsetree.function_param list) nonterminal | N_reversed_llist_simple_expr_ : (Parsetree.expression list) nonterminal | N_reversed_llist_preceded_CONSTRAINT_constrain__ : ((Parsetree.core_type * Parsetree.core_type * Warnings.loc) list) nonterminal | N_reversed_llist_jsx_prop_ : (((Lexing.position * Lexing.position) * @@ -395,6 +385,9 @@ module MenhirInterpreter : sig | `Prop_opt_punned of string | `Prop_punned of string ]) list) nonterminal + | N_reversed_labeled_tuple_pattern_pattern_no_exn_ : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) nonterminal + | N_reversed_labeled_tuple_pattern_pattern_ : (Asttypes.closed_flag * (string option * Parsetree.pattern) list) nonterminal + | N_reversed_labeled_tuple_body : ((string option * Parsetree.expression) list) nonterminal | N_reversed_bar_llist_extension_constructor_declaration_ : (Parsetree.extension_constructor list) nonterminal | N_reversed_bar_llist_extension_constructor_ : (Parsetree.extension_constructor list) nonterminal | N_reversed_bar_llist_constructor_declaration_ : (Parsetree.constructor_declaration list) nonterminal @@ -411,8 +404,6 @@ module MenhirInterpreter : sig | N_pattern_var : (Parsetree.pattern) nonterminal | N_pattern_no_exn : (Parsetree.pattern) nonterminal | N_pattern_gen : (Parsetree.pattern) nonterminal - | N_pattern_comma_list_pattern_no_exn_ : (Parsetree.pattern list) nonterminal - | N_pattern_comma_list_pattern_ : (Parsetree.pattern list) nonterminal | N_pattern : (Parsetree.pattern) nonterminal | N_parse_val_longident : (Longident.t) nonterminal | N_parse_pattern : (Parsetree.pattern) nonterminal @@ -427,12 +418,13 @@ module MenhirInterpreter : sig | N_parse_any_longident : (Longident.t) nonterminal | N_paren_module_expr : (Parsetree.module_expr) nonterminal | N_optlabel : (string) nonterminal - | N_option_type_constraint_ : ((Parsetree.core_type option * Parsetree.core_type option) option) nonterminal + | N_option_type_constraint_ : (Parsetree.type_constraint option) nonterminal | N_option_preceded_EQUAL_seq_expr__ : (Parsetree.expression option) nonterminal | N_option_preceded_EQUAL_pattern__ : (Parsetree.pattern option) nonterminal | N_option_preceded_EQUAL_module_type__ : (Parsetree.module_type option) nonterminal | N_option_preceded_EQUAL_expr__ : (Parsetree.expression option) nonterminal | N_option_preceded_COLON_core_type__ : (Parsetree.core_type option) nonterminal + | N_option_preceded_COLON_atomic_type__ : (Parsetree.core_type option) nonterminal | N_option_preceded_AS_mkrhs_LIDENT___ : (string Location.loc option) nonterminal | N_option_SEMI_ : (unit option) nonterminal | N_option_BAR_ : (unit option) nonterminal @@ -440,6 +432,7 @@ module MenhirInterpreter : sig | N_operator : (string) nonterminal | N_open_description : (Longident.t Location.loc Parsetree.open_infos * string Location.loc option) nonterminal | N_open_declaration : (Parsetree.module_expr Parsetree.open_infos * string Location.loc option) nonterminal + | N_object_type : (Parsetree.core_type) nonterminal | N_nonempty_type_kind : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) nonterminal | N_nonempty_list_raw_string_ : (string list) nonterminal | N_nonempty_list_mkrhs_LIDENT__ : (string Location.loc list) nonterminal @@ -461,15 +454,13 @@ module MenhirInterpreter : sig | N_mk_longident_mod_longident_UIDENT_ : (Longident.t) nonterminal | N_mk_longident_mod_longident_LIDENT_ : (Longident.t) nonterminal | N_mk_longident_mod_ext_longident_ident_ : (Longident.t) nonterminal - | N_mk_longident_mod_ext_longident___anonymous_41_ : (Longident.t) nonterminal + | N_mk_longident_mod_ext_longident___anonymous_42_ : (Longident.t) nonterminal | N_mk_longident_mod_ext_longident_UIDENT_ : (Longident.t) nonterminal | N_mk_longident_mod_ext_longident_LIDENT_ : (Longident.t) nonterminal | N_method_ : ((string Location.loc * Asttypes.private_flag * Parsetree.class_field_kind) * Parsetree.attributes) nonterminal | N_meth_list : (Parsetree.object_field list * Asttypes.closed_flag) nonterminal | N_match_case : (Parsetree.case) nonterminal - | N_lwt_bindings : (Ast_helper.let_bindings) nonterminal - | N_lwt_binding : (Ast_helper.let_bindings) nonterminal | N_listx_SEMI_record_pat_field_UNDERSCORE_ : ((Longident.t Location.loc * Parsetree.pattern) list * unit option) nonterminal | N_list_use_file_element_ : (Parsetree.toplevel_phrase list list) nonterminal | N_list_text_str_structure_item__ : (Parsetree.structure_item list list) nonterminal @@ -495,6 +486,10 @@ module MenhirInterpreter : sig Parsetree.value_constraint option) nonterminal | N_let_binding_body : (Parsetree.pattern * Parsetree.expression * Parsetree.value_constraint option * bool) nonterminal + | N_labeled_tuple_pattern_pattern_no_exn_ : (Parsetree.pattern_desc) nonterminal + | N_labeled_tuple_pattern_pattern_ : (Parsetree.pattern_desc) nonterminal + | N_labeled_tuple_pat_element_list_pattern_no_exn_ : ((string option * Parsetree.pattern) list) nonterminal + | N_labeled_tuple_pat_element_list_pattern_ : ((string option * Parsetree.pattern) list) nonterminal | N_labeled_simple_pattern : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) nonterminal | N_labeled_simple_expr : (Asttypes.arg_label * Parsetree.expression) nonterminal | N_label_longident : (Longident.t) nonterminal @@ -530,16 +525,21 @@ module MenhirInterpreter : sig | N_functor_args : ((Lexing.position * Parsetree.functor_parameter) list) nonterminal | N_functor_arg : (Lexing.position * Parsetree.functor_parameter) nonterminal | N_function_type : (Parsetree.core_type) nonterminal - | N_fun_def : (Parsetree.expression) nonterminal - | N_fun_binding : (Parsetree.expression) nonterminal + | N_fun_seq_expr : (Parsetree.expression) nonterminal + | N_fun_params : (Parsetree.function_param list) nonterminal + | N_fun_param_as_list : (Parsetree.function_param list) nonterminal + | N_fun_expr : (Parsetree.expression) nonterminal + | N_fun_body : (Parsetree.function_body) nonterminal | N_formal_class_parameters : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) nonterminal | N_floating_attribute : (Parsetree.attribute) nonterminal + | N_extension_type : (Parsetree.core_type) nonterminal | N_extension_constructor_rebind_epsilon_ : (Parsetree.extension_constructor) nonterminal | N_extension_constructor_rebind_BAR_ : (Parsetree.extension_constructor) nonterminal | N_extension : (Parsetree.extension) nonterminal | N_ext : (string Location.loc option) nonterminal - | N_expr : (Parsetree.expression) nonterminal | N_direction_flag : (Asttypes.direction_flag) nonterminal + | N_delimited_type_supporting_local_open : (Parsetree.core_type) nonterminal + | N_delimited_type : (Parsetree.core_type) nonterminal | N_core_type : (Parsetree.core_type) nonterminal | N_constructor_declarations : (Parsetree.constructor_declaration list) nonterminal | N_constructor_arguments : (Parsetree.constructor_arguments) nonterminal @@ -562,6 +562,7 @@ module MenhirInterpreter : sig | N_class_field : (Parsetree.class_field) nonterminal | N_class_expr : (Parsetree.class_expr) nonterminal | N_attribute : (Parsetree.attribute) nonterminal + | N_attr_payload : (Parsetree.payload) nonterminal | N_attr_id : (string Location.loc) nonterminal | N_atomic_type : (Parsetree.core_type) nonterminal | N_any_longident : (Longident.t) nonterminal diff --git a/ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly b/ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly index cd8defd..04e7ad3 100644 --- a/ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly +++ b/ocamlmerlin_mlx/ocaml/preprocess/parser_raw.mly @@ -26,6 +26,8 @@ [@@@ocaml.warning "-9"] +[@@@ocaml.warning "-60"] module Str = Ast_helper.Str (* For ocamldep *) +[@@@ocaml.warning "+60"] open Asttypes open Longident @@ -51,14 +53,15 @@ let ghost_loc (startpos, endpos) = { } let mktyp ~loc ?attrs d = Typ.mk ~loc:(make_loc loc) ?attrs d -let mkpat ~loc d = Pat.mk ~loc:(make_loc loc) d -let mkexp ~loc d = Exp.mk ~loc:(make_loc loc) d +let mkpat ~loc ?attrs d = Pat.mk ~loc:(make_loc loc) ?attrs d +let mkexp ~loc ?attrs d = Exp.mk ~loc:(make_loc loc) ?attrs d let mkmty ~loc ?attrs d = Mty.mk ~loc:(make_loc loc) ?attrs d let mksig ~loc d = Sig.mk ~loc:(make_loc loc) d let mkmod ~loc ?attrs d = Mod.mk ~loc:(make_loc loc) ?attrs d let mkstr ~loc d = Str.mk ~loc:(make_loc loc) d let mkclass ~loc ?attrs d = Cl.mk ~loc:(make_loc loc) ?attrs d let mkcty ~loc ?attrs d = Cty.mk ~loc:(make_loc loc) ?attrs d +let mkconst ~loc c = Const.mk ~loc:(make_loc loc) c let pstr_typext (te, ext) = (Pstr_typext te, ext) @@ -95,6 +98,8 @@ let mkcf ~loc ?attrs ?docs d = let mkrhs rhs loc = mkloc rhs (make_loc loc) let ghrhs rhs loc = mkloc rhs (ghost_loc loc) +let ldot lid lid_loc name loc = Ldot (mkrhs lid lid_loc, mkrhs name loc) + let push_loc x acc = if x.Location.loc_ghost then acc @@ -106,7 +111,7 @@ let reloc_pat ~loc x = let reloc_exp ~loc x = { x with pexp_loc = make_loc loc; pexp_loc_stack = push_loc x.pexp_loc x.pexp_loc_stack } -let reloc_typ ~loc x = +let _reloc_typ ~loc x = { x with ptyp_loc = make_loc loc; ptyp_loc_stack = push_loc x.ptyp_loc x.ptyp_loc_stack } @@ -120,25 +125,14 @@ let mkpatvar ~loc name = mkpat ~loc (Ppat_var (mkrhs name loc)) (* - Ghost expressions and patterns: - expressions and patterns that do not appear explicitly in the - source file they have the loc_ghost flag set to true. - Then the profiler will not try to instrument them and the - -annot option will not try to display their type. + See ./location.mli for when to use a ghost location or not. Every grammar rule that generates an element with a location must make at most one non-ghost element, the topmost one. - - How to tell whether your location must be ghost: - A location corresponds to a range of characters in the source file. - If the location contains a piece of code that is syntactically - valid (according to the documentation), and corresponds to the - AST node, then the location must be real; in all other cases, - it must be ghost. *) -let ghexp ~loc d = Exp.mk ~loc:(ghost_loc loc) d -let ghpat ~loc d = Pat.mk ~loc:(ghost_loc loc) d -let ghtyp ~loc d = Typ.mk ~loc:(ghost_loc loc) d +let ghexp ~loc ?attrs d = Exp.mk ~loc:(ghost_loc loc) ?attrs d +let ghpat ~loc ?attrs d = Pat.mk ~loc:(ghost_loc loc) ?attrs d +let ghtyp ~loc ?attrs d = Typ.mk ~loc:(ghost_loc loc) ?attrs d let ghloc ~loc d = { txt = d; loc = ghost_loc loc } let ghstr ~loc d = Str.mk ~loc:(ghost_loc loc) d let ghsig ~loc d = Sig.mk ~loc:(ghost_loc loc) d @@ -151,23 +145,38 @@ let neg_string f = then String.sub f 1 (String.length f - 1) else "-" ^ f -let mkuminus ~oploc name arg = - match name, arg.pexp_desc with - | "-", Pexp_constant(Pconst_integer (n,m)) -> - Pexp_constant(Pconst_integer(neg_string n,m)) - | ("-" | "-."), Pexp_constant(Pconst_float (f, m)) -> - Pexp_constant(Pconst_float(neg_string f, m)) +(* Pre-apply the special [-], [-.], [+] and [+.] prefix operators into + constants if possible, otherwise turn them into the corresponding prefix + operators [~-], [~-.], etc.. *) +let mkuminus ~sloc ~oploc name arg = + match name, arg.pexp_desc, arg.pexp_attributes with + | "-", + Pexp_constant({pconst_desc = Pconst_integer (n,m); pconst_loc=_}), + [] -> + Pexp_constant(mkconst ~loc:sloc (Pconst_integer(neg_string n, m))) + | ("-" | "-."), + Pexp_constant({pconst_desc = Pconst_float (f, m); pconst_loc=_}), [] -> + Pexp_constant(mkconst ~loc:sloc (Pconst_float(neg_string f, m))) | _ -> Pexp_apply(mkoperator ~loc:oploc ("~" ^ name), [Nolabel, arg]) -let mkuplus ~oploc name arg = +let mkuplus ~sloc ~oploc name arg = let desc = arg.pexp_desc in - match name, desc with - | "+", Pexp_constant(Pconst_integer _) - | ("+" | "+."), Pexp_constant(Pconst_float _) -> desc + match name, desc, arg.pexp_attributes with + | "+", + Pexp_constant({pconst_desc = Pconst_integer _ as desc; pconst_loc=_}), + [] + | ("+" | "+."), + Pexp_constant({pconst_desc = Pconst_float _ as desc; pconst_loc=_}), + [] -> + Pexp_constant(mkconst ~loc:sloc desc) | _ -> Pexp_apply(mkoperator ~loc:oploc ("~" ^ name), [Nolabel, arg]) +let mk_attr ~loc name payload = + Builtin_attributes.(register_attr Parser name); + Attr.mk ~loc name payload + (* TODO define an abstraction boundary between locations-as-pairs and locations-as-Location.t; it should be clear when we move from one world to the other *) @@ -194,7 +203,9 @@ let rec mktailexp nilloc = let open Location in function | e1 :: el -> let exp_el, el_loc = mktailexp nilloc el in let loc = (e1.pexp_loc.loc_start, snd el_loc) in - let arg = ghexp ~loc (Pexp_tuple [e1; ghexp ~loc:el_loc exp_el]) in + let arg = + ghexp ~loc (Pexp_tuple [None, e1; None, ghexp ~loc:el_loc exp_el]) + in ghexp_cons_desc loc arg, loc let rec mktailpat nilloc = let open Location in function @@ -204,17 +215,22 @@ let rec mktailpat nilloc = let open Location in function | p1 :: pl -> let pat_pl, el_loc = mktailpat nilloc pl in let loc = (p1.ppat_loc.loc_start, snd el_loc) in - let arg = ghpat ~loc (Ppat_tuple [p1; ghpat ~loc:el_loc pat_pl]) in + let arg = + ghpat ~loc + (Ppat_tuple ([None, p1; None, ghpat ~loc:el_loc pat_pl], Closed)) + in ghpat_cons_desc loc arg, loc let mkstrexp e attrs = { pstr_desc = Pstr_eval (e, attrs); pstr_loc = e.pexp_loc } -let mkexp_constraint ~loc e (t1, t2) = - match t1, t2 with - | Some t, None -> mkexp ~loc (Pexp_constraint(e, t)) - | _, Some t -> mkexp ~loc (Pexp_coerce(e, t1, t)) - | None, None -> assert false +let mkexp_desc_constraint e t = + match t with + | Pconstraint t -> Pexp_constraint(e, t) + | Pcoerce(t1, t2) -> Pexp_coerce(e, t1, t2) + +let mkexp_constraint ~loc e t = + mkexp ~loc (mkexp_desc_constraint e t) let mkexp_opt_constraint ~loc e = function | None -> e @@ -306,9 +322,12 @@ type ('dot,'index) array_family = { } -let bigarray_untuplify = function - { pexp_desc = Pexp_tuple explist; pexp_loc = _ } -> explist - | exp -> [exp] +let bigarray_untuplify exp = + match exp.pexp_desc with + | Pexp_tuple explist + when List.for_all (fun (l, _) -> Option.is_none l) explist -> + List.map snd explist + | _ -> [exp] let builtin_arraylike_name loc _ ~assign paren_kind n = let opname = if assign then "set" else "get" in @@ -324,8 +343,8 @@ let builtin_arraylike_name loc _ ~assign paren_kind n = | Two -> "Array2" | Three -> "Array3" | Many -> "Genarray" in - Ldot(Lident "Bigarray", submodule_name) in - ghloc ~loc (Ldot(prefix,opname)) + Ldot(mknoloc (Lident "Bigarray"), mknoloc submodule_name) in + ghloc ~loc (Ldot(mknoloc prefix, mknoloc opname)) let builtin_arraylike_index loc paren_kind index = match paren_kind with | Paren | Bracket -> One, [Nolabel, index] @@ -355,7 +374,7 @@ let user_indexing_operator_name loc (prefix,ext) ~assign paren_kind n = String.concat "" ["."; ext; left; mid; right; assign] in let lid = match prefix with | None -> Lident name - | Some p -> Ldot(p,name) in + | Some p -> Ldot(mknoloc p,mknoloc name) in ghloc ~loc lid let user_index loc _ index = @@ -386,9 +405,9 @@ let indexop_unclosed_error loc_s s loc_e = unclosed left loc_s right loc_e *) -let lapply ~loc p1 p2 = +let lapply ~loc p1 loc_p1 p2 loc_p2 = if !Clflags.applicative_functors - then Lapply(p1, p2) + then Lapply(mkrhs p1 loc_p1, mkrhs p2 loc_p2) else raise (Syntaxerr.Error( Syntaxerr.Applicative_path (make_loc loc))) @@ -426,33 +445,28 @@ let wrap_type_annotation ~loc newtypes core_type body = let exp = mk_newtypes newtypes exp in (exp, ghtyp(Ptyp_poly(newtypes, Typ.varify_constructors newtypes core_type))) -let wrap_exp_attrs ~loc body (ext, attrs) = - let ghexp = ghexp ~loc in +let pexp_extension ~id e = Pexp_extension (id, PStr [mkstrexp e []]) + +let mkexp_attrs ~loc desc (ext, attrs) = (* todo: keep exact location for the entire attribute *) - let body = {body with pexp_attributes = attrs @ body.pexp_attributes} in match ext with - | None -> body - | Some id -> ghexp(Pexp_extension (id, PStr [mkstrexp body []])) + | None -> mkexp ~loc ~attrs desc + | Some id -> + mkexp ~loc (pexp_extension ~id (ghexp ~loc ~attrs desc)) -let mkexp_attrs ~loc d attrs = - wrap_exp_attrs ~loc (mkexp ~loc d) attrs - -let wrap_typ_attrs ~loc typ (ext, attrs) = +let mktyp_attrs ~loc desc (ext, attrs) = (* todo: keep exact location for the entire attribute *) - let typ = {typ with ptyp_attributes = attrs @ typ.ptyp_attributes} in match ext with - | None -> typ - | Some id -> ghtyp ~loc (Ptyp_extension (id, PTyp typ)) + | None -> mktyp ~loc ~attrs desc + | Some id -> + mktyp ~loc (Ptyp_extension (id, PTyp (ghtyp ~loc ~attrs desc))) -let wrap_pat_attrs ~loc pat (ext, attrs) = +let mkpat_attrs ~loc desc (ext, attrs) = (* todo: keep exact location for the entire attribute *) - let pat = {pat with ppat_attributes = attrs @ pat.ppat_attributes} in match ext with - | None -> pat - | Some id -> ghpat ~loc (Ppat_extension (id, PPat (pat, None))) - -let mkpat_attrs ~loc d attrs = - wrap_pat_attrs ~loc (mkpat ~loc d) attrs + | None -> mkpat ~loc ~attrs desc + | Some id -> + mkpat ~loc (Ppat_extension (id, PPat (ghpat ~loc ~attrs desc, None))) let wrap_class_attrs ~loc:_ body attrs = {body with pcl_attributes = attrs @ body.pcl_attributes} @@ -461,25 +475,20 @@ let wrap_mod_attrs ~loc:_ attrs body = let wrap_mty_attrs ~loc:_ attrs body = {body with pmty_attributes = attrs @ body.pmty_attributes} -let wrap_str_ext ~loc body ext = - match ext with - | None -> body - | Some id -> ghstr ~loc (Pstr_extension ((id, PStr [body]), [])) - let wrap_mkstr_ext ~loc (item, ext) = - wrap_str_ext ~loc (mkstr ~loc item) ext - -let wrap_sig_ext ~loc body ext = match ext with - | None -> body - | Some id -> ghsig ~loc (Psig_extension ((id, PSig [body]), [])) + | None -> mkstr ~loc item + | Some id -> mkstr ~loc (Pstr_extension ((id, PStr [ghstr ~loc item]), [])) let wrap_mksig_ext ~loc (item, ext) = - wrap_sig_ext ~loc (mksig ~loc item) ext + match ext with + | None -> mksig ~loc item + | Some id -> mksig ~loc (Psig_extension ((id, PSig [ghsig ~loc item]), [])) let mk_quotedext ~loc (id, idloc, str, strloc, delim) = let exp_id = mkloc id idloc in - let e = ghexp ~loc (Pexp_constant (Pconst_string (str, strloc, delim))) in + let const = Const.mk ~loc:strloc (Pconst_string (str, strloc, delim)) in + let e = ghexp ~loc (Pexp_constant const) in (exp_id, PStr [mkstrexp e []]) let text_str pos = Str.text (rhs_text pos) @@ -598,6 +607,69 @@ let class_of_let_bindings ~loc lbs body = assert (lbs.lbs_extension = None); mkclass ~loc (Pcl_let (lbs.lbs_rec, List.rev bindings, body)) +(* If all the parameters are [Pparam_newtype x], then return [Some xs] where + [xs] is the corresponding list of values [x]. This function is optimized for + the common case, where a list of parameters contains at least one value + parameter. +*) +let all_params_as_newtypes = + let is_newtype { pparam_desc; _ } = + match pparam_desc with + | Pparam_newtype _ -> true + | Pparam_val _ -> false + in + let as_newtype { pparam_desc; pparam_loc } = + match pparam_desc with + | Pparam_newtype x -> Some (x, pparam_loc) + | Pparam_val _ -> None + in + fun params -> + if List.for_all is_newtype params + then Some (List.filter_map as_newtype params) + else None + +(* Given a construct [fun (type a b c) : t -> e], we construct + [Pexp_newtype(a, Pexp_newtype(b, Pexp_newtype(c, Pexp_constraint(e, t))))] + rather than a [Pexp_function]. +*) +let mkghost_newtype_function_body newtypes body_constraint body = + let wrapped_body = + match body_constraint with + | None -> body + | Some body_constraint -> + let loc = { body.pexp_loc with loc_ghost = true } in + Exp.mk (mkexp_desc_constraint body body_constraint) ~loc + in + let expr = + List.fold_right + (fun (newtype, newtype_loc) e -> + (* Mints a ghost location that approximates the newtype's "extent" as + being from the start of the newtype param until the end of the + function body. + *) + let loc = (newtype_loc.Location.loc_start, body.pexp_loc.loc_end) in + ghexp (Pexp_newtype (newtype, e)) ~loc) + newtypes + wrapped_body + in + expr.pexp_desc + +let mkfunction params body_constraint body = + match body with + | Pfunction_cases _ -> Pexp_function (params, body_constraint, body) + | Pfunction_body body_exp -> + (* If all the params are newtypes, then we don't create a function node; + we create nested newtype nodes. *) + match all_params_as_newtypes params with + | None -> Pexp_function (params, body_constraint, body) + | Some newtypes -> + mkghost_newtype_function_body newtypes body_constraint body_exp + +let mk_functor_typ args mty = + List.fold_left (fun acc (startpos, arg) -> + mkmty ~loc:(startpos, mty.pmty_loc.loc_end) (Pmty_functor (arg, acc))) + mty args + (* Alternatively, we could keep the generic module type in the Parsetree and extract the package type during type-checking. In that case, the assertions below should be turned into explicit checks. *) @@ -609,11 +681,11 @@ let package_type_of_module_type pmty = | Pwith_type (lid, ptyp) -> let loc = ptyp.ptype_loc in if ptyp.ptype_params <> [] then - err loc "parametrized types are not supported"; + err loc Syntaxerr.Parameterized_types; if ptyp.ptype_cstrs <> [] then - err loc "constrained types are not supported"; + err loc Syntaxerr.Constrained_types; if ptyp.ptype_private <> Public then - err loc "private types are not supported"; + err loc Syntaxerr.Private_types; (* restrictions below are checked by the 'with_constraint' rule *) (* assert (ptyp.ptype_kind = Ptype_abstract); *) @@ -623,7 +695,7 @@ let package_type_of_module_type pmty = | None -> None end | _ -> - err pmty.pmty_loc "only 'with type t =' constraints are supported"; + err pmty.pmty_loc Not_with_type; None in match pmty with @@ -631,8 +703,7 @@ let package_type_of_module_type pmty = | {pmty_desc = Pmty_with({pmty_desc = Pmty_ident lid}, cstrs)} -> (lid, List.filter_map map_cstr cstrs, pmty.pmty_attributes) | _ -> - err pmty.pmty_loc - "only module type identifier and 'with type' constraints are supported" + err pmty.pmty_loc Neither_identifier_nor_with_type ; (Location.mkloc (Lident "_") pmty.pmty_loc, [], []) let mk_directive_arg ~loc k = @@ -657,33 +728,6 @@ let merloc startpos ?endpos x = let attr = { attr_name = str; attr_loc = loc; attr_payload = PStr [] } in { x with pexp_attributes = attr :: x.pexp_attributes } -let val_of_lwt_bindings ~loc lbs = - let bindings = - List.map - (fun lb -> - Vb.mk ~loc:lb.lb_loc ~attrs:lb.lb_attributes - ~docs:(Lazy.force lb.lb_docs) - ~text:(Lazy.force lb.lb_text) - lb.lb_pattern (Fake.app Fake.Lwt.un_lwt lb.lb_expression)) - lbs.lbs_bindings - in - let str = mkstr ~loc (Pstr_value(lbs.lbs_rec, List.rev bindings)) in - match lbs.lbs_extension with - | None -> str - | Some id -> ghstr ~loc (Pstr_extension((id, PStr [str]), [])) - -let expr_of_lwt_bindings ~loc lbs body = - let bindings = - List.map - (fun lb -> - Vb.mk ~loc:lb.lb_loc ~attrs:lb.lb_attributes - lb.lb_pattern (Fake.app Fake.Lwt.un_lwt lb.lb_expression)) - lbs.lbs_bindings - in - Fake.app Fake.Lwt.in_lwt - (mkexp_attrs ~loc (Pexp_let(lbs.lbs_rec, List.rev bindings, body)) - (lbs.lbs_extension, [])) - %} %[@printer.header @@ -755,6 +799,7 @@ let expr_of_lwt_bindings ~loc lbs body = %token DOT [@symbol "."] %token DOTDOT [@symbol ".."] %token DOWNTO [@symbol "downto"] +%token EFFECT [@symbol "effect"] %token ELSE [@symbol "else"] %token END [@symbol "end"] %token EOF @@ -768,9 +813,9 @@ let expr_of_lwt_bindings ~loc lbs body = %token FUNCTION [@symbol "function"] %token FUNCTOR [@symbol "functor"] %token GREATER [@symbol ">"] -%token SLASHGREATER [@symbol "/>"] %token GREATERRBRACE [@symbol ">}"] %token GREATERRBRACKET [@symbol ">]"] +%token SLASHGREATER [@symbol "/>"] %token IF [@symbol "if"] %token IN [@symbol "in"] %token INCLUDE [@symbol "include"] @@ -867,16 +912,10 @@ let expr_of_lwt_bindings ~loc lbs body = %token EOL "\\n" (* not great, but EOL is unused *) -%token LET_LWT [@cost 1] [@symbol "lwt"] -%token TRY_LWT [@cost 1] [@symbol "try_lwt"] -%token MATCH_LWT [@cost 1] [@symbol "match_lwt"] -%token FINALLY_LWT [@cost 1] [@symbol "finally"] -%token FOR_LWT [@cost 1] [@symbol "for_lwt"] -%token WHILE_LWT [@cost 1] [@symbol "while_lwt"] - -%token DOTLESS [@cost 1] [@symbol ".<"] -%token DOTTILDE [@cost 1] [@symbol ".~"] -%token GREATERDOT [@cost 1] [@symbol ">."] +(* see the [metaocaml_expr] comment *) +%token METAOCAML_ESCAPE [@symbol ".~"] +%token METAOCAML_BRACKET_OPEN [@symbol ".<"] +%token METAOCAML_BRACKET_CLOSE [@symbol ">."] /* Precedences and associativities. @@ -904,10 +943,9 @@ The precedences must be listed from low to high. %nonassoc IN %nonassoc below_SEMI %nonassoc SEMI /* below EQUAL ({lbl=...; lbl=...}) */ -%nonassoc LET LET_LWT /* above SEMI ( ...; let ... in ...) */ +%nonassoc LET /* above SEMI ( ...; let ... in ...) */ %nonassoc below_WITH %nonassoc FUNCTION WITH /* below BAR (match ... with ...) */ -%nonassoc FINALLY_LWT %nonassoc AND /* above WITH (module rec A: SIG with ... and ...) */ %nonassoc THEN /* below ELSE (if ... then ...) */ %nonassoc ELSE /* (if ... then ... else ...) */ @@ -916,7 +954,7 @@ The precedences must be listed from low to high. %nonassoc AS %left BAR /* pattern (p|p|p) */ %nonassoc below_COMMA -%left COMMA /* expr/expr_comma_list (e,e,e) */ +%left COMMA /* expr/labeled_tuple (e,e,e) */ %right MINUSGREATER /* function_type (t -> t -> t) */ %right OR BARBAR /* expr (e || e || e) */ %right AMPERSAND AMPERAMPER /* expr (e && e && e) */ @@ -942,9 +980,9 @@ The precedences must be listed from low to high. %nonassoc BACKQUOTE BANG BEGIN CHAR FALSE FLOAT INT OBJECT LBRACE LBRACELESS LBRACKET LBRACKETBAR LIDENT LPAREN NEW PREFIXOP STRING TRUE UIDENT UNDERSCORE - LBRACKETPERCENT QUOTED_STRING_EXPR - DOTLESS DOTTILDE GREATERDOT JSX_LIDENT JSX_UIDENT + LBRACKETPERCENT QUOTED_STRING_EXPR + METAOCAML_BRACKET_OPEN METAOCAML_ESCAPE /* Entry points */ @@ -1105,6 +1143,27 @@ reversed_nonempty_llist(X): xs = rev(reversed_nonempty_llist(X)) { xs } +(* [reversed_nonempty_concat(X)] recognizes a nonempty sequence of [X]s (each of + which is a list), and produces an OCaml list of their concatenation in + reverse order -- that is, the last element of the last list in the input text + appears first in the list. +*) +reversed_nonempty_concat(X): + x = X + { List.rev x } +| xs = reversed_nonempty_concat(X) x = X + { List.rev_append x xs } + +(* [nonempty_concat(X)] recognizes a nonempty sequence of [X]s + (each of which is a list), and produces an OCaml list of their concatenation + in direct order -- that is, the first element of the first list in the input + text appears first in the list. +*) + +%inline nonempty_concat(X): + xs = rev(reversed_nonempty_concat(X)) + { xs } + (* [reversed_separated_nonempty_llist(separator, X)] recognizes a nonempty list of [X]s, separated with [separator]s, and produces an OCaml list in reverse order -- that is, the last element in the input text appears first in this @@ -1740,11 +1799,11 @@ module_type [@recovery default_module_type ()]: | FUNCTOR attrs = attributes args = functor_args MINUSGREATER mty = module_type %prec below_WITH - { wrap_mty_attrs ~loc:$sloc attrs ( - List.fold_left (fun acc (startpos, arg) -> - mkmty ~loc:(startpos, $endpos) (Pmty_functor (arg, acc)) - ) mty args - ) } + { wrap_mty_attrs ~loc:$sloc attrs (mk_functor_typ args mty) } + | args = functor_args + MINUSGREATER mty = module_type + %prec below_WITH + { mk_functor_typ args mty } | MODULE TYPE OF attributes module_expr %prec below_LBRACKETAT { mkmty ~loc:$sloc ~attrs:$4 (Pmty_typeof $5) } | LPAREN module_type RPAREN @@ -1758,8 +1817,6 @@ module_type [@recovery default_module_type ()]: | mkmty( mkrhs(mty_longident) { Pmty_ident $1 } - | LPAREN RPAREN MINUSGREATER module_type - { Pmty_functor(Unit, $4) } | module_type MINUSGREATER module_type %prec below_WITH { Pmty_functor(Named (mknoloc None, $1), $3) } @@ -2211,8 +2268,8 @@ class_signature: class_self_type: LPAREN core_type RPAREN { $2 } - | mktyp((* empty *) { Ptyp_any }) - { $1 } + | (* empty *) + { ghtyp ~loc:$sloc Ptyp_any } ; %inline class_sig_fields: flatten(text_csig(class_sig_field)*) @@ -2340,16 +2397,45 @@ class_type_declarations: /* Core expressions */ -seq_expr: - | expr %prec below_SEMI { $1 } - | expr SEMI { $1 } - | mkexp(expr SEMI seq_expr +%inline or_function(EXPR): + | EXPR + { $1 } + | FUNCTION ext_attributes match_cases + { let loc = make_loc $sloc in + let cases = $3 in + (* There are two choices of where to put attributes: on the + Pexp_function node; on the Pfunction_cases body. We put them on the + Pexp_function node here because the compiler only uses + Pfunction_cases attributes for enabling/disabling warnings in + typechecking. For standalone function cases, we want the compiler to + respect, e.g., [@inline] attributes. + *) + let desc = mkfunction [] None (Pfunction_cases (cases, loc, [])) in + mkexp_attrs ~loc:$sloc desc $2 + } +; + +(* [fun_seq_expr] (and [fun_expr]) are legal expression bodies of a function. + [seq_expr] (and [expr]) are expressions that appear in other contexts + (e.g. subexpressions of the expression body of a function). + + [fun_seq_expr] can't be a bare [function _ -> ...]. [seq_expr] can. + + This distinction exists because [function _ -> ...] is parsed as a *function + cases* body of a function, not an expression body. This so functions can be + parsed with the intended arity. +*) +fun_seq_expr: + | fun_expr %prec below_SEMI { $1 } + | fun_expr SEMI { $1 } + | mkexp(fun_expr SEMI seq_expr { Pexp_sequence($1, $3) }) { $1 } - | expr SEMI PERCENT attr_id seq_expr - { let seq = mkexp ~loc:$sloc (Pexp_sequence ($1, $5)) in - let payload = PStr [mkstrexp seq []] in - mkexp ~loc:$sloc (Pexp_extension ($4, payload)) } + | fun_expr SEMI PERCENT attr_id seq_expr + { mkexp_attrs ~loc:$sloc (Pexp_sequence ($1, $5)) (Some $4, []) } +; +seq_expr: + | or_function(fun_seq_expr) { $1 } ; labeled_simple_pattern: QUESTION LPAREN label_let_pattern opt_default RPAREN @@ -2421,10 +2507,10 @@ let_pattern [@recovery default_pattern ()]: %inline qualified_dotop: ioption(DOT mod_longident {$2}) DOTOP { $1, $2 }; -%public expr [@recovery default_expr ()]: +%public fun_expr [@recovery default_expr ()]: simple_expr %prec below_HASH { $1 } - | expr_attrs + | fun_expr_attrs { let desc, attrs = $1 in mkexp_attrs ~loc:$sloc desc attrs } | mkexp(expr_) @@ -2437,8 +2523,9 @@ let_pattern [@recovery default_pattern ()]: 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}) } - | expr COLONCOLON expr - { mkexp_cons ~loc:$sloc $loc($2) (ghexp ~loc:$sloc (Pexp_tuple[$1;(merloc $endpos($2) $3)])) } + | fun_expr COLONCOLON expr + { mkexp_cons ~loc:$sloc $loc($2) + (ghexp ~loc:$sloc (Pexp_tuple[None,$1;None,(merloc $endpos($2) $3)])) } | mkrhs(label) LESSMINUS expr { mkexp ~loc:$sloc (Pexp_setinstvar($1, $3)) } | simple_expr DOT mkrhs(label_longident) LESSMINUS expr @@ -2447,7 +2534,7 @@ let_pattern [@recovery default_pattern ()]: { mk_indexop_expr builtin_indexing_operators ~loc:$sloc $1 } | indexop_expr(qualified_dotop, expr_semi_list, LESSMINUS v=expr {Some v}) { mk_indexop_expr user_indexing_operators ~loc:$sloc $1 } - | expr attribute + | fun_expr attribute { Exp.attr $1 $2 } (* /* BEGIN AVOID */ @@ -2456,7 +2543,10 @@ let_pattern [@recovery default_pattern ()]: /* END AVOID */ *) ; -%inline expr_attrs: +%public %inline expr: + | or_function(fun_expr) { $1 } +; +%inline fun_expr_attrs: | LET MODULE ext_attributes mkrhs(module_name) module_binding_body IN seq_expr { Pexp_letmodule($4, $5, (merloc $endpos($6) $7)), $3 } | LET EXCEPTION ext_attributes let_exception_declaration IN seq_expr @@ -2465,13 +2555,12 @@ let_pattern [@recovery default_pattern ()]: { let open_loc = make_loc ($startpos($2), $endpos($5)) in let od = Opn.mk $5 ~override:$3 ~loc:open_loc in Pexp_open(od, (merloc $endpos($6) $7)), $4 } - | FUNCTION ext_attributes match_cases - { Pexp_function $3, $2 } - | FUN ext_attributes labeled_simple_pattern fun_def - { let (l,o,p) = $3 in - Pexp_fun(l, o, p, $4), $2 } - | FUN ext_attributes LPAREN TYPE lident_list RPAREN fun_def - { (mk_newtypes ~loc:$sloc $5 $7).pexp_desc, $2 } + /* Cf #5939: we used to accept (fun p when e0 -> e) */ + | FUN ext_attributes fun_params preceded(COLON, atomic_type)? + MINUSGREATER fun_body + { let body_constraint = Option.map (fun x -> Pconstraint x) $4 in + mkfunction $3 body_constraint $6, $2 + } | MATCH ext_attributes seq_expr WITH match_cases { Pexp_match($3, $5), $2 } | TRY ext_attributes seq_expr WITH match_cases @@ -2501,18 +2590,18 @@ let_pattern [@recovery default_pattern ()]: %inline expr_: | simple_expr nonempty_llist(labeled_simple_expr) { Pexp_apply($1, $2) } - | expr_comma_list %prec below_COMMA + | labeled_tuple %prec below_COMMA { Pexp_tuple($1) } | mkrhs(constr_longident) simple_expr %prec below_HASH { Pexp_construct($1, Some $2) } | name_tag simple_expr %prec below_HASH { Pexp_variant($1, Some $2) } - | e1 = expr op = op(infix_operator) e2 = expr + | e1 = fun_expr op = op(infix_operator) e2 = expr { mkinfix e1 op e2 } | subtractive expr %prec prec_unary_minus - { mkuminus ~oploc:$loc($1) $1 $2 } + { mkuminus ~sloc:$sloc ~oploc:$loc($1) $1 $2 } | additive expr %prec prec_unary_plus - { mkuplus ~oploc:$loc($1) $1 $2 } + { mkuplus ~sloc:$sloc ~oploc:$loc($1) $1 $2 } ; %public simple_expr: @@ -2532,6 +2621,7 @@ let_pattern [@recovery default_pattern ()]: | indexop_error (DOT, seq_expr) { $1 } | indexop_error (qualified_dotop, expr_semi_list) { $1 } *) + | metaocaml_expr { $1 } | simple_expr_attrs { let desc, attrs = $1 in mkexp_attrs ~loc:$sloc desc attrs } @@ -2551,9 +2641,9 @@ let_pattern [@recovery default_pattern ()]: | NEW ext_attributes mkrhs(class_longident) { Pexp_new($3), $2 } | LPAREN MODULE ext_attributes module_expr RPAREN - { Pexp_pack $4, $3 } - | LPAREN MODULE ext_attributes module_expr COLON package_type RPAREN - { Pexp_constraint (ghexp ~loc:$sloc (Pexp_pack $4), $6), $3 } + { Pexp_pack ($4, None), $3 } + | LPAREN MODULE ext_attributes module_expr COLON package_type_ RPAREN + { Pexp_pack ($4, Some $6), $3 } (* | LPAREN MODULE ext_attributes module_expr COLON error { unclosed "(" $loc($1) ")" $loc($6) } @@ -2565,6 +2655,23 @@ let_pattern [@recovery default_pattern ()]: { unclosed "object" $loc($1) "end" $loc($4) } *) ; + +(* We include this parsing rule from the BER-MetaOCaml patchset + (see https://okmij.org/ftp/ML/MetaOCaml.html) + even though the lexer does *not* include any lexing rule + for the METAOCAML_* tokens, so they + will never be produced by the upstream compiler. + + The intention of this dead parsing rule is purely to ease the + future maintenance work on MetaOCaml. +*) +%inline metaocaml_expr: + | METAOCAML_ESCAPE e = simple_expr + { mkexp ~loc:$sloc (pexp_extension ~id:(mknoloc "metaocaml.escape") e) } + | METAOCAML_BRACKET_OPEN e = seq_expr METAOCAML_BRACKET_CLOSE + { mkexp ~loc:$sloc (pexp_extension ~id:(mknoloc "metaocaml.bracket") e) } +; + %inline simple_expr_: | mkrhs(val_longident) { Pexp_ident ($1) } @@ -2665,10 +2772,10 @@ let_pattern [@recovery default_pattern ()]: { unclosed "[" $loc($3) "]" $loc($5) } *) | od=open_dot_declaration DOT LPAREN MODULE ext_attributes module_expr COLON - package_type RPAREN + ptyp = package_type_ RPAREN { let modexp = mkexp_attrs ~loc:($startpos($3), $endpos) - (Pexp_constraint (ghexp ~loc:$sloc (Pexp_pack $6), $8)) $5 in + (Pexp_pack ($6, Some ptyp)) $5 in Pexp_open(od, modexp) } (* | mod_longident DOT @@ -2684,14 +2791,14 @@ jsx_element: in Jsx_helper.make_jsx_element () ~raise:raise_error ~loc:$loc(tag) ~tag ~end_tag:None ~props ~children } - | tag=jsx_longident(JSX_UIDENT, JSX_LIDENT) props=llist(jsx_prop) + | tag=jsx_longident(JSX_UIDENT, JSX_LIDENT) props=llist(jsx_prop) GREATER children=llist(simple_expr) end_tag=jsx_longident(JSX_UIDENT_E, JSX_LIDENT_E) end_tag_=GREATER { - let children = + let children = let children, loc = mktailexp $loc(children) children in mkexp ~loc children in let _ = end_tag_ in - Jsx_helper.make_jsx_element () + Jsx_helper.make_jsx_element () ~raise:raise_error ~loc:$loc(tag) ~tag ~end_tag:(Some (end_tag, $loc(end_tag_))) ~props ~children } ; @@ -2732,10 +2839,9 @@ let_binding_body_no_punning: { let v = $1 in (* PR#7344 *) let t = match $2 with - Some t, None -> + Pconstraint t -> Pvc_constraint { locally_abstract_univars = []; typ=t } - | ground, Some coercion -> Pvc_coercion { ground; coercion} - | _ -> assert false + | Pcoerce (ground, coercion) -> Pvc_coercion { ground; coercion} in (v, $4, Some t) } @@ -2817,19 +2923,26 @@ letop_bindings: let and_ = {pbop_op; pbop_pat; pbop_exp; pbop_loc} in let_pat, let_exp, and_ :: rev_ands } ; -fun_binding: - strict_binding - { $1 } - | type_constraint EQUAL seq_expr - { mkexp_constraint ~loc:$sloc $3 $1 } -; strict_binding: EQUAL seq_expr { $2 } - | labeled_simple_pattern fun_binding - { let (l, o, p) = $1 in ghexp ~loc:$sloc (Pexp_fun(l, o, p, $2)) } - | LPAREN TYPE lident_list RPAREN fun_binding - { mk_newtypes ~loc:$sloc $3 $5 } + | fun_params type_constraint? EQUAL fun_body + { ghexp ~loc:$sloc (mkfunction $1 $2 $4) + } +; +fun_body: + | FUNCTION ext_attributes match_cases + { let ext, attrs = $2 in + match ext with + | None -> Pfunction_cases ($3, make_loc $sloc, attrs) + | Some _ -> + (* function%foo extension nodes interrupt the arity *) + let cases = Pfunction_cases ($3, make_loc $sloc, []) in + Pfunction_body + (mkexp_attrs ~loc:$sloc (mkfunction [] None cases) $2) + } + | fun_seq_expr + { Pfunction_body $1 } ; %inline match_cases: xs = preceded_or_separated_nonempty_llist(BAR, match_case) @@ -2844,6 +2957,7 @@ match_case: { Exp.case $1 (merloc $endpos($2) (Exp.unreachable ~loc:(make_loc $loc($3)) ())) } ; +(* fun_def: MINUSGREATER seq_expr { (merloc $endpos($1) $2) } @@ -2859,9 +2973,108 @@ fun_def: | LPAREN TYPE lident_list RPAREN fun_def { mk_newtypes ~loc:$sloc $3 $5 } ; -%inline expr_comma_list: - es = separated_nontrivial_llist(COMMA, expr) - { es } +*) +fun_param_as_list: + | LPAREN TYPE ty_params = lident_list RPAREN + { (* We desugar (type a b c) to (type a) (type b) (type c). + If we do this desugaring, the loc for each parameter is a ghost. + *) + let loc = + match ty_params with + | [] -> assert false (* lident_list is non-empty *) + | [_] -> make_loc $sloc + | _ :: _ :: _ -> ghost_loc $sloc + in + List.map + (fun x -> { pparam_loc = loc; pparam_desc = Pparam_newtype x }) + ty_params + } + | labeled_simple_pattern + { let a, b, c = $1 in + [ { pparam_loc = make_loc $sloc; pparam_desc = Pparam_val (a, b, c) } ] + } +; +fun_params: + | nonempty_concat(fun_param_as_list) { $1 } +; + +(* Parsing labeled tuple expressions: + + The grammar we want to parse is something like: + + labeled_tuple_element := expr | ~x:expr | ~x | ~(x:ty) + labeled_tuple := lt_element [, lt_element]+ + + (The last case of [labeled_tuple_element] is a punned label with a type + constraint, which is allowed for functions, so we allow it here). + + So you might think [labeled_tuple] could therefore just be: + + labeled_tuple : + separated_nontrivial_llist(COMMA, labeled_tuple_element) + + But this doesn't work: + + - If we don't mark [labeled_tuple_element] %inline, this causes many + reduce/reduce conflicts (basically just ambiguities) because + [labeled_tuple_element] trivially reduces to [expr]. + + - If we do mark [labeled_tuple_element] %inline, it is not allowed to have + %prec annotations. Menhir doesn't permit these on %inline non-terminals + that are used in non-tail position. + + To get around this, we do mark it inlined, and then because we can only use + it in tail position it is _manually_ inlined into the occurrences in + [separated_nontrivial_llist] where it doesn't appear in tail position. This + results in [labeled_tuple] and [reversed_labeled_tuple_body] below. So the + latter is just a list of comma-separated labeled tuple elements, with length + at least two, where the first element in the base case is inlined (resulting + in one base case for each case of [labeled_tuple_element]. *) +%inline labeled_tuple_element : + | expr + { None, $1 } + | LABEL simple_expr %prec below_HASH + { Some $1, $2 } + | TILDE label = LIDENT + { let loc = $loc(label) in + Some label, mkexpvar ~loc label } + | TILDE LPAREN label = LIDENT c = type_constraint RPAREN %prec below_HASH + { Some label, + mkexp_constraint ~loc:($startpos($2), $endpos) + (mkexpvar ~loc:$loc(label) label) c } +; +reversed_labeled_tuple_body: + (* > 2 elements *) + xs = reversed_labeled_tuple_body + COMMA + x = labeled_tuple_element + { x :: xs } + (* base cases (2 elements) *) +| x1 = expr + COMMA + x2 = labeled_tuple_element + { [ x2; None, x1 ] } +| l1 = LABEL x1 = simple_expr + COMMA + x2 = labeled_tuple_element + { [ x2; Some l1, x1 ] } +| TILDE l1 = LIDENT + COMMA + x2 = labeled_tuple_element + { let loc = $loc(l1) in + [ x2; Some l1, mkexpvar ~loc l1] } +| TILDE LPAREN l1 = LIDENT c = type_constraint RPAREN + COMMA + x2 = labeled_tuple_element + { let x1 = + mkexp_constraint ~loc:($startpos($2), $endpos) + (mkexpvar ~loc:$loc(l1) l1) c + in + [ x2; Some l1, x1] } +; +%inline labeled_tuple: + xs = rev(reversed_labeled_tuple_body) + { xs } ; record_expr_content: eo = ioption(terminated(simple_expr, WITH)) @@ -2904,9 +3117,9 @@ record_expr_content: { es } ; type_constraint: - COLON core_type { (Some $2, None) } - | COLON core_type COLONGREATER core_type { (Some $2, Some $4) } - | COLONGREATER core_type { (None, Some $2) } + COLON core_type { Pconstraint $2 } + | COLON core_type COLONGREATER core_type { Pcoerce (Some $2, $4) } + | COLONGREATER core_type { Pcoerce (None, $2) } (*| COLON error { syntax_error() } *) (*| COLONGREATER error { syntax_error() } *) ; @@ -2937,6 +3150,8 @@ pattern [@recovery default_pattern ()]: { $1 } | EXCEPTION ext_attributes pattern %prec prec_constr_appl { mkpat_attrs ~loc:$sloc (Ppat_exception $3) $2} + | EFFECT pattern_gen COMMA simple_pattern + { mkpat ~loc:$sloc (Ppat_effect($2,$4)) } ; pattern_no_exn: @@ -2946,7 +3161,8 @@ pattern_no_exn: %inline pattern_(self): | self COLONCOLON pattern - { mkpat_cons ~loc:$sloc $loc($2) (ghpat ~loc:$sloc (Ppat_tuple[$1;$3])) } + { mkpat_cons ~loc:$sloc $loc($2) + (ghpat ~loc:$sloc (Ppat_tuple ([None, $1; None, $3], Closed))) } | self attribute { Pat.attr $1 $2 } | pattern_gen @@ -2956,8 +3172,8 @@ pattern_no_exn: { Ppat_alias($1, $3) } (*| self AS error { expecting $loc($3) "identifier" } *) - | pattern_comma_list(self) %prec below_COMMA - { Ppat_tuple(List.rev $1) } + | labeled_tuple_pattern(self) + { $1 } (*| self COLONCOLON error { expecting $loc($3) "pattern" } *) | self BAR pattern @@ -2982,6 +3198,7 @@ pattern_gen: | LAZY ext_attributes simple_pattern { mkpat_attrs ~loc:$sloc (Ppat_lazy $3) $2} ; + simple_pattern: mkpat(mkrhs(val_ident) %prec below_EQUAL { Ppat_var ($1) }) @@ -3066,10 +3283,66 @@ simple_delimited_pattern: { unclosed "[|" $loc($1) "|]" $loc($3) } *) ) { $1 } -pattern_comma_list(self): - pattern_comma_list(self) COMMA pattern { $3 :: $1 } - | self COMMA pattern { [$3; $1] } - (*| self COMMA error { expecting $loc($3) "pattern" } *) +(* Parsing labeled tuple patterns: + + Here we play essentially the same game we did for expressions - see the + comment beginning "Parsing labeled tuple expressions". + + One difference is that we would need to manually inline the definition of + individual elements in two places: Once in the base case for lists 2 or more + elements, and once in the special case for open patterns with just one + element (e.g., [~x, ..]). Rather than manually inlining + [labeled_tuple_pat_element] twice, we simply define it twice: once with the + [%prec] annotations needed for its occurrences in tail position, and once + without them suitable for use in other locations. +*) +%inline labeled_tuple_pat_element(self): + | self { None, $1 } + | LABEL simple_pattern %prec COMMA + { Some $1, $2 } + | TILDE label = LIDENT + { let loc = $loc(label) in + Some label, mkpatvar ~loc label } + | TILDE LPAREN label = LIDENT COLON cty = core_type RPAREN %prec COMMA + { let lbl_loc = $loc(label) in + let pat_loc = $startpos($2), $endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) } +; +(* If changing this, don't forget to change its copy just above. *) +%inline labeled_tuple_pat_element_noprec(self): + | self { None, $1 } + | LABEL simple_pattern + { Some $1, $2 } + | TILDE label = LIDENT + { let loc = $loc(label) in + Some label, mkpatvar ~loc label } + | TILDE LPAREN label = LIDENT COLON cty = core_type RPAREN + { let lbl_loc = $loc(label) in + let pat_loc = $startpos($2), $endpos in + let pat = mkpatvar ~loc:lbl_loc label in + Some label, mkpat ~loc:pat_loc (Ppat_constraint(pat, cty)) } +; +labeled_tuple_pat_element_list(self): + | labeled_tuple_pat_element_list(self) COMMA labeled_tuple_pat_element(self) + { $3 :: $1 } + | labeled_tuple_pat_element_noprec(self) COMMA labeled_tuple_pat_element(self) + { [ $3; $1 ] } + (*| self COMMA error + { expecting $loc($3) "pattern" }*) +; +reversed_labeled_tuple_pattern(self): + | labeled_tuple_pat_element_list(self) %prec below_COMMA + { Closed, $1 } + | labeled_tuple_pat_element_list(self) COMMA DOTDOT + { Open, $1 } + | labeled_tuple_pat_element_noprec(self) COMMA DOTDOT + { Open, [ $1 ] } +; +labeled_tuple_pattern(self): + | reversed_labeled_tuple_pattern(self) + { let closed, pat = $1 in + Ppat_tuple(List.rev pat, closed) } ; %inline pattern_semi_list: ps = separated_or_terminated_nonempty_list(SEMI, pattern) @@ -3277,15 +3550,25 @@ type_variance: | PLUS BANG | BANG PLUS { Covariant, Injective } | MINUS BANG | BANG MINUS { Contravariant, Injective } | INFIXOP2 - { if $1 = "+!" then Covariant, Injective else + { + if $1 = "+!" then Covariant, Injective else if $1 = "-!" then Contravariant, Injective else - (expecting $loc($1) "type_variance"; - NoVariance, NoInjectivity) } + if $1 = "+-" then Bivariant, NoInjectivity else + if $1 = "-+" then Bivariant, NoInjectivity else + if $1 = "+-!" then Bivariant, Injective else + if $1 = "-+!" then Bivariant, Injective else begin + expecting $loc($1) "type_variance"; + NoVariance, NoInjectivity + end } | PREFIXOP - { if $1 = "!+" then Covariant, Injective else + { + if $1 = "!+" then Covariant, Injective else if $1 = "!-" then Contravariant, Injective else - (expecting $loc($1) "type_variance"; - NoVariance, NoInjectivity) } + if $1 = "!+-" then Bivariant, Injective else + if $1 = "!-+" then Bivariant, Injective else begin + expecting $loc($1) "type_variance"; + NoVariance, NoInjectivity + end } ; (* A sequence of constructor declarations is either a single BAR, which @@ -3336,7 +3619,7 @@ str_exception_declaration: attrs = post_item_attributes { let loc = make_loc $sloc in let docs = symbol_docs $sloc in - Te.mk_exception ~attrs + Te.mk_exception ~attrs ~loc (Te.rebind id lid ~attrs:(attrs1 @ attrs2) ~loc ~docs) , ext } ; @@ -3351,7 +3634,7 @@ sig_exception_declaration: { 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.mk_exception ~attrs ~loc (Te.decl id ~vars ~args ?res ~attrs:(attrs1 @ attrs2) ~loc ~docs) , ext } ; @@ -3424,7 +3707,8 @@ label_declaration_semi: attrs2 = post_item_attributes { let docs = symbol_docs $sloc in let attrs = attrs1 @ attrs2 in - Te.mk tid cs ~params ~priv ~attrs ~docs, + let loc = make_loc $sloc in + Te.mk tid cs ~params ~priv ~attrs ~docs ~loc, ext } ; %inline extension_constructor(opening): @@ -3492,8 +3776,8 @@ with_type_binder: /* Polymorphic types */ %inline typevar: - QUOTE mkrhs(ident) - { $2 } + QUOTE ident + { mkrhs $2 $sloc } ; %inline typevar_list: nonempty_llist(typevar) @@ -3547,7 +3831,7 @@ alias_type: function_type { $1 } | mktyp( - ty = alias_type AS QUOTE tyvar = ident + ty = alias_type AS tyvar = typevar { Ptyp_alias(ty, tyvar) } ) { $1 } @@ -3571,6 +3855,34 @@ function_type: { Ptyp_arrow(label, domain, codomain) } ) { $1 } + (* The next two cases are for labled tuples - see comment on [tuple_type] + below. + + The first case is present just to resolve a shift/reduce conflict in a + module type [S with t := x:t1 * t2 -> ...] which might be the beginning of + [S with t := x:t1 * t2 -> S'] or [S with t := x:t1 * t2 -> t3] + It is the same as the previous case, but with [arg_label] specialized to + [LIDENT COLON] and the domain type specialized to [proper_tuple_type]. + Apparently, this is sufficient for menhir to be able to delay a decision + about which of the above module type cases we are in. *) + | mktyp( + label = LIDENT COLON + tuple = proper_tuple_type + MINUSGREATER + codomain = function_type + { let ty, ltys = tuple in + let tuple_loc = $loc(tuple) in + let domain = + mktyp ~loc:tuple_loc (Ptyp_tuple ((None, ty) :: ltys)) + in + let domain = extra_rhs_core_type domain ~pos:(snd tuple_loc) in + Ptyp_arrow(Labelled label, domain, codomain) } + ) + { $1 } + | label = LIDENT COLON proper_tuple_type %prec MINUSGREATER + { let ty, ltys = $3 in + mktyp ~loc:$sloc (Ptyp_tuple ((Some label, ty) :: ltys)) + } ; %inline arg_label: | label = optlabel @@ -3584,16 +3896,33 @@ function_type: - atomic types (see below); - proper tuple types: int * int * int list A proper tuple type is a star-separated list of at least two atomic types. - *) + Tuple components can also be labeled, as an [int * int list * y:bool]. + + However, the special case of labeled tuples where the first element has a + label is not parsed as a proper_tuple_type, but rather as a case of + function_type above. This resolves ambiguities around [x:t1 * t2 -> t3] + which must continue to parse as a function with one labeled argument even in + the presence of labled tuples. +*) tuple_type: | ty = atomic_type %prec below_HASH { ty } - | mktyp( - tys = separated_nontrivial_llist(STAR, atomic_type) - { Ptyp_tuple tys } - ) - { $1 } + | proper_tuple_type %prec below_WITH + { let ty, ltys = $1 in + mktyp ~loc:$sloc (Ptyp_tuple ((None, ty) :: ltys)) } +; +%inline proper_tuple_type: + | ty = atomic_type + STAR + ltys = separated_nonempty_llist(STAR, labeled_tuple_typ_element) + { ty, ltys } +; +%inline labeled_tuple_typ_element : + | atomic_type %prec STAR + { None, $1 } + | label = LIDENT COLON ty = atomic_type %prec STAR + { Some label, ty } ; (* Atomic types are the most basic level in the syntax of types. @@ -3604,44 +3933,100 @@ tuple_type: - applications of type constructors: int, int list, int option list - variant types: [`A] *) + + +(* + Delimited types: + - parenthesised type (type) + - first-class module types (module S) + - object types < x: t; ... > + - variant types [ `A ] + - extension [%foo ...] + + We support local opens on the following classes of types: + - parenthesised + - first-class module types + - variant types + + Object types are not support for local opens due to a potential + conflict with MetaOCaml syntax: + M.< x: t, y: t > + and quoted expressions: + .< e >. + + Extension types are not support for local opens merely as a precaution. +*) +delimited_type_supporting_local_open: + | LPAREN type_ = core_type RPAREN + { type_ } + | LPAREN MODULE ext_attrs = ext_attributes package_type = package_type_ RPAREN + { mktyp_attrs ~loc:$sloc (Ptyp_package package_type) ext_attrs } + | mktyp( + LBRACKET field = tag_field RBRACKET + { Ptyp_variant([ field ], Closed, None) } + | LBRACKET BAR fields = row_field_list RBRACKET + { Ptyp_variant(fields, Closed, None) } + | LBRACKET field = row_field BAR fields = row_field_list RBRACKET + { Ptyp_variant(field :: fields, Closed, None) } + | LBRACKETGREATER BAR? fields = row_field_list RBRACKET + { Ptyp_variant(fields, Open, None) } + | LBRACKETGREATER RBRACKET + { Ptyp_variant([], Open, None) } + | LBRACKETLESS BAR? fields = row_field_list RBRACKET + { Ptyp_variant(fields, Closed, Some []) } + | LBRACKETLESS BAR? fields = row_field_list + GREATER + tags = name_tag_list + RBRACKET + { Ptyp_variant(fields, Closed, Some tags) } + ) + { $1 } +; + +object_type: + | mktyp( + LESS meth_list = meth_list GREATER + { let (f, c) = meth_list in Ptyp_object (f, c) } + | LESS GREATER + { Ptyp_object ([], Closed) } + ) + { $1 } +; + +extension_type: + | mktyp ( + ext = extension + { Ptyp_extension ext } + ) + { $1 } +; + +delimited_type: + | object_type + | extension_type + | delimited_type_supporting_local_open + { $1 } +; + atomic_type: - | LPAREN core_type RPAREN - { $2 } - | LPAREN MODULE ext_attributes package_type RPAREN - { wrap_typ_attrs ~loc:$sloc (reloc_typ ~loc:$sloc $4) $3 } + | type_ = delimited_type + { type_ } | mktyp( /* begin mktyp group */ - QUOTE ident - { Ptyp_var $2 } - | UNDERSCORE - { Ptyp_any } - | tys = actual_type_parameters + tys = actual_type_parameters tid = mkrhs(type_longident) - { Ptyp_constr(tid, tys) } - | LESS meth_list GREATER - { let (f, c) = $2 in Ptyp_object (f, c) } - | LESS GREATER - { Ptyp_object ([], Closed) } + { Ptyp_constr (tid, tys) } | tys = actual_type_parameters HASH cid = mkrhs(clty_longident) - { Ptyp_class(cid, tys) } - | LBRACKET tag_field RBRACKET - (* not row_field; see CONFLICTS *) - { Ptyp_variant([$2], Closed, None) } - | LBRACKET BAR row_field_list RBRACKET - { Ptyp_variant($3, Closed, None) } - | LBRACKET row_field BAR row_field_list RBRACKET - { Ptyp_variant($2 :: $4, Closed, None) } - | LBRACKETGREATER BAR? row_field_list RBRACKET - { Ptyp_variant($3, Open, None) } - | LBRACKETGREATER RBRACKET - { Ptyp_variant([], Open, None) } - | LBRACKETLESS BAR? row_field_list RBRACKET - { Ptyp_variant($3, Closed, Some []) } - | LBRACKETLESS BAR? row_field_list GREATER name_tag_list RBRACKET - { Ptyp_variant($3, Closed, Some $5) } - | extension - { Ptyp_extension $1 } + { Ptyp_class (cid, tys) } + | mod_ident = mkrhs(mod_ext_longident) + DOT + type_ = delimited_type_supporting_local_open + { Ptyp_open (mod_ident, type_) } + | QUOTE ident = ident + { Ptyp_var ident } + | UNDERSCORE + { Ptyp_any } ) { $1 } /* end mktyp group */ ; @@ -3660,15 +4045,17 @@ atomic_type: | /* empty */ { [] } | ty = atomic_type - { [ty] } + { [ ty ] } | LPAREN tys = separated_nontrivial_llist(COMMA, core_type) RPAREN { tys } ; -%inline package_type: module_type +%inline package_type_: module_type { let (lid, cstrs, attrs) = package_type_of_module_type $1 in - let descr = Ptyp_package (lid, cstrs) in - mktyp ~loc:$sloc ~attrs descr } + Typ.package_type ~loc:(make_loc $sloc) ~attrs lid cstrs } + +%inline package_type: package_type_ + { mktyp ~loc:$sloc (Ptyp_package $1) } ; %inline row_field_list: separated_nonempty_llist(BAR, row_field) @@ -3746,17 +4133,24 @@ meth_list: /* Constants */ constant: - | INT { let (n, m) = $1 in Pconst_integer (n, m) } - | CHAR { Pconst_char $1 } - | STRING { let (s, strloc, d) = $1 in Pconst_string (s, strloc, d) } - | FLOAT { let (f, m) = $1 in Pconst_float (f, m) } + | INT { let (n, m) = $1 in + mkconst ~loc:$sloc (Pconst_integer (n, m)) } + | CHAR { mkconst ~loc:$sloc (Pconst_char $1) } + | STRING { let (s, strloc, d) = $1 in + mkconst ~loc:$sloc (Pconst_string (s,strloc,d)) } + | FLOAT { let (f, m) = $1 in + mkconst ~loc:$sloc (Pconst_float (f, m)) } ; signed_constant: constant { $1 } - | MINUS INT { let (n, m) = $2 in Pconst_integer("-" ^ n, m) } - | MINUS FLOAT { let (f, m) = $2 in Pconst_float("-" ^ f, m) } - | PLUS INT { let (n, m) = $2 in Pconst_integer (n, m) } - | PLUS FLOAT { let (f, m) = $2 in Pconst_float(f, m) } + | MINUS INT { let (n, m) = $2 in + mkconst ~loc:$sloc (Pconst_integer("-" ^ n, m)) } + | MINUS FLOAT { let (f, m) = $2 in + mkconst ~loc:$sloc (Pconst_float("-" ^ f, m)) } + | PLUS INT { let (n, m) = $2 in + mkconst ~loc:$sloc (Pconst_integer (n, m)) } + | PLUS FLOAT { let (f, m) = $2 in + mkconst ~loc:$sloc (Pconst_float(f, m)) } ; /* Identifiers and long identifiers */ @@ -3833,36 +4227,38 @@ constr_ident: | constr_extra_nonprefix_ident { $1 } ; constr_longident: - mod_longident %prec below_DOT { $1 } /* A.B.x vs (A).B.x */ - | mod_longident DOT constr_extra_ident { Ldot($1,$3) } - | constr_extra_ident { Lident $1 } - | constr_extra_nonprefix_ident { Lident $1 } + mod_longident %prec below_DOT { $1 } /* A.B.x vs (A).B.x */ + | mod_longident DOT constr_extra_ident { ldot $1 $loc($1) $3 $loc($3) } + | constr_extra_ident { Lident $1 } + | constr_extra_nonprefix_ident { Lident $1 } ; mk_longident(prefix,final): - | final { Lident $1 } - | prefix DOT final { Ldot($1,$3) } -; -val_longident: - mk_longident(mod_longident, val_ident) { $1 } + | final { Lident $1 } + | prefix DOT final { ldot $1 $loc($1) $3 $loc($3) } ; jsx_longident(uident, lident): | id = uident { `Module, $sloc, Lident id } | id = lident { `Value, $sloc, Lident id } - | prefix = uident DOT id = mod_longident { + | prefix = uident DOT id = mod_longident { let rec rebase = function - | Lident id -> Ldot (Lident prefix, id) - | Ldot (prefix', id) -> Ldot (rebase prefix', id) + | Lident id -> ldot (Lident prefix) $loc(prefix) id $loc(id) + | Ldot ({txt = prefix'; loc = prefix_loc}, {txt = id; loc = id_loc}) -> + Ldot (mkloc (rebase prefix') prefix_loc, mkloc id id_loc) | Lapply _ -> assert false in `Module, $sloc, rebase id } - | prefix = uident DOT id = val_longident { + | prefix = uident DOT id = val_longident { let rec rebase = function - | Lident id -> Ldot (Lident prefix, id) - | Ldot (prefix', id) -> Ldot (rebase prefix', id) + | Lident id -> ldot (Lident prefix) $loc(prefix) id $loc(id) + | Ldot ({txt = prefix'; loc = prefix_loc}, {txt = id; loc = id_loc}) -> + Ldot (mkloc (rebase prefix') prefix_loc, mkloc id id_loc) | Lapply _ -> assert false in `Value, $sloc, rebase id } ; +val_longident: + mk_longident(mod_longident, val_ident) { $1 } +; label_longident: mk_longident(mod_longident, LIDENT) { $1 } ; @@ -3875,7 +4271,7 @@ mod_longident: mod_ext_longident: mk_longident(mod_ext_longident, UIDENT) { $1 } | mod_ext_longident LPAREN mod_ext_longident RPAREN - { lapply ~loc:$sloc $1 $3 } + { lapply ~loc:$sloc $1 $loc($1) $3 $loc($3) } (* | mod_ext_longident LPAREN error { expecting $loc($3) "module path" } @@ -4036,6 +4432,7 @@ single_attr_id: | DO { "do" } | DONE { "done" } | DOWNTO { "downto" } + | EFFECT { "effect" } | ELSE { "else" } | END { "end" } | EXCEPTION { "exception" } @@ -4086,17 +4483,17 @@ attr_id: ) { $1 } ; attribute: - LBRACKETAT attr_id payload RBRACKET - { Attr.mk ~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 - { Attr.mk ~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; - Attr.mk ~loc:(make_loc $sloc) $2 $3 } + mk_attr ~loc:(make_loc $sloc) $2 $3 } ; %inline post_item_attributes: post_item_attribute* @@ -4107,7 +4504,7 @@ floating_attribute: { $1 } ; ext: - | /* empty */ { None } + | /* empty */ { None } | PERCENT attr_id { Some $2 } ; %inline no_ext: @@ -4136,58 +4533,10 @@ payload: | QUESTION pattern { PPat ($2, None) } | QUESTION pattern WHEN seq_expr { PPat ($2, Some $4) } ; - -%public simple_expr: -| DOTLESS expr GREATERDOT - { Fake.Meta.code $startpos $endpos $2 } -| DOTTILDE simple_expr %prec prec_escape - { Fake.Meta.uncode $startpos $endpos $2 } -; - -(* Lwt *) -%public structure_item: -| lwt_bindings - { val_of_lwt_bindings ~loc:$loc $1 } - -lwt_binding: - LET_LWT ext_attributes rec_flag let_binding_body post_item_attributes - { let (ext, attr) = $2 in - mklbs ext $3 (mklb ~loc:$loc($4) true $4 (attr@$5)) } -; -lwt_bindings: - lwt_binding { $1 } - | lwt_bindings and_let_binding { addlb $1 $2 } -; - -%public expr: -| lwt_bindings IN seq_expr - { expr_of_lwt_bindings ~loc:$loc $1 (merloc $endpos($2) $3) } -| MATCH_LWT ext_attributes seq_expr WITH match_cases - { let expr = mkexp_attrs ~loc:$loc - (Pexp_match(Fake.app Fake.Lwt.un_lwt $3, List.rev $5)) $2 in - Fake.app Fake.Lwt.in_lwt expr } -| TRY_LWT ext_attributes seq_expr %prec below_WITH - { reloc_exp ~loc:$loc (Fake.app Fake.Lwt.in_lwt $3) } -| TRY_LWT ext_attributes seq_expr WITH match_cases - { mkexp_attrs ~loc:$loc - (Pexp_try(Fake.app Fake.Lwt.in_lwt $3, List.rev $5)) $2 } -| TRY_LWT ext_attributes seq_expr FINALLY_LWT seq_expr - { Fake.app (Fake.app Fake.Lwt.finally_ $3) $5 } -| TRY_LWT ext_attributes seq_expr WITH match_cases FINALLY_LWT seq_expr - { let expr = mkexp_attrs ~loc:$loc - (Pexp_try (Fake.app Fake.Lwt.in_lwt $3, List.rev $5)) $2 in - Fake.app (Fake.app Fake.Lwt.finally_ expr) $7 } -| WHILE_LWT ext_attributes seq_expr DO seq_expr DONE - { let expr = Pexp_while ($3, Fake.(app Lwt.un_lwt $5)) in - Fake.(app Lwt.to_lwt (mkexp_attrs ~loc:$loc expr $2)) } -| FOR_LWT ext_attributes pattern EQUAL seq_expr direction_flag seq_expr DO seq_expr DONE - { let expr = Pexp_for ($3, $5, $7, $6, Fake.(app Lwt.un_lwt $9)) in - Fake.(app Lwt.to_lwt (mkexp_attrs ~loc:$loc expr $2)) } -| FOR_LWT ext_attributes pattern IN seq_expr DO seq_expr DONE - { mkexp_attrs ~loc:$loc - (Pexp_let (Nonrecursive, [Vb.mk $3 (Fake.(app Lwt.un_stream $5))], - Fake.(app Lwt.unit_lwt $7))) - $2 +attr_payload: + payload + { Builtin_attributes.mark_payload_attrs_used $1; + $1 } ; diff --git a/ocamlmerlin_mlx/ocaml/preprocess/parser_recover.ml b/ocamlmerlin_mlx/ocaml/preprocess/parser_recover.ml index 616c7c4..ca1f1b0 100644 --- a/ocamlmerlin_mlx/ocaml/preprocess/parser_recover.ml +++ b/ocamlmerlin_mlx/ocaml/preprocess/parser_recover.ml @@ -19,7 +19,6 @@ module Default = struct let value (type a) : a MenhirInterpreter.symbol -> a = function | MenhirInterpreter.T MenhirInterpreter.T_error -> () | MenhirInterpreter.T MenhirInterpreter.T_WITH -> () - | MenhirInterpreter.T MenhirInterpreter.T_WHILE_LWT -> () | MenhirInterpreter.T MenhirInterpreter.T_WHILE -> () | MenhirInterpreter.T MenhirInterpreter.T_WHEN -> () | MenhirInterpreter.T MenhirInterpreter.T_VIRTUAL -> () @@ -27,7 +26,6 @@ module Default = struct | MenhirInterpreter.T MenhirInterpreter.T_UNDERSCORE -> () | MenhirInterpreter.T MenhirInterpreter.T_UIDENT -> "_" | MenhirInterpreter.T MenhirInterpreter.T_TYPE -> () - | MenhirInterpreter.T MenhirInterpreter.T_TRY_LWT -> () | MenhirInterpreter.T MenhirInterpreter.T_TRY -> () | MenhirInterpreter.T MenhirInterpreter.T_TRUE -> () | MenhirInterpreter.T MenhirInterpreter.T_TO -> () @@ -67,11 +65,12 @@ module Default = struct | MenhirInterpreter.T MenhirInterpreter.T_MINUSDOT -> () | MenhirInterpreter.T MenhirInterpreter.T_MINUS -> () | MenhirInterpreter.T MenhirInterpreter.T_METHOD -> () - | MenhirInterpreter.T MenhirInterpreter.T_MATCH_LWT -> () + | MenhirInterpreter.T MenhirInterpreter.T_METAOCAML_ESCAPE -> () + | MenhirInterpreter.T MenhirInterpreter.T_METAOCAML_BRACKET_OPEN -> () + | MenhirInterpreter.T MenhirInterpreter.T_METAOCAML_BRACKET_CLOSE -> () | MenhirInterpreter.T MenhirInterpreter.T_MATCH -> () | MenhirInterpreter.T MenhirInterpreter.T_LPAREN -> () | MenhirInterpreter.T MenhirInterpreter.T_LIDENT -> "_" - | MenhirInterpreter.T MenhirInterpreter.T_LET_LWT -> () | MenhirInterpreter.T MenhirInterpreter.T_LETOP -> raise Not_found | MenhirInterpreter.T MenhirInterpreter.T_LET -> () | MenhirInterpreter.T MenhirInterpreter.T_LESSSLASH -> () @@ -109,15 +108,12 @@ module Default = struct | MenhirInterpreter.T MenhirInterpreter.T_HASH -> () | MenhirInterpreter.T MenhirInterpreter.T_GREATERRBRACKET -> () | MenhirInterpreter.T MenhirInterpreter.T_GREATERRBRACE -> () - | MenhirInterpreter.T MenhirInterpreter.T_GREATERDOT -> () | MenhirInterpreter.T MenhirInterpreter.T_GREATER -> () | MenhirInterpreter.T MenhirInterpreter.T_FUNCTOR -> () | MenhirInterpreter.T MenhirInterpreter.T_FUNCTION -> () | MenhirInterpreter.T MenhirInterpreter.T_FUN -> () - | MenhirInterpreter.T MenhirInterpreter.T_FOR_LWT -> () | MenhirInterpreter.T MenhirInterpreter.T_FOR -> () | MenhirInterpreter.T MenhirInterpreter.T_FLOAT -> ("0.",None) - | MenhirInterpreter.T MenhirInterpreter.T_FINALLY_LWT -> () | MenhirInterpreter.T MenhirInterpreter.T_FALSE -> () | MenhirInterpreter.T MenhirInterpreter.T_EXTERNAL -> () | MenhirInterpreter.T MenhirInterpreter.T_EXCEPTION -> () @@ -126,10 +122,9 @@ module Default = struct | MenhirInterpreter.T MenhirInterpreter.T_EOF -> () | MenhirInterpreter.T MenhirInterpreter.T_END -> () | MenhirInterpreter.T MenhirInterpreter.T_ELSE -> () + | MenhirInterpreter.T MenhirInterpreter.T_EFFECT -> () | MenhirInterpreter.T MenhirInterpreter.T_DOWNTO -> () - | MenhirInterpreter.T MenhirInterpreter.T_DOTTILDE -> () | MenhirInterpreter.T MenhirInterpreter.T_DOTOP -> raise Not_found - | MenhirInterpreter.T MenhirInterpreter.T_DOTLESS -> () | MenhirInterpreter.T MenhirInterpreter.T_DOTDOT -> () | MenhirInterpreter.T MenhirInterpreter.T_DOT -> () | MenhirInterpreter.T MenhirInterpreter.T_DONE -> () @@ -198,9 +193,8 @@ module Default = struct | MenhirInterpreter.N MenhirInterpreter.N_separated_or_terminated_nonempty_list_SEMI_object_expr_field_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_separated_or_terminated_nonempty_list_SEMI_expr_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_row_field -> raise Not_found - | MenhirInterpreter.N MenhirInterpreter.N_reversed_separated_nontrivial_llist_STAR_atomic_type_ -> raise Not_found - | MenhirInterpreter.N MenhirInterpreter.N_reversed_separated_nontrivial_llist_COMMA_expr_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_reversed_separated_nontrivial_llist_COMMA_core_type_ -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_reversed_separated_nonempty_llist_STAR_labeled_tuple_typ_element_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_reversed_separated_nonempty_llist_STAR_atomic_type_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_reversed_separated_nonempty_llist_COMMA_type_parameter_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_reversed_separated_nonempty_llist_COMMA_core_type_ -> raise Not_found @@ -212,9 +206,13 @@ module Default = struct | MenhirInterpreter.N MenhirInterpreter.N_reversed_nonempty_llist_name_tag_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_reversed_nonempty_llist_labeled_simple_expr_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_reversed_nonempty_llist_functor_arg_ -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_reversed_nonempty_concat_fun_param_as_list_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_reversed_llist_simple_expr_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_reversed_llist_preceded_CONSTRAINT_constrain__ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_reversed_llist_jsx_prop_ -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_reversed_labeled_tuple_pattern_pattern_no_exn_ -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_reversed_labeled_tuple_pattern_pattern_ -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_reversed_labeled_tuple_body -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_reversed_bar_llist_extension_constructor_declaration_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_reversed_bar_llist_extension_constructor_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_reversed_bar_llist_constructor_declaration_ -> raise Not_found @@ -230,8 +228,6 @@ module Default = struct | MenhirInterpreter.N MenhirInterpreter.N_pattern_var -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_pattern_no_exn -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_pattern_gen -> raise Not_found - | MenhirInterpreter.N MenhirInterpreter.N_pattern_comma_list_pattern_no_exn_ -> raise Not_found - | MenhirInterpreter.N MenhirInterpreter.N_pattern_comma_list_pattern_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_pattern -> default_pattern () | MenhirInterpreter.N MenhirInterpreter.N_parse_val_longident -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_parse_pattern -> raise Not_found @@ -252,6 +248,7 @@ module Default = struct | MenhirInterpreter.N MenhirInterpreter.N_option_preceded_EQUAL_module_type__ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_option_preceded_EQUAL_expr__ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_option_preceded_COLON_core_type__ -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_option_preceded_COLON_atomic_type__ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_option_preceded_AS_mkrhs_LIDENT___ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_option_SEMI_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_option_BAR_ -> raise Not_found @@ -259,6 +256,7 @@ module Default = struct | MenhirInterpreter.N MenhirInterpreter.N_operator -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_open_description -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_open_declaration -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_object_type -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_nonempty_type_kind -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_nonempty_list_raw_string_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_nonempty_list_mkrhs_LIDENT__ -> raise Not_found @@ -280,14 +278,12 @@ module Default = struct | MenhirInterpreter.N MenhirInterpreter.N_mk_longident_mod_longident_UIDENT_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_mk_longident_mod_longident_LIDENT_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_mk_longident_mod_ext_longident_ident_ -> raise Not_found - | MenhirInterpreter.N MenhirInterpreter.N_mk_longident_mod_ext_longident___anonymous_41_ -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_mk_longident_mod_ext_longident___anonymous_42_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_mk_longident_mod_ext_longident_UIDENT_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_mk_longident_mod_ext_longident_LIDENT_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_method_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_meth_list -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_match_case -> raise Not_found - | MenhirInterpreter.N MenhirInterpreter.N_lwt_bindings -> raise Not_found - | MenhirInterpreter.N MenhirInterpreter.N_lwt_binding -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_listx_SEMI_record_pat_field_UNDERSCORE_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_list_use_file_element_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_list_text_str_structure_item__ -> raise Not_found @@ -311,6 +307,10 @@ module Default = struct | MenhirInterpreter.N MenhirInterpreter.N_let_bindings_ext_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_let_binding_body_no_punning -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_let_binding_body -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_labeled_tuple_pattern_pattern_no_exn_ -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_labeled_tuple_pattern_pattern_ -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_labeled_tuple_pat_element_list_pattern_no_exn_ -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_labeled_tuple_pat_element_list_pattern_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_labeled_simple_pattern -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_labeled_simple_expr -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_label_longident -> raise Not_found @@ -335,16 +335,21 @@ module Default = struct | MenhirInterpreter.N MenhirInterpreter.N_functor_args -> [] | MenhirInterpreter.N MenhirInterpreter.N_functor_arg -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_function_type -> raise Not_found - | MenhirInterpreter.N MenhirInterpreter.N_fun_def -> raise Not_found - | MenhirInterpreter.N MenhirInterpreter.N_fun_binding -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_fun_seq_expr -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_fun_params -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_fun_param_as_list -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_fun_expr -> default_expr () + | MenhirInterpreter.N MenhirInterpreter.N_fun_body -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_formal_class_parameters -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_floating_attribute -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_extension_type -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_extension_constructor_rebind_epsilon_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_extension_constructor_rebind_BAR_ -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_extension -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_ext -> raise Not_found - | MenhirInterpreter.N MenhirInterpreter.N_expr -> default_expr () | MenhirInterpreter.N MenhirInterpreter.N_direction_flag -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_delimited_type_supporting_local_open -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_delimited_type -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_core_type -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_constructor_declarations -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_constructor_arguments -> raise Not_found @@ -367,6 +372,7 @@ module Default = struct | MenhirInterpreter.N MenhirInterpreter.N_class_field -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_class_expr -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_attribute -> raise Not_found + | MenhirInterpreter.N MenhirInterpreter.N_attr_payload -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_attr_id -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_atomic_type -> raise Not_found | MenhirInterpreter.N MenhirInterpreter.N_any_longident -> raise Not_found @@ -391,18 +397,16 @@ type decision = | Select of (int -> action list) let depth = - [|0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;3;2;2;1;2;1;2;3;1;1;1;2;3;1;2;3;1;1;1;1;1;2;3;1;1;1;2;2;1;2;2;1;1;2;1;1;1;1;1;1;2;3;4;1;1;5;6;6;1;1;2;1;2;3;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;2;3;4;5;2;3;4;5;2;3;4;5;1;1;1;1;1;1;2;3;1;4;5;1;1;1;1;1;2;1;2;3;1;1;1;2;2;3;4;1;2;3;4;1;1;2;1;2;3;1;1;2;4;1;2;1;1;1;2;2;1;1;1;2;2;1;2;3;2;3;5;6;1;1;1;1;1;2;1;1;1;2;1;2;1;1;1;1;1;2;3;4;1;2;3;1;2;3;1;1;2;3;3;1;1;4;1;2;1;1;1;2;3;1;2;3;1;1;1;1;2;1;2;3;1;4;1;1;2;1;1;2;3;1;1;1;1;2;1;2;2;1;1;1;2;3;4;2;3;1;2;3;1;2;2;1;2;1;1;2;1;2;1;1;3;2;3;2;1;2;3;4;1;2;3;3;1;1;3;4;2;3;1;2;1;3;4;2;1;3;2;3;4;5;1;2;1;2;1;2;3;2;3;4;5;3;4;3;4;4;5;6;2;1;2;2;1;1;2;3;1;1;2;1;1;1;1;1;1;4;1;1;2;3;1;1;1;2;3;4;1;2;3;1;1;1;2;3;2;3;2;1;2;1;1;2;3;1;2;4;5;6;1;1;1;2;3;2;3;2;3;3;4;5;2;3;2;3;2;4;4;5;4;5;3;4;2;3;1;2;3;3;2;3;4;5;1;6;5;2;2;3;1;1;2;1;2;3;3;4;2;1;2;3;1;1;1;1;1;2;1;2;3;3;4;5;1;2;1;2;3;4;1;2;1;1;2;3;4;5;1;2;1;2;2;3;1;2;3;1;2;1;2;3;4;1;5;2;1;2;3;1;2;4;5;4;5;6;2;3;4;5;1;1;2;3;4;5;2;1;2;3;3;1;1;1;4;5;2;3;2;3;4;2;3;4;1;3;2;3;1;4;2;3;4;5;3;4;1;5;2;3;2;3;3;4;5;2;2;1;1;6;7;1;1;1;1;1;1;1;2;3;1;3;2;3;1;1;1;1;1;2;3;1;2;3;1;2;3;1;2;3;1;1;2;1;2;3;4;5;6;7;1;1;2;3;4;5;1;2;3;4;5;1;1;2;1;1;2;3;4;1;1;4;5;6;7;8;9;10;1;1;1;1;2;3;4;1;2;3;4;2;3;2;3;1;1;1;2;3;1;2;1;2;3;4;4;5;2;1;2;1;2;2;3;2;3;4;5;1;2;1;2;1;2;3;1;2;3;4;1;1;1;1;1;2;3;3;4;1;2;3;3;1;2;5;6;2;1;2;3;1;1;2;3;1;2;3;2;3;2;1;2;1;2;2;3;4;5;3;2;3;2;3;2;3;2;3;2;3;2;3;2;3;2;3;2;3;2;3;2;3;2;3;2;3;2;3;2;3;2;3;2;3;2;3;2;3;2;3;1;2;1;2;3;4;5;1;2;3;2;3;2;3;2;3;2;3;2;1;1;2;3;1;3;1;2;1;2;3;4;1;2;3;4;5;1;2;6;1;2;7;2;3;4;5;1;2;1;2;3;4;6;7;1;2;3;4;5;6;1;2;8;4;5;6;1;2;1;2;1;2;3;4;5;1;2;3;4;5;1;2;3;2;3;6;7;1;2;8;9;1;1;2;3;1;1;2;3;1;4;1;1;1;1;2;3;1;2;3;4;5;6;7;1;2;3;1;2;1;1;2;3;2;1;5;1;1;2;3;6;7;8;1;2;3;4;5;6;4;2;3;4;2;5;6;7;1;1;1;2;3;4;5;6;7;1;1;2;3;1;1;2;3;4;1;1;2;8;9;10;1;1;1;2;3;4;5;6;4;4;1;2;3;3;4;5;3;3;1;7;8;9;6;7;1;8;9;10;2;1;1;4;5;6;7;8;9;6;7;8;5;6;7;8;9;1;1;2;3;4;5;6;2;3;4;5;1;2;3;4;5;6;7;8;2;3;4;5;6;7;4;5;6;7;8;1;2;3;4;5;6;7;9;4;5;6;7;1;2;5;6;1;2;1;2;3;4;5;1;2;3;4;1;2;3;4;1;5;1;2;3;6;7;8;1;2;1;2;3;3;1;2;1;2;1;2;3;4;5;6;7;1;2;1;2;1;2;3;4;5;6;7;1;2;1;2;3;4;5;6;1;2;3;4;2;3;1;1;1;7;2;3;4;5;6;3;4;1;2;1;2;3;3;4;4;5;1;2;1;1;2;9;10;1;2;3;4;5;6;7;8;9;11;2;3;4;5;6;7;1;2;3;4;1;1;1;2;1;2;3;1;1;4;1;3;5;8;9;1;2;3;4;5;6;7;8;9;10;1;1;1;1;1;1;1;1;2;1;2;1;1;2;3;4;5;6;7;8;2;1;1;2;3;4;5;6;7;8;9;2;1;1;2;2;1;2;1;2;3;4;5;6;1;1;2;3;1;1;2;3;4;5;6;5;6;7;2;3;1;1;2;1;2;2;3;4;5;2;3;4;5;4;5;6;1;1;2;3;4;5;6;7;8;9;10;11;6;7;8;5;1;1;1;2;3;1;2;2;3;1;1;2;1;2;2;3;4;5;2;3;4;5;6;7;8;9;10;5;6;7;4;1;2;3;4;1;2;3;1;1;2;3;4;5;6;7;2;3;4;5;6;1;2;3;4;1;2;1;2;1;2;1;1;1;2;1;2;2;1;1;3;2;2;3;2;3;7;3;4;5;6;2;3;4;5;2;3;3;4;5;4;1;2;5;6;2;3;4;5;1;2;3;4;4;5;1;2;1;1;2;2;1;2;3;4;1;2;7;8;1;2;3;4;5;6;7;8;9;1;1;1;2;3;4;5;6;1;1;1;1;1;1;2;2;1;2;1;2;1;2;1;1;1;1;2;3;3;4;1;1;1;3;4;3;4;4;3;3;4;5;3;4;5;3;4;5;6;7;1;2;3;5;6;7;5;6;7;3;2;3;4;5;6;7;3;4;5;6;7;3;4;5;6;7;2;3;4;5;6;7;3;4;5;6;7;3;4;5;6;7;3;4;5;6;7;8;9;5;6;7;8;9;5;6;7;8;9;3;4;5;2;2;4;5;3;4;5;3;4;5;5;1;2;3;2;3;4;2;3;1;1;4;5;3;4;4;5;3;4;4;5;3;4;5;3;1;2;3;1;1;2;3;4;5;1;4;5;1;2;3;6;1;1;7;8;9;10;11;6;7;8;9;5;6;7;8;9;10;11;2;1;2;3;4;1;2;3;4;1;2;5;8;4;5;3;4;5;2;3;3;2;4;2;3;1;4;5;6;7;8;4;4;5;4;2;3;2;2;3;2;2;3;4;2;2;3;2;3;8;3;4;5;6;7;2;3;4;5;6;7;8;2;3;4;5;6;7;8;9;2;5;2;2;4;5;2;2;3;4;5;6;7;8;3;4;5;6;7;2;3;4;2;5;6;3;2;2;3;2;2;3;4;5;6;6;7;8;2;3;3;4;4;5;6;4;5;6;4;5;5;6;7;5;6;7;7;8;9;5;6;2;3;4;5;2;3;4;2;3;4;3;4;5;6;1;7;1;2;3;2;2;3;3;4;5;2;3;4;5;4;2;3;2;3;2;3;2;3;4;2;2;2;2;6;7;8;1;2;3;4;5;9;10;2;2;1;1;1;1;1;2;3;4;4;5;5;6;7;8;9;3;4;5;5;6;6;7;3;4;7;8;2;3;3;4;5;4;5;6;4;5;6;4;5;6;7;8;5;6;4;5;6;7;3;4;3;4;5;6;7;1;2;1;0;1;2;1;0;1;2;3;1;1;1;2;3;4;5;3;3;1;1;1;1;2;0;1;1;2;0;1;1;2;0;1;2;1;0;1;1;2;0;1;1;2;0;1;1;2;0;1;1;2;0;1;1;2;0;1;2;1;0;1;2;1;1;0;1;2;3;3;3;3;3;3;1;1;1;2;1;2;1;2;3;1;2;0;1;1;1;2;2;2;3;4;2;1;1;2;3;4;1;2;|] + [|0;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;3;2;2;1;2;1;2;3;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;2;3;4;5;2;3;4;5;2;3;4;5;1;1;1;1;1;1;2;3;1;4;5;1;1;1;1;1;1;2;1;2;3;1;1;1;2;2;3;4;1;1;2;1;2;3;1;1;2;4;1;2;1;1;1;2;2;1;1;1;2;2;1;2;3;2;3;5;6;1;1;1;1;1;2;1;2;1;1;1;2;1;2;1;1;1;2;3;4;5;6;7;8;1;2;1;2;3;1;2;3;1;1;1;2;1;2;2;1;1;1;2;3;4;2;3;1;2;3;1;2;2;1;2;1;1;2;1;2;3;1;1;2;1;1;1;1;1;1;1;2;3;2;1;2;1;2;3;2;3;2;3;2;3;4;5;3;1;1;2;3;4;3;4;3;1;1;3;4;2;3;1;2;1;3;4;2;3;5;1;2;1;2;1;2;3;2;3;4;5;3;4;3;4;4;5;6;2;1;2;1;2;3;4;4;5;6;7;8;9;10;11;8;1;1;1;2;3;1;1;1;2;3;4;5;6;7;8;9;10;11;12;13;9;1;2;2;1;2;2;1;1;2;3;4;1;1;5;6;6;1;2;3;4;1;1;2;1;1;1;1;1;2;3;4;1;2;3;1;2;3;1;1;2;3;3;1;1;4;1;1;1;1;1;2;3;1;1;1;1;2;1;1;2;3;4;5;6;7;8;9;10;11;12;13;9;1;1;2;1;1;2;3;1;1;2;2;1;1;2;3;1;1;2;1;1;1;1;1;1;4;1;1;2;3;1;1;1;2;3;4;1;2;3;4;5;6;7;8;9;5;4;5;1;1;1;1;2;3;1;1;2;3;4;1;1;1;2;2;1;1;2;3;4;5;6;7;8;4;3;4;3;3;2;3;1;2;3;1;2;4;5;6;1;2;3;2;3;2;3;4;5;6;7;8;4;3;4;3;3;3;4;5;2;3;2;3;2;4;4;4;4;5;4;5;3;4;2;3;1;2;3;3;2;3;4;5;1;6;5;2;2;3;8;9;8;1;8;2;3;2;1;1;1;2;3;4;5;6;7;8;4;3;4;3;3;2;3;4;5;6;7;8;9;5;4;5;4;4;1;2;3;4;5;6;7;8;9;5;4;5;4;4;1;1;2;1;2;3;3;4;2;1;2;3;1;1;2;3;4;5;1;2;1;2;2;3;1;1;1;2;1;2;3;4;1;5;2;1;2;3;1;2;4;5;4;5;6;2;3;4;5;1;1;2;3;4;5;2;1;2;3;3;1;1;1;2;3;2;3;1;1;4;5;2;3;4;2;3;4;1;3;2;3;2;3;4;5;3;4;1;5;2;3;2;3;3;4;5;2;2;1;1;6;7;1;1;1;1;1;1;1;2;3;1;3;2;3;1;1;1;2;3;1;2;3;1;1;2;1;1;2;3;4;1;1;4;5;6;7;8;9;10;1;1;1;1;2;3;4;1;2;2;3;2;3;1;2;3;1;2;3;1;1;2;1;2;3;1;1;2;1;2;3;3;4;5;1;2;1;2;3;4;1;2;1;1;1;2;4;1;2;5;6;1;2;3;4;5;6;7;8;9;10;7;6;7;2;3;2;3;1;2;3;4;5;1;2;3;4;1;2;3;1;2;3;4;1;1;1;1;1;2;3;3;4;1;2;3;3;1;2;5;6;2;1;2;3;4;5;1;1;1;2;3;4;5;2;1;2;1;2;1;2;2;3;1;2;3;4;5;6;1;2;3;4;5;6;7;4;3;4;3;4;5;6;2;3;1;2;1;2;3;1;1;2;3;4;5;6;3;2;3;4;5;6;3;2;1;2;1;2;3;4;5;2;2;3;4;5;3;2;3;4;5;6;3;2;3;4;5;6;3;2;3;4;5;6;3;2;3;4;5;6;3;2;3;4;5;6;3;2;3;4;5;6;3;2;3;4;5;6;3;2;3;4;5;6;3;2;3;4;5;6;3;2;3;4;5;6;3;2;3;4;5;6;3;2;3;4;5;6;3;2;3;4;5;6;3;2;3;4;5;6;3;2;3;4;5;6;3;2;3;4;5;6;3;2;3;4;5;6;3;2;3;4;5;6;3;2;3;4;5;6;7;4;3;4;3;4;5;6;3;2;3;4;5;6;3;1;2;1;1;2;2;3;4;5;6;7;8;3;2;3;4;5;6;7;2;3;4;2;1;1;2;3;1;4;1;1;2;3;4;5;1;2;3;2;3;4;5;6;7;8;4;3;4;3;3;2;3;2;3;1;3;1;2;4;2;3;1;2;3;4;5;6;7;8;9;10;7;3;4;5;6;7;8;9;10;7;3;4;5;6;7;8;9;10;7;2;3;4;5;6;7;8;9;10;7;3;4;5;6;7;8;9;10;7;3;4;5;6;7;8;9;10;7;3;4;5;6;7;8;9;10;11;12;9;5;6;7;8;9;10;11;12;9;5;6;7;8;9;10;11;12;9;3;4;5;6;7;8;5;1;2;2;1;2;6;1;1;7;8;9;10;11;4;5;3;4;5;3;4;5;3;4;5;6;7;5;6;7;5;6;7;3;6;7;8;9;6;7;3;4;5;2;3;3;2;4;4;5;6;7;8;9;10;11;12;13;14;11;6;7;8;9;10;11;8;4;5;3;4;5;3;4;5;3;4;5;6;7;8;5;4;5;4;5;6;7;4;5;1;2;3;2;3;4;2;3;1;1;4;5;3;4;4;5;3;4;4;5;3;4;5;3;1;2;3;1;2;3;4;5;1;4;5;1;2;3;4;4;4;5;2;3;2;3;4;5;2;2;3;4;2;2;3;2;3;8;3;4;5;6;7;2;3;4;5;1;2;1;2;3;4;6;7;8;1;2;2;3;4;1;1;2;3;1;5;1;1;1;1;2;3;1;2;3;4;5;6;7;1;2;3;1;2;1;1;2;3;2;1;1;2;3;4;5;6;4;2;3;4;2;6;7;8;9;1;2;3;1;4;5;6;2;4;5;2;2;3;4;5;6;3;2;2;3;2;2;3;4;5;6;6;7;8;2;3;3;4;4;5;6;2;3;2;4;5;6;7;8;8;9;10;8;9;10;10;11;12;4;5;5;6;7;5;6;7;7;8;9;5;6;2;3;4;5;1;2;3;4;5;1;2;6;7;2;3;4;5;6;7;1;2;3;4;5;6;8;4;5;6;1;2;1;2;3;4;1;2;1;2;3;4;5;1;2;3;4;5;1;2;3;6;7;1;2;8;9;1;1;2;3;4;5;1;1;2;3;6;7;8;5;6;7;1;1;1;2;3;4;5;6;2;3;4;5;1;2;3;4;5;6;7;8;2;3;4;5;6;7;4;5;6;7;8;1;2;3;4;5;6;7;9;4;5;6;7;1;2;5;6;1;2;1;2;3;4;5;1;2;3;4;1;2;3;4;1;5;1;2;3;6;7;8;1;2;1;2;3;3;1;2;1;2;1;2;3;4;5;6;7;1;2;1;2;1;2;3;4;5;6;7;1;2;1;2;3;4;5;6;1;2;3;4;2;3;1;1;1;7;2;3;4;5;6;3;4;1;2;1;2;3;3;4;4;5;1;2;1;1;2;9;10;1;2;3;4;5;6;7;8;9;11;2;3;4;5;6;7;1;2;3;4;1;1;1;2;1;2;3;1;1;4;1;3;5;8;9;1;2;3;4;5;6;7;8;9;10;1;1;1;1;1;1;1;1;2;1;2;1;1;2;3;4;5;6;7;8;2;1;1;2;3;4;5;1;1;2;3;1;1;2;3;4;1;1;2;6;7;8;9;1;1;1;2;3;4;5;6;4;4;1;2;3;3;4;5;3;3;1;2;1;1;2;2;1;2;1;2;3;4;5;6;1;1;2;3;1;1;2;3;4;5;6;5;6;7;2;3;1;1;2;1;2;2;3;4;5;2;3;4;5;4;5;6;1;1;2;1;3;4;5;6;7;8;9;10;11;6;7;8;5;2;3;1;1;2;1;2;2;3;4;5;2;3;4;5;6;7;8;9;10;5;6;7;4;1;2;3;4;1;2;3;1;1;2;3;4;5;6;7;2;3;4;5;6;1;2;3;4;1;2;1;2;1;2;1;1;2;1;3;2;2;3;2;3;7;3;4;5;6;2;3;4;5;2;3;3;4;5;4;1;2;5;6;2;3;4;5;1;2;3;4;4;5;1;2;1;1;2;2;1;2;3;4;1;2;7;8;1;2;3;4;5;6;7;8;9;1;1;1;1;1;1;1;1;2;1;1;2;1;2;1;1;1;1;2;3;1;1;1;3;4;3;4;2;3;4;2;3;4;5;7;8;8;9;8;8;2;3;4;5;6;7;8;9;5;4;5;4;4;2;3;3;4;5;4;5;6;7;8;7;8;9;10;7;2;3;4;5;6;7;8;5;4;5;4;5;6;7;4;4;5;6;3;4;9;6;7;8;1;2;3;4;5;9;10;2;2;1;1;1;1;1;2;3;4;4;5;6;7;8;5;6;7;8;9;3;4;3;4;5;6;1;7;1;2;3;2;2;3;3;4;5;3;4;5;6;7;2;3;4;5;4;2;3;2;2;3;2;3;4;2;2;2;2;7;8;9;10;6;7;8;9;10;2;1;1;4;5;6;7;8;9;5;6;7;8;9;3;4;5;6;6;7;3;4;3;4;5;6;7;1;2;1;0;1;2;1;0;1;2;3;1;1;1;2;3;4;5;3;3;1;1;1;1;2;0;1;1;2;0;1;1;2;0;1;2;1;0;1;1;2;0;1;1;2;0;1;1;2;0;1;1;2;0;1;1;2;0;1;2;1;0;1;2;1;1;0;1;2;3;3;3;3;3;3;1;1;1;2;1;2;1;2;3;1;2;0;1;1;1;2;2;2;3;4;2;1;1;2;3;4;1;2;|] let can_pop (type a) : a terminal -> bool = function | T_WITH -> true - | T_WHILE_LWT -> true | T_WHILE -> true | T_WHEN -> true | T_VIRTUAL -> true | T_VAL -> true | T_UNDERSCORE -> true | T_TYPE -> true - | T_TRY_LWT -> true | T_TRY -> true | T_TRUE -> true | T_TO -> true @@ -437,10 +441,11 @@ let can_pop (type a) : a terminal -> bool = function | T_MINUSDOT -> true | T_MINUS -> true | T_METHOD -> true - | T_MATCH_LWT -> true + | T_METAOCAML_ESCAPE -> true + | T_METAOCAML_BRACKET_OPEN -> true + | T_METAOCAML_BRACKET_CLOSE -> true | T_MATCH -> true | T_LPAREN -> true - | T_LET_LWT -> true | T_LET -> true | T_LESSSLASH -> true | T_LESSMINUS -> true @@ -465,14 +470,11 @@ let can_pop (type a) : a terminal -> bool = function | T_HASH -> true | T_GREATERRBRACKET -> true | T_GREATERRBRACE -> true - | T_GREATERDOT -> true | T_GREATER -> true | T_FUNCTOR -> true | T_FUNCTION -> true | T_FUN -> true - | T_FOR_LWT -> true | T_FOR -> true - | T_FINALLY_LWT -> true | T_FALSE -> true | T_EXTERNAL -> true | T_EXCEPTION -> true @@ -480,9 +482,8 @@ let can_pop (type a) : a terminal -> bool = function | T_EOL -> true | T_END -> true | T_ELSE -> true + | T_EFFECT -> true | T_DOWNTO -> true - | T_DOTTILDE -> true - | T_DOTLESS -> true | T_DOTDOT -> true | T_DOT -> true | T_DONE -> true @@ -508,3109 +509,3728 @@ let can_pop (type a) : a terminal -> bool = function | _ -> false let recover = - let r0 = [R 604] in - let r1 = S (N N_expr) :: r0 in - let r2 = [R 127] in - let r3 = S (T T_DONE) :: r2 in - let r4 = Sub (r1) :: r3 in - let r5 = S (T T_DO) :: r4 in - let r6 = Sub (r1) :: r5 in - let r7 = R 296 :: r6 in - let r8 = [R 704] in - let r9 = S (T T_AND) :: r8 in - let r10 = [R 42] in - let r11 = Sub (r9) :: r10 in - let r12 = [R 188] in - let r13 = [R 43] in - let r14 = [R 521] in - let r15 = S (N N_structure) :: r14 in - let r16 = [R 44] in - let r17 = S (T T_RBRACKET) :: r16 in - let r18 = Sub (r15) :: r17 in - let r19 = [R 142] in - let r20 = S (T T_DONE) :: r19 in - let r21 = Sub (r1) :: r20 in - let r22 = S (T T_DO) :: r21 in - let r23 = Sub (r1) :: r22 in - let r24 = R 296 :: r23 in - let r25 = [R 672] in - let r26 = [R 360] in - let r27 = [R 123] in - let r28 = Sub (r1) :: r27 in - let r29 = R 296 :: r28 in - let r30 = [R 329] in - let r31 = Sub (r1) :: r30 in - let r32 = S (T T_MINUSGREATER) :: r31 in - let r33 = S (N N_pattern) :: r32 in - let r34 = [R 569] in - let r35 = Sub (r33) :: r34 in - let r36 = [R 139] in - let r37 = Sub (r35) :: r36 in - let r38 = S (T T_WITH) :: r37 in - let r39 = Sub (r1) :: r38 in - let r40 = R 296 :: r39 in - let r41 = [R 190] in - let r42 = S (T T_UNDERSCORE) :: r25 in - let r43 = [R 662] in - let r44 = [R 656] in - let r45 = S (T T_END) :: r44 in - let r46 = R 313 :: r45 in - let r47 = R 69 :: r46 in - let r48 = R 296 :: r47 in - let r49 = [R 67] in - let r50 = S (T T_RPAREN) :: r49 in - let r51 = [R 690] in - let r52 = [R 632] in - let r53 = [R 630] in - let r54 = [R 101] in - let r55 = [R 686] in - let r56 = S (T T_RPAREN) :: r55 in - let r57 = [R 456] in - let r58 = S (T T_AMPERAMPER) :: r57 in - let r59 = [R 818] in - let r60 = S (T T_RPAREN) :: r59 in - let r61 = Sub (r58) :: r60 in - let r62 = [R 382] in - let r63 = S (T T_UNDERSCORE) :: r62 in - let r64 = [R 688] in - let r65 = S (T T_RPAREN) :: r64 in - let r66 = Sub (r63) :: r65 in - let r67 = R 296 :: r66 in - let r68 = [R 689] in - let r69 = S (T T_RPAREN) :: r68 in - let r70 = [R 348] in - let r71 = [R 609] in - let r72 = R 304 :: r71 in - let r73 = [R 384] in - let r74 = S (T T_END) :: r73 in - let r75 = Sub (r72) :: r74 in - let r76 = [R 819] in - let r77 = S (T T_LIDENT) :: r76 in - let r78 = [R 25] in - let r79 = S (T T_UNDERSCORE) :: r78 in - let r80 = [R 792] in - let r81 = Sub (r79) :: r80 in - let r82 = [R 202] in - let r83 = Sub (r81) :: r82 in - let r84 = [R 17] in - let r85 = Sub (r83) :: r84 in - let r86 = [R 117] in - let r87 = Sub (r85) :: r86 in - let r88 = [R 526] in - let r89 = Sub (r87) :: r88 in - let r90 = [R 827] in - let r91 = R 302 :: r90 in - let r92 = Sub (r89) :: r91 in - let r93 = S (T T_COLON) :: r92 in - let r94 = Sub (r77) :: r93 in - let r95 = R 296 :: r94 in - let r96 = [R 430] in - let r97 = S (T T_RPAREN) :: r96 in - let r98 = R 224 :: r97 in - let r99 = [R 225] in - let r100 = [R 432] in - let r101 = S (T T_RBRACKET) :: r100 in - let r102 = [R 434] in - let r103 = S (T T_RBRACE) :: r102 in - let r104 = [R 222] in - let r105 = S (T T_LIDENT) :: r104 in - let r106 = [R 24] in - let r107 = Sub (r105) :: r106 in - let r108 = [R 567] in - let r109 = [R 479] in - let r110 = S (T T_COLON) :: r109 in - let r111 = [R 23] in - let r112 = S (T T_RPAREN) :: r111 in - let r113 = S (N N_module_type) :: r112 in - let r114 = R 296 :: r113 in - let r115 = R 187 :: r114 in - let r116 = [R 386] in - let r117 = S (N N_module_expr) :: r116 in - let r118 = R 296 :: r117 in - let r119 = S (T T_OF) :: r118 in - let r120 = [R 372] in - let r121 = S (T T_END) :: r120 in - let r122 = S (N N_structure) :: r121 in - let r123 = [R 346] in - let r124 = S (T T_LIDENT) :: r123 in - let r125 = [R 799] in - let r126 = Sub (r124) :: r125 in - let r127 = [R 102] in - let r128 = S (T T_FALSE) :: r127 in - let r129 = [R 106] in - let r130 = Sub (r128) :: r129 in - let r131 = [R 216] in - let r132 = R 296 :: r131 in - let r133 = R 209 :: r132 in - let r134 = Sub (r130) :: r133 in - let r135 = [R 546] in - let r136 = Sub (r134) :: r135 in - let r137 = [R 767] in - let r138 = R 302 :: r137 in - let r139 = Sub (r136) :: r138 in - let r140 = R 532 :: r139 in - let r141 = S (T T_PLUSEQ) :: r140 in - let r142 = Sub (r126) :: r141 in - let r143 = R 801 :: r142 in - let r144 = R 296 :: r143 in - let r145 = [R 219] in - let r146 = R 302 :: r145 in - let r147 = R 557 :: r146 in - let r148 = R 797 :: r147 in - let r149 = S (T T_LIDENT) :: r148 in - let r150 = R 801 :: r149 in - let r151 = R 296 :: r150 in - let r152 = R 187 :: r151 in - let r153 = [R 768] in - let r154 = R 302 :: r153 in - let r155 = Sub (r136) :: r154 in - let r156 = R 532 :: r155 in - let r157 = S (T T_PLUSEQ) :: r156 in - let r158 = Sub (r126) :: r157 in - let r159 = [R 220] in - let r160 = R 302 :: r159 in - let r161 = R 557 :: r160 in - let r162 = R 797 :: r161 in - let r163 = S (T T_LIDENT) :: r162 in - let r164 = R 801 :: r163 in - let r165 = [R 805] in - let r166 = S (T T_UNDERSCORE) :: r165 in - let r167 = [R 800] in - let r168 = Sub (r166) :: r167 in - let r169 = R 806 :: r168 in - let r170 = [R 580] in - let r171 = Sub (r169) :: r170 in - let r172 = [R 803] in - let r173 = S (T T_RPAREN) :: r172 in - let r174 = [R 804] in - let r175 = [R 581] in - let r176 = [R 415] in - let r177 = S (T T_DOTDOT) :: r176 in - let r178 = [R 798] in - let r179 = [R 416] in - let r180 = [R 105] in - let r181 = S (T T_RPAREN) :: r180 in - let r182 = [R 204] in - let r183 = Sub (r83) :: r182 in - let r184 = S (T T_MINUSGREATER) :: r183 in - let r185 = Sub (r81) :: r184 in - let r186 = [R 30] in - let r187 = [R 528] in - let r188 = Sub (r85) :: r187 in - let r189 = [R 336] in - let r190 = R 296 :: r189 in - let r191 = Sub (r188) :: r190 in - let r192 = [R 189] in - let r193 = S (T T_RBRACKET) :: r192 in - let r194 = Sub (r15) :: r193 in - let r195 = [R 308] in - let r196 = [R 423] in - let r197 = R 302 :: r196 in - let r198 = S (N N_module_expr) :: r197 in - let r199 = R 296 :: r198 in - let r200 = [R 424] in - let r201 = R 302 :: r200 in - let r202 = S (N N_module_expr) :: r201 in - let r203 = R 296 :: r202 in - let r204 = [R 481] in - let r205 = S (T T_RPAREN) :: r204 in - let r206 = [R 482] in - let r207 = S (T T_RPAREN) :: r206 in - let r208 = S (N N_expr) :: r207 in - let r209 = [R 358] in - let r210 = S (T T_LIDENT) :: r209 in - let r211 = [R 66] in - let r212 = Sub (r210) :: r211 in - let r213 = [R 653] in - let r214 = Sub (r212) :: r213 in - let r215 = R 296 :: r214 in - let r216 = [R 359] in + let r0 = [R 232] in + let r1 = S (N N_fun_expr) :: r0 in + let r2 = [R 732] in + let r3 = Sub (r1) :: r2 in + let r4 = [R 150] in + let r5 = S (T T_DONE) :: r4 in + let r6 = Sub (r3) :: r5 in + let r7 = S (T T_DO) :: r6 in + let r8 = Sub (r3) :: r7 in + let r9 = R 374 :: r8 in + let r10 = [R 830] in + let r11 = S (T T_AND) :: r10 in + let r12 = [R 32] in + let r13 = Sub (r11) :: r12 in + let r14 = [R 125] in + let r15 = [R 33] in + let r16 = [R 602] in + let r17 = S (N N_structure) :: r16 in + let r18 = [R 34] in + let r19 = Sub (r17) :: r18 in + let r20 = [R 35] in + let r21 = S (T T_RBRACKET) :: r20 in + let r22 = Sub (r19) :: r21 in + let r23 = [R 944] in + let r24 = S (T T_LIDENT) :: r23 in + let r25 = [R 31] in + let r26 = S (T T_UNDERSCORE) :: r25 in + let r27 = [R 917] in + let r28 = Sub (r26) :: r27 in + let r29 = [R 236] in + let r30 = Sub (r28) :: r29 in + let r31 = [R 17] in + let r32 = Sub (r30) :: r31 in + let r33 = [R 108] in + let r34 = Sub (r32) :: r33 in + let r35 = [R 607] in + let r36 = Sub (r34) :: r35 in + let r37 = [R 952] in + let r38 = R 380 :: r37 in + let r39 = Sub (r36) :: r38 in + let r40 = S (T T_COLON) :: r39 in + let r41 = Sub (r24) :: r40 in + let r42 = R 374 :: r41 in + let r43 = [R 533] in + let r44 = S (T T_AMPERAMPER) :: r43 in + let r45 = [R 943] in + let r46 = S (T T_RPAREN) :: r45 in + let r47 = Sub (r44) :: r46 in + let r48 = [R 507] in + let r49 = S (T T_RPAREN) :: r48 in + let r50 = R 260 :: r49 in + let r51 = [R 261] in + let r52 = [R 509] in + let r53 = S (T T_RBRACKET) :: r52 in + let r54 = [R 511] in + let r55 = S (T T_RBRACE) :: r54 in + let r56 = [R 423] in + let r57 = [R 127] in + let r58 = [R 258] in + let r59 = S (T T_LIDENT) :: r58 in + let r60 = [R 692] in + let r61 = [R 30] in + let r62 = Sub (r59) :: r61 in + let r63 = [R 559] in + let r64 = S (T T_COLON) :: r63 in + let r65 = [R 114] in + let r66 = S (T T_RPAREN) :: r65 in + let r67 = S (N N_module_type) :: r66 in + let r68 = R 374 :: r67 in + let r69 = R 124 :: r68 in + let r70 = [R 735] in + let r71 = R 382 :: r70 in + let r72 = [R 459] in + let r73 = S (T T_END) :: r72 in + let r74 = Sub (r71) :: r73 in + let r75 = [R 255] in + let r76 = R 380 :: r75 in + let r77 = R 680 :: r76 in + let r78 = R 922 :: r77 in + let r79 = S (T T_LIDENT) :: r78 in + let r80 = R 926 :: r79 in + let r81 = R 374 :: r80 in + let r82 = R 124 :: r81 in + let r83 = [R 421] in + let r84 = S (T T_LIDENT) :: r83 in + let r85 = [R 924] in + let r86 = Sub (r84) :: r85 in + let r87 = [R 93] in + let r88 = S (T T_FALSE) :: r87 in + let r89 = [R 97] in + let r90 = Sub (r88) :: r89 in + let r91 = [R 252] in + let r92 = R 374 :: r91 in + let r93 = R 245 :: r92 in + let r94 = Sub (r90) :: r93 in + let r95 = [R 633] in + let r96 = Sub (r94) :: r95 in + let r97 = [R 742] in + let r98 = R 380 :: r97 in + let r99 = Sub (r96) :: r98 in + let r100 = R 613 :: r99 in + let r101 = S (T T_PLUSEQ) :: r100 in + let r102 = Sub (r86) :: r101 in + let r103 = R 926 :: r102 in + let r104 = R 374 :: r103 in + let r105 = [R 256] in + let r106 = R 380 :: r105 in + let r107 = R 680 :: r106 in + let r108 = R 922 :: r107 in + let r109 = S (T T_LIDENT) :: r108 in + let r110 = R 926 :: r109 in + let r111 = [R 743] in + let r112 = R 380 :: r111 in + let r113 = Sub (r96) :: r112 in + let r114 = R 613 :: r113 in + let r115 = S (T T_PLUSEQ) :: r114 in + let r116 = Sub (r86) :: r115 in + let r117 = [R 930] in + let r118 = S (T T_UNDERSCORE) :: r117 in + let r119 = [R 925] in + let r120 = Sub (r118) :: r119 in + let r121 = R 931 :: r120 in + let r122 = [R 705] in + let r123 = Sub (r121) :: r122 in + let r124 = [R 928] in + let r125 = S (T T_RPAREN) :: r124 in + let r126 = [R 929] in + let r127 = [R 706] in + let r128 = [R 490] in + let r129 = S (T T_DOTDOT) :: r128 in + let r130 = [R 923] in + let r131 = [R 491] in + let r132 = [R 96] in + let r133 = S (T T_RPAREN) :: r132 in + let r134 = [R 92] in + let r135 = [R 709] in + let r136 = Sub (r26) :: r135 in + let r137 = [R 241] in + let r138 = Sub (r136) :: r137 in + let r139 = S (T T_STAR) :: r138 in + let r140 = Sub (r26) :: r139 in + let r141 = [R 499] in + let r142 = [R 609] in + let r143 = Sub (r32) :: r142 in + let r144 = [R 411] in + let r145 = R 374 :: r144 in + let r146 = Sub (r143) :: r145 in + let r147 = [R 126] in + let r148 = S (T T_RBRACKET) :: r147 in + let r149 = Sub (r17) :: r148 in + let r150 = [R 798] in + let r151 = [R 435] in + let r152 = [R 627] in + let r153 = Sub (r94) :: r152 in + let r154 = [R 892] in + let r155 = R 380 :: r154 in + let r156 = Sub (r153) :: r155 in + let r157 = R 613 :: r156 in + let r158 = S (T T_PLUSEQ) :: r157 in + let r159 = Sub (r86) :: r158 in + let r160 = R 926 :: r159 in + let r161 = R 374 :: r160 in + let r162 = [R 893] in + let r163 = R 380 :: r162 in + let r164 = Sub (r153) :: r163 in + let r165 = R 613 :: r164 in + let r166 = S (T T_PLUSEQ) :: r165 in + let r167 = Sub (r86) :: r166 in + let r168 = [R 611] in + let r169 = S (T T_RBRACKET) :: r168 in + let r170 = Sub (r19) :: r169 in + let r171 = [R 404] in + let r172 = Sub (r3) :: r171 in + let r173 = S (T T_MINUSGREATER) :: r172 in + let r174 = S (N N_pattern) :: r173 in + let r175 = [R 694] in + let r176 = Sub (r174) :: r175 in + let r177 = [R 143] in + let r178 = Sub (r176) :: r177 in + let r179 = S (T T_WITH) :: r178 in + let r180 = Sub (r3) :: r179 in + let r181 = R 374 :: r180 in + let r182 = [R 656] in + let r183 = S (N N_fun_expr) :: r182 in + let r184 = S (T T_COMMA) :: r183 in + let r185 = [R 919] in + let r186 = Sub (r34) :: r185 in + let r187 = S (T T_COLON) :: r186 in + let r188 = [R 661] in + let r189 = S (N N_fun_expr) :: r188 in + let r190 = S (T T_COMMA) :: r189 in + let r191 = S (T T_RPAREN) :: r190 in + let r192 = Sub (r187) :: r191 in + let r193 = [R 921] in + let r194 = [R 716] in + let r195 = Sub (r34) :: r194 in + let r196 = [R 701] in + let r197 = Sub (r195) :: r196 in + let r198 = [R 120] in + let r199 = S (T T_RBRACKET) :: r198 in + let r200 = Sub (r197) :: r199 in + let r201 = [R 119] in + let r202 = S (T T_RBRACKET) :: r201 in + let r203 = [R 118] in + let r204 = S (T T_RBRACKET) :: r203 in + let r205 = [R 479] in + let r206 = Sub (r59) :: r205 in + let r207 = S (T T_BACKQUOTE) :: r206 in + let r208 = [R 905] in + let r209 = R 374 :: r208 in + let r210 = Sub (r207) :: r209 in + let r211 = [R 115] in + let r212 = S (T T_RBRACKET) :: r211 in + let r213 = [R 86] in + let r214 = Sub (r84) :: r213 in + let r215 = [R 26] in + let r216 = [R 422] in let r217 = S (T T_LIDENT) :: r216 in - let r218 = [R 361] in - let r219 = [R 366] in - let r220 = [R 297] in - let r221 = [R 122] in - let r222 = Sub (r35) :: r221 in - let r223 = S (T T_WITH) :: r222 in - let r224 = Sub (r1) :: r223 in - let r225 = R 296 :: r224 in - let r226 = [R 138] in - let r227 = Sub (r35) :: r226 in - let r228 = S (T T_WITH) :: r227 in - let r229 = Sub (r1) :: r228 in - let r230 = R 296 :: r229 in - let r231 = [R 640] in - let r232 = S (T T_RPAREN) :: r231 in - let r233 = [R 677] in - let r234 = [R 175] in - let r235 = [R 266] in - let r236 = Sub (r77) :: r235 in - let r237 = [R 326] in - let r238 = R 302 :: r237 in - let r239 = Sub (r236) :: r238 in - let r240 = R 539 :: r239 in - let r241 = R 296 :: r240 in - let r242 = [R 637] in - let r243 = [R 100] in - let r244 = [R 598] in - let r245 = S (N N_pattern) :: r244 in - let r246 = [R 635] in - let r247 = S (T T_RBRACKET) :: r246 in - let r248 = [R 250] in - let r249 = Sub (r210) :: r248 in - let r250 = [R 322] in - let r251 = R 472 :: r250 in - let r252 = R 466 :: r251 in - let r253 = Sub (r249) :: r252 in - let r254 = [R 634] in - let r255 = S (T T_RBRACE) :: r254 in - let r256 = [R 467] in - let r257 = [R 591] in - let r258 = Sub (r87) :: r257 in - let r259 = [R 576] in - let r260 = Sub (r258) :: r259 in - let r261 = [R 39] in - let r262 = S (T T_RBRACKET) :: r261 in - let r263 = Sub (r260) :: r262 in - let r264 = [R 38] in - let r265 = [R 37] in - let r266 = S (T T_RBRACKET) :: r265 in - let r267 = [R 404] in - let r268 = Sub (r105) :: r267 in - let r269 = S (T T_BACKQUOTE) :: r268 in - let r270 = [R 780] in - let r271 = R 296 :: r270 in - let r272 = Sub (r269) :: r271 in - let r273 = [R 34] in - let r274 = S (T T_RBRACKET) :: r273 in - let r275 = [R 95] in - let r276 = Sub (r124) :: r275 in - let r277 = [R 31] in - let r278 = [R 349] in - let r279 = S (T T_UIDENT) :: r278 in - let r280 = S (T T_DOT) :: r279 in - let r281 = [R 347] in - let r282 = S (T T_LIDENT) :: r281 in - let r283 = S (T T_UIDENT) :: r70 in - let r284 = [R 364] in - let r285 = Sub (r283) :: r284 in - let r286 = [R 365] in - let r287 = S (T T_RPAREN) :: r286 in - let r288 = [R 35] in - let r289 = S (T T_RBRACKET) :: r288 in - let r290 = [R 205] in - let r291 = [R 588] in - let r292 = [R 32] in - let r293 = [R 203] in - let r294 = Sub (r83) :: r293 in - let r295 = S (T T_MINUSGREATER) :: r294 in - let r296 = [R 589] in - let r297 = [R 577] in - let r298 = [R 572] in - let r299 = Sub (r85) :: r298 in - let r300 = [R 779] in - let r301 = R 296 :: r300 in - let r302 = Sub (r299) :: r301 in - let r303 = [R 573] in - let r304 = [R 18] in - let r305 = Sub (r105) :: r304 in - let r306 = [R 36] in - let r307 = S (T T_RBRACKET) :: r306 in - let r308 = Sub (r260) :: r307 in - let r309 = [R 565] in - let r310 = Sub (r269) :: r309 in - let r311 = [R 40] in - let r312 = S (T T_RBRACKET) :: r311 in - let r313 = [R 473] in - let r314 = S (T T_UNDERSCORE) :: r51 in - let r315 = [R 685] in - let r316 = Sub (r314) :: r315 in - let r317 = [R 512] in - let r318 = Sub (r316) :: r317 in - let r319 = R 296 :: r318 in - let r320 = [R 96] in - let r321 = [R 695] in - let r322 = S (T T_INT) :: r320 in - let r323 = [R 629] in - let r324 = Sub (r322) :: r323 in - let r325 = [R 692] in - let r326 = [R 697] in - let r327 = S (T T_RBRACKET) :: r326 in - let r328 = S (T T_LBRACKET) :: r327 in - let r329 = [R 698] in - let r330 = [R 503] in - let r331 = S (N N_pattern) :: r330 in - let r332 = R 296 :: r331 in - let r333 = [R 504] in - let r334 = [R 497] in - let r335 = [R 511] in - let r336 = [R 509] in - let r337 = [R 405] in - let r338 = S (T T_LIDENT) :: r337 in - let r339 = [R 510] in - let r340 = Sub (r316) :: r339 in - let r341 = S (T T_RPAREN) :: r340 in - let r342 = [R 110] in - let r343 = [R 109] in - let r344 = S (T T_RPAREN) :: r343 in - let r345 = [R 505] in - let r346 = [R 700] in - let r347 = S (T T_RPAREN) :: r346 in - let r348 = [R 502] in - let r349 = [R 500] in - let r350 = [R 108] in - let r351 = S (T T_RPAREN) :: r350 in - let r352 = [R 699] in - let r353 = [R 324] in - let r354 = [R 636] in - let r355 = [R 262] in - let r356 = [R 248] in - let r357 = S (T T_LIDENT) :: r356 in - let r358 = [R 261] in - let r359 = S (T T_RPAREN) :: r358 in - let r360 = [R 249] in - let r361 = [R 258] in - let r362 = [R 257] in + let r218 = S (T T_DOT) :: r217 in + let r219 = S (T T_UIDENT) :: r56 in + let r220 = [R 439] in + let r221 = Sub (r219) :: r220 in + let r222 = [R 440] in + let r223 = S (T T_RPAREN) :: r222 in + let r224 = [R 424] in + let r225 = S (T T_UIDENT) :: r224 in + let r226 = [R 116] in + let r227 = S (T T_RBRACKET) :: r226 in + let r228 = [R 239] in + let r229 = [R 237] in + let r230 = Sub (r30) :: r229 in + let r231 = S (T T_MINUSGREATER) :: r230 in + let r232 = S (T T_DOT) :: r225 in + let r233 = S (T T_LBRACKETGREATER) :: r202 in + let r234 = [R 29] in + let r235 = Sub (r233) :: r234 in + let r236 = [R 113] in + let r237 = [R 918] in + let r238 = [R 710] in + let r239 = Sub (r26) :: r238 in + let r240 = [R 27] in + let r241 = [R 711] in + let r242 = [R 712] in + let r243 = [R 18] in + let r244 = Sub (r59) :: r243 in + let r245 = [R 702] in + let r246 = [R 697] in + let r247 = Sub (r32) :: r246 in + let r248 = [R 904] in + let r249 = R 374 :: r248 in + let r250 = Sub (r247) :: r249 in + let r251 = [R 698] in + let r252 = [R 375] in + let r253 = [R 117] in + let r254 = S (T T_RBRACKET) :: r253 in + let r255 = Sub (r197) :: r254 in + let r256 = [R 690] in + let r257 = Sub (r207) :: r256 in + let r258 = [R 121] in + let r259 = S (T T_RBRACKET) :: r258 in + let r260 = [R 920] in + let r261 = [R 664] in + let r262 = [R 665] in + let r263 = S (T T_RPAREN) :: r262 in + let r264 = Sub (r187) :: r263 in + let r265 = S (T T_UNDERSCORE) :: r150 in + let r266 = [R 788] in + let r267 = [R 782] in + let r268 = S (T T_END) :: r267 in + let r269 = R 391 :: r268 in + let r270 = R 60 :: r269 in + let r271 = R 374 :: r270 in + let r272 = [R 58] in + let r273 = S (T T_RPAREN) :: r272 in + let r274 = [R 816] in + let r275 = [R 670] in + let r276 = S (T T_DOTDOT) :: r275 in + let r277 = S (T T_COMMA) :: r276 in + let r278 = [R 671] in + let r279 = S (T T_DOTDOT) :: r278 in + let r280 = S (T T_COMMA) :: r279 in + let r281 = S (T T_RPAREN) :: r280 in + let r282 = Sub (r34) :: r281 in + let r283 = S (T T_COLON) :: r282 in + let r284 = [R 319] in + let r285 = [R 320] in + let r286 = S (T T_RPAREN) :: r285 in + let r287 = Sub (r34) :: r286 in + let r288 = S (T T_COLON) :: r287 in + let r289 = [R 758] in + let r290 = [R 756] in + let r291 = [R 812] in + let r292 = S (T T_RPAREN) :: r291 in + let r293 = [R 457] in + let r294 = S (T T_UNDERSCORE) :: r293 in + let r295 = [R 814] in + let r296 = S (T T_RPAREN) :: r295 in + let r297 = Sub (r294) :: r296 in + let r298 = R 374 :: r297 in + let r299 = [R 815] in + let r300 = S (T T_RPAREN) :: r299 in + let r301 = [R 462] in + let r302 = S (N N_module_expr) :: r301 in + let r303 = R 374 :: r302 in + let r304 = S (T T_OF) :: r303 in + let r305 = [R 447] in + let r306 = S (T T_END) :: r305 in + let r307 = S (N N_structure) :: r306 in + let r308 = [R 386] in + let r309 = [R 500] in + let r310 = R 380 :: r309 in + let r311 = S (N N_module_expr) :: r310 in + let r312 = R 374 :: r311 in + let r313 = [R 501] in + let r314 = R 380 :: r313 in + let r315 = S (N N_module_expr) :: r314 in + let r316 = R 374 :: r315 in + let r317 = [R 561] in + let r318 = S (T T_RPAREN) :: r317 in + let r319 = [R 562] in + let r320 = S (T T_RPAREN) :: r319 in + let r321 = S (N N_fun_expr) :: r320 in + let r322 = [R 433] in + let r323 = S (T T_LIDENT) :: r322 in + let r324 = [R 57] in + let r325 = Sub (r323) :: r324 in + let r326 = [R 779] in + let r327 = Sub (r325) :: r326 in + let r328 = R 374 :: r327 in + let r329 = [R 434] in + let r330 = S (T T_LIDENT) :: r329 in + let r331 = [R 436] in + let r332 = [R 441] in + let r333 = [R 775] in + let r334 = [R 776] in + let r335 = S (T T_METAOCAML_BRACKET_CLOSE) :: r334 in + let r336 = [R 142] in + let r337 = Sub (r176) :: r336 in + let r338 = S (T T_WITH) :: r337 in + let r339 = Sub (r3) :: r338 in + let r340 = R 374 :: r339 in + let r341 = [R 764] in + let r342 = S (T T_RPAREN) :: r341 in + let r343 = [R 803] in + let r344 = [R 206] in + let r345 = [R 359] in + let r346 = Sub (r24) :: r345 in + let r347 = [R 362] in + let r348 = Sub (r346) :: r347 in + let r349 = [R 203] in + let r350 = Sub (r3) :: r349 in + let r351 = S (T T_IN) :: r350 in + let r352 = [R 676] in + let r353 = S (T T_DOTDOT) :: r352 in + let r354 = S (T T_COMMA) :: r353 in + let r355 = [R 677] in + let r356 = S (T T_DOTDOT) :: r355 in + let r357 = S (T T_COMMA) :: r356 in + let r358 = S (T T_RPAREN) :: r357 in + let r359 = Sub (r34) :: r358 in + let r360 = S (T T_COLON) :: r359 in + let r361 = [R 339] in + let r362 = [R 340] in let r363 = S (T T_RPAREN) :: r362 in - let r364 = R 474 :: r363 in - let r365 = [R 475] in - let r366 = [R 281] in - let r367 = Sub (r77) :: r366 in - let r368 = [R 284] in - let r369 = Sub (r367) :: r368 in - let r370 = [R 173] in - let r371 = Sub (r1) :: r370 in - let r372 = S (T T_IN) :: r371 in - let r373 = [R 520] in - let r374 = S (T T_UNDERSCORE) :: r373 in - let r375 = [R 260] in - let r376 = [R 259] in - let r377 = S (T T_RPAREN) :: r376 in - let r378 = R 474 :: r377 in - let r379 = [R 279] in - let r380 = [R 755] in - let r381 = Sub (r1) :: r380 in - let r382 = S (T T_EQUAL) :: r381 in - let r383 = [R 196] in + let r364 = Sub (r34) :: r363 in + let r365 = S (T T_COLON) :: r364 in + let r366 = [R 763] in + let r367 = [R 91] in + let r368 = [R 726] in + let r369 = S (N N_pattern) :: r368 in + let r370 = [R 761] in + let r371 = S (T T_RBRACKET) :: r370 in + let r372 = [R 286] in + let r373 = Sub (r323) :: r372 in + let r374 = [R 400] in + let r375 = R 552 :: r374 in + let r376 = R 545 :: r375 in + let r377 = Sub (r373) :: r376 in + let r378 = [R 760] in + let r379 = S (T T_RBRACE) :: r378 in + let r380 = [R 546] in + let r381 = [R 553] in + let r382 = S (T T_UNDERSCORE) :: r274 in + let r383 = [R 811] in let r384 = Sub (r382) :: r383 in - let r385 = [R 757] in + let r385 = [R 593] in let r386 = Sub (r384) :: r385 in - let r387 = S (T T_RPAREN) :: r386 in - let r388 = Sub (r338) :: r387 in - let r389 = [R 263] in - let r390 = [R 133] in - let r391 = Sub (r1) :: r390 in - let r392 = S (T T_IN) :: r391 in - let r393 = S (N N_module_expr) :: r392 in - let r394 = R 296 :: r393 in - let r395 = R 187 :: r394 in - let r396 = [R 273] in - let r397 = R 302 :: r396 in - let r398 = Sub (r236) :: r397 in - let r399 = R 539 :: r398 in - let r400 = R 296 :: r399 in - let r401 = R 187 :: r400 in - let r402 = [R 134] in - let r403 = Sub (r1) :: r402 in - let r404 = S (T T_IN) :: r403 in - let r405 = S (N N_module_expr) :: r404 in - let r406 = R 296 :: r405 in - let r407 = [R 373] in - let r408 = S (N N_module_expr) :: r407 in - let r409 = S (T T_MINUSGREATER) :: r408 in - let r410 = S (N N_functor_args) :: r409 in - let r411 = [R 206] in - let r412 = [R 207] in - let r413 = S (T T_RPAREN) :: r412 in - let r414 = S (N N_module_type) :: r413 in - let r415 = [R 387] in - let r416 = S (T T_RPAREN) :: r415 in - let r417 = [R 390] in - let r418 = S (N N_module_type) :: r417 in - let r419 = [R 385] in - let r420 = S (N N_module_type) :: r419 in - let r421 = S (T T_MINUSGREATER) :: r420 in - let r422 = S (N N_functor_args) :: r421 in - let r423 = [R 356] in - let r424 = Sub (r105) :: r423 in - let r425 = [R 396] in - let r426 = Sub (r424) :: r425 in - let r427 = [R 840] in - let r428 = S (N N_module_type) :: r427 in - let r429 = S (T T_EQUAL) :: r428 in - let r430 = Sub (r426) :: r429 in - let r431 = S (T T_TYPE) :: r430 in - let r432 = S (T T_MODULE) :: r431 in - let r433 = [R 574] in - let r434 = Sub (r432) :: r433 in - let r435 = [R 392] in - let r436 = [R 837] in - let r437 = Sub (r85) :: r436 in - let r438 = S (T T_COLONEQUAL) :: r437 in - let r439 = Sub (r249) :: r438 in - let r440 = [R 836] in - let r441 = R 557 :: r440 in - let r442 = [R 558] in - let r443 = Sub (r87) :: r442 in - let r444 = S (T T_EQUAL) :: r443 in - let r445 = [R 357] in - let r446 = Sub (r105) :: r445 in - let r447 = [R 841] in - let r448 = [R 391] in - let r449 = [R 838] in - let r450 = Sub (r285) :: r449 in - let r451 = S (T T_UIDENT) :: r218 in - let r452 = [R 839] in - let r453 = [R 575] in - let r454 = [R 378] in - let r455 = [R 480] in - let r456 = S (T T_RPAREN) :: r455 in - let r457 = [R 592] in - let r458 = S (N N_expr) :: r457 in - let r459 = [R 680] in - let r460 = S (T T_RBRACKET) :: r459 in - let r461 = [R 665] in - let r462 = [R 595] in - let r463 = R 468 :: r462 in - let r464 = [R 469] in - let r465 = [R 601] in - let r466 = R 468 :: r465 in - let r467 = R 476 :: r466 in - let r468 = Sub (r249) :: r467 in - let r469 = [R 541] in - let r470 = Sub (r468) :: r469 in - let r471 = [R 674] in - let r472 = S (T T_RBRACE) :: r471 in - let r473 = S (T T_UIDENT) :: r26 in - let r474 = Sub (r473) :: r219 in - let r475 = [R 233] in - let r476 = [R 639] in - let r477 = [R 638] in - let r478 = S (T T_GREATERDOT) :: r477 in - let r479 = [R 145] in - let r480 = Sub (r42) :: r479 in - let r481 = R 296 :: r480 in - let r482 = [R 652] in - let r483 = S (T T_END) :: r482 in - let r484 = R 296 :: r483 in - let r485 = [R 141] in - let r486 = S (N N_expr) :: r485 in - let r487 = S (T T_THEN) :: r486 in - let r488 = Sub (r1) :: r487 in - let r489 = R 296 :: r488 in - let r490 = [R 135] in - let r491 = Sub (r35) :: r490 in - let r492 = R 296 :: r491 in - let r493 = [R 570] in - let r494 = [R 330] in - let r495 = Sub (r1) :: r494 in - let r496 = S (T T_MINUSGREATER) :: r495 in - let r497 = [R 264] in - let r498 = Sub (r316) :: r497 in - let r499 = [R 198] in - let r500 = Sub (r1) :: r499 in - let r501 = S (T T_MINUSGREATER) :: r500 in - let r502 = [R 136] in - let r503 = Sub (r501) :: r502 in - let r504 = Sub (r498) :: r503 in - let r505 = R 296 :: r504 in - let r506 = [R 137] in - let r507 = Sub (r501) :: r506 in - let r508 = S (T T_RPAREN) :: r507 in - let r509 = [R 129] in - let r510 = S (T T_DONE) :: r509 in - let r511 = Sub (r1) :: r510 in - let r512 = S (T T_DO) :: r511 in - let r513 = Sub (r1) :: r512 in - let r514 = S (T T_IN) :: r513 in - let r515 = S (N N_pattern) :: r514 in - let r516 = R 296 :: r515 in - let r517 = [R 120] in - let r518 = S (T T_DOWNTO) :: r517 in - let r519 = [R 143] in - let r520 = S (T T_DONE) :: r519 in - let r521 = Sub (r1) :: r520 in - let r522 = S (T T_DO) :: r521 in - let r523 = Sub (r1) :: r522 in - let r524 = Sub (r518) :: r523 in - let r525 = Sub (r1) :: r524 in - let r526 = S (T T_EQUAL) :: r525 in - let r527 = S (N N_pattern) :: r526 in - let r528 = R 296 :: r527 in - let r529 = [R 663] in - let r530 = [R 673] in - let r531 = S (T T_RPAREN) :: r530 in - let r532 = S (T T_LPAREN) :: r531 in - let r533 = S (T T_DOT) :: r532 in - let r534 = [R 683] in - let r535 = S (T T_RPAREN) :: r534 in - let r536 = S (N N_module_type) :: r535 in - let r537 = S (T T_COLON) :: r536 in - let r538 = S (N N_module_expr) :: r537 in - let r539 = R 296 :: r538 in - let r540 = [R 282] in - let r541 = Sub (r1) :: r540 in - let r542 = S (T T_EQUAL) :: r541 in - let r543 = [R 144] in - let r544 = Sub (r42) :: r543 in - let r545 = R 296 :: r544 in - let r546 = [R 670] in - let r547 = [R 645] in - let r548 = S (T T_RPAREN) :: r547 in - let r549 = Sub (r458) :: r548 in - let r550 = S (T T_LPAREN) :: r549 in - let r551 = [R 170] in - let r552 = [R 253] in - let r553 = [R 794] in - let r554 = Sub (r87) :: r553 in - let r555 = S (T T_COLON) :: r554 in - let r556 = [R 254] in - let r557 = S (T T_RPAREN) :: r556 in - let r558 = Sub (r555) :: r557 in - let r559 = [R 796] in - let r560 = [R 795] in - let r561 = [R 255] in - let r562 = [R 256] in - let r563 = [R 669] in - let r564 = [R 642] in - let r565 = S (T T_RPAREN) :: r564 in - let r566 = Sub (r1) :: r565 in - let r567 = S (T T_LPAREN) :: r566 in - let r568 = [R 586] in - let r569 = [R 229] in - let r570 = S (T T_SLASHGREATER) :: r569 in - let r571 = [R 240] in - let r572 = [R 242] in - let r573 = [R 241] in - let r574 = [R 236] in - let r575 = S (T T_JSX_LIDENT_E) :: r574 in - let r576 = [R 230] in - let r577 = S (T T_GREATER) :: r576 in - let r578 = Sub (r575) :: r577 in - let r579 = [R 237] in - let r580 = [R 121] in - let r581 = Sub (r1) :: r580 in - let r582 = [R 172] in - let r583 = Sub (r1) :: r582 in - let r584 = [R 160] in - let r585 = [R 154] in - let r586 = [R 171] in - let r587 = [R 607] in - let r588 = Sub (r1) :: r587 in - let r589 = [R 157] in - let r590 = [R 161] in - let r591 = [R 153] in - let r592 = [R 156] in - let r593 = [R 155] in - let r594 = [R 165] in - let r595 = [R 159] in - let r596 = [R 158] in - let r597 = [R 163] in - let r598 = [R 152] in - let r599 = [R 151] in - let r600 = [R 174] in - let r601 = [R 150] in - let r602 = [R 164] in - let r603 = [R 162] in - let r604 = [R 166] in - let r605 = [R 167] in - let r606 = [R 168] in - let r607 = [R 587] in - let r608 = [R 169] in - let r609 = [R 19] in - let r610 = R 302 :: r609 in - let r611 = Sub (r236) :: r610 in - let r612 = [R 272] in - let r613 = Sub (r1) :: r612 in - let r614 = S (T T_EQUAL) :: r613 in - let r615 = [R 271] in - let r616 = Sub (r1) :: r615 in - let r617 = [R 507] in - let r618 = [R 513] in - let r619 = [R 518] in - let r620 = [R 516] in - let r621 = [R 506] in - let r622 = [R 530] in - let r623 = S (T T_RBRACKET) :: r622 in - let r624 = Sub (r15) :: r623 in - let r625 = [R 524] in - let r626 = [R 525] in - let r627 = [R 367] in - let r628 = S (N N_module_expr) :: r627 in - let r629 = S (T T_EQUAL) :: r628 in - let r630 = [R 770] in - let r631 = R 302 :: r630 in - let r632 = Sub (r629) :: r631 in - let r633 = Sub (r63) :: r632 in - let r634 = R 296 :: r633 in - let r635 = [R 394] in - let r636 = R 302 :: r635 in - let r637 = R 470 :: r636 in - let r638 = Sub (r105) :: r637 in - let r639 = R 296 :: r638 in - let r640 = R 187 :: r639 in - let r641 = [R 471] in - let r642 = [R 303] in - let r643 = [R 771] in - let r644 = R 292 :: r643 in - let r645 = R 302 :: r644 in - let r646 = Sub (r629) :: r645 in - let r647 = [R 368] in - let r648 = S (N N_module_expr) :: r647 in - let r649 = S (T T_EQUAL) :: r648 in - let r650 = [R 293] in - let r651 = R 292 :: r650 in - let r652 = R 302 :: r651 in - let r653 = Sub (r629) :: r652 in - let r654 = Sub (r63) :: r653 in - let r655 = [R 369] in - let r656 = [R 227] in - let r657 = S (T T_RBRACKET) :: r656 in - let r658 = Sub (r15) :: r657 in - let r659 = [R 193] in - let r660 = S (T T_RBRACKET) :: r659 in - let r661 = Sub (r15) :: r660 in - let r662 = [R 776] in - let r663 = R 302 :: r662 in - let r664 = S (N N_module_expr) :: r663 in - let r665 = R 296 :: r664 in - let r666 = [R 407] in - let r667 = S (T T_STRING) :: r666 in - let r668 = [R 531] in - let r669 = R 302 :: r668 in - let r670 = Sub (r667) :: r669 in - let r671 = S (T T_EQUAL) :: r670 in - let r672 = Sub (r89) :: r671 in - let r673 = S (T T_COLON) :: r672 in - let r674 = Sub (r77) :: r673 in - let r675 = R 296 :: r674 in - let r676 = [R 527] in - let r677 = Sub (r87) :: r676 in - let r678 = [R 568] in - let r679 = Sub (r128) :: r342 in - let r680 = [R 754] in - let r681 = R 302 :: r680 in - let r682 = R 296 :: r681 in - let r683 = Sub (r679) :: r682 in - let r684 = S (T T_EQUAL) :: r683 in - let r685 = Sub (r130) :: r684 in - let r686 = R 296 :: r685 in - let r687 = [R 608] in - let r688 = R 302 :: r687 in - let r689 = R 296 :: r688 in - let r690 = R 209 :: r689 in - let r691 = Sub (r130) :: r690 in - let r692 = R 296 :: r691 in - let r693 = R 187 :: r692 in - let r694 = [R 112] in - let r695 = Sub (r79) :: r694 in - let r696 = [R 210] in - let r697 = [R 243] in - let r698 = R 296 :: r697 in - let r699 = Sub (r188) :: r698 in - let r700 = S (T T_COLON) :: r699 in - let r701 = S (T T_LIDENT) :: r700 in - let r702 = R 397 :: r701 in - let r703 = [R 245] in - let r704 = Sub (r702) :: r703 in - let r705 = [R 114] in - let r706 = S (T T_RBRACE) :: r705 in - let r707 = [R 244] in - let r708 = R 296 :: r707 in - let r709 = S (T T_SEMI) :: r708 in - let r710 = R 296 :: r709 in - let r711 = Sub (r188) :: r710 in - let r712 = S (T T_COLON) :: r711 in - let r713 = [R 529] in - let r714 = Sub (r85) :: r713 in - let r715 = [R 113] in - let r716 = Sub (r79) :: r715 in - let r717 = S (T T_COLONCOLON) :: r351 in - let r718 = [R 213] in - let r719 = [R 214] in - let r720 = Sub (r79) :: r719 in - let r721 = [R 212] in - let r722 = Sub (r79) :: r721 in - let r723 = [R 211] in - let r724 = Sub (r79) :: r723 in - let r725 = [R 522] in - let r726 = [R 552] in - let r727 = Sub (r134) :: r726 in - let r728 = [R 616] in - let r729 = R 302 :: r728 in - let r730 = Sub (r727) :: r729 in - let r731 = R 532 :: r730 in - let r732 = S (T T_PLUSEQ) :: r731 in - let r733 = Sub (r126) :: r732 in - let r734 = R 801 :: r733 in - let r735 = R 296 :: r734 in - let r736 = [R 617] in - let r737 = R 302 :: r736 in - let r738 = Sub (r727) :: r737 in - let r739 = R 532 :: r738 in - let r740 = S (T T_PLUSEQ) :: r739 in - let r741 = Sub (r126) :: r740 in - let r742 = [R 218] in - let r743 = R 302 :: r742 in - let r744 = R 557 :: r743 in - let r745 = [R 419] in - let r746 = S (T T_RBRACE) :: r745 in - let r747 = [R 215] in - let r748 = R 296 :: r747 in - let r749 = R 209 :: r748 in - let r750 = Sub (r130) :: r749 in - let r751 = [R 417] in - let r752 = [R 418] in - let r753 = [R 422] in - let r754 = S (T T_RBRACE) :: r753 in - let r755 = [R 421] in - let r756 = S (T T_RBRACE) :: r755 in - let r757 = [R 217] in - let r758 = R 302 :: r757 in - let r759 = R 557 :: r758 in - let r760 = [R 305] in - let r761 = [R 425] in - let r762 = R 302 :: r761 in - let r763 = Sub (r285) :: r762 in - let r764 = R 296 :: r763 in - let r765 = [R 426] in - let r766 = R 302 :: r765 in - let r767 = Sub (r285) :: r766 in - let r768 = R 296 :: r767 in - let r769 = [R 370] in - let r770 = S (N N_module_type) :: r769 in - let r771 = S (T T_COLON) :: r770 in - let r772 = [R 619] in - let r773 = R 302 :: r772 in - let r774 = Sub (r771) :: r773 in - let r775 = Sub (r63) :: r774 in - let r776 = R 296 :: r775 in - let r777 = [R 395] in - let r778 = R 302 :: r777 in - let r779 = S (N N_module_type) :: r778 in - let r780 = S (T T_COLONEQUAL) :: r779 in - let r781 = Sub (r105) :: r780 in - let r782 = R 296 :: r781 in - let r783 = [R 383] in - let r784 = R 302 :: r783 in - let r785 = [R 622] in - let r786 = R 294 :: r785 in - let r787 = R 302 :: r786 in - let r788 = S (N N_module_type) :: r787 in - let r789 = S (T T_COLON) :: r788 in - let r790 = [R 295] in - let r791 = R 294 :: r790 in - let r792 = R 302 :: r791 in - let r793 = S (N N_module_type) :: r792 in - let r794 = S (T T_COLON) :: r793 in - let r795 = Sub (r63) :: r794 in - let r796 = [R 620] in - let r797 = R 302 :: r796 in - let r798 = [R 371] in - let r799 = [R 626] in - let r800 = R 302 :: r799 in - let r801 = S (N N_module_type) :: r800 in - let r802 = R 296 :: r801 in - let r803 = S (T T_QUOTED_STRING_EXPR) :: r41 in - let r804 = [R 80] in - let r805 = Sub (r803) :: r804 in - let r806 = [R 90] in - let r807 = Sub (r805) :: r806 in - let r808 = [R 627] in - let r809 = R 288 :: r808 in - let r810 = R 302 :: r809 in - let r811 = Sub (r807) :: r810 in - let r812 = S (T T_COLON) :: r811 in - let r813 = S (T T_LIDENT) :: r812 in - let r814 = R 194 :: r813 in - let r815 = R 828 :: r814 in - let r816 = R 296 :: r815 in - let r817 = [R 94] in - let r818 = R 290 :: r817 in - let r819 = R 302 :: r818 in - let r820 = Sub (r805) :: r819 in - let r821 = S (T T_EQUAL) :: r820 in - let r822 = S (T T_LIDENT) :: r821 in - let r823 = R 194 :: r822 in - let r824 = R 828 :: r823 in - let r825 = R 296 :: r824 in - let r826 = [R 195] in - let r827 = S (T T_RBRACKET) :: r826 in - let r828 = [R 81] in - let r829 = S (T T_END) :: r828 in - let r830 = R 311 :: r829 in - let r831 = R 71 :: r830 in - let r832 = [R 70] in - let r833 = S (T T_RPAREN) :: r832 in - let r834 = [R 73] in - let r835 = R 302 :: r834 in - let r836 = Sub (r87) :: r835 in - let r837 = S (T T_COLON) :: r836 in - let r838 = S (T T_LIDENT) :: r837 in - let r839 = R 399 :: r838 in - let r840 = [R 74] in - let r841 = R 302 :: r840 in - let r842 = Sub (r89) :: r841 in - let r843 = S (T T_COLON) :: r842 in - let r844 = S (T T_LIDENT) :: r843 in - let r845 = R 534 :: r844 in - let r846 = [R 72] in - let r847 = R 302 :: r846 in - let r848 = Sub (r805) :: r847 in - let r849 = [R 83] in - let r850 = Sub (r805) :: r849 in - let r851 = S (T T_IN) :: r850 in - let r852 = Sub (r474) :: r851 in - let r853 = R 296 :: r852 in - let r854 = [R 84] in - let r855 = Sub (r805) :: r854 in - let r856 = S (T T_IN) :: r855 in - let r857 = Sub (r474) :: r856 in - let r858 = [R 578] in - let r859 = Sub (r87) :: r858 in - let r860 = [R 79] in - let r861 = Sub (r276) :: r860 in + let r387 = R 374 :: r386 in + let r388 = [R 87] in + let r389 = [R 821] in + let r390 = S (T T_INT) :: r388 in + let r391 = [R 755] in + let r392 = Sub (r390) :: r391 in + let r393 = [R 818] in + let r394 = [R 823] in + let r395 = S (T T_RBRACKET) :: r394 in + let r396 = S (T T_LBRACKET) :: r395 in + let r397 = [R 824] in + let r398 = [R 669] in + let r399 = S (T T_DOTDOT) :: r398 in + let r400 = S (T T_COMMA) :: r399 in + let r401 = [R 311] in + let r402 = [R 312] in + let r403 = S (T T_RPAREN) :: r402 in + let r404 = Sub (r34) :: r403 in + let r405 = S (T T_COLON) :: r404 in + let r406 = [R 310] in + let r407 = [R 101] in + let r408 = [R 587] in + let r409 = S (N N_pattern) :: r408 in + let r410 = R 374 :: r409 in + let r411 = [R 589] in + let r412 = Sub (r384) :: r411 in + let r413 = [R 588] in + let r414 = Sub (r384) :: r413 in + let r415 = S (T T_COMMA) :: r414 in + let r416 = [R 592] in + let r417 = [R 667] in + let r418 = [R 303] in + let r419 = [R 304] in + let r420 = S (T T_RPAREN) :: r419 in + let r421 = Sub (r34) :: r420 in + let r422 = S (T T_COLON) :: r421 in + let r423 = [R 302] in + let r424 = [R 581] in + let r425 = [R 590] in + let r426 = [R 480] in + let r427 = S (T T_LIDENT) :: r426 in + let r428 = [R 591] in + let r429 = Sub (r384) :: r428 in + let r430 = S (T T_RPAREN) :: r429 in + let r431 = [R 100] in + let r432 = S (T T_RPAREN) :: r431 in + let r433 = [R 668] in + let r434 = [R 307] in + let r435 = [R 308] in + let r436 = S (T T_RPAREN) :: r435 in + let r437 = Sub (r34) :: r436 in + let r438 = S (T T_COLON) :: r437 in + let r439 = [R 306] in + let r440 = [R 826] in + let r441 = S (T T_RPAREN) :: r440 in + let r442 = [R 586] in + let r443 = [R 584] in + let r444 = [R 99] in + let r445 = S (T T_RPAREN) :: r444 in + let r446 = [R 825] in + let r447 = [R 402] in + let r448 = [R 762] in + let r449 = [R 338] in + let r450 = [R 594] in + let r451 = [R 673] in + let r452 = [R 323] in + let r453 = [R 324] in + let r454 = S (T T_RPAREN) :: r453 in + let r455 = Sub (r34) :: r454 in + let r456 = S (T T_COLON) :: r455 in + let r457 = [R 322] in + let r458 = [R 335] in + let r459 = [R 336] in + let r460 = S (T T_RPAREN) :: r459 in + let r461 = Sub (r34) :: r460 in + let r462 = S (T T_COLON) :: r461 in + let r463 = [R 334] in + let r464 = [R 675] in + let r465 = S (T T_DOTDOT) :: r464 in + let r466 = S (T T_COMMA) :: r465 in + let r467 = [R 331] in + let r468 = [R 332] in + let r469 = S (T T_RPAREN) :: r468 in + let r470 = Sub (r34) :: r469 in + let r471 = S (T T_COLON) :: r470 in + let r472 = [R 330] in + let r473 = [R 298] in + let r474 = [R 284] in + let r475 = S (T T_LIDENT) :: r474 in + let r476 = [R 297] in + let r477 = S (T T_RPAREN) :: r476 in + let r478 = [R 285] in + let r479 = [R 294] in + let r480 = [R 293] in + let r481 = S (T T_RPAREN) :: r480 in + let r482 = R 554 :: r481 in + let r483 = [R 555] in + let r484 = [R 139] in + let r485 = Sub (r3) :: r484 in + let r486 = S (T T_IN) :: r485 in + let r487 = S (N N_module_expr) :: r486 in + let r488 = R 374 :: r487 in + let r489 = R 124 :: r488 in + let r490 = [R 344] in + let r491 = Sub (r24) :: r490 in + let r492 = [R 351] in + let r493 = R 380 :: r492 in + let r494 = Sub (r491) :: r493 in + let r495 = R 620 :: r494 in + let r496 = R 374 :: r495 in + let r497 = R 124 :: r496 in + let r498 = [R 140] in + let r499 = Sub (r3) :: r498 in + let r500 = S (T T_IN) :: r499 in + let r501 = S (N N_module_expr) :: r500 in + let r502 = R 374 :: r501 in + let r503 = [R 448] in + let r504 = S (N N_module_expr) :: r503 in + let r505 = S (T T_MINUSGREATER) :: r504 in + let r506 = S (N N_functor_args) :: r505 in + let r507 = [R 242] in + let r508 = [R 243] in + let r509 = S (T T_RPAREN) :: r508 in + let r510 = S (N N_module_type) :: r509 in + let r511 = [R 463] in + let r512 = S (T T_RPAREN) :: r511 in + let r513 = [R 460] in + let r514 = S (N N_module_type) :: r513 in + let r515 = S (T T_MINUSGREATER) :: r514 in + let r516 = S (N N_functor_args) :: r515 in + let r517 = [R 431] in + let r518 = Sub (r59) :: r517 in + let r519 = [R 471] in + let r520 = Sub (r518) :: r519 in + let r521 = [R 965] in + let r522 = S (N N_module_type) :: r521 in + let r523 = S (T T_EQUAL) :: r522 in + let r524 = Sub (r520) :: r523 in + let r525 = S (T T_TYPE) :: r524 in + let r526 = S (T T_MODULE) :: r525 in + let r527 = [R 699] in + let r528 = Sub (r526) :: r527 in + let r529 = [R 467] in + let r530 = [R 962] in + let r531 = Sub (r32) :: r530 in + let r532 = S (T T_COLONEQUAL) :: r531 in + let r533 = Sub (r373) :: r532 in + let r534 = [R 961] in + let r535 = R 680 :: r534 in + let r536 = [R 681] in + let r537 = Sub (r34) :: r536 in + let r538 = S (T T_EQUAL) :: r537 in + let r539 = [R 432] in + let r540 = Sub (r59) :: r539 in + let r541 = [R 461] in + let r542 = S (N N_module_type) :: r541 in + let r543 = [R 466] in + let r544 = [R 966] in + let r545 = [R 963] in + let r546 = Sub (r221) :: r545 in + let r547 = S (T T_UIDENT) :: r331 in + let r548 = [R 964] in + let r549 = [R 700] in + let r550 = [R 453] in + let r551 = [R 560] in + let r552 = S (T T_RPAREN) :: r551 in + let r553 = [R 717] in + let r554 = S (N N_fun_expr) :: r553 in + let r555 = [R 806] in + let r556 = S (T T_RBRACKET) :: r555 in + let r557 = [R 791] in + let r558 = [R 723] in + let r559 = R 547 :: r558 in + let r560 = [R 548] in + let r561 = [R 729] in + let r562 = R 547 :: r561 in + let r563 = R 556 :: r562 in + let r564 = Sub (r373) :: r563 in + let r565 = [R 622] in + let r566 = Sub (r564) :: r565 in + let r567 = [R 800] in + let r568 = S (T T_RBRACE) :: r567 in + let r569 = S (T T_UIDENT) :: r151 in + let r570 = Sub (r569) :: r332 in + let r571 = [R 269] in + let r572 = [R 778] in + let r573 = S (T T_END) :: r572 in + let r574 = R 374 :: r573 in + let r575 = [R 153] in + let r576 = Sub (r265) :: r575 in + let r577 = R 374 :: r576 in + let r578 = [R 789] in + let r579 = [R 799] in + let r580 = S (T T_RPAREN) :: r579 in + let r581 = S (T T_LPAREN) :: r580 in + let r582 = S (T T_DOT) :: r581 in + let r583 = [R 809] in + let r584 = S (T T_RPAREN) :: r583 in + let r585 = S (N N_module_type) :: r584 in + let r586 = S (T T_COLON) :: r585 in + let r587 = S (N N_module_expr) :: r586 in + let r588 = R 374 :: r587 in + let r589 = [R 360] in + let r590 = Sub (r3) :: r589 in + let r591 = S (T T_EQUAL) :: r590 in + let r592 = [R 651] in + let r593 = S (N N_fun_expr) :: r592 in + let r594 = S (T T_COMMA) :: r593 in + let r595 = [R 796] in + let r596 = [R 769] in + let r597 = S (T T_RPAREN) :: r596 in + let r598 = Sub (r554) :: r597 in + let r599 = S (T T_LPAREN) :: r598 in + let r600 = [R 148] in + let r601 = S (N N_fun_expr) :: r600 in + let r602 = S (T T_THEN) :: r601 in + let r603 = Sub (r3) :: r602 in + let r604 = R 374 :: r603 in + let r605 = [R 733] in + let r606 = Sub (r176) :: r605 in + let r607 = R 374 :: r606 in + let r608 = [R 695] in + let r609 = [R 405] in + let r610 = Sub (r3) :: r609 in + let r611 = S (T T_MINUSGREATER) :: r610 in + let r612 = [R 300] in + let r613 = Sub (r384) :: r612 in + let r614 = [R 230] in + let r615 = Sub (r613) :: r614 in + let r616 = [R 684] in + let r617 = Sub (r615) :: r616 in + let r618 = [R 231] in + let r619 = Sub (r617) :: r618 in + let r620 = [R 135] in + let r621 = Sub (r1) :: r620 in + let r622 = [R 141] in + let r623 = Sub (r621) :: r622 in + let r624 = S (T T_MINUSGREATER) :: r623 in + let r625 = R 543 :: r624 in + let r626 = Sub (r619) :: r625 in + let r627 = R 374 :: r626 in + let r628 = [R 601] in + let r629 = S (T T_UNDERSCORE) :: r628 in + let r630 = [R 296] in + let r631 = [R 295] in + let r632 = S (T T_RPAREN) :: r631 in + let r633 = R 554 :: r632 in + let r634 = [R 357] in + let r635 = [R 229] in + let r636 = S (T T_RPAREN) :: r635 in + let r637 = [R 299] in + let r638 = [R 544] in + let r639 = [R 134] in + let r640 = Sub (r176) :: r639 in + let r641 = R 374 :: r640 in + let r642 = [R 646] in + let r643 = [R 649] in + let r644 = [R 650] in + let r645 = S (T T_RPAREN) :: r644 in + let r646 = Sub (r187) :: r645 in + let r647 = [R 648] in + let r648 = [R 795] in + let r649 = [R 766] in + let r650 = S (T T_RPAREN) :: r649 in + let r651 = Sub (r3) :: r650 in + let r652 = S (T T_LPAREN) :: r651 in + let r653 = [R 123] in + let r654 = S (T T_DOWNTO) :: r653 in + let r655 = [R 151] in + let r656 = S (T T_DONE) :: r655 in + let r657 = Sub (r3) :: r656 in + let r658 = S (T T_DO) :: r657 in + let r659 = Sub (r3) :: r658 in + let r660 = Sub (r654) :: r659 in + let r661 = Sub (r3) :: r660 in + let r662 = S (T T_EQUAL) :: r661 in + let r663 = S (N N_pattern) :: r662 in + let r664 = R 374 :: r663 in + let r665 = [R 152] in + let r666 = Sub (r265) :: r665 in + let r667 = R 374 :: r666 in + let r668 = [R 265] in + let r669 = S (T T_SLASHGREATER) :: r668 in + let r670 = [R 276] in + let r671 = [R 278] in + let r672 = [R 277] in + let r673 = [R 272] in + let r674 = S (T T_JSX_LIDENT_E) :: r673 in + let r675 = [R 266] in + let r676 = S (T T_GREATER) :: r675 in + let r677 = Sub (r674) :: r676 in + let r678 = [R 273] in + let r679 = [R 198] in + let r680 = [R 199] in + let r681 = Sub (r176) :: r680 in + let r682 = R 374 :: r681 in + let r683 = [R 289] in + let r684 = [R 290] in + let r685 = S (T T_RPAREN) :: r684 in + let r686 = Sub (r187) :: r685 in + let r687 = [R 291] in + let r688 = [R 292] in + let r689 = [R 288] in + let r690 = [R 719] in + let r691 = Sub (r176) :: r690 in + let r692 = R 374 :: r691 in + let r693 = [R 636] in + let r694 = [R 639] in + let r695 = [R 640] in + let r696 = S (T T_RPAREN) :: r695 in + let r697 = Sub (r187) :: r696 in + let r698 = [R 638] in + let r699 = [R 637] in + let r700 = Sub (r176) :: r699 in + let r701 = R 374 :: r700 in + let r702 = [R 696] in + let r703 = [R 202] in + let r704 = Sub (r3) :: r703 in + let r705 = [R 178] in + let r706 = [R 179] in + let r707 = Sub (r176) :: r706 in + let r708 = R 374 :: r707 in + let r709 = [R 166] in + let r710 = [R 167] in + let r711 = Sub (r176) :: r710 in + let r712 = R 374 :: r711 in + let r713 = [R 200] in + let r714 = [R 201] in + let r715 = Sub (r176) :: r714 in + let r716 = R 374 :: r715 in + let r717 = [R 235] in + let r718 = Sub (r3) :: r717 in + let r719 = [R 172] in + let r720 = [R 173] in + let r721 = Sub (r176) :: r720 in + let r722 = R 374 :: r721 in + let r723 = [R 180] in + let r724 = [R 181] in + let r725 = Sub (r176) :: r724 in + let r726 = R 374 :: r725 in + let r727 = [R 164] in + let r728 = [R 165] in + let r729 = Sub (r176) :: r728 in + let r730 = R 374 :: r729 in + let r731 = [R 170] in + let r732 = [R 171] in + let r733 = Sub (r176) :: r732 in + let r734 = R 374 :: r733 in + let r735 = [R 168] in + let r736 = [R 169] in + let r737 = Sub (r176) :: r736 in + let r738 = R 374 :: r737 in + let r739 = [R 188] in + let r740 = [R 189] in + let r741 = Sub (r176) :: r740 in + let r742 = R 374 :: r741 in + let r743 = [R 176] in + let r744 = [R 177] in + let r745 = Sub (r176) :: r744 in + let r746 = R 374 :: r745 in + let r747 = [R 174] in + let r748 = [R 175] in + let r749 = Sub (r176) :: r748 in + let r750 = R 374 :: r749 in + let r751 = [R 184] in + let r752 = [R 185] in + let r753 = Sub (r176) :: r752 in + let r754 = R 374 :: r753 in + let r755 = [R 162] in + let r756 = [R 163] in + let r757 = Sub (r176) :: r756 in + let r758 = R 374 :: r757 in + let r759 = [R 160] in + let r760 = [R 161] in + let r761 = Sub (r176) :: r760 in + let r762 = R 374 :: r761 in + let r763 = [R 204] in + let r764 = [R 205] in + let r765 = Sub (r176) :: r764 in + let r766 = R 374 :: r765 in + let r767 = [R 158] in + let r768 = [R 159] in + let r769 = Sub (r176) :: r768 in + let r770 = R 374 :: r769 in + let r771 = [R 186] in + let r772 = [R 187] in + let r773 = Sub (r176) :: r772 in + let r774 = R 374 :: r773 in + let r775 = [R 182] in + let r776 = [R 183] in + let r777 = Sub (r176) :: r776 in + let r778 = R 374 :: r777 in + let r779 = [R 190] in + let r780 = [R 191] in + let r781 = Sub (r176) :: r780 in + let r782 = R 374 :: r781 in + let r783 = [R 192] in + let r784 = [R 193] in + let r785 = Sub (r176) :: r784 in + let r786 = R 374 :: r785 in + let r787 = [R 194] in + let r788 = [R 195] in + let r789 = Sub (r176) :: r788 in + let r790 = R 374 :: r789 in + let r791 = [R 641] in + let r792 = [R 644] in + let r793 = [R 645] in + let r794 = S (T T_RPAREN) :: r793 in + let r795 = Sub (r187) :: r794 in + let r796 = [R 643] in + let r797 = [R 642] in + let r798 = Sub (r176) :: r797 in + let r799 = R 374 :: r798 in + let r800 = [R 196] in + let r801 = [R 197] in + let r802 = Sub (r176) :: r801 in + let r803 = R 374 :: r802 in + let r804 = [R 19] in + let r805 = R 380 :: r804 in + let r806 = Sub (r491) :: r805 in + let r807 = [R 882] in + let r808 = Sub (r3) :: r807 in + let r809 = [R 348] in + let r810 = Sub (r3) :: r809 in + let r811 = S (T T_EQUAL) :: r810 in + let r812 = Sub (r34) :: r811 in + let r813 = S (T T_DOT) :: r812 in + let r814 = [R 347] in + let r815 = Sub (r3) :: r814 in + let r816 = S (T T_EQUAL) :: r815 in + let r817 = Sub (r34) :: r816 in + let r818 = [R 693] in + let r819 = [R 346] in + let r820 = Sub (r3) :: r819 in + let r821 = [R 883] in + let r822 = Sub (r621) :: r821 in + let r823 = S (T T_EQUAL) :: r822 in + let r824 = [R 350] in + let r825 = Sub (r3) :: r824 in + let r826 = S (T T_EQUAL) :: r825 in + let r827 = [R 349] in + let r828 = Sub (r3) :: r827 in + let r829 = [R 674] in + let r830 = [R 327] in + let r831 = [R 328] in + let r832 = S (T T_RPAREN) :: r831 in + let r833 = Sub (r34) :: r832 in + let r834 = S (T T_COLON) :: r833 in + let r835 = [R 326] in + let r836 = [R 599] in + let r837 = [R 597] in + let r838 = [R 381] in + let r839 = [R 216] in + let r840 = [R 217] in + let r841 = Sub (r176) :: r840 in + let r842 = R 374 :: r841 in + let r843 = [R 773] in + let r844 = S (T T_RBRACKET) :: r843 in + let r845 = Sub (r554) :: r844 in + let r846 = [R 224] in + let r847 = [R 225] in + let r848 = Sub (r176) :: r847 in + let r849 = R 374 :: r848 in + let r850 = [R 771] in + let r851 = S (T T_RBRACE) :: r850 in + let r852 = Sub (r554) :: r851 in + let r853 = [R 220] in + let r854 = [R 221] in + let r855 = Sub (r176) :: r854 in + let r856 = R 374 :: r855 in + let r857 = [R 210] in + let r858 = [R 211] in + let r859 = Sub (r176) :: r858 in + let r860 = R 374 :: r859 in + let r861 = [R 768] in let r862 = S (T T_RBRACKET) :: r861 in - let r863 = Sub (r859) :: r862 in - let r864 = [R 579] in - let r865 = [R 111] in - let r866 = Sub (r87) :: r865 in - let r867 = S (T T_EQUAL) :: r866 in - let r868 = Sub (r87) :: r867 in - let r869 = [R 75] in - let r870 = R 302 :: r869 in - let r871 = Sub (r868) :: r870 in - let r872 = [R 76] in - let r873 = [R 312] in - let r874 = [R 291] in - let r875 = R 290 :: r874 in - let r876 = R 302 :: r875 in - let r877 = Sub (r805) :: r876 in - let r878 = S (T T_EQUAL) :: r877 in - let r879 = S (T T_LIDENT) :: r878 in - let r880 = R 194 :: r879 in - let r881 = R 828 :: r880 in - let r882 = [R 92] in - let r883 = Sub (r807) :: r882 in - let r884 = S (T T_MINUSGREATER) :: r883 in - let r885 = Sub (r81) :: r884 in - let r886 = [R 93] in - let r887 = Sub (r807) :: r886 in - let r888 = [R 91] in - let r889 = Sub (r807) :: r888 in - let r890 = S (T T_MINUSGREATER) :: r889 in - let r891 = [R 289] in - let r892 = R 288 :: r891 in - let r893 = R 302 :: r892 in - let r894 = Sub (r807) :: r893 in - let r895 = S (T T_COLON) :: r894 in - let r896 = S (T T_LIDENT) :: r895 in - let r897 = R 194 :: r896 in - let r898 = R 828 :: r897 in - let r899 = [R 306] in - let r900 = [R 610] in - let r901 = [R 614] in - let r902 = [R 299] in - let r903 = R 298 :: r902 in - let r904 = R 302 :: r903 in - let r905 = R 557 :: r904 in - let r906 = R 797 :: r905 in - let r907 = S (T T_LIDENT) :: r906 in - let r908 = R 801 :: r907 in - let r909 = [R 615] in - let r910 = [R 301] in - let r911 = R 300 :: r910 in - let r912 = R 302 :: r911 in - let r913 = R 557 :: r912 in - let r914 = Sub (r177) :: r913 in - let r915 = S (T T_COLONEQUAL) :: r914 in - let r916 = S (T T_LIDENT) :: r915 in - let r917 = R 801 :: r916 in - let r918 = [R 52] in - let r919 = Sub (r803) :: r918 in - let r920 = [R 61] in - let r921 = Sub (r919) :: r920 in - let r922 = S (T T_EQUAL) :: r921 in - let r923 = [R 774] in - let r924 = R 286 :: r923 in - let r925 = R 302 :: r924 in - let r926 = Sub (r922) :: r925 in - let r927 = S (T T_LIDENT) :: r926 in - let r928 = R 194 :: r927 in - let r929 = R 828 :: r928 in - let r930 = R 296 :: r929 in - let r931 = [R 89] in - let r932 = S (T T_END) :: r931 in - let r933 = R 313 :: r932 in - let r934 = R 69 :: r933 in - let r935 = [R 823] in - let r936 = Sub (r1) :: r935 in - let r937 = S (T T_EQUAL) :: r936 in - let r938 = S (T T_LIDENT) :: r937 in - let r939 = R 397 :: r938 in - let r940 = R 296 :: r939 in - let r941 = [R 55] in - let r942 = R 302 :: r941 in - let r943 = [R 824] in - let r944 = Sub (r1) :: r943 in + let r863 = Sub (r3) :: r862 in + let r864 = [R 214] in + let r865 = [R 215] in + let r866 = Sub (r176) :: r865 in + let r867 = R 374 :: r866 in + let r868 = [R 767] in + let r869 = S (T T_RBRACE) :: r868 in + let r870 = Sub (r3) :: r869 in + let r871 = [R 212] in + let r872 = [R 213] in + let r873 = Sub (r176) :: r872 in + let r874 = R 374 :: r873 in + let r875 = [R 770] in + let r876 = S (T T_RPAREN) :: r875 in + let r877 = Sub (r554) :: r876 in + let r878 = S (T T_LPAREN) :: r877 in + let r879 = [R 218] in + let r880 = [R 219] in + let r881 = Sub (r176) :: r880 in + let r882 = R 374 :: r881 in + let r883 = [R 774] in + let r884 = S (T T_RBRACKET) :: r883 in + let r885 = Sub (r554) :: r884 in + let r886 = [R 226] in + let r887 = [R 227] in + let r888 = Sub (r176) :: r887 in + let r889 = R 374 :: r888 in + let r890 = [R 772] in + let r891 = S (T T_RBRACE) :: r890 in + let r892 = Sub (r554) :: r891 in + let r893 = [R 222] in + let r894 = [R 223] in + let r895 = Sub (r176) :: r894 in + let r896 = R 374 :: r895 in + let r897 = [R 208] in + let r898 = [R 209] in + let r899 = Sub (r176) :: r898 in + let r900 = R 374 :: r899 in + let r901 = [R 647] in + let r902 = Sub (r176) :: r901 in + let r903 = R 374 :: r902 in + let r904 = [R 149] in + let r905 = Sub (r176) :: r904 in + let r906 = R 374 :: r905 in + let r907 = [R 146] in + let r908 = [R 147] in + let r909 = Sub (r176) :: r908 in + let r910 = R 374 :: r909 in + let r911 = [R 144] in + let r912 = [R 145] in + let r913 = Sub (r176) :: r912 in + let r914 = R 374 :: r913 in + let r915 = [R 654] in + let r916 = [R 655] in + let r917 = S (T T_RPAREN) :: r916 in + let r918 = Sub (r187) :: r917 in + let r919 = [R 653] in + let r920 = [R 652] in + let r921 = Sub (r176) :: r920 in + let r922 = R 374 :: r921 in + let r923 = [R 361] in + let r924 = Sub (r3) :: r923 in + let r925 = [R 363] in + let r926 = [R 793] in + let r927 = [R 805] in + let r928 = [R 804] in + let r929 = [R 808] in + let r930 = [R 807] in + let r931 = S (T T_LIDENT) :: r559 in + let r932 = [R 794] in + let r933 = S (T T_GREATERRBRACE) :: r932 in + let r934 = [R 801] in + let r935 = S (T T_RBRACE) :: r934 in + let r936 = [R 623] in + let r937 = Sub (r564) :: r936 in + let r938 = [R 777] in + let r939 = [R 549] in + let r940 = Sub (r176) :: r939 in + let r941 = R 374 :: r940 in + let r942 = [R 790] in + let r943 = [R 442] in + let r944 = S (N N_module_expr) :: r943 in let r945 = S (T T_EQUAL) :: r944 in - let r946 = S (T T_LIDENT) :: r945 in - let r947 = R 397 :: r946 in - let r948 = [R 826] in - let r949 = Sub (r1) :: r948 in - let r950 = [R 822] in - let r951 = Sub (r87) :: r950 in - let r952 = S (T T_COLON) :: r951 in - let r953 = [R 825] in - let r954 = Sub (r1) :: r953 in - let r955 = [R 340] in - let r956 = Sub (r382) :: r955 in - let r957 = S (T T_LIDENT) :: r956 in - let r958 = R 532 :: r957 in - let r959 = R 296 :: r958 in - let r960 = [R 56] in - let r961 = R 302 :: r960 in - let r962 = [R 341] in - let r963 = Sub (r382) :: r962 in - let r964 = S (T T_LIDENT) :: r963 in - let r965 = R 532 :: r964 in - let r966 = [R 343] in - let r967 = Sub (r1) :: r966 in - let r968 = S (T T_EQUAL) :: r967 in - let r969 = [R 345] in - let r970 = Sub (r1) :: r969 in - let r971 = S (T T_EQUAL) :: r970 in - let r972 = Sub (r87) :: r971 in - let r973 = S (T T_DOT) :: r972 in - let r974 = [R 756] in - let r975 = [R 197] in - let r976 = Sub (r1) :: r975 in - let r977 = [R 339] in - let r978 = Sub (r89) :: r977 in - let r979 = S (T T_COLON) :: r978 in - let r980 = [R 342] in - let r981 = Sub (r1) :: r980 in - let r982 = S (T T_EQUAL) :: r981 in - let r983 = [R 344] in - let r984 = Sub (r1) :: r983 in - let r985 = S (T T_EQUAL) :: r984 in - let r986 = Sub (r87) :: r985 in - let r987 = S (T T_DOT) :: r986 in - let r988 = [R 58] in - let r989 = R 302 :: r988 in - let r990 = Sub (r1) :: r989 in - let r991 = [R 53] in - let r992 = R 302 :: r991 in - let r993 = R 464 :: r992 in - let r994 = Sub (r919) :: r993 in - let r995 = [R 54] in - let r996 = R 302 :: r995 in - let r997 = R 464 :: r996 in - let r998 = Sub (r919) :: r997 in - let r999 = [R 85] in - let r1000 = S (T T_RPAREN) :: r999 in - let r1001 = [R 48] in - let r1002 = Sub (r919) :: r1001 in - let r1003 = S (T T_IN) :: r1002 in - let r1004 = Sub (r474) :: r1003 in - let r1005 = R 296 :: r1004 in - let r1006 = [R 276] in - let r1007 = R 302 :: r1006 in - let r1008 = Sub (r236) :: r1007 in - let r1009 = R 539 :: r1008 in - let r1010 = R 296 :: r1009 in - let r1011 = [R 49] in - let r1012 = Sub (r919) :: r1011 in - let r1013 = S (T T_IN) :: r1012 in - let r1014 = Sub (r474) :: r1013 in - let r1015 = [R 87] in - let r1016 = Sub (r212) :: r1015 in - let r1017 = S (T T_RBRACKET) :: r1016 in - let r1018 = [R 64] in - let r1019 = Sub (r919) :: r1018 in - let r1020 = S (T T_MINUSGREATER) :: r1019 in - let r1021 = Sub (r498) :: r1020 in - let r1022 = [R 46] in - let r1023 = Sub (r1021) :: r1022 in - let r1024 = [R 47] in - let r1025 = Sub (r919) :: r1024 in - let r1026 = [R 252] in - let r1027 = [R 275] in - let r1028 = R 302 :: r1027 in - let r1029 = Sub (r236) :: r1028 in - let r1030 = [R 88] in - let r1031 = S (T T_RPAREN) :: r1030 in - let r1032 = [R 465] in - let r1033 = [R 57] in - let r1034 = R 302 :: r1033 in - let r1035 = Sub (r868) :: r1034 in - let r1036 = [R 59] in - let r1037 = [R 314] in - let r1038 = [R 62] in - let r1039 = Sub (r919) :: r1038 in - let r1040 = S (T T_EQUAL) :: r1039 in - let r1041 = [R 63] in - let r1042 = [R 287] in - let r1043 = R 286 :: r1042 in - let r1044 = R 302 :: r1043 in - let r1045 = Sub (r922) :: r1044 in - let r1046 = S (T T_LIDENT) :: r1045 in - let r1047 = R 194 :: r1046 in - let r1048 = R 828 :: r1047 in - let r1049 = [R 310] in - let r1050 = [R 762] in - let r1051 = [R 766] in - let r1052 = [R 759] in - let r1053 = R 307 :: r1052 in - let r1054 = [R 644] in - let r1055 = S (T T_RBRACKET) :: r1054 in - let r1056 = Sub (r1) :: r1055 in - let r1057 = [R 643] in - let r1058 = S (T T_RBRACE) :: r1057 in - let r1059 = Sub (r1) :: r1058 in - let r1060 = [R 646] in - let r1061 = S (T T_RPAREN) :: r1060 in - let r1062 = Sub (r458) :: r1061 in - let r1063 = S (T T_LPAREN) :: r1062 in - let r1064 = [R 650] in - let r1065 = S (T T_RBRACKET) :: r1064 in - let r1066 = Sub (r458) :: r1065 in - let r1067 = [R 648] in - let r1068 = S (T T_RBRACE) :: r1067 in - let r1069 = Sub (r458) :: r1068 in - let r1070 = [R 180] in - let r1071 = [R 649] in - let r1072 = S (T T_RBRACKET) :: r1071 in - let r1073 = Sub (r458) :: r1072 in - let r1074 = [R 184] in - let r1075 = [R 647] in - let r1076 = S (T T_RBRACE) :: r1075 in - let r1077 = Sub (r458) :: r1076 in - let r1078 = [R 182] in - let r1079 = [R 177] in - let r1080 = [R 179] in - let r1081 = [R 178] in - let r1082 = [R 181] in - let r1083 = [R 185] in - let r1084 = [R 183] in - let r1085 = [R 176] in - let r1086 = [R 283] in - let r1087 = Sub (r1) :: r1086 in - let r1088 = [R 285] in - let r1089 = [R 667] in - let r1090 = [R 679] in - let r1091 = [R 678] in - let r1092 = [R 682] in - let r1093 = [R 681] in - let r1094 = S (T T_LIDENT) :: r463 in - let r1095 = [R 668] in - let r1096 = S (T T_GREATERRBRACE) :: r1095 in - let r1097 = [R 675] in - let r1098 = S (T T_RBRACE) :: r1097 in - let r1099 = [R 542] in - let r1100 = Sub (r468) :: r1099 in - let r1101 = [R 128] in - let r1102 = S (T T_DONE) :: r1101 in - let r1103 = Sub (r1) :: r1102 in - let r1104 = S (T T_DO) :: r1103 in - let r1105 = Sub (r1) :: r1104 in - let r1106 = Sub (r518) :: r1105 in - let r1107 = [R 201] in - let r1108 = Sub (r501) :: r1107 in - let r1109 = S (T T_RPAREN) :: r1108 in - let r1110 = [R 199] in - let r1111 = Sub (r1) :: r1110 in - let r1112 = S (T T_MINUSGREATER) :: r1111 in - let r1113 = [R 200] in - let r1114 = [R 571] in - let r1115 = [R 140] in - let r1116 = [R 651] in - let r1117 = [R 664] in - let r1118 = [R 131] in - let r1119 = Sub (r1) :: r1118 in - let r1120 = S (T T_IN) :: r1119 in - let r1121 = Sub (r629) :: r1120 in - let r1122 = Sub (r63) :: r1121 in - let r1123 = R 296 :: r1122 in - let r1124 = [R 132] in - let r1125 = Sub (r1) :: r1124 in - let r1126 = S (T T_IN) :: r1125 in - let r1127 = R 296 :: r1126 in - let r1128 = R 209 :: r1127 in - let r1129 = Sub (r130) :: r1128 in - let r1130 = R 296 :: r1129 in - let r1131 = [R 270] in - let r1132 = Sub (r1) :: r1131 in - let r1133 = S (T T_EQUAL) :: r1132 in - let r1134 = Sub (r87) :: r1133 in - let r1135 = S (T T_DOT) :: r1134 in - let r1136 = [R 269] in - let r1137 = Sub (r1) :: r1136 in - let r1138 = S (T T_EQUAL) :: r1137 in - let r1139 = Sub (r87) :: r1138 in - let r1140 = [R 268] in - let r1141 = Sub (r1) :: r1140 in - let r1142 = [R 676] in - let r1143 = [R 654] in - let r1144 = S (T T_RPAREN) :: r1143 in - let r1145 = S (N N_module_expr) :: r1144 in - let r1146 = R 296 :: r1145 in - let r1147 = [R 655] in - let r1148 = S (T T_RPAREN) :: r1147 in - let r1149 = [R 641] in - let r1150 = [R 485] in - let r1151 = S (T T_RPAREN) :: r1150 in - let r1152 = [R 483] in - let r1153 = S (T T_RPAREN) :: r1152 in - let r1154 = [R 484] in + let r946 = [R 137] in + let r947 = Sub (r3) :: r946 in + let r948 = S (T T_IN) :: r947 in + let r949 = Sub (r945) :: r948 in + let r950 = Sub (r294) :: r949 in + let r951 = R 374 :: r950 in + let r952 = [R 443] in + let r953 = S (N N_module_expr) :: r952 in + let r954 = S (T T_EQUAL) :: r953 in + let r955 = [R 444] in + let r956 = [R 138] in + let r957 = Sub (r3) :: r956 in + let r958 = S (T T_IN) :: r957 in + let r959 = R 374 :: r958 in + let r960 = R 245 :: r959 in + let r961 = Sub (r90) :: r960 in + let r962 = R 374 :: r961 in + let r963 = [R 103] in + let r964 = Sub (r26) :: r963 in + let r965 = [R 246] in + let r966 = [R 279] in + let r967 = R 374 :: r966 in + let r968 = Sub (r143) :: r967 in + let r969 = S (T T_COLON) :: r968 in + let r970 = S (T T_LIDENT) :: r969 in + let r971 = R 472 :: r970 in + let r972 = [R 281] in + let r973 = Sub (r971) :: r972 in + let r974 = [R 105] in + let r975 = S (T T_RBRACE) :: r974 in + let r976 = [R 280] in + let r977 = R 374 :: r976 in + let r978 = S (T T_SEMI) :: r977 in + let r979 = R 374 :: r978 in + let r980 = Sub (r143) :: r979 in + let r981 = S (T T_COLON) :: r980 in + let r982 = [R 610] in + let r983 = Sub (r32) :: r982 in + let r984 = [R 104] in + let r985 = Sub (r26) :: r984 in + let r986 = [R 249] in + let r987 = [R 250] in + let r988 = Sub (r26) :: r987 in + let r989 = [R 248] in + let r990 = Sub (r26) :: r989 in + let r991 = [R 247] in + let r992 = Sub (r26) :: r991 in + let r993 = [R 207] in + let r994 = Sub (r176) :: r993 in + let r995 = R 374 :: r994 in + let r996 = [R 802] in + let r997 = [R 780] in + let r998 = S (T T_RPAREN) :: r997 in + let r999 = S (N N_module_expr) :: r998 in + let r1000 = R 374 :: r999 in + let r1001 = [R 781] in + let r1002 = S (T T_RPAREN) :: r1001 in + let r1003 = [R 765] in + let r1004 = [R 563] in + let r1005 = S (T T_RPAREN) :: r1004 in + let r1006 = Sub (r176) :: r1005 in + let r1007 = R 374 :: r1006 in + let r1008 = [R 569] in + let r1009 = S (T T_RPAREN) :: r1008 in + let r1010 = [R 565] in + let r1011 = S (T T_RPAREN) :: r1010 in + let r1012 = [R 567] in + let r1013 = S (T T_RPAREN) :: r1012 in + let r1014 = [R 568] in + let r1015 = S (T T_RPAREN) :: r1014 in + let r1016 = [R 564] in + let r1017 = S (T T_RPAREN) :: r1016 in + let r1018 = [R 566] in + let r1019 = S (T T_RPAREN) :: r1018 in + let r1020 = [R 895] in + let r1021 = R 380 :: r1020 in + let r1022 = Sub (r945) :: r1021 in + let r1023 = Sub (r294) :: r1022 in + let r1024 = R 374 :: r1023 in + let r1025 = [R 469] in + let r1026 = R 380 :: r1025 in + let r1027 = R 550 :: r1026 in + let r1028 = Sub (r59) :: r1027 in + let r1029 = R 374 :: r1028 in + let r1030 = R 124 :: r1029 in + let r1031 = [R 551] in + let r1032 = [R 896] in + let r1033 = R 370 :: r1032 in + let r1034 = R 380 :: r1033 in + let r1035 = Sub (r945) :: r1034 in + let r1036 = [R 371] in + let r1037 = R 370 :: r1036 in + let r1038 = R 380 :: r1037 in + let r1039 = Sub (r945) :: r1038 in + let r1040 = Sub (r294) :: r1039 in + let r1041 = [R 263] in + let r1042 = S (T T_RBRACKET) :: r1041 in + let r1043 = Sub (r17) :: r1042 in + let r1044 = [R 605] in + let r1045 = [R 606] in + let r1046 = [R 131] in + let r1047 = S (T T_RBRACKET) :: r1046 in + let r1048 = Sub (r19) :: r1047 in + let r1049 = [R 901] in + let r1050 = R 380 :: r1049 in + let r1051 = S (N N_module_expr) :: r1050 in + let r1052 = R 374 :: r1051 in + let r1053 = [R 482] in + let r1054 = S (T T_STRING) :: r1053 in + let r1055 = [R 612] in + let r1056 = R 380 :: r1055 in + let r1057 = Sub (r1054) :: r1056 in + let r1058 = S (T T_EQUAL) :: r1057 in + let r1059 = Sub (r36) :: r1058 in + let r1060 = S (T T_COLON) :: r1059 in + let r1061 = Sub (r24) :: r1060 in + let r1062 = R 374 :: r1061 in + let r1063 = [R 608] in + let r1064 = Sub (r34) :: r1063 in + let r1065 = Sub (r88) :: r407 in + let r1066 = [R 881] in + let r1067 = R 380 :: r1066 in + let r1068 = R 374 :: r1067 in + let r1069 = Sub (r1065) :: r1068 in + let r1070 = S (T T_EQUAL) :: r1069 in + let r1071 = Sub (r90) :: r1070 in + let r1072 = R 374 :: r1071 in + let r1073 = [R 734] in + let r1074 = R 380 :: r1073 in + let r1075 = R 374 :: r1074 in + let r1076 = R 245 :: r1075 in + let r1077 = Sub (r90) :: r1076 in + let r1078 = R 374 :: r1077 in + let r1079 = R 124 :: r1078 in + let r1080 = S (T T_COLONCOLON) :: r445 in + let r1081 = [R 603] in + let r1082 = [R 383] in + let r1083 = [R 502] in + let r1084 = R 380 :: r1083 in + let r1085 = Sub (r221) :: r1084 in + let r1086 = R 374 :: r1085 in + let r1087 = [R 503] in + let r1088 = R 380 :: r1087 in + let r1089 = Sub (r221) :: r1088 in + let r1090 = R 374 :: r1089 in + let r1091 = [R 445] in + let r1092 = S (N N_module_type) :: r1091 in + let r1093 = S (T T_COLON) :: r1092 in + let r1094 = [R 745] in + let r1095 = R 380 :: r1094 in + let r1096 = Sub (r1093) :: r1095 in + let r1097 = Sub (r294) :: r1096 in + let r1098 = R 374 :: r1097 in + let r1099 = [R 470] in + let r1100 = R 380 :: r1099 in + let r1101 = S (N N_module_type) :: r1100 in + let r1102 = S (T T_COLONEQUAL) :: r1101 in + let r1103 = Sub (r59) :: r1102 in + let r1104 = R 374 :: r1103 in + let r1105 = [R 458] in + let r1106 = R 380 :: r1105 in + let r1107 = [R 748] in + let r1108 = R 372 :: r1107 in + let r1109 = R 380 :: r1108 in + let r1110 = S (N N_module_type) :: r1109 in + let r1111 = S (T T_COLON) :: r1110 in + let r1112 = [R 373] in + let r1113 = R 372 :: r1112 in + let r1114 = R 380 :: r1113 in + let r1115 = S (N N_module_type) :: r1114 in + let r1116 = S (T T_COLON) :: r1115 in + let r1117 = Sub (r294) :: r1116 in + let r1118 = [R 746] in + let r1119 = R 380 :: r1118 in + let r1120 = [R 446] in + let r1121 = [R 752] in + let r1122 = R 380 :: r1121 in + let r1123 = S (N N_module_type) :: r1122 in + let r1124 = R 374 :: r1123 in + let r1125 = S (T T_QUOTED_STRING_EXPR) :: r57 in + let r1126 = [R 71] in + let r1127 = Sub (r1125) :: r1126 in + let r1128 = [R 81] in + let r1129 = Sub (r1127) :: r1128 in + let r1130 = [R 753] in + let r1131 = R 366 :: r1130 in + let r1132 = R 380 :: r1131 in + let r1133 = Sub (r1129) :: r1132 in + let r1134 = S (T T_COLON) :: r1133 in + let r1135 = S (T T_LIDENT) :: r1134 in + let r1136 = R 132 :: r1135 in + let r1137 = R 953 :: r1136 in + let r1138 = R 374 :: r1137 in + let r1139 = [R 85] in + let r1140 = R 368 :: r1139 in + let r1141 = R 380 :: r1140 in + let r1142 = Sub (r1127) :: r1141 in + let r1143 = S (T T_EQUAL) :: r1142 in + let r1144 = S (T T_LIDENT) :: r1143 in + let r1145 = R 132 :: r1144 in + let r1146 = R 953 :: r1145 in + let r1147 = R 374 :: r1146 in + let r1148 = [R 133] in + let r1149 = S (T T_RBRACKET) :: r1148 in + let r1150 = [R 72] in + let r1151 = S (T T_END) :: r1150 in + let r1152 = R 389 :: r1151 in + let r1153 = R 62 :: r1152 in + let r1154 = [R 61] in let r1155 = S (T T_RPAREN) :: r1154 in - let r1156 = [R 309] in - let r1157 = R 307 :: r1156 in - let r1158 = [R 334] in - let r1159 = [R 29] in - let r1160 = [R 28] in - let r1161 = Sub (r126) :: r1160 in - let r1162 = [R 33] in - let r1163 = [R 584] in - let r1164 = [R 22] in - let r1165 = [R 585] in - let r1166 = [R 420] in - let r1167 = S (T T_RBRACE) :: r1166 in - let r1168 = [R 191] in - let r1169 = R 296 :: r1168 in - let r1170 = [R 192] in - let r1171 = R 296 :: r1170 in - let r1172 = [R 68] in - let r1173 = S (T T_RPAREN) :: r1172 in - let r1174 = [R 124] in - let r1175 = [R 126] in - let r1176 = [R 125] in - let r1177 = [R 223] in - let r1178 = [R 226] in - let r1179 = [R 351] in - let r1180 = [R 354] in - let r1181 = S (T T_RPAREN) :: r1180 in - let r1182 = S (T T_COLONCOLON) :: r1181 in - let r1183 = S (T T_LPAREN) :: r1182 in - let r1184 = [R 486] in - let r1185 = [R 487] in - let r1186 = [R 488] in - let r1187 = [R 489] in - let r1188 = [R 490] in - let r1189 = [R 491] in - let r1190 = [R 492] in - let r1191 = [R 493] in - let r1192 = [R 494] in - let r1193 = [R 495] in - let r1194 = [R 496] in - let r1195 = [R 781] in - let r1196 = [R 790] in - let r1197 = [R 316] in - let r1198 = [R 788] in - let r1199 = S (T T_SEMISEMI) :: r1198 in - let r1200 = [R 789] in - let r1201 = [R 318] in - let r1202 = [R 321] in - let r1203 = [R 320] in - let r1204 = [R 319] in - let r1205 = R 317 :: r1204 in - let r1206 = [R 817] in - let r1207 = S (T T_EOF) :: r1206 in - let r1208 = R 317 :: r1207 in - let r1209 = [R 816] in + let r1156 = [R 64] in + let r1157 = R 380 :: r1156 in + let r1158 = Sub (r34) :: r1157 in + let r1159 = S (T T_COLON) :: r1158 in + let r1160 = S (T T_LIDENT) :: r1159 in + let r1161 = R 474 :: r1160 in + let r1162 = [R 65] in + let r1163 = R 380 :: r1162 in + let r1164 = Sub (r36) :: r1163 in + let r1165 = S (T T_COLON) :: r1164 in + let r1166 = S (T T_LIDENT) :: r1165 in + let r1167 = R 615 :: r1166 in + let r1168 = [R 63] in + let r1169 = R 380 :: r1168 in + let r1170 = Sub (r1127) :: r1169 in + let r1171 = [R 74] in + let r1172 = Sub (r1127) :: r1171 in + let r1173 = S (T T_IN) :: r1172 in + let r1174 = Sub (r570) :: r1173 in + let r1175 = R 374 :: r1174 in + let r1176 = [R 75] in + let r1177 = Sub (r1127) :: r1176 in + let r1178 = S (T T_IN) :: r1177 in + let r1179 = Sub (r570) :: r1178 in + let r1180 = [R 703] in + let r1181 = Sub (r34) :: r1180 in + let r1182 = [R 70] in + let r1183 = Sub (r214) :: r1182 in + let r1184 = S (T T_RBRACKET) :: r1183 in + let r1185 = Sub (r1181) :: r1184 in + let r1186 = [R 704] in + let r1187 = [R 102] in + let r1188 = Sub (r34) :: r1187 in + let r1189 = S (T T_EQUAL) :: r1188 in + let r1190 = Sub (r34) :: r1189 in + let r1191 = [R 66] in + let r1192 = R 380 :: r1191 in + let r1193 = Sub (r1190) :: r1192 in + let r1194 = [R 67] in + let r1195 = [R 390] in + let r1196 = [R 369] in + let r1197 = R 368 :: r1196 in + let r1198 = R 380 :: r1197 in + let r1199 = Sub (r1127) :: r1198 in + let r1200 = S (T T_EQUAL) :: r1199 in + let r1201 = S (T T_LIDENT) :: r1200 in + let r1202 = R 132 :: r1201 in + let r1203 = R 953 :: r1202 in + let r1204 = [R 83] in + let r1205 = Sub (r1129) :: r1204 in + let r1206 = S (T T_MINUSGREATER) :: r1205 in + let r1207 = Sub (r28) :: r1206 in + let r1208 = [R 84] in + let r1209 = Sub (r1129) :: r1208 in + let r1210 = [R 82] in + let r1211 = Sub (r1129) :: r1210 in + let r1212 = S (T T_MINUSGREATER) :: r1211 in + let r1213 = [R 367] in + let r1214 = R 366 :: r1213 in + let r1215 = R 380 :: r1214 in + let r1216 = Sub (r1129) :: r1215 in + let r1217 = S (T T_COLON) :: r1216 in + let r1218 = S (T T_LIDENT) :: r1217 in + let r1219 = R 132 :: r1218 in + let r1220 = R 953 :: r1219 in + let r1221 = [R 384] in + let r1222 = [R 736] in + let r1223 = [R 740] in + let r1224 = [R 377] in + let r1225 = R 376 :: r1224 in + let r1226 = R 380 :: r1225 in + let r1227 = R 680 :: r1226 in + let r1228 = R 922 :: r1227 in + let r1229 = S (T T_LIDENT) :: r1228 in + let r1230 = R 926 :: r1229 in + let r1231 = [R 741] in + let r1232 = [R 379] in + let r1233 = R 378 :: r1232 in + let r1234 = R 380 :: r1233 in + let r1235 = R 680 :: r1234 in + let r1236 = Sub (r129) :: r1235 in + let r1237 = S (T T_COLONEQUAL) :: r1236 in + let r1238 = S (T T_LIDENT) :: r1237 in + let r1239 = R 926 :: r1238 in + let r1240 = [R 494] in + let r1241 = S (T T_RBRACE) :: r1240 in + let r1242 = [R 251] in + let r1243 = R 374 :: r1242 in + let r1244 = R 245 :: r1243 in + let r1245 = Sub (r90) :: r1244 in + let r1246 = [R 492] in + let r1247 = [R 493] in + let r1248 = [R 497] in + let r1249 = S (T T_RBRACE) :: r1248 in + let r1250 = [R 496] in + let r1251 = S (T T_RBRACE) :: r1250 in + let r1252 = [R 43] in + let r1253 = Sub (r1125) :: r1252 in + let r1254 = [R 52] in + let r1255 = Sub (r1253) :: r1254 in + let r1256 = S (T T_EQUAL) :: r1255 in + let r1257 = [R 899] in + let r1258 = R 364 :: r1257 in + let r1259 = R 380 :: r1258 in + let r1260 = Sub (r1256) :: r1259 in + let r1261 = S (T T_LIDENT) :: r1260 in + let r1262 = R 132 :: r1261 in + let r1263 = R 953 :: r1262 in + let r1264 = R 374 :: r1263 in + let r1265 = [R 80] in + let r1266 = S (T T_END) :: r1265 in + let r1267 = R 391 :: r1266 in + let r1268 = R 60 :: r1267 in + let r1269 = [R 948] in + let r1270 = Sub (r3) :: r1269 in + let r1271 = S (T T_EQUAL) :: r1270 in + let r1272 = S (T T_LIDENT) :: r1271 in + let r1273 = R 472 :: r1272 in + let r1274 = R 374 :: r1273 in + let r1275 = [R 46] in + let r1276 = R 380 :: r1275 in + let r1277 = [R 949] in + let r1278 = Sub (r3) :: r1277 in + let r1279 = S (T T_EQUAL) :: r1278 in + let r1280 = S (T T_LIDENT) :: r1279 in + let r1281 = R 472 :: r1280 in + let r1282 = [R 951] in + let r1283 = Sub (r3) :: r1282 in + let r1284 = [R 947] in + let r1285 = Sub (r34) :: r1284 in + let r1286 = S (T T_COLON) :: r1285 in + let r1287 = [R 950] in + let r1288 = Sub (r3) :: r1287 in + let r1289 = S (T T_EQUAL) :: r808 in + let r1290 = [R 415] in + let r1291 = Sub (r1289) :: r1290 in + let r1292 = S (T T_LIDENT) :: r1291 in + let r1293 = R 613 :: r1292 in + let r1294 = R 374 :: r1293 in + let r1295 = [R 47] in + let r1296 = R 380 :: r1295 in + let r1297 = [R 416] in + let r1298 = Sub (r1289) :: r1297 in + let r1299 = S (T T_LIDENT) :: r1298 in + let r1300 = R 613 :: r1299 in + let r1301 = [R 418] in + let r1302 = Sub (r3) :: r1301 in + let r1303 = S (T T_EQUAL) :: r1302 in + let r1304 = [R 420] in + let r1305 = Sub (r3) :: r1304 in + let r1306 = S (T T_EQUAL) :: r1305 in + let r1307 = Sub (r34) :: r1306 in + let r1308 = S (T T_DOT) :: r1307 in + let r1309 = [R 414] in + let r1310 = Sub (r36) :: r1309 in + let r1311 = S (T T_COLON) :: r1310 in + let r1312 = [R 417] in + let r1313 = Sub (r3) :: r1312 in + let r1314 = S (T T_EQUAL) :: r1313 in + let r1315 = [R 419] in + let r1316 = Sub (r3) :: r1315 in + let r1317 = S (T T_EQUAL) :: r1316 in + let r1318 = Sub (r34) :: r1317 in + let r1319 = S (T T_DOT) :: r1318 in + let r1320 = [R 49] in + let r1321 = R 380 :: r1320 in + let r1322 = Sub (r3) :: r1321 in + let r1323 = [R 44] in + let r1324 = R 380 :: r1323 in + let r1325 = R 541 :: r1324 in + let r1326 = Sub (r1253) :: r1325 in + let r1327 = [R 45] in + let r1328 = R 380 :: r1327 in + let r1329 = R 541 :: r1328 in + let r1330 = Sub (r1253) :: r1329 in + let r1331 = [R 76] in + let r1332 = S (T T_RPAREN) :: r1331 in + let r1333 = [R 39] in + let r1334 = Sub (r1253) :: r1333 in + let r1335 = S (T T_IN) :: r1334 in + let r1336 = Sub (r570) :: r1335 in + let r1337 = R 374 :: r1336 in + let r1338 = [R 354] in + let r1339 = R 380 :: r1338 in + let r1340 = Sub (r491) :: r1339 in + let r1341 = R 620 :: r1340 in + let r1342 = R 374 :: r1341 in + let r1343 = [R 40] in + let r1344 = Sub (r1253) :: r1343 in + let r1345 = S (T T_IN) :: r1344 in + let r1346 = Sub (r570) :: r1345 in + let r1347 = [R 78] in + let r1348 = Sub (r325) :: r1347 in + let r1349 = S (T T_RBRACKET) :: r1348 in + let r1350 = [R 55] in + let r1351 = Sub (r1253) :: r1350 in + let r1352 = S (T T_MINUSGREATER) :: r1351 in + let r1353 = Sub (r613) :: r1352 in + let r1354 = [R 37] in + let r1355 = Sub (r1353) :: r1354 in + let r1356 = [R 38] in + let r1357 = Sub (r1253) :: r1356 in + let r1358 = [R 353] in + let r1359 = R 380 :: r1358 in + let r1360 = Sub (r491) :: r1359 in + let r1361 = [R 79] in + let r1362 = S (T T_RPAREN) :: r1361 in + let r1363 = [R 542] in + let r1364 = [R 48] in + let r1365 = R 380 :: r1364 in + let r1366 = Sub (r1190) :: r1365 in + let r1367 = [R 50] in + let r1368 = [R 392] in + let r1369 = [R 53] in + let r1370 = Sub (r1253) :: r1369 in + let r1371 = S (T T_EQUAL) :: r1370 in + let r1372 = [R 54] in + let r1373 = [R 365] in + let r1374 = R 364 :: r1373 in + let r1375 = R 380 :: r1374 in + let r1376 = Sub (r1256) :: r1375 in + let r1377 = S (T T_LIDENT) :: r1376 in + let r1378 = R 132 :: r1377 in + let r1379 = R 953 :: r1378 in + let r1380 = [R 388] in + let r1381 = [R 887] in + let r1382 = [R 891] in + let r1383 = [R 885] in + let r1384 = R 385 :: r1383 in + let r1385 = [R 387] in + let r1386 = R 385 :: r1385 in + let r1387 = [R 318] in + let r1388 = [R 315] in + let r1389 = [R 316] in + let r1390 = S (T T_RPAREN) :: r1389 in + let r1391 = Sub (r34) :: r1390 in + let r1392 = S (T T_COLON) :: r1391 in + let r1393 = [R 314] in + let r1394 = [R 59] in + let r1395 = S (T T_RPAREN) :: r1394 in + let r1396 = [R 663] in + let r1397 = [R 662] in + let r1398 = Sub (r176) :: r1397 in + let r1399 = R 374 :: r1398 in + let r1400 = [R 659] in + let r1401 = [R 660] in + let r1402 = S (T T_RPAREN) :: r1401 in + let r1403 = Sub (r187) :: r1402 in + let r1404 = [R 658] in + let r1405 = [R 657] in + let r1406 = Sub (r176) :: r1405 in + let r1407 = R 374 :: r1406 in + let r1408 = [R 128] in + let r1409 = R 374 :: r1408 in + let r1410 = [R 129] in + let r1411 = R 374 :: r1410 in + let r1412 = [R 409] in + let r1413 = [R 498] in + let r1414 = [R 238] in + let r1415 = Sub (r30) :: r1414 in + let r1416 = [R 240] in + let r1417 = [R 25] in + let r1418 = Sub (r86) :: r1417 in + let r1419 = [R 28] in + let r1420 = [R 713] in + let r1421 = [R 714] in + let r1422 = [R 495] in + let r1423 = S (T T_RBRACE) :: r1422 in + let r1424 = [R 254] in + let r1425 = R 380 :: r1424 in + let r1426 = R 680 :: r1425 in + let r1427 = [R 253] in + let r1428 = R 380 :: r1427 in + let r1429 = R 680 :: r1428 in + let r1430 = [R 259] in + let r1431 = [R 262] in + let r1432 = [R 426] in + let r1433 = [R 429] in + let r1434 = S (T T_RPAREN) :: r1433 in + let r1435 = S (T T_COLONCOLON) :: r1434 in + let r1436 = S (T T_LPAREN) :: r1435 in + let r1437 = [R 570] in + let r1438 = [R 571] in + let r1439 = [R 572] in + let r1440 = [R 573] in + let r1441 = [R 574] in + let r1442 = [R 575] in + let r1443 = [R 576] in + let r1444 = [R 577] in + let r1445 = [R 578] in + let r1446 = [R 579] in + let r1447 = [R 580] in + let r1448 = [R 906] in + let r1449 = [R 915] in + let r1450 = [R 394] in + let r1451 = [R 913] in + let r1452 = S (T T_SEMISEMI) :: r1451 in + let r1453 = [R 914] in + let r1454 = [R 396] in + let r1455 = [R 399] in + let r1456 = [R 398] in + let r1457 = [R 397] in + let r1458 = R 395 :: r1457 in + let r1459 = [R 942] in + let r1460 = S (T T_EOF) :: r1459 in + let r1461 = R 395 :: r1460 in + let r1462 = [R 941] in function - | 0 | 1791 | 1795 | 1813 | 1817 | 1821 | 1825 | 1829 | 1833 | 1837 | 1841 | 1845 | 1849 | 1854 | 1874 -> Nothing - | 1790 -> One ([R 0]) - | 1794 -> One ([R 1]) - | 1800 -> One ([R 2]) - | 1814 -> One ([R 3]) - | 1818 -> One ([R 4]) - | 1824 -> One ([R 5]) - | 1826 -> One ([R 6]) - | 1830 -> One ([R 7]) - | 1834 -> One ([R 8]) - | 1838 -> One ([R 9]) - | 1842 -> One ([R 10]) - | 1848 -> One ([R 11]) - | 1852 -> One ([R 12]) - | 1864 -> One ([R 13]) - | 1884 -> One ([R 14]) - | 214 -> One ([R 15]) - | 213 -> One ([R 16]) - | 1808 -> One ([R 20]) - | 1810 -> One ([R 21]) - | 284 -> One ([R 26]) - | 294 -> One ([R 27]) - | 290 -> One ([R 41]) - | 1300 -> One ([R 45]) - | 1309 -> One ([R 50]) - | 1304 -> One ([R 51]) - | 1345 -> One ([R 60]) - | 1312 -> One ([R 65]) - | 1096 -> One ([R 77]) - | 1076 -> One ([R 78]) - | 1078 -> One ([R 82]) - | 1307 -> One ([R 86]) - | 352 -> One ([R 97]) - | 73 -> One ([R 98]) - | 350 -> One ([R 99]) - | 72 -> One ([R 103]) - | 200 | 842 -> One ([R 104]) - | 874 -> One ([R 107]) - | 908 -> One ([R 115]) - | 912 -> One ([R 116]) - | 324 -> One ([R 118]) - | 1529 -> One ([R 119]) - | 633 -> One ([R 130]) - | 1478 -> One ([R 146]) - | 656 -> One ([R 147]) - | 699 -> One ([R 148]) - | 659 -> One ([R 149]) - | 697 -> One ([R 186]) - | 1 -> One (R 187 :: r7) - | 61 -> One (R 187 :: r24) - | 66 -> One (R 187 :: r29) - | 69 -> One (R 187 :: r40) - | 76 -> One (R 187 :: r48) - | 96 -> One (R 187 :: r67) - | 107 -> One (R 187 :: r95) - | 215 -> One (R 187 :: r199) - | 216 -> One (R 187 :: r203) - | 222 -> One (R 187 :: r215) - | 237 -> One (R 187 :: r225) - | 240 -> One (R 187 :: r230) - | 248 -> One (R 187 :: r241) - | 344 -> One (R 187 :: r319) - | 367 -> One (R 187 :: r332) - | 464 -> One (R 187 :: r406) - | 567 -> One (R 187 :: r481) - | 570 -> One (R 187 :: r484) - | 573 -> One (R 187 :: r489) - | 576 -> One (R 187 :: r492) - | 582 -> One (R 187 :: r505) - | 590 -> One (R 187 :: r516) - | 595 -> One (R 187 :: r528) - | 610 -> One (R 187 :: r539) - | 624 -> One (R 187 :: r545) - | 778 -> One (R 187 :: r634) - | 817 -> One (R 187 :: r665) - | 822 -> One (R 187 :: r675) - | 964 -> One (R 187 :: r764) - | 965 -> One (R 187 :: r768) - | 974 -> One (R 187 :: r776) - | 1011 -> One (R 187 :: r802) - | 1020 -> One (R 187 :: r816) - | 1021 -> One (R 187 :: r825) - | 1184 -> One (R 187 :: r930) - | 1602 -> One (R 187 :: r1123) - | 1609 -> One (R 187 :: r1130) - | 1647 -> One (R 187 :: r1146) - | 478 -> One ([R 208]) - | 153 -> One ([R 221]) - | 131 -> One (R 224 :: r101) - | 135 -> One (R 224 :: r103) - | 212 -> One ([R 228]) - | 556 -> One ([R 231]) - | 564 -> One ([R 232]) - | 558 -> One ([R 234]) - | 676 -> One ([R 235]) - | 678 -> One ([R 238]) - | 671 -> One ([R 239]) - | 864 -> One ([R 246]) - | 865 -> One ([R 247]) - | 1303 -> One ([R 251]) - | 770 -> One ([R 265]) - | 1639 -> One ([R 267]) - | 1383 -> One ([R 274]) - | 1310 -> One ([R 277]) - | 447 -> One ([R 278]) - | 1619 -> One ([R 280]) - | 105 -> One (R 296 :: r75) - | 171 -> One (R 296 :: r122) - | 220 -> One (R 296 :: r208) - | 233 -> One (R 296 :: r220) - | 467 -> One (R 296 :: r410) - | 476 -> One (R 296 :: r422) - | 747 -> One (R 296 :: r611) - | 801 -> One (R 296 :: r654) - | 993 -> One (R 296 :: r795) - | 1032 -> One (R 296 :: r831) - | 1038 -> One (R 296 :: r839) - | 1049 -> One (R 296 :: r845) - | 1060 -> One (R 296 :: r848) - | 1064 -> One (R 296 :: r857) - | 1085 -> One (R 296 :: r871) - | 1101 -> One (R 296 :: r881) - | 1136 -> One (R 296 :: r898) - | 1158 -> One (R 296 :: r908) - | 1168 -> One (R 296 :: r917) - | 1191 -> One (R 296 :: r934) - | 1195 -> One (R 296 :: r947) - | 1223 -> One (R 296 :: r965) - | 1269 -> One (R 296 :: r990) - | 1273 -> One (R 296 :: r994) - | 1274 -> One (R 296 :: r998) - | 1285 -> One (R 296 :: r1014) - | 1293 -> One (R 296 :: r1023) - | 1337 -> One (R 296 :: r1035) - | 1357 -> One (R 296 :: r1048) - | 1690 -> One (R 296 :: r1158) - | 1157 -> One (R 298 :: r901) - | 1386 -> One (R 298 :: r1051) - | 1167 -> One (R 300 :: r909) - | 786 -> One (R 302 :: r642) - | 1094 -> One (R 302 :: r872) - | 1155 -> One (R 302 :: r900) - | 1343 -> One (R 302 :: r1036) - | 1384 -> One (R 302 :: r1050) - | 1391 -> One (R 302 :: r1053) - | 1682 -> One (R 302 :: r1157) - | 1869 -> One (R 302 :: r1199) - | 1880 -> One (R 302 :: r1205) - | 1885 -> One (R 302 :: r1208) - | 963 -> One (R 304 :: r760) - | 1147 -> One (R 304 :: r899) - | 211 -> One (R 307 :: r195) - | 1367 -> One (R 307 :: r1049) - | 1097 -> One (R 311 :: r873) - | 1346 -> One (R 313 :: r1037) - | 1867 -> One (R 315 :: r1197) - | 1875 -> One (R 317 :: r1201) - | 1876 -> One (R 317 :: r1202) - | 1877 -> One (R 317 :: r1203) - | 421 -> One ([R 323]) - | 425 -> One ([R 325]) - | 688 -> One ([R 327]) - | 1380 -> One ([R 328]) - | 1566 -> One ([R 331]) - | 1693 -> One ([R 332]) - | 1696 -> One ([R 333]) - | 1695 -> One ([R 335]) - | 1694 -> One ([R 337]) - | 1692 -> One ([R 338]) - | 1809 -> One ([R 350]) - | 1799 -> One ([R 352]) - | 1807 -> One ([R 353]) - | 1806 -> One ([R 355]) - | 559 -> One ([R 362]) - | 562 -> One ([R 363]) - | 535 -> One ([R 374]) - | 545 -> One ([R 375]) - | 546 -> One ([R 376]) - | 544 -> One ([R 377]) - | 547 -> One ([R 379]) - | 170 -> One ([R 380]) - | 100 | 984 -> One ([R 381]) - | 505 -> One ([R 388]) - | 482 -> One ([R 389]) - | 512 -> One ([R 393]) - | 850 | 1209 -> One ([R 398]) - | 1042 -> One ([R 400]) - | 1040 -> One ([R 401]) - | 1043 -> One ([R 402]) - | 1041 -> One ([R 403]) - | 385 -> One ([R 406]) - | 835 -> One ([R 408]) - | 920 -> One ([R 409]) - | 1718 -> One ([R 410]) - | 936 -> One ([R 411]) - | 1719 -> One ([R 412]) - | 935 -> One ([R 413]) - | 927 -> One ([R 414]) - | 90 | 244 -> One ([R 427]) - | 114 | 619 -> One ([R 428]) - | 142 -> One ([R 429]) - | 130 -> One ([R 431]) - | 134 -> One ([R 433]) - | 138 -> One ([R 435]) - | 121 -> One ([R 436]) - | 141 | 1498 -> One ([R 437]) - | 120 -> One ([R 438]) - | 119 -> One ([R 439]) - | 118 -> One ([R 440]) - | 117 -> One ([R 441]) - | 116 -> One ([R 442]) - | 93 | 111 | 609 -> One ([R 443]) - | 92 | 608 -> One ([R 444]) - | 91 -> One ([R 445]) - | 113 | 391 | 618 -> One ([R 446]) - | 112 | 617 -> One ([R 447]) - | 88 -> One ([R 448]) - | 94 -> One ([R 449]) - | 123 -> One ([R 450]) - | 115 -> One ([R 451]) - | 122 -> One ([R 452]) - | 95 -> One ([R 453]) - | 140 -> One ([R 454]) - | 143 -> One ([R 455]) - | 139 -> One ([R 457]) - | 311 -> One ([R 458]) - | 310 -> One (R 459 :: r302) - | 262 -> One (R 460 :: r263) - | 263 -> One ([R 461]) - | 422 -> One (R 462 :: r353) - | 423 -> One ([R 463]) - | 1517 -> One ([R 477]) - | 159 -> One ([R 478]) - | 377 -> One ([R 498]) - | 371 -> One ([R 499]) - | 372 -> One ([R 501]) - | 370 | 620 -> One ([R 508]) - | 765 -> One ([R 514]) - | 766 -> One ([R 515]) - | 767 -> One ([R 517]) - | 453 -> One ([R 519]) - | 1183 -> One ([R 523]) - | 942 | 1250 -> One ([R 533]) - | 1053 -> One ([R 535]) - | 1051 -> One ([R 536]) - | 1054 -> One ([R 537]) - | 1052 -> One ([R 538]) - | 1319 -> One (R 539 :: r1029) - | 251 -> One ([R 540]) - | 918 -> One ([R 543]) - | 919 -> One ([R 544]) - | 914 -> One ([R 545]) - | 1735 -> One ([R 547]) - | 1734 -> One ([R 548]) - | 1736 -> One ([R 549]) - | 1731 -> One ([R 550]) - | 1732 -> One ([R 551]) - | 948 -> One ([R 553]) - | 946 -> One ([R 554]) - | 660 -> One (R 555 :: r570) - | 684 -> One ([R 556]) - | 674 -> One (R 559 :: r578) - | 681 -> One ([R 560]) - | 527 -> One ([R 561]) - | 479 -> One ([R 562]) - | 1306 -> One ([R 563]) - | 1305 -> One ([R 564]) - | 339 -> One ([R 566]) - | 303 -> One ([R 590]) - | 1417 -> One ([R 593]) - | 1418 -> One ([R 594]) - | 1589 -> One ([R 596]) - | 1590 -> One ([R 597]) - | 416 -> One ([R 599]) - | 417 -> One ([R 600]) - | 1520 -> One ([R 602]) - | 1521 -> One ([R 603]) - | 702 -> One ([R 605]) - | 706 -> One ([R 606]) - | 1178 -> One ([R 611]) - | 1146 -> One ([R 612]) - | 1149 -> One ([R 613]) - | 1148 -> One ([R 618]) - | 1153 -> One ([R 621]) - | 1152 -> One ([R 623]) - | 1151 -> One ([R 624]) - | 1150 -> One ([R 625]) - | 1179 -> One ([R 628]) - | 86 -> One ([R 631]) - | 83 -> One ([R 633]) - | 667 -> One ([R 657]) - | 601 -> One ([R 658]) - | 670 -> One ([R 659]) - | 669 | 698 -> One ([R 660]) - | 603 | 658 -> One ([R 661]) - | 1425 | 1475 -> One ([R 666]) - | 668 -> One ([R 671]) - | 353 -> One ([R 684]) - | 357 -> One ([R 687]) - | 358 -> One ([R 691]) - | 389 -> One ([R 693]) - | 362 -> One ([R 694]) - | 418 -> One ([R 696]) - | 380 -> One ([R 701]) - | 28 -> One ([R 702]) - | 8 -> One ([R 703]) - | 52 -> One ([R 705]) - | 51 -> One ([R 706]) - | 50 -> One ([R 707]) - | 49 -> One ([R 708]) - | 48 -> One ([R 709]) - | 47 -> One ([R 710]) - | 46 -> One ([R 711]) - | 45 -> One ([R 712]) - | 44 -> One ([R 713]) - | 43 -> One ([R 714]) - | 42 -> One ([R 715]) - | 41 -> One ([R 716]) - | 40 -> One ([R 717]) - | 39 -> One ([R 718]) - | 38 -> One ([R 719]) - | 37 -> One ([R 720]) - | 36 -> One ([R 721]) - | 35 -> One ([R 722]) - | 34 -> One ([R 723]) - | 33 -> One ([R 724]) - | 32 -> One ([R 725]) - | 31 -> One ([R 726]) - | 30 -> One ([R 727]) - | 29 -> One ([R 728]) - | 27 -> One ([R 729]) - | 26 -> One ([R 730]) - | 25 -> One ([R 731]) - | 24 -> One ([R 732]) - | 23 -> One ([R 733]) - | 22 -> One ([R 734]) - | 21 -> One ([R 735]) - | 20 -> One ([R 736]) - | 19 -> One ([R 737]) - | 18 -> One ([R 738]) - | 17 -> One ([R 739]) - | 16 -> One ([R 740]) - | 15 -> One ([R 741]) - | 14 -> One ([R 742]) - | 13 -> One ([R 743]) - | 12 -> One ([R 744]) - | 11 -> One ([R 745]) - | 10 -> One ([R 746]) - | 9 -> One ([R 747]) - | 7 -> One ([R 748]) - | 6 -> One ([R 749]) - | 5 -> One ([R 750]) - | 4 -> One ([R 751]) - | 3 -> One ([R 752]) - | 1375 -> One ([R 753]) - | 1397 -> One ([R 758]) - | 1379 | 1396 -> One ([R 760]) - | 1382 | 1398 -> One ([R 761]) - | 1388 -> One ([R 763]) - | 1376 -> One ([R 764]) - | 1366 -> One ([R 765]) - | 1374 -> One ([R 769]) - | 1378 -> One ([R 772]) - | 1377 -> One ([R 773]) - | 1389 -> One ([R 775]) - | 236 -> One ([R 777]) - | 235 -> One ([R 778]) - | 1858 -> One ([R 782]) - | 1859 -> One ([R 783]) - | 1861 -> One ([R 784]) - | 1862 -> One ([R 785]) - | 1860 -> One ([R 786]) - | 1857 -> One ([R 787]) - | 1863 -> One ([R 791]) - | 287 -> One ([R 793]) - | 485 -> One (R 801 :: r439) - | 499 -> One ([R 802]) - | 177 -> One ([R 807]) - | 180 -> One ([R 808]) - | 184 -> One ([R 809]) - | 178 -> One ([R 810]) - | 185 -> One ([R 811]) - | 181 -> One ([R 812]) - | 186 -> One ([R 813]) - | 183 -> One ([R 814]) - | 176 -> One ([R 815]) - | 354 -> One ([R 820]) - | 563 -> One ([R 821]) - | 1024 -> One ([R 829]) - | 1207 -> One ([R 830]) - | 1210 -> One ([R 831]) - | 1208 -> One ([R 832]) - | 1248 -> One ([R 833]) - | 1251 -> One ([R 834]) - | 1249 -> One ([R 835]) - | 488 -> One ([R 842]) - | 489 -> One ([R 843]) - | 1513 -> One (S (T T_WITH) :: r1100) - | 166 -> One (S (T T_TYPE) :: r119) - | 455 -> One (S (T T_TYPE) :: r388) - | 867 -> One (S (T T_STAR) :: r716) - | 1865 -> One (S (T T_SEMISEMI) :: r1196) - | 1872 -> One (S (T T_SEMISEMI) :: r1200) - | 1796 -> One (S (T T_RPAREN) :: r54) - | 365 -> One (S (T T_RPAREN) :: r329) - | 409 -> One (S (T T_RPAREN) :: r352) - | 469 -> One (S (T T_RPAREN) :: r411) - | 537 -> One (S (T T_RPAREN) :: r454) - | 1499 -> One (S (T T_RPAREN) :: r1089) - | 1657 -> One (S (T T_RPAREN) :: r1149) - | 1703 -> One (S (T T_RPAREN) :: r1161) - | 1710 -> One (S (T T_RPAREN) :: r1164) - | 1797 -> One (S (T T_RPAREN) :: r1179) - | 846 | 903 -> One (S (T T_RBRACKET) :: r243) - | 265 -> One (S (T T_RBRACKET) :: r264) - | 1505 -> One (S (T T_RBRACKET) :: r1092) - | 1507 -> One (S (T T_RBRACKET) :: r1093) - | 317 -> One (S (T T_QUOTE) :: r305) - | 1062 -> One (S (T T_OPEN) :: r853) - | 1277 -> One (S (T T_OPEN) :: r1005) - | 160 -> One (S (T T_MODULE) :: r115) - | 474 -> One (S (T T_MINUSGREATER) :: r418) - | 883 -> One (S (T T_MINUSGREATER) :: r722) - | 887 -> One (S (T T_MINUSGREATER) :: r724) - | 1123 -> One (S (T T_MINUSGREATER) :: r887) - | 124 -> One (S (T T_LPAREN) :: r98) - | 156 -> One (S (T T_LIDENT) :: r110) - | 430 -> One (S (T T_LIDENT) :: r355) - | 438 -> One (S (T T_LIDENT) :: r361) - | 634 -> One (S (T T_LIDENT) :: r552) - | 635 -> One (S (T T_LIDENT) :: r558) - | 646 -> One (S (T T_LIDENT) :: r561) - | 650 -> One (S (T T_LIDENT) :: r563) - | 663 -> One (S (T T_LIDENT) :: r571) - | 851 -> One (S (T T_LIDENT) :: r712) - | 1211 -> One (S (T T_LIDENT) :: r952) - | 1252 -> One (S (T T_LIDENT) :: r979) - | 1329 -> One (S (T T_LIDENT) :: r1032) - | 81 -> One (S (T T_INT) :: r52) - | 84 -> One (S (T T_INT) :: r53) - | 685 -> One (S (T T_IN) :: r581) - | 689 -> One (S (T T_IN) :: r583) - | 1297 -> One (S (T T_IN) :: r1025) - | 551 -> One (S (T T_GREATERRBRACE) :: r461) - | 1592 -> One (S (T T_GREATERRBRACE) :: r1117) - | 206 -> One (S (T T_GREATER) :: r186) - | 1698 -> One (S (T T_GREATER) :: r1159) - | 517 -> One (S (T T_EQUAL) :: r450) - | 754 -> One (S (T T_EQUAL) :: r616) - | 1201 -> One (S (T T_EQUAL) :: r949) - | 1219 -> One (S (T T_EQUAL) :: r954) - | 1240 -> One (S (T T_EQUAL) :: r976) - | 1489 -> One (S (T T_EQUAL) :: r1087) - | 1636 -> One (S (T T_EQUAL) :: r1141) - | 1788 -> One (S (T T_EOF) :: r1177) - | 1792 -> One (S (T T_EOF) :: r1178) - | 1811 -> One (S (T T_EOF) :: r1184) - | 1815 -> One (S (T T_EOF) :: r1185) - | 1819 -> One (S (T T_EOF) :: r1186) - | 1822 -> One (S (T T_EOF) :: r1187) - | 1827 -> One (S (T T_EOF) :: r1188) - | 1831 -> One (S (T T_EOF) :: r1189) - | 1835 -> One (S (T T_EOF) :: r1190) - | 1839 -> One (S (T T_EOF) :: r1191) - | 1843 -> One (S (T T_EOF) :: r1192) - | 1846 -> One (S (T T_EOF) :: r1193) - | 1850 -> One (S (T T_EOF) :: r1194) - | 1889 -> One (S (T T_EOF) :: r1209) - | 1579 -> One (S (T T_END) :: r1116) - | 126 -> One (S (T T_DOTDOT) :: r99) - | 201 -> One (S (T T_DOTDOT) :: r179) - | 921 -> One (S (T T_DOTDOT) :: r751) - | 922 -> One (S (T T_DOTDOT) :: r752) - | 226 | 1411 | 1458 -> One (S (T T_DOT) :: r217) - | 1853 -> One (S (T T_DOT) :: r451) - | 827 -> One (S (T T_DOT) :: r677) - | 854 -> One (S (T T_DOT) :: r714) - | 881 -> One (S (T T_DOT) :: r720) - | 1631 -> One (S (T T_DOT) :: r1139) - | 1801 -> One (S (T T_DOT) :: r1183) - | 202 | 843 -> One (S (T T_COLONCOLON) :: r181) - | 207 -> One (S (T T_COLON) :: r191) - | 471 -> One (S (T T_COLON) :: r414) - | 1117 -> One (S (T T_COLON) :: r885) - | 245 -> One (S (T T_BARRBRACKET) :: r233) - | 253 -> One (S (T T_BARRBRACKET) :: r242) - | 427 -> One (S (T T_BARRBRACKET) :: r354) - | 1501 -> One (S (T T_BARRBRACKET) :: r1090) - | 1503 -> One (S (T T_BARRBRACKET) :: r1091) - | 1644 -> One (S (T T_BARRBRACKET) :: r1142) - | 328 -> One (S (T T_BAR) :: r308) - | 79 -> One (S (N N_pattern) :: r50) - | 382 | 585 | 1548 -> One (S (N N_pattern) :: r56) - | 343 -> One (S (N N_pattern) :: r313) - | 373 -> One (S (N N_pattern) :: r333) - | 375 -> One (S (N N_pattern) :: r334) - | 396 -> One (S (N N_pattern) :: r345) - | 401 -> One (S (N N_pattern) :: r348) - | 757 -> One (S (N N_pattern) :: r617) - | 759 -> One (S (N N_pattern) :: r618) - | 761 -> One (S (N N_pattern) :: r619) - | 768 -> One (S (N N_pattern) :: r621) - | 774 -> One (S (N N_pattern) :: r625) - | 103 -> One (S (N N_module_type) :: r69) - | 473 -> One (S (N N_module_type) :: r416) - | 513 -> One (S (N N_module_type) :: r447) - | 515 -> One (S (N N_module_type) :: r448) - | 541 -> One (S (N N_module_type) :: r456) - | 783 -> One (S (N N_module_type) :: r641) - | 795 -> One (S (N N_module_type) :: r649) - | 1652 -> One (S (N N_module_type) :: r1148) - | 1667 -> One (S (N N_module_type) :: r1151) - | 1670 -> One (S (N N_module_type) :: r1153) - | 1673 -> One (S (N N_module_type) :: r1155) - | 219 -> One (S (N N_module_expr) :: r205) - | 446 -> One (S (N N_let_pattern) :: r378) - | 247 -> One (S (N N_expr) :: r234) - | 553 -> One (S (N N_expr) :: r464) - | 566 -> One (S (N N_expr) :: r478) - | 632 -> One (S (N N_expr) :: r551) - | 657 -> One (S (N N_expr) :: r568) - | 693 -> One (S (N N_expr) :: r584) - | 695 -> One (S (N N_expr) :: r585) - | 700 -> One (S (N N_expr) :: r586) - | 707 -> One (S (N N_expr) :: r589) - | 709 -> One (S (N N_expr) :: r590) - | 711 -> One (S (N N_expr) :: r591) - | 713 -> One (S (N N_expr) :: r592) - | 715 -> One (S (N N_expr) :: r593) - | 717 -> One (S (N N_expr) :: r594) - | 719 -> One (S (N N_expr) :: r595) - | 721 -> One (S (N N_expr) :: r596) - | 723 -> One (S (N N_expr) :: r597) - | 725 -> One (S (N N_expr) :: r598) - | 727 -> One (S (N N_expr) :: r599) - | 729 -> One (S (N N_expr) :: r600) - | 731 -> One (S (N N_expr) :: r601) - | 733 -> One (S (N N_expr) :: r602) - | 735 -> One (S (N N_expr) :: r603) - | 737 -> One (S (N N_expr) :: r604) - | 739 -> One (S (N N_expr) :: r605) - | 741 -> One (S (N N_expr) :: r606) - | 743 -> One (S (N N_expr) :: r607) - | 745 -> One (S (N N_expr) :: r608) - | 1430 -> One (S (N N_expr) :: r1070) - | 1435 -> One (S (N N_expr) :: r1074) - | 1440 -> One (S (N N_expr) :: r1078) - | 1446 -> One (S (N N_expr) :: r1079) - | 1451 -> One (S (N N_expr) :: r1080) - | 1456 -> One (S (N N_expr) :: r1081) - | 1463 -> One (S (N N_expr) :: r1082) - | 1468 -> One (S (N N_expr) :: r1083) - | 1473 -> One (S (N N_expr) :: r1084) - | 1476 -> One (S (N N_expr) :: r1085) - | 1576 -> One (S (N N_expr) :: r1115) - | 441 -> One (Sub (r1) :: r365) - | 581 -> One (Sub (r1) :: r496) - | 776 -> One (Sub (r1) :: r626) - | 1540 -> One (Sub (r1) :: r1106) - | 1773 -> One (Sub (r1) :: r1175) - | 1775 -> One (Sub (r1) :: r1176) - | 2 -> One (Sub (r11) :: r12) - | 55 -> One (Sub (r11) :: r13) - | 59 -> One (Sub (r11) :: r18) - | 209 -> One (Sub (r11) :: r194) - | 703 -> One (Sub (r11) :: r588) - | 772 -> One (Sub (r11) :: r624) - | 813 -> One (Sub (r11) :: r658) - | 815 -> One (Sub (r11) :: r661) - | 1278 -> One (Sub (r11) :: r1010) - | 579 -> One (Sub (r33) :: r493) - | 1570 -> One (Sub (r33) :: r1114) - | 1771 -> One (Sub (r35) :: r1174) - | 75 -> One (Sub (r42) :: r43) - | 565 -> One (Sub (r42) :: r476) - | 600 -> One (Sub (r42) :: r529) - | 628 -> One (Sub (r42) :: r546) - | 648 -> One (Sub (r42) :: r562) - | 665 -> One (Sub (r42) :: r572) - | 672 -> One (Sub (r42) :: r573) - | 1301 -> One (Sub (r42) :: r1026) - | 791 -> One (Sub (r63) :: r646) - | 988 -> One (Sub (r63) :: r789) - | 895 -> One (Sub (r72) :: r725) - | 403 -> One (Sub (r77) :: r349) - | 763 -> One (Sub (r77) :: r620) - | 288 -> One (Sub (r79) :: r291) - | 300 -> One (Sub (r79) :: r296) - | 880 -> One (Sub (r79) :: r718) - | 1552 -> One (Sub (r79) :: r1112) - | 295 -> One (Sub (r81) :: r295) - | 1125 -> One (Sub (r81) :: r890) - | 286 -> One (Sub (r83) :: r290) - | 314 -> One (Sub (r85) :: r303) - | 492 -> One (Sub (r85) :: r441) - | 261 -> One (Sub (r87) :: r256) - | 398 -> One (Sub (r87) :: r347) - | 433 -> One (Sub (r87) :: r360) - | 448 -> One (Sub (r87) :: r379) - | 495 -> One (Sub (r87) :: r444) - | 621 -> One (Sub (r87) :: r542) - | 637 -> One (Sub (r87) :: r559) - | 641 -> One (Sub (r87) :: r560) - | 750 -> One (Sub (r87) :: r614) - | 1034 -> One (Sub (r87) :: r833) - | 1072 -> One (Sub (r87) :: r864) - | 1708 -> One (Sub (r87) :: r1163) - | 1712 -> One (Sub (r87) :: r1165) - | 1761 -> One (Sub (r87) :: r1173) - | 1227 -> One (Sub (r89) :: r968) - | 1258 -> One (Sub (r89) :: r982) - | 189 -> One (Sub (r105) :: r174) - | 828 -> One (Sub (r105) :: r678) - | 1855 -> One (Sub (r105) :: r1195) - | 348 -> One (Sub (r126) :: r321) - | 195 -> One (Sub (r169) :: r175) - | 182 -> One (Sub (r171) :: r173) - | 1026 -> One (Sub (r171) :: r827) - | 199 -> One (Sub (r177) :: r178) - | 902 -> One (Sub (r177) :: r744) - | 951 -> One (Sub (r177) :: r759) - | 256 -> One (Sub (r253) :: r255) - | 307 -> One (Sub (r258) :: r297) - | 267 -> One (Sub (r260) :: r266) - | 281 -> One (Sub (r260) :: r289) - | 268 -> One (Sub (r272) :: r274) - | 269 -> One (Sub (r276) :: r277) - | 292 -> One (Sub (r276) :: r292) - | 1705 -> One (Sub (r276) :: r1162) - | 271 -> One (Sub (r285) :: r287) - | 521 -> One (Sub (r285) :: r452) - | 985 -> One (Sub (r285) :: r784) - | 336 -> One (Sub (r310) :: r312) - | 459 -> One (Sub (r316) :: r389) - | 359 -> One (Sub (r324) :: r325) - | 383 -> One (Sub (r338) :: r341) - | 586 -> One (Sub (r338) :: r508) - | 1228 -> One (Sub (r338) :: r973) - | 1259 -> One (Sub (r338) :: r987) - | 1549 -> One (Sub (r338) :: r1109) - | 1625 -> One (Sub (r338) :: r1135) - | 431 -> One (Sub (r357) :: r359) - | 439 -> One (Sub (r357) :: r364) - | 1495 -> One (Sub (r367) :: r1088) - | 442 -> One (Sub (r369) :: r372) - | 444 -> One (Sub (r374) :: r375) - | 1239 -> One (Sub (r384) :: r974) - | 525 -> One (Sub (r432) :: r453) - | 484 -> One (Sub (r434) :: r435) - | 554 -> One (Sub (r470) :: r472) - | 1512 -> One (Sub (r470) :: r1098) - | 557 -> One (Sub (r474) :: r475) - | 677 -> One (Sub (r474) :: r579) - | 1002 -> One (Sub (r474) :: r797) - | 1556 -> One (Sub (r501) :: r1113) - | 807 -> One (Sub (r629) :: r655) - | 1726 -> One (Sub (r679) :: r1169) - | 1738 -> One (Sub (r679) :: r1171) - | 848 -> One (Sub (r695) :: r696) - | 849 -> One (Sub (r704) :: r706) - | 904 -> One (Sub (r704) :: r746) - | 923 -> One (Sub (r704) :: r754) - | 931 -> One (Sub (r704) :: r756) - | 1714 -> One (Sub (r704) :: r1167) - | 1009 -> One (Sub (r771) :: r798) - | 1325 -> One (Sub (r807) :: r1031) - | 1349 -> One (Sub (r807) :: r1040) - | 1289 -> One (Sub (r859) :: r1017) - | 1276 -> One (Sub (r919) :: r1000) - | 1353 -> One (Sub (r922) :: r1041) - | 1194 -> One (Sub (r940) :: r942) - | 1222 -> One (Sub (r959) :: r961) - | 1509 -> One (Sub (r1094) :: r1096) - | 692 -> One (r0) - | 1787 -> One (r2) - | 1786 -> One (r3) - | 1785 -> One (r4) - | 1784 -> One (r5) - | 1783 -> One (r6) - | 58 -> One (r7) - | 53 -> One (r8) + | 0 | 2155 | 2159 | 2177 | 2181 | 2185 | 2189 | 2193 | 2197 | 2201 | 2205 | 2209 | 2213 | 2218 | 2238 -> Nothing + | 2154 -> One ([R 0]) + | 2158 -> One ([R 1]) + | 2164 -> One ([R 2]) + | 2178 -> One ([R 3]) + | 2182 -> One ([R 4]) + | 2188 -> One ([R 5]) + | 2190 -> One ([R 6]) + | 2194 -> One ([R 7]) + | 2198 -> One ([R 8]) + | 2202 -> One ([R 9]) + | 2206 -> One ([R 10]) + | 2212 -> One ([R 11]) + | 2216 -> One ([R 12]) + | 2228 -> One ([R 13]) + | 2248 -> One ([R 14]) + | 348 -> One ([R 15]) + | 347 -> One ([R 16]) + | 2172 -> One ([R 20]) + | 2174 -> One ([R 21]) + | 227 -> One ([R 22]) + | 212 -> One ([R 23]) + | 238 -> One ([R 24]) + | 1897 -> One ([R 36]) + | 1901 -> One ([R 41]) + | 1898 -> One ([R 42]) + | 1937 -> One ([R 51]) + | 1904 -> One ([R 56]) + | 1668 -> One ([R 68]) + | 1648 -> One ([R 69]) + | 1650 -> One ([R 73]) + | 1899 -> One ([R 77]) + | 414 -> One ([R 88]) + | 301 -> One ([R 89]) + | 412 -> One ([R 90]) + | 159 -> One ([R 94]) + | 158 | 1351 -> One ([R 95]) + | 1525 -> One ([R 98]) + | 1750 -> One ([R 106]) + | 1754 -> One ([R 107]) + | 230 -> One ([R 109]) + | 218 -> One ([R 110]) + | 224 -> One ([R 111]) + | 226 -> One ([R 112]) + | 1187 -> One ([R 122]) + | 1 -> One (R 124 :: r9) + | 62 -> One (R 124 :: r42) + | 183 -> One (R 124 :: r181) + | 303 -> One (R 124 :: r271) + | 330 -> One (R 124 :: r298) + | 349 -> One (R 124 :: r312) + | 350 -> One (R 124 :: r316) + | 356 -> One (R 124 :: r328) + | 371 -> One (R 124 :: r340) + | 406 -> One (R 124 :: r387) + | 444 -> One (R 124 :: r410) + | 596 -> One (R 124 :: r502) + | 698 -> One (R 124 :: r574) + | 701 -> One (R 124 :: r577) + | 714 -> One (R 124 :: r588) + | 734 -> One (R 124 :: r604) + | 737 -> One (R 124 :: r607) + | 743 -> One (R 124 :: r627) + | 772 -> One (R 124 :: r641) + | 789 -> One (R 124 :: r664) + | 794 -> One (R 124 :: r667) + | 824 -> One (R 124 :: r682) + | 844 -> One (R 124 :: r692) + | 860 -> One (R 124 :: r701) + | 874 -> One (R 124 :: r708) + | 880 -> One (R 124 :: r712) + | 889 -> One (R 124 :: r716) + | 900 -> One (R 124 :: r722) + | 906 -> One (R 124 :: r726) + | 912 -> One (R 124 :: r730) + | 918 -> One (R 124 :: r734) + | 924 -> One (R 124 :: r738) + | 930 -> One (R 124 :: r742) + | 936 -> One (R 124 :: r746) + | 942 -> One (R 124 :: r750) + | 948 -> One (R 124 :: r754) + | 954 -> One (R 124 :: r758) + | 960 -> One (R 124 :: r762) + | 966 -> One (R 124 :: r766) + | 972 -> One (R 124 :: r770) + | 978 -> One (R 124 :: r774) + | 984 -> One (R 124 :: r778) + | 990 -> One (R 124 :: r782) + | 996 -> One (R 124 :: r786) + | 1002 -> One (R 124 :: r790) + | 1016 -> One (R 124 :: r799) + | 1022 -> One (R 124 :: r803) + | 1094 -> One (R 124 :: r842) + | 1103 -> One (R 124 :: r849) + | 1112 -> One (R 124 :: r856) + | 1122 -> One (R 124 :: r860) + | 1131 -> One (R 124 :: r867) + | 1140 -> One (R 124 :: r874) + | 1151 -> One (R 124 :: r882) + | 1160 -> One (R 124 :: r889) + | 1169 -> One (R 124 :: r896) + | 1176 -> One (R 124 :: r900) + | 1214 -> One (R 124 :: r903) + | 1230 -> One (R 124 :: r906) + | 1235 -> One (R 124 :: r910) + | 1242 -> One (R 124 :: r914) + | 1264 -> One (R 124 :: r922) + | 1314 -> One (R 124 :: r941) + | 1333 -> One (R 124 :: r951) + | 1348 -> One (R 124 :: r962) + | 1408 -> One (R 124 :: r995) + | 1417 -> One (R 124 :: r1000) + | 1435 -> One (R 124 :: r1007) + | 1466 -> One (R 124 :: r1024) + | 1499 -> One (R 124 :: r1052) + | 1504 -> One (R 124 :: r1062) + | 1536 -> One (R 124 :: r1086) + | 1537 -> One (R 124 :: r1090) + | 1546 -> One (R 124 :: r1098) + | 1583 -> One (R 124 :: r1124) + | 1592 -> One (R 124 :: r1138) + | 1593 -> One (R 124 :: r1147) + | 1787 -> One (R 124 :: r1264) + | 2021 -> One (R 124 :: r1399) + | 2036 -> One (R 124 :: r1407) + | 225 -> One ([R 130]) + | 829 -> One ([R 136]) + | 1182 -> One ([R 154]) + | 850 -> One ([R 155]) + | 887 -> One ([R 156]) + | 867 -> One ([R 157]) + | 885 -> One ([R 228]) + | 894 -> One ([R 233]) + | 898 -> One ([R 234]) + | 609 -> One ([R 244]) + | 115 -> One ([R 257]) + | 92 -> One (R 260 :: r53) + | 96 -> One (R 260 :: r55) + | 346 -> One ([R 264]) + | 689 -> One ([R 267]) + | 697 -> One ([R 268]) + | 691 -> One ([R 270]) + | 814 -> One ([R 271]) + | 816 -> One ([R 274]) + | 809 -> One ([R 275]) + | 1373 -> One ([R 282]) + | 1374 -> One ([R 283]) + | 1181 -> One ([R 287]) + | 470 -> One ([R 301]) + | 497 -> One ([R 305]) + | 508 -> One ([R 309]) + | 2010 -> One ([R 313]) + | 1997 -> One ([R 317]) + | 553 -> One ([R 321]) + | 1076 -> One ([R 325]) + | 580 -> One ([R 329]) + | 566 -> One ([R 333]) + | 535 -> One ([R 337]) + | 453 -> One ([R 341]) + | 534 -> One ([R 342]) + | 1081 -> One ([R 343]) + | 1049 -> One ([R 345]) + | 1086 -> One ([R 352]) + | 1902 -> One ([R 355]) + | 749 -> One ([R 356]) + | 1407 -> One ([R 358]) + | 129 -> One (R 374 :: r74) + | 267 -> One (R 374 :: r252) + | 343 -> One (R 374 :: r307) + | 354 -> One (R 374 :: r321) + | 599 -> One (R 374 :: r506) + | 607 -> One (R 374 :: r516) + | 1027 -> One (R 374 :: r806) + | 1481 -> One (R 374 :: r1040) + | 1565 -> One (R 374 :: r1117) + | 1604 -> One (R 374 :: r1153) + | 1610 -> One (R 374 :: r1161) + | 1621 -> One (R 374 :: r1167) + | 1632 -> One (R 374 :: r1170) + | 1636 -> One (R 374 :: r1179) + | 1657 -> One (R 374 :: r1193) + | 1673 -> One (R 374 :: r1203) + | 1708 -> One (R 374 :: r1220) + | 1730 -> One (R 374 :: r1230) + | 1740 -> One (R 374 :: r1239) + | 1794 -> One (R 374 :: r1268) + | 1798 -> One (R 374 :: r1281) + | 1826 -> One (R 374 :: r1300) + | 1866 -> One (R 374 :: r1322) + | 1870 -> One (R 374 :: r1326) + | 1871 -> One (R 374 :: r1330) + | 1882 -> One (R 374 :: r1346) + | 1890 -> One (R 374 :: r1355) + | 1929 -> One (R 374 :: r1366) + | 1949 -> One (R 374 :: r1379) + | 2081 -> One (R 374 :: r1412) + | 1729 -> One (R 376 :: r1223) + | 1970 -> One (R 376 :: r1382) + | 1739 -> One (R 378 :: r1231) + | 1083 -> One (R 380 :: r838) + | 1666 -> One (R 380 :: r1194) + | 1727 -> One (R 380 :: r1222) + | 1935 -> One (R 380 :: r1367) + | 1968 -> One (R 380 :: r1381) + | 1975 -> One (R 380 :: r1384) + | 1985 -> One (R 380 :: r1386) + | 2233 -> One (R 380 :: r1452) + | 2244 -> One (R 380 :: r1458) + | 2249 -> One (R 380 :: r1461) + | 1535 -> One (R 382 :: r1082) + | 1719 -> One (R 382 :: r1221) + | 345 -> One (R 385 :: r308) + | 1959 -> One (R 385 :: r1380) + | 1669 -> One (R 389 :: r1195) + | 1938 -> One (R 391 :: r1368) + | 2231 -> One (R 393 :: r1450) + | 2239 -> One (R 395 :: r1454) + | 2240 -> One (R 395 :: r1455) + | 2241 -> One (R 395 :: r1456) + | 523 -> One ([R 401]) + | 527 -> One ([R 403]) + | 1224 -> One ([R 406]) + | 2084 -> One ([R 407]) + | 2087 -> One ([R 408]) + | 2086 -> One ([R 410]) + | 2085 -> One ([R 412]) + | 2083 -> One ([R 413]) + | 2173 -> One ([R 425]) + | 2163 -> One ([R 427]) + | 2171 -> One ([R 428]) + | 2170 -> One ([R 430]) + | 692 -> One ([R 437]) + | 695 -> One ([R 438]) + | 668 -> One ([R 449]) + | 678 -> One ([R 450]) + | 679 -> One ([R 451]) + | 677 -> One ([R 452]) + | 680 -> One ([R 454]) + | 342 -> One ([R 455]) + | 334 | 606 | 1556 -> One ([R 456]) + | 636 -> One ([R 464]) + | 613 -> One ([R 465]) + | 649 -> One ([R 468]) + | 1359 | 1812 -> One ([R 473]) + | 1614 -> One ([R 475]) + | 1612 -> One ([R 476]) + | 1615 -> One ([R 477]) + | 1613 -> One ([R 478]) + | 477 -> One ([R 481]) + | 1515 -> One ([R 483]) + | 1763 -> One ([R 484]) + | 2113 -> One ([R 485]) + | 1779 -> One ([R 486]) + | 2114 -> One ([R 487]) + | 1778 -> One ([R 488]) + | 1770 -> One ([R 489]) + | 67 | 375 -> One ([R 504]) + | 75 | 723 -> One ([R 505]) + | 103 -> One ([R 506]) + | 91 -> One ([R 508]) + | 95 -> One ([R 510]) + | 99 -> One ([R 512]) + | 82 -> One ([R 513]) + | 102 | 1279 -> One ([R 514]) + | 81 -> One ([R 515]) + | 80 -> One ([R 516]) + | 79 -> One ([R 517]) + | 78 -> One ([R 518]) + | 77 -> One ([R 519]) + | 70 | 329 | 713 -> One ([R 520]) + | 69 | 712 -> One ([R 521]) + | 68 -> One ([R 522]) + | 74 | 481 | 722 -> One ([R 523]) + | 73 | 721 -> One ([R 524]) + | 66 -> One ([R 525]) + | 71 -> One ([R 526]) + | 84 -> One ([R 527]) + | 76 -> One ([R 528]) + | 83 -> One ([R 529]) + | 72 -> One ([R 530]) + | 101 -> One ([R 531]) + | 104 -> One ([R 532]) + | 100 -> One ([R 534]) + | 261 -> One ([R 535]) + | 260 -> One (R 536 :: r250) + | 190 -> One (R 537 :: r200) + | 191 -> One ([R 538]) + | 524 -> One (R 539 :: r447) + | 525 -> One ([R 540]) + | 1050 -> One (R 556 :: r823) + | 1051 -> One ([R 557]) + | 121 -> One ([R 558]) + | 456 -> One ([R 582]) + | 454 -> One ([R 583]) + | 457 -> One ([R 585]) + | 538 -> One ([R 595]) + | 539 -> One ([R 596]) + | 540 -> One ([R 598]) + | 755 -> One ([R 600]) + | 1786 -> One ([R 604]) + | 1828 | 1847 -> One ([R 614]) + | 1625 -> One ([R 616]) + | 1623 -> One ([R 617]) + | 1626 -> One ([R 618]) + | 1624 -> One ([R 619]) + | 1911 -> One (R 620 :: r1360) + | 1399 -> One ([R 621]) + | 1761 -> One ([R 624]) + | 1762 -> One ([R 625]) + | 1756 -> One ([R 626]) + | 2061 -> One ([R 628]) + | 2060 -> One ([R 629]) + | 2062 -> One ([R 630]) + | 2057 -> One ([R 631]) + | 2058 -> One ([R 632]) + | 2127 -> One ([R 634]) + | 2125 -> One ([R 635]) + | 458 -> One ([R 666]) + | 541 -> One ([R 672]) + | 798 -> One (R 678 :: r669) + | 822 -> One ([R 679]) + | 812 -> One (R 682 :: r677) + | 819 -> One ([R 683]) + | 766 -> One ([R 685]) + | 648 -> One ([R 686]) + | 610 -> One ([R 687]) + | 1184 -> One ([R 688]) + | 1183 -> One ([R 689]) + | 285 -> One ([R 691]) + | 253 -> One ([R 715]) + | 1089 -> One ([R 718]) + | 848 -> One ([R 720]) + | 1090 -> One ([R 721]) + | 849 -> One ([R 722]) + | 1320 -> One ([R 724]) + | 1321 -> One ([R 725]) + | 518 -> One ([R 727]) + | 519 -> One ([R 728]) + | 1300 -> One ([R 730]) + | 1301 -> One ([R 731]) + | 1781 -> One ([R 737]) + | 1718 -> One ([R 738]) + | 1721 -> One ([R 739]) + | 1720 -> One ([R 744]) + | 1725 -> One ([R 747]) + | 1724 -> One ([R 749]) + | 1723 -> One ([R 750]) + | 1722 -> One ([R 751]) + | 1782 -> One ([R 754]) + | 327 -> One ([R 757]) + | 324 -> One ([R 759]) + | 805 -> One ([R 783]) + | 705 -> One ([R 784]) + | 808 -> One ([R 785]) + | 807 | 886 -> One ([R 786]) + | 707 | 866 -> One ([R 787]) + | 1174 | 1213 -> One ([R 792]) + | 806 -> One ([R 797]) + | 415 -> One ([R 810]) + | 419 -> One ([R 813]) + | 420 -> One ([R 817]) + | 442 -> One ([R 819]) + | 424 -> One ([R 820]) + | 520 -> One ([R 822]) + | 441 -> One ([R 827]) + | 28 -> One ([R 828]) + | 8 -> One ([R 829]) + | 53 -> One ([R 831]) + | 52 -> One ([R 832]) + | 51 -> One ([R 833]) + | 50 -> One ([R 834]) + | 49 -> One ([R 835]) + | 48 -> One ([R 836]) + | 47 -> One ([R 837]) + | 46 -> One ([R 838]) + | 45 -> One ([R 839]) + | 44 -> One ([R 840]) + | 43 -> One ([R 841]) + | 42 -> One ([R 842]) + | 41 -> One ([R 843]) + | 40 -> One ([R 844]) + | 39 -> One ([R 845]) + | 38 -> One ([R 846]) + | 37 -> One ([R 847]) + | 36 -> One ([R 848]) + | 35 -> One ([R 849]) + | 34 -> One ([R 850]) + | 33 -> One ([R 851]) + | 32 -> One ([R 852]) + | 31 -> One ([R 853]) + | 30 -> One ([R 854]) + | 29 -> One ([R 855]) + | 27 -> One ([R 856]) + | 26 -> One ([R 857]) + | 25 -> One ([R 858]) + | 24 -> One ([R 859]) + | 23 -> One ([R 860]) + | 22 -> One ([R 861]) + | 21 -> One ([R 862]) + | 20 -> One ([R 863]) + | 19 -> One ([R 864]) + | 18 -> One ([R 865]) + | 17 -> One ([R 866]) + | 16 -> One ([R 867]) + | 15 -> One ([R 868]) + | 14 -> One ([R 869]) + | 13 -> One ([R 870]) + | 12 -> One ([R 871]) + | 11 -> One ([R 872]) + | 10 -> One ([R 873]) + | 9 -> One ([R 874]) + | 7 -> One ([R 875]) + | 6 -> One ([R 876]) + | 5 -> One ([R 877]) + | 4 -> One ([R 878]) + | 3 -> One ([R 879]) + | 1962 -> One ([R 880]) + | 1979 -> One ([R 884]) + | 1967 | 1980 -> One ([R 886]) + | 1972 -> One ([R 888]) + | 1963 -> One ([R 889]) + | 1958 -> One ([R 890]) + | 1961 -> One ([R 894]) + | 1965 -> One ([R 897]) + | 1964 -> One ([R 898]) + | 1973 -> One ([R 900]) + | 368 -> One ([R 902]) + | 367 -> One ([R 903]) + | 2222 -> One ([R 907]) + | 2223 -> One ([R 908]) + | 2225 -> One ([R 909]) + | 2226 -> One ([R 910]) + | 2224 -> One ([R 911]) + | 2221 -> One ([R 912]) + | 2227 -> One ([R 916]) + | 616 -> One (R 926 :: r533) + | 630 -> One ([R 927]) + | 135 -> One ([R 932]) + | 138 -> One ([R 933]) + | 142 -> One ([R 934]) + | 136 -> One ([R 935]) + | 143 -> One ([R 936]) + | 139 -> One ([R 937]) + | 144 -> One ([R 938]) + | 141 -> One ([R 939]) + | 134 -> One ([R 940]) + | 416 -> One ([R 945]) + | 696 -> One ([R 946]) + | 1596 -> One ([R 954]) + | 1810 -> One ([R 955]) + | 1813 -> One ([R 956]) + | 1811 -> One ([R 957]) + | 1845 -> One ([R 958]) + | 1848 -> One ([R 959]) + | 1846 -> One ([R 960]) + | 619 -> One ([R 967]) + | 620 -> One ([R 968]) + | 1294 -> One (S (T T_WITH) :: r937) + | 338 -> One (S (T T_TYPE) :: r304) + | 1376 -> One (S (T T_STAR) :: r985) + | 2229 -> One (S (T T_SEMISEMI) :: r1449) + | 2236 -> One (S (T T_SEMISEMI) :: r1453) + | 2160 -> One (S (T T_RPAREN) :: r134) + | 228 | 2106 -> One (S (T T_RPAREN) :: r236) + | 427 -> One (S (T T_RPAREN) :: r397) + | 511 -> One (S (T T_RPAREN) :: r446) + | 601 -> One (S (T T_RPAREN) :: r507) + | 670 -> One (S (T T_RPAREN) :: r550) + | 1280 -> One (S (T T_RPAREN) :: r926) + | 1427 -> One (S (T T_RPAREN) :: r1003) + | 2099 -> One (S (T T_RPAREN) :: r1418) + | 2161 -> One (S (T T_RPAREN) :: r1432) + | 1355 | 1745 -> One (S (T T_RBRACKET) :: r367) + | 1286 -> One (S (T T_RBRACKET) :: r929) + | 1288 -> One (S (T T_RBRACKET) :: r930) + | 247 -> One (S (T T_QUOTE) :: r244) + | 1634 -> One (S (T T_OPEN) :: r1175) + | 1874 -> One (S (T T_OPEN) :: r1337) + | 122 | 221 -> One (S (T T_MODULE) :: r69) + | 643 -> One (S (T T_MINUSGREATER) :: r542) + | 1384 -> One (S (T T_MINUSGREATER) :: r990) + | 1388 -> One (S (T T_MINUSGREATER) :: r992) + | 1695 -> One (S (T T_MINUSGREATER) :: r1209) + | 2091 -> One (S (T T_MINUSGREATER) :: r1415) + | 85 -> One (S (T T_LPAREN) :: r50) + | 118 -> One (S (T T_LIDENT) :: r64) + | 186 -> One (S (T T_LIDENT) :: r184) + | 187 -> One (S (T T_LIDENT) :: r192) + | 295 -> One (S (T T_LIDENT) :: r261) + | 296 -> One (S (T T_LIDENT) :: r264) + | 308 -> One (S (T T_LIDENT) :: r277) + | 309 -> One (S (T T_LIDENT) :: r283) + | 315 -> One (S (T T_LIDENT) :: r284) + | 316 -> One (S (T T_LIDENT) :: r288) + | 380 -> One (S (T T_LIDENT) :: r354) + | 381 -> One (S (T T_LIDENT) :: r360) + | 387 -> One (S (T T_LIDENT) :: r361) + | 388 -> One (S (T T_LIDENT) :: r365) + | 432 -> One (S (T T_LIDENT) :: r401) + | 433 -> One (S (T T_LIDENT) :: r405) + | 460 -> One (S (T T_LIDENT) :: r418) + | 461 -> One (S (T T_LIDENT) :: r422) + | 487 -> One (S (T T_LIDENT) :: r434) + | 488 -> One (S (T T_LIDENT) :: r438) + | 543 -> One (S (T T_LIDENT) :: r452) + | 544 -> One (S (T T_LIDENT) :: r456) + | 556 -> One (S (T T_LIDENT) :: r458) + | 557 -> One (S (T T_LIDENT) :: r462) + | 570 -> One (S (T T_LIDENT) :: r467) + | 571 -> One (S (T T_LIDENT) :: r471) + | 582 -> One (S (T T_LIDENT) :: r473) + | 590 -> One (S (T T_LIDENT) :: r479) + | 777 -> One (S (T T_LIDENT) :: r643) + | 778 -> One (S (T T_LIDENT) :: r646) + | 785 -> One (S (T T_LIDENT) :: r648) + | 801 -> One (S (T T_LIDENT) :: r670) + | 830 -> One (S (T T_LIDENT) :: r683) + | 831 -> One (S (T T_LIDENT) :: r686) + | 836 -> One (S (T T_LIDENT) :: r687) + | 852 -> One (S (T T_LIDENT) :: r694) + | 853 -> One (S (T T_LIDENT) :: r697) + | 1008 -> One (S (T T_LIDENT) :: r792) + | 1009 -> One (S (T T_LIDENT) :: r795) + | 1066 -> One (S (T T_LIDENT) :: r830) + | 1067 -> One (S (T T_LIDENT) :: r834) + | 1256 -> One (S (T T_LIDENT) :: r915) + | 1257 -> One (S (T T_LIDENT) :: r918) + | 1360 -> One (S (T T_LIDENT) :: r981) + | 1814 -> One (S (T T_LIDENT) :: r1286) + | 1849 -> One (S (T T_LIDENT) :: r1311) + | 1921 -> One (S (T T_LIDENT) :: r1363) + | 2000 -> One (S (T T_LIDENT) :: r1388) + | 2001 -> One (S (T T_LIDENT) :: r1392) + | 2028 -> One (S (T T_LIDENT) :: r1400) + | 2029 -> One (S (T T_LIDENT) :: r1403) + | 322 -> One (S (T T_INT) :: r289) + | 325 -> One (S (T T_INT) :: r290) + | 868 -> One (S (T T_IN) :: r704) + | 1894 -> One (S (T T_IN) :: r1357) + | 684 -> One (S (T T_GREATERRBRACE) :: r557) + | 1323 -> One (S (T T_GREATERRBRACE) :: r942) + | 166 -> One (S (T T_GREATER) :: r141) + | 2089 -> One (S (T T_GREATER) :: r1413) + | 652 -> One (S (T T_EQUAL) :: r546) + | 1046 -> One (S (T T_EQUAL) :: r820) + | 1062 -> One (S (T T_EQUAL) :: r828) + | 1270 -> One (S (T T_EQUAL) :: r924) + | 1804 -> One (S (T T_EQUAL) :: r1283) + | 1822 -> One (S (T T_EQUAL) :: r1288) + | 2152 -> One (S (T T_EOF) :: r1430) + | 2156 -> One (S (T T_EOF) :: r1431) + | 2175 -> One (S (T T_EOF) :: r1437) + | 2179 -> One (S (T T_EOF) :: r1438) + | 2183 -> One (S (T T_EOF) :: r1439) + | 2186 -> One (S (T T_EOF) :: r1440) + | 2191 -> One (S (T T_EOF) :: r1441) + | 2195 -> One (S (T T_EOF) :: r1442) + | 2199 -> One (S (T T_EOF) :: r1443) + | 2203 -> One (S (T T_EOF) :: r1444) + | 2207 -> One (S (T T_EOF) :: r1445) + | 2210 -> One (S (T T_EOF) :: r1446) + | 2214 -> One (S (T T_EOF) :: r1447) + | 2253 -> One (S (T T_EOF) :: r1462) + | 1310 -> One (S (T T_END) :: r938) + | 87 -> One (S (T T_DOTDOT) :: r51) + | 160 -> One (S (T T_DOTDOT) :: r131) + | 459 -> One (S (T T_DOTDOT) :: r417) + | 486 -> One (S (T T_DOTDOT) :: r433) + | 542 -> One (S (T T_DOTDOT) :: r451) + | 1065 -> One (S (T T_DOTDOT) :: r829) + | 1764 -> One (S (T T_DOTDOT) :: r1246) + | 1765 -> One (S (T T_DOTDOT) :: r1247) + | 360 | 1145 | 1202 -> One (S (T T_DOT) :: r330) + | 2217 -> One (S (T T_DOT) :: r547) + | 1039 -> One (S (T T_DOT) :: r817) + | 1363 -> One (S (T T_DOT) :: r983) + | 1382 -> One (S (T T_DOT) :: r988) + | 1509 -> One (S (T T_DOT) :: r1064) + | 2165 -> One (S (T T_DOT) :: r1436) + | 161 | 1352 -> One (S (T T_COLONCOLON) :: r133) + | 167 -> One (S (T T_COLON) :: r146) + | 233 -> One (S (T T_COLON) :: r239) + | 603 -> One (S (T T_COLON) :: r510) + | 1689 -> One (S (T T_COLON) :: r1207) + | 376 -> One (S (T T_BARRBRACKET) :: r343) + | 394 -> One (S (T T_BARRBRACKET) :: r366) + | 529 -> One (S (T T_BARRBRACKET) :: r448) + | 1282 -> One (S (T T_BARRBRACKET) :: r927) + | 1284 -> One (S (T T_BARRBRACKET) :: r928) + | 1414 -> One (S (T T_BARRBRACKET) :: r996) + | 274 -> One (S (T T_BAR) :: r255) + | 306 -> One (S (N N_pattern) :: r273) + | 474 | 757 -> One (S (N N_pattern) :: r292) + | 405 -> One (S (N N_pattern) :: r381) + | 471 -> One (S (N N_pattern) :: r424) + | 501 -> One (S (N N_pattern) :: r442) + | 536 -> One (S (N N_pattern) :: r450) + | 1077 -> One (S (N N_pattern) :: r836) + | 1493 -> One (S (N N_pattern) :: r1044) + | 337 -> One (S (N N_module_type) :: r300) + | 646 -> One (S (N N_module_type) :: r543) + | 650 -> One (S (N N_module_type) :: r544) + | 674 -> One (S (N N_module_type) :: r552) + | 1339 -> One (S (N N_module_type) :: r954) + | 1422 -> One (S (N N_module_type) :: r1002) + | 1440 -> One (S (N N_module_type) :: r1009) + | 1443 -> One (S (N N_module_type) :: r1011) + | 1446 -> One (S (N N_module_type) :: r1013) + | 1451 -> One (S (N N_module_type) :: r1015) + | 1454 -> One (S (N N_module_type) :: r1017) + | 1457 -> One (S (N N_module_type) :: r1019) + | 1471 -> One (S (N N_module_type) :: r1031) + | 353 -> One (S (N N_module_expr) :: r318) + | 748 -> One (S (N N_let_pattern) :: r633) + | 378 -> One (S (N N_fun_expr) :: r344) + | 686 -> One (S (N N_fun_expr) :: r560) + | 776 -> One (S (N N_fun_expr) :: r642) + | 823 -> One (S (N N_fun_expr) :: r679) + | 851 -> One (S (N N_fun_expr) :: r693) + | 873 -> One (S (N N_fun_expr) :: r705) + | 879 -> One (S (N N_fun_expr) :: r709) + | 888 -> One (S (N N_fun_expr) :: r713) + | 899 -> One (S (N N_fun_expr) :: r719) + | 905 -> One (S (N N_fun_expr) :: r723) + | 911 -> One (S (N N_fun_expr) :: r727) + | 917 -> One (S (N N_fun_expr) :: r731) + | 923 -> One (S (N N_fun_expr) :: r735) + | 929 -> One (S (N N_fun_expr) :: r739) + | 935 -> One (S (N N_fun_expr) :: r743) + | 941 -> One (S (N N_fun_expr) :: r747) + | 947 -> One (S (N N_fun_expr) :: r751) + | 953 -> One (S (N N_fun_expr) :: r755) + | 959 -> One (S (N N_fun_expr) :: r759) + | 965 -> One (S (N N_fun_expr) :: r763) + | 971 -> One (S (N N_fun_expr) :: r767) + | 977 -> One (S (N N_fun_expr) :: r771) + | 983 -> One (S (N N_fun_expr) :: r775) + | 989 -> One (S (N N_fun_expr) :: r779) + | 995 -> One (S (N N_fun_expr) :: r783) + | 1001 -> One (S (N N_fun_expr) :: r787) + | 1007 -> One (S (N N_fun_expr) :: r791) + | 1021 -> One (S (N N_fun_expr) :: r800) + | 1093 -> One (S (N N_fun_expr) :: r839) + | 1102 -> One (S (N N_fun_expr) :: r846) + | 1111 -> One (S (N N_fun_expr) :: r853) + | 1121 -> One (S (N N_fun_expr) :: r857) + | 1130 -> One (S (N N_fun_expr) :: r864) + | 1139 -> One (S (N N_fun_expr) :: r871) + | 1150 -> One (S (N N_fun_expr) :: r879) + | 1159 -> One (S (N N_fun_expr) :: r886) + | 1168 -> One (S (N N_fun_expr) :: r893) + | 1175 -> One (S (N N_fun_expr) :: r897) + | 1234 -> One (S (N N_fun_expr) :: r907) + | 1241 -> One (S (N N_fun_expr) :: r911) + | 370 -> One (Sub (r3) :: r335) + | 593 -> One (Sub (r3) :: r483) + | 742 -> One (Sub (r3) :: r611) + | 1495 -> One (Sub (r3) :: r1045) + | 2 -> One (Sub (r13) :: r14) + | 56 -> One (Sub (r13) :: r15) + | 60 -> One (Sub (r13) :: r22) + | 169 -> One (Sub (r13) :: r149) + | 181 -> One (Sub (r13) :: r170) + | 895 -> One (Sub (r13) :: r718) + | 1491 -> One (Sub (r13) :: r1043) + | 1497 -> One (Sub (r13) :: r1048) + | 1875 -> One (Sub (r13) :: r1342) + | 503 -> One (Sub (r24) :: r443) + | 1079 -> One (Sub (r24) :: r837) + | 240 -> One (Sub (r26) :: r241) + | 242 -> One (Sub (r26) :: r242) + | 768 -> One (Sub (r26) :: r638) + | 1381 -> One (Sub (r26) :: r986) + | 215 -> One (Sub (r28) :: r231) + | 1697 -> One (Sub (r28) :: r1212) + | 214 -> One (Sub (r30) :: r228) + | 2097 -> One (Sub (r30) :: r1416) + | 264 -> One (Sub (r32) :: r251) + | 623 -> One (Sub (r32) :: r535) + | 189 -> One (Sub (r34) :: r193) + | 290 -> One (Sub (r34) :: r260) + | 402 -> One (Sub (r34) :: r380) + | 498 -> One (Sub (r34) :: r441) + | 585 -> One (Sub (r34) :: r478) + | 626 -> One (Sub (r34) :: r538) + | 725 -> One (Sub (r34) :: r591) + | 750 -> One (Sub (r34) :: r634) + | 1058 -> One (Sub (r34) :: r826) + | 1606 -> One (Sub (r34) :: r1155) + | 1644 -> One (Sub (r34) :: r1186) + | 2013 -> One (Sub (r34) :: r1395) + | 2104 -> One (Sub (r34) :: r1420) + | 2107 -> One (Sub (r34) :: r1421) + | 1831 -> One (Sub (r36) :: r1303) + | 1855 -> One (Sub (r36) :: r1314) + | 147 -> One (Sub (r59) :: r126) + | 1040 -> One (Sub (r59) :: r818) + | 2219 -> One (Sub (r59) :: r1448) + | 1534 -> One (Sub (r71) :: r1081) + | 410 -> One (Sub (r86) :: r389) + | 153 -> One (Sub (r121) :: r127) + | 140 -> One (Sub (r123) :: r125) + | 1598 -> One (Sub (r123) :: r1149) + | 157 -> One (Sub (r129) :: r130) + | 2116 -> One (Sub (r129) :: r1426) + | 2130 -> One (Sub (r129) :: r1429) + | 232 -> One (Sub (r136) :: r237) + | 740 -> One (Sub (r174) :: r608) + | 864 -> One (Sub (r174) :: r702) + | 257 -> One (Sub (r195) :: r245) + | 195 -> One (Sub (r197) :: r204) + | 209 -> One (Sub (r197) :: r227) + | 196 -> One (Sub (r210) :: r212) + | 197 -> One (Sub (r214) :: r215) + | 236 -> One (Sub (r214) :: r240) + | 2101 -> One (Sub (r214) :: r1419) + | 199 -> One (Sub (r221) :: r223) + | 656 -> One (Sub (r221) :: r548) + | 1557 -> One (Sub (r221) :: r1106) + | 282 -> One (Sub (r257) :: r259) + | 302 -> One (Sub (r265) :: r266) + | 369 -> One (Sub (r265) :: r333) + | 704 -> One (Sub (r265) :: r578) + | 728 -> One (Sub (r265) :: r594) + | 730 -> One (Sub (r265) :: r595) + | 783 -> One (Sub (r265) :: r647) + | 803 -> One (Sub (r265) :: r671) + | 810 -> One (Sub (r265) :: r672) + | 838 -> One (Sub (r265) :: r688) + | 840 -> One (Sub (r265) :: r689) + | 858 -> One (Sub (r265) :: r698) + | 1014 -> One (Sub (r265) :: r796) + | 1262 -> One (Sub (r265) :: r919) + | 2019 -> One (Sub (r265) :: r1396) + | 2034 -> One (Sub (r265) :: r1404) + | 1477 -> One (Sub (r294) :: r1035) + | 1560 -> One (Sub (r294) :: r1111) + | 1276 -> One (Sub (r346) :: r925) + | 379 -> One (Sub (r348) :: r351) + | 397 -> One (Sub (r377) :: r379) + | 429 -> One (Sub (r384) :: r400) + | 439 -> One (Sub (r384) :: r406) + | 467 -> One (Sub (r384) :: r423) + | 494 -> One (Sub (r384) :: r439) + | 531 -> One (Sub (r384) :: r449) + | 550 -> One (Sub (r384) :: r457) + | 563 -> One (Sub (r384) :: r463) + | 567 -> One (Sub (r384) :: r466) + | 577 -> One (Sub (r384) :: r472) + | 761 -> One (Sub (r384) :: r637) + | 1073 -> One (Sub (r384) :: r835) + | 1994 -> One (Sub (r384) :: r1387) + | 2007 -> One (Sub (r384) :: r1393) + | 421 -> One (Sub (r392) :: r393) + | 447 -> One (Sub (r412) :: r415) + | 475 -> One (Sub (r427) :: r430) + | 758 -> One (Sub (r427) :: r636) + | 1033 -> One (Sub (r427) :: r813) + | 1832 -> One (Sub (r427) :: r1308) + | 1856 -> One (Sub (r427) :: r1319) + | 583 -> One (Sub (r475) :: r477) + | 591 -> One (Sub (r475) :: r482) + | 660 -> One (Sub (r526) :: r549) + | 615 -> One (Sub (r528) :: r529) + | 687 -> One (Sub (r566) :: r568) + | 1293 -> One (Sub (r566) :: r935) + | 690 -> One (Sub (r570) :: r571) + | 815 -> One (Sub (r570) :: r678) + | 1574 -> One (Sub (r570) :: r1119) + | 746 -> One (Sub (r629) :: r630) + | 1290 -> One (Sub (r931) :: r933) + | 1346 -> One (Sub (r945) :: r955) + | 1357 -> One (Sub (r964) :: r965) + | 1358 -> One (Sub (r973) :: r975) + | 1746 -> One (Sub (r973) :: r1241) + | 1766 -> One (Sub (r973) :: r1249) + | 1774 -> One (Sub (r973) :: r1251) + | 2109 -> One (Sub (r973) :: r1423) + | 2052 -> One (Sub (r1065) :: r1409) + | 2064 -> One (Sub (r1065) :: r1411) + | 1581 -> One (Sub (r1093) :: r1120) + | 1917 -> One (Sub (r1129) :: r1362) + | 1941 -> One (Sub (r1129) :: r1371) + | 1886 -> One (Sub (r1181) :: r1349) + | 1873 -> One (Sub (r1253) :: r1332) + | 1945 -> One (Sub (r1256) :: r1372) + | 1797 -> One (Sub (r1274) :: r1276) + | 1825 -> One (Sub (r1294) :: r1296) + | 872 -> One (r0) + | 871 -> One (r2) + | 2151 -> One (r4) + | 2150 -> One (r5) + | 2149 -> One (r6) + | 2148 -> One (r7) + | 2147 -> One (r8) + | 59 -> One (r9) | 54 -> One (r10) - | 57 -> One (r12) - | 56 -> One (r13) - | 1390 -> One (r14) - | 1782 -> One (r16) - | 1781 -> One (r17) - | 60 -> One (r18) - | 1780 -> One (r19) - | 1779 -> One (r20) - | 1778 -> One (r21) - | 1777 -> One (r22) - | 63 -> One (r23) - | 62 -> One (r24) - | 64 -> One (r25) - | 65 -> One (r26) - | 1770 -> One (r27) - | 68 -> One (r28) - | 67 -> One (r29) - | 1567 -> One (r30) - | 1565 -> One (r31) - | 580 -> One (r32) - | 1572 -> One (r34) - | 1769 -> One (r36) - | 1768 -> One (r37) - | 1767 -> One (r38) - | 71 -> One (r39) - | 70 -> One (r40) - | 74 -> One (r41) - | 1646 -> One (r43) - | 1766 -> One (r44) - | 1765 -> One (r45) - | 1764 -> One (r46) - | 78 -> One (r47) - | 77 -> One (r48) - | 1760 -> One (r49) - | 1759 -> One (r50) - | 80 -> One (r51) - | 82 -> One (r52) - | 85 -> One (r53) - | 89 -> One (r54) - | 395 -> One (r55) - | 394 -> One (r56) - | 144 -> One (r57) - | 146 -> One (r59) - | 145 -> One (r60) - | 110 -> One (r61) - | 99 -> One (r62) - | 102 -> One (r64) - | 101 -> One (r65) - | 98 -> One (r66) - | 97 -> One (r67) - | 1758 -> One (r68) - | 1757 -> One (r69) - | 104 | 151 -> One (r70) - | 1182 -> One (r71) - | 1756 -> One (r73) - | 1755 -> One (r74) - | 106 -> One (r75) - | 147 | 246 | 555 | 1527 -> One (r76) - | 150 -> One (r78) - | 299 -> One (r80) - | 285 -> One (r82) - | 315 -> One (r84) - | 325 -> One (r86) - | 838 -> One (r88) - | 1754 -> One (r90) - | 1753 -> One (r91) - | 149 -> One (r92) - | 148 -> One (r93) - | 109 -> One (r94) - | 108 -> One (r95) - | 129 -> One (r96) - | 128 -> One (r97) - | 125 -> One (r98) - | 127 -> One (r99) - | 133 -> One (r100) - | 132 -> One (r101) - | 137 -> One (r102) - | 136 -> One (r103) - | 154 -> One (r104) - | 162 -> One (r106) - | 161 -> One (r107) - | 158 -> One (r109) - | 157 -> One (r110) - | 1752 -> One (r111) - | 1751 -> One (r112) - | 165 -> One (r113) - | 164 -> One (r114) - | 163 -> One (r115) - | 1750 -> One (r116) - | 169 -> One (r117) - | 168 -> One (r118) - | 167 -> One (r119) - | 1749 -> One (r120) - | 1748 -> One (r121) - | 172 -> One (r122) - | 205 -> One (r123) - | 289 -> One (r125) - | 351 -> One (r127) - | 894 -> One (r129) - | 930 -> One (r131) - | 929 -> One (r132) - | 928 | 1737 -> One (r133) - | 1733 -> One (r135) - | 1747 -> One (r137) - | 1746 -> One (r138) - | 1745 -> One (r139) - | 1744 -> One (r140) - | 1743 -> One (r141) - | 957 -> One (r145) - | 956 -> One (r146) - | 955 -> One (r147) - | 1730 -> One (r153) - | 1729 -> One (r154) - | 1723 -> One (r155) - | 1722 -> One (r156) - | 1721 -> One (r157) - | 939 -> One (r159) - | 938 -> One (r160) - | 937 -> One (r161) - | 188 -> One (r165) - | 191 -> One (r167) - | 187 -> One (r168) - | 192 -> One (r170) - | 194 -> One (r172) - | 193 -> One (r173) - | 190 -> One (r174) - | 196 -> One (r175) - | 907 -> One (r176) - | 1720 -> One (r178) - | 1717 -> One (r179) - | 845 -> One (r180) - | 844 -> One (r181) - | 1702 -> One (r182) - | 1701 -> One (r183) - | 1700 -> One (r184) - | 204 -> One (r185) - | 1697 -> One (r186) - | 861 -> One (r187) - | 1689 -> One (r189) - | 1688 -> One (r190) - | 208 -> One (r191) - | 1687 -> One (r192) - | 1686 -> One (r193) - | 210 -> One (r194) - | 1685 -> One (r195) - | 1681 -> One (r196) - | 1680 -> One (r197) - | 1679 -> One (r198) - | 1678 -> One (r199) - | 1677 -> One (r200) - | 1676 -> One (r201) - | 218 -> One (r202) - | 217 -> One (r203) - | 540 -> One (r204) - | 539 -> One (r205) - | 1666 -> One (r206) - | 1665 -> One (r207) - | 221 -> One (r208) - | 225 -> One (r209) - | 231 -> One (r211) - | 232 -> One (r213) - | 224 -> One (r214) - | 223 -> One (r215) - | 229 -> One (r216) - | 227 -> One (r217) - | 228 -> One (r218) - | 230 -> One (r219) - | 234 -> One (r220) - | 1664 -> One (r221) - | 1663 -> One (r222) - | 1662 -> One (r223) - | 239 -> One (r224) - | 238 -> One (r225) - | 1661 -> One (r226) - | 1660 -> One (r227) - | 1659 -> One (r228) - | 242 -> One (r229) - | 241 -> One (r230) - | 1656 -> One (r231) - | 1655 -> One (r232) - | 1643 -> One (r233) - | 1642 -> One (r234) - | 429 -> One (r235) - | 1641 -> One (r237) - | 1640 -> One (r238) - | 252 -> One (r239) - | 250 -> One (r240) - | 249 -> One (r241) - | 426 -> One (r242) - | 255 -> One (r243) - | 415 -> One (r244) - | 414 -> One (r246) - | 413 -> One (r247) - | 257 -> One (r248) - | 420 -> One (r250) - | 342 -> One (r251) - | 260 -> One (r252) - | 259 -> One (r254) - | 258 -> One (r255) - | 341 -> One (r256) - | 323 -> One (r257) - | 304 -> One (r259) - | 335 -> One (r261) - | 334 -> One (r262) - | 264 -> One (r263) - | 266 -> One (r264) - | 333 -> One (r265) - | 332 -> One (r266) - | 283 -> One (r267) - | 282 -> One (r268) - | 322 -> One (r270) - | 309 -> One (r271) - | 327 -> One (r273) - | 326 -> One (r274) - | 279 | 1128 -> One (r275) - | 280 -> One (r277) - | 275 -> One (r278) - | 274 -> One (r279) - | 278 -> One (r281) - | 276 -> One (r284) - | 273 -> One (r286) - | 272 -> One (r287) - | 306 -> One (r288) - | 305 -> One (r289) - | 302 -> One (r290) - | 291 -> One (r291) - | 293 -> One (r292) - | 298 -> One (r293) - | 297 -> One (r294) - | 296 -> One (r295) - | 301 -> One (r296) - | 308 -> One (r297) - | 321 -> One (r298) - | 320 -> One (r300) - | 313 -> One (r301) - | 312 -> One (r302) - | 316 -> One (r303) - | 319 -> One (r304) - | 318 -> One (r305) - | 331 -> One (r306) - | 330 -> One (r307) - | 329 -> One (r308) - | 340 -> One (r309) - | 338 -> One (r311) - | 337 -> One (r312) - | 419 -> One (r313) - | 355 | 749 -> One (r315) - | 356 -> One (r317) - | 346 -> One (r318) - | 345 -> One (r319) - | 347 -> One (r320) - | 349 -> One (r321) - | 361 -> One (r323) - | 360 -> One (r325) - | 412 -> One (r326) - | 411 -> One (r327) - | 364 -> One (r328) - | 366 -> One (r329) - | 406 -> One (r330) - | 369 -> One (r331) - | 368 -> One (r332) - | 374 -> One (r333) - | 376 -> One (r334) - | 379 -> One (r335) - | 405 -> One (r336) - | 384 -> One (r337) - | 388 -> One (r339) - | 387 -> One (r340) - | 386 -> One (r341) - | 390 -> One (r342) - | 393 -> One (r343) - | 392 -> One (r344) - | 397 -> One (r345) - | 400 -> One (r346) - | 399 -> One (r347) - | 402 -> One (r348) - | 404 -> One (r349) - | 408 -> One (r350) - | 407 -> One (r351) - | 410 -> One (r352) - | 424 -> One (r353) - | 428 -> One (r354) - | 437 -> One (r355) - | 432 -> One (r356) - | 436 -> One (r358) - | 435 -> One (r359) - | 434 -> One (r360) - | 1623 -> One (r361) - | 1622 -> One (r362) - | 1621 -> One (r363) - | 440 -> One (r364) - | 1620 -> One (r365) - | 443 -> One (r366) - | 1497 -> One (r368) - | 1494 -> One (r370) - | 1493 -> One (r371) - | 1492 -> One (r372) - | 445 -> One (r373) - | 454 -> One (r375) - | 452 -> One (r376) - | 451 -> One (r377) - | 450 -> One (r378) - | 449 -> One (r379) - | 1617 -> One (r380) - | 461 -> One (r381) - | 1243 -> One (r383) - | 1618 -> One (r385) - | 458 -> One (r386) - | 457 -> One (r387) - | 456 -> One (r388) - | 460 -> One (r389) - | 1601 -> One (r390) - | 1600 -> One (r391) - | 1599 -> One (r392) - | 1598 -> One (r393) - | 1597 -> One (r394) - | 463 -> One (r395) - | 1373 -> One (r396) - | 1372 -> One (r397) - | 1371 -> One (r398) - | 1370 -> One (r399) - | 1369 -> One (r400) - | 1368 -> One (r401) - | 1596 -> One (r402) - | 549 -> One (r403) - | 548 -> One (r404) - | 466 -> One (r405) - | 465 -> One (r406) - | 536 -> One (r407) - | 534 -> One (r408) - | 533 -> One (r409) - | 468 -> One (r410) - | 470 -> One (r411) - | 532 -> One (r412) - | 531 -> One (r413) - | 472 -> One (r414) - | 530 -> One (r415) - | 529 -> One (r416) - | 528 -> One (r417) - | 475 -> One (r418) - | 483 -> One (r419) - | 481 -> One (r420) - | 480 -> One (r421) - | 477 -> One (r422) - | 511 -> One (r423) - | 510 -> One (r425) - | 504 -> One (r427) - | 503 -> One (r428) - | 502 -> One (r429) - | 501 -> One (r430) - | 500 -> One (r431) - | 523 -> One (r433) - | 524 -> One (r435) + | 55 -> One (r12) + | 58 -> One (r14) + | 57 -> One (r15) + | 1974 -> One (r16) + | 1978 -> One (r18) + | 2146 -> One (r20) + | 2145 -> One (r21) + | 61 -> One (r22) + | 108 | 377 | 688 | 1307 -> One (r23) + | 111 -> One (r25) + | 231 -> One (r27) + | 213 -> One (r29) + | 223 -> One (r31) + | 246 -> One (r33) + | 1518 -> One (r35) + | 2144 -> One (r37) + | 2143 -> One (r38) + | 110 -> One (r39) + | 109 -> One (r40) + | 64 -> One (r41) + | 63 -> One (r42) + | 105 -> One (r43) + | 107 -> One (r45) + | 106 -> One (r46) + | 65 -> One (r47) + | 90 -> One (r48) + | 89 -> One (r49) + | 86 -> One (r50) + | 88 -> One (r51) + | 94 -> One (r52) + | 93 -> One (r53) + | 98 -> One (r54) + | 97 -> One (r55) + | 112 | 128 -> One (r56) + | 113 -> One (r57) + | 116 -> One (r58) + | 124 -> One (r61) + | 123 -> One (r62) + | 120 -> One (r63) + | 119 -> One (r64) + | 2142 -> One (r65) + | 2141 -> One (r66) + | 127 -> One (r67) + | 126 -> One (r68) + | 125 -> One (r69) + | 1785 -> One (r70) + | 2140 -> One (r72) + | 2139 -> One (r73) + | 130 -> One (r74) + | 2071 -> One (r75) + | 2070 -> One (r76) + | 2069 -> One (r77) + | 165 | 241 -> One (r83) + | 222 -> One (r85) + | 413 -> One (r87) + | 1396 -> One (r89) + | 1773 -> One (r91) + | 1772 -> One (r92) + | 1771 | 2063 -> One (r93) + | 2126 -> One (r95) + | 2138 -> One (r97) + | 2137 -> One (r98) + | 2136 -> One (r99) + | 2135 -> One (r100) + | 2134 -> One (r101) + | 2046 -> One (r105) + | 180 -> One (r106) + | 179 -> One (r107) + | 2124 -> One (r111) + | 2123 -> One (r112) + | 2122 -> One (r113) + | 2121 -> One (r114) + | 2120 -> One (r115) + | 146 -> One (r117) + | 149 -> One (r119) + | 145 -> One (r120) + | 150 -> One (r122) + | 152 -> One (r124) + | 151 -> One (r125) + | 148 -> One (r126) + | 154 -> One (r127) + | 1749 -> One (r128) + | 2115 -> One (r130) + | 2112 -> One (r131) + | 1354 -> One (r132) + | 1353 -> One (r133) + | 162 -> One (r134) + | 245 -> One (r135) + | 2096 -> One (r137) + | 2095 -> One (r138) + | 2094 -> One (r139) + | 164 -> One (r140) + | 2088 -> One (r141) + | 1370 -> One (r142) + | 2080 -> One (r144) + | 2079 -> One (r145) + | 168 -> One (r146) + | 2078 -> One (r147) + | 2077 -> One (r148) + | 170 -> One (r149) + | 171 -> One (r150) + | 172 -> One (r151) + | 2059 -> One (r152) + | 2076 -> One (r154) + | 2075 -> One (r155) + | 2074 -> One (r156) + | 2073 -> One (r157) + | 2072 -> One (r158) + | 2056 -> One (r162) + | 2055 -> One (r163) + | 2049 -> One (r164) + | 2048 -> One (r165) + | 2047 -> One (r166) + | 2045 -> One (r168) + | 2044 -> One (r169) + | 182 -> One (r170) + | 1225 -> One (r171) + | 1223 -> One (r172) + | 741 -> One (r173) + | 828 -> One (r175) + | 2043 -> One (r177) + | 2042 -> One (r178) + | 2041 -> One (r179) + | 185 -> One (r180) + | 184 -> One (r181) + | 2040 -> One (r182) + | 2027 -> One (r183) + | 2026 -> One (r184) + | 289 -> One (r185) + | 288 | 1032 -> One (r186) + | 2025 -> One (r188) + | 294 -> One (r189) + | 293 -> One (r190) + | 292 -> One (r191) + | 188 -> One (r192) + | 287 -> One (r193) + | 271 -> One (r194) + | 254 -> One (r196) + | 281 -> One (r198) + | 280 -> One (r199) + | 192 -> One (r200) + | 194 -> One (r201) + | 193 -> One (r202) + | 279 -> One (r203) + | 278 -> One (r204) + | 211 -> One (r205) + | 210 -> One (r206) + | 270 -> One (r208) + | 259 -> One (r209) + | 273 -> One (r211) + | 272 -> One (r212) + | 207 | 1700 -> One (r213) + | 208 -> One (r215) + | 206 -> One (r216) + | 205 -> One (r217) + | 198 -> One (r218) + | 204 -> One (r220) + | 201 -> One (r222) + | 200 -> One (r223) + | 203 -> One (r224) + | 202 -> One (r225) + | 256 -> One (r226) + | 255 -> One (r227) + | 252 -> One (r228) + | 251 -> One (r229) + | 217 -> One (r230) + | 216 -> One (r231) + | 250 -> One (r234) + | 229 -> One (r236) + | 239 -> One (r237) + | 235 -> One (r238) + | 234 -> One (r239) + | 237 -> One (r240) + | 244 -> One (r241) + | 243 -> One (r242) + | 249 -> One (r243) + | 248 -> One (r244) + | 258 -> One (r245) + | 269 -> One (r246) + | 266 -> One (r248) + | 263 -> One (r249) + | 262 -> One (r250) + | 265 -> One (r251) + | 268 -> One (r252) + | 277 -> One (r253) + | 276 -> One (r254) + | 275 -> One (r255) + | 286 -> One (r256) + | 284 -> One (r258) + | 283 -> One (r259) + | 291 -> One (r260) + | 300 -> One (r261) + | 299 -> One (r262) + | 298 -> One (r263) + | 297 -> One (r264) + | 1416 -> One (r266) + | 2018 -> One (r267) + | 2017 -> One (r268) + | 2016 -> One (r269) + | 305 -> One (r270) + | 304 -> One (r271) + | 2012 -> One (r272) + | 2011 -> One (r273) + | 307 -> One (r274) + | 2009 -> One (r275) + | 1999 -> One (r276) + | 1998 -> One (r277) + | 1996 -> One (r278) + | 314 -> One (r279) + | 313 -> One (r280) + | 312 -> One (r281) + | 311 -> One (r282) + | 310 -> One (r283) + | 321 -> One (r284) + | 320 -> One (r285) + | 319 -> One (r286) + | 318 -> One (r287) + | 317 -> One (r288) + | 323 -> One (r289) + | 326 -> One (r290) + | 485 -> One (r291) + | 484 -> One (r292) + | 333 -> One (r293) + | 336 -> One (r295) + | 335 -> One (r296) + | 332 -> One (r297) + | 331 -> One (r298) + | 1993 -> One (r299) + | 1992 -> One (r300) + | 1991 -> One (r301) + | 341 -> One (r302) + | 340 -> One (r303) + | 339 -> One (r304) + | 1990 -> One (r305) + | 1989 -> One (r306) + | 344 -> One (r307) + | 1988 -> One (r308) + | 1465 -> One (r309) + | 1464 -> One (r310) + | 1463 -> One (r311) + | 1462 -> One (r312) + | 1461 -> One (r313) + | 1460 -> One (r314) + | 352 -> One (r315) + | 351 -> One (r316) + | 673 -> One (r317) + | 672 -> One (r318) + | 1450 -> One (r319) + | 1449 -> One (r320) + | 355 -> One (r321) + | 359 -> One (r322) + | 365 -> One (r324) + | 366 -> One (r326) + | 358 -> One (r327) + | 357 -> One (r328) + | 363 -> One (r329) + | 361 -> One (r330) + | 362 -> One (r331) + | 364 -> One (r332) + | 1434 -> One (r333) + | 1433 -> One (r334) + | 1432 -> One (r335) + | 1431 -> One (r336) + | 1430 -> One (r337) + | 1429 -> One (r338) + | 373 -> One (r339) + | 372 -> One (r340) + | 1426 -> One (r341) + | 1425 -> One (r342) + | 1413 -> One (r343) + | 1412 -> One (r344) + | 581 -> One (r345) + | 1278 -> One (r347) + | 1275 -> One (r349) + | 1274 -> One (r350) + | 1273 -> One (r351) + | 565 -> One (r352) + | 555 -> One (r353) + | 554 -> One (r354) + | 533 -> One (r355) + | 386 -> One (r356) + | 385 -> One (r357) + | 384 -> One (r358) + | 383 -> One (r359) + | 382 -> One (r360) + | 393 -> One (r361) + | 392 -> One (r362) + | 391 -> One (r363) + | 390 -> One (r364) + | 389 -> One (r365) + | 528 -> One (r366) + | 396 -> One (r367) + | 517 -> One (r368) + | 516 -> One (r370) + | 515 -> One (r371) + | 398 -> One (r372) + | 522 -> One (r374) + | 404 -> One (r375) + | 401 -> One (r376) + | 400 -> One (r378) + | 399 -> One (r379) + | 403 -> One (r380) + | 521 -> One (r381) + | 417 | 1057 -> One (r383) + | 418 -> One (r385) + | 408 -> One (r386) + | 407 -> One (r387) + | 409 -> One (r388) + | 411 -> One (r389) + | 423 -> One (r391) + | 422 -> One (r393) + | 514 -> One (r394) + | 513 -> One (r395) + | 426 -> One (r396) + | 428 -> One (r397) + | 507 -> One (r398) + | 431 -> One (r399) + | 430 -> One (r400) + | 438 -> One (r401) + | 437 -> One (r402) + | 436 -> One (r403) + | 435 -> One (r404) + | 434 -> One (r405) + | 440 -> One (r406) + | 443 -> One (r407) + | 506 -> One (r408) + | 446 -> One (r409) + | 445 -> One (r410) + | 448 | 724 -> One (r411) + | 451 -> One (r413) + | 450 -> One (r414) + | 449 -> One (r415) + | 455 -> One (r416) + | 469 -> One (r417) + | 466 -> One (r418) + | 465 -> One (r419) + | 464 -> One (r420) + | 463 -> One (r421) + | 462 -> One (r422) + | 468 -> One (r423) + | 472 -> One (r424) + | 505 -> One (r425) + | 476 -> One (r426) + | 480 -> One (r428) + | 479 -> One (r429) + | 478 -> One (r430) + | 483 -> One (r431) + | 482 -> One (r432) + | 496 -> One (r433) + | 493 -> One (r434) + | 492 -> One (r435) | 491 -> One (r436) | 490 -> One (r437) - | 487 -> One (r438) - | 486 -> One (r439) - | 494 -> One (r440) - | 493 -> One (r441) - | 498 -> One (r442) - | 497 -> One (r443) - | 496 -> One (r444) + | 489 -> One (r438) + | 495 -> One (r439) + | 500 -> One (r440) + | 499 -> One (r441) + | 502 -> One (r442) + | 504 -> One (r443) + | 510 -> One (r444) | 509 -> One (r445) - | 514 -> One (r447) - | 516 -> One (r448) - | 519 -> One (r449) - | 518 -> One (r450) - | 520 | 561 -> One (r451) - | 522 -> One (r452) - | 526 -> One (r453) - | 538 -> One (r454) - | 543 -> One (r455) - | 542 -> One (r456) - | 1416 -> One (r457) - | 1595 -> One (r459) - | 1594 -> One (r460) - | 1591 -> One (r461) - | 1588 -> One (r462) - | 552 -> One (r463) - | 1587 -> One (r464) - | 1519 -> One (r465) - | 1518 -> One (r466) - | 1516 -> One (r467) - | 1522 -> One (r469) - | 1586 -> One (r471) - | 1585 -> One (r472) - | 560 -> One (r475) - | 1584 -> One (r476) - | 1583 -> One (r477) - | 1582 -> One (r478) - | 1581 -> One (r479) - | 569 -> One (r480) - | 568 -> One (r481) - | 1578 -> One (r482) - | 572 -> One (r483) - | 571 -> One (r484) - | 1575 -> One (r485) - | 1574 -> One (r486) - | 1573 -> One (r487) - | 575 -> One (r488) - | 574 -> One (r489) - | 1569 -> One (r490) - | 578 -> One (r491) - | 577 -> One (r492) - | 1568 -> One (r493) - | 1564 -> One (r494) - | 1563 -> One (r495) - | 1562 -> One (r496) - | 1238 -> One (r497) - | 1547 -> One (r499) - | 589 -> One (r500) - | 1561 -> One (r502) - | 1560 -> One (r503) - | 584 -> One (r504) - | 583 -> One (r505) - | 1559 -> One (r506) - | 588 -> One (r507) - | 587 -> One (r508) - | 1539 -> One (r509) - | 1538 -> One (r510) - | 1537 -> One (r511) - | 1536 -> One (r512) - | 594 -> One (r513) - | 593 -> One (r514) - | 592 -> One (r515) - | 591 -> One (r516) - | 1530 -> One (r517) - | 1535 -> One (r519) - | 1534 -> One (r520) - | 1533 -> One (r521) - | 1532 -> One (r522) - | 1531 -> One (r523) - | 1528 -> One (r524) - | 599 -> One (r525) - | 598 -> One (r526) - | 597 -> One (r527) - | 596 -> One (r528) - | 602 -> One (r529) - | 607 -> One (r530) - | 606 -> One (r531) - | 605 | 1526 -> One (r532) - | 1525 -> One (r533) - | 616 -> One (r534) - | 615 -> One (r535) - | 614 -> One (r536) - | 613 -> One (r537) - | 612 -> One (r538) - | 611 -> One (r539) - | 1488 -> One (r540) - | 623 -> One (r541) - | 622 -> One (r542) - | 627 -> One (r543) - | 626 -> One (r544) - | 625 -> One (r545) - | 629 -> One (r546) - | 1429 | 1481 -> One (r547) - | 1428 | 1480 -> One (r548) - | 631 | 1427 -> One (r549) - | 630 | 1426 -> One (r550) - | 1479 -> One (r551) - | 645 -> One (r552) - | 640 -> One (r553) - | 639 | 1624 -> One (r554) - | 644 -> One (r556) - | 643 -> One (r557) - | 636 -> One (r558) - | 638 -> One (r559) - | 642 -> One (r560) - | 647 -> One (r561) - | 649 -> One (r562) - | 651 -> One (r563) - | 655 | 1445 -> One (r564) - | 654 | 1444 -> One (r565) - | 653 | 1443 -> One (r566) - | 652 | 1442 -> One (r567) - | 1404 -> One (r568) - | 662 -> One (r569) - | 661 -> One (r570) - | 664 -> One (r571) - | 666 -> One (r572) - | 673 -> One (r573) - | 680 -> One (r574) - | 683 -> One (r576) - | 682 -> One (r577) - | 675 -> One (r578) - | 679 -> One (r579) - | 687 -> One (r580) - | 686 -> One (r581) - | 691 -> One (r582) - | 690 -> One (r583) - | 694 -> One (r584) - | 696 -> One (r585) - | 701 -> One (r586) - | 705 -> One (r587) - | 704 -> One (r588) - | 708 -> One (r589) - | 710 -> One (r590) - | 712 -> One (r591) - | 714 -> One (r592) - | 716 -> One (r593) - | 718 -> One (r594) - | 720 -> One (r595) - | 722 -> One (r596) - | 724 -> One (r597) - | 726 -> One (r598) - | 728 -> One (r599) - | 730 -> One (r600) - | 732 -> One (r601) - | 734 -> One (r602) + | 512 -> One (r446) + | 526 -> One (r447) + | 530 -> One (r448) + | 532 -> One (r449) + | 537 -> One (r450) + | 552 -> One (r451) + | 549 -> One (r452) + | 548 -> One (r453) + | 547 -> One (r454) + | 546 -> One (r455) + | 545 -> One (r456) + | 551 -> One (r457) + | 562 -> One (r458) + | 561 -> One (r459) + | 560 -> One (r460) + | 559 -> One (r461) + | 558 -> One (r462) + | 564 -> One (r463) + | 579 -> One (r464) + | 569 -> One (r465) + | 568 -> One (r466) + | 576 -> One (r467) + | 575 -> One (r468) + | 574 -> One (r469) + | 573 -> One (r470) + | 572 -> One (r471) + | 578 -> One (r472) + | 589 -> One (r473) + | 584 -> One (r474) + | 588 -> One (r476) + | 587 -> One (r477) + | 586 -> One (r478) + | 1406 -> One (r479) + | 1405 -> One (r480) + | 1404 -> One (r481) + | 592 -> One (r482) + | 1403 -> One (r483) + | 1332 -> One (r484) + | 1331 -> One (r485) + | 1330 -> One (r486) + | 1329 -> One (r487) + | 1328 -> One (r488) + | 595 -> One (r489) + | 1029 -> One (r490) + | 1402 -> One (r492) + | 1401 -> One (r493) + | 1400 -> One (r494) + | 1398 -> One (r495) + | 1397 -> One (r496) + | 1960 -> One (r497) + | 1327 -> One (r498) + | 682 -> One (r499) + | 681 -> One (r500) + | 598 -> One (r501) + | 597 -> One (r502) + | 669 -> One (r503) + | 667 -> One (r504) + | 666 -> One (r505) + | 600 -> One (r506) + | 602 -> One (r507) + | 665 -> One (r508) + | 664 -> One (r509) + | 604 -> One (r510) + | 663 -> One (r511) + | 662 -> One (r512) + | 614 -> One (r513) + | 612 -> One (r514) + | 611 -> One (r515) + | 608 -> One (r516) + | 642 -> One (r517) + | 641 -> One (r519) + | 635 -> One (r521) + | 634 -> One (r522) + | 633 -> One (r523) + | 632 -> One (r524) + | 631 -> One (r525) + | 658 -> One (r527) + | 659 -> One (r529) + | 622 -> One (r530) + | 621 -> One (r531) + | 618 -> One (r532) + | 617 -> One (r533) + | 625 -> One (r534) + | 624 -> One (r535) + | 629 -> One (r536) + | 628 -> One (r537) + | 627 -> One (r538) + | 640 -> One (r539) + | 645 -> One (r541) + | 644 -> One (r542) + | 647 -> One (r543) + | 651 -> One (r544) + | 654 -> One (r545) + | 653 -> One (r546) + | 655 | 694 -> One (r547) + | 657 -> One (r548) + | 661 -> One (r549) + | 671 -> One (r550) + | 676 -> One (r551) + | 675 -> One (r552) + | 1088 -> One (r553) + | 1326 -> One (r555) + | 1325 -> One (r556) + | 1322 -> One (r557) + | 1319 -> One (r558) + | 685 -> One (r559) + | 1318 -> One (r560) + | 1299 -> One (r561) + | 1298 -> One (r562) + | 1297 -> One (r563) + | 1302 -> One (r565) + | 1313 -> One (r567) + | 1312 -> One (r568) + | 693 -> One (r571) + | 1309 -> One (r572) + | 700 -> One (r573) + | 699 -> One (r574) + | 1308 -> One (r575) + | 703 -> One (r576) + | 702 -> One (r577) + | 706 -> One (r578) + | 711 -> One (r579) + | 710 -> One (r580) + | 709 | 1306 -> One (r581) + | 1305 -> One (r582) + | 720 -> One (r583) + | 719 -> One (r584) + | 718 -> One (r585) + | 717 -> One (r586) + | 716 -> One (r587) + | 715 -> One (r588) + | 1269 -> One (r589) + | 727 -> One (r590) + | 726 -> One (r591) + | 1268 -> One (r592) + | 1255 -> One (r593) + | 729 -> One (r594) + | 731 -> One (r595) + | 1092 | 1248 -> One (r596) + | 1091 | 1247 -> One (r597) + | 733 | 843 -> One (r598) + | 732 | 842 -> One (r599) + | 1240 -> One (r600) + | 1229 -> One (r601) + | 1228 -> One (r602) | 736 -> One (r603) - | 738 -> One (r604) - | 740 -> One (r605) - | 742 -> One (r606) - | 744 -> One (r607) - | 746 -> One (r608) - | 1403 -> One (r609) - | 771 -> One (r610) - | 748 -> One (r611) - | 753 -> One (r612) - | 752 -> One (r613) - | 751 -> One (r614) - | 756 -> One (r615) - | 755 -> One (r616) - | 758 -> One (r617) - | 760 -> One (r618) - | 762 -> One (r619) - | 764 -> One (r620) - | 769 -> One (r621) - | 1402 -> One (r622) - | 1401 -> One (r623) - | 773 -> One (r624) - | 775 -> One (r625) - | 777 -> One (r626) - | 794 -> One (r627) - | 793 -> One (r628) - | 812 -> One (r630) - | 811 -> One (r631) - | 810 -> One (r632) - | 790 -> One (r633) - | 789 -> One (r634) - | 788 -> One (r635) - | 785 -> One (r636) - | 782 -> One (r637) - | 781 -> One (r638) - | 780 -> One (r639) - | 779 -> One (r640) - | 784 -> One (r641) - | 787 -> One (r642) - | 809 -> One (r643) - | 800 -> One (r644) - | 799 -> One (r645) - | 792 -> One (r646) - | 798 -> One (r647) - | 797 -> One (r648) - | 796 -> One (r649) - | 806 -> One (r650) - | 805 -> One (r651) - | 804 -> One (r652) - | 803 -> One (r653) - | 802 -> One (r654) - | 808 -> One (r655) - | 1400 -> One (r656) - | 1399 -> One (r657) - | 814 -> One (r658) - | 1395 -> One (r659) - | 1394 -> One (r660) - | 816 -> One (r661) - | 821 -> One (r662) - | 820 -> One (r663) - | 819 -> One (r664) - | 818 -> One (r665) - | 834 -> One (r666) - | 837 -> One (r668) - | 836 -> One (r669) - | 833 -> One (r670) - | 832 -> One (r671) - | 826 -> One (r672) - | 825 -> One (r673) - | 824 -> One (r674) - | 823 -> One (r675) - | 831 -> One (r676) - | 830 -> One (r677) - | 829 -> One (r678) - | 879 -> One (r680) - | 878 -> One (r681) - | 877 -> One (r682) - | 872 -> One (r683) - | 893 -> One (r687) - | 892 -> One (r688) - | 891 -> One (r689) - | 1019 -> One (r690) - | 1018 -> One (r691) - | 1017 -> One (r692) - | 1016 -> One (r693) - | 871 -> One (r694) - | 870 -> One (r696) - | 866 -> One (r703) - | 863 -> One (r705) - | 862 -> One (r706) - | 860 -> One (r707) - | 859 -> One (r708) - | 858 -> One (r709) - | 857 -> One (r710) - | 853 -> One (r711) - | 852 -> One (r712) - | 856 -> One (r713) - | 855 -> One (r714) - | 869 -> One (r715) - | 868 -> One (r716) - | 876 -> One (r717) - | 890 -> One (r718) - | 886 -> One (r719) - | 882 -> One (r720) - | 885 -> One (r721) - | 884 -> One (r722) - | 889 -> One (r723) - | 888 -> One (r724) - | 1181 -> One (r725) - | 947 -> One (r726) - | 962 -> One (r728) - | 961 -> One (r729) - | 960 -> One (r730) - | 959 -> One (r731) - | 958 -> One (r732) - | 945 -> One (r736) - | 944 -> One (r737) - | 943 -> One (r738) - | 941 -> One (r739) - | 940 -> One (r740) - | 917 -> One (r742) - | 916 -> One (r743) - | 915 -> One (r744) - | 906 -> One (r745) - | 905 -> One (r746) - | 911 -> One (r747) - | 910 -> One (r748) - | 909 | 1725 -> One (r749) - | 913 | 1724 -> One (r750) - | 934 -> One (r751) - | 926 -> One (r752) - | 925 -> One (r753) - | 924 -> One (r754) - | 933 -> One (r755) - | 932 -> One (r756) - | 954 -> One (r757) - | 953 -> One (r758) - | 952 -> One (r759) - | 1180 -> One (r760) - | 973 -> One (r761) - | 972 -> One (r762) - | 971 -> One (r763) - | 970 -> One (r764) - | 969 -> One (r765) - | 968 -> One (r766) - | 967 -> One (r767) - | 966 -> One (r768) - | 1006 -> One (r769) - | 1005 -> One (r770) - | 1008 -> One (r772) - | 1007 -> One (r773) - | 1001 -> One (r774) - | 983 -> One (r775) - | 982 -> One (r776) - | 981 -> One (r777) - | 980 -> One (r778) - | 979 -> One (r779) - | 987 -> One (r783) - | 986 -> One (r784) - | 1000 -> One (r785) - | 992 -> One (r786) - | 991 -> One (r787) - | 990 -> One (r788) - | 989 -> One (r789) - | 999 -> One (r790) - | 998 -> One (r791) - | 997 -> One (r792) - | 996 -> One (r793) - | 995 -> One (r794) - | 994 -> One (r795) - | 1004 -> One (r796) - | 1003 -> One (r797) - | 1010 -> One (r798) - | 1015 -> One (r799) - | 1014 -> One (r800) - | 1013 -> One (r801) - | 1012 -> One (r802) - | 1075 | 1129 -> One (r804) - | 1131 -> One (r806) - | 1145 -> One (r808) - | 1135 -> One (r809) - | 1134 -> One (r810) - | 1116 -> One (r811) - | 1115 -> One (r812) - | 1114 -> One (r813) - | 1113 -> One (r814) - | 1112 -> One (r815) - | 1111 -> One (r816) - | 1110 -> One (r817) - | 1100 -> One (r818) - | 1099 -> One (r819) - | 1031 -> One (r820) - | 1030 -> One (r821) - | 1029 -> One (r822) - | 1025 -> One (r823) - | 1023 -> One (r824) - | 1022 -> One (r825) - | 1028 -> One (r826) - | 1027 -> One (r827) - | 1093 -> One (r828) - | 1092 -> One (r829) - | 1037 -> One (r830) - | 1033 -> One (r831) - | 1036 -> One (r832) - | 1035 -> One (r833) - | 1048 -> One (r834) - | 1047 -> One (r835) - | 1046 -> One (r836) - | 1045 -> One (r837) - | 1044 -> One (r838) - | 1039 -> One (r839) - | 1059 -> One (r840) - | 1058 -> One (r841) - | 1057 -> One (r842) - | 1056 -> One (r843) - | 1055 -> One (r844) - | 1050 -> One (r845) - | 1084 -> One (r846) - | 1083 -> One (r847) - | 1061 -> One (r848) - | 1082 -> One (r849) - | 1081 -> One (r850) - | 1080 -> One (r851) - | 1079 -> One (r852) - | 1063 -> One (r853) - | 1077 -> One (r854) - | 1067 -> One (r855) - | 1066 -> One (r856) - | 1065 -> One (r857) - | 1074 | 1122 -> One (r858) - | 1071 -> One (r860) - | 1070 -> One (r861) - | 1069 -> One (r862) - | 1068 | 1121 -> One (r863) - | 1073 -> One (r864) - | 1089 -> One (r865) - | 1088 -> One (r866) - | 1087 -> One (r867) - | 1091 -> One (r869) - | 1090 -> One (r870) - | 1086 -> One (r871) - | 1095 -> One (r872) - | 1098 -> One (r873) - | 1109 -> One (r874) - | 1108 -> One (r875) - | 1107 -> One (r876) - | 1106 -> One (r877) - | 1105 -> One (r878) - | 1104 -> One (r879) - | 1103 -> One (r880) - | 1102 -> One (r881) - | 1133 -> One (r882) - | 1120 -> One (r883) - | 1119 -> One (r884) - | 1118 -> One (r885) - | 1132 -> One (r886) - | 1124 -> One (r887) - | 1130 -> One (r888) - | 1127 -> One (r889) - | 1126 -> One (r890) - | 1144 -> One (r891) - | 1143 -> One (r892) - | 1142 -> One (r893) - | 1141 -> One (r894) - | 1140 -> One (r895) - | 1139 -> One (r896) - | 1138 -> One (r897) - | 1137 -> One (r898) - | 1154 -> One (r899) - | 1156 -> One (r900) - | 1166 -> One (r901) - | 1165 -> One (r902) - | 1164 -> One (r903) - | 1163 -> One (r904) - | 1162 -> One (r905) - | 1161 -> One (r906) - | 1160 -> One (r907) - | 1159 -> One (r908) - | 1177 -> One (r909) - | 1176 -> One (r910) - | 1175 -> One (r911) - | 1174 -> One (r912) - | 1173 -> One (r913) - | 1172 -> One (r914) - | 1171 -> One (r915) - | 1170 -> One (r916) - | 1169 -> One (r917) - | 1299 -> One (r918) - | 1348 -> One (r920) - | 1190 -> One (r921) - | 1365 -> One (r923) - | 1356 -> One (r924) - | 1355 -> One (r925) - | 1189 -> One (r926) - | 1188 -> One (r927) - | 1187 -> One (r928) - | 1186 -> One (r929) - | 1185 -> One (r930) - | 1342 -> One (r931) - | 1341 -> One (r932) - | 1193 -> One (r933) - | 1192 -> One (r934) - | 1218 -> One (r935) - | 1217 -> One (r936) - | 1216 -> One (r937) - | 1215 -> One (r938) - | 1206 -> One (r939) - | 1205 -> One (r941) - | 1204 -> One (r942) - | 1200 -> One (r943) - | 1199 -> One (r944) - | 1198 -> One (r945) - | 1197 -> One (r946) - | 1196 -> One (r947) - | 1203 -> One (r948) - | 1202 -> One (r949) - | 1214 -> One (r950) - | 1213 -> One (r951) - | 1212 -> One (r952) - | 1221 -> One (r953) - | 1220 -> One (r954) - | 1268 -> One (r955) - | 1257 -> One (r956) - | 1256 -> One (r957) - | 1247 -> One (r958) - | 1246 -> One (r960) - | 1245 -> One (r961) - | 1237 -> One (r962) - | 1226 -> One (r963) - | 1225 -> One (r964) - | 1224 -> One (r965) - | 1236 -> One (r966) - | 1235 -> One (r967) - | 1234 -> One (r968) - | 1233 -> One (r969) - | 1232 -> One (r970) - | 1231 -> One (r971) - | 1230 -> One (r972) - | 1229 -> One (r973) - | 1244 -> One (r974) - | 1242 -> One (r975) - | 1241 -> One (r976) - | 1255 -> One (r977) - | 1254 -> One (r978) - | 1253 -> One (r979) - | 1267 -> One (r980) - | 1266 -> One (r981) - | 1265 -> One (r982) - | 1264 -> One (r983) - | 1263 -> One (r984) - | 1262 -> One (r985) - | 1261 -> One (r986) - | 1260 -> One (r987) - | 1272 -> One (r988) - | 1271 -> One (r989) - | 1270 -> One (r990) - | 1336 -> One (r991) - | 1335 -> One (r992) - | 1334 -> One (r993) - | 1333 -> One (r994) - | 1332 -> One (r995) - | 1331 -> One (r996) - | 1328 -> One (r997) - | 1275 -> One (r998) - | 1324 -> One (r999) - | 1323 -> One (r1000) - | 1318 -> One (r1001) - | 1317 -> One (r1002) - | 1316 -> One (r1003) - | 1315 -> One (r1004) - | 1284 -> One (r1005) - | 1283 -> One (r1006) - | 1282 -> One (r1007) - | 1281 -> One (r1008) - | 1280 -> One (r1009) - | 1279 -> One (r1010) - | 1314 -> One (r1011) - | 1288 -> One (r1012) - | 1287 -> One (r1013) - | 1286 -> One (r1014) - | 1292 -> One (r1015) - | 1291 -> One (r1016) - | 1290 -> One (r1017) - | 1311 -> One (r1018) - | 1296 -> One (r1019) - | 1295 -> One (r1020) - | 1313 -> One (r1022) - | 1294 -> One (r1023) - | 1308 -> One (r1024) - | 1298 -> One (r1025) - | 1302 -> One (r1026) - | 1322 -> One (r1027) - | 1321 -> One (r1028) - | 1320 -> One (r1029) - | 1327 -> One (r1030) - | 1326 -> One (r1031) - | 1330 -> One (r1032) - | 1340 -> One (r1033) - | 1339 -> One (r1034) - | 1338 -> One (r1035) - | 1344 -> One (r1036) - | 1347 -> One (r1037) - | 1352 -> One (r1038) - | 1351 -> One (r1039) - | 1350 -> One (r1040) - | 1354 -> One (r1041) - | 1364 -> One (r1042) - | 1363 -> One (r1043) - | 1362 -> One (r1044) - | 1361 -> One (r1045) - | 1360 -> One (r1046) - | 1359 -> One (r1047) - | 1358 -> One (r1048) - | 1381 -> One (r1049) - | 1385 -> One (r1050) - | 1387 -> One (r1051) - | 1393 -> One (r1052) - | 1392 -> One (r1053) - | 1407 | 1450 -> One (r1054) - | 1406 | 1449 -> One (r1055) - | 1405 | 1448 -> One (r1056) - | 1410 | 1455 -> One (r1057) - | 1409 | 1454 -> One (r1058) - | 1408 | 1453 -> One (r1059) - | 1415 | 1462 -> One (r1060) - | 1414 | 1461 -> One (r1061) - | 1413 | 1460 -> One (r1062) - | 1412 | 1459 -> One (r1063) - | 1421 | 1467 -> One (r1064) - | 1420 | 1466 -> One (r1065) - | 1419 | 1465 -> One (r1066) - | 1424 | 1472 -> One (r1067) - | 1423 | 1471 -> One (r1068) - | 1422 | 1470 -> One (r1069) - | 1431 -> One (r1070) - | 1434 | 1484 -> One (r1071) - | 1433 | 1483 -> One (r1072) - | 1432 | 1482 -> One (r1073) - | 1436 -> One (r1074) - | 1439 | 1487 -> One (r1075) - | 1438 | 1486 -> One (r1076) - | 1437 | 1485 -> One (r1077) - | 1441 -> One (r1078) - | 1447 -> One (r1079) - | 1452 -> One (r1080) - | 1457 -> One (r1081) - | 1464 -> One (r1082) - | 1469 -> One (r1083) - | 1474 -> One (r1084) - | 1477 -> One (r1085) - | 1491 -> One (r1086) - | 1490 -> One (r1087) - | 1496 -> One (r1088) - | 1500 -> One (r1089) - | 1502 -> One (r1090) - | 1504 -> One (r1091) - | 1506 -> One (r1092) - | 1508 -> One (r1093) - | 1511 -> One (r1095) - | 1510 -> One (r1096) - | 1524 -> One (r1097) - | 1523 -> One (r1098) - | 1515 -> One (r1099) - | 1514 -> One (r1100) - | 1546 -> One (r1101) - | 1545 -> One (r1102) - | 1544 -> One (r1103) - | 1543 -> One (r1104) - | 1542 -> One (r1105) - | 1541 -> One (r1106) - | 1558 -> One (r1107) - | 1551 -> One (r1108) - | 1550 -> One (r1109) - | 1555 -> One (r1110) - | 1554 -> One (r1111) - | 1553 -> One (r1112) - | 1557 -> One (r1113) - | 1571 -> One (r1114) - | 1577 -> One (r1115) - | 1580 -> One (r1116) - | 1593 -> One (r1117) - | 1608 -> One (r1118) - | 1607 -> One (r1119) - | 1606 -> One (r1120) - | 1605 -> One (r1121) - | 1604 -> One (r1122) - | 1603 -> One (r1123) - | 1616 -> One (r1124) - | 1615 -> One (r1125) - | 1614 -> One (r1126) - | 1613 -> One (r1127) - | 1612 -> One (r1128) - | 1611 -> One (r1129) - | 1610 -> One (r1130) - | 1630 -> One (r1131) - | 1629 -> One (r1132) - | 1628 -> One (r1133) - | 1627 -> One (r1134) - | 1626 -> One (r1135) - | 1635 -> One (r1136) - | 1634 -> One (r1137) - | 1633 -> One (r1138) - | 1632 -> One (r1139) - | 1638 -> One (r1140) - | 1637 -> One (r1141) - | 1645 -> One (r1142) - | 1651 -> One (r1143) - | 1650 -> One (r1144) - | 1649 -> One (r1145) - | 1648 -> One (r1146) - | 1654 -> One (r1147) - | 1653 -> One (r1148) - | 1658 -> One (r1149) - | 1669 -> One (r1150) - | 1668 -> One (r1151) - | 1672 -> One (r1152) - | 1671 -> One (r1153) - | 1675 -> One (r1154) - | 1674 -> One (r1155) - | 1684 -> One (r1156) - | 1683 -> One (r1157) - | 1691 -> One (r1158) - | 1699 -> One (r1159) - | 1707 -> One (r1160) - | 1704 -> One (r1161) - | 1706 -> One (r1162) - | 1709 -> One (r1163) - | 1711 -> One (r1164) - | 1713 -> One (r1165) - | 1716 -> One (r1166) - | 1715 -> One (r1167) - | 1728 -> One (r1168) - | 1727 -> One (r1169) - | 1740 -> One (r1170) - | 1739 -> One (r1171) - | 1763 -> One (r1172) - | 1762 -> One (r1173) - | 1772 -> One (r1174) - | 1774 -> One (r1175) - | 1776 -> One (r1176) - | 1789 -> One (r1177) - | 1793 -> One (r1178) - | 1798 -> One (r1179) - | 1805 -> One (r1180) - | 1804 -> One (r1181) - | 1803 -> One (r1182) - | 1802 -> One (r1183) - | 1812 -> One (r1184) - | 1816 -> One (r1185) - | 1820 -> One (r1186) - | 1823 -> One (r1187) - | 1828 -> One (r1188) - | 1832 -> One (r1189) - | 1836 -> One (r1190) - | 1840 -> One (r1191) - | 1844 -> One (r1192) - | 1847 -> One (r1193) - | 1851 -> One (r1194) - | 1856 -> One (r1195) - | 1866 -> One (r1196) - | 1868 -> One (r1197) - | 1871 -> One (r1198) - | 1870 -> One (r1199) - | 1873 -> One (r1200) - | 1883 -> One (r1201) - | 1879 -> One (r1202) - | 1878 -> One (r1203) - | 1882 -> One (r1204) - | 1881 -> One (r1205) - | 1888 -> One (r1206) - | 1887 -> One (r1207) - | 1886 -> One (r1208) - | 1890 -> One (r1209) - | 363 -> Select (function - | -1 -> [R 107] - | _ -> S (T T_DOT) :: r328) - | 604 -> Select (function - | -1 -> [R 107] - | _ -> r533) + | 735 -> One (r604) + | 1227 -> One (r605) + | 739 -> One (r606) + | 738 -> One (r607) + | 1226 -> One (r608) + | 1222 -> One (r609) + | 1221 -> One (r610) + | 1220 -> One (r611) + | 763 -> One (r612) + | 765 -> One (r614) + | 1056 -> One (r616) + | 764 -> One (r618) + | 1054 -> One (r620) + | 1219 -> One (r622) + | 771 -> One (r623) + | 770 -> One (r624) + | 767 -> One (r625) + | 745 -> One (r626) + | 744 -> One (r627) + | 747 -> One (r628) + | 756 -> One (r630) + | 754 -> One (r631) + | 753 -> One (r632) + | 752 -> One (r633) + | 751 -> One (r634) + | 760 -> One (r635) + | 759 -> One (r636) + | 762 -> One (r637) + | 769 -> One (r638) + | 775 -> One (r639) + | 774 -> One (r640) + | 773 -> One (r641) + | 1218 -> One (r642) + | 782 -> One (r643) + | 781 -> One (r644) + | 780 -> One (r645) + | 779 -> One (r646) + | 784 -> One (r647) + | 786 -> One (r648) + | 1120 | 1195 -> One (r649) + | 1119 | 1194 -> One (r650) + | 788 | 1118 -> One (r651) + | 787 | 1117 -> One (r652) + | 1188 -> One (r653) + | 1193 -> One (r655) + | 1192 -> One (r656) + | 1191 -> One (r657) + | 1190 -> One (r658) + | 1189 -> One (r659) + | 1186 -> One (r660) + | 793 -> One (r661) + | 792 -> One (r662) + | 791 -> One (r663) + | 790 -> One (r664) + | 797 -> One (r665) + | 796 -> One (r666) + | 795 -> One (r667) + | 800 -> One (r668) + | 799 -> One (r669) + | 802 -> One (r670) + | 804 -> One (r671) + | 811 -> One (r672) + | 818 -> One (r673) + | 821 -> One (r675) + | 820 -> One (r676) + | 813 -> One (r677) + | 817 -> One (r678) + | 1185 -> One (r679) + | 827 -> One (r680) + | 826 -> One (r681) + | 825 -> One (r682) + | 835 -> One (r683) + | 834 -> One (r684) + | 833 -> One (r685) + | 832 -> One (r686) + | 837 -> One (r687) + | 839 -> One (r688) + | 841 -> One (r689) + | 847 -> One (r690) + | 846 -> One (r691) + | 845 -> One (r692) + | 1087 -> One (r693) + | 857 -> One (r694) + | 856 -> One (r695) + | 855 -> One (r696) + | 854 -> One (r697) + | 859 -> One (r698) + | 863 -> One (r699) + | 862 -> One (r700) + | 861 -> One (r701) + | 865 -> One (r702) + | 870 -> One (r703) + | 869 -> One (r704) + | 878 -> One (r705) + | 877 -> One (r706) + | 876 -> One (r707) + | 875 -> One (r708) + | 884 -> One (r709) + | 883 -> One (r710) + | 882 -> One (r711) + | 881 -> One (r712) + | 893 -> One (r713) + | 892 -> One (r714) + | 891 -> One (r715) + | 890 -> One (r716) + | 897 -> One (r717) + | 896 -> One (r718) + | 904 -> One (r719) + | 903 -> One (r720) + | 902 -> One (r721) + | 901 -> One (r722) + | 910 -> One (r723) + | 909 -> One (r724) + | 908 -> One (r725) + | 907 -> One (r726) + | 916 -> One (r727) + | 915 -> One (r728) + | 914 -> One (r729) + | 913 -> One (r730) + | 922 -> One (r731) + | 921 -> One (r732) + | 920 -> One (r733) + | 919 -> One (r734) + | 928 -> One (r735) + | 927 -> One (r736) + | 926 -> One (r737) + | 925 -> One (r738) + | 934 -> One (r739) + | 933 -> One (r740) + | 932 -> One (r741) + | 931 -> One (r742) + | 940 -> One (r743) + | 939 -> One (r744) + | 938 -> One (r745) + | 937 -> One (r746) + | 946 -> One (r747) + | 945 -> One (r748) + | 944 -> One (r749) + | 943 -> One (r750) + | 952 -> One (r751) + | 951 -> One (r752) + | 950 -> One (r753) + | 949 -> One (r754) + | 958 -> One (r755) + | 957 -> One (r756) + | 956 -> One (r757) + | 955 -> One (r758) + | 964 -> One (r759) + | 963 -> One (r760) + | 962 -> One (r761) + | 961 -> One (r762) + | 970 -> One (r763) + | 969 -> One (r764) + | 968 -> One (r765) + | 967 -> One (r766) + | 976 -> One (r767) + | 975 -> One (r768) + | 974 -> One (r769) + | 973 -> One (r770) + | 982 -> One (r771) + | 981 -> One (r772) + | 980 -> One (r773) + | 979 -> One (r774) + | 988 -> One (r775) + | 987 -> One (r776) + | 986 -> One (r777) + | 985 -> One (r778) + | 994 -> One (r779) + | 993 -> One (r780) + | 992 -> One (r781) + | 991 -> One (r782) + | 1000 -> One (r783) + | 999 -> One (r784) + | 998 -> One (r785) + | 997 -> One (r786) + | 1006 -> One (r787) + | 1005 -> One (r788) + | 1004 -> One (r789) + | 1003 -> One (r790) + | 1020 -> One (r791) + | 1013 -> One (r792) + | 1012 -> One (r793) + | 1011 -> One (r794) + | 1010 -> One (r795) + | 1015 -> One (r796) + | 1019 -> One (r797) + | 1018 -> One (r798) + | 1017 -> One (r799) + | 1026 -> One (r800) + | 1025 -> One (r801) + | 1024 -> One (r802) + | 1023 -> One (r803) + | 1085 -> One (r804) + | 1082 -> One (r805) + | 1028 -> One (r806) + | 1031 -> One (r807) + | 1030 -> One (r808) + | 1038 -> One (r809) + | 1037 -> One (r810) + | 1036 -> One (r811) + | 1035 -> One (r812) + | 1034 -> One (r813) + | 1045 -> One (r814) + | 1044 -> One (r815) + | 1043 -> One (r816) + | 1042 -> One (r817) + | 1041 -> One (r818) + | 1048 -> One (r819) + | 1047 -> One (r820) + | 1055 -> One (r821) + | 1053 -> One (r822) + | 1052 -> One (r823) + | 1061 -> One (r824) + | 1060 -> One (r825) + | 1059 -> One (r826) + | 1064 -> One (r827) + | 1063 -> One (r828) + | 1075 -> One (r829) + | 1072 -> One (r830) + | 1071 -> One (r831) + | 1070 -> One (r832) + | 1069 -> One (r833) + | 1068 -> One (r834) + | 1074 -> One (r835) + | 1078 -> One (r836) + | 1080 -> One (r837) + | 1084 -> One (r838) + | 1098 -> One (r839) + | 1097 -> One (r840) + | 1096 -> One (r841) + | 1095 -> One (r842) + | 1101 | 1251 -> One (r843) + | 1100 | 1250 -> One (r844) + | 1099 | 1249 -> One (r845) + | 1107 -> One (r846) + | 1106 -> One (r847) + | 1105 -> One (r848) + | 1104 -> One (r849) + | 1110 | 1254 -> One (r850) + | 1109 | 1253 -> One (r851) + | 1108 | 1252 -> One (r852) + | 1116 -> One (r853) + | 1115 -> One (r854) + | 1114 -> One (r855) + | 1113 -> One (r856) + | 1126 -> One (r857) + | 1125 -> One (r858) + | 1124 -> One (r859) + | 1123 -> One (r860) + | 1129 | 1198 -> One (r861) + | 1128 | 1197 -> One (r862) + | 1127 | 1196 -> One (r863) + | 1135 -> One (r864) + | 1134 -> One (r865) + | 1133 -> One (r866) + | 1132 -> One (r867) + | 1138 | 1201 -> One (r868) + | 1137 | 1200 -> One (r869) + | 1136 | 1199 -> One (r870) + | 1144 -> One (r871) + | 1143 -> One (r872) + | 1142 -> One (r873) + | 1141 -> One (r874) + | 1149 | 1206 -> One (r875) + | 1148 | 1205 -> One (r876) + | 1147 | 1204 -> One (r877) + | 1146 | 1203 -> One (r878) + | 1155 -> One (r879) + | 1154 -> One (r880) + | 1153 -> One (r881) + | 1152 -> One (r882) + | 1158 | 1209 -> One (r883) + | 1157 | 1208 -> One (r884) + | 1156 | 1207 -> One (r885) + | 1164 -> One (r886) + | 1163 -> One (r887) + | 1162 -> One (r888) + | 1161 -> One (r889) + | 1167 | 1212 -> One (r890) + | 1166 | 1211 -> One (r891) + | 1165 | 1210 -> One (r892) + | 1173 -> One (r893) + | 1172 -> One (r894) + | 1171 -> One (r895) + | 1170 -> One (r896) + | 1180 -> One (r897) + | 1179 -> One (r898) + | 1178 -> One (r899) + | 1177 -> One (r900) + | 1217 -> One (r901) + | 1216 -> One (r902) + | 1215 -> One (r903) + | 1233 -> One (r904) + | 1232 -> One (r905) + | 1231 -> One (r906) + | 1239 -> One (r907) + | 1238 -> One (r908) + | 1237 -> One (r909) + | 1236 -> One (r910) + | 1246 -> One (r911) + | 1245 -> One (r912) + | 1244 -> One (r913) + | 1243 -> One (r914) + | 1261 -> One (r915) + | 1260 -> One (r916) + | 1259 -> One (r917) + | 1258 -> One (r918) + | 1263 -> One (r919) + | 1267 -> One (r920) + | 1266 -> One (r921) + | 1265 -> One (r922) + | 1272 -> One (r923) + | 1271 -> One (r924) + | 1277 -> One (r925) + | 1281 -> One (r926) + | 1283 -> One (r927) + | 1285 -> One (r928) + | 1287 -> One (r929) + | 1289 -> One (r930) + | 1292 -> One (r932) + | 1291 -> One (r933) + | 1304 -> One (r934) + | 1303 -> One (r935) + | 1296 -> One (r936) + | 1295 -> One (r937) + | 1311 -> One (r938) + | 1317 -> One (r939) + | 1316 -> One (r940) + | 1315 -> One (r941) + | 1324 -> One (r942) + | 1338 -> One (r943) + | 1337 -> One (r944) + | 1345 -> One (r946) + | 1344 -> One (r947) + | 1343 -> One (r948) + | 1336 -> One (r949) + | 1335 -> One (r950) + | 1334 -> One (r951) + | 1342 -> One (r952) + | 1341 -> One (r953) + | 1340 -> One (r954) + | 1347 -> One (r955) + | 1395 -> One (r956) + | 1394 -> One (r957) + | 1393 -> One (r958) + | 1392 -> One (r959) + | 1356 -> One (r960) + | 1350 -> One (r961) + | 1349 -> One (r962) + | 1380 -> One (r963) + | 1379 -> One (r965) + | 1375 -> One (r972) + | 1372 -> One (r974) + | 1371 -> One (r975) + | 1369 -> One (r976) + | 1368 -> One (r977) + | 1367 -> One (r978) + | 1366 -> One (r979) + | 1362 -> One (r980) + | 1361 -> One (r981) + | 1365 -> One (r982) + | 1364 -> One (r983) + | 1378 -> One (r984) + | 1377 -> One (r985) + | 1391 -> One (r986) + | 1387 -> One (r987) + | 1383 -> One (r988) + | 1386 -> One (r989) + | 1385 -> One (r990) + | 1390 -> One (r991) + | 1389 -> One (r992) + | 1411 -> One (r993) + | 1410 -> One (r994) + | 1409 -> One (r995) + | 1415 -> One (r996) + | 1421 -> One (r997) + | 1420 -> One (r998) + | 1419 -> One (r999) + | 1418 -> One (r1000) + | 1424 -> One (r1001) + | 1423 -> One (r1002) + | 1428 -> One (r1003) + | 1439 -> One (r1004) + | 1438 -> One (r1005) + | 1437 -> One (r1006) + | 1436 -> One (r1007) + | 1442 -> One (r1008) + | 1441 -> One (r1009) + | 1445 -> One (r1010) + | 1444 -> One (r1011) + | 1448 -> One (r1012) + | 1447 -> One (r1013) + | 1453 -> One (r1014) + | 1452 -> One (r1015) + | 1456 -> One (r1016) + | 1455 -> One (r1017) + | 1459 -> One (r1018) + | 1458 -> One (r1019) + | 1490 -> One (r1020) + | 1489 -> One (r1021) + | 1488 -> One (r1022) + | 1476 -> One (r1023) + | 1475 -> One (r1024) + | 1474 -> One (r1025) + | 1473 -> One (r1026) + | 1470 -> One (r1027) + | 1469 -> One (r1028) + | 1468 -> One (r1029) + | 1467 -> One (r1030) + | 1472 -> One (r1031) + | 1487 -> One (r1032) + | 1480 -> One (r1033) + | 1479 -> One (r1034) + | 1478 -> One (r1035) + | 1486 -> One (r1036) + | 1485 -> One (r1037) + | 1484 -> One (r1038) + | 1483 -> One (r1039) + | 1482 -> One (r1040) + | 1984 -> One (r1041) + | 1983 -> One (r1042) + | 1492 -> One (r1043) + | 1494 -> One (r1044) + | 1496 -> One (r1045) + | 1982 -> One (r1046) + | 1981 -> One (r1047) + | 1498 -> One (r1048) + | 1503 -> One (r1049) + | 1502 -> One (r1050) + | 1501 -> One (r1051) + | 1500 -> One (r1052) + | 1514 -> One (r1053) + | 1517 -> One (r1055) + | 1516 -> One (r1056) + | 1513 -> One (r1057) + | 1512 -> One (r1058) + | 1508 -> One (r1059) + | 1507 -> One (r1060) + | 1506 -> One (r1061) + | 1505 -> One (r1062) + | 1511 -> One (r1063) + | 1510 -> One (r1064) + | 1530 -> One (r1066) + | 1529 -> One (r1067) + | 1528 -> One (r1068) + | 1523 -> One (r1069) + | 1533 -> One (r1073) + | 1532 -> One (r1074) + | 1531 -> One (r1075) + | 1591 -> One (r1076) + | 1590 -> One (r1077) + | 1589 -> One (r1078) + | 1588 -> One (r1079) + | 1527 -> One (r1080) + | 1784 -> One (r1081) + | 1783 -> One (r1082) + | 1545 -> One (r1083) + | 1544 -> One (r1084) + | 1543 -> One (r1085) + | 1542 -> One (r1086) + | 1541 -> One (r1087) + | 1540 -> One (r1088) + | 1539 -> One (r1089) + | 1538 -> One (r1090) + | 1578 -> One (r1091) + | 1577 -> One (r1092) + | 1580 -> One (r1094) + | 1579 -> One (r1095) + | 1573 -> One (r1096) + | 1555 -> One (r1097) + | 1554 -> One (r1098) + | 1553 -> One (r1099) + | 1552 -> One (r1100) + | 1551 -> One (r1101) + | 1559 -> One (r1105) + | 1558 -> One (r1106) + | 1572 -> One (r1107) + | 1564 -> One (r1108) + | 1563 -> One (r1109) + | 1562 -> One (r1110) + | 1561 -> One (r1111) + | 1571 -> One (r1112) + | 1570 -> One (r1113) + | 1569 -> One (r1114) + | 1568 -> One (r1115) + | 1567 -> One (r1116) + | 1566 -> One (r1117) + | 1576 -> One (r1118) + | 1575 -> One (r1119) + | 1582 -> One (r1120) + | 1587 -> One (r1121) + | 1586 -> One (r1122) + | 1585 -> One (r1123) + | 1584 -> One (r1124) + | 1647 | 1701 -> One (r1126) + | 1703 -> One (r1128) + | 1717 -> One (r1130) + | 1707 -> One (r1131) + | 1706 -> One (r1132) + | 1688 -> One (r1133) + | 1687 -> One (r1134) + | 1686 -> One (r1135) + | 1685 -> One (r1136) + | 1684 -> One (r1137) + | 1683 -> One (r1138) + | 1682 -> One (r1139) + | 1672 -> One (r1140) + | 1671 -> One (r1141) + | 1603 -> One (r1142) + | 1602 -> One (r1143) + | 1601 -> One (r1144) + | 1597 -> One (r1145) + | 1595 -> One (r1146) + | 1594 -> One (r1147) + | 1600 -> One (r1148) + | 1599 -> One (r1149) + | 1665 -> One (r1150) + | 1664 -> One (r1151) + | 1609 -> One (r1152) + | 1605 -> One (r1153) + | 1608 -> One (r1154) + | 1607 -> One (r1155) + | 1620 -> One (r1156) + | 1619 -> One (r1157) + | 1618 -> One (r1158) + | 1617 -> One (r1159) + | 1616 -> One (r1160) + | 1611 -> One (r1161) + | 1631 -> One (r1162) + | 1630 -> One (r1163) + | 1629 -> One (r1164) + | 1628 -> One (r1165) + | 1627 -> One (r1166) + | 1622 -> One (r1167) + | 1656 -> One (r1168) + | 1655 -> One (r1169) + | 1633 -> One (r1170) + | 1654 -> One (r1171) + | 1653 -> One (r1172) + | 1652 -> One (r1173) + | 1651 -> One (r1174) + | 1635 -> One (r1175) + | 1649 -> One (r1176) + | 1639 -> One (r1177) + | 1638 -> One (r1178) + | 1637 -> One (r1179) + | 1646 | 1694 -> One (r1180) + | 1643 -> One (r1182) + | 1642 -> One (r1183) + | 1641 -> One (r1184) + | 1640 | 1693 -> One (r1185) + | 1645 -> One (r1186) + | 1661 -> One (r1187) + | 1660 -> One (r1188) + | 1659 -> One (r1189) + | 1663 -> One (r1191) + | 1662 -> One (r1192) + | 1658 -> One (r1193) + | 1667 -> One (r1194) + | 1670 -> One (r1195) + | 1681 -> One (r1196) + | 1680 -> One (r1197) + | 1679 -> One (r1198) + | 1678 -> One (r1199) + | 1677 -> One (r1200) + | 1676 -> One (r1201) + | 1675 -> One (r1202) + | 1674 -> One (r1203) + | 1705 -> One (r1204) + | 1692 -> One (r1205) + | 1691 -> One (r1206) + | 1690 -> One (r1207) + | 1704 -> One (r1208) + | 1696 -> One (r1209) + | 1702 -> One (r1210) + | 1699 -> One (r1211) + | 1698 -> One (r1212) + | 1716 -> One (r1213) + | 1715 -> One (r1214) + | 1714 -> One (r1215) + | 1713 -> One (r1216) + | 1712 -> One (r1217) + | 1711 -> One (r1218) + | 1710 -> One (r1219) + | 1709 -> One (r1220) + | 1726 -> One (r1221) + | 1728 -> One (r1222) + | 1738 -> One (r1223) + | 1737 -> One (r1224) + | 1736 -> One (r1225) + | 1735 -> One (r1226) + | 1734 -> One (r1227) + | 1733 -> One (r1228) + | 1732 -> One (r1229) + | 1731 -> One (r1230) + | 1780 -> One (r1231) + | 1760 -> One (r1232) + | 1759 -> One (r1233) + | 1758 -> One (r1234) + | 1757 -> One (r1235) + | 1744 -> One (r1236) + | 1743 -> One (r1237) + | 1742 -> One (r1238) + | 1741 -> One (r1239) + | 1748 -> One (r1240) + | 1747 -> One (r1241) + | 1753 -> One (r1242) + | 1752 -> One (r1243) + | 1751 | 2051 -> One (r1244) + | 1755 | 2050 -> One (r1245) + | 1777 -> One (r1246) + | 1769 -> One (r1247) + | 1768 -> One (r1248) + | 1767 -> One (r1249) + | 1776 -> One (r1250) + | 1775 -> One (r1251) + | 1896 -> One (r1252) + | 1940 -> One (r1254) + | 1793 -> One (r1255) + | 1957 -> One (r1257) + | 1948 -> One (r1258) + | 1947 -> One (r1259) + | 1792 -> One (r1260) + | 1791 -> One (r1261) + | 1790 -> One (r1262) + | 1789 -> One (r1263) + | 1788 -> One (r1264) + | 1934 -> One (r1265) + | 1933 -> One (r1266) + | 1796 -> One (r1267) + | 1795 -> One (r1268) + | 1821 -> One (r1269) + | 1820 -> One (r1270) + | 1819 -> One (r1271) + | 1818 -> One (r1272) + | 1809 -> One (r1273) + | 1808 -> One (r1275) + | 1807 -> One (r1276) + | 1803 -> One (r1277) + | 1802 -> One (r1278) + | 1801 -> One (r1279) + | 1800 -> One (r1280) + | 1799 -> One (r1281) + | 1806 -> One (r1282) + | 1805 -> One (r1283) + | 1817 -> One (r1284) + | 1816 -> One (r1285) + | 1815 -> One (r1286) + | 1824 -> One (r1287) + | 1823 -> One (r1288) + | 1865 -> One (r1290) + | 1854 -> One (r1291) + | 1853 -> One (r1292) + | 1844 -> One (r1293) + | 1843 -> One (r1295) + | 1842 -> One (r1296) + | 1841 -> One (r1297) + | 1830 -> One (r1298) + | 1829 -> One (r1299) + | 1827 -> One (r1300) + | 1840 -> One (r1301) + | 1839 -> One (r1302) + | 1838 -> One (r1303) + | 1837 -> One (r1304) + | 1836 -> One (r1305) + | 1835 -> One (r1306) + | 1834 -> One (r1307) + | 1833 -> One (r1308) + | 1852 -> One (r1309) + | 1851 -> One (r1310) + | 1850 -> One (r1311) + | 1864 -> One (r1312) + | 1863 -> One (r1313) + | 1862 -> One (r1314) + | 1861 -> One (r1315) + | 1860 -> One (r1316) + | 1859 -> One (r1317) + | 1858 -> One (r1318) + | 1857 -> One (r1319) + | 1869 -> One (r1320) + | 1868 -> One (r1321) + | 1867 -> One (r1322) + | 1928 -> One (r1323) + | 1927 -> One (r1324) + | 1926 -> One (r1325) + | 1925 -> One (r1326) + | 1924 -> One (r1327) + | 1923 -> One (r1328) + | 1920 -> One (r1329) + | 1872 -> One (r1330) + | 1916 -> One (r1331) + | 1915 -> One (r1332) + | 1910 -> One (r1333) + | 1909 -> One (r1334) + | 1908 -> One (r1335) + | 1907 -> One (r1336) + | 1881 -> One (r1337) + | 1880 -> One (r1338) + | 1879 -> One (r1339) + | 1878 -> One (r1340) + | 1877 -> One (r1341) + | 1876 -> One (r1342) + | 1906 -> One (r1343) + | 1885 -> One (r1344) + | 1884 -> One (r1345) + | 1883 -> One (r1346) + | 1889 -> One (r1347) + | 1888 -> One (r1348) + | 1887 -> One (r1349) + | 1903 -> One (r1350) + | 1893 -> One (r1351) + | 1892 -> One (r1352) + | 1905 -> One (r1354) + | 1891 -> One (r1355) + | 1900 -> One (r1356) + | 1895 -> One (r1357) + | 1914 -> One (r1358) + | 1913 -> One (r1359) + | 1912 -> One (r1360) + | 1919 -> One (r1361) + | 1918 -> One (r1362) + | 1922 -> One (r1363) + | 1932 -> One (r1364) + | 1931 -> One (r1365) + | 1930 -> One (r1366) + | 1936 -> One (r1367) + | 1939 -> One (r1368) + | 1944 -> One (r1369) + | 1943 -> One (r1370) + | 1942 -> One (r1371) + | 1946 -> One (r1372) + | 1956 -> One (r1373) + | 1955 -> One (r1374) + | 1954 -> One (r1375) + | 1953 -> One (r1376) + | 1952 -> One (r1377) + | 1951 -> One (r1378) + | 1950 -> One (r1379) + | 1966 -> One (r1380) + | 1969 -> One (r1381) + | 1971 -> One (r1382) + | 1977 -> One (r1383) + | 1976 -> One (r1384) + | 1987 -> One (r1385) + | 1986 -> One (r1386) + | 1995 -> One (r1387) + | 2006 -> One (r1388) + | 2005 -> One (r1389) + | 2004 -> One (r1390) + | 2003 -> One (r1391) + | 2002 -> One (r1392) + | 2008 -> One (r1393) + | 2015 -> One (r1394) + | 2014 -> One (r1395) + | 2020 -> One (r1396) + | 2024 -> One (r1397) + | 2023 -> One (r1398) + | 2022 -> One (r1399) + | 2033 -> One (r1400) + | 2032 -> One (r1401) + | 2031 -> One (r1402) + | 2030 -> One (r1403) + | 2035 -> One (r1404) + | 2039 -> One (r1405) + | 2038 -> One (r1406) + | 2037 -> One (r1407) + | 2054 -> One (r1408) + | 2053 -> One (r1409) + | 2066 -> One (r1410) + | 2065 -> One (r1411) + | 2082 -> One (r1412) + | 2090 -> One (r1413) + | 2093 -> One (r1414) + | 2092 -> One (r1415) + | 2098 -> One (r1416) + | 2103 -> One (r1417) + | 2100 -> One (r1418) + | 2102 -> One (r1419) + | 2105 -> One (r1420) + | 2108 -> One (r1421) + | 2111 -> One (r1422) + | 2110 -> One (r1423) + | 2119 -> One (r1424) + | 2118 -> One (r1425) + | 2117 -> One (r1426) + | 2133 -> One (r1427) + | 2132 -> One (r1428) + | 2131 -> One (r1429) + | 2153 -> One (r1430) + | 2157 -> One (r1431) + | 2162 -> One (r1432) + | 2169 -> One (r1433) + | 2168 -> One (r1434) + | 2167 -> One (r1435) + | 2166 -> One (r1436) + | 2176 -> One (r1437) + | 2180 -> One (r1438) + | 2184 -> One (r1439) + | 2187 -> One (r1440) + | 2192 -> One (r1441) + | 2196 -> One (r1442) + | 2200 -> One (r1443) + | 2204 -> One (r1444) + | 2208 -> One (r1445) + | 2211 -> One (r1446) + | 2215 -> One (r1447) + | 2220 -> One (r1448) + | 2230 -> One (r1449) + | 2232 -> One (r1450) + | 2235 -> One (r1451) + | 2234 -> One (r1452) + | 2237 -> One (r1453) + | 2247 -> One (r1454) + | 2243 -> One (r1455) + | 2242 -> One (r1456) + | 2246 -> One (r1457) + | 2245 -> One (r1458) + | 2252 -> One (r1459) + | 2251 -> One (r1460) + | 2250 -> One (r1461) + | 2254 -> One (r1462) + | 425 -> Select (function + | -1 -> [R 98] + | _ -> S (T T_DOT) :: r396) + | 708 -> Select (function + | -1 -> [R 98] + | _ -> r582) + | 131 -> Select (function + | -1 -> r82 + | _ -> R 124 :: r104) | 173 -> Select (function - | -1 -> r152 - | _ -> R 187 :: r144) - | 839 -> Select (function - | -1 -> r693 - | _ -> R 187 :: r686) - | 896 -> Select (function - | -1 -> r152 - | _ -> R 187 :: r735) - | 975 -> Select (function - | -1 -> r640 - | _ -> R 187 :: r782) - | 508 -> Select (function - | -1 -> r278 - | _ -> [R 221]) - | 381 -> Select (function - | -1 -> [R 693] - | _ -> S (N N_pattern) :: r336) - | 378 -> Select (function - | -1 -> [R 694] - | _ -> S (N N_pattern) :: r335) - | 179 -> Select (function - | -1 -> r164 - | _ -> R 801 :: r158) - | 899 -> Select (function - | -1 -> r164 - | _ -> R 801 :: r741) - | 873 -> Select (function - | -1 -> S (T T_RPAREN) :: r54 - | _ -> S (T T_COLONCOLON) :: r344) - | 87 -> Select (function - | 252 | 442 | 619 | 748 | 1281 | 1320 | 1371 | 1495 -> r61 - | -1 -> S (T T_RPAREN) :: r54 - | _ -> S (N N_pattern) :: r56) - | 243 -> Select (function - | -1 -> S (T T_RPAREN) :: r54 - | _ -> Sub (r1) :: r232) - | 254 -> Select (function - | -1 -> S (T T_RBRACKET) :: r243 - | _ -> Sub (r245) :: r247) - | 550 -> Select (function - | -1 -> S (T T_RBRACKET) :: r243 - | _ -> Sub (r458) :: r460) - | 462 -> Select (function - | 60 | 172 | 210 | 773 | 814 | 816 -> r401 - | _ -> S (T T_OPEN) :: r395) - | 875 -> Select (function - | -1 -> r451 - | _ -> S (T T_LPAREN) :: r717) - | 270 -> Select (function - | -1 -> r280 - | _ -> S (T T_DOT) :: r282) - | 506 -> Select (function - | -1 -> r280 - | _ -> S (T T_DOT) :: r446) - | 203 -> Select (function - | -1 -> r123 - | _ -> S (T T_COLON) :: r185) - | 152 -> Select (function - | 880 | 1624 -> r107 - | _ -> Sub (r105) :: r108) - | 155 -> Select (function - | 880 | 1624 -> r106 - | _ -> r108) - | 1742 -> Select (function - | -1 -> r148 - | _ -> r123) - | 198 -> Select (function - | -1 -> r162 - | _ -> r123) - | 950 -> Select (function - | -1 -> r148 - | _ -> r123) - | 901 -> Select (function - | -1 -> r162 - | _ -> r123) - | 1741 -> Select (function - | -1 -> r149 - | _ -> r142) + | -1 -> r82 + | _ -> R 124 :: r161) + | 1519 -> Select (function + | -1 -> r1079 + | _ -> R 124 :: r1072) + | 1547 -> Select (function + | -1 -> r1030 + | _ -> R 124 :: r1104) + | 639 -> Select (function + | -1 -> r224 + | _ -> [R 257]) + | 473 -> Select (function + | -1 -> [R 819] + | _ -> S (N N_pattern) :: r425) + | 452 -> Select (function + | -1 -> [R 820] + | _ -> S (N N_pattern) :: r416) + | 137 -> Select (function + | -1 -> r110 + | _ -> R 926 :: r116) + | 176 -> Select (function + | -1 -> r110 + | _ -> R 926 :: r167) + | 1524 -> Select (function + | -1 -> S (T T_RPAREN) :: r134 + | _ -> S (T T_COLONCOLON) :: r432) + | 328 -> Select (function + | 379 | 723 | 1028 | 1276 | 1400 | 1878 | 1912 -> r47 + | -1 -> S (T T_RPAREN) :: r134 + | _ -> S (N N_pattern) :: r292) + | 374 -> Select (function + | -1 -> S (T T_RPAREN) :: r134 + | _ -> Sub (r3) :: r342) + | 605 -> Select (function + | -1 -> S (T T_RPAREN) :: r507 + | _ -> S (N N_module_type) :: r512) + | 395 -> Select (function + | -1 -> S (T T_RBRACKET) :: r367 + | _ -> Sub (r369) :: r371) + | 683 -> Select (function + | -1 -> S (T T_RBRACKET) :: r367 + | _ -> Sub (r554) :: r556) + | 594 -> Select (function + | 61 | 170 | 182 | 344 | 1492 | 1498 -> r497 + | _ -> S (T T_OPEN) :: r489) + | 1526 -> Select (function + | -1 -> r547 + | _ -> S (T T_LPAREN) :: r1080) + | 219 -> Select (function + | 1688 | 1692 | 1696 | 1699 | 1713 | 1917 | 1941 -> r218 + | -1 -> r232 + | _ -> S (T T_DOT) :: r235) + | 637 -> Select (function + | -1 -> r232 + | _ -> S (T T_DOT) :: r540) + | 163 -> Select (function + | -1 -> r83 + | _ -> S (T T_COLON) :: r140) + | 114 -> Select (function + | 1032 | 1381 -> r62 + | _ -> Sub (r59) :: r60) + | 117 -> Select (function + | 1032 | 1381 -> r61 + | _ -> r60) + | 2068 -> Select (function + | -1 -> r78 + | _ -> r83) + | 2129 -> Select (function + | -1 -> r78 + | _ -> r83) + | 2128 -> Select (function + | -1 -> r79 + | _ -> r102) + | 2067 -> Select (function + | -1 -> r79 + | _ -> r159) + | 133 -> Select (function + | -1 -> r80 + | _ -> r103) | 175 -> Select (function - | -1 -> r150 - | _ -> r143) + | -1 -> r80 + | _ -> r160) + | 132 -> Select (function + | -1 -> r81 + | _ -> r104) | 174 -> Select (function - | -1 -> r151 - | _ -> r144) - | 949 -> Select (function - | -1 -> r149 - | _ -> r733) - | 898 -> Select (function - | -1 -> r150 - | _ -> r734) - | 897 -> Select (function - | -1 -> r151 - | _ -> r735) - | 197 -> Select (function - | -1 -> r163 - | _ -> r158) - | 900 -> Select (function - | -1 -> r163 - | _ -> r741) - | 277 -> Select (function - | -1 -> r279 - | _ -> r282) - | 507 -> Select (function - | -1 -> r279 - | _ -> r446) - | 978 -> Select (function - | -1 -> r637 - | _ -> r780) - | 977 -> Select (function - | -1 -> r638 - | _ -> r781) - | 976 -> Select (function - | -1 -> r639 - | _ -> r782) - | 847 -> Select (function - | -1 -> r690 - | _ -> r684) - | 841 -> Select (function - | -1 -> r691 - | _ -> r685) - | 840 -> Select (function - | -1 -> r692 - | _ -> r686) + | -1 -> r81 + | _ -> r161) + | 178 -> Select (function + | -1 -> r108 + | _ -> r83) + | 156 -> Select (function + | -1 -> r108 + | _ -> r83) + | 155 -> Select (function + | -1 -> r109 + | _ -> r116) + | 177 -> Select (function + | -1 -> r109 + | _ -> r167) + | 220 -> Select (function + | 1688 | 1692 | 1696 | 1699 | 1713 | 1917 | 1941 -> r217 + | -1 -> r225 + | _ -> r235) + | 638 -> Select (function + | -1 -> r225 + | _ -> r540) + | 1550 -> Select (function + | -1 -> r1027 + | _ -> r1102) + | 1549 -> Select (function + | -1 -> r1028 + | _ -> r1103) + | 1548 -> Select (function + | -1 -> r1029 + | _ -> r1104) + | 1522 -> Select (function + | -1 -> r1076 + | _ -> r1070) + | 1521 -> Select (function + | -1 -> r1077 + | _ -> r1071) + | 1520 -> Select (function + | -1 -> r1078 + | _ -> r1072) | _ -> raise Not_found diff --git a/ocamlmerlin_mlx/ocaml/preprocess/recover/gen_recover.ml b/ocamlmerlin_mlx/ocaml/preprocess/recover/gen_recover.ml index 2d0f14f..c2046b5 100644 --- a/ocamlmerlin_mlx/ocaml/preprocess/recover/gen_recover.ml +++ b/ocamlmerlin_mlx/ocaml/preprocess/recover/gen_recover.ml @@ -23,7 +23,7 @@ let () = module G = Cmly_read.Read (struct let filename = !name end) module A = Recover_attrib.Make(G) -let () = +let[@alert "-deprecated"] () = let open Format in let ppf = Format.err_formatter in if !verbose then begin diff --git a/ocamlmerlin_mlx/ocaml/preprocess/recover/synthesis.ml b/ocamlmerlin_mlx/ocaml/preprocess/recover/synthesis.ml index 70f6f6d..fcf34c4 100644 --- a/ocamlmerlin_mlx/ocaml/preprocess/recover/synthesis.ml +++ b/ocamlmerlin_mlx/ocaml/preprocess/recover/synthesis.ml @@ -104,7 +104,7 @@ struct | _ -> false) *) - let cost_of = function + let[@alert "-deprecated"] cost_of = function | Head (st, n) -> let acc = List.fold_left (fun acc (_sym, st') -> @@ -184,7 +184,7 @@ struct let cost_of_actions actions = List.fold_left (fun cost act -> cost +. cost_of_action act) 0.0 actions - let solution = function + let[@alert "-deprecated"] solution = function | Head (st, n) -> let acc = Abort in let acc = List.fold_left diff --git a/ocamlmerlin_mlx/ocaml/typing/btype.ml b/ocamlmerlin_mlx/ocaml/typing/btype.ml index 2191cad..3c53c2f 100644 --- a/ocamlmerlin_mlx/ocaml/typing/btype.ml +++ b/ocamlmerlin_mlx/ocaml/typing/btype.ml @@ -43,12 +43,13 @@ module TypeMap = struct let singleton ty = wrap_repr singleton ty let fold f = TransientTypeMap.fold (wrap_type_expr f) end -module TransientTypeHash = Hashtbl.Make(TransientTypeOps) module TypeHash = struct include TransientTypeHash + let mem hash = wrap_repr (mem hash) let add hash = wrap_repr (add hash) let remove hash = wrap_repr (remove hash) let find hash = wrap_repr (find hash) + let find_opt hash = wrap_repr (find_opt hash) let iter f = TransientTypeHash.iter (wrap_type_expr f) end module TransientTypePairs = @@ -92,39 +93,84 @@ module TypePairs = struct f (type_expr t1, type_expr t2)) end -(**** Forward declarations ****) - -let print_raw = - ref (fun _ -> assert false : Format.formatter -> type_expr -> unit) - (**** Type level management ****) let generic_level = Ident.highest_scope - -(* Used to mark a type during a traversal. *) let lowest_level = Ident.lowest_scope -let pivot_level = 2 * lowest_level - 1 - (* pivot_level - lowest_level < lowest_level *) + +(**** leveled type pool ****) +(* This defines a stack of pools of type nodes indexed by the level + we will try to generalize them in [Ctype.with_local_level_gen]. + [pool_of_level] returns the pool in which types at level [level] + should be kept, which is the topmost pool whose level is lower or + equal to [level]. + [Ctype.with_local_level_gen] shall call [with_new_pool] to create + a new pool at a given level. On return it shall process all nodes + that were added to the pool. + Remark: the only function adding to a pool is [add_to_pool], and + the only function returning the contents of a pool is [with_new_pool], + so that the initial pool can be added to, but never read from. *) + +type pool = {level: int; mutable pool: transient_expr list; next: pool} +(* To avoid an indirection we choose to add a dummy level at the end of + the list. It will never be accessed, as [pool_of_level] is always called + with [level >= 0]. *) +let rec dummy = {level = max_int; pool = []; next = dummy} +let pool_stack = s_table (fun () -> {level = 0; pool = []; next = dummy}) () + +(* Lookup in the stack is linear, but the depth is the number of nested + generalization points (e.g. lhs of let-definitions), which in ML is known + to be generally low. In most cases we are allocating in the topmost pool. + In [Ctype.with_local_gen], we move non-generalizable type nodes from the + topmost pool to one deeper in the stack, so that for each type node the + accumulated depth of lookups over its life is bounded by the depth of + the stack when it was allocated. + In case this linear search turns out to be costly, we could switch to + binary search, exploiting the fact that the levels of pools in the stack + are expected to grow. *) +let rec pool_of_level level pool = + if level >= pool.level then pool else pool_of_level level pool.next + +(* Create a new pool at given level, and use it locally. *) +let with_new_pool ~level f = + let pool = {level; pool = []; next = !pool_stack} in + let r = + Misc.protect_refs [ R(pool_stack, pool) ] f + in + (r, pool.pool) + +let add_to_pool ~level ty = + if level >= generic_level || level <= lowest_level then () else + let pool = pool_of_level level !pool_stack in + pool.pool <- ty :: pool.pool (**** Some type creators ****) +let newty3 ~level ~scope desc = + let ty = proto_newty3 ~level ~scope desc in + add_to_pool ~level ty; + Transient_expr.type_expr ty + +let newty2 ~level desc = + newty3 ~level ~scope:Ident.lowest_scope desc + let newgenty desc = newty2 ~level:generic_level desc let newgenvar ?name () = newgenty (Tvar name) let newgenstub ~scope = newty3 ~level:generic_level ~scope (Tvar None) -(* -let newmarkedvar level = - incr new_id; { desc = Tvar; level = pivot_level - level; id = !new_id } -let newmarkedgenvar () = - incr new_id; - { desc = Tvar; level = pivot_level - generic_level; id = !new_id } -*) - (**** Check some types ****) let is_Tvar ty = match get_desc ty with Tvar _ -> true | _ -> false let is_Tunivar ty = match get_desc ty with Tunivar _ -> true | _ -> false let is_Tconstr ty = match get_desc ty with Tconstr _ -> true | _ -> false +let is_poly_Tpoly ty = + match get_desc ty with Tpoly (_, _ :: _) -> true | _ -> false +let type_kind_is_abstract decl = + match decl.type_kind with Type_abstract _ -> true | _ -> false +let type_origin decl = + match decl.type_kind with + | Type_abstract origin -> origin + | Type_variant _ | Type_record _ | Type_open -> Definition let dummy_method = "*dummy method*" @@ -230,7 +276,6 @@ let set_static_row_name decl path = set_type_desc ty (Tvariant row) | _ -> () - (**********************************) (* Utilities for type traversal *) (**********************************) @@ -265,7 +310,7 @@ let fold_type_expr f init ty = | Tarrow (_, ty1, ty2, _) -> let result = f init ty1 in f result ty2 - | Ttuple l -> List.fold_left f init l + | Ttuple l -> List.fold_left (fun acc (_, t) -> f acc t) init l | Tconstr (_, l, _) -> List.fold_left f init l | Tobject(ty, {contents = Some (_, p)}) -> let result = f init ty in @@ -284,8 +329,8 @@ let fold_type_expr f init ty = | Tpoly (ty, tyl) -> let result = f init ty in List.fold_left f result tyl - | Tpackage (_, fl) -> - List.fold_left (fun result (_n, ty) -> f result ty) init fl + | Tpackage pack -> + List.fold_left (fun result (_n, ty) -> f result ty) init pack.pack_cstrs let iter_type_expr f ty = fold_type_expr (fun () v -> f v) () ty @@ -295,24 +340,6 @@ let rec iter_abbrev f = function | Mcons(_, _, ty, ty', rem) -> f ty; f ty'; iter_abbrev f rem | Mlink rem -> iter_abbrev f !rem -type type_iterators = - { it_signature: type_iterators -> signature -> unit; - it_signature_item: type_iterators -> signature_item -> unit; - it_value_description: type_iterators -> value_description -> unit; - it_type_declaration: type_iterators -> type_declaration -> unit; - it_extension_constructor: type_iterators -> extension_constructor -> unit; - it_module_declaration: type_iterators -> module_declaration -> unit; - it_modtype_declaration: type_iterators -> modtype_declaration -> unit; - it_class_declaration: type_iterators -> class_declaration -> unit; - it_class_type_declaration: type_iterators -> class_type_declaration -> unit; - it_functor_param: type_iterators -> functor_parameter -> unit; - it_module_type: type_iterators -> module_type -> unit; - it_class_type: type_iterators -> class_type -> unit; - it_type_kind: type_iterators -> type_decl_kind -> unit; - it_do_type_expr: type_iterators -> type_expr -> unit; - it_type_expr: type_iterators -> type_expr -> unit; - it_path: Path.t -> unit; } - let iter_type_expr_cstr_args f = function | Cstr_tuple tl -> List.iter f tl | Cstr_record lbls -> List.iter (fun d -> f d.ld_type) lbls @@ -323,7 +350,7 @@ let map_type_expr_cstr_args f = function Cstr_record (List.map (fun d -> {d with ld_type=f d.ld_type}) lbls) let iter_type_expr_kind f = function - | Type_abstract -> () + | Type_abstract _ -> () | Type_variant (cstrs, _) -> List.iter (fun cd -> @@ -336,8 +363,44 @@ let iter_type_expr_kind f = function | Type_open -> () + (**********************************) + (* Utilities for marking *) + (**********************************) + +let rec mark_type mark ty = + if try_mark_node mark ty then iter_type_expr (mark_type mark) ty -let type_iterators = +let mark_type_params mark ty = + iter_type_expr (mark_type mark) ty + + (**********************************) + (* (Object-oriented) iterator *) + (**********************************) + +type 'a type_iterators = + { it_signature: 'a type_iterators -> signature -> unit; + it_signature_item: 'a type_iterators -> signature_item -> unit; + it_value_description: 'a type_iterators -> value_description -> unit; + it_type_declaration: 'a type_iterators -> type_declaration -> unit; + it_extension_constructor: + 'a type_iterators -> extension_constructor -> unit; + it_module_declaration: 'a type_iterators -> module_declaration -> unit; + it_modtype_declaration: 'a type_iterators -> modtype_declaration -> unit; + it_class_declaration: 'a type_iterators -> class_declaration -> unit; + it_class_type_declaration: + 'a type_iterators -> class_type_declaration -> unit; + it_functor_param: 'a type_iterators -> functor_parameter -> unit; + it_module_type: 'a type_iterators -> module_type -> unit; + it_class_type: 'a type_iterators -> class_type -> unit; + it_type_kind: 'a type_iterators -> type_decl_kind -> unit; + it_do_type_expr: 'a type_iterators -> 'a; + it_type_expr: 'a type_iterators -> type_expr -> unit; + it_path: Path.t -> unit; } + +type type_iterators_full = (type_expr -> unit) type_iterators +type type_iterators_without_type_expr = (unit -> unit) type_iterators + +let type_iterators_without_type_expr = let it_signature it = List.iter (it.it_signature_item it) and it_signature_item it = function @@ -398,23 +461,33 @@ let type_iterators = it.it_class_type it cty and it_type_kind it kind = iter_type_expr_kind (it.it_type_expr it) kind + and it_path _p = () + in + { it_path; it_type_expr = (fun _ _ -> ()); it_do_type_expr = (fun _ _ -> ()); + it_type_kind; it_class_type; it_functor_param; it_module_type; + it_signature; it_class_type_declaration; it_class_declaration; + it_modtype_declaration; it_module_declaration; it_extension_constructor; + it_type_declaration; it_value_description; it_signature_item; } + +let type_iterators mark = + let it_type_expr it ty = + if try_mark_node mark ty then it.it_do_type_expr it ty and it_do_type_expr it ty = iter_type_expr (it.it_type_expr it) ty; match get_desc ty with Tconstr (p, _, _) | Tobject (_, {contents=Some (p, _)}) - | Tpackage (p, _) -> + | Tpackage {pack_path = p} -> it.it_path p | Tvariant row -> Option.iter (fun (p,_) -> it.it_path p) (row_name row) | _ -> () - and it_path _p = () in - { it_path; it_type_expr = it_do_type_expr; it_do_type_expr; - it_type_kind; it_class_type; it_functor_param; it_module_type; - it_signature; it_class_type_declaration; it_class_declaration; - it_modtype_declaration; it_module_declaration; it_extension_constructor; - it_type_declaration; it_value_description; it_signature_item; } + {type_iterators_without_type_expr with it_type_expr; it_do_type_expr} + + (**********************************) + (* Utilities for copying *) + (**********************************) let copy_row f fixed row keep more = let Row {fields = orig_fields; fixed = orig_fixed; closed; name = orig_name} = @@ -442,7 +515,7 @@ let copy_commu c = if is_commu_ok c then commu_ok else commu_var () let rec copy_type_desc ?(keep_names=false) f = function Tvar _ as ty -> if keep_names then ty else Tvar None | Tarrow (p, ty1, ty2, c)-> Tarrow (p, f ty1, f ty2, copy_commu c) - | Ttuple l -> Ttuple (List.map f l) + | Ttuple l -> Ttuple (List.map (fun (label, t) -> label, f t) l) | Tconstr (p, l, _) -> Tconstr (p, List.map f l, ref Mnil) | Tobject(ty, {contents = Some (p, tl)}) -> Tobject (f ty, ref (Some(p, List.map f tl))) @@ -458,10 +531,11 @@ let rec copy_type_desc ?(keep_names=false) f = function | Tpoly (ty, tyl) -> let tyl = List.map f tyl in Tpoly (f ty, tyl) - | Tpackage (p, fl) -> Tpackage (p, List.map (fun (n, ty) -> (n, f ty)) fl) - -(* Utilities for copying *) + | Tpackage pack -> + Tpackage {pack with + pack_cstrs = List.map (fun (n, ty) -> (n, f ty)) pack.pack_cstrs} +(* TODO: rename to [module Copy_scope] *) module For_copy : sig type copy_scope @@ -485,9 +559,8 @@ end = struct let with_scope f = let scope = { saved_desc = [] } in - let res = f scope in - cleanup scope; - res + Fun.protect ~finally:(fun () -> cleanup scope) (fun () -> f scope) + end (*******************************************) @@ -703,70 +776,3 @@ let instance_variable_type label sign = match Vars.find label sign.csig_vars with | (_, _, ty) -> ty | exception Not_found -> assert false - - (**********************************) - (* Utilities for level-marking *) - (**********************************) - -let not_marked_node ty = get_level ty >= lowest_level - (* type nodes with negative levels are "marked" *) -let flip_mark_node ty = - let ty = Transient_expr.repr ty in - Transient_expr.set_level ty (pivot_level - ty.level) -let logged_mark_node ty = - set_level ty (pivot_level - get_level ty) - -let try_mark_node ty = not_marked_node ty && (flip_mark_node ty; true) -let try_logged_mark_node ty = not_marked_node ty && (logged_mark_node ty; true) - -let rec mark_type ty = - if not_marked_node ty then begin - flip_mark_node ty; - iter_type_expr mark_type ty - end - -let mark_type_params ty = - iter_type_expr mark_type ty - -let type_iterators = - let it_type_expr it ty = - if try_mark_node ty then it.it_do_type_expr it ty - in - {type_iterators with it_type_expr} - - -(* Remove marks from a type. *) -let rec unmark_type ty = - if get_level ty < lowest_level then begin - (* flip back the marked level *) - flip_mark_node ty; - iter_type_expr unmark_type ty - end - -let unmark_iterators = - let it_type_expr _it ty = unmark_type ty in - {type_iterators with it_type_expr} - -let unmark_type_decl decl = - unmark_iterators.it_type_declaration unmark_iterators decl - -let unmark_extension_constructor ext = - List.iter unmark_type ext.ext_type_params; - iter_type_expr_cstr_args unmark_type ext.ext_args; - Option.iter unmark_type ext.ext_ret_type - -let unmark_class_signature sign = - unmark_type sign.csig_self; - unmark_type sign.csig_self_row; - Vars.iter (fun _l (_m, _v, t) -> unmark_type t) sign.csig_vars; - Meths.iter (fun _l (_m, _v, t) -> unmark_type t) sign.csig_meths - -let unmark_class_type cty = - unmark_iterators.it_class_type unmark_iterators cty - -(**** Type information getter ****) - -let cstr_type_path cstr = - match get_desc cstr.cstr_res with - | Tconstr (p, _, _) -> p - | _ -> assert false diff --git a/ocamlmerlin_mlx/ocaml/typing/btype.mli b/ocamlmerlin_mlx/ocaml/typing/btype.mli index d79b8d2..eea0139 100644 --- a/ocamlmerlin_mlx/ocaml/typing/btype.mli +++ b/ocamlmerlin_mlx/ocaml/typing/btype.mli @@ -39,9 +39,11 @@ module TypeMap : sig end module TypeHash : sig include Hashtbl.S with type key = transient_expr + val mem: 'a t -> type_expr -> bool val add: 'a t -> type_expr -> 'a -> unit - val remove : 'a t -> type_expr -> unit + val remove: 'a t -> type_expr -> unit val find: 'a t -> type_expr -> 'a + val find_opt: 'a t -> type_expr -> 'a option val iter: (type_expr -> 'a -> unit) -> 'a t -> unit end module TypePairs : sig @@ -56,6 +58,22 @@ end (**** Levels ****) val generic_level: int + (* level of polymorphic variables; = Ident.highest_scope *) +val lowest_level: int + (* lowest level for type nodes; = Ident.lowest_scope *) + +val with_new_pool: level:int -> (unit -> 'a) -> 'a * transient_expr list + (* [with_new_pool ~level f] executes [f] and returns the nodes + that were created at level [level] and above *) +val add_to_pool: level:int -> transient_expr -> unit + (* Add a type node to the pool associated to the level (which should + be the level of the type node). + Do nothing if [level = generic_level] or [level = lowest_level]. *) + +val newty3: level:int -> scope:int -> type_desc -> type_expr + (* Create a type with a fresh id *) +val newty2: level:int -> type_desc -> type_expr + (* Create a type with a fresh id and no scope *) val newgenty: type_desc -> type_expr (* Create a generic type *) @@ -65,19 +83,15 @@ val newgenstub: scope:int -> type_expr (* Return a fresh generic node, to be instantiated by [Transient_expr.set_stub_desc] *) -(* Use Tsubst instead -val newmarkedvar: int -> type_expr - (* Return a fresh marked variable *) -val newmarkedgenvar: unit -> type_expr - (* Return a fresh marked generic variable *) -*) - (**** Types ****) val is_Tvar: type_expr -> bool val is_Tunivar: type_expr -> bool val is_Tconstr: type_expr -> bool +val is_poly_Tpoly: type_expr -> bool val dummy_method: label +val type_kind_is_abstract: type_declaration -> bool +val type_origin: type_declaration -> type_origin (**** polymorphic variants ****) @@ -132,29 +146,47 @@ val iter_type_expr_cstr_args: (type_expr -> unit) -> val map_type_expr_cstr_args: (type_expr -> type_expr) -> (constructor_arguments -> constructor_arguments) +(**** Utilities for type marking ****) + +val mark_type: type_mark -> type_expr -> unit + (* Mark a type recursively *) +val mark_type_params: type_mark -> type_expr -> unit + (* Mark the sons of a type node recursively *) -type type_iterators = - { it_signature: type_iterators -> signature -> unit; - it_signature_item: type_iterators -> signature_item -> unit; - it_value_description: type_iterators -> value_description -> unit; - it_type_declaration: type_iterators -> type_declaration -> unit; - it_extension_constructor: type_iterators -> extension_constructor -> unit; - it_module_declaration: type_iterators -> module_declaration -> unit; - it_modtype_declaration: type_iterators -> modtype_declaration -> unit; - it_class_declaration: type_iterators -> class_declaration -> unit; - it_class_type_declaration: type_iterators -> class_type_declaration -> unit; - it_functor_param: type_iterators -> functor_parameter -> unit; - it_module_type: type_iterators -> module_type -> unit; - it_class_type: type_iterators -> class_type -> unit; - it_type_kind: type_iterators -> type_decl_kind -> unit; - it_do_type_expr: type_iterators -> type_expr -> unit; - it_type_expr: type_iterators -> type_expr -> unit; +(**** (Object-oriented) iterator ****) + +type 'a type_iterators = + { it_signature: 'a type_iterators -> signature -> unit; + it_signature_item: 'a type_iterators -> signature_item -> unit; + it_value_description: 'a type_iterators -> value_description -> unit; + it_type_declaration: 'a type_iterators -> type_declaration -> unit; + it_extension_constructor: + 'a type_iterators -> extension_constructor -> unit; + it_module_declaration: 'a type_iterators -> module_declaration -> unit; + it_modtype_declaration: 'a type_iterators -> modtype_declaration -> unit; + it_class_declaration: 'a type_iterators -> class_declaration -> unit; + it_class_type_declaration: + 'a type_iterators -> class_type_declaration -> unit; + it_functor_param: 'a type_iterators -> functor_parameter -> unit; + it_module_type: 'a type_iterators -> module_type -> unit; + it_class_type: 'a type_iterators -> class_type -> unit; + it_type_kind: 'a type_iterators -> type_decl_kind -> unit; + it_do_type_expr: 'a type_iterators -> 'a; + it_type_expr: 'a type_iterators -> type_expr -> unit; it_path: Path.t -> unit; } -val type_iterators: type_iterators - (* Iteration on arbitrary type information. + +type type_iterators_full = (type_expr -> unit) type_iterators +type type_iterators_without_type_expr = (unit -> unit) type_iterators + +val type_iterators: type_mark -> type_iterators_full + (* Iteration on arbitrary type information, including [type_expr]. [it_type_expr] calls [mark_node] to avoid loops. *) -val unmark_iterators: type_iterators - (* Unmark any structure containing types. See [unmark_type] below. *) + +val type_iterators_without_type_expr: type_iterators_without_type_expr + (* Iteration on arbitrary type information. + Cannot recurse on [type_expr]. *) + +(**** Utilities for copying ****) val copy_type_desc: ?keep_names:bool -> (type_expr -> type_expr) -> type_desc -> type_desc @@ -180,41 +212,6 @@ module For_copy : sig before returning its result. *) end -val lowest_level: int - (* Marked type: ty.level < lowest_level *) - -val not_marked_node: type_expr -> bool - (* Return true if a type node is not yet marked *) - -val logged_mark_node: type_expr -> unit - (* Mark a type node, logging the marking so it can be backtracked *) -val try_logged_mark_node: type_expr -> bool - (* Mark a type node if it is not yet marked, logging the marking so it - can be backtracked. - Return false if it was already marked *) - -val flip_mark_node: type_expr -> unit - (* Mark a type node. - The marking is not logged and will have to be manually undone using - one of the various [unmark]'ing functions below. *) -val try_mark_node: type_expr -> bool - (* Mark a type node if it is not yet marked. - The marking is not logged and will have to be manually undone using - one of the various [unmark]'ing functions below. - - Return false if it was already marked *) -val mark_type: type_expr -> unit - (* Mark a type recursively *) -val mark_type_params: type_expr -> unit - (* Mark the sons of a type node recursively *) - -val unmark_type: type_expr -> unit -val unmark_type_decl: type_declaration -> unit -val unmark_extension_constructor: extension_constructor -> unit -val unmark_class_type: class_type -> unit -val unmark_class_signature: class_signature -> unit - (* Remove marks from a type *) - (**** Memorization of abbreviation expansion ****) val find_expans: private_flag -> Path.t -> abbrev_memo -> type_expr option @@ -262,6 +259,7 @@ val signature_of_class_type : class_type -> class_signature (* Get the body of a class type (i.e. without parameters) *) val class_body : class_type -> class_type + (* Fully expand the head of a class type *) val scrape_class_type : class_type -> class_type @@ -306,10 +304,3 @@ val method_type : label -> class_signature -> type_expr (* Return the type of an instance variable. @raises [Assert_failure] if the class has no such method. *) val instance_variable_type : label -> class_signature -> type_expr - -(**** Forward declarations ****) -val print_raw: (Format.formatter -> type_expr -> unit) ref - -(**** Type information getter ****) - -val cstr_type_path : constructor_description -> Path.t diff --git a/ocamlmerlin_mlx/ocaml/typing/cmi_format.ml b/ocamlmerlin_mlx/ocaml/typing/cmi_format.ml index b4934e2..3fae802 100644 --- a/ocamlmerlin_mlx/ocaml/typing/cmi_format.ml +++ b/ocamlmerlin_mlx/ocaml/typing/cmi_format.ml @@ -35,7 +35,7 @@ type cmi_infos = { } let input_cmi ic = - let (name, sign) = (Ocaml_compression.input_value ic : header) in + let (name, sign) = (input_value ic : header) in let crcs = (input_value ic : crcs) in let flags = (input_value ic : flags) in { @@ -74,14 +74,17 @@ let read_cmi filename = raise (Error e) let output_cmi filename oc cmi = + ignore (filename, oc, cmi); "" +(* (* beware: the provided signature must have been substituted for saving *) output_string oc Config.cmi_magic_number; - Ocaml_compression.output_value oc ((cmi.cmi_name, cmi.cmi_sign) : header); + Marshal.(to_channel oc ((cmi.cmi_name, cmi.cmi_sign) : header) [Compression]); flush oc; let crc = Digest.file filename in let crcs = (cmi.cmi_name, Some crc) :: cmi.cmi_crcs in output_value oc (crcs : crcs); output_value oc (cmi.cmi_flags : flags); crc +*) (* Error report moved to src/ocaml/typing/magic_numbers.ml *) diff --git a/ocamlmerlin_mlx/ocaml/typing/cmt_format.ml b/ocamlmerlin_mlx/ocaml/typing/cmt_format.ml index 6fbc314..d2c05d0 100644 --- a/ocamlmerlin_mlx/ocaml/typing/cmt_format.ml +++ b/ocamlmerlin_mlx/ocaml/typing/cmt_format.ml @@ -61,36 +61,77 @@ and binary_part = | Partial_signature_item of signature_item | Partial_module_type of module_type +type dependency_kind = Definition_to_declaration | Declaration_to_declaration type cmt_infos = { cmt_modname : string; cmt_annots : binary_annots; - cmt_value_dependencies : - (Types.value_description * Types.value_description) list; + cmt_declaration_dependencies : (dependency_kind * Uid.t * Uid.t) list; cmt_comments : (string * Location.t) list; cmt_args : string array; cmt_sourcefile : string option; cmt_builddir : string; - cmt_loadpath : string list; + cmt_loadpath : Load_path.paths; cmt_source_digest : Digest.t option; cmt_initial_env : Env.t; cmt_imports : (string * Digest.t option) list; cmt_interface_digest : Digest.t option; cmt_use_summaries : bool; - cmt_uid_to_loc : Location.t Shape.Uid.Tbl.t; + cmt_uid_to_decl : item_declaration Shape.Uid.Tbl.t; cmt_impl_shape : Shape.t option; (* None for mli *) + cmt_ident_occurrences : + (Longident.t Location.loc * Shape_reduce.result) list } type error = Not_a_typedtree of string +let iter_on_parts (it : Tast_iterator.iterator) = function + | Partial_structure s -> it.structure it s + | Partial_structure_item s -> it.structure_item it s + | Partial_expression e -> it.expr it e + | Partial_pattern (_category, p) -> it.pat it p + | Partial_class_expr ce -> it.class_expr it ce + | Partial_signature s -> it.signature it s + | Partial_signature_item s -> it.signature_item it s + | Partial_module_type s -> it.module_type it s + +let iter_on_annots (it : Tast_iterator.iterator) = function + | Implementation s -> it.structure it s + | Interface s -> it.signature it s + | Packed _ -> () + | Partial_implementation array -> Array.iter (iter_on_parts it) array + | Partial_interface array -> Array.iter (iter_on_parts it) array + +let iter_on_declaration f decl = + match decl with + | Value vd -> f vd.val_val.val_uid decl; + | Value_binding vb -> + let bound_idents = let_bound_idents_full [vb] in + List.iter ~f:(fun (_, _, _, uid) -> f uid decl) bound_idents + | Type td -> + if not (Btype.is_row_name (Ident.name td.typ_id)) then + f td.typ_type.type_uid (Type td) + | Constructor cd -> f cd.cd_uid decl + | Extension_constructor ec -> f ec.ext_type.ext_uid decl; + | Label ld -> f ld.ld_uid decl + | Module md -> f md.md_uid decl + | Module_type mtd -> f mtd.mtd_uid decl + | Module_substitution ms -> f ms.ms_uid decl + | Module_binding mb -> f mb.mb_uid decl + | Class cd -> f cd.ci_decl.cty_uid decl + | Class_type ct -> f ct.ci_decl.cty_uid decl + +let iter_on_declarations ~(f: Shape.Uid.t -> item_declaration -> unit) = { + Tast_iterator.default_iterator with + item_declaration = (fun _sub decl -> iter_on_declaration f decl); +} + let need_to_clear_env = try ignore (Sys.getenv "OCAML_BINANNOT_WITHENV"); false with Not_found -> true let keep_only_summary = Env.keep_only_summary -open Tast_mapper - let cenv = {Tast_mapper.default with env = fun _sub env -> keep_only_summary env} @@ -119,13 +160,269 @@ let clear_env binary_annots = else binary_annots +(* Every typedtree node with a located longident corresponding to user-facing + syntax should be indexed. *) +let iter_on_occurrences + ~(f : namespace:Shape.Sig_component_kind.t -> + Env.t -> Path.t -> Longident.t Location.loc -> + unit) = + let path_in_type typ name = + match Types.get_desc typ with + | Tconstr (type_path, _, _) -> + Some (Path.Pextra_ty(type_path, Pcstr_ty name)) + | _ -> None + in + let add_constructor_description env lid = + function + | { Data_types.cstr_tag = Cstr_extension (path, _); _ } -> + f ~namespace:Extension_constructor env path lid + | { Data_types.cstr_uid = Predef name; _} -> + let id = List.assoc name Predef.builtin_idents in + f ~namespace:Constructor env (Pident id) lid + | { Data_types.cstr_res; cstr_name; _ } -> + let path = path_in_type cstr_res cstr_name in + Option.iter ~f:(fun path -> f ~namespace:Constructor env path lid) path + in + let add_label env lid { Data_types.lbl_name; lbl_res; _ } = + let path = path_in_type lbl_res lbl_name in + Option.iter ~f:(fun path -> f ~namespace:Label env path lid) path + in + let with_constraint ~env (_path, _lid, with_constraint) = + match with_constraint with + | Twith_module (path', lid') | Twith_modsubst (path', lid') -> + f ~namespace:Module env path' lid' + | _ -> () + in + Tast_iterator.{ default_iterator with + + expr = (fun sub ({ exp_desc; exp_env; _ } as e) -> + (match exp_desc with + | Texp_ident (path, lid, _) -> + f ~namespace:Value exp_env path lid + | Texp_construct (lid, constr_desc, _) -> + add_constructor_description exp_env lid constr_desc + | Texp_field (_, lid, label_desc) + | Texp_setfield (_, lid, label_desc, _) + | Texp_atomic_loc (_, lid, label_desc) -> + add_label exp_env lid label_desc + | Texp_new (path, lid, _) -> + f ~namespace:Class exp_env path lid + | Texp_record { fields; _ } -> + Array.iter (fun (label_descr, record_label_definition) -> + match record_label_definition with + | Overridden ( + { Location.txt; loc}, + {exp_loc; _}) + when not exp_loc.loc_ghost + && loc.loc_start = exp_loc.loc_start + && loc.loc_end = exp_loc.loc_end -> + (* In the presence of punning we want to index the label + even if it is ghosted *) + let lid = { Location.txt; loc = {loc with loc_ghost = false} } in + add_label exp_env lid label_descr + | Overridden (lid, _) -> add_label exp_env lid label_descr + | Kept _ -> ()) fields + | Texp_instvar (_self_path, path, name) -> + let lid = { name with txt = Longident.Lident name.txt } in + f ~namespace:Value exp_env path lid + | Texp_setinstvar (_self_path, path, name, _) -> + let lid = { name with txt = Longident.Lident name.txt } in + f ~namespace:Value exp_env path lid + | Texp_override (_self_path, modifs) -> + List.iter ~f:(fun (id, (name : string Location.loc), _exp) -> + let lid = { name with txt = Longident.Lident name.txt } in + f ~namespace:Value exp_env (Path.Pident id) lid) + modifs + | Texp_extension_constructor (lid, path) -> + f ~namespace:Extension_constructor exp_env path lid + | Texp_constant _ | Texp_let _ | Texp_function _ | Texp_apply _ + | Texp_match _ | Texp_try _ | Texp_tuple _ | Texp_variant _ | Texp_array _ + | Texp_ifthenelse _ | Texp_sequence _ | Texp_while _ | Texp_for _ + | Texp_send _ + | Texp_letmodule _ | Texp_letexception _ | Texp_assert _ | Texp_lazy _ + | Texp_object _ | Texp_pack _ | Texp_letop _ | Texp_unreachable + | Texp_open _ | Texp_typed_hole -> ()); + default_iterator.expr sub e); + + (* Remark: some types get iterated over twice due to how constraints are + encoded in the typedtree. For example, in [let x : t = 42], [t] is + present in both a [Tpat_constraint] and a [Texp_constraint] node) *) + typ = + (fun sub ({ ctyp_desc; ctyp_env; _ } as ct) -> + (match ctyp_desc with + | Ttyp_constr (path, lid, _ctyps) -> + f ~namespace:Type ctyp_env path lid + | Ttyp_package {tpt_path; tpt_txt} -> + f ~namespace:Module_type ctyp_env tpt_path tpt_txt + | Ttyp_class (path, lid, _typs) -> + (* Deprecated syntax to extend a polymorphic variant *) + f ~namespace:Type ctyp_env path lid + | Ttyp_open (path, lid, _ct) -> + f ~namespace:Module ctyp_env path lid + | Ttyp_any | Ttyp_var _ | Ttyp_arrow _ | Ttyp_tuple _ | Ttyp_object _ + | Ttyp_alias _ | Ttyp_variant _ | Ttyp_poly _ -> ()); + default_iterator.typ sub ct); + + pat = + (fun (type a) sub + ({ pat_desc; pat_extra; pat_env; _ } as pat : a general_pattern) -> + (match pat_desc with + | Tpat_construct (lid, constr_desc, _, _) -> + add_constructor_description pat_env lid constr_desc + | Tpat_record (fields, _) -> + List.iter ~f:(fun (lid, label_descr, pat) -> + let lid = + let open Location in + (* In the presence of punning we want to index the label + even if it is ghosted *) + if (not pat.pat_loc.loc_ghost + && lid.loc.loc_start = pat.pat_loc.loc_start + && lid.loc.loc_end = pat.pat_loc.loc_end) + then {lid with loc = {lid.loc with loc_ghost = false}} + else lid + in + add_label pat_env lid label_descr) + fields + | Tpat_any | Tpat_var _ | Tpat_alias _ | Tpat_constant _ | Tpat_tuple _ + | Tpat_variant _ | Tpat_array _ | Tpat_lazy _ | Tpat_value _ + | Tpat_exception _ | Tpat_or _ -> ()); + List.iter ~f:(fun (pat_extra, _, _) -> + match pat_extra with + | Tpat_open (path, lid, _) -> + f ~namespace:Module pat_env path lid + | Tpat_type (path, lid) -> + f ~namespace:Type pat_env path lid + | Tpat_constraint _ | Tpat_unpack -> ()) + pat_extra; + default_iterator.pat sub pat); + + binding_op = (fun sub ({bop_op_path; bop_op_name; bop_exp; _} as bop) -> + let lid = { bop_op_name with txt = Longident.Lident bop_op_name.txt } in + f ~namespace:Value bop_exp.exp_env bop_op_path lid; + default_iterator.binding_op sub bop); + + module_expr = + (fun sub ({ mod_desc; mod_env; _ } as me) -> + (match mod_desc with + | Tmod_ident (path, lid) -> f ~namespace:Module mod_env path lid + | Tmod_structure _ | Tmod_functor _ | Tmod_apply _ | Tmod_apply_unit _ + | Tmod_constraint _ | Tmod_unpack _ | Tmod_typed_hole -> ()); + default_iterator.module_expr sub me); + + open_description = + (fun sub ({ open_expr = (path, lid); open_env; _ } as od) -> + f ~namespace:Module open_env path lid; + default_iterator.open_description sub od); + + module_type = + (fun sub ({ mty_desc; mty_env; _ } as mty) -> + (match mty_desc with + | Tmty_ident (path, lid) -> + f ~namespace:Module_type mty_env path lid + | Tmty_with (_mty, l) -> + List.iter ~f:(with_constraint ~env:mty_env) l + | Tmty_alias (path, lid) -> + f ~namespace:Module mty_env path lid + | Tmty_signature _ | Tmty_functor _ | Tmty_typeof _ -> ()); + default_iterator.module_type sub mty); + + class_expr = + (fun sub ({ cl_desc; cl_env; _} as ce) -> + (match cl_desc with + | Tcl_ident (path, lid, _) -> f ~namespace:Class cl_env path lid + | Tcl_structure _ | Tcl_fun _ | Tcl_apply _ | Tcl_let _ + | Tcl_constraint _ | Tcl_open _ -> ()); + default_iterator.class_expr sub ce); + + class_type = + (fun sub ({ cltyp_desc; cltyp_env; _} as ct) -> + (match cltyp_desc with + | Tcty_constr (path, lid, _) -> f ~namespace:Class_type cltyp_env path lid + | Tcty_signature _ | Tcty_arrow _ | Tcty_open _ -> ()); + default_iterator.class_type sub ct); + + signature_item = + (fun sub ({ sig_desc; sig_env; _ } as sig_item) -> + (match sig_desc with + | Tsig_exception { + tyexn_constructor = { ext_kind = Text_rebind (path, lid)}} -> + f ~namespace:Extension_constructor sig_env path lid + | Tsig_modsubst { ms_manifest; ms_txt } -> + f ~namespace:Module sig_env ms_manifest ms_txt + | Tsig_typext { tyext_path; tyext_txt } -> + f ~namespace:Type sig_env tyext_path tyext_txt + | Tsig_value _ | Tsig_type _ | Tsig_typesubst _ | Tsig_exception _ + | Tsig_module _ | Tsig_recmodule _ | Tsig_modtype _ | Tsig_modtypesubst _ + | Tsig_open _ | Tsig_include _ | Tsig_class _ | Tsig_class_type _ + | Tsig_attribute _ -> ()); + default_iterator.signature_item sub sig_item); + + structure_item = + (fun sub ({ str_desc; str_env; _ } as str_item) -> + (match str_desc with + | Tstr_exception { + tyexn_constructor = { ext_kind = Text_rebind (path, lid)}} -> + f ~namespace:Extension_constructor str_env path lid + | Tstr_typext { tyext_path; tyext_txt } -> + f ~namespace:Type str_env tyext_path tyext_txt + | Tstr_eval _ | Tstr_value _ | Tstr_primitive _ | Tstr_type _ + | Tstr_exception _ | Tstr_module _ | Tstr_recmodule _ + | Tstr_modtype _ | Tstr_open _ | Tstr_class _ | Tstr_class_type _ + | Tstr_include _ | Tstr_attribute _ -> ()); + default_iterator.structure_item sub str_item) +} + +let index_declarations binary_annots = + let index : item_declaration Types.Uid.Tbl.t = Types.Uid.Tbl.create 16 in + let f uid fragment = Types.Uid.Tbl.add index uid fragment in + iter_on_annots (iter_on_declarations ~f) binary_annots; + index + +let index_occurrences binary_annots = + let index : (Longident.t Location.loc * Shape_reduce.result) list ref = + ref [] + in + let f ~namespace env path lid = + let not_ghost { Location.loc = { loc_ghost; _ }; _ } = not loc_ghost in + let reduce_and_store ~namespace lid path = if not_ghost lid then + match Env.shape_of_path ~namespace env path with + | exception Not_found -> () + | { uid = Some (Predef _); _ } -> () + | path_shape -> + let result = Shape_reduce.local_reduce_for_uid env path_shape in + index := (lid, result) :: !index + in + (* Shape reduction can be expensive, but the persistent memoization tables + should make these successive reductions fast. *) + let rec index_components namespace lid path = + let module_ = Shape.Sig_component_kind.Module in + let scraped_path = Path.scrape_extra_ty path in + match lid.Location.txt, scraped_path with + | Longident.Ldot (lid', _), Path.Pdot (path', _) -> + reduce_and_store ~namespace lid path; + index_components module_ lid' path' + | Longident.Lapply (lid', lid''), Path.Papply (path', path'') -> + index_components module_ lid'' path''; + index_components module_ lid' path' + | Longident.Lident _, _ -> + reduce_and_store ~namespace lid path; + | _, _ -> () + in + index_components namespace lid path + in + iter_on_annots (iter_on_occurrences ~f) binary_annots; + !index + exception Error of error -let input_cmt ic = (Ocaml_compression.input_value ic : cmt_infos) +let input_cmt ic = (input_value ic : cmt_infos) let output_cmt oc cmt = + ignore (oc, cmt) + (* output_string oc Config.cmt_magic_number; - Ocaml_compression.output_value oc (cmt : cmt_infos) + Marshal.(to_channel oc (cmt : cmt_infos) [Compression]) + *) let read filename = (* Printf.fprintf stderr "Cmt_format.read %s\n%!" filename; *) @@ -166,37 +463,46 @@ let read_cmi filename = | Some cmi, _ -> cmi let saved_types = ref [] -let value_deps = ref [] +let uids_deps : (dependency_kind * Uid.t * Uid.t) list ref = ref [] let clear () = saved_types := []; - value_deps := [] + uids_deps := [] let add_saved_type b = saved_types := b :: !saved_types let get_saved_types () = !saved_types let set_saved_types l = saved_types := l -(*let record_value_dependency vd1 vd2 = - if vd1.Types.val_loc <> vd2.Types.val_loc then - value_deps := (vd1, vd2) :: !value_deps*) +let get_declaration_dependencies () = !uids_deps -let record_value_dependency _vd1 _vd2 = () +let record_declaration_dependency (rk, uid1, uid2) = + if not (Uid.equal uid1 uid2) then + uids_deps := (rk, uid1, uid2) :: !uids_deps -let save_cmt filename modname binary_annots sourcefile initial_env cmi shape = +let save_cmt target binary_annots initial_env cmi shape = if !Clflags.binary_annotations && not !Clflags.print_types then begin Misc.output_to_file_via_temporary - ~mode:[Open_binary] filename + ~mode:[Open_binary] (Unit_info.Artifact.filename target) (fun temp_file_name oc -> let this_crc = match cmi with | None -> None | Some cmi -> Some (output_cmi temp_file_name oc cmi) in + let sourcefile = Unit_info.Artifact.source_file target in + let cmt_ident_occurrences = + if !Clflags.store_occurrences then + index_occurrences binary_annots + else + [] + in + let cmt_annots = clear_env binary_annots in + let cmt_uid_to_decl = index_declarations cmt_annots in let source_digest = Option.map ~f:Digest.file sourcefile in let cmt = { - cmt_modname = modname; - cmt_annots = clear_env binary_annots; - cmt_value_dependencies = !value_deps; + cmt_modname = Unit_info.Artifact.modname target; + cmt_annots; + cmt_declaration_dependencies = !uids_deps; cmt_comments = []; cmt_args = Sys.argv; cmt_sourcefile = sourcefile; @@ -208,8 +514,9 @@ let save_cmt filename modname binary_annots sourcefile initial_env cmi shape = cmt_imports = List.sort ~cmp:compare (Env.imports ()); cmt_interface_digest = this_crc; cmt_use_summaries = need_to_clear_env; - cmt_uid_to_loc = Env.get_uid_to_loc_tbl (); + cmt_uid_to_decl; cmt_impl_shape = shape; + cmt_ident_occurrences; } in output_cmt oc cmt) end; diff --git a/ocamlmerlin_mlx/ocaml/typing/cmt_format.mli b/ocamlmerlin_mlx/ocaml/typing/cmt_format.mli index 43e09f1..e6aa95a 100644 --- a/ocamlmerlin_mlx/ocaml/typing/cmt_format.mli +++ b/ocamlmerlin_mlx/ocaml/typing/cmt_format.mli @@ -50,23 +50,27 @@ and binary_part = | Partial_signature_item of signature_item | Partial_module_type of module_type +type dependency_kind = Definition_to_declaration | Declaration_to_declaration type cmt_infos = { cmt_modname : modname; cmt_annots : binary_annots; - cmt_value_dependencies : - (Types.value_description * Types.value_description) list; + cmt_declaration_dependencies : (dependency_kind * Uid.t * Uid.t) list; cmt_comments : (string * Location.t) list; cmt_args : string array; + (** {!Sys.argv} from the compiler invocation which created the file. + [Sys.argv.(0)] is rewritten using [BUILD_PATH_PREFIX_MAP]. *) cmt_sourcefile : string option; cmt_builddir : string; - cmt_loadpath : string list; + cmt_loadpath : Load_path.paths; cmt_source_digest : string option; cmt_initial_env : Env.t; cmt_imports : crcs; cmt_interface_digest : Digest.t option; cmt_use_summaries : bool; - cmt_uid_to_loc : Location.t Shape.Uid.Tbl.t; + cmt_uid_to_decl : item_declaration Shape.Uid.Tbl.t; cmt_impl_shape : Shape.t option; (* None for mli *) + cmt_ident_occurrences : + (Longident.t Location.loc * Shape_reduce.result) list } type error = @@ -90,10 +94,8 @@ val read_cmi : string -> Cmi_format.cmi_infos (** [save_cmt filename modname binary_annots sourcefile initial_env cmi] writes a cmt(i) file. *) val save_cmt : - string -> (* filename.cmt to generate *) - string -> (* module name *) + Unit_info.Artifact.t -> binary_annots -> - string option -> (* source file *) Env.t -> (* initial env *) Cmi_format.cmi_infos option -> (* if a .cmi was generated *) Shape.t option -> @@ -109,9 +111,8 @@ val add_saved_type : binary_part -> unit val get_saved_types : unit -> binary_part list val set_saved_types : binary_part list -> unit -val record_value_dependency: - Types.value_description -> Types.value_description -> unit - +val get_declaration_dependencies : unit -> (dependency_kind * Uid.t * Uid.t) list +val record_declaration_dependency: dependency_kind * Uid.t * Uid.t -> unit (* @@ -124,3 +125,15 @@ val record_value_dependency: val read_signature : 'a -> string -> Types.signature * 'b list * 'c list *) + +val iter_on_declarations : + f:(Types.Uid.t -> item_declaration -> unit) + -> Tast_iterator.iterator + +val iter_on_occurrences : + f:(namespace:Shape.Sig_component_kind.t -> + Env.t -> + Path.t -> + Longident.t Location.loc -> + unit) + -> Tast_iterator.iterator diff --git a/ocamlmerlin_mlx/ocaml/typing/ctype.ml b/ocamlmerlin_mlx/ocaml/typing/ctype.ml index b70965e..d1846bd 100644 --- a/ocamlmerlin_mlx/ocaml/typing/ctype.ml +++ b/ocamlmerlin_mlx/ocaml/typing/ctype.ml @@ -18,21 +18,12 @@ open Misc open Asttypes open Types +open Data_types open Btype open Errortrace open Local_store -(* - Type manipulation after type inference - ====================================== - If one wants to manipulate a type after type inference (for - instance, during code generation or in the debugger), one must - first make sure that the type levels are correct, using the - function [correct_levels]. Then, this type can be correctly - manipulated by [apply], [expand_head] and [moregeneral]. -*) - (* General notes ============= @@ -119,14 +110,18 @@ let raise_scope_escape_exn ty = raise (scope_escape_exn ty) exception Tags of label * label let () = + let open Format_doc in Location.register_error_of_exn (function | Tags (l, l') -> + let pp_tag ppf s = fprintf ppf "`%s" s in + let inline_tag = Misc.Style.as_inline_code pp_tag in Some Location. (errorf ~loc:(in_file !input_name) - "In this program,@ variant constructors@ `%s and `%s@ \ - have the same hash value.@ Change one of them." l l' + "In this program,@ variant constructors@ %a and %a@ \ + have the same hash value.@ Change one of them." + inline_tag l inline_tag l' ) | _ -> None ) @@ -139,10 +134,37 @@ exception Cannot_subst exception Cannot_unify_universal_variables +exception Out_of_scope_universal_variable + exception Matches_failure of Env.t * unification_error exception Incompatible +(**** Control tracing of GADT instances *) + +let trace_gadt_instances = ref false +let check_trace_gadt_instances ?(force=false) env = + not !trace_gadt_instances && (force || Env.has_local_constraints env) && + (trace_gadt_instances := true; cleanup_abbrev (); true) + +let reset_trace_gadt_instances b = + if b then trace_gadt_instances := false + +let wrap_trace_gadt_instances ?force env f x = + let b = check_trace_gadt_instances ?force env in + Misc.try_finally (fun () -> f x) + ~always:(fun () -> reset_trace_gadt_instances b) + +(**** Abbreviations without parameters ****) +(* Shall reset after generalizing *) + +let simple_abbrevs = ref Mnil + +let proper_abbrevs tl abbrev = + if tl <> [] || !trace_gadt_instances || !Clflags.principal + then abbrev + else simple_abbrevs + (**** Type level management ****) let current_level = s_ref 0 @@ -183,11 +205,81 @@ let end_def () = saved_level := List.tl !saved_level; current_level := cl; nongen_level := nl let create_scope () = - init_def (!current_level + 1); - !current_level + let level = !current_level + 1 in + init_def level; + level let wrap_end_def f = Misc.try_finally f ~always:end_def +(* [with_local_level_gen] handles both the scoping structure of levels + and automatic generalization through pools (cf. btype.ml) *) +let with_local_level_gen ~begin_def ~structure ?before_generalize f = + begin_def (); + let level = !current_level in + let result, pool = + with_new_pool ~level:!current_level begin fun () -> + let result = wrap_end_def f in + Option.iter (fun g -> g result) before_generalize; + result + end + in + simple_abbrevs := Mnil; + (* Nodes in [pool] were either created by the above calls to [f] + and [before_generalize], or they were created before, generalized, + and then added to the pool by [update_level]. + In the latter case, their level was already kept for backtracking + by a call to [set_level] inside [update_level]. + Since backtracking can only go back to a snapshot taken before [f] was + called, this means that either they did not exists in that snapshot, + or that they original level is already stored, so that there is no need + to register levels for backtracking when we change them with + [Transient_expr.set_level] here *) + List.iter begin fun ty -> + (* Already generic nodes are not tracked *) + if ty.level = generic_level then () else + match ty.desc with + | Tvar _ when structure -> + (* In structure mode, we do do not generalize type variables, + so we need to lower their level, and move them to an outer pool. + The goal of this mode is to allow unsharing inner nodes + without introducing polymorphism *) + if ty.level >= level then Transient_expr.set_level ty !current_level; + add_to_pool ~level:ty.level ty + | Tlink _ -> () + (* If a node is no longer used as representative, no need + to track it anymore *) + | _ -> + if ty.level < level then + (* If a node was introduced locally, but its level was lowered + through unification, keeping that node as representative, + then we need to move it to an outer pool. *) + add_to_pool ~level:ty.level ty + else begin + (* Generalize all remaining nodes *) + Transient_expr.set_level ty generic_level; + if structure then match ty.desc with + Tconstr (_, _, abbrev) -> + (* In structure mode, we drop abbreviations, as the goal of + this mode is to reduce sharing *) + abbrev := Mnil + | _ -> () + end + end pool; + result + +let with_local_level_generalize_structure f = + with_local_level_gen ~begin_def ~structure:true f +let with_local_level_generalize ?before_generalize f = + with_local_level_gen ~begin_def ~structure:false ?before_generalize f +let with_local_level_generalize_if cond ?before_generalize f = + if cond then with_local_level_generalize ?before_generalize f else f () +let with_local_level_generalize_structure_if cond f = + if cond then with_local_level_generalize_structure f else f () +let with_local_level_generalize_structure_if_principal f = + if !Clflags.principal then with_local_level_generalize_structure f else f () +let with_local_level_generalize_for_class f = + with_local_level_gen ~begin_def:begin_class_def ~structure:false f + let with_local_level ?post f = begin_def (); let result = wrap_end_def f in @@ -197,7 +289,7 @@ let with_local_level_if cond f ~post = if cond then with_local_level f ~post else f () let with_local_level_iter f ~post = begin_def (); - let result, l = wrap_end_def f in + let (result, l) = wrap_end_def f in List.iter post l; result let with_local_level_iter_if cond f ~post = @@ -208,8 +300,7 @@ let with_local_level_iter_if_principal f ~post = with_local_level_iter_if !Clflags.principal f ~post let with_level ~level f = begin_def (); init_def level; - let result = wrap_end_def f in - result + wrap_end_def f let with_level_if cond ~level f = if cond then with_level ~level f else f () @@ -233,32 +324,6 @@ let increase_global_level () = let restore_global_level gl = global_level := gl -(**** Control tracing of GADT instances *) - -let trace_gadt_instances = ref false -let check_trace_gadt_instances env = - not !trace_gadt_instances && Env.has_local_constraints env && - (trace_gadt_instances := true; cleanup_abbrev (); true) - -let reset_trace_gadt_instances b = - if b then trace_gadt_instances := false - -let wrap_trace_gadt_instances env f x = - let b = check_trace_gadt_instances env in - let y = f x in - reset_trace_gadt_instances b; - y - -(**** Abbreviations without parameters ****) -(* Shall reset after generalizing *) - -let simple_abbrevs = ref Mnil - -let proper_abbrevs tl abbrev = - if tl <> [] || !trace_gadt_instances || !Clflags.principal - then abbrev - else simple_abbrevs - (**** Some type creators ****) (* Re-export generic type creators *) @@ -277,88 +342,114 @@ let newconstr path tyl = newty (Tconstr (path, tyl, ref Mnil)) let none = newty (Ttuple []) (* Clearly ill-formed type *) -(**** unification mode ****) +(**** information for [Typecore.unify_pat_*] ****) + +module Pattern_env : sig + type t = private + { mutable env : Env.t; + equations_scope : int; + in_counterexample : bool; } + val make: Env.t -> equations_scope:int -> in_counterexample:bool -> t + val copy: ?equations_scope:int -> t -> t + val set_env: t -> Env.t -> unit +end = struct + type t = + { mutable env : Env.t; + equations_scope : int; + in_counterexample : bool; } + let make env ~equations_scope ~in_counterexample = + { env; + equations_scope; + in_counterexample; } + let copy ?equations_scope penv = + let equations_scope = + match equations_scope with None -> penv.equations_scope | Some s -> s in + { penv with equations_scope } + let set_env penv env = penv.env <- env +end -type equations_generation = - | Forbidden - | Allowed of { equated_types : TypePairs.t } +(**** unification mode ****) -type unification_mode = - | Expression (* unification in expression *) +type unification_environment = + | Expression of + { env : Env.t; + in_subst : bool; } + (* normal unification mode *) | Pattern of - { equations_generation : equations_generation; + { penv : Pattern_env.t; + equated_types : TypePairs.t; assume_injective : bool; - allow_recursive_equations : bool; } - (* unification in pattern which may add local constraints *) - | Subst - (* unification during type constructor expansion; more - relaxed than [Expression] in some cases. *) - -let umode = ref Expression - -let in_pattern_mode () = - match !umode with - | Expression | Subst -> false + unify_eq_set : TypePairs.t; } + (* GADT constraint unification mode: + only used for type indices of GADT constructors + during pattern matching. + This allows adding local constraints. *) + +let get_env = function + | Expression {env} -> env + | Pattern {penv} -> penv.env + +let set_env uenv env = + match uenv with + | Expression _ -> invalid_arg "Ctype.set_env" + | Pattern {penv} -> Pattern_env.set_env penv env + +let in_pattern_mode = function + | Expression _ -> false | Pattern _ -> true -let in_subst_mode () = - match !umode with - | Expression | Pattern _ -> false - | Subst -> true +let get_equations_scope = function + | Expression _ -> invalid_arg "Ctype.get_equations_scope" + | Pattern r -> r.penv.equations_scope + +let order_type_pair t1 t2 = + if get_id t1 <= get_id t2 then (t1, t2) else (t2, t1) -let can_generate_equations () = - match !umode with - | Expression | Subst | Pattern { equations_generation = Forbidden } -> false - | Pattern { equations_generation = Allowed _ } -> true +let add_type_equality uenv t1 t2 = + match uenv with + | Expression _ -> invalid_arg "Ctype.add_type_equality" + | Pattern r -> TypePairs.add r.unify_eq_set (order_type_pair t1 t2) + +let unify_eq uenv t1 t2 = + eq_type t1 t2 || + match uenv with + | Expression _ -> false + | Pattern r -> TypePairs.mem r.unify_eq_set (order_type_pair t1 t2) + +(* unification during type constructor expansion: + This mode disables the propagation of the level and scope of + the row variable to the whole type during the unification. + (see unify_{row, fields} and PR #11771) *) +let in_subst_mode = function + | Expression {in_subst} -> in_subst + | Pattern _ -> false (* Can only be called when generate_equations is true *) -let record_equation t1 t2 = - match !umode with - | Expression | Subst | Pattern { equations_generation = Forbidden } -> - assert false - | Pattern { equations_generation = Allowed { equated_types } } -> +let record_equation uenv t1 t2 = + match uenv with + | Expression _ -> + invalid_arg "Ctype.record_equation" + | Pattern { equated_types } -> TypePairs.add equated_types (t1, t2) -let can_assume_injective () = - match !umode with - | Expression | Subst -> false +let can_assume_injective = function + | Expression _ -> false | Pattern { assume_injective } -> assume_injective -let in_counterexample () = - match !umode with - | Expression | Subst -> false - | Pattern { allow_recursive_equations } -> allow_recursive_equations - -let allow_recursive_equations () = - !Clflags.recursive_types - || match !umode with - | Expression | Subst -> false - | Pattern { allow_recursive_equations } -> allow_recursive_equations - -let set_mode_pattern ~allow_recursive_equations ~equated_types f = - let equations_generation = Allowed { equated_types } in - let assume_injective = true in - let new_umode = - Pattern - { equations_generation; - assume_injective; - allow_recursive_equations } - in - Misc.protect_refs [ Misc.R (umode, new_umode) ] f - -let without_assume_injective f = - match !umode with - | Expression | Subst -> f () - | Pattern r -> - let new_umode = Pattern { r with assume_injective = false } in - Misc.protect_refs [ Misc.R (umode, new_umode) ] f - -let without_generating_equations f = - match !umode with - | Expression | Subst -> f () - | Pattern r -> - let new_umode = Pattern { r with equations_generation = Forbidden } in - Misc.protect_refs [ Misc.R (umode, new_umode) ] f +let in_counterexample uenv = + match uenv with + | Expression _ -> false + | Pattern { penv } -> penv.in_counterexample + +let allow_recursive_equations uenv = + !Clflags.recursive_types || in_counterexample uenv + +(* Though without_* functions can be in a direct style, + CPS clarifies the structure of the code better. *) +let without_assume_injective uenv f = + match uenv with + | Expression _ as uenv -> f uenv + | Pattern r -> f (Pattern { r with assume_injective = false }) (*** Checks for type definitions ***) @@ -375,7 +466,7 @@ let in_pervasives p = let is_datatype decl= match decl.type_kind with Type_record _ | Type_variant _ | Type_open -> true - | Type_abstract -> false + | Type_abstract _ -> false (**********************************************) @@ -509,35 +600,34 @@ let rec filter_row_fields erase = function type variable_kind = Row_variable | Type_variable exception Non_closed of type_expr * variable_kind -(* [free_vars] collects the variables of the input type expression. It +(* [free_vars] walks over the variables of the input type expression. It is used for several different things in the type-checker, with the following bells and whistles: - If [env] is Some typing environment, types in the environment are expanded to check whether the apparently-free variable would vanish during expansion. - - We collect both type variables and row variables, paired with - a [variable_kind] to distinguish them. - We do not count "virtual" free variables -- free variables stored in the abbreviation of an object type that has been expanded (we store the abbreviations for use when displaying the type). - [free_vars] returns a [(variable * bool) list], while - [free_variables] below drops the type/row information - and only returns a [variable list]. + [free_vars] accumulates its answer in a monoid-like structure, with + an initial element [zero] and a combining function [add_one], passing + [add_one] information about whether the variable is a normal type variable + or a row variable. *) -let free_vars ?env ty = +let free_vars ~init ~add_one ?env mark ty = let rec fv ~kind acc ty = - if not (try_mark_node ty) then acc + if not (try_mark_node mark ty) then acc else match get_desc ty, env with | Tvar _, _ -> - (ty, kind) :: acc + add_one ty kind acc | Tconstr (path, tl, _), Some env -> let acc = match Env.find_type_expansion path env with | exception Not_found -> acc | (_, body, _) -> if get_level body = generic_level then acc - else (ty, kind) :: acc + else add_one ty kind acc in List.fold_left (fv ~kind:Type_variable) acc tl | Tobject (ty, _), _ -> @@ -553,31 +643,38 @@ let free_vars ?env ty = else fv ~kind:Row_variable acc (row_more row) | _ -> fold_type_expr (fv ~kind) acc ty - in fv ~kind:Type_variable [] ty + in fv ~kind:Type_variable init ty let free_variables ?env ty = - let tl = List.map fst (free_vars ?env ty) in - unmark_type ty; - tl + let add_one ty _kind acc = ty :: acc in + with_type_mark (fun mark -> free_vars ~init:[] ~add_one ?env mark ty) + +let free_variables_list ?env tyl = + let add_one ty _kind acc = ty :: acc in + with_type_mark (fun mark -> + List.fold_left (fun acc ty -> free_vars ~init:acc ~add_one ?env mark ty) + [] tyl) + +let closed_type ?env mark ty = + let add_one ty kind _acc = raise (Non_closed (ty, kind)) in + free_vars ~init:() ~add_one ?env mark ty -let closed_type ty = - match free_vars ty with - [] -> () - | (v, real) :: _ -> raise (Non_closed (v, real)) +let closed_type_expr ?env ty = + with_type_mark (fun mark -> + try closed_type ?env mark ty; true + with Non_closed _ -> false) let closed_parameterized_type params ty = - List.iter mark_type params; - let ok = - try closed_type ty; true with Non_closed _ -> false in - List.iter unmark_type params; - unmark_type ty; - ok + with_type_mark begin fun mark -> + List.iter (mark_type mark) params; + try closed_type mark ty; true with Non_closed _ -> false + end let closed_type_decl decl = - try - List.iter mark_type decl.type_params; + with_type_mark begin fun mark -> try + List.iter (mark_type mark) decl.type_params; begin match decl.type_kind with - Type_abstract -> + Type_abstract _ -> () | Type_variant (v, _rep) -> List.iter @@ -586,36 +683,35 @@ let closed_type_decl decl = | Some _ -> () | None -> match cd_args with - | Cstr_tuple l -> List.iter closed_type l - | Cstr_record l -> List.iter (fun l -> closed_type l.ld_type) l + | Cstr_tuple l -> List.iter (closed_type mark) l + | Cstr_record l -> + List.iter (fun l -> closed_type mark l.ld_type) l ) v | Type_record(r, _rep) -> - List.iter (fun l -> closed_type l.ld_type) r + List.iter (fun l -> closed_type mark l.ld_type) r | Type_open -> () end; begin match decl.type_manifest with None -> () - | Some ty -> closed_type ty + | Some ty -> closed_type mark ty end; - unmark_type_decl decl; None with Non_closed (ty, _) -> - unmark_type_decl decl; Some ty + end let closed_extension_constructor ext = - try - List.iter mark_type ext.ext_type_params; + with_type_mark begin fun mark -> try + List.iter (mark_type mark) ext.ext_type_params; begin match ext.ext_ret_type with | Some _ -> () - | None -> iter_type_expr_cstr_args closed_type ext.ext_args + | None -> iter_type_expr_cstr_args (closed_type mark) ext.ext_args end; - unmark_extension_constructor ext; None with Non_closed (ty, _) -> - unmark_extension_constructor ext; Some ty + end type closed_class_failure = { free_variable: type_expr * variable_kind; @@ -625,13 +721,14 @@ type closed_class_failure = { exception CCFailure of closed_class_failure let closed_class params sign = - List.iter mark_type params; - ignore (try_mark_node sign.csig_self_row); + with_type_mark begin fun mark -> + List.iter (mark_type mark) params; + ignore (try_mark_node mark sign.csig_self_row); try Meths.iter (fun lab (priv, _, ty) -> if priv = Mpublic then begin - try closed_type ty with Non_closed (ty0, variable_kind) -> + try closed_type mark ty with Non_closed (ty0, variable_kind) -> raise (CCFailure { free_variable = (ty0, variable_kind); meth = lab; @@ -639,14 +736,10 @@ let closed_class params sign = }) end) sign.csig_meths; - List.iter unmark_type params; - unmark_class_signature sign; None with CCFailure reason -> - List.iter unmark_type params; - unmark_class_signature sign; Some reason - + end (**********************) (* Type duplication *) @@ -666,76 +759,53 @@ let duplicate_class_type ty = (* Type level manipulation *) (*****************************) -(* - It would be a bit more efficient to remove abbreviation expansions - rather than generalizing them: these expansions will usually not be - used anymore. However, this is not possible in the general case, as - [expand_abbrev] (via [subst]) requires these expansions to be - preserved. Does it worth duplicating this code ? -*) -let rec generalize ty = - let level = get_level ty in - if (level > !current_level) && (level <> generic_level) then begin - set_level ty generic_level; - (* recur into abbrev for the speed *) - begin match get_desc ty with - Tconstr (_, _, abbrev) -> - iter_abbrev generalize !abbrev - | _ -> () - end; - iter_type_expr generalize ty - end - -let generalize ty = - simple_abbrevs := Mnil; - generalize ty - -(* Generalize the structure and lower the variables *) - -let rec generalize_structure ty = - let level = get_level ty in - if level <> generic_level then begin - if is_Tvar ty && level > !current_level then - set_level ty !current_level - else if level > !current_level then begin - begin match get_desc ty with - Tconstr (_, _, abbrev) -> - abbrev := Mnil - | _ -> () - end; - set_level ty generic_level; - iter_type_expr generalize_structure ty - end - end - -let generalize_structure ty = - simple_abbrevs := Mnil; - generalize_structure ty -(* Generalize the spine of a function, if the level >= !current_level *) +(* + Build a copy of a type in which nodes reachable through a path composed + only of Tarrow, Tpoly, Ttuple, Tpackage and Tconstr, and whose level + was no lower than [!current_level], are at [generic_level]. + This is different from [with_local_level_gen], which generalizes in place, + and only nodes with a level higher than [!current_level]. + This is used for typing classes, to indicate which types have been + inferred in the first pass, and can be considered as "known" during the + second pass. + *) -let rec generalize_spine ty = - let level = get_level ty in - if level < !current_level || level = generic_level then () else +let rec copy_spine copy_scope ty = match get_desc ty with - Tarrow (_, ty1, ty2, _) -> - set_level ty generic_level; - generalize_spine ty1; - generalize_spine ty2; - | Tpoly (ty', _) -> - set_level ty generic_level; - generalize_spine ty' - | Ttuple tyl -> - set_level ty generic_level; - List.iter generalize_spine tyl - | Tpackage (_, fl) -> - set_level ty generic_level; - List.iter (fun (_n, ty) -> generalize_spine ty) fl - | Tconstr (_, tyl, memo) -> - set_level ty generic_level; - memo := Mnil; - List.iter generalize_spine tyl - | _ -> () + | Tsubst (ty, _) -> ty + | Tvar _ + | Tfield _ + | Tnil + | Tvariant _ + | Tobject _ + | Tlink _ + | Tunivar _ -> ty + | (Tarrow _ | Tpoly _ | Ttuple _ | Tpackage _ | Tconstr _) as desc -> + let level = get_level ty in + if level < !current_level || level = generic_level then ty else + let t = newgenstub ~scope:(get_scope ty) in + For_copy.redirect_desc copy_scope ty (Tsubst (t, None)); + let copy_rec = copy_spine copy_scope in + let desc' = match desc with + | Tarrow (lbl, ty1, ty2, _) -> + Tarrow (lbl, copy_rec ty1, copy_rec ty2, commu_ok) + | Tpoly (ty', tvl) -> + Tpoly (copy_rec ty', tvl) + | Ttuple tyl -> + Ttuple (List.map (fun (lbl, ty) -> (lbl, copy_rec ty)) tyl) + | Tpackage {pack_path; pack_cstrs} -> + let fl = List.map (fun (n, ty) -> n, copy_rec ty) pack_cstrs in + Tpackage {pack_path; pack_cstrs = fl} + | Tconstr (path, tyl, _) -> + Tconstr (path, List.map copy_rec tyl, ref Mnil) + | _ -> assert false + in + Transient_expr.set_stub_desc t desc'; + t + +let copy_spine ty = + For_copy.with_scope (fun copy_scope -> copy_spine copy_scope ty) let forward_try_expand_safe = (* Forward declaration *) ref (fun _env _ty -> assert false) @@ -762,35 +832,36 @@ let rec normalize_package_path env p = normalize_package_path env (Path.Pdot (p1', s)) | _ -> p -let rec check_scope_escape env level ty = +let rec check_scope_escape mark env level ty = let orig_level = get_level ty in - if try_logged_mark_node ty then begin + if try_mark_node mark ty then begin if level < get_scope ty then raise_scope_escape_exn ty; begin match get_desc ty with | Tconstr (p, _, _) when level < Path.scope p -> begin match !forward_try_expand_safe env ty with | ty' -> - check_scope_escape env level ty' + check_scope_escape mark env level ty' | exception Cannot_expand -> raise_escape_exn (Constructor p) end - | Tpackage (p, fl) when level < Path.scope p -> + | Tpackage ({pack_path = p} as pack) when level < Path.scope p -> let p' = normalize_package_path env p in if Path.same p p' then raise_escape_exn (Module_type p); - check_scope_escape env level - (newty2 ~level:orig_level (Tpackage (p', fl))) + check_scope_escape mark env level + (newty2 ~level:orig_level + (Tpackage {pack with pack_path = p'})) | _ -> - iter_type_expr (check_scope_escape env level) ty + iter_type_expr (check_scope_escape mark env level) ty end; end let check_scope_escape env level ty = - let snap = snapshot () in - try check_scope_escape env level ty; backtrack snap + with_type_mark begin fun mark -> try + check_scope_escape mark env level ty with Escape e -> - backtrack snap; raise (Escape { e with context = Some ty }) + end let rec update_scope scope ty = if get_scope ty < scope then begin @@ -814,8 +885,14 @@ let update_scope_for tr_exn scope ty = *) let rec update_level env level expand ty = - if get_level ty > level then begin + let ty_level = get_level ty in + if ty_level > level then begin if level < get_scope ty then raise_scope_escape_exn ty; + let set_level () = + set_level ty level; + if ty_level = generic_level then + add_to_pool ~level (Transient_expr.repr ty) + in match get_desc ty with Tconstr(p, _tl, _abbrev) when level < Path.scope p -> (* Try first to replace an abbreviation by its expansion. *) @@ -842,13 +919,13 @@ let rec update_level env level expand ty = link_type ty ty'; update_level env level expand ty' with Cannot_expand -> - set_level ty level; + set_level (); iter_type_expr (update_level env level expand) ty end - | Tpackage (p, fl) when level < Path.scope p -> + | Tpackage ({pack_path = p} as pack) when level < Path.scope p -> let p' = normalize_package_path env p in if Path.same p p' then raise_escape_exn (Module_type p); - set_type_desc ty (Tpackage (p', fl)); + set_type_desc ty (Tpackage {pack with pack_path = p'}); update_level env level expand ty | Tobject (_, ({contents=Some(p, _tl)} as nm)) when level < Path.scope p -> @@ -860,13 +937,13 @@ let rec update_level env level expand ty = set_type_desc ty (Tvariant (set_row_name row None)) | _ -> () end; - set_level ty level; + set_level (); iter_type_expr (update_level env level expand) ty | Tfield(lab, _, ty1, _) when lab = dummy_method && level < get_scope ty1 -> raise_escape_exn Self | _ -> - set_level ty level; + set_level (); (* XXX what about abbreviations in Tconstr ? *) iter_type_expr (update_level env level expand) ty end @@ -908,7 +985,7 @@ let rec lower_contravariant env var_level visited contra ty = try let typ = Env.find_type path env in typ.type_variance, - typ.type_kind = Type_abstract + type_kind_is_abstract typ with Not_found -> (* See testsuite/tests/typing-missing-cmi-2 for an example *) List.map (fun _ -> Variance.unknown) tyl, @@ -928,8 +1005,8 @@ let rec lower_contravariant env var_level visited contra ty = | ty -> lower_rec contra ty | exception Cannot_expand -> not_expanded () else not_expanded () - | Tpackage (_, fl) -> - List.iter (fun (_n, ty) -> lower_rec true ty) fl + | Tpackage p -> + List.iter (fun (_n, ty) -> lower_rec true ty) p.pack_cstrs | Tarrow (_, t1, t2, _) -> lower_rec true t1; lower_rec contra t2 @@ -945,11 +1022,11 @@ let lower_contravariant env ty = simple_abbrevs := Mnil; lower_contravariant env !nongen_level (Hashtbl.create 7) false ty -let rec generalize_class_type' gen = +let rec generalize_class_type gen = function Cty_constr (_, params, cty) -> List.iter gen params; - generalize_class_type' gen cty + generalize_class_type gen cty | Cty_signature csig -> gen csig.csig_self; gen csig.csig_self_row; @@ -957,65 +1034,51 @@ let rec generalize_class_type' gen = Meths.iter (fun _ (_, _, ty) -> gen ty) csig.csig_meths | Cty_arrow (_, ty, cty) -> gen ty; - generalize_class_type' gen cty - -let generalize_class_type cty = - generalize_class_type' generalize cty - -let generalize_class_type_structure cty = - generalize_class_type' generalize_structure cty - -(* Correct the levels of type [ty]. *) -let correct_levels ty = - duplicate_type ty + generalize_class_type gen cty (* Only generalize the type ty0 in ty *) -let limited_generalize ty0 ty = - let graph = Hashtbl.create 17 in - let idx = ref lowest_level in +let limited_generalize ty0 ~inside:ty = + let graph = TypeHash.create 17 in let roots = ref [] in let rec inverse pty ty = - let level = get_level ty in - if (level > !current_level) || (level = generic_level) then begin - decr idx; - Hashtbl.add graph !idx (ty, ref pty); - if (level = generic_level) || eq_type ty ty0 then - roots := ty :: !roots; - set_level ty !idx; - iter_type_expr (inverse [ty]) ty - end else if level < lowest_level then begin - let (_, parents) = Hashtbl.find graph level in - parents := pty @ !parents - end + match TypeHash.find_opt graph ty with + | Some parents -> parents := pty @ !parents + | None -> + let level = get_level ty in + if level > !current_level then begin + TypeHash.add graph ty (ref pty); + (* XXX: why generic_level needs to be a root *) + if (level = generic_level) || eq_type ty ty0 then + roots := ty :: !roots; + iter_type_expr (inverse [ty]) ty + end + in - and generalize_parents ty = - let idx = get_level ty in - if idx <> generic_level then begin + let rec generalize_parents ~is_root ty = + if is_root || get_level ty <> generic_level then begin set_level ty generic_level; - List.iter generalize_parents !(snd (Hashtbl.find graph idx)); + List.iter (generalize_parents ~is_root:false) !(TypeHash.find graph ty); (* Special case for rows: must generalize the row variable *) match get_desc ty with Tvariant row -> let more = row_more row in let lv = get_level more in - if (lv < lowest_level || lv > !current_level) - && lv <> generic_level then set_level more generic_level + if (TypeHash.mem graph more || lv > !current_level) + && lv <> generic_level then set_level more generic_level | _ -> () end in inverse [] ty; - if get_level ty0 < lowest_level then - iter_type_expr (inverse []) ty0; - List.iter generalize_parents !roots; - Hashtbl.iter - (fun _ (ty, _) -> + List.iter (generalize_parents ~is_root:true) !roots; + TypeHash.iter + (fun ty _ -> if get_level ty <> generic_level then set_level ty !current_level) graph -let limited_generalize_class_type rv cty = - generalize_class_type' (limited_generalize rv) cty +let limited_generalize_class_type rv ~inside:cty = + generalize_class_type (fun inside -> limited_generalize rv ~inside) cty (* Compute statically the free univars of all nodes in a type *) (* This avoids doing it repeatedly during instantiation *) @@ -1058,15 +1121,14 @@ let compute_univars ty = let fully_generic ty = - let rec aux ty = - if not_marked_node ty then - if get_level ty = generic_level then - (flip_mark_node ty; iter_type_expr aux ty) - else raise Exit - in - let res = try aux ty; true with Exit -> false in - unmark_type ty; - res + with_type_mark begin fun mark -> + let rec aux ty = + if try_mark_node mark ty then + if get_level ty = generic_level then iter_type_expr aux ty + else raise Exit + in + try aux ty; true with Exit -> false + end (*******************) @@ -1223,11 +1285,7 @@ let instance ?partial sch = copy ?partial copy_scope sch) let generic_instance sch = - let old = !current_level in - current_level := generic_level; - let ty = instance sch in - current_level := old; - ty + with_level ~level:generic_level (fun () -> instance sch) let instance_list schl = For_copy.with_scope (fun copy_scope -> @@ -1236,8 +1294,6 @@ let instance_list schl = (* Create unique names to new type constructors. Used for existential types and local constraints. *) let get_new_abstract_name env s = - (* unique names are needed only for error messages *) - if in_counterexample () then s else let name index = if index = 0 && s <> "" && s.[String.length s - 1] <> '$' then s else Printf.sprintf "%s%d" s index @@ -1250,7 +1306,7 @@ let get_new_abstract_name env s = let index = Misc.find_first_mono check in name index -let new_local_type ?(loc = Location.none) ?manifest_and_scope () = +let new_local_type ?(loc = Location.none) ?manifest_and_scope origin = let manifest, expansion_scope = match manifest_and_scope with None -> None, Btype.lowest_level @@ -1259,7 +1315,7 @@ let new_local_type ?(loc = Location.none) ?manifest_and_scope () = { type_params = []; type_arity = 0; - type_kind = Type_abstract; + type_kind = Type_abstract origin; type_private = Public; type_manifest = manifest; type_variance = []; @@ -1270,31 +1326,40 @@ let new_local_type ?(loc = Location.none) ?manifest_and_scope () = type_attributes = []; type_immediate = Unknown; type_unboxed_default = false; - type_uid = Uid.mk ~current_unit:(Env.get_unit_name ()); + type_uid = Uid.mk ~current_unit:(Env.get_current_unit ()); } -let existential_name cstr ty = - match get_desc ty with - | Tvar (Some name) -> "$" ^ cstr.cstr_name ^ "_'" ^ name - | _ -> "$" ^ cstr.cstr_name +let existential_name name_counter ty = + let name = + match get_desc ty with + | Tvar (Some name) -> name + | _ -> + let name = Misc.letter_of_int !name_counter in + incr name_counter; + name + in + "$" ^ name type existential_treatment = | Keep_existentials_flexible - | Make_existentials_abstract of { env: Env.t ref; scope: int } + | Make_existentials_abstract of Pattern_env.t let instance_constructor existential_treatment cstr = For_copy.with_scope (fun copy_scope -> + let name_counter = ref 0 in let copy_existential = match existential_treatment with | Keep_existentials_flexible -> copy copy_scope - | Make_existentials_abstract {env; scope = fresh_constr_scope} -> + | Make_existentials_abstract penv -> fun existential -> - let decl = new_local_type () in - let name = existential_name cstr existential in + let env = penv.env in + let fresh_constr_scope = penv.equations_scope in + let decl = new_local_type (Existential cstr.cstr_name) in + let name = existential_name name_counter existential in let (id, new_env) = - Env.enter_type (get_new_abstract_name !env name) decl !env + Env.enter_type (get_new_abstract_name env name) decl env ~scope:fresh_constr_scope in - env := new_env; + Pattern_env.set_env penv new_env; let to_unify = newty (Tconstr (Path.Pident id,[],ref Mnil)) in let tv = copy copy_scope existential in assert (is_Tvar tv); @@ -1315,7 +1380,7 @@ let instance_parameterized_type ?keep_names sch_args sch = ) let map_kind f = function - | Type_abstract -> Type_abstract + | Type_abstract r -> Type_abstract r | Type_open -> Type_open | Type_variant (cl, rep) -> Type_variant ( @@ -1343,11 +1408,7 @@ let instance_declaration decl = ) let generic_instance_declaration decl = - let old = !current_level in - current_level := generic_level; - let decl = instance_declaration decl in - current_level := old; - decl + with_level ~level:generic_level (fun () -> instance_declaration decl) let instance_class params cty = let rec copy_class_type copy_scope = function @@ -1404,7 +1465,7 @@ let copy_sep ~copy_scope ~fixed ~(visited : type_expr TypeHash.t) sch = let delayed_copies = ref [] in let add_delayed_copy t ty = delayed_copies := - lazy (Transient_expr.set_stub_desc t (Tlink (copy copy_scope ty))) :: + (fun () -> Transient_expr.set_stub_desc t (Tlink (copy copy_scope ty))) :: !delayed_copies in let rec copy_rec ~may_share (ty : type_expr) = @@ -1445,10 +1506,10 @@ let copy_sep ~copy_scope ~fixed ~(visited : type_expr TypeHash.t) sch = end in let ty = copy_rec ~may_share:true sch in - List.iter Lazy.force !delayed_copies; + List.iter (fun force -> force ()) !delayed_copies; ty -let instance_poly' copy_scope ~keep_names fixed univars sch = +let instance_poly' copy_scope ~keep_names ~fixed univars sch = (* In order to compute univars below, [sch] should not contain [Tsubst] *) let copy_var ty = match get_desc ty with @@ -1461,17 +1522,17 @@ let instance_poly' copy_scope ~keep_names fixed univars sch = let ty = copy_sep ~copy_scope ~fixed ~visited sch in vars, ty -let instance_poly ?(keep_names=false) fixed univars sch = +let instance_poly ?(keep_names=false) ~fixed univars sch = For_copy.with_scope (fun copy_scope -> - instance_poly' copy_scope ~keep_names fixed univars sch + instance_poly' copy_scope ~keep_names ~fixed univars sch ) -let instance_label fixed lbl = +let instance_label ~fixed lbl = For_copy.with_scope (fun copy_scope -> let vars, ty_arg = match get_desc lbl.lbl_arg with Tpoly (ty, tl) -> - instance_poly' copy_scope ~keep_names:false fixed tl ty + instance_poly' copy_scope ~keep_names:false ~fixed tl ty | _ -> [], copy copy_scope lbl.lbl_arg in @@ -1488,36 +1549,31 @@ let unify_var' = (* Forward declaration *) let subst env level priv abbrev oty params args body = if List.length params <> List.length args then raise Cannot_subst; - let old_level = !current_level in - current_level := level; - let body0 = newvar () in (* Stub *) - let undo_abbrev = - match oty with - | None -> fun () -> () (* No abbreviation added *) - | Some ty -> - match get_desc ty with - Tconstr (path, tl, _) -> - let abbrev = proper_abbrevs tl abbrev in - memorize_abbrev abbrev priv path ty body0; - fun () -> forget_abbrev abbrev path - | _ -> assert false - in - abbreviations := abbrev; - let (params', body') = instance_parameterized_type params body in - abbreviations := ref Mnil; - let old_umode = !umode in - umode := Subst; - try - !unify_var' env body0 body'; - List.iter2 (!unify_var' env) params' args; - current_level := old_level; - umode := old_umode; - body' - with Unify _ -> - current_level := old_level; - umode := old_umode; - undo_abbrev (); - raise Cannot_subst + with_level ~level begin fun () -> + let body0 = newvar () in (* Stub *) + let undo_abbrev = + match oty with + | None -> fun () -> () (* No abbreviation added *) + | Some ty -> + match get_desc ty with + Tconstr (path, tl, _) -> + let abbrev = proper_abbrevs tl abbrev in + memorize_abbrev abbrev priv path ty body0; + fun () -> forget_abbrev abbrev path + | _ -> assert false + in + abbreviations := abbrev; + let (params', body') = instance_parameterized_type params body in + abbreviations := ref Mnil; + let uenv = Expression {env; in_subst = true} in + try + !unify_var' uenv body0 body'; + List.iter2 (!unify_var' uenv) params' args; + body' + with Unify _ -> + undo_abbrev (); + raise Cannot_subst + end (* Default to generic level. Usually, only the shape of the type matters, not @@ -1526,30 +1582,30 @@ let subst env level priv abbrev oty params args body = care about efficiency here. *) let apply ?(use_current_level = false) env params body args = + simple_abbrevs := Mnil; let level = if use_current_level then !current_level else generic_level in try subst env level Public (ref Mnil) None params args body with Cannot_subst -> raise Cannot_apply -let () = Subst.ctype_apply_env_empty := apply Env.empty - (****************************) (* Abbreviation expansion *) (****************************) (* If the environment has changed, memorized expansions might not - be correct anymore, and so we flush the cache. This is safe but - quite pessimistic: it would be enough to flush the cache when a - type or module definition is overridden in the environment. + be correct anymore, and so we flush the cache. The test used + checks whether any of types, modules, or local constraints have + been changed. *) let previous_env = ref Env.empty (*let string_of_kind = function Public -> "public" | Private -> "private"*) let check_abbrev_env env = - if env != !previous_env then begin + if not (Env.same_type_declarations env !previous_env) then begin (* prerr_endline "cleanup expansion cache"; *) cleanup_abbrev (); + simple_abbrevs := Mnil; previous_env := env end @@ -1573,59 +1629,55 @@ let check_abbrev_env env = and this other expansion fails. *) let expand_abbrev_gen kind find_type_expansion env ty = + let path, args, abbrev = match get_desc ty with + | Tconstr (path,args,abbrev) -> path, args, abbrev + | _ -> assert false + in check_abbrev_env env; - match get_desc ty with - Tconstr (path, args, abbrev) -> - let level = get_level ty in - let scope = get_scope ty in - let lookup_abbrev = proper_abbrevs args abbrev in - begin match find_expans kind path !lookup_abbrev with - Some ty' -> + let level = get_level ty in + let scope = get_scope ty in + let lookup_abbrev = proper_abbrevs args abbrev in + let expansion = + (* first look for an existing expansion *) + match find_expans kind path !lookup_abbrev with + | None -> None + | Some ty' -> try + (* prerr_endline + ("found a "^string_of_kind kind^" expansion for "^Path.name path);*) + if level <> generic_level then update_level env level ty'; + update_scope scope ty'; + Some ty' + with Escape _ -> + (* in case of Escape, discard the stale expansion and re-expand *) + forget_abbrev lookup_abbrev path; + None + in + begin match expansion with + | Some ty' -> ty' + | None -> + (* attempt to (re-)expand *) + match find_type_expansion path env with + | exception Not_found -> + (* another way to expand is to normalize the path itself *) + let path' = Env.normalize_type_path None env path in + if Path.same path path' then raise Cannot_expand + else newty2 ~level (Tconstr (path', args, abbrev)) + | (params, body, lv) -> (* prerr_endline - ("found a "^string_of_kind kind^" expansion for "^Path.name path);*) - if level <> generic_level then - begin try - update_level env level ty' - with Escape _ -> - (* XXX This should not happen. - However, levels are not correctly restored after a - typing error *) - () - end; - begin try - update_scope scope ty'; - with Escape _ -> - (* XXX This should not happen. - However, levels are not correctly restored after a - typing error *) - () - end; + ("add a "^string_of_kind kind^" expansion for "^Path.name path);*) + let ty' = + try + subst env level kind abbrev (Some ty) params args body + with Cannot_subst -> raise_escape_exn Constraint + in + (* For gadts, remember type as non exportable *) + (* The ambiguous level registered for ty' should be the highest *) + (* if !trace_gadt_instances then begin *) + let scope = Int.max lv (get_scope ty) in + update_scope scope ty; + update_scope scope ty'; ty' - | None -> - match find_type_expansion path env with - | exception Not_found -> - (* another way to expand is to normalize the path itself *) - let path' = Env.normalize_type_path None env path in - if Path.same path path' then raise Cannot_expand - else newty2 ~level (Tconstr (path', args, abbrev)) - | (params, body, lv) -> - (* prerr_endline - ("add a "^string_of_kind kind^" expansion for "^Path.name path);*) - let ty' = - try - subst env level kind abbrev (Some ty) params args body - with Cannot_subst -> raise_escape_exn Constraint - in - (* For gadts, remember type as non exportable *) - (* The ambiguous level registered for ty' should be the highest *) - (* if !trace_gadt_instances then begin *) - let scope = Int.max lv (get_scope ty) in - update_scope scope ty; - update_scope scope ty'; - ty' - end - | _ -> - assert false + end (* Expand respecting privacy *) let expand_abbrev env ty = @@ -1668,6 +1720,8 @@ let try_expand_safe env ty = let rec try_expand_head (try_once : Env.t -> type_expr -> type_expr) env ty = let ty' = try_once env ty in + (* let () = Format.eprintf "BEFORE TRY_EXPAND_HEAD REC\n" in *) + if ty == ty' then ty' else try try_expand_head try_once env ty' with Cannot_expand -> ty' @@ -1703,7 +1757,7 @@ let rec extract_concrete_typedecl env ty = begin match Env.find_type p env with | exception Not_found -> May_have_typedecl | decl -> - if decl.type_kind <> Type_abstract then Typedecl(p, p, decl) + if not (type_kind_is_abstract decl) then Typedecl(p, p, decl) else begin match try_expand_safe env ty with | exception Cannot_expand -> May_have_typedecl @@ -1763,8 +1817,8 @@ let full_expand ~may_forget_scope env ty = (* #10277: forget scopes when printing trace *) with_level ~level:(get_level ty) begin fun () -> (* The same as [expand_head], except in the failing case we return the - *original* type, not [correct_levels ty].*) - try try_expand_head try_expand_safe env (correct_levels ty) with + *original* type, not [duplicate_type ty].*) + try try_expand_head try_expand_safe env (duplicate_type ty) with | Cannot_expand -> ty end else expand_head env ty @@ -1791,7 +1845,7 @@ let generic_abbrev env path = let generic_private_abbrev env path = try match Env.find_type path env with - {type_kind = Type_abstract; + {type_kind = Type_abstract _; type_private = Private; type_manifest = Some body} -> get_level body = generic_level @@ -1812,43 +1866,49 @@ let is_contractive env p = exception Occur -let rec occur_rec env allow_recursive visited ty0 ty = - if eq_type ty ty0 then raise Occur; - match get_desc ty with - Tconstr(p, _tl, _abbrev) -> - if allow_recursive && is_contractive env p then () else - begin try - if TypeSet.mem ty visited then raise Occur; - let visited = TypeSet.add ty visited in - iter_type_expr (occur_rec env allow_recursive visited ty0) ty - with Occur -> try - let ty' = try_expand_head try_expand_once env ty in - (* This call used to be inlined, but there seems no reason for it. - Message was referring to change in rev. 1.58 of the CVS repo. *) - occur_rec env allow_recursive visited ty0 ty' - with Cannot_expand -> - raise Occur - end - | Tobject _ | Tvariant _ -> - () - | _ -> - if allow_recursive || TypeSet.mem ty visited then () else begin - let visited = TypeSet.add ty visited in - iter_type_expr (occur_rec env allow_recursive visited ty0) ty - end +let rec occur_rec env visited allow_recursive parents ty0 ty = + if not_marked_node visited ty then begin + if eq_type ty ty0 then raise Occur; + begin match get_desc ty with + Tconstr(p, _tl, _abbrev) -> + if allow_recursive && is_contractive env p then () else + begin try + if TypeSet.mem ty parents then raise Occur; + let parents = TypeSet.add ty parents in + iter_type_expr (occur_rec env visited allow_recursive parents ty0) ty + with Occur -> try + let ty' = try_expand_head try_expand_safe env ty in + (* This call used to be inlined, but there seems no reason for it. + Message was referring to change in rev. 1.58 of the CVS repo. *) + occur_rec env visited allow_recursive parents ty0 ty' + with Cannot_expand -> + raise Occur + end + | Tobject _ | Tvariant _ -> + () + | _ -> + if allow_recursive || TypeSet.mem ty parents then () else begin + let parents = TypeSet.add ty parents in + iter_type_expr (occur_rec env visited allow_recursive parents ty0) ty + end + end; + ignore (try_mark_node visited ty) + end let type_changed = ref false (* trace possible changes to the studied type *) let merge r b = if b then r := true -let occur env ty0 ty = - let allow_recursive = allow_recursive_equations () in +let occur uenv ty0 ty = + let env = get_env uenv in + let allow_recursive = allow_recursive_equations uenv in let old = !type_changed in try while type_changed := false; if not (eq_type ty0 ty) then - occur_rec env allow_recursive TypeSet.empty ty0 ty; + with_type_mark (fun mark -> + occur_rec env mark allow_recursive TypeSet.empty ty0 ty); !type_changed do () (* prerr_endline "changed" *) done; merge type_changed old @@ -1856,13 +1916,13 @@ let occur env ty0 ty = merge type_changed old; raise exn -let occur_for tr_exn env t1 t2 = +let occur_for tr_exn uenv t1 t2 = try - occur env t1 t2 + occur uenv t1 t2 with Occur -> raise_for tr_exn (Rec_occur(t1, t2)) let occur_in env ty0 t = - try occur env ty0 t; false with Occur -> true + try occur (Expression {env; in_subst = false}) ty0 t; false with Occur -> true (* Check that a local constraint is well-founded *) (* PR#6405: not needed since we allow recursion and work on normalized types *) @@ -1901,8 +1961,9 @@ let rec local_non_recursive_abbrev ~allow_rec strict visited env p ty = (local_non_recursive_abbrev ~allow_rec true visited env p) ty end -let local_non_recursive_abbrev env p ty = - let allow_rec = allow_recursive_equations () in +let local_non_recursive_abbrev uenv p ty = + let env = get_env uenv in + let allow_rec = allow_recursive_equations uenv in try (* PR#7397: need to check trace_gadt_instances *) wrap_trace_gadt_instances env (local_non_recursive_abbrev ~allow_rec false [] env p) ty; @@ -1914,16 +1975,25 @@ let local_non_recursive_abbrev env p ty = (* Polymorphic Unification *) (*****************************) +(* Polymorphic unification is hard in the presence of recursive types. A + correctness argument for the approach below can be made by reference to + "Numbering matters: first-order canonical forms for second-order recursive + types" (ICFP'04) by Gauthier & Pottier. That work describes putting numbers + on nodes; we do not do that here, but instead make a decision about whether + to abort or continue based on the comparison of the numbers if we calculated + them. A different approach would actually store the relevant numbers in the + [Tpoly] nodes. (The algorithm here actually pre-dates that paper, which was + developed independently. But reading and understanding the paper will help + guide intuition for reading this algorithm nonetheless.) *) + (* Since we cannot duplicate universal variables, unification must be done at meta-level, using bindings in univar_pairs *) -(* TODO: use find_opt *) let rec unify_univar t1 t2 = function (cl1, cl2) :: rem -> let find_univ t cl = - try - let (_, r) = List.find (fun (t',_) -> eq_type t t') cl in - Some r - with Not_found -> None + List.find_map (fun (t', r) -> + if eq_type t t' then Some r else None + ) cl in begin match find_univ t1 cl1, find_univ t2 cl2 with Some {contents=Some t'2}, Some _ when eq_type t2 t'2 -> @@ -1935,23 +2005,32 @@ let rec unify_univar t1 t2 = function | _ -> raise Cannot_unify_universal_variables end - | [] -> raise Cannot_unify_universal_variables + | [] -> + raise Out_of_scope_universal_variable (* The same as [unify_univar], but raises the appropriate exception instead of [Cannot_unify_universal_variables] *) -let unify_univar_for tr_exn t1 t2 univar_pairs = - try unify_univar t1 t2 univar_pairs - with Cannot_unify_universal_variables -> raise_unexplained_for tr_exn +let unify_univar_for (type a) (tr_exn : a trace_exn) t1 t2 univar_pairs = + try unify_univar t1 t2 univar_pairs with + | Cannot_unify_universal_variables -> raise_unexplained_for tr_exn + | Out_of_scope_universal_variable -> + (* Allow unscoped univars when checking for equality, since one + might want to compare arbitrary subparts of types, ignoring scopes; + see Typedecl_variance (#13514) for instance *) + match tr_exn with + | Equality -> raise_unexplained_for tr_exn + | _ -> fatal_error "Ctype.unify_univar_for: univar not in scope" (* Test the occurrence of free univars in a type *) (* That's way too expensive. Must do some kind of caching *) (* If [inj_only=true], only check injective positions *) let occur_univar ?(inj_only=false) env ty = let visited = ref TypeMap.empty in + with_type_mark begin fun mark -> let rec occur_rec bound ty = - if not_marked_node ty then + if not_marked_node mark ty then if TypeSet.is_empty bound then - (flip_mark_node ty; occur_desc bound ty) + (ignore (try_mark_node mark ty); occur_desc bound ty) else try let bound' = TypeMap.find ty !visited in if not (TypeSet.subset bound' bound) then begin @@ -1990,10 +2069,8 @@ let occur_univar ?(inj_only=false) env ty = end | _ -> iter_type_expr (occur_rec bound) ty in - Misc.try_finally (fun () -> - occur_rec TypeSet.empty ty - ) - ~always:(fun () -> unmark_type ty) + occur_rec TypeSet.empty ty + end let has_free_univars env ty = try occur_univar ~inj_only:false env ty; false with Escape _ -> true @@ -2024,10 +2101,9 @@ let get_univar_family univar_pairs univars = (* Whether a family of univars escapes from a type *) let univars_escape env univar_pairs vl ty = let family = get_univar_family univar_pairs vl in - let visited = ref TypeSet.empty in + with_type_mark begin fun mark -> let rec occur t = - if TypeSet.mem t !visited then () else begin - visited := TypeSet.add t !visited; + if try_mark_node mark t then begin match get_desc t with Tpoly (t, tl) -> if List.exists (fun t -> TypeSet.mem t family) tl then () @@ -2049,9 +2125,18 @@ let univars_escape env univar_pairs vl ty = end in occur ty + end + +let univar_pairs = ref [] + +let with_univar_pairs pairs f = + let old = !univar_pairs in + univar_pairs := pairs; + Misc.try_finally f + ~always:(fun () -> univar_pairs := old) (* Wrapper checking that no variable escapes and updating univar_pairs *) -let enter_poly env univar_pairs t1 tl1 t2 tl2 f = +let enter_poly env t1 tl1 t2 tl2 f = let old_univars = !univar_pairs in let known_univars = List.fold_left (fun s (cl,_) -> add_univars s cl) @@ -2063,17 +2148,15 @@ let enter_poly env univar_pairs t1 tl1 t2 tl2 f = univars_escape env old_univars tl2 (newty(Tpoly(t1,tl1))); let cl1 = List.map (fun t -> t, ref None) tl1 and cl2 = List.map (fun t -> t, ref None) tl2 in - univar_pairs := (cl1,cl2) :: (cl2,cl1) :: old_univars; - Misc.try_finally (fun () -> f t1 t2) - ~always:(fun () -> univar_pairs := old_univars) + with_univar_pairs + ((cl1,cl2) :: (cl2,cl1) :: old_univars) + (fun () -> f t1 t2) -let enter_poly_for tr_exn env univar_pairs t1 tl1 t2 tl2 f = +let enter_poly_for tr_exn env t1 tl1 t2 tl2 f = try - enter_poly env univar_pairs t1 tl1 t2 tl2 f + enter_poly env t1 tl1 t2 tl2 f with Escape e -> raise_for tr_exn (Escape e) -let univar_pairs = ref [] - (**** Instantiate a generic type into a poly type ***) let polyfy env ty vars = @@ -2159,40 +2242,45 @@ let unexpanded_diff ~got ~expected = (**** Unification ****) (* Return whether [t0] occurs in [ty]. Objects are also traversed. *) +let rec deep_occur_rec mark t0 ty = + if get_level ty >= get_level t0 && try_mark_node mark ty then begin + if eq_type ty t0 then raise Occur; + iter_type_expr (deep_occur_rec mark t0) ty + end + let deep_occur t0 ty = - let rec occur_rec ty = - if get_level ty >= get_level t0 && try_mark_node ty then begin - if eq_type ty t0 then raise Occur; - iter_type_expr occur_rec ty - end - in try - occur_rec ty; unmark_type ty; false - with Occur -> - unmark_type ty; true - -let gadt_equations_level = ref None - -let get_gadt_equations_level () = - match !gadt_equations_level with - | None -> assert false - | Some x -> x + with_type_mark (fun mark -> deep_occur_rec mark t0 ty); + false + with + | Occur -> true +let deep_occur_list t0 tyl = + try + with_type_mark (fun mark -> List.iter (deep_occur_rec mark t0) tyl); + false + with + | Occur -> true -(* a local constraint can be added only if the rhs +(* A local constraint can be added only if the rhs of the constraint does not contain any Tvars. - They need to be removed using this function *) -let reify env t = - let fresh_constr_scope = get_gadt_equations_level () in + They need to be removed using this function. + This function is called only in [Pattern] mode. *) +let reify uenv t = + let fresh_constr_scope = get_equations_scope uenv in let create_fresh_constr lev name = let name = match name with Some s -> "$'"^s | _ -> "$" in - let decl = new_local_type () in + let decl = new_local_type Definition in + let env = get_env uenv in + let new_name = + (* unique names are needed only for error messages *) + if in_counterexample uenv then name else get_new_abstract_name env name + in let (id, new_env) = - Env.enter_type (get_new_abstract_name !env name) decl !env - ~scope:fresh_constr_scope in + Env.enter_type new_name decl env ~scope:fresh_constr_scope in let path = Path.Pident id in - let t = newty2 ~level:lev (Tconstr (path,[],ref Mnil)) in - env := new_env; + let t = newty2 ~level:lev (Tconstr (path,[],ref Mnil)) in + set_env uenv new_env; path, t in let visited = ref TypeSet.empty in @@ -2242,7 +2330,7 @@ let non_aliasable p decl = let is_instantiable env p = try let decl = Env.find_type p env in - decl.type_kind = Type_abstract && + type_kind_is_abstract decl && decl.type_private = Public && decl.type_arity = 0 && decl.type_manifest = None && @@ -2256,6 +2344,21 @@ let compatible_paths p1 p2 = Path.same p1 path_bytes && Path.same p2 path_string || Path.same p1 path_string && Path.same p2 path_bytes +(* Two labels are considered compatible under certain conditions. + - they are the same + - in classic mode, only optional labels are relavant + - in pattern mode, we act as if we were in classic mode. If not, interactions + with GADTs from files compiled in classic mode would be unsound. +*) +let compatible_labels ~in_pattern_mode l1 l2 = + l1 = l2 + || (!Clflags.classic || in_pattern_mode) + && not (is_optional l1 || is_optional l2) + +let eq_labels error_mode ~in_pattern_mode l1 l2 = + if not (compatible_labels ~in_pattern_mode l1 l2) then + raise_for error_mode (Function_label_mismatch {got=l1; expected=l2}) + (* Check for datatypes carefully; see PR#6348 *) let rec expands_to_datatype env ty = match get_desc ty with @@ -2267,12 +2370,21 @@ let rec expands_to_datatype env ty = end | _ -> false -(* [mcomp] tests if two types are "compatible" -- i.e., if they could ever - unify. (This is distinct from [eqtype], which checks if two types *are* - exactly the same.) This is used to decide whether GADT cases are - unreachable. It is broadly part of unification. *) +(* [mcomp] tests if two types are "compatible" -- i.e., if there could + exist a witness of their equality. This is distinct from [eqtype], + which checks if two types *are* exactly the same. + [mcomp] is used to decide whether GADT cases are unreachable. + The existence of a witness is necessarily an incomplete property, + i.e. there exists types for which we cannot tell if an equality + witness could exist or not. Typically, this is the case for + abstract types, which could be equal to anything, depending on + their actual definition. As a result [mcomp] overapproximates + compatibilty, i.e. when it says that two types are incompatible, we + are sure that there exists no equality witness, but if it does not + say so, there is no guarantee that such a witness could exist. + *) -(* mcomp type_pairs subst env t1 t2 does not raise an +(* [mcomp type_pairs subst env t1 t2] should not raise an exception if it is possible that t1 and t2 are actually equal, assuming the types in type_pairs are equal and that the mapping subst holds. @@ -2300,17 +2412,17 @@ let rec mcomp type_pairs env t1 t2 = | (_, Tvar _) -> () | (Tarrow (l1, t1, u1, _), Tarrow (l2, t2, u2, _)) - when l1 = l2 || not (is_optional l1 || is_optional l2) -> + when compatible_labels ~in_pattern_mode:true l1 l2 -> mcomp type_pairs env t1 t2; mcomp type_pairs env u1 u2; | (Ttuple tl1, Ttuple tl2) -> - mcomp_list type_pairs env tl1 tl2 + mcomp_labeled_list type_pairs env tl1 tl2 | (Tconstr (p1, tl1, _), Tconstr (p2, tl2, _)) -> mcomp_type_decl type_pairs env p1 p2 tl1 tl2 | (Tconstr (_, [], _), _) when has_injective_univars env t2' -> - raise_unexplained_for Unify + raise Incompatible | (_, Tconstr (_, [], _)) when has_injective_univars env t1' -> - raise_unexplained_for Unify + raise Incompatible | (Tconstr (p, _, _), _) | (_, Tconstr (p, _, _)) -> begin try let decl = Env.find_type p env in @@ -2335,12 +2447,14 @@ let rec mcomp type_pairs env t1 t2 = mcomp type_pairs env t1 t2 | (Tpoly (t1, tl1), Tpoly (t2, tl2)) -> (try - enter_poly env univar_pairs + enter_poly env t1 tl1 t2 tl2 (mcomp type_pairs env) with Escape _ -> raise Incompatible) | (Tunivar _, Tunivar _) -> - (try unify_univar t1' t2' !univar_pairs - with Cannot_unify_universal_variables -> raise Incompatible) + begin try unify_univar t1' t2' !univar_pairs with + | Cannot_unify_universal_variables -> raise Incompatible + | Out_of_scope_universal_variable -> () + end | (_, _) -> raise Incompatible end @@ -2350,6 +2464,16 @@ and mcomp_list type_pairs env tl1 tl2 = raise Incompatible; List.iter2 (mcomp type_pairs env) tl1 tl2 +and mcomp_labeled_list type_pairs env labeled_tl1 labeled_tl2 = + if 0 <> List.compare_lengths labeled_tl1 labeled_tl2 then + raise Incompatible; + List.iter2 + (fun (label1, ty1) (label2, ty2) -> + if not (Option.equal String.equal label1 label2) then + raise Incompatible; + mcomp type_pairs env ty1 ty2) + labeled_tl1 labeled_tl2 + and mcomp_fields type_pairs env ty1 ty2 = if not (concrete_object ty1 && concrete_object ty2) then assert false; let (fields2, rest2) = flatten_fields ty2 in @@ -2425,9 +2549,9 @@ and mcomp_type_decl type_pairs env p1 p2 tl1 tl2 = mcomp_variant_description type_pairs env v1 v2 | Type_open, Type_open -> mcomp_list type_pairs env tl1 tl2 - | Type_abstract, Type_abstract -> () - | Type_abstract, _ when not (non_aliasable p1 decl)-> () - | _, Type_abstract when not (non_aliasable p2 decl') -> () + | Type_abstract _, Type_abstract _ -> () + | Type_abstract _, _ when not (non_aliasable p1 decl)-> () + | _, Type_abstract _ when not (non_aliasable p2 decl') -> () | _ -> raise Incompatible with Not_found -> () @@ -2462,7 +2586,8 @@ and mcomp_record_description type_pairs env = | l1 :: xs, l2 :: ys -> mcomp type_pairs env l1.ld_type l2.ld_type; if Ident.name l1.ld_id = Ident.name l2.ld_id && - l1.ld_mutable = l2.ld_mutable + l1.ld_mutable = l2.ld_mutable && + l1.ld_atomic = l2.ld_atomic then iter xs ys else raise Incompatible | [], [] -> () @@ -2482,67 +2607,60 @@ let mcomp_for tr_exn env t1 t2 = let find_lowest_level ty = let lowest = ref generic_level in - let rec find ty = - if not_marked_node ty then begin - let level = get_level ty in - if level < !lowest then lowest := level; - flip_mark_node ty; - iter_type_expr find ty - end - in find ty; unmark_type ty; !lowest + with_type_mark begin fun mark -> + let rec find ty = + if try_mark_node mark ty then begin + let level = get_level ty in + if level < !lowest then lowest := level; + iter_type_expr find ty + end + in find ty + end; + !lowest -let add_gadt_equation env source destination = +(* This function can be called only in [Pattern] mode. *) +let add_gadt_equation uenv source destination = (* Format.eprintf "@[add_gadt_equation %s %a@]@." (Path.name source) !Btype.print_raw destination; *) - if has_free_univars !env destination then - occur_univar ~inj_only:true !env destination - else if local_non_recursive_abbrev !env source destination then begin + let env = get_env uenv in + if has_free_univars env destination then + occur_univar ~inj_only:true env destination + else if local_non_recursive_abbrev uenv source destination then begin let destination = duplicate_type destination in let expansion_scope = - Int.max (Path.scope source) (get_gadt_equations_level ()) + Int.max (Path.scope source) (get_equations_scope uenv) + in + let type_origin = + match Env.find_type source env with + | decl -> type_origin decl + | exception Not_found -> assert false in let decl = - new_local_type ~manifest_and_scope:(destination, expansion_scope) () in - env := Env.add_local_type source decl !env; + new_local_type + ~manifest_and_scope:(destination, expansion_scope) + type_origin + in + set_env uenv (Env.add_local_constraint source decl env); cleanup_abbrev () end -let unify_eq_set = TypePairs.create 11 - -let order_type_pair t1 t2 = - if get_id t1 <= get_id t2 then (t1, t2) else (t2, t1) - -let add_type_equality t1 t2 = - TypePairs.add unify_eq_set (order_type_pair t1 t2) - let eq_package_path env p1 p2 = Path.same p1 p2 || Path.same (normalize_package_path env p1) (normalize_package_path env p2) let nondep_type' = ref (fun _ _ _ -> assert false) -let package_subtype = ref (fun _ _ _ _ _ -> assert false) +let package_subtype = ref (fun _ _ _ -> assert false) exception Nondep_cannot_erase of Ident.t -let rec concat_longident lid1 = - let open Longident in - function - Lident s -> Ldot (lid1, s) - | Ldot (lid2, s) -> Ldot (concat_longident lid1 lid2, s) - | Lapply (lid2, lid) -> Lapply (concat_longident lid1 lid2, lid) - let nondep_instance env level id ty = let ty = !nondep_type' env [id] ty in if level = generic_level then duplicate_type ty else - let old = !current_level in - current_level := level; - let ty = instance ty in - current_level := old; - ty + with_level ~level (fun () -> instance ty) -(* Find the type paths nl1 in the module type mty2, and add them to the +(* Find the type paths nl1 in the module type pack2, and add them to the list (nl2, tl2). raise Not_found if impossible *) -let complete_type_list ?(allow_absent=false) env fl1 lv2 mty2 fl2 = +let complete_type_list ?(allow_absent=false) env fl1 lv2 pack2 = (* This is morally WRONG: we're adding a (dummy) module without a scope in the environment. However no operation which cares about levels/scopes is going to happen while this module exists. @@ -2554,16 +2672,17 @@ let complete_type_list ?(allow_absent=false) env fl1 lv2 mty2 fl2 = It'd be nice if we avoided creating such temporary dummy modules and broken environments though. *) let id2 = Ident.create_local "Pkg" in - let env' = Env.add_module id2 Mp_present mty2 env in + let env' = Env.add_module id2 Mp_present (Mty_ident pack2.pack_path) env in let rec complete fl1 fl2 = match fl1, fl2 with [], _ -> fl2 | (n, _) :: nl, (n2, _ as nt2) :: ntl' when n >= n2 -> nt2 :: complete (if n = n2 then nl else fl1) ntl' | (n, _) :: nl, _ -> - let lid = concat_longident (Longident.Lident "Pkg") n in + let lid = "Pkg" :: n in + let lid = Option.get (Longident.unflatten lid) in match Env.find_type_by_name lid env' with - | (_, {type_arity = 0; type_kind = Type_abstract; + | (_, {type_arity = 0; type_kind = Type_abstract _; type_private = Public; type_manifest = Some t2}) -> begin match nondep_instance env' lv2 id2 t2 with | t -> (n, t) :: complete nl fl2 @@ -2573,7 +2692,7 @@ let complete_type_list ?(allow_absent=false) env fl1 lv2 mty2 fl2 = else raise Exit end - | (_, {type_arity = 0; type_kind = Type_abstract; + | (_, {type_arity = 0; type_kind = Type_abstract _; type_private = Public; type_manifest = None}) when allow_absent -> complete nl fl2 @@ -2581,31 +2700,30 @@ let complete_type_list ?(allow_absent=false) env fl1 lv2 mty2 fl2 = | exception Not_found when allow_absent-> complete nl fl2 in - match complete fl1 fl2 with + match complete fl1 pack2.pack_cstrs with | res -> res | exception Exit -> raise Not_found (* raise Not_found rather than Unify if the module types are incompatible *) -let unify_package env unify_list lv1 p1 fl1 lv2 p2 fl2 = - let ntl2 = complete_type_list env fl1 lv2 (Mty_ident p2) fl2 - and ntl1 = complete_type_list env fl2 lv1 (Mty_ident p1) fl1 in +let compare_package env unify_list lv1 pack1 lv2 pack2 = + let ntl2 = complete_type_list env pack1.pack_cstrs lv2 pack2 + and ntl1 = complete_type_list env pack2.pack_cstrs lv1 pack1 in unify_list (List.map snd ntl1) (List.map snd ntl2); - if eq_package_path env p1 p2 - || !package_subtype env p1 fl1 p2 fl2 - && !package_subtype env p2 fl2 p1 fl1 then () else raise Not_found - + if eq_package_path env pack1.pack_path pack2.pack_path then Ok () + else Result.bind + (!package_subtype env pack1 pack2) + (fun () -> !package_subtype env pack2 pack1) (* force unification in Reither when one side has a non-conjunctive type *) +(* Code smell: this could also be put in unification_environment. + Only modified by expand_head_rigid, but the corresponding unification + environment is built in subst. *) let rigid_variants = ref false -let unify_eq t1 t2 = - eq_type t1 t2 - || (in_pattern_mode () - && TypePairs.mem unify_eq_set (order_type_pair t1 t2)) - -let unify1_var env t1 t2 = +let unify1_var uenv t1 t2 = assert (is_Tvar t1); - occur_for Unify env t1 t2; + occur_for Unify uenv t1 t2; + let env = get_env uenv in match occur_univar_for Unify env t2 with | () -> begin @@ -2617,21 +2735,19 @@ let unify1_var env t1 t2 = end; link_type t1 t2; true - | exception Unify_trace _ when in_pattern_mode () -> + | exception Unify_trace _ when in_pattern_mode uenv -> false (* Called from unify3 *) -let unify3_var env t1' t2 t2' = - occur_for Unify !env t1' t2; - match occur_univar_for Unify !env t2 with +let unify3_var uenv t1' t2 t2' = + occur_for Unify uenv t1' t2; + match occur_univar_for Unify (get_env uenv) t2 with | () -> link_type t1' t2 - | exception Unify_trace _ when in_pattern_mode () -> - reify env t1'; - reify env t2'; - if can_generate_equations () then begin - occur_univar ~inj_only:true !env t2'; - record_equation t1' t2'; - end + | exception Unify_trace _ when in_pattern_mode uenv -> + reify uenv t1'; + reify uenv t2'; + occur_univar ~inj_only:true (get_env uenv) t2'; + record_equation uenv t1' t2' (* 1. When unifying two non-abbreviated types, one type is made a link @@ -2657,82 +2773,84 @@ let unify3_var env t1' t2 t2' = information is indeed lost, but it probably does not worth it. *) -let rec unify (env:Env.t ref) t1 t2 = +let rec unify uenv t1 t2 = (* First step: special cases (optimizations) *) - if unify_eq t1 t2 then () else - let reset_tracing = check_trace_gadt_instances !env in + if unify_eq uenv t1 t2 then () else + let reset_tracing = check_trace_gadt_instances (get_env uenv) in try type_changed := true; begin match (get_desc t1, get_desc t2) with (Tvar _, Tconstr _) when deep_occur t1 t2 -> - unify2 env t1 t2 + unify2 uenv t1 t2 | (Tconstr _, Tvar _) when deep_occur t2 t1 -> - unify2 env t1 t2 + unify2 uenv t1 t2 | (Tvar _, _) -> - if unify1_var !env t1 t2 then () else unify2 env t1 t2 + if unify1_var uenv t1 t2 then () else unify2 uenv t1 t2 | (_, Tvar _) -> - if unify1_var !env t2 t1 then () else unify2 env t1 t2 + if unify1_var uenv t2 t1 then () else unify2 uenv t1 t2 | (Tunivar _, Tunivar _) -> unify_univar_for Unify t1 t2 !univar_pairs; - update_level_for Unify !env (get_level t1) t2; + update_level_for Unify (get_env uenv) (get_level t1) t2; update_scope_for Unify (get_scope t1) t2; link_type t1 t2 | (Tconstr (p1, [], a1), Tconstr (p2, [], a2)) - when Path.same p1 p2 (* && actual_mode !env = Old *) + when Path.same p1 p2 (* This optimization assumes that t1 does not expand to t2 (and conversely), so we fall back to the general case when any of the types has a cached expansion. *) && not (has_cached_expansion p1 !a1 || has_cached_expansion p2 !a2) -> - update_level_for Unify !env (get_level t1) t2; + update_level_for Unify (get_env uenv) (get_level t1) t2; update_scope_for Unify (get_scope t1) t2; link_type t1 t2 - | (Tconstr _, Tconstr _) when Env.has_local_constraints !env -> - unify2_rec env t1 t1 t2 t2 + | (Tconstr _, Tconstr _) when Env.has_local_constraints (get_env uenv) -> + unify2_rec uenv t1 t1 t2 t2 | _ -> - unify2 env t1 t2 + unify2 uenv t1 t2 end; reset_trace_gadt_instances reset_tracing; with Unify_trace trace -> reset_trace_gadt_instances reset_tracing; raise_trace_for Unify (Diff {got = t1; expected = t2} :: trace) -and unify2 env t1 t2 = unify2_expand env t1 t1 t2 t2 +and unify2 uenv t1 t2 = unify2_expand uenv t1 t1 t2 t2 -and unify2_rec env t10 t1 t20 t2 = - if unify_eq t1 t2 then () else +and unify2_rec uenv t10 t1 t20 t2 = + if unify_eq uenv t1 t2 then () else try match (get_desc t1, get_desc t2) with | (Tconstr (p1, tl1, a1), Tconstr (p2, tl2, a2)) -> if Path.same p1 p2 && tl1 = [] && tl2 = [] && not (has_cached_expansion p1 !a1 || has_cached_expansion p2 !a2) then begin - update_level_for Unify !env (get_level t1) t2; + update_level_for Unify (get_env uenv) (get_level t1) t2; update_scope_for Unify (get_scope t1) t2; link_type t1 t2 end else - if find_expansion_scope !env p1 > find_expansion_scope !env p2 - then unify2_rec env t10 t1 t20 (try_expand_safe !env t2) - else unify2_rec env t10 (try_expand_safe !env t1) t20 t2 + let env = get_env uenv in + if find_expansion_scope env p1 > find_expansion_scope env p2 + then unify2_rec uenv t10 t1 t20 (try_expand_safe env t2) + else unify2_rec uenv t10 (try_expand_safe env t1) t20 t2 | _ -> raise Cannot_expand with Cannot_expand -> - unify2_expand env t10 t1 t20 t2 + unify2_expand uenv t10 t1 t20 t2 -and unify2_expand env t1 t1' t2 t2' = +and unify2_expand uenv t1 t1' t2 t2' = (* Second step: expansion of abbreviations *) (* Expansion may change the representative of the types. *) - ignore (expand_head_unif !env t1'); - ignore (expand_head_unif !env t2'); - let t1' = expand_head_unif !env t1' in - let t2' = expand_head_unif !env t2' in + let env = get_env uenv in + ignore (expand_head_unif env t1'); + ignore (expand_head_unif env t2'); + let t1' = expand_head_unif env t1' in + let t2' = expand_head_unif env t2' in let lv = Int.min (get_level t1') (get_level t2') in let scope = Int.max (get_scope t1') (get_scope t2') in - update_level_for Unify !env lv t2; - update_level_for Unify !env lv t1; + update_level_for Unify env lv t2; + update_level_for Unify env lv t1; update_scope_for Unify scope t2; update_scope_for Unify scope t1; - if unify_eq t1' t2' then () else + if unify_eq uenv t1' t2' then () else let t1, t2 = if !Clflags.principal @@ -2743,13 +2861,13 @@ and unify2_expand env t1 t1' t2 t2' = (match get_desc t2 with Tconstr (_, [], _) -> t2' | _ -> t2) else (t1, t2) in - if unify_eq t1 t1' || not (unify_eq t2 t2') then - unify3 env t1 t1' t2 t2' + if unify_eq uenv t1 t1' || not (unify_eq uenv t2 t2') then + unify3 uenv t1 t1' t2 t2' else - try unify3 env t2 t2' t1 t1' with Unify_trace trace -> + try unify3 uenv t2 t2' t1 t1' with Unify_trace trace -> raise_trace_for Unify (swap_trace trace) -and unify3 env t1 t1' t2 t2' = +and unify3 uenv t1 t1' t2 t2' = (* Third step: truly unification *) (* Assumes either [t1 == t1'] or [t2 != t2'] *) let tt1' = Transient_expr.repr t1' in @@ -2762,89 +2880,82 @@ and unify3 env t1 t1' t2 t2' = unify_univar_for Unify t1' t2' !univar_pairs; link_type t1' t2' | (Tvar _, _) -> - unify3_var env t1' t2 t2' + unify3_var uenv t1' t2 t2' | (_, Tvar _) -> - unify3_var env t2' t1 t1' + unify3_var uenv t2' t1 t1' | (Tfield _, Tfield _) -> (* special case for GADTs *) - unify_fields env t1' t2' + unify_fields uenv t1' t2' | _ -> - if in_pattern_mode () then - add_type_equality t1' t2' + if in_pattern_mode uenv then + add_type_equality uenv t1' t2' else begin - occur_for Unify !env t1' t2; + occur_for Unify uenv t1' t2; link_type t1' t2 end; try begin match (d1, d2) with - (Tarrow (l1, t1, u1, c1), Tarrow (l2, t2, u2, c2)) when l1 = l2 || - (!Clflags.classic || in_pattern_mode ()) && - not (is_optional l1 || is_optional l2) -> - unify env t1 t2; unify env u1 u2; + (Tarrow (l1, t1, u1, c1), Tarrow (l2, t2, u2, c2)) -> + eq_labels Unify ~in_pattern_mode:(in_pattern_mode uenv) l1 l2; + unify uenv t1 t2; unify uenv u1 u2; begin match is_commu_ok c1, is_commu_ok c2 with | false, true -> set_commu_ok c1 | true, false -> set_commu_ok c2 | false, false -> link_commu ~inside:c1 c2 | true, true -> () end - | (Ttuple tl1, Ttuple tl2) -> - unify_list env tl1 tl2 + | (Ttuple labeled_tl1, Ttuple labeled_tl2) -> + unify_labeled_list uenv labeled_tl1 labeled_tl2 | (Tconstr (p1, tl1, _), Tconstr (p2, tl2, _)) when Path.same p1 p2 -> - if not (can_generate_equations ()) then - unify_list env tl1 tl2 - else if can_assume_injective () then - without_assume_injective (fun () -> unify_list env tl1 tl2) + if not (in_pattern_mode uenv) then + unify_list uenv tl1 tl2 + else if can_assume_injective uenv then + without_assume_injective uenv (fun uenv -> unify_list uenv tl1 tl2) else if in_current_module p1 (* || in_pervasives p1 *) - || List.exists (expands_to_datatype !env) [t1'; t1; t2] + || List.exists (expands_to_datatype (get_env uenv)) [t1'; t1; t2] then - unify_list env tl1 tl2 + unify_list uenv tl1 tl2 else let inj = try List.map Variance.(mem Inj) - (Env.find_type p1 !env).type_variance + (Env.find_type p1 (get_env uenv)).type_variance with Not_found -> List.map (fun _ -> false) tl1 in List.iter2 (fun i (t1, t2) -> - if i then unify env t1 t2 else - without_generating_equations - begin fun () -> - let snap = snapshot () in - try unify env t1 t2 with Unify_trace _ -> - backtrack snap; - reify env t1; - reify env t2 - end) + if i then unify uenv t1 t2 else begin + reify uenv t1; + reify uenv t2 + end) inj (List.combine tl1 tl2) | (Tconstr (path,[],_), Tconstr (path',[],_)) - when is_instantiable !env path && is_instantiable !env path' - && can_generate_equations () -> + when in_pattern_mode uenv && + let env = get_env uenv in + is_instantiable env path && is_instantiable env path' -> let source, destination = if Path.scope path > Path.scope path' then path , t2' else path', t1' in - record_equation t1' t2'; - add_gadt_equation env source destination + record_equation uenv t1' t2'; + add_gadt_equation uenv source destination | (Tconstr (path,[],_), _) - when is_instantiable !env path && can_generate_equations () -> - reify env t2'; - record_equation t1' t2'; - add_gadt_equation env path t2' + when in_pattern_mode uenv && is_instantiable (get_env uenv) path -> + reify uenv t2'; + record_equation uenv t1' t2'; + add_gadt_equation uenv path t2' | (_, Tconstr (path,[],_)) - when is_instantiable !env path && can_generate_equations () -> - reify env t1'; - record_equation t1' t2'; - add_gadt_equation env path t1' - | (Tconstr (_,_,_), _) | (_, Tconstr (_,_,_)) when in_pattern_mode () -> - reify env t1'; - reify env t2'; - if can_generate_equations () then ( - mcomp_for Unify !env t1' t2'; - record_equation t1' t2' - ) + when in_pattern_mode uenv && is_instantiable (get_env uenv) path -> + reify uenv t1'; + record_equation uenv t1' t2'; + add_gadt_equation uenv path t1' + | (Tconstr (_,_,_), _) | (_, Tconstr (_,_,_)) when in_pattern_mode uenv -> + reify uenv t1'; + reify uenv t2'; + mcomp_for Unify (get_env uenv) t1' t2'; + record_equation uenv t1' t2' | (Tobject (fi1, nm1), Tobject (fi2, _)) -> - unify_fields env fi1 fi2; + unify_fields uenv fi1 fi2; (* Type [t2'] may have been instantiated by [unify_fields] *) (* XXX One should do some kind of unification... *) begin match get_desc t2' with @@ -2855,26 +2966,24 @@ and unify3 env t1 t1' t2 t2' = | _ -> () end | (Tvariant row1, Tvariant row2) -> - if not (in_pattern_mode ()) then - unify_row env row1 row2 + if not (in_pattern_mode uenv) then + unify_row uenv row1 row2 else begin let snap = snapshot () in - try unify_row env row1 row2 + try unify_row uenv row1 row2 with Unify_trace _ -> backtrack snap; - reify env t1'; - reify env t2'; - if can_generate_equations () then ( - mcomp_for Unify !env t1' t2'; - record_equation t1' t2' - ) + reify uenv t1'; + reify uenv t2'; + mcomp_for Unify (get_env uenv) t1' t2'; + record_equation uenv t1' t2' end | (Tfield(f,kind,_,rem), Tnil) | (Tnil, Tfield(f,kind,_,rem)) -> begin match field_kind_repr kind with Fprivate when f <> dummy_method -> link_kind ~inside:kind field_absent; - if d2 = Tnil then unify env rem t2' - else unify env (newgenty Tnil) rem + if d2 = Tnil then unify uenv rem t2' + else unify uenv (newgenty Tnil) rem | _ -> if f = dummy_method then raise_for Unify (Obj Self_cannot_be_closed) @@ -2886,18 +2995,12 @@ and unify3 env t1 t1' t2 t2' = | (Tnil, Tnil) -> () | (Tpoly (t1, []), Tpoly (t2, [])) -> - unify env t1 t2 + unify uenv t1 t2 | (Tpoly (t1, tl1), Tpoly (t2, tl2)) -> - enter_poly_for Unify !env univar_pairs t1 tl1 t2 tl2 (unify env) - | (Tpackage (p1, fl1), Tpackage (p2, fl2)) -> - begin try - unify_package !env (unify_list env) - (get_level t1) p1 fl1 (get_level t2) p2 fl2 - with Not_found -> - if not (in_pattern_mode ()) then raise_unexplained_for Unify; - List.iter (fun (_n, ty) -> reify env ty) (fl1 @ fl2); - (* if !generate_equations then List.iter2 (mcomp !env) tl1 tl2 *) - end + enter_poly_for Unify (get_env uenv) t1 tl1 t2 tl2 + (unify uenv) + | (Tpackage pack1, Tpackage pack2) -> + unify_package uenv (get_level t1) pack1 (get_level t2) pack2 | (Tnil, Tconstr _ ) -> raise_for Unify (Obj (Abstract_row Second)) | (Tconstr _, Tnil ) -> @@ -2910,7 +3013,7 @@ and unify3 env t1 t1' t2 t2' = match get_desc t2 with Tconstr (p, tl, abbrev) -> forget_abbrev abbrev p; - let t2'' = expand_head_unif !env t2 in + let t2'' = expand_head_unif (get_env uenv) t2 in if not (closed_parameterized_type tl t2'') then link_type t2 t2' | _ -> @@ -2925,6 +3028,34 @@ and unify_list env tl1 tl2 = raise_unexplained_for Unify; List.iter2 (unify env) tl1 tl2 +and unify_labeled_list env labeled_tl1 labeled_tl2 = + if 0 <> List.compare_lengths labeled_tl1 labeled_tl2 then + raise_unexplained_for Unify; + List.iter2 + (fun (label1, ty1) (label2, ty2) -> + if not (Option.equal String.equal label1 label2) then begin + let diff = { Errortrace.got=label1; expected=label2} in + raise_for Unify (Errortrace.Tuple_label_mismatch diff) + end; + unify env ty1 ty2) + labeled_tl1 labeled_tl2 + +and unify_package uenv lvl1 pack1 lvl2 pack2 = + match + compare_package (get_env uenv) (unify_list uenv) lvl1 pack1 lvl2 pack2 + with + | Ok () -> () + | Error fm_err -> + if not (in_pattern_mode uenv) then + raise_for Unify (Errortrace.First_class_module fm_err); + List.iter (fun (_n, ty) -> reify uenv ty) + (pack1.pack_cstrs @ pack2.pack_cstrs); + | exception Not_found -> + if not (in_pattern_mode uenv) then raise_unexplained_for Unify; + List.iter (fun (_n, ty) -> reify uenv ty) + (pack1.pack_cstrs @ pack2.pack_cstrs); + (* if !generate_equations then List.iter2 (mcomp !env) tl1 tl2 *) + (* Build a fresh row variable for unification *) and make_rowvar level use1 rest1 use2 rest2 = let set_name ty name = @@ -2945,7 +3076,7 @@ and make_rowvar level use1 rest1 use2 rest2 = if use1 then rest1 else if use2 then rest2 else newty2 ~level (Tvar name) -and unify_fields env ty1 ty2 = (* Optimization *) +and unify_fields uenv ty1 ty2 = (* Optimization *) let (fields1, rest1) = flatten_fields ty1 and (fields2, rest2) = flatten_fields ty2 in let (pairs, miss1, miss2) = associate_fields fields1 fields2 in @@ -2954,18 +3085,18 @@ and unify_fields env ty1 ty2 = (* Optimization *) let tr1 = Transient_expr.repr rest1 and tr2 = Transient_expr.repr rest2 in let d1 = tr1.desc and d2 = tr2.desc in try - unify env (build_fields l1 miss1 va) rest2; - unify env rest1 (build_fields l2 miss2 va); + unify uenv (build_fields l1 miss1 va) rest2; + unify uenv rest1 (build_fields l2 miss2 va); List.iter (fun (name, k1, t1, k2, t2) -> unify_kind k1 k2; try - if !trace_gadt_instances && not (in_subst_mode ()) then begin + if !trace_gadt_instances && not (in_subst_mode uenv) then begin (* in_subst_mode: see PR#11771 *) - update_level_for Unify !env (get_level va) t1; + update_level_for Unify (get_env uenv) (get_level va) t1; update_scope_for Unify (get_scope va) t1 end; - unify env t1 t2 + unify uenv t1 t2 with Unify_trace trace -> raise_trace_for Unify (incompatible_fields ~name ~got:t1 ~expected:t2 :: trace) @@ -2983,12 +3114,12 @@ and unify_kind k1 k2 = | (Fpublic, Fpublic) -> () | _ -> assert false -and unify_row env row1 row2 = +and unify_row uenv row1 row2 = let Row {fields = row1_fields; more = rm1; closed = row1_closed; name = row1_name} = row_repr row1 in let Row {fields = row2_fields; more = rm2; closed = row2_closed; name = row2_name} = row_repr row2 in - if unify_eq rm1 rm2 then () else + if unify_eq uenv rm1 rm2 then () else let r1, r2, pairs = merge_row_fields row1_fields row2_fields in if r1 <> [] && r2 <> [] then begin let ht = Hashtbl.create (List.length r1) in @@ -3053,18 +3184,19 @@ and unify_row env row1 row2 = (* The following test is not principal... should rather use Tnil *) let rm = row_more row in (*if !trace_gadt_instances && rm.desc = Tnil then () else*) - if !trace_gadt_instances && not (in_subst_mode ()) then + if !trace_gadt_instances && not (in_subst_mode uenv) then (* in_subst_mode: see PR#11771 *) - update_level_for Unify !env (get_level rm) (newgenty (Tvariant row)); + update_level_for Unify (get_env uenv) (get_level rm) + (newgenty (Tvariant row)); if has_fixed_explanation row then if eq_type more rm then () else - if is_Tvar rm then link_type rm more else unify env rm more + if is_Tvar rm then link_type rm more else unify uenv rm more else let ty = newgenty (Tvariant (create_row ~fields:rest ~more ~closed ~fixed ~name)) in - update_level_for Unify !env (get_level rm) ty; + update_level_for Unify (get_env uenv) (get_level rm) ty; update_scope_for Unify (get_scope rm) ty; link_type rm ty in @@ -3075,7 +3207,7 @@ and unify_row env row1 row2 = set_more First row1 r2; List.iter (fun (l,f1,f2) -> - try unify_row_field env fixed1 fixed2 rm1 rm2 l f1 f2 + try unify_row_field uenv fixed1 fixed2 rm1 rm2 l f1 f2 with Unify_trace trace -> raise_trace_for Unify (Variant (Incompatible_types_for l) :: trace) ) @@ -3090,7 +3222,7 @@ and unify_row env row1 row2 = raise exn end -and unify_row_field env fixed1 fixed2 rm1 rm2 l f1 f2 = +and unify_row_field uenv fixed1 fixed2 rm1 rm2 l f1 f2 = let if_not_fixed (pos,fixed) f = match fixed with | None -> f () @@ -3103,7 +3235,7 @@ and unify_row_field env fixed1 fixed2 rm1 rm2 l f1 f2 = | _ -> true in if f1 == f2 then () else match row_field_repr f1, row_field_repr f2 with - Rpresent(Some t1), Rpresent(Some t2) -> unify env t1 t2 + Rpresent(Some t1), Rpresent(Some t2) -> unify uenv t1 t2 | Rpresent None, Rpresent None -> () | Reither(c1, tl1, m1), Reither(c2, tl2, m2) -> if eq_row_field_ext f1 f2 then () else @@ -3113,7 +3245,7 @@ and unify_row_field env fixed1 fixed2 rm1 rm2 l f1 f2 = (* PR#7496 *) let f = rf_either [] ~no_arg ~matched in link_row_field_ext ~inside:f1 f; link_row_field_ext ~inside:f2 f; - List.iter2 (unify env) tl1 tl2 + List.iter2 (unify uenv) tl1 tl2 end else let redo = (m1 || m2 || either_fixed || @@ -3122,29 +3254,31 @@ and unify_row_field env fixed1 fixed2 rm1 rm2 l f1 f2 = | t1 :: tl -> if no_arg then raise_unexplained_for Unify; Types.changed_row_field_exts [f1;f2] (fun () -> - List.iter (unify env t1) tl + List.iter (unify uenv t1) tl ) end in - if redo then unify_row_field env fixed1 fixed2 rm1 rm2 l f1 f2 else + if redo then unify_row_field uenv fixed1 fixed2 rm1 rm2 l f1 f2 else let remq tl = List.filter (fun ty -> not (List.exists (eq_type ty) tl)) in let tl1' = remq tl2 tl1 and tl2' = remq tl1 tl2 in (* PR#6744 *) - let (tlu1,tl1') = List.partition (has_free_univars !env) tl1' - and (tlu2,tl2') = List.partition (has_free_univars !env) tl2' in + let env = get_env uenv in + let (tlu1,tl1') = List.partition (has_free_univars env) tl1' + and (tlu2,tl2') = List.partition (has_free_univars env) tl2' in begin match tlu1, tlu2 with [], [] -> () | (tu1::tlu1), _ :: _ -> (* Attempt to merge all the types containing univars *) - List.iter (unify env tu1) (tlu1@tlu2) + List.iter (unify uenv tu1) (tlu1@tlu2) | (tu::_, []) | ([], tu::_) -> - occur_univar_for Unify !env tu + occur_univar_for Unify env tu end; (* Is this handling of levels really principal? *) let update_levels rm = + let env = get_env uenv in List.iter (fun ty -> - update_level_for Unify !env (get_level rm) ty; + update_level_for Unify env (get_level rm) ty; update_scope_for Unify (get_scope rm) ty) in update_levels rm2 tl1'; @@ -3161,60 +3295,83 @@ and unify_row_field env fixed1 fixed2 rm1 rm2 l f1 f2 = if_not_fixed first (fun () -> let s = snapshot () in link_row_field_ext ~inside:f1 f2; - update_level_for Unify !env (get_level rm1) t2; + update_level_for Unify (get_env uenv) (get_level rm1) t2; update_scope_for Unify (get_scope rm1) t2; - (try List.iter (fun t1 -> unify env t1 t2) tl + (try List.iter (fun t1 -> unify uenv t1 t2) tl with exn -> undo_first_change_after s; raise exn) ) | Rpresent(Some t1), Reither(false, tl, _) -> if_not_fixed second (fun () -> let s = snapshot () in link_row_field_ext ~inside:f2 f1; - update_level_for Unify !env (get_level rm2) t1; + update_level_for Unify (get_env uenv) (get_level rm2) t1; update_scope_for Unify (get_scope rm2) t1; - (try List.iter (unify env t1) tl + (try List.iter (unify uenv t1) tl with exn -> undo_first_change_after s; raise exn) ) | Reither(true, [], _), Rpresent None -> if_not_fixed first (fun () -> link_row_field_ext ~inside:f1 f2) | Rpresent None, Reither(true, [], _) -> if_not_fixed second (fun () -> link_row_field_ext ~inside:f2 f1) - | _ -> raise_unexplained_for Unify - -let unify env ty1 ty2 = + | Rabsent, (Rpresent _ | Reither(_,_,true)) -> + raise_trace_for Unify [Variant(No_tags(First, [l,f1]))] + | (Rpresent _ | Reither (_,_,true)), Rabsent -> + raise_trace_for Unify [Variant(No_tags(Second, [l,f2]))] + | (Rpresent (Some _) | Reither(false,_,_)), + (Rpresent None | Reither(true,_,_)) + | (Rpresent None | Reither(true,_,_)), + (Rpresent (Some _) | Reither(false,_,_)) -> + (* constructor arity mismatch: 0 <> 1 *) + raise_unexplained_for Unify + | Reither(true, _ :: _, _ ), Rpresent _ + | Rpresent _ , Reither(true, _ :: _, _ ) -> + (* inconsistent conjunction on a non-absent field *) + raise_unexplained_for Unify + +let unify uenv ty1 ty2 = let snap = Btype.snapshot () in try - unify env ty1 ty2 + unify uenv ty1 ty2 with Unify_trace trace -> undo_compress snap; - raise (Unify (expand_to_unification_error !env trace)) - -let unify_gadt ~equations_level:lev ~allow_recursive_equations - (env:Env.t ref) ty1 ty2 = + raise (Unify (expand_to_unification_error (get_env uenv) trace)) + +let unify_gadt (penv : Pattern_env.t) ~pat:ty1 ~expected:ty2 = + let equated_types = TypePairs.create 0 in + let do_unify_gadt () = + let uenv = Pattern + { penv; + equated_types; + assume_injective = true; + unify_eq_set = TypePairs.create 11; } + in + unify uenv ty1 ty2; + equated_types + in + let no_leak = penv.in_counterexample || closed_type_expr ty2 in + if no_leak then with_univar_pairs [] do_unify_gadt else + let snap = Btype.snapshot () in try - univar_pairs := []; - gadt_equations_level := Some lev; - let equated_types = TypePairs.create 0 in - set_mode_pattern ~allow_recursive_equations ~equated_types - (fun () -> unify env ty1 ty2); - gadt_equations_level := None; - TypePairs.clear unify_eq_set; + (* If there are free variables, first try normal unification *) + let uenv = Expression {env = penv.env; in_subst = false} in + with_univar_pairs [] (fun () -> unify uenv ty1 ty2); equated_types - with e -> - gadt_equations_level := None; - TypePairs.clear unify_eq_set; - raise e + with Unify _ -> + (* If it fails, retry in pattern mode *) + Btype.backtrack snap; + with_univar_pairs [] do_unify_gadt -let unify_var env t1 t2 = +let unify_var uenv t1 t2 = if eq_type t1 t2 then () else match get_desc t1, get_desc t2 with Tvar _, Tconstr _ when deep_occur t1 t2 -> - unify (ref env) t1 t2 + unify uenv t1 t2 | Tvar _, _ -> + let env = get_env uenv in let reset_tracing = check_trace_gadt_instances env in begin try - occur_for Unify env t1 t2; + occur_for Unify uenv t1 t2; update_level_for Unify env (get_level t1) t2; update_scope_for Unify (get_scope t1) t2; link_type t1 t2; @@ -3226,16 +3383,20 @@ let unify_var env t1 t2 = (Diff { got = t1; expected = t2 } :: trace))) end | _ -> - unify (ref env) t1 t2 + unify uenv t1 t2 let _ = unify_var' := unify_var +(* the final versions of unification functions *) +let unify_var env ty1 ty2 = + unify_var (Expression {env; in_subst = false}) ty1 ty2 + let unify_pairs env ty1 ty2 pairs = - univar_pairs := pairs; - unify env ty1 ty2 + with_univar_pairs pairs (fun () -> + unify (Expression {env; in_subst = false}) ty1 ty2) let unify env ty1 ty2 = - unify_pairs (ref env) ty1 ty2 [] + unify_pairs env ty1 ty2 [] (* Lower the level of a type to the current level *) let enforce_current_level env ty = unify_var env (newvar ()) ty @@ -3644,40 +3805,35 @@ let close_class_signature env sign = let self = expand_head env sign.csig_self in close env (object_fields self) -let generalize_class_signature_spine env sign = +let generalize_class_signature_spine sign = (* Generalize the spine of methods *) - let meths = sign.csig_meths in - Meths.iter (fun _ (_, _, ty) -> generalize_spine ty) meths; - let new_meths = - Meths.map - (fun (priv, virt, ty) -> (priv, virt, generic_instance ty)) - meths - in - (* But keep levels correct on the type of self *) - Meths.iter - (fun _ (_, _, ty) -> unify_var env (newvar ()) ty) - meths; - sign.csig_meths <- new_meths + sign.csig_meths <- + Meths.map (fun (priv, virt, ty) -> priv, virt, copy_spine ty) + sign.csig_meths (***********************************) (* Matching between type schemes *) (***********************************) +(* Level of the subject, should be just below generic_level *) +let subject_level = generic_level - 1 + (* Update the level of [ty]. First check that the levels of generic variables from the subject are not lowered. *) let moregen_occur env level ty = - let rec occur ty = - let lv = get_level ty in - if lv <= level then () else - if is_Tvar ty && lv >= generic_level - 1 then raise Occur else - if try_mark_node ty then iter_type_expr occur ty - in - begin try - occur ty; unmark_type ty - with Occur -> - unmark_type ty; raise_unexplained_for Moregen + with_type_mark begin fun mark -> + let rec occur ty = + let lv = get_level ty in + if lv <= level then () else + if is_Tvar ty && lv >= subject_level then raise Occur else + if try_mark_node mark ty then iter_type_expr occur ty + in + try + occur ty + with Occur -> + raise_unexplained_for Moregen end; (* also check for free univars *) occur_univar_for Moregen env ty; @@ -3685,7 +3841,7 @@ let moregen_occur env level ty = let may_instantiate inst_nongen t1 = let level = get_level t1 in - if inst_nongen then level <> generic_level - 1 + if inst_nongen then level <> subject_level else level = generic_level let rec moregen inst_nongen type_pairs env t1 t2 = @@ -3696,7 +3852,7 @@ let rec moregen inst_nongen type_pairs env t1 t2 = (Tvar _, _) when may_instantiate inst_nongen t1 -> moregen_occur env (get_level t1) t2; update_scope_for Moregen (get_scope t1) t2; - occur_for Moregen env t1 t2; + occur_for Moregen (Expression {env; in_subst = false}) t1 t2; link_type t1 t2 | (Tconstr (p1, [], _), Tconstr (p2, [], _)) when Path.same p1 p2 -> () @@ -3712,21 +3868,18 @@ let rec moregen inst_nongen type_pairs env t1 t2 = moregen_occur env (get_level t1') t2; update_scope_for Moregen (get_scope t1') t2; link_type t1' t2 - | (Tarrow (l1, t1, u1, _), Tarrow (l2, t2, u2, _)) when l1 = l2 - || !Clflags.classic && not (is_optional l1 || is_optional l2) -> + | (Tarrow (l1, t1, u1, _), Tarrow (l2, t2, u2, _)) -> + eq_labels Moregen ~in_pattern_mode:false l1 l2; moregen inst_nongen type_pairs env t1 t2; moregen inst_nongen type_pairs env u1 u2 | (Ttuple tl1, Ttuple tl2) -> - moregen_list inst_nongen type_pairs env tl1 tl2 + moregen_labeled_list inst_nongen type_pairs env tl1 tl2 | (Tconstr (p1, tl1, _), Tconstr (p2, tl2, _)) when Path.same p1 p2 -> moregen_list inst_nongen type_pairs env tl1 tl2 - | (Tpackage (p1, fl1), Tpackage (p2, fl2)) -> - begin try - unify_package env (moregen_list inst_nongen type_pairs env) - (get_level t1') p1 fl1 (get_level t2') p2 fl2 - with Not_found -> raise_unexplained_for Moregen - end + | (Tpackage pack1, Tpackage pack2) -> + moregen_package inst_nongen type_pairs env (get_level t1') pack1 + (get_level t2') pack2 | (Tnil, Tconstr _ ) -> raise_for Moregen (Obj (Abstract_row Second)) | (Tconstr _, Tnil ) -> raise_for Moregen (Obj (Abstract_row First)) | (Tvariant row1, Tvariant row2) -> @@ -3741,7 +3894,7 @@ let rec moregen inst_nongen type_pairs env t1 t2 = | (Tpoly (t1, []), Tpoly (t2, [])) -> moregen inst_nongen type_pairs env t1 t2 | (Tpoly (t1, tl1), Tpoly (t2, tl2)) -> - enter_poly_for Moregen env univar_pairs t1 tl1 t2 tl2 + enter_poly_for Moregen env t1 tl1 t2 tl2 (moregen inst_nongen type_pairs env) | (Tunivar _, Tunivar _) -> unify_univar_for Moregen t1' t2' !univar_pairs @@ -3757,6 +3910,26 @@ and moregen_list inst_nongen type_pairs env tl1 tl2 = raise_unexplained_for Moregen; List.iter2 (moregen inst_nongen type_pairs env) tl1 tl2 +and moregen_labeled_list inst_nongen type_pairs env labeled_tl1 + labeled_tl2 = + if 0 <> List.compare_lengths labeled_tl1 labeled_tl2 then + raise_unexplained_for Moregen; + List.iter2 + (fun (label1, ty1) (label2, ty2) -> + if not (Option.equal String.equal label1 label2) then + raise_unexplained_for Moregen; + moregen inst_nongen type_pairs env ty1 ty2) + labeled_tl1 labeled_tl2 + +and moregen_package inst_nongen type_pairs env lvl1 pack1 lvl2 pack2 = + match + compare_package env (moregen_list inst_nongen type_pairs env) + lvl1 pack1 lvl2 pack2 + with + | Ok () -> () + | Error fme -> raise_for Moregen (First_class_module fme) + | exception Not_found -> raise_unexplained_for Moregen + and moregen_fields inst_nongen type_pairs env ty1 ty2 = let (fields1, rest1) = flatten_fields ty1 and (fields2, rest2) = flatten_fields ty2 in @@ -3904,8 +4077,8 @@ and moregen_row inst_nongen type_pairs env row1 row2 = (* Must empty univar_pairs first *) let moregen inst_nongen type_pairs env patt subj = - univar_pairs := []; - moregen inst_nongen type_pairs env patt subj + with_univar_pairs [] (fun () -> + moregen inst_nongen type_pairs env patt subj) (* Non-generic variable can be instantiated only if [inst_nongen] is @@ -3916,37 +4089,37 @@ let moregen inst_nongen type_pairs env patt subj = is unimportant. So, no need to propagate abbreviations. *) let moregeneral env inst_nongen pat_sch subj_sch = - let old_level = !current_level in - current_level := generic_level - 1; - (* - Generic variables are first duplicated with [instance]. So, - their levels are lowered to [generic_level - 1]. The subject is - then copied with [duplicate_type]. That way, its levels won't be - changed. - *) - let subj_inst = instance subj_sch in - let subj = duplicate_type subj_inst in - current_level := generic_level; - (* Duplicate generic variables *) - let patt = instance pat_sch in - - Misc.try_finally - (fun () -> - try - moregen inst_nongen (TypePairs.create 13) env patt subj - with Moregen_trace trace -> - (* Moregen splits the generic level into two finer levels: - [generic_level] and [generic_level - 1]. In order to properly - detect and print weak variables when printing this error, we need to - merge them back together, by regeneralizing the levels of the types - after they were instantiated at [generic_level - 1] above. Because - [moregen] does some unification that we need to preserve for more - legible error messages, we have to manually perform the - regeneralization rather than backtracking. *) - current_level := generic_level - 2; - generalize subj_inst; - raise (Moregen (expand_to_moregen_error env trace))) - ~always:(fun () -> current_level := old_level) + (* Moregen splits the generic level into two finer levels: + [generic_level] and [subject_level = generic_level - 1]. + In order to properly detect and print weak variables when + printing errors, we need to merge those levels back together. + We do that by starting at level [subject_level - 1], using + [with_local_level_generalize] to first set the current level + to [subject_level], and then generalize nodes at [subject_level] + on exit. + Strictly speaking, we could avoid generalizing when there is no error, + as nodes at level [subject_level] are never unified with nodes of + the original types, but that would be rather ad hoc. + *) + with_level ~level:(subject_level - 1) begin fun () -> + match with_local_level_generalize begin fun () -> + assert (!current_level = subject_level); + (* + Generic variables are first duplicated with [instance]. So, + their levels are lowered to [subject_level]. The subject is + then copied with [duplicate_type]. That way, its levels won't be + changed. + *) + let subj_inst = instance subj_sch in + let subj = duplicate_type subj_inst in + (* Duplicate generic variables *) + let patt = generic_instance pat_sch in + try Ok (moregen inst_nongen (TypePairs.create 13) env patt subj) + with Moregen_trace trace -> Error trace + end with + | Ok () -> () + | Error trace -> raise (Moregen (expand_to_moregen_error env trace)) + end let is_moregeneral env inst_nongen pat_sch subj_sch = match moregeneral env inst_nongen pat_sch subj_sch with @@ -3957,8 +4130,8 @@ let is_moregeneral env inst_nongen pat_sch subj_sch = and check validity after unification *) (* Simpler, no? *) -let rec rigidify_rec vars ty = - if try_mark_node ty then +let rec rigidify_rec mark vars ty = + if try_mark_node mark ty then begin match get_desc ty with | Tvar _ -> if not (TypeSet.mem ty !vars) then vars := TypeSet.add ty !vars @@ -3971,18 +4144,17 @@ let rec rigidify_rec vars ty = ~name ~closed in link_type more (newty2 ~level:(get_level ty) (Tvariant row')) end; - iter_row (rigidify_rec vars) row; + iter_row (rigidify_rec mark vars) row; (* only consider the row variable if the variant is not static *) if not (static_row row) then - rigidify_rec vars (row_more row) + rigidify_rec mark vars (row_more row) | _ -> - iter_type_expr (rigidify_rec vars) ty + iter_type_expr (rigidify_rec mark vars) ty end let rigidify ty = let vars = ref TypeSet.empty in - rigidify_rec vars ty; - unmark_type ty; + with_type_mark (fun mark -> rigidify_rec mark vars ty); TypeSet.elements !vars let all_distinct_vars env vars = @@ -4044,8 +4216,18 @@ let eqtype_subst type_pairs subst t1 t2 = end let rec eqtype rename type_pairs subst env t1 t2 = - if eq_type t1 t2 then () else + let check_phys_eq t1 t2 = + not rename && eq_type t1 t2 + in + (* Checking for physical equality of type representatives when [rename] is + true would be incorrect: imagine comparing ['a * 'a] with ['b * 'a]. The + first ['a] and ['b] would be identified in [eqtype_subst], and then the + second ['a] and ['a] would be [eq_type]. So we do not call [eq_type] here. + On the other hand, when [rename] is false we need to check for physical + equality, as that's the only way variables can be identified. + *) + if check_phys_eq t1 t2 then () else try match (get_desc t1, get_desc t2) with (Tvar _, Tvar _) when rename -> @@ -4056,27 +4238,24 @@ let rec eqtype rename type_pairs subst env t1 t2 = let t1' = expand_head_rigid env t1 in let t2' = expand_head_rigid env t2 in (* Expansion may have changed the representative of the types... *) - if eq_type t1' t2' then () else + if check_phys_eq t1' t2' then () else if not (TypePairs.mem type_pairs (t1', t2')) then begin TypePairs.add type_pairs (t1', t2'); match (get_desc t1', get_desc t2') with (Tvar _, Tvar _) when rename -> eqtype_subst type_pairs subst t1' t2' - | (Tarrow (l1, t1, u1, _), Tarrow (l2, t2, u2, _)) when l1 = l2 - || !Clflags.classic && not (is_optional l1 || is_optional l2) -> + | (Tarrow (l1, t1, u1, _), Tarrow (l2, t2, u2, _)) -> + eq_labels Equality ~in_pattern_mode:false l1 l2; eqtype rename type_pairs subst env t1 t2; - eqtype rename type_pairs subst env u1 u2; + eqtype rename type_pairs subst env u1 u2 | (Ttuple tl1, Ttuple tl2) -> - eqtype_list rename type_pairs subst env tl1 tl2 + eqtype_labeled_list rename type_pairs subst env tl1 tl2 | (Tconstr (p1, tl1, _), Tconstr (p2, tl2, _)) when Path.same p1 p2 -> - eqtype_list rename type_pairs subst env tl1 tl2 - | (Tpackage (p1, fl1), Tpackage (p2, fl2)) -> - begin try - unify_package env (eqtype_list rename type_pairs subst env) - (get_level t1') p1 fl1 (get_level t2') p2 fl2 - with Not_found -> raise_unexplained_for Equality - end + eqtype_list_same_length rename type_pairs subst env tl1 tl2 + | (Tpackage pack1, Tpackage pack2) -> + eqtype_package rename type_pairs subst env + (get_level t1') pack1 (get_level t2') pack2 | (Tnil, Tconstr _ ) -> raise_for Equality (Obj (Abstract_row Second)) | (Tconstr _, Tnil ) -> @@ -4093,7 +4272,7 @@ let rec eqtype rename type_pairs subst env t1 t2 = | (Tpoly (t1, []), Tpoly (t2, [])) -> eqtype rename type_pairs subst env t1 t2 | (Tpoly (t1, tl1), Tpoly (t2, tl2)) -> - enter_poly_for Equality env univar_pairs t1 tl1 t2 tl2 + enter_poly_for Equality env t1 tl1 t2 tl2 (eqtype rename type_pairs subst env) | (Tunivar _, Tunivar _) -> unify_univar_for Equality t1' t2' !univar_pairs @@ -4103,17 +4282,41 @@ let rec eqtype rename type_pairs subst env t1 t2 = with Equality_trace trace -> raise_trace_for Equality (Diff {got = t1; expected = t2} :: trace) +and eqtype_list_same_length rename type_pairs subst env tl1 tl2 = + List.iter2 (eqtype rename type_pairs subst env) tl1 tl2 + and eqtype_list rename type_pairs subst env tl1 tl2 = if List.length tl1 <> List.length tl2 then raise_unexplained_for Equality; - List.iter2 (eqtype rename type_pairs subst env) tl1 tl2 + eqtype_list_same_length rename type_pairs subst env tl1 tl2 + +and eqtype_labeled_list rename type_pairs subst env labeled_tl1 labeled_tl2 = + if 0 <> List.compare_lengths labeled_tl1 labeled_tl2 then + raise_unexplained_for Equality; + List.iter2 + (fun (label1, ty1) (label2, ty2) -> + if not (Option.equal String.equal label1 label2) then + raise_unexplained_for Equality; + eqtype rename type_pairs subst env ty1 ty2) + labeled_tl1 labeled_tl2 + +and eqtype_package rename type_pairs subst env lvl1 pack1 lvl2 pack2 = + match + compare_package env (eqtype_list rename type_pairs subst env) + lvl1 pack1 lvl2 pack2 + with + | Ok () -> () + | Error fme -> raise_for Equality (First_class_module fme) + | exception Not_found -> raise_unexplained_for Equality and eqtype_fields rename type_pairs subst env ty1 ty2 = let (fields1, rest1) = flatten_fields ty1 in let (fields2, rest2) = flatten_fields ty2 in (* First check if same row => already equal *) let same_row = - eq_type rest1 rest2 || TypePairs.mem type_pairs (rest1,rest2) + (* [not rename]: see comment at top of [eqtype] *) + (not rename && eq_type rest1 rest2) || + TypePairs.mem type_pairs (rest1,rest2) in if same_row then () else (* Try expansion, needed when called from Includecore.type_manifest *) @@ -4228,20 +4431,23 @@ and eqtype_row rename type_pairs subst env row1 row2 = pairs (* Must empty univar_pairs first *) -let eqtype_list rename type_pairs subst env tl1 tl2 = - univar_pairs := []; - let snap = Btype.snapshot () in - Misc.try_finally - ~always:(fun () -> backtrack snap) - (fun () -> eqtype_list rename type_pairs subst env tl1 tl2) +let eqtype_list_same_length rename type_pairs subst env tl1 tl2 = + with_univar_pairs [] (fun () -> + let snap = Btype.snapshot () in + Misc.try_finally + ~always:(fun () -> backtrack snap) + (fun () -> eqtype_list_same_length rename type_pairs subst env tl1 tl2)) let eqtype rename type_pairs subst env t1 t2 = - eqtype_list rename type_pairs subst env [t1] [t2] + eqtype_list_same_length rename type_pairs subst env [t1] [t2] (* Two modes: with or without renaming of variables *) let equal env rename tyl1 tyl2 = + if List.length tyl1 <> List.length tyl2 then + raise_unexplained_for Equality; + if List.for_all2 eq_type tyl1 tyl2 then () else let subst = ref [] in - try eqtype_list rename (TypePairs.create 11) subst env tyl1 tyl2 + try eqtype_list_same_length rename (TypePairs.create 11) subst env tyl1 tyl2 with Equality_trace trace -> raise (Equality (expand_to_equality_error env trace !subst)) @@ -4265,9 +4471,9 @@ let rec equal_private env params1 ty1 params2 ty2 = type class_match_failure = CM_Virtual_class | CM_Parameter_arity_mismatch of int * int - | CM_Type_parameter_mismatch of Env.t * equality_error + | CM_Type_parameter_mismatch of int * Env.t * equality_error | CM_Class_type_mismatch of Env.t * class_type * class_type - | CM_Parameter_mismatch of Env.t * moregen_error + | CM_Parameter_mismatch of int * Env.t * moregen_error | CM_Val_type_mismatch of string * Env.t * comparison_error | CM_Meth_type_mismatch of string * Env.t * comparison_error | CM_Non_mutable_value of string @@ -4335,20 +4541,24 @@ let match_class_sig_shape ~strict sign1 sign2 = else err) sign1.csig_vars errors -let rec moregen_clty trace type_pairs env cty1 cty2 = +(* [arrow_index] is the number of [Cty_arrow] + constructors we've seen so far. *) +let rec moregen_clty ~arrow_index trace type_pairs env cty1 cty2 = try match cty1, cty2 with | Cty_constr (_, _, cty1), _ -> - moregen_clty true type_pairs env cty1 cty2 + moregen_clty ~arrow_index true type_pairs env cty1 cty2 | _, Cty_constr (_, _, cty2) -> - moregen_clty true type_pairs env cty1 cty2 + moregen_clty ~arrow_index true type_pairs env cty1 cty2 | Cty_arrow (l1, ty1, cty1'), Cty_arrow (l2, ty2, cty2') when l1 = l2 -> + let arrow_index = arrow_index + 1 in begin try moregen true type_pairs env ty1 ty2 with Moregen_trace trace -> raise (Failure [ - CM_Parameter_mismatch (env, expand_to_moregen_error env trace)]) + CM_Parameter_mismatch + (arrow_index, env, expand_to_moregen_error env trace)]) end; - moregen_clty false type_pairs env cty1' cty2' + moregen_clty ~arrow_index false type_pairs env cty1' cty2' | Cty_signature sign1, Cty_signature sign2 -> Meths.iter (fun lab (_, _, ty) -> @@ -4392,54 +4602,57 @@ let rec moregen_clty trace type_pairs env cty1 cty2 = Failure error when trace || error = [] -> raise (Failure (CM_Class_type_mismatch (env, cty1, cty2)::error)) +let moregen_clty trace type_pairs env cty1 cty2 = + moregen_clty ~arrow_index:0 trace type_pairs env cty1 cty2 + let match_class_types ?(trace=true) env pat_sch subj_sch = let sign1 = signature_of_class_type pat_sch in let sign2 = signature_of_class_type subj_sch in let errors = match_class_sig_shape ~strict:false sign1 sign2 in match errors with | [] -> - let old_level = !current_level in - current_level := generic_level - 1; - (* - Generic variables are first duplicated with [instance]. So, - their levels are lowered to [generic_level - 1]. The subject is - then copied with [duplicate_type]. That way, its levels won't be - changed. - *) - let (_, subj_inst) = instance_class [] subj_sch in - let subj = duplicate_class_type subj_inst in - current_level := generic_level; - (* Duplicate generic variables *) - let (_, patt) = instance_class [] pat_sch in - let type_pairs = TypePairs.create 53 in - let sign1 = signature_of_class_type patt in - let sign2 = signature_of_class_type subj in - let self1 = sign1.csig_self in - let self2 = sign2.csig_self in - let row1 = sign1.csig_self_row in - let row2 = sign2.csig_self_row in - TypePairs.add type_pairs (self1, self2); - (* Always succeeds *) - moregen true type_pairs env row1 row2; - let res = - match moregen_clty trace type_pairs env patt subj with - | () -> [] - | exception Failure res -> - (* We've found an error. Moregen splits the generic level into two - finer levels: [generic_level] and [generic_level - 1]. In order - to properly detect and print weak variables when printing this - error, we need to merge them back together, by regeneralizing the - levels of the types after they were instantiated at - [generic_level - 1] above. Because [moregen] does some - unification that we need to preserve for more legible error - messages, we have to manually perform the regeneralization rather - than backtracking. *) - current_level := generic_level - 2; - generalize_class_type subj_inst; - res - in - current_level := old_level; - res + (* Moregen splits the generic level into two finer levels: + [generic_level] and [subject_level = generic_level - 1]. + In order to properly detect and print weak variables when + printing errors, we need to merge those levels back together. + We do that by starting at level [subject_level - 1], using + [with_local_level_generalize] to first set the current level + to [subject_level], and then generalize nodes at [subject_level] + on exit. + Strictly speaking, we could avoid generalizing when there is no error, + as nodes at level [subject_level] are never unified with nodes of + the original types, but that would be rather ad hoc. + *) + with_level ~level:(subject_level - 1) begin fun () -> + with_local_level_generalize begin fun () -> + assert (!current_level = subject_level); + (* + Generic variables are first duplicated with [instance]. So, + their levels are lowered to [subject_level]. The subject is + then copied with [duplicate_type]. That way, its levels won't be + changed. + *) + let (_, subj_inst) = instance_class [] subj_sch in + let subj = duplicate_class_type subj_inst in + (* Duplicate generic variables *) + let (_, patt) = + with_level ~level:generic_level + (fun () -> instance_class [] pat_sch) in + let type_pairs = TypePairs.create 53 in + let sign1 = signature_of_class_type patt in + let sign2 = signature_of_class_type subj in + let self1 = sign1.csig_self in + let self2 = sign2.csig_self in + let row1 = sign1.csig_self_row in + let row2 = sign2.csig_self_row in + TypePairs.add type_pairs (self1, self2); + (* Always succeeds *) + moregen true type_pairs env row1 row2; + (* May fail *) + try moregen_clty trace type_pairs env patt subj; [] + with Failure res -> res + end + end | errors -> CM_Class_type_mismatch (env, pat_sch, subj_sch) :: errors @@ -4506,11 +4719,11 @@ let match_class_declarations env patt_params patt_type subj_params subj_type = let ls = List.length subj_params in if lp <> ls then raise (Failure [CM_Parameter_arity_mismatch (lp, ls)]); - List.iter2 (fun p s -> + Std.List.iteri2 ~f:(fun n p s -> try eqtype true type_pairs subst env p s with Equality_trace trace -> raise (Failure [CM_Type_parameter_mismatch - (env, expand_to_equality_error env trace !subst)])) + (n+1, env, expand_to_equality_error env trace !subst)])) patt_params subj_params; (* old code: equal_clty false type_pairs subst env patt_type subj_type; *) equal_clsig false type_pairs subst env sign1 sign2; @@ -4598,15 +4811,17 @@ let rec build_subtype env (visited : transient_expr list) if c > Unchanged then (newty (Tarrow(l, t1', t2', commu_ok)), c) else (t, Unchanged) - | Ttuple tlist -> + | Ttuple labeled_tlist -> let tt = Transient_expr.repr t in if memq_warn tt visited then (t, Unchanged) else let visited = tt :: visited in + let labels, tlist = List.split labeled_tlist in let tlist' = List.map (build_subtype env visited loops posi level) tlist in let c = collect tlist' in - if c > Unchanged then (newty (Ttuple (List.map fst tlist')), c) + if c > Unchanged then + (newty (Ttuple (List.combine labels (List.map fst tlist'))), c) else (t, Unchanged) | Tconstr(p, tl, abbrev) when level > 0 && generic_abbrev env p && safe_abbrev env t @@ -4630,7 +4845,7 @@ let rec build_subtype env (visited : transient_expr list) (* Fix PR#4505: do not set ty to Tvar when it appears in tl1, as this occurrence might break the occur check. XXX not clear whether this correct anyway... *) - if List.exists (deep_occur ty) tl1 then raise Not_found; + if deep_occur_list ty tl1 then raise Not_found; set_type_desc ty (Tvar None); let t'' = newvar () in let loops = (get_id ty, t'') :: loops in @@ -4783,8 +4998,8 @@ let rec subtype_rec env trace t1 t2 cstrs = match (get_desc t1, get_desc t2) with (Tvar _, _) | (_, Tvar _) -> (trace, t1, t2, !univar_pairs)::cstrs - | (Tarrow(l1, t1, u1, _), Tarrow(l2, t2, u2, _)) when l1 = l2 - || !Clflags.classic && not (is_optional l1 || is_optional l2) -> + | (Tarrow(l1, t1, u1, _), Tarrow(l2, t2, u2, _)) + when compatible_labels ~in_pattern_mode:false l1 l2 -> let cstrs = subtype_rec env @@ -4798,7 +5013,7 @@ let rec subtype_rec env trace t1 t2 cstrs = u1 u2 cstrs | (Ttuple tl1, Ttuple tl2) -> - subtype_list env trace tl1 tl2 cstrs + subtype_labeled_list env trace tl1 tl2 cstrs | (Tconstr(p1, [], _), Tconstr(p2, [], _)) when Path.same p1 p2 -> cstrs | (Tconstr(p1, _tl1, _abbrev1), _) @@ -4815,8 +5030,9 @@ let rec subtype_rec env trace t1 t2 cstrs = let (co, cn) = Variance.get_upper v in if co then if cn then - (trace, newty2 ~level:(get_level t1) (Ttuple[t1]), - newty2 ~level:(get_level t2) (Ttuple[t2]), !univar_pairs) + (trace, newty2 ~level:(get_level t1) (Ttuple[None, t1]), + newty2 ~level:(get_level t2) (Ttuple[None, t2]), + !univar_pairs) :: cstrs else subtype_rec @@ -4857,55 +5073,60 @@ let rec subtype_rec env trace t1 t2 cstrs = | (Tpoly (u1, []), Tpoly (u2, [])) -> subtype_rec env trace u1 u2 cstrs | (Tpoly (u1, tl1), Tpoly (u2, [])) -> - let _, u1' = instance_poly false tl1 u1 in + let _, u1' = instance_poly ~fixed:false tl1 u1 in subtype_rec env trace u1' u2 cstrs | (Tpoly (u1, tl1), Tpoly (u2,tl2)) -> begin try - enter_poly env univar_pairs u1 tl1 u2 tl2 + enter_poly env u1 tl1 u2 tl2 (fun t1 t2 -> subtype_rec env trace t1 t2 cstrs) with Escape _ -> (trace, t1, t2, !univar_pairs)::cstrs end - | (Tpackage (p1, fl1), Tpackage (p2, fl2)) -> - begin try - let ntl1 = - complete_type_list env fl2 (get_level t1) (Mty_ident p1) fl1 - and ntl2 = - complete_type_list env fl1 (get_level t2) (Mty_ident p2) fl2 - ~allow_absent:true in - let cstrs' = - List.map - (fun (n2,t2) -> (trace, List.assoc n2 ntl1, t2, !univar_pairs)) - ntl2 - in - if eq_package_path env p1 p2 then cstrs' @ cstrs - else begin - (* need to check module subtyping *) - let snap = Btype.snapshot () in - match List.iter (fun (_, t1, t2, _) -> unify env t1 t2) cstrs' with - | () when !package_subtype env p1 fl1 p2 fl2 -> - Btype.backtrack snap; cstrs' @ cstrs - | () | exception Unify _ -> - Btype.backtrack snap; raise Not_found - end - with Not_found -> - (trace, t1, t2, !univar_pairs)::cstrs - end + | (Tpackage pack1, Tpackage pack2) -> + subtype_package env trace (get_level t1) pack1 + (get_level t2) pack2 cstrs | (_, _) -> (trace, t1, t2, !univar_pairs)::cstrs end -and subtype_list env trace tl1 tl2 cstrs = - if List.length tl1 <> List.length tl2 then +and subtype_labeled_list env trace labeled_tl1 labeled_tl2 cstrs = + if 0 <> List.compare_lengths labeled_tl1 labeled_tl2 then subtype_error ~env ~trace ~unification_trace:[]; List.fold_left2 - (fun cstrs t1 t2 -> - subtype_rec - env - (Subtype.Diff { got = t1; expected = t2 } :: trace) - t1 t2 - cstrs) - cstrs tl1 tl2 + (fun cstrs (label1, ty1) (label2, ty2) -> + if not (Option.equal String.equal label1 label2) then + subtype_error ~env ~trace ~unification_trace:[]; + subtype_rec + env + (Subtype.Diff { got = ty1; expected = ty2 } :: trace) + ty1 ty2 + cstrs) + cstrs labeled_tl1 labeled_tl2 + +and subtype_package env trace lvl1 pack1 lvl2 pack2 cstrs = + try + let ntl1 = complete_type_list env pack2.pack_cstrs lvl1 pack1 + and ntl2 = + complete_type_list env pack1.pack_cstrs lvl2 pack2 + ~allow_absent:true in + let cstrs' = + List.map + (fun (n2,t2) -> (trace, List.assoc n2 ntl1, t2, !univar_pairs)) + ntl2 + in + if eq_package_path env pack1.pack_path pack2.pack_path then cstrs' @ cstrs + else begin + (* need to check module subtyping *) + let snap = Btype.snapshot () in + match List.iter (fun (_, t1, t2, _) -> unify env t1 t2) cstrs' with + | () when Result.is_ok (!package_subtype env pack1 pack2) -> + Btype.backtrack snap; cstrs' @ cstrs + | () | exception Unify _ -> + Btype.backtrack snap; raise Not_found + end + with Not_found -> + (trace, newty (Tpackage pack1), newty (Tpackage pack2), !univar_pairs) + ::cstrs and subtype_fields env trace ty1 ty2 cstrs = (* Assume that either rest1 or rest2 is not Tvar *) @@ -4958,7 +5179,7 @@ and subtype_row env trace row1 row2 cstrs = | (Tvar _|Tconstr _|Tnil), (Tvar _|Tconstr _|Tnil) when row1_closed && r1 = [] -> List.fold_left - (fun cstrs (_,f1,f2) -> + (fun cstrs (l,f1,f2) -> match row_field_repr f1, row_field_repr f2 with (Rpresent None|Reither(true,_,_)), Rpresent None -> cstrs @@ -4975,7 +5196,12 @@ and subtype_row env trace row1 row2 cstrs = t1 t2 cstrs | Rabsent, _ -> cstrs - | _ -> raise Exit) + | Rpresent None, Rpresent (Some _) + | Rpresent (Some _), Rpresent None -> + subtype_error ~env ~trace + ~unification_trace:[Variant (Incompatible_types_for l)] + | _ -> + raise Exit) cstrs pairs | Tunivar _, Tunivar _ when row1_closed = row2_closed && r1 = [] && r2 = [] -> @@ -5007,19 +5233,22 @@ and subtype_row env trace row1 row2 cstrs = let subtype env ty1 ty2 = TypePairs.clear subtypes; - univar_pairs := []; - (* Build constraint set. *) - let cstrs = - subtype_rec env [Subtype.Diff {got = ty1; expected = ty2}] ty1 ty2 [] - in - TypePairs.clear subtypes; - (* Enforce constraints. *) - function () -> - List.iter - (function (trace0, t1, t2, pairs) -> - try unify_pairs (ref env) t1 t2 pairs with Unify {trace} -> - subtype_error ~env ~trace:trace0 ~unification_trace:(List.tl trace)) - (List.rev cstrs) + with_univar_pairs [] (fun () -> + (* Build constraint set. *) + let cstrs = + subtype_rec env [Subtype.Diff {got = ty1; expected = ty2}] ty1 ty2 [] + in + TypePairs.clear subtypes; + (* Enforce constraints. *) + function () -> + List.iter + (function (trace0, t1, t2, pairs) -> + try unify_pairs env t1 t2 pairs with Unify {trace} -> + subtype_error + ~env + ~trace:trace0 + ~unification_trace:(List.tl trace)) + (List.rev cstrs)) (*******************) (* Miscellaneous *) @@ -5168,9 +5397,8 @@ let nongen_vars_in_class_declaration cty = (* Normalize a type before printing, saving... *) (* Cannot use mark_type because deep_occur uses it too *) -let rec normalize_type_rec visited ty = - if not (TypeSet.mem ty !visited) then begin - visited := TypeSet.add ty !visited; +let rec normalize_type_rec mark ty = + if try_mark_node mark ty then begin let tm = row_of_type ty in begin if not (is_Tconstr ty) && is_constr_row ~allow_ident:false tm then match get_desc tm with (* PR#7348 *) @@ -5210,7 +5438,8 @@ let rec normalize_type_rec visited ty = begin match !nm with | None -> () | Some (n, v :: l) -> - if deep_occur ty (newgenty (Ttuple l)) then + if deep_occur_list ty l + then (* The abbreviation may be hiding something, so remove it *) set_name nm None else @@ -5229,11 +5458,11 @@ let rec normalize_type_rec visited ty = set_type_desc fi (get_desc fi') | _ -> () end; - iter_type_expr (normalize_type_rec visited) ty; + iter_type_expr (normalize_type_rec mark) ty; end let normalize_type ty = - normalize_type_rec (ref TypeSet.empty) ty + with_type_mark (fun mark -> normalize_type_rec mark ty) (*************************) @@ -5286,13 +5515,16 @@ let rec nondep_type_rec ?(expand_private=false) env ids ty = *) with Cannot_expand -> raise exn end - | Tpackage(p, fl) when Path.exists_free ids p -> - let p' = normalize_package_path env p in + | Tpackage pack when Path.exists_free ids pack.pack_path -> + let p' = normalize_package_path env pack.pack_path in begin match Path.find_free_opt ids p' with | Some id -> raise (Nondep_cannot_erase id) | None -> let nondep_field_rec (n, ty) = (n, nondep_type_rec env ids ty) in - Tpackage (p', List.map nondep_field_rec fl) + Tpackage { + pack_path = p'; + pack_cstrs = List.map nondep_field_rec pack.pack_cstrs + } end | Tobject (t1, name) -> Tobject (nondep_type_rec env ids t1, @@ -5350,7 +5582,7 @@ let nondep_type_decl env mid is_covariant decl = let params = List.map (nondep_type_rec env mid) decl.type_params in let tk = try map_kind (nondep_type_rec env mid) decl.type_kind - with Nondep_cannot_erase _ when is_covariant -> Type_abstract + with Nondep_cannot_erase _ when is_covariant -> Type_abstract Definition and tm, priv = match decl.type_manifest with | None -> None, decl.type_private diff --git a/ocamlmerlin_mlx/ocaml/typing/ctype.mli b/ocamlmerlin_mlx/ocaml/typing/ctype.mli index be4fddb..59cbf8f 100644 --- a/ocamlmerlin_mlx/ocaml/typing/ctype.mli +++ b/ocamlmerlin_mlx/ocaml/typing/ctype.mli @@ -35,6 +35,15 @@ exception Incompatible (* All the following wrapper functions revert to the original level, even in case of exception. *) +val with_local_level_generalize: + ?before_generalize:('a -> unit) -> (unit -> 'a) -> 'a +val with_local_level_generalize_if: + bool -> ?before_generalize:('a -> unit) -> (unit -> 'a) -> 'a +val with_local_level_generalize_structure: (unit -> 'a) -> 'a +val with_local_level_generalize_structure_if: bool -> (unit -> 'a) -> 'a +val with_local_level_generalize_structure_if_principal: (unit -> 'a) -> 'a +val with_local_level_generalize_for_class: (unit -> 'a) -> 'a + val with_local_level: ?post:('a -> unit) -> (unit -> 'a) -> 'a (* [with_local_level (fun () -> cmd) ~post] evaluates [cmd] at a raised level. @@ -134,8 +143,6 @@ val merge_row_fields: val filter_row_fields: bool -> (label * row_field) list -> (label * row_field) list -val generalize: type_expr -> unit - (* Generalize in-place the given type *) val lower_contravariant: Env.t -> type_expr -> unit (* Lower level of type variables inside contravariant branches; to be used before generalize for expansive expressions *) @@ -143,23 +150,16 @@ val lower_variables_only: Env.t -> int -> type_expr -> unit (* Lower all variables to the given level *) val enforce_current_level: Env.t -> type_expr -> unit (* Lower whole type to !current_level *) -val generalize_structure: type_expr -> unit - (* Generalize the structure of a type, lowering variables - to !current_level *) -val generalize_class_type : class_type -> unit - (* Generalize the components of a class type *) -val generalize_class_type_structure : class_type -> unit - (* Generalize the structure of the components of a class type *) -val generalize_class_signature_spine : Env.t -> class_signature -> unit +val generalize_class_signature_spine: class_signature -> unit (* Special function to generalize methods during inference *) -val correct_levels: type_expr -> type_expr - (* Returns a copy with decreasing levels *) -val limited_generalize: type_expr -> type_expr -> unit +val limited_generalize: type_expr -> inside:type_expr -> unit (* Only generalize some part of the type Make the remaining of the type non-generalizable *) -val limited_generalize_class_type: type_expr -> class_type -> unit +val limited_generalize_class_type: type_expr -> inside:class_type -> unit (* Same, but for class types *) +val duplicate_type: type_expr -> type_expr + (* Returns a copy with non-variable nodes at generic level *) val fully_generic: type_expr -> bool val check_scope_escape : Env.t -> int -> type_expr -> unit @@ -178,16 +178,32 @@ val instance_list: type_expr list -> type_expr list (* Take an instance of a list of type schemes *) val new_local_type: ?loc:Location.t -> - ?manifest_and_scope:(type_expr * int) -> unit -> type_declaration -val existential_name: constructor_description -> type_expr -> string + ?manifest_and_scope:(type_expr * int) -> + type_origin -> type_declaration + +module Pattern_env : sig + type t = private + { mutable env : Env.t; + equations_scope : int; + (* scope for local type declarations *) + in_counterexample : bool; + (* true iff checking counter examples *) + } + val make: Env.t -> equations_scope:int -> in_counterexample:bool -> t + val copy: ?equations_scope:int -> t -> t + val set_env: t -> Env.t -> unit +end type existential_treatment = | Keep_existentials_flexible - | Make_existentials_abstract of { env: Env.t ref; scope: int } + | Make_existentials_abstract of Pattern_env.t + +val instance_constructor: + existential_treatment -> + Data_types.constructor_description -> + type_expr list * type_expr * type_expr list +(* Same, for a constructor. Also returns existentials. *) -val instance_constructor: existential_treatment -> - constructor_description -> type_expr list * type_expr * type_expr list - (* Same, for a constructor. Also returns existentials. *) val instance_parameterized_type: ?keep_names:bool -> type_expr list -> type_expr -> type_expr list * type_expr @@ -198,13 +214,17 @@ val instance_class: type_expr list -> class_type -> type_expr list * class_type val instance_poly: - ?keep_names:bool -> - bool -> type_expr list -> type_expr -> type_expr list * type_expr + ?keep_names:bool -> fixed:bool -> + type_expr list -> type_expr -> type_expr list * type_expr (* Take an instance of a type scheme containing free univars *) val polyfy: Env.t -> type_expr -> type_expr list -> type_expr * bool + val instance_label: - bool -> label_description -> type_expr list * type_expr * type_expr - (* Same, for a label *) + fixed:bool -> + Data_types.label_description -> + type_expr list * type_expr * type_expr +(* Same, for a label *) + val apply: ?use_current_level:bool -> Env.t -> type_expr list -> type_expr -> type_expr list -> type_expr @@ -252,14 +272,19 @@ type typedecl_extraction_result = val extract_concrete_typedecl: Env.t -> type_expr -> typedecl_extraction_result +val get_new_abstract_name : Env.t -> string -> string + val unify: Env.t -> type_expr -> type_expr -> unit (* Unify the two types given. Raise [Unify] if not possible. *) val unify_gadt: - equations_level:int -> allow_recursive_equations:bool -> - Env.t ref -> type_expr -> type_expr -> Btype.TypePairs.t - (* Unify the two types given and update the environment with the - local constraints. Raise [Unify] if not possible. - Returns the pairs of types that have been equated. *) + Pattern_env.t -> pat:type_expr -> expected:type_expr -> Btype.TypePairs.t + (* [unify_gadt penv ~pat:ty1 ~expected:ty2] unifies [ty1] and [ty2] + in [Pattern] mode, possible adding local constraints to the + environment in [penv]. Raises [Unify] if not possible. + Returns the pairs of types that have been equated. + Type variables in [ty1] are always assumed to be non-leaking + (safely reifiable); if [penv.in_counterexample = true] + then both [ty1] and [ty2] are assumed to be non-leaking. *) val unify_var: Env.t -> type_expr -> type_expr -> unit (* Same as [unify], but allow free univars when first type is a variable. *) @@ -271,6 +296,7 @@ val filter_method: Env.t -> string -> type_expr -> type_expr [Filter_method_failed] instead of [Unify]. *) val occur_in: Env.t -> type_expr -> type_expr -> bool val deep_occur: type_expr -> type_expr -> bool +val deep_occur_list: type_expr -> type_expr list -> bool val moregeneral: Env.t -> bool -> type_expr -> type_expr -> unit (* Check if the first type scheme is more general than the second. *) val is_moregeneral: Env.t -> bool -> type_expr -> type_expr -> bool @@ -312,9 +338,9 @@ exception Filter_method_failed of filter_method_failure type class_match_failure = CM_Virtual_class | CM_Parameter_arity_mismatch of int * int - | CM_Type_parameter_mismatch of Env.t * Errortrace.equality_error + | CM_Type_parameter_mismatch of int * Env.t * Errortrace.equality_error | CM_Class_type_mismatch of Env.t * class_type * class_type - | CM_Parameter_mismatch of Env.t * Errortrace.moregen_error + | CM_Parameter_mismatch of int * Env.t * Errortrace.moregen_error | CM_Val_type_mismatch of string * Env.t * Errortrace.comparison_error | CM_Meth_type_mismatch of string * Env.t * Errortrace.comparison_error | CM_Non_mutable_value of string @@ -434,7 +460,9 @@ type closed_class_failure = { } val free_variables: ?env:Env.t -> type_expr -> type_expr list +val free_variables_list: ?env:Env.t -> type_expr list -> type_expr list (* If env present, then check for incomplete definitions too *) +val closed_type_expr: ?env:Env.t -> type_expr -> bool val closed_type_decl: type_declaration -> type_expr option val closed_extension_constructor: extension_constructor -> type_expr option val closed_class: @@ -451,14 +479,14 @@ val collapse_conj_params: Env.t -> type_expr list -> unit (* Collapse conjunctive types in class parameters *) val get_current_level: unit -> int -val wrap_trace_gadt_instances: Env.t -> ('a -> 'b) -> 'a -> 'b +val wrap_trace_gadt_instances: ?force:bool -> Env.t -> ('a -> 'b) -> 'a -> 'b val immediacy : Env.t -> type_expr -> Type_immediacy.t (* Stubs *) val package_subtype : - (Env.t -> Path.t -> (Longident.t * type_expr) list -> - Path.t -> (Longident.t * type_expr) list -> bool) ref + (Env.t -> package -> package -> + (unit,Errortrace.first_class_module) Result.t) ref (* Raises [Incompatible] *) val mcomp : Env.t -> type_expr -> type_expr -> unit diff --git a/ocamlmerlin_mlx/ocaml/typing/data_types.ml b/ocamlmerlin_mlx/ocaml/typing/data_types.ml new file mode 100644 index 0000000..167a160 --- /dev/null +++ b/ocamlmerlin_mlx/ocaml/typing/data_types.ml @@ -0,0 +1,91 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Gabriel Scherer, projet Picube, INRIA Paris *) +(* *) +(* Copyright 2024 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +open Asttypes +open Types + +(* Constructor and record label descriptions inserted held in typing + environments *) + +type constructor_description = + { cstr_name: string; (* Constructor name *) + cstr_res: type_expr; (* Type of the result *) + cstr_existentials: type_expr list; (* list of existentials *) + cstr_args: type_expr list; (* Type of the arguments *) + cstr_arity: int; (* Number of arguments *) + cstr_tag: constructor_tag; (* Tag for heap blocks *) + cstr_consts: int; (* Number of constant constructors *) + cstr_nonconsts: int; (* Number of non-const constructors *) + cstr_generalized: bool; (* Constrained return type? *) + cstr_private: private_flag; (* Read-only constructor? *) + cstr_loc: Location.t; + cstr_attributes: Parsetree.attributes; + cstr_inlined: type_declaration option; + cstr_uid: Uid.t; + } + +and constructor_tag = + Cstr_constant of int (* Constant constructor (an int) *) + | Cstr_block of int (* Regular constructor (a block) *) + | Cstr_unboxed (* Constructor of an unboxed type *) + | Cstr_extension of Path.t * bool (* Extension constructor + true if a constant false if a block*) + +let equal_tag t1 t2 = + match (t1, t2) with + | Cstr_constant i1, Cstr_constant i2 -> i2 = i1 + | Cstr_block i1, Cstr_block i2 -> i2 = i1 + | Cstr_unboxed, Cstr_unboxed -> true + | Cstr_extension (path1, _), Cstr_extension (path2, _) -> + Path.same path1 path2 + | (Cstr_constant _|Cstr_block _|Cstr_unboxed|Cstr_extension _), _ -> false + +let equal_constr c1 c2 = + equal_tag c1.cstr_tag c2.cstr_tag + +let may_equal_constr c1 c2 = + c1.cstr_arity = c2.cstr_arity + && (match c1.cstr_tag,c2.cstr_tag with + | Cstr_extension _,Cstr_extension _ -> + (* extension constructors may be rebindings of each other *) + true + | tag1, tag2 -> + equal_tag tag1 tag2) + +let cstr_res_type_path cstr = + match get_desc cstr.cstr_res with + | Tconstr (p, _, _) -> p + | _ -> assert false + +type label_description = + { lbl_name: string; (* Short name *) + lbl_res: type_expr; (* Type of the result (the record) *) + lbl_arg: type_expr; (* Type of the argument + (the field value) *) + lbl_mut: mutable_flag; (* Is this a mutable field? *) + lbl_atomic: atomic_flag; (* Is this an atomic field? *) + lbl_pos: int; (* Position in block *) + lbl_all: label_description array; (* All the labels in this type *) + lbl_repres: record_representation; (* Representation for this record *) + lbl_private: private_flag; (* Read-only field? *) + lbl_loc: Location.t; + lbl_attributes: Parsetree.attributes; + lbl_uid: Uid.t; + } + +let lbl_res_type_path lbl = + match get_desc lbl.lbl_res with + | Tconstr (p, _, _) -> p + | _ -> assert false diff --git a/ocamlmerlin_mlx/ocaml/typing/data_types.mli b/ocamlmerlin_mlx/ocaml/typing/data_types.mli new file mode 100644 index 0000000..2ec77db --- /dev/null +++ b/ocamlmerlin_mlx/ocaml/typing/data_types.mli @@ -0,0 +1,75 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Gabriel Scherer, projet Picube, INRIA Paris *) +(* *) +(* Copyright 2024 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +open Asttypes +open Types + +(* Constructor and record label descriptions inserted held in typing + environments *) + +type constructor_description = + { cstr_name: string; (* Constructor name *) + cstr_res: type_expr; (* Type of the result *) + cstr_existentials: type_expr list; (* list of existentials *) + cstr_args: type_expr list; (* Type of the arguments *) + cstr_arity: int; (* Number of arguments *) + cstr_tag: constructor_tag; (* Tag for heap blocks *) + cstr_consts: int; (* Number of constant constructors *) + cstr_nonconsts: int; (* Number of non-const constructors *) + cstr_generalized: bool; (* Constrained return type? *) + cstr_private: private_flag; (* Read-only constructor? *) + cstr_loc: Location.t; + cstr_attributes: Parsetree.attributes; + cstr_inlined: type_declaration option; + cstr_uid: Uid.t; + } + +and constructor_tag = + Cstr_constant of int (* Constant constructor (an int) *) + | Cstr_block of int (* Regular constructor (a block) *) + | Cstr_unboxed (* Constructor of an unboxed type *) + | Cstr_extension of Path.t * bool (* Extension constructor + true if a constant false if a block*) + +(* Constructors are the same: they return (structurally)-equal values + when applied to equal arguments. *) +val equal_constr : + constructor_description -> constructor_description -> bool + +(* Constructors may be the same, given potential rebinding. *) +val may_equal_constr : + constructor_description -> constructor_description -> bool + +(* Type constructor of the constructor's result type. *) +val cstr_res_type_path : constructor_description -> Path.t + +type label_description = + { lbl_name: string; (* Short name *) + lbl_res: type_expr; (* Type of the result (the record) *) + lbl_arg: type_expr; (* Type of the argument + (the field value) *) + lbl_mut: mutable_flag; (* Is this a mutable field? *) + lbl_atomic: atomic_flag; (* Is this an atomic field? *) + lbl_pos: int; (* Position in block *) + lbl_all: label_description array; (* All the labels in this type *) + lbl_repres: record_representation; (* Representation for this record *) + lbl_private: private_flag; (* Read-only field? *) + lbl_loc: Location.t; + lbl_attributes: Parsetree.attributes; + lbl_uid: Uid.t; + } + +(* Type constructor of the label record type. *) +val lbl_res_type_path : label_description -> Path.t diff --git a/ocamlmerlin_mlx/ocaml/typing/datarepr.ml b/ocamlmerlin_mlx/ocaml/typing/datarepr.ml index 004859e..d0266be 100644 --- a/ocamlmerlin_mlx/ocaml/typing/datarepr.ml +++ b/ocamlmerlin_mlx/ocaml/typing/datarepr.ml @@ -18,29 +18,31 @@ open Asttypes open Types +open Data_types open Btype (* Simplified version of Ctype.free_vars *) let free_vars ?(param=false) ty = let ret = ref TypeSet.empty in - let rec loop ty = - if try_mark_node ty then - match get_desc ty with - | Tvar _ -> - ret := TypeSet.add ty !ret - | Tvariant row -> - iter_row loop row; - if not (static_row row) then begin - match get_desc (row_more row) with - | Tvar _ when param -> ret := TypeSet.add ty !ret - | _ -> loop (row_more row) - end - (* XXX: What about Tobject ? *) - | _ -> - iter_type_expr loop ty - in - loop ty; - unmark_type ty; + with_type_mark begin fun mark -> + let rec loop ty = + if try_mark_node mark ty then + match get_desc ty with + | Tvar _ -> + ret := TypeSet.add ty !ret + | Tvariant row -> + iter_row loop row; + if not (static_row row) then begin + match get_desc (row_more row) with + | Tvar _ when param -> ret := TypeSet.add ty !ret + | _ -> loop (row_more row) + end + (* XXX: What about Tobject ? *) + | _ -> + iter_type_expr loop ty + in + loop ty + end; !ret let newgenconstr path tyl = newgenty (Tconstr (path, tyl, ref Mnil)) @@ -55,7 +57,9 @@ let constructor_existentials cd_args cd_res = match cd_res with | None -> [] | Some type_ret -> - let arg_vars_set = free_vars (newgenty (Ttuple tyl)) in + let arg_vars_set = + free_vars (newgenty (Ttuple (List.map (fun ty -> None, ty) tyl))) + in let res_vars = free_vars type_ret in TypeSet.elements (TypeSet.diff arg_vars_set res_vars) in @@ -66,7 +70,10 @@ let constructor_args ~current_unit priv cd_args cd_res path rep = match cd_args with | Cstr_tuple l -> existentials, l, None | Cstr_record lbls -> - let arg_vars_set = free_vars ~param:true (newgenty (Ttuple tyl)) in + let arg_vars_set = + free_vars ~param:true + (newgenty (Ttuple (List.map (fun ty -> None, ty) tyl))) + in let type_params = TypeSet.elements arg_vars_set in let arity = List.length type_params in let tdecl = @@ -177,7 +184,8 @@ let none = (* Clearly ill-formed type *) let dummy_label = - { lbl_name = ""; lbl_res = none; lbl_arg = none; lbl_mut = Immutable; + { lbl_name = ""; lbl_res = none; lbl_arg = none; + lbl_mut = Immutable; lbl_atomic = Nonatomic; lbl_pos = (-1); lbl_all = [||]; lbl_repres = Record_regular; lbl_private = Public; lbl_loc = Location.none; @@ -195,6 +203,7 @@ let label_descrs ty_res lbls repres priv = lbl_res = ty_res; lbl_arg = l.ld_type; lbl_mut = l.ld_mutable; + lbl_atomic = l.ld_atomic; lbl_pos = num; lbl_all = all_labels; lbl_repres = repres; @@ -228,11 +237,11 @@ let constructors_of_type ~current_unit ty_path decl = match decl.type_kind with | Type_variant (cstrs,rep) -> constructor_descrs ~current_unit ty_path decl cstrs rep - | Type_record _ | Type_abstract | Type_open -> [] + | Type_record _ | Type_abstract _ | Type_open -> [] let labels_of_type ty_path decl = match decl.type_kind with | Type_record(labels, rep) -> label_descrs (newgenconstr ty_path decl.type_params) labels rep decl.type_private - | Type_variant _ | Type_abstract | Type_open -> [] + | Type_variant _ | Type_abstract _ | Type_open -> [] diff --git a/ocamlmerlin_mlx/ocaml/typing/datarepr.mli b/ocamlmerlin_mlx/ocaml/typing/datarepr.mli index 38f05f7..140ca7c 100644 --- a/ocamlmerlin_mlx/ocaml/typing/datarepr.mli +++ b/ocamlmerlin_mlx/ocaml/typing/datarepr.mli @@ -17,16 +17,17 @@ determining their representation. *) open Types +open Data_types val extension_descr: - current_unit:string -> Path.t -> extension_constructor -> + current_unit:(Unit_info.t option) -> Path.t -> extension_constructor -> constructor_description val labels_of_type: Path.t -> type_declaration -> (Ident.t * label_description) list val constructors_of_type: - current_unit:string -> Path.t -> type_declaration -> + current_unit:(Unit_info.t option) -> Path.t -> type_declaration -> (Ident.t * constructor_description) list diff --git a/ocamlmerlin_mlx/ocaml/typing/dune b/ocamlmerlin_mlx/ocaml/typing/dune index 9212932..71f0b7d 100644 --- a/ocamlmerlin_mlx/ocaml/typing/dune +++ b/ocamlmerlin_mlx/ocaml/typing/dune @@ -7,15 +7,9 @@ -open=Mlx_ocaml_compression -open=Mlx_utils (:standard -w -9)) - (modules_without_implementation annot outcometree) + (modules_without_implementation annot outcometree value_rec_types) (libraries mlx_utils mlx_ocaml_parsing mlx_ocaml_compression mlx_ocaml_utils)) - -(copy_files - (enabled_if - (<> %{profile} "release")) - (mode promote) - (files %{project_root}/merlin/src/ocaml/typing/*.{ml,mli})) diff --git a/ocamlmerlin_mlx/ocaml/typing/env.ml b/ocamlmerlin_mlx/ocaml/typing/env.ml index 986b46d..487484a 100644 --- a/ocamlmerlin_mlx/ocaml/typing/env.ml +++ b/ocamlmerlin_mlx/ocaml/typing/env.ml @@ -21,6 +21,7 @@ open Asttypes open Longident open Path open Types +open Data_types open Local_store @@ -28,7 +29,7 @@ module String = Misc.String let add_delayed_check_forward = ref (fun _ -> assert false) -type 'a usage_tbl = ('a -> unit) Types.Uid.Tbl.t +type 'a usage_tbl = (Uid.t, ('a -> unit)) Stamped_hashtable.t (** This table is used to track usage of value declarations. A declaration is identified by its uid. The callback attached to a declaration is called whenever the value (or @@ -36,16 +37,18 @@ type 'a usage_tbl = ('a -> unit) Types.Uid.Tbl.t (inclusion test between signatures, cf Includemod.value_descriptions, ...). *) -let value_declarations : unit usage_tbl ref = s_table Types.Uid.Tbl.create 16 -let type_declarations : unit usage_tbl ref = s_table Types.Uid.Tbl.create 16 -let module_declarations : unit usage_tbl ref = s_table Types.Uid.Tbl.create 16 +let local_stamped n : Stamped_hashtable.changelog * ('a usage_tbl) = + let changelog = Stamped_hashtable.create_changelog () in + changelog, Stamped_hashtable.create changelog n -let uid_to_loc : Location.t Types.Uid.Tbl.t ref = - s_table Types.Uid.Tbl.create 16 +let stamped_value_declarations = s_table local_stamped 32 +let value_declarations_changelog, value_declarations = !stamped_value_declarations -let register_uid uid loc = Types.Uid.Tbl.add !uid_to_loc uid loc +let stamped_type_declarations = s_table local_stamped 32 +let type_declarations_changelog, type_declarations = !stamped_type_declarations -let get_uid_to_loc_tbl () = !uid_to_loc +let stamped_module_declarations = s_table local_stamped 32 +let module_declarations_changelog, module_declarations = !stamped_module_declarations type constructor_usage = Positive | Pattern | Exported_private | Exported type constructor_usages = @@ -81,8 +84,8 @@ let constructor_usage_complaint ~rebind priv cu | false, false, true -> Some Only_exported_private end -let used_constructors : constructor_usage usage_tbl ref = - s_table Types.Uid.Tbl.create 16 +let stamped_used_constructors = s_table local_stamped 32 +let used_constructors_changelog, used_constructors = !stamped_used_constructors type label_usage = Projection | Mutation | Construct | Exported_private | Exported @@ -131,8 +134,8 @@ let label_usage_complaint priv mut lu | true, false, _ -> Some Not_mutated end -let used_labels : label_usage usage_tbl ref = - s_table Types.Uid.Tbl.create 16 +let stamped_used_labels = s_table local_stamped 32 +let used_labels_changelog, used_labels = !stamped_used_labels (** Map indexed by the name of module components. *) module NameMap = String.Map @@ -144,7 +147,8 @@ type value_unbound_reason = | Val_unbound_ghost_recursive of Location.t type module_unbound_reason = - | Mod_unbound_illegal_recursion + | Mod_unbound_illegal_recursion of + { container : string option; unbound : string } type summary = Env_empty @@ -516,7 +520,7 @@ let in_signature_flag = 0x01 let stamped_changelog = s_table Stamped_hashtable.create_changelog () -let stamped_add table path value = +let stamped_path_add table path value = let rec path_stamp = function | Pident id -> Ident.stamp id | Pdot (t, _) -> path_stamp t @@ -527,11 +531,15 @@ let stamped_add table path value = let stamp = if stamp = 0 then None else Some stamp in Stamped_hashtable.add table ?stamp path value -let stamped_mem table path = - Stamped_hashtable.mem table path +let stamped_uid_add table uid value = + let stamp = Types.Uid.stamp_of_uid uid in + Stamped_hashtable.add table ?stamp uid value -let stamped_find table path = - Stamped_hashtable.find table path +let stamped_mem table value = + Stamped_hashtable.mem table value + +let stamped_find table value = + Stamped_hashtable.find table value let stamped_create n = Stamped_hashtable.create !stamped_changelog n @@ -654,11 +662,11 @@ and cltype_data = and short_paths_addition = | Type of Ident.t * type_declaration | Class_type of Ident.t * class_type_declaration - | Module_type of Ident.t * modtype_declaration - | Module of Ident.t * module_declaration * module_components + | Module_type of Ident.t * Subst.Lazy.modtype_declaration + | Module of Ident.t * Subst.Lazy.module_decl * module_components | Type_open of Path.t * type_data NameMap.t | Class_type_open of Path.t * class_type_declaration NameMap.t - | Module_type_open of Path.t * modtype_declaration NameMap.t + | Module_type_open of Path.t * Subst.Lazy.modtype_declaration NameMap.t | Module_open of Path.t * module_data NameMap.t let empty_structure = @@ -694,7 +702,14 @@ type lookup_error = | Functor_used_as_structure of Longident.t | Abstract_used_as_structure of Longident.t | Generative_used_as_applicative of Longident.t - | Illegal_reference_to_recursive_module + | Illegal_reference_to_recursive_module of + { container: string option; unbound : string } + | Illegal_reference_to_recursive_class_type of + { container : string option; + unbound : string; + unbound_class_type : Longident.t; + container_class_type : string; + } | Cannot_scrape_alias of Longident.t * Path.t type error = @@ -709,6 +724,11 @@ let error err = raise (Error err) let lookup_error loc env err = error (Lookup_error(loc, env, err)) +let same_type_declarations e1 e2 = + e1.types == e2.types && + e1.modules == e2.modules && + e1.local_constraints == e2.local_constraints + let same_constr = ref (fun _ _ _ -> assert false) let check_well_formed_module = ref (fun _ -> assert false) @@ -729,9 +749,12 @@ let check_shadowing env = function | `Label (Some (l1, l2)) when not (!same_constr env l1.lbl_res l2.lbl_res) -> Some "label" - | `Value (Some _) -> Some "value" + | `Value (Some (Val_unbound _, _)) -> None + | `Value (Some (_, _)) -> Some "value" | `Type (Some _) -> Some "type" - | `Module (Some _) | `Component (Some _) -> Some "module" + | `Module (Some (Mod_unbound _, _)) -> None + | `Module (Some _) | `Component (Some _) -> + Some "module" | `Module_type (Some _) -> Some "module type" | `Class (Some _) -> Some "class" | `Class_type (Some _) -> Some "class type" @@ -835,42 +858,57 @@ let rec print_address ppf = function (* The name of the compilation unit currently compiled. "" if outside a compilation unit. *) -module Current_unit_name : sig - val get : unit -> modname - val set : modname -> unit - val is : modname -> bool - val is_ident : Ident.t -> bool - val is_path : Path.t -> bool +module Current_unit : sig + val get : unit -> Unit_info.t option + val set : Unit_info.t -> unit + val unset : unit -> unit + + module Name : sig + val get : unit -> modname + val is : modname -> bool + val is_ident : Ident.t -> bool + val is_path : Path.t -> bool + end end = struct - let current_unit = - ref "" + let current_unit : Unit_info.t option ref = + ref None let get () = !current_unit - let set name = - current_unit := name - let is name = - !current_unit = name - let is_ident id = - Ident.persistent id && is (Ident.name id) - let is_path = function - | Pident id -> is_ident id - | Pdot _ | Papply _ | Pextra_ty _ -> false + let set cu = + current_unit := Some cu + let unset () = + current_unit := None + + module Name = struct + let get () = + match !current_unit with + | None -> "" + | Some cu -> Unit_info.modname cu + let is name = + get () = name + let is_ident id = + Ident.persistent id && is (Ident.name id) + let is_path = function + | Pident id -> is_ident id + | Pdot _ | Papply _ | Pextra_ty _ -> false + end end -let set_unit_name = Current_unit_name.set -let get_unit_name = Current_unit_name.get +let set_current_unit = Current_unit.set +let get_current_unit = Current_unit.get +let get_current_unit_name = Current_unit.Name.get let find_same_module id tbl = match IdTbl.find_same id tbl with | x -> x | exception Not_found - when Ident.persistent id && not (Current_unit_name.is_ident id) -> + when Ident.persistent id && not (Current_unit.Name.is_ident id) -> Mod_persistent let find_name_module ~mark name tbl = match IdTbl.find_name wrap_module ~mark name tbl with | x -> x - | exception Not_found when not (Current_unit_name.is name) -> + | exception Not_found when not (Current_unit.Name.is name) -> let path = Pident(Ident.create_persistent name) in path, Mod_persistent @@ -884,7 +922,7 @@ let short_paths_components name pm = let add_persistent_structure id env = if not (Ident.persistent id) then invalid_arg "Env.add_persistent_structure"; - if Current_unit_name.is_ident id then env + if Current_unit.Name.is_ident id then env else begin let material = (* This addition only observably changes the environment if it shadows a @@ -905,7 +943,7 @@ let add_persistent_structure id env = affect the environment at all. We should only observe the existence of a cmi when accessing components of the module. (See #9991). *) - if material || not !Clflags.transparent_modules then + if material || not !Clflags.no_alias_deps then IdTbl.add id Mod_persistent env.modules else env.modules @@ -985,9 +1023,9 @@ let imports () = Persistent_env.imports !persistent_env let import_crcs ~source crcs = Persistent_env.import_crcs !persistent_env ~source crcs -let read_pers_mod modname filename = +let read_pers_mod cmi = Persistent_env.read !persistent_env - read_sign_of_cmi short_paths_components modname filename + read_sign_of_cmi short_paths_components cmi let find_pers_mod name = Persistent_env.find !persistent_env @@ -1008,16 +1046,15 @@ let register_import_as_opaque modname = Persistent_env.register_import_as_opaque !persistent_env modname let reset_declaration_caches () = - Types.Uid.Tbl.clear !value_declarations; - Types.Uid.Tbl.clear !type_declarations; - Types.Uid.Tbl.clear !module_declarations; - Types.Uid.Tbl.clear !used_constructors; - Types.Uid.Tbl.clear !used_labels; - Types.Uid.Tbl.clear !uid_to_loc; + Stamped_hashtable.clear value_declarations; + Stamped_hashtable.clear type_declarations; + Stamped_hashtable.clear module_declarations; + Stamped_hashtable.clear used_constructors; + Stamped_hashtable.clear used_labels; () let reset_cache () = - Current_unit_name.set ""; + Current_unit.unset (); Persistent_env.clear !persistent_env; reset_declaration_caches (); () @@ -1060,7 +1097,7 @@ let modtype_of_functor_appl fcomp p1 p2 = in Subst.modtype (Rescope scope) subst mty in - stamped_add fcomp.fcomp_subst_cache p2 mty; + stamped_path_add fcomp.fcomp_subst_cache p2 mty; mty let check_functor_appl @@ -1080,7 +1117,7 @@ let find_ident_module id env = match find_same_module id env.modules with | Mod_local data -> data | Mod_unbound _ -> raise Not_found - | Mod_persistent -> find_pers_mod (Ident.name id) + | Mod_persistent -> find_pers_mod ~allow_hidden:true (Ident.name id) let rec find_module_components path env = match path with @@ -1188,7 +1225,7 @@ let rec find_type_data path env = | decl -> { tda_declaration = decl; - tda_descriptions = Type_abstract; + tda_descriptions = Type_abstract (Btype.type_origin decl); tda_shape = Shape.leaf decl.type_uid; } | exception Not_found -> begin @@ -1213,7 +1250,7 @@ and find_cstr path name env = match tda.tda_descriptions with | Type_variant (cstrs, _) -> List.find (fun cstr -> cstr.cstr_name = name) cstrs - | Type_record _ | Type_abstract | Type_open -> raise Not_found + | Type_record _ | Type_abstract _ | Type_open -> raise Not_found @@ -1320,6 +1357,10 @@ let find_shape env (ns : Shape.Sig_component_kind.t) id = match ns with | Type -> (IdTbl.find_same id env.types).tda_shape + | Constructor -> + Shape.leaf ((TycompTbl.find_same id env.constrs).cda_description.cstr_uid) + | Label -> + Shape.leaf ((TycompTbl.find_same id env.labels).lbl_uid) | Extension_constructor -> (TycompTbl.find_same id env.constrs).cda_shape | Value -> @@ -1338,7 +1379,7 @@ let find_shape env (ns : Shape.Sig_component_kind.t) id = properly populated. *) assert false | exception Not_found - when Ident.persistent id && not (Current_unit_name.is_ident id) -> + when Ident.persistent id && not (Current_unit.Name.is_ident id) -> Shape.for_persistent_unit (Ident.name id) end | Module_type -> @@ -1359,7 +1400,7 @@ let required_globals = s_ref [] let reset_required_globals () = required_globals := [] let get_required_globals () = !required_globals let add_required_global id = - if Ident.global id && not !Clflags.transparent_modules + if Ident.global id && not !Clflags.no_alias_deps && not (List.exists (Ident.same id) !required_globals) then required_globals := id :: !required_globals @@ -1383,7 +1424,7 @@ and expand_module_path lax env path = try match find_module_lazy ~alias:true path env with {mdl_type=MtyL_alias path1} -> let path' = normalize_module_path lax env path1 in - if lax || !Clflags.transparent_modules then path' else + if lax || !Clflags.no_alias_deps then path' else let id = Path.head path in if Ident.global id && not (Ident.same id (Path.head path')) then add_required_global id; @@ -1440,7 +1481,7 @@ let find_type_expansion path env = let decl = find_type path env in match decl.type_manifest with | Some body when decl.type_private = Public - || decl.type_kind <> Type_abstract + || not (Btype.type_kind_is_abstract decl) || Btype.has_constr_row body -> (decl.type_params, body, decl.type_expansion_scope) (* The manifest type of Private abstract data types without @@ -1686,7 +1727,7 @@ let prefix_idents root prefixing_sub sg = let p = Pdot(root, Ident.name id) in prefix_idents root ((SigL_modtype(id, mtd, vis), p) :: items_and_paths) - (Subst.add_modtype id (Mty_ident p) prefixing_sub) + (Subst.add_modtype id p prefixing_sub) rem | SigL_class(id, cd, rs, vis) :: rem -> (* pretend this is a type, cf. PR#6650 *) @@ -1730,20 +1771,15 @@ let short_paths_class_type_open path decls old = else Class_type_open(path, decls) :: old let short_paths_module_type id decl old = - let decl = Subst.Lazy.force_modtype_decl decl in if !Clflags.real_paths then old else Module_type(id, decl) :: old let short_paths_module_type_open path decls old = - let decls = NameMap.map - (fun mtda -> Subst.Lazy.force_modtype_decl mtda.mtda_declaration) - decls - in + let decls = NameMap.map (fun mtda -> mtda.mtda_declaration) decls in if !Clflags.real_paths then old else Module_type_open(path, decls) :: old let short_paths_module id decl comps old = - let decl = Subst.Lazy.force_module_decl decl in if !Clflags.real_paths then old else Module(id, decl, comps) :: old @@ -1779,16 +1815,6 @@ let module_declaration_address env id presence md = | Mp_present -> Lazy_backtrack.create_forced (Aident id) -let is_identchar c = - (* This should be kept in sync with the [identchar_latin1] character class - in [lexer.mll] *) - match c with - | 'A'..'Z' | 'a'..'z' | '_' | '\192'..'\214' - | '\216'..'\246' | '\248'..'\255' | '\'' | '0'..'9' -> - true - | _ -> - false - let rec components_of_module_maker {cm_env; cm_prefixing_subst; cm_path; cm_addr; cm_mty; cm_shape} : _ result = @@ -1836,7 +1862,7 @@ let rec components_of_module_maker | Type_variant (_,repr) -> let cstrs = List.map snd (Datarepr.constructors_of_type path final_decl - ~current_unit:(get_unit_name ())) + ~current_unit:(get_current_unit ())) in List.iter (fun descr -> @@ -1860,7 +1886,7 @@ let rec components_of_module_maker add_to_tbl descr.lbl_name descr c.comp_labels) lbls; Type_record (lbls, repr) - | Type_abstract -> Type_abstract + | Type_abstract r -> Type_abstract r | Type_open -> Type_open in let shape = Shape.proj cm_shape (Shape.Item.type_ id) in @@ -1874,7 +1900,7 @@ let rec components_of_module_maker | SigL_typext(id, ext, _, _) -> let ext' = Subst.extension_constructor sub ext in let descr = - Datarepr.extension_descr ~current_unit:(get_unit_name ()) path + Datarepr.extension_descr ~current_unit:(get_current_unit ()) path ext' in let addr = next_address () in @@ -1982,9 +2008,9 @@ and check_usage loc id uid warn tbl = Warnings.is_active (warn "") then begin let name = Ident.name id in - if Types.Uid.Tbl.mem tbl uid then () + if stamped_mem tbl uid then () else let used = ref false in - Types.Uid.Tbl.add tbl uid (fun () -> used := true); + stamped_uid_add tbl uid (fun () -> used := true); if not (name = "" || name.[0] = '_' || name.[0] = '#') then !add_delayed_check_forward @@ -1995,7 +2021,8 @@ and check_value_name name loc = (* Note: we could also check here general validity of the identifier, to protect against bad identifiers forged by -pp or -ppx preprocessors. *) - if String.length name > 0 && not (is_identchar name.[0]) then + if String.length name > 0 && not + (Utf8_lexeme.starts_like_a_valid_identifier name) then for i = 1 to String.length name - 1 do if name.[i] = '#' then error (Illegal_value_name(loc, name)) @@ -2003,8 +2030,9 @@ and check_value_name name loc = and store_value ?check id addr decl shape env = check_value_name (Ident.name id) decl.val_loc; + Builtin_attributes.mark_alerts_used decl.val_attributes; Option.iter - (fun f -> check_usage decl.val_loc id decl.val_uid f !value_declarations) + (fun f -> check_usage decl.val_loc id decl.val_uid f value_declarations) check; let vda = { vda_description = decl; @@ -2025,9 +2053,9 @@ and store_constructor ~check type_decl type_id cstr_id cstr env = let loc = cstr.cstr_loc in let k = cstr.cstr_uid in let priv = type_decl.type_private in - if not (Types.Uid.Tbl.mem !used_constructors k) then begin + if not (stamped_mem used_constructors k) then begin let used = constructor_usages () in - Types.Uid.Tbl.add !used_constructors k + stamped_uid_add used_constructors k (add_constructor_usage used); if not (ty_name = "" || ty_name.[0] = '_') then @@ -2041,6 +2069,8 @@ and store_constructor ~check type_decl type_id cstr_id cstr env = (constructor_usage_complaint ~rebind:false priv used)); end; end); + Builtin_attributes.mark_alerts_used cstr.cstr_attributes; + Builtin_attributes.mark_warn_on_literal_pattern_used cstr.cstr_attributes; let cda_shape = Shape.leaf cstr.cstr_uid in { env with constrs = @@ -2059,9 +2089,9 @@ and store_label ~check type_decl type_id lbl_id lbl env = let loc = lbl.lbl_loc in let mut = lbl.lbl_mut in let k = lbl.lbl_uid in - if not (Types.Uid.Tbl.mem !used_labels k) then + if not (stamped_mem used_labels k) then let used = label_usages () in - Types.Uid.Tbl.add !used_labels k + stamped_uid_add used_labels k (add_label_usage used); if not (ty_name = "" || ty_name.[0] = '_' || name.[0] = '_') then !add_delayed_check_forward @@ -2073,6 +2103,9 @@ and store_label ~check type_decl type_id lbl_id lbl env = loc (Warnings.Unused_field(name, complaint))) (label_usage_complaint priv mut used)) end); + Builtin_attributes.mark_alerts_used lbl.lbl_attributes; + if lbl.lbl_mut = Mutable then + Builtin_attributes.mark_deprecated_mutable_used lbl.lbl_attributes; { env with labels = TycompTbl.add lbl_id lbl env.labels; } @@ -2081,14 +2114,14 @@ and store_type ~check ~long_path ~predef id info shape env = let loc = info.type_loc in if check then check_usage loc id info.type_uid - (fun s -> Warnings.Unused_type_declaration s) - !type_declarations; + (fun s -> Warnings.Unused_type_declaration (s, Warnings.Declaration)) + type_declarations; let descrs, env = let path = Pident id in match info.type_kind with | Type_variant (_,repr) -> let constructors = Datarepr.constructors_of_type path info - ~current_unit:(get_unit_name ()) + ~current_unit:(get_current_unit ()) in Type_variant (List.map snd constructors, repr), List.fold_left @@ -2102,7 +2135,7 @@ and store_type ~check ~long_path ~predef id info shape env = (fun env (lbl_id, lbl) -> store_label ~check info id lbl_id lbl env) env labels - | Type_abstract -> Type_abstract, env + | Type_abstract r -> Type_abstract r, env | Type_open -> Type_open, env in let tda = @@ -2110,6 +2143,7 @@ and store_type ~check ~long_path ~predef id info shape env = tda_descriptions = descrs; tda_shape = shape } in + Builtin_attributes.mark_alerts_used info.type_attributes; { env with types = IdTbl.add id tda env.types; summary = Env_type(env.summary, id, info); @@ -2125,7 +2159,7 @@ and store_type_infos ~tda_shape id info env = let tda = { tda_declaration = info; - tda_descriptions = Type_abstract; + tda_descriptions = Type_abstract (Btype.type_origin info); tda_shape } in @@ -2138,13 +2172,16 @@ and store_type_infos ~tda_shape id info env = and store_extension ~check ~rebind id addr ext shape env = let loc = ext.ext_loc in let cstr = - Datarepr.extension_descr ~current_unit:(get_unit_name ()) (Pident id) ext + Datarepr.extension_descr + ~current_unit:(get_current_unit ()) (Pident id) ext in let cda = { cda_description = cstr; cda_address = Some addr; cda_shape = shape } in + Builtin_attributes.mark_alerts_used ext.ext_attributes; + Builtin_attributes.mark_warn_on_literal_pattern_used ext.ext_attributes; Builtin_attributes.warning_scope ext.ext_attributes (fun () -> if check && not loc.Location.loc_ghost && Warnings.is_active (Warnings.Unused_extension ("", false, Unused)) @@ -2153,9 +2190,9 @@ and store_extension ~check ~rebind id addr ext shape env = let is_exception = Path.same ext.ext_type_path Predef.path_exn in let name = cstr.cstr_name in let k = cstr.cstr_uid in - if not (Types.Uid.Tbl.mem !used_constructors k) then begin + if not (stamped_mem used_constructors k) then begin let used = constructor_usages () in - Types.Uid.Tbl.add !used_constructors k + stamped_uid_add used_constructors k (add_constructor_usage used); !add_delayed_check_forward (fun () -> @@ -2177,7 +2214,8 @@ and store_module ?(update_summary=true) ~check let open Subst.Lazy in let loc = md.mdl_loc in Option.iter - (fun f -> check_usage loc id md.mdl_uid f !module_declarations) check; + (fun f -> check_usage loc id md.mdl_uid f module_declarations) check; + Builtin_attributes.mark_alerts_used md.mdl_attributes; let alerts = Builtin_attributes.alerts_of_attrs md.mdl_attributes in let comps = components_of_module ~alerts ~uid:md.mdl_uid @@ -2199,6 +2237,7 @@ and store_module ?(update_summary=true) ~check short_paths_module id md comps env.short_paths_additions; } and store_modtype ?(update_summary=true) id info shape env = + Builtin_attributes.mark_alerts_used info.Subst.Lazy.mtdl_attributes; let mtda = { mtda_declaration = info; mtda_shape = shape } in let summary = if not update_summary then env.summary @@ -2210,6 +2249,7 @@ and store_modtype ?(update_summary=true) id info shape env = short_paths_module_type id info env.short_paths_additions; } and store_class id addr desc shape env = + Builtin_attributes.mark_alerts_used desc.cty_attributes; let clda = { clda_declaration = desc; clda_address = addr; @@ -2220,6 +2260,7 @@ and store_class id addr desc shape env = summary = Env_class(env.summary, id, desc) } and store_cltype id desc shape env = + Builtin_attributes.mark_alerts_used desc.clty_attributes; let cltda = { cltda_declaration = desc; cltda_shape = shape } in { env with cltypes = IdTbl.add id cltda env.cltypes; @@ -2259,7 +2300,7 @@ let components_of_functor_appl ~loc ~f_path ~f_comp ~arg env = (*???*) env Subst.identity p addr (Subst.Lazy.of_modtype mty) shape in - stamped_add f_comp.fcomp_cache arg comps; + stamped_path_add f_comp.fcomp_cache arg comps; comps (* Define forward functions *) @@ -2340,7 +2381,7 @@ let add_module_lazy ~update_summary id presence mty env = in add_module_declaration_lazy ~update_summary id presence md env -let add_local_type path info env = +let add_local_constraint path info env = { env with local_constraints = Path.Map.add path info env.local_constraints } @@ -2356,9 +2397,9 @@ let enter_value ?check name desc env = let env = store_value ?check id addr desc (Shape.leaf desc.val_uid) env in (id, env) -let enter_type ~scope name info env = +let enter_type ?(long_path = false) ~scope name info env = let id = Ident.create_scoped ~scope name in - let env = store_type ~check:true ~predef:false ~long_path:false + let env = store_type ~check:true ~predef:false ~long_path id info (Shape.leaf info.type_uid) env in (id, env) @@ -2451,8 +2492,6 @@ let enter_signature_and_shape ~scope ~parent_shape mod_shape sg env = enter_signature_and_shape ~scope ~parent_shape (Some mod_shape) sg env let add_value = add_value ?shape:None -let add_type = add_type ?shape:None -let add_extension = add_extension ?shape:None let add_class = add_class ?shape:None let add_cltype = add_cltype ?shape:None let add_modtype = add_modtype ?shape:None @@ -2646,29 +2685,19 @@ let open_signature else open_signature None root env (* Read a signature from a file *) -let read_signature modname filename = - let mda = read_pers_mod modname filename in +let read_signature u = + let mda = read_pers_mod u in let md = Subst.Lazy.force_module_decl mda.mda_declaration in match md.md_type with | Mty_signature sg -> sg | Mty_ident _ | Mty_functor _ | Mty_alias _ | Mty_for_hole -> assert false -let is_identchar_latin1 = function - | 'A'..'Z' | 'a'..'z' | '_' | '\192'..'\214' | '\216'..'\246' - | '\248'..'\255' | '\'' | '0'..'9' -> true - | _ -> false - let unit_name_of_filename fn = match Filename.extension fn with - | ".cmi" -> begin - let unit = - String.capitalize_ascii (Filename.remove_extension fn) - in - if Std.String.for_all is_identchar_latin1 unit then - Some unit - else - None - end + | ".cmi" -> + let modname = Unit_info.strict_modname_from_source fn in + if Unit_info.is_unit_name modname then Some modname + else None | _ -> None let persistent_structures_of_dir dir = @@ -2678,27 +2707,28 @@ let persistent_structures_of_dir dir = |> String.Set.of_seq (* Save a signature to a file *) -let save_signature_with_transform cmi_transform ~alerts sg modname filename = +let save_signature_with_transform cmi_transform ~alerts sg cmi_info = Btype.cleanup_abbrev (); Subst.reset_for_saving (); let sg = Subst.signature Make_local (Subst.for_saving Subst.identity) sg in let cmi = - Persistent_env.make_cmi !persistent_env modname sg alerts + Persistent_env.make_cmi !persistent_env + (Unit_info.Artifact.modname cmi_info) sg alerts |> cmi_transform in - let pm = save_sign_of_cmi - { Persistent_env.Persistent_signature.cmi; filename } in - Persistent_env.save_cmi !persistent_env - { Persistent_env.Persistent_signature.filename; cmi } pm; + let filename = Unit_info.Artifact.filename cmi_info in + let pers_sig = + Persistent_env.Persistent_signature.{ cmi; filename; visibility = Visible } + in + let pm = save_sign_of_cmi pers_sig in + Persistent_env.save_cmi !persistent_env pers_sig pm; cmi -let save_signature ~alerts sg modname filename = - save_signature_with_transform (fun cmi -> cmi) - ~alerts sg modname filename +let save_signature ~alerts sg cmi = + save_signature_with_transform (fun cmi -> cmi) ~alerts sg cmi -let save_signature_with_imports ~alerts sg modname filename imports = +let save_signature_with_imports ~alerts sg cmi imports = let with_imports cmi = { cmi with cmi_crcs = imports } in - save_signature_with_transform with_imports - ~alerts sg modname filename + save_signature_with_transform with_imports ~alerts sg cmi (* Make the initial environment *) let initial = @@ -2707,28 +2737,28 @@ let initial = (add_extension ~check:false ~rebind:false) empty -let add_type_long_path ~check id info env = - add_type ~check ~predef:false ~long_path:true id info env +let add_type_long_path ~check ?shape id info env = + add_type ~check ?shape ~predef:false ~long_path:true id info env -let add_type ~check id info env = - add_type ~check ~predef:false ~long_path:false id info env +let add_type ~check ?shape id info env = + add_type ~check ?shape ~predef:false ~long_path:false id info env (* Tracking usage *) let mark_module_used uid = - match Types.Uid.Tbl.find !module_declarations uid with + match Stamped_hashtable.find module_declarations uid with | mark -> mark () | exception Not_found -> () let mark_modtype_used _uid = () let mark_value_used uid = - match Types.Uid.Tbl.find !value_declarations uid with + match Stamped_hashtable.find value_declarations uid with | mark -> mark () | exception Not_found -> () let mark_type_used uid = - match Types.Uid.Tbl.find !type_declarations uid with + match Stamped_hashtable.find type_declarations uid with | mark -> mark () | exception Not_found -> () @@ -2737,25 +2767,25 @@ let mark_type_path_used env path = | decl -> mark_type_used decl.type_uid | exception Not_found -> () -let mark_constructor_used usage cd = - match Types.Uid.Tbl.find !used_constructors cd.cd_uid with +let mark_constructor_used usage uid = + match stamped_find used_constructors uid with | mark -> mark usage | exception Not_found -> () -let mark_extension_used usage ext = - match Types.Uid.Tbl.find !used_constructors ext.ext_uid with +let mark_extension_used usage uid = + match stamped_find used_constructors uid with | mark -> mark usage | exception Not_found -> () -let mark_label_used usage ld = - match Types.Uid.Tbl.find !used_labels ld.ld_uid with +let mark_label_used usage uid = + match stamped_find used_labels uid with | mark -> mark usage | exception Not_found -> () let mark_constructor_description_used usage env cstr = - let ty_path = Btype.cstr_type_path cstr in + let ty_path = cstr_res_type_path cstr in mark_type_path_used env ty_path; - match Types.Uid.Tbl.find !used_constructors cstr.cstr_uid with + match stamped_find used_constructors cstr.cstr_uid with | mark -> mark usage | exception Not_found -> () @@ -2766,30 +2796,30 @@ let mark_label_description_used usage env lbl = | _ -> assert false in mark_type_path_used env ty_path; - match Types.Uid.Tbl.find !used_labels lbl.lbl_uid with + match stamped_find used_labels lbl.lbl_uid with | mark -> mark usage | exception Not_found -> () let mark_class_used uid = - match Types.Uid.Tbl.find !type_declarations uid with + match stamped_find type_declarations uid with | mark -> mark () | exception Not_found -> () let mark_cltype_used uid = - match Types.Uid.Tbl.find !type_declarations uid with + match stamped_find type_declarations uid with | mark -> mark () | exception Not_found -> () let set_value_used_callback vd callback = - Types.Uid.Tbl.add !value_declarations vd.val_uid callback + stamped_uid_add value_declarations vd.val_uid callback let set_type_used_callback td callback = if Uid.for_actual_declaration td.type_uid then let old = - try Types.Uid.Tbl.find !type_declarations td.type_uid + try stamped_find type_declarations td.type_uid with Not_found -> ignore in - Types.Uid.Tbl.replace !type_declarations td.type_uid + Stamped_hashtable.replace type_declarations td.type_uid (fun () -> callback old) (* Lookup by name *) @@ -2800,9 +2830,10 @@ let may_lookup_error report_errors loc env err = let report_module_unbound ~errors ~loc env reason = match reason with - | Mod_unbound_illegal_recursion -> + | Mod_unbound_illegal_recursion { container; unbound } -> (* see #5965 *) - may_lookup_error errors loc env Illegal_reference_to_recursive_module + may_lookup_error errors loc env + (Illegal_reference_to_recursive_module { container; unbound }) let report_value_unbound ~errors ~loc env reason lid = match reason with @@ -2916,10 +2947,10 @@ let lookup_ident_module (type a) (load : a load) ~errors ~use ~loc s env = | Mod_persistent -> begin match load with | Don't_load -> - check_pers_mod ~loc s; + check_pers_mod ~allow_hidden:false ~loc s; path, (() : a) | Load -> begin - match find_pers_mod s with + match find_pers_mod ~allow_hidden:false s with | mda -> use_module ~use ~loc path mda; path, (mda : a) @@ -3011,7 +3042,8 @@ let rec lookup_module_components ~errors ~use ~loc lid env = !components_of_functor_appl' ~loc ~f_path ~f_comp ~arg env in Papply (f_path, arg), comps -and lookup_structure_components ~errors ~use ~loc lid env = +and lookup_structure_components ~errors ~use l env = + let { txt=lid; loc } = l in let path, comps = lookup_module_components ~errors ~use ~loc lid env in match get_components_res comps with | Ok (Structure_comps comps) -> path, comps @@ -3037,24 +3069,26 @@ and get_functor_components ~errors ~loc lid env comps = | Error (No_components_alias p) -> may_lookup_error errors loc env (Cannot_scrape_alias(lid, p)) -and lookup_all_args ~errors ~use ~loc lid0 env = +and lookup_all_args ~errors ~use lid0 env = let rec loop_lid_arg args = function | Lident _ | Ldot _ as f_lid -> (f_lid, args) | Lapply (f_lid, arg_lid) -> + let { txt = arg_lid; loc } = arg_lid in let arg_path, arg_md = lookup_module ~errors ~use ~loc arg_lid env in - loop_lid_arg ((f_lid,arg_path,arg_md.md_type)::args) f_lid + loop_lid_arg ((f_lid,arg_path,arg_md.md_type)::args) f_lid.txt in loop_lid_arg [] lid0 and lookup_apply ~errors ~use ~loc lid0 env = - let f0_lid, args0 = lookup_all_args ~errors ~use ~loc lid0 env in + let f0_lid, args0 = lookup_all_args ~errors ~use lid0 env in let args_for_errors = List.map (fun (_,p,mty) -> (p,mty)) args0 in let f0_path, f0_comp = lookup_module_components ~errors ~use ~loc f0_lid env in let check_one_apply ~errors ~loc ~f_lid ~f_comp ~arg_path ~arg_mty env = let f_comp, param_mty = + let { txt = f_lid; loc } = f_lid in get_functor_components ~errors ~loc f_lid env f_comp in check_functor_appl @@ -3101,10 +3135,10 @@ and lookup_module ~errors ~use ~loc lid env = Papply(path_f, path_arg), md and lookup_dot_module ~errors ~use ~loc l s env = - let p, comps = lookup_structure_components ~errors ~use ~loc l env in - match NameMap.find s comps.comp_modules with + let p, comps = lookup_structure_components ~errors ~use l env in + match NameMap.find s.txt comps.comp_modules with | mda -> - let path = Pdot(p, s) in + let path = Pdot(p, s.txt) in use_module ~use ~loc path mda; (path, mda) | exception Not_found -> @@ -3112,59 +3146,59 @@ and lookup_dot_module ~errors ~use ~loc l s env = let lookup_dot_value ~errors ~use ~loc l s env = let (path, comps) = - lookup_structure_components ~errors ~use ~loc l env + lookup_structure_components ~errors ~use l env in - match NameMap.find s comps.comp_values with + match NameMap.find s.txt comps.comp_values with | vda -> - let path = Pdot(path, s) in + let path = Pdot(path, s.txt) in use_value ~use ~loc path vda; (path, vda.vda_description) | exception Not_found -> may_lookup_error errors loc env (Unbound_value (Ldot(l, s), No_hint)) let lookup_dot_type ~errors ~use ~loc l s env = - let (p, comps) = lookup_structure_components ~errors ~use ~loc l env in - match NameMap.find s comps.comp_types with + let (p, comps) = lookup_structure_components ~errors ~use l env in + match NameMap.find s.txt comps.comp_types with | tda -> - let path = Pdot(p, s) in + let path = Pdot(p, s.txt) in use_type ~use ~loc path tda; (path, tda) | exception Not_found -> may_lookup_error errors loc env (Unbound_type (Ldot(l, s))) let lookup_dot_modtype ~errors ~use ~loc l s env = - let (p, comps) = lookup_structure_components ~errors ~use ~loc l env in - match NameMap.find s comps.comp_modtypes with + let (p, comps) = lookup_structure_components ~errors ~use l env in + match NameMap.find s.txt comps.comp_modtypes with | mta -> - let path = Pdot(p, s) in + let path = Pdot(p, s.txt) in use_modtype ~use ~loc path mta.mtda_declaration; (path, mta.mtda_declaration) | exception Not_found -> may_lookup_error errors loc env (Unbound_modtype (Ldot(l, s))) let lookup_dot_class ~errors ~use ~loc l s env = - let (p, comps) = lookup_structure_components ~errors ~use ~loc l env in - match NameMap.find s comps.comp_classes with + let (p, comps) = lookup_structure_components ~errors ~use l env in + match NameMap.find s.txt comps.comp_classes with | clda -> - let path = Pdot(p, s) in + let path = Pdot(p, s.txt) in use_class ~use ~loc path clda; (path, clda.clda_declaration) | exception Not_found -> may_lookup_error errors loc env (Unbound_class (Ldot(l, s))) let lookup_dot_cltype ~errors ~use ~loc l s env = - let (p, comps) = lookup_structure_components ~errors ~use ~loc l env in - match NameMap.find s comps.comp_cltypes with + let (p, comps) = lookup_structure_components ~errors ~use l env in + match NameMap.find s.txt comps.comp_cltypes with | cltda -> - let path = Pdot(p, s) in + let path = Pdot(p, s.txt) in use_cltype ~use ~loc path cltda.cltda_declaration; (path, cltda.cltda_declaration) | exception Not_found -> may_lookup_error errors loc env (Unbound_cltype (Ldot(l, s))) let lookup_all_dot_labels ~errors ~use ~loc usage l s env = - let (_, comps) = lookup_structure_components ~errors ~use ~loc l env in - match NameMap.find s comps.comp_labels with + let (_, comps) = lookup_structure_components ~errors ~use l env in + match NameMap.find s.txt comps.comp_labels with | [] | exception Not_found -> may_lookup_error errors loc env (Unbound_label (Ldot(l, s))) | lbls -> @@ -3176,13 +3210,14 @@ let lookup_all_dot_labels ~errors ~use ~loc usage l s env = let lookup_all_dot_constructors ~errors ~use ~loc usage l s env = match l with - | Longident.Lident "*predef*" -> + | { txt=Longident.Lident "*predef*"; _ } -> (* Hack to support compilation of default arguments *) + let { txt=s; loc } = s in lookup_all_ident_constructors ~errors ~use ~loc usage s initial | _ -> - let (_, comps) = lookup_structure_components ~errors ~use ~loc l env in - match NameMap.find s comps.comp_constrs with + let (_, comps) = lookup_structure_components ~errors ~use l env in + match NameMap.find s.txt comps.comp_constrs with | [] | exception Not_found -> may_lookup_error errors loc env (Unbound_constructor (Ldot(l, s))) | cstrs -> @@ -3197,7 +3232,7 @@ let lookup_all_dot_constructors ~errors ~use ~loc usage l s env = let lookup_module_path ~errors ~use ~loc ~load lid env : Path.t = match lid with | Lident s -> - if !Clflags.transparent_modules && not load then + if !Clflags.no_alias_deps && not load then fst (lookup_ident_module Don't_load ~errors ~use ~loc s env) else fst (lookup_ident_module Load ~errors ~use ~loc s env) @@ -3258,7 +3293,7 @@ let lookup_label ~errors ~use ~loc usage lid env = let lookup_all_labels_from_type ~use ~loc usage ty_path env = match find_type_descrs ty_path env with | exception Not_found -> [] - | Type_variant _ | Type_abstract | Type_open -> [] + | Type_variant _ | Type_abstract _ | Type_open -> [] | Type_record (lbls, _) -> List.map (fun lbl -> @@ -3280,7 +3315,7 @@ let lookup_constructor ~errors ~use ~loc usage lid env = let lookup_all_constructors_from_type ~use ~loc usage ty_path env = match find_type_descrs ty_path env with | exception Not_found -> [] - | Type_record _ | Type_abstract | Type_open -> [] + | Type_record _ | Type_abstract _ | Type_open -> [] | Type_variant (cstrs, _) -> List.map (fun cstr -> @@ -3422,9 +3457,9 @@ let bound_module name env = match IdTbl.find_name wrap_module ~mark:false name env.modules with | _ -> true | exception Not_found -> - if Current_unit_name.is name then false + if Current_unit.Name.is name then false else begin - match find_pers_mod name with + match find_pers_mod ~allow_hidden:false name with | _ -> true | exception Not_found -> false end @@ -3651,28 +3686,34 @@ let env_of_only_summary env_from_summary env = (* Error report *) -open Format +open Format_doc (* Forward declarations *) -let print_longident = - ref ((fun _ _ -> assert false) : formatter -> Longident.t -> unit) +let print_longident : Longident.t printer ref = ref (fun _ _ -> assert false) + +let print_path: Path.t printer ref = ref (fun _ _ -> assert false) +let pp_path ppf l = !print_path ppf l -let print_path = - ref ((fun _ _ -> assert false) : formatter -> Path.t -> unit) +module Style = Misc.Style -let spellcheck ppf extract env lid = +let quoted_longident = Style.as_inline_code Pprintast.Doc.longident +let quoted_constr = Style.as_inline_code Pprintast.Doc.constr + +let spellcheck extract env lid = let choices ~path name = Misc.spellcheck (extract path env) name in - match lid with - | Longident.Lapply _ -> () + match lid with + | Longident.Lapply _ -> None | Longident.Lident s -> - Misc.did_you_mean ppf (fun () -> choices ~path:None s) + Misc.did_you_mean (choices ~path:None s) | Longident.Ldot (r, s) -> - Misc.did_you_mean ppf (fun () -> choices ~path:(Some r) s) + let pp ppf s = + quoted_longident ppf (Longident.Ldot(r, Location.mknoloc s)) + in + Misc.did_you_mean ~pp (choices ~path:(Some r.txt) s.txt) -let spellcheck_name ppf extract env name = - Misc.did_you_mean ppf - (fun () -> Misc.spellcheck (extract env) name) +let spellcheck_name extract env name = + Misc.did_you_mean (Misc.spellcheck (extract env) name) let extract_values path env = fold_values (fun name _ _ acc -> name :: acc) path env [] @@ -3697,142 +3738,213 @@ let extract_instance_variables env = | Val_ivar _ -> name :: acc | _ -> acc) None env [] -let report_lookup_error _loc env ppf = function - | Unbound_value(lid, hint) -> begin - fprintf ppf "Unbound value %a" !print_longident lid; - spellcheck ppf extract_values env lid; - match hint with - | No_hint -> () - | Missing_rec def_loc -> - let (_, line, _) = - Location.get_pos_info def_loc.Location.loc_start - in - fprintf ppf - "@.@[@{Hint@}: If this is a recursive definition,@ %s %i@]" - "you should add the 'rec' keyword on line" - line - end +let report_lookup_error_doc loc env = function + | Unbound_value(lid, hint) -> + Location.aligned_error_hint ~loc + "@{Unbound value @}%a" quoted_longident lid + (spellcheck extract_values env lid) + ~sub:( + match hint with + | No_hint ->[] + | Missing_rec def_loc -> + let (_, line, _) = + Location.get_pos_info def_loc.Location.loc_start + in + [Location.msg + "@[@{Hint@}: If this is a recursive definition,@ \ + you should add the %a keyword on line %i@]" + Style.inline_code "rec" + line + ] + ) | Unbound_type lid -> - fprintf ppf "Unbound type constructor %a" !print_longident lid; - spellcheck ppf extract_types env lid; + Location.aligned_error_hint ~loc + "@{Unbound type constructor @}%a" + quoted_longident lid + (spellcheck extract_types env lid) | Unbound_module lid -> begin - fprintf ppf "Unbound module %a" !print_longident lid; - match find_modtype_by_name lid env with - | exception Not_found -> spellcheck ppf extract_modules env lid; + let main ppf = + fprintf ppf "@{Unbound module @}%a" quoted_longident lid in + match find_modtype_by_name lid env with + | exception Not_found -> + Location.aligned_error_hint ~loc "%t" main + (spellcheck extract_modules env lid) | _ -> - fprintf ppf - "@.@[@{Hint@}: There is a module type named %a, %s@]" - !print_longident lid - "but module types are not modules" + Location.errorf ~loc "%t" main + ~sub:[Location.msg + "@{Hint@}: There is a module type named %a,@ \ + but module types are not modules" + quoted_longident lid + ] end | Unbound_constructor lid -> - fprintf ppf "Unbound constructor %a" !print_longident lid; - spellcheck ppf extract_constructors env lid; + Location.aligned_error_hint ~loc + "@{Unbound constructor @}%a" + quoted_constr lid + (spellcheck extract_constructors env lid) | Unbound_label lid -> - fprintf ppf "Unbound record field %a" !print_longident lid; - spellcheck ppf extract_labels env lid; + Location.aligned_error_hint ~loc + "@{Unbound record field @}%a" + quoted_longident lid + (spellcheck extract_labels env lid) | Unbound_class lid -> begin - fprintf ppf "Unbound class %a" !print_longident lid; + let main ppf = + fprintf ppf "@{Unbound class @}%a" quoted_longident lid + in match find_cltype_by_name lid env with - | exception Not_found -> spellcheck ppf extract_classes env lid; + | exception Not_found -> + Location.aligned_error_hint ~loc "%t" main + (spellcheck extract_classes env lid) | _ -> - fprintf ppf - "@.@[@{Hint@}: There is a class type named %a, %s@]" - !print_longident lid - "but classes are not class types" + Location.errorf ~loc "%t" main + ~sub:[ + Location.msg + "@{Hint@}: There is a class type named %a,@ \ + but classes are not class types." + quoted_longident lid + ] end | Unbound_modtype lid -> begin - fprintf ppf "Unbound module type %a" !print_longident lid; + let main ppf = + fprintf ppf "@{Unbound module type @}%a" + quoted_longident lid in match find_module_by_name lid env with - | exception Not_found -> spellcheck ppf extract_modtypes env lid; + | exception Not_found -> + Location.aligned_error_hint ~loc "%t" main + (spellcheck extract_modtypes env lid) | _ -> - fprintf ppf - "@.@[@{Hint@}: There is a module named %a, %s@]" - !print_longident lid - "but modules are not module types" - end + Location.errorf ~loc "%t" main + ~sub:[ + Location.msg + "@{Hint@}: There is a module named %a,@ \ + but modules are not module types" + quoted_longident lid + ] + end | Unbound_cltype lid -> - fprintf ppf "Unbound class type %a" !print_longident lid; - spellcheck ppf extract_cltypes env lid; + Location.aligned_error_hint ~loc + "@{Unbound class type @}%a" quoted_longident lid + (spellcheck extract_cltypes env lid) | Unbound_instance_variable s -> - fprintf ppf "Unbound instance variable %s" s; - spellcheck_name ppf extract_instance_variables env s; + Location.aligned_error_hint ~loc + "@{Unbound instance variable @}%a" + Style.inline_code s + (spellcheck_name extract_instance_variables env s) | Not_an_instance_variable s -> - fprintf ppf "The value %s is not an instance variable" s; - spellcheck_name ppf extract_instance_variables env s; + Location.aligned_error_hint ~loc + "@{The value @}%a is not an instance variable" + Style.inline_code s + (spellcheck_name extract_instance_variables env s) | Masked_instance_variable lid -> - fprintf ppf - "The instance variable %a@ \ - cannot be accessed from the definition of another instance variable" - !print_longident lid + Location.errorf ~loc + "The instance variable %a@ cannot@ be@ accessed@ from@ the@ \ + definition@ of@ another instance variable" + quoted_longident lid | Masked_self_variable lid -> - fprintf ppf - "The self variable %a@ \ - cannot be accessed from the definition of an instance variable" - !print_longident lid + Location.errorf ~loc + "The self variable %a@ cannot@ be@ accessed@ \ + from@ the@ definition of an instance variable" + quoted_longident lid | Masked_ancestor_variable lid -> - fprintf ppf - "The ancestor variable %a@ \ - cannot be accessed from the definition of an instance variable" - !print_longident lid - | Illegal_reference_to_recursive_module -> - fprintf ppf "Illegal recursive module reference" + Location.errorf ~loc + "The ancestor variable %a@ cannot@ be@ accessed@ from@ \ + the definition of an instance variable" + quoted_longident lid + | Illegal_reference_to_recursive_module { container; unbound } -> + let container = Option.value ~default:"_" container in + let self_or_definition, self_or_unbound = + if String.equal container unbound + then dprintf "its own definition", dprintf "itself" + else + dprintf "the definition of the module %a" Style.inline_code container, + dprintf "the module type of %a" Style.inline_code unbound + in + Location.errorf ~loc + "@[This module type is recursive.@ \ + This use of the recursive module %a@ \ + within %t@ \ + makes the module type of %a depend on@ %t.@ \ + Such recursive definitions of module types are not allowed.@]" + Style.inline_code unbound + self_or_definition + Style.inline_code container + self_or_unbound + | Illegal_reference_to_recursive_class_type + { container; unbound; unbound_class_type; container_class_type } -> + let container = Option.value ~default:"_" container in + let self_or_unbound = + if String.equal container unbound + then dprintf "itself" + else dprintf "the module type of %a" Style.inline_code unbound + in + Location.errorf ~loc + "@[This class type is recursive.@ This use of the class type %a@ \ + from the recursive module %a@ within the definition of@ \ + the class type %a@ in the recursive module %a@ \ + makes the module type of %a@ depend on %t.@ \ + Such recursive definitions of@ class types within recursive modules@ \ + are not allowed.@]" + quoted_longident unbound_class_type + Style.inline_code unbound + Style.inline_code container_class_type + Style.inline_code container + Style.inline_code container + self_or_unbound | Structure_used_as_functor lid -> - fprintf ppf "@[The module %a is a structure, it cannot be applied@]" - !print_longident lid + Location.errorf ~loc + "The module %a is a structure, it cannot be applied" + quoted_longident lid | Abstract_used_as_functor lid -> - fprintf ppf "@[The module %a is abstract, it cannot be applied@]" - !print_longident lid + Location.errorf ~loc + "The module %a is abstract, it cannot be applied" + quoted_longident lid | Functor_used_as_structure lid -> - fprintf ppf "@[The module %a is a functor, \ - it cannot have any components@]" !print_longident lid + Location.errorf ~loc + "The module %a is a functor, it cannot have any components" + quoted_longident lid | Abstract_used_as_structure lid -> - fprintf ppf "@[The module %a is abstract, \ - it cannot have any components@]" !print_longident lid + Location.errorf ~loc + "The module %a is abstract, it cannot have any components" + quoted_longident lid | Generative_used_as_applicative lid -> - fprintf ppf "@[The functor %a is generative,@ it@ cannot@ be@ \ - applied@ in@ type@ expressions@]" !print_longident lid + Location.errorf ~loc + "The functor %a is generative,@ it@ cannot@ be@ \ + applied@ in@ type@ expressions" + quoted_longident lid | Cannot_scrape_alias(lid, p) -> let cause = - if Current_unit_name.is_path p then "is the current compilation unit" + if Current_unit.Name.is_path p then "is the current compilation unit" else "is missing" in - fprintf ppf + Location.errorf ~loc "The module %a is an alias for module %a, which %s" - !print_longident lid !print_path p cause + quoted_longident lid + (Style.as_inline_code pp_path) p cause -let report_error ppf = function - | Missing_module(_, path1, path2) -> - fprintf ppf "@[@["; +let report_error_doc = function + | Missing_module(loc, path1, path2) -> + let pp_path path1 path2 ppf = if Path.same path1 path2 then - fprintf ppf "Internal path@ %s@ is dangling." (Path.name path1) + fprintf ppf "Internal path@ %a@ is dangling." + Style.inline_code (Path.name path1) else - fprintf ppf "Internal path@ %s@ expands to@ %s@ which is dangling." - (Path.name path1) (Path.name path2); - fprintf ppf "@]@ @[%s@ %s@ %s.@]@]" - "The compiled interface for module" (Ident.name (Path.head path2)) - "was not found" - | Illegal_value_name(_loc, name) -> - fprintf ppf "'%s' is not a valid value identifier." - name - | Lookup_error(loc, t, err) -> report_lookup_error loc t ppf err + fprintf ppf "Internal path@ %a@ expands to@ %a@ which is dangling." + Style.inline_code (Path.name path1) + Style.inline_code (Path.name path2); + in + Location.errorf ~loc + "%t@ @[The compiled interface for module@ %a@ was not found.@]" + (pp_path path1 path2) + Style.inline_code (Ident.name (Path.head path2)) + | Illegal_value_name(loc, name) -> + Location.errorf ~loc "%a is not a valid value identifier." + Style.inline_code name + | Lookup_error(loc, t, err) -> report_lookup_error_doc loc t err let () = Location.register_error_of_exn (function - | Error err -> - let loc = - match err with - | Missing_module (loc, _, _) - | Illegal_value_name (loc, _) - | Lookup_error(loc, _, _) -> loc - in - let error_of_printer = - if loc = Location.none - then Location.error_of_printer_file - else Location.error_of_printer ~loc ?sub:None - in - Some (error_of_printer report_error err) + | Error err -> Some (report_error_doc err) | _ -> None ) @@ -3841,7 +3953,7 @@ let () = let check_state_consistency () = let missing modname = - match Load_path.find_uncap (modname ^ ".cmi") with + match Load_path.find_normalized (modname ^ ".cmi") with | _ -> false | exception Not_found -> true and found _modname filename ps_name _md = @@ -3876,7 +3988,7 @@ let short_paths_type_desc decl = if ty.level <> Btype.generic_level then Fresh else begin match decl.type_private, decl.type_kind with - | Private, Type_abstract -> Fresh + | Private, Type_abstract _ -> Fresh | _, _ -> begin let params = List.map get_desc decl.type_params in match ty with @@ -3919,13 +4031,13 @@ let short_paths_class_type_desc clty = | ns -> Subst(path, ns) end -let short_paths_module_type_desc mty = +let short_paths_module_type_desc (mty : Subst.Lazy.modtype option) = let open Short_paths.Desc.Module_type in match mty with - | None | Some Mty_for_hole -> Fresh - | Some (Mty_ident path) -> Alias path - | Some (Mty_signature _ | Mty_functor _) -> Fresh - | Some (Mty_alias _) -> assert false + | None | Some MtyL_for_hole -> Fresh + | Some (MtyL_ident path) -> Alias path + | Some (MtyL_signature _ | MtyL_functor _) -> Fresh + | Some (MtyL_alias _) -> assert false let deprecated_of_alerts alerts = if @@ -3942,26 +4054,26 @@ let deprecated_of_alerts alerts = let deprecated_of_attributes attrs = deprecated_of_alerts (Builtin_attributes.alerts_of_attrs attrs) -let rec short_paths_module_desc env mpath mty comp = +let rec short_paths_module_desc env mpath (mty : Subst.Lazy.modtype) comp = let open Short_paths.Desc.Module in match mty with - | Mty_alias path -> Alias path - | Mty_ident path -> begin - match find_modtype_expansion path env with + | MtyL_alias path -> Alias path + | MtyL_ident path -> begin + match find_modtype_expansion_lazy path env with | exception Not_found -> Fresh (Signature (lazy [])) | mty -> short_paths_module_desc env mpath mty comp end - | Mty_signature _ -> + | MtyL_signature _ -> let components = lazy (short_paths_module_components_desc env mpath comp) in Fresh (Signature components) - | Mty_functor _ -> + | MtyL_functor _ -> let apply path = short_paths_functor_components_desc env mpath comp path in Fresh (Functor apply) - | Mty_for_hole -> Fresh (Signature (lazy [])) + | MtyL_for_hole -> Fresh (Signature (lazy [])) and short_paths_module_components_desc env mpath comp = match get_components comp with @@ -3986,19 +4098,17 @@ and short_paths_module_components_desc env mpath comp = in let comps = String.Map.fold (fun name mtda acc -> - let mtd = Subst.Lazy.force_modtype_decl mtda.mtda_declaration in - let desc = short_paths_module_type_desc mtd.mtd_type in - let depr = deprecated_of_attributes mtd.mtd_attributes in + let desc = short_paths_module_type_desc mtda.mtda_declaration.mtdl_type in + let depr = deprecated_of_attributes mtda.mtda_declaration.mtdl_attributes in let item = Short_paths.Desc.Module.Module_type(name, desc, depr) in item :: acc ) c.comp_modtypes comps in let comps = String.Map.fold (fun name { mda_declaration; mda_components; _ } acc -> - let mty = Subst.Lazy.force_module_decl mda_declaration in let mpath = Pdot(mpath, name) in let desc = - short_paths_module_desc env mpath mty.md_type mda_components + short_paths_module_desc env mpath mda_declaration.mdl_type mda_components in let depr = deprecated_of_alerts mda_components.alerts in let item = Short_paths.Desc.Module.Module(name, desc, depr) in @@ -4025,9 +4135,10 @@ and short_paths_functor_components_desc env mpath comp path = Subst.modtype (Rescope (Path.scope (Papply (mpath, path)))) subst f.fcomp_res in - stamped_add f.fcomp_subst_cache path mty; + stamped_path_add f.fcomp_subst_cache path mty; mty in + let mty = Subst.Lazy.of_modtype mty in let loc = Location.(in_file !input_name) in let comps = components_of_functor_appl ~loc ~f_comp:f env ~f_path:mpath ~arg:path @@ -4050,14 +4161,12 @@ let short_paths_additions_desc env additions = let depr = deprecated_of_attributes clty.clty_attributes in Short_paths.Desc.Class_type(id, desc, source, depr) :: acc | Module_type(id, mtd) -> - let desc = short_paths_module_type_desc mtd.mtd_type in + let desc = short_paths_module_type_desc mtd.mtdl_type in let source = Short_paths.Desc.Local in - let depr = deprecated_of_attributes mtd.mtd_attributes in + let depr = deprecated_of_attributes mtd.mtdl_attributes in Short_paths.Desc.Module_type(id, desc, source, depr) :: acc | Module(id, md, comps) -> - let desc = - short_paths_module_desc env (Pident id) md.md_type comps - in + let desc = short_paths_module_desc env (Pident id) md.mdl_type comps in let source = Short_paths.Desc.Local in let depr = deprecated_of_alerts comps.alerts in Short_paths.Desc.Module(id, desc, source, depr) :: acc @@ -4083,12 +4192,12 @@ let short_paths_additions_desc env additions = decls acc | Module_type_open(root, decls) -> String.Map.fold - (fun name mtd acc -> + (fun name (mtd : Subst.Lazy.modtype_declaration) acc -> let id = Ident.create_local name in let path = Pdot(root, name) in let desc = Short_paths.Desc.Module_type.Alias path in let source = Short_paths.Desc.Open in - let depr = deprecated_of_attributes mtd.mtd_attributes in + let depr = deprecated_of_attributes mtd.mtdl_attributes in Short_paths.Desc.Module_type(id, desc, source, depr) :: acc) decls acc | Module_open(root, decls) -> @@ -4135,3 +4244,18 @@ let short_paths env = let cleanup_functor_caches ~stamp = Stamped_hashtable.backtrack !stamped_changelog ~stamp + +let cleanup_usage_tables ~stamp = + Stamped_hashtable.backtrack value_declarations_changelog ~stamp; + Stamped_hashtable.backtrack type_declarations_changelog ~stamp; + Stamped_hashtable.backtrack module_declarations_changelog ~stamp; + Stamped_hashtable.backtrack used_constructors_changelog ~stamp; + Stamped_hashtable.backtrack used_labels_changelog ~stamp + +let () = + Location.register_error_of_exn + (function + | Error err -> Some (report_error_doc err) + | _ -> + None + ) diff --git a/ocamlmerlin_mlx/ocaml/typing/env.mli b/ocamlmerlin_mlx/ocaml/typing/env.mli index f8c95da..5948c22 100644 --- a/ocamlmerlin_mlx/ocaml/typing/env.mli +++ b/ocamlmerlin_mlx/ocaml/typing/env.mli @@ -16,12 +16,9 @@ (* Environment handling *) open Types +open Data_types open Misc -val register_uid : Uid.t -> Location.t -> unit - -val get_uid_to_loc_tbl : unit -> Location.t Types.Uid.Tbl.t - type value_unbound_reason = | Val_unbound_instance_variable | Val_unbound_self @@ -29,7 +26,8 @@ type value_unbound_reason = | Val_unbound_ghost_recursive of Location.t type module_unbound_reason = - | Mod_unbound_illegal_recursion + | Mod_unbound_illegal_recursion of + { container : string option; unbound: string } type summary = Env_empty @@ -60,6 +58,9 @@ val empty: t val initial: t val diff: t -> t -> Ident.t list +(* approximation to the preimage equivalence class of [find_type] *) +val same_type_declarations: t -> t -> bool + type type_descr_kind = (label_description, constructor_description) type_kind @@ -146,14 +147,14 @@ val mark_type_used: Uid.t -> unit type constructor_usage = Positive | Pattern | Exported_private | Exported val mark_constructor_used: - constructor_usage -> constructor_declaration -> unit + constructor_usage -> Uid.t -> unit val mark_extension_used: - constructor_usage -> extension_constructor -> unit + constructor_usage -> Uid.t -> unit type label_usage = Projection | Mutation | Construct | Exported_private | Exported val mark_label_used: - label_usage -> label_declaration -> unit + label_usage -> Uid.t -> unit (* Lookup by long identifiers *) @@ -182,7 +183,14 @@ type lookup_error = | Functor_used_as_structure of Longident.t | Abstract_used_as_structure of Longident.t | Generative_used_as_applicative of Longident.t - | Illegal_reference_to_recursive_module + | Illegal_reference_to_recursive_module of + { container : string option; unbound : string } + | Illegal_reference_to_recursive_class_type of + { container : string option; + unbound : string; + unbound_class_type : Longident.t; + container_class_type : string + } | Cannot_scrape_alias of Longident.t * Path.t val lookup_error: Location.t -> t -> lookup_error -> 'a @@ -297,10 +305,13 @@ val make_copy_of_types: t -> (t -> t) val add_value: ?check:(string -> Warnings.t) -> Ident.t -> value_description -> t -> t -val add_type: check:bool -> Ident.t -> type_declaration -> t -> t -val add_type_long_path: check:bool -> Ident.t -> type_declaration -> t -> t +val add_type: + check:bool -> ?shape:Shape.t -> Ident.t -> type_declaration -> t -> t +val add_type_long_path: + check:bool -> ?shape:Shape.t -> Ident.t -> type_declaration -> t -> t val add_extension: - check:bool -> rebind:bool -> Ident.t -> extension_constructor -> t -> t + check:bool -> ?shape:Shape.t -> rebind:bool -> Ident.t -> + extension_constructor -> t -> t val add_module: ?arg:bool -> ?shape:Shape.t -> Ident.t -> module_presence -> module_type -> t -> t val add_module_lazy: update_summary:bool -> @@ -314,7 +325,7 @@ val add_modtype_lazy: update_summary:bool -> Ident.t -> Subst.Lazy.modtype_declaration -> t -> t val add_class: Ident.t -> class_declaration -> t -> t val add_cltype: Ident.t -> class_type_declaration -> t -> t -val add_local_type: Path.t -> type_declaration -> t -> t +val add_local_constraint: Path.t -> type_declaration -> t -> t (* Insertion of persistent signatures *) @@ -326,7 +337,7 @@ val add_local_type: Path.t -> type_declaration -> t -> t contents of the module is accessed. *) val add_persistent_structure : Ident.t -> t -> t -(* Returns the set of persistent structures found in the given + (* Returns the set of persistent structures found in the given directory. *) val persistent_structures_of_dir : Load_path.Dir.t -> Misc.String.Set.t @@ -357,7 +368,9 @@ val remove_last_open: Path.t -> t -> t option val enter_value: ?check:(string -> Warnings.t) -> string -> value_description -> t -> Ident.t * t -val enter_type: scope:int -> string -> type_declaration -> t -> Ident.t * t +val enter_type: + ?long_path:bool -> scope:int -> + string -> type_declaration -> t -> Ident.t * t val enter_extension: scope:int -> rebind:bool -> string -> extension_constructor -> t -> Ident.t * t @@ -394,19 +407,20 @@ val reset_cache: unit -> unit (* To be called before each toplevel phrase. *) val reset_cache_toplevel: unit -> unit -(* Remember the name of the current compilation unit. *) -val set_unit_name: string -> unit -val get_unit_name: unit -> string +(* Remember the current compilation unit. *) +val set_current_unit: Unit_info.t -> unit +val get_current_unit : unit -> Unit_info.t option +val get_current_unit_name: unit -> string (* Read, save a signature to/from a file *) -val read_signature: modname -> filepath -> signature +val read_signature: Unit_info.Artifact.t -> signature (* Arguments: module name, file name. Results: signature. *) val save_signature: - alerts:alerts -> signature -> modname -> filepath + alerts:alerts -> Types.signature -> Unit_info.Artifact.t -> Cmi_format.cmi_infos (* Arguments: signature, module name, file name. *) val save_signature_with_imports: - alerts:alerts -> signature -> modname -> filepath -> crcs + alerts:alerts -> signature -> Unit_info.Artifact.t -> crcs -> Cmi_format.cmi_infos (* Arguments: signature, module name, file name, imported units with their CRCs. *) @@ -453,12 +467,6 @@ type error = exception Error of error -open Format - -val report_error: formatter -> error -> unit - -val report_lookup_error: Location.t -> t -> formatter -> lookup_error -> unit - val in_signature: bool -> t -> t val is_in_signature: t -> bool @@ -488,9 +496,9 @@ val strengthen: (* 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. *) -val print_longident: (Format.formatter -> Longident.t -> unit) ref +val print_longident: Longident.t Format_doc.printer ref (* Forward declaration to break mutual recursion with Printtyp. *) -val print_path: (Format.formatter -> Path.t -> unit) ref +val print_path: Path.t Format_doc.printer ref (* Forward declaration to break mutual recursion with Printtyp *) @@ -547,3 +555,4 @@ val with_cmis : (unit -> 'a) -> 'a val add_merlin_extension_module: Ident.t -> module_type -> t -> t val cleanup_functor_caches : stamp:int -> unit +val cleanup_usage_tables : stamp:int -> unit diff --git a/ocamlmerlin_mlx/ocaml/typing/envaux.ml b/ocamlmerlin_mlx/ocaml/typing/envaux.ml index a0bbbc2..df75c5d 100644 --- a/ocamlmerlin_mlx/ocaml/typing/envaux.ml +++ b/ocamlmerlin_mlx/ocaml/typing/envaux.ml @@ -77,7 +77,7 @@ let rec env_from_summary sum subst = | Env_constraints(s, map) -> Path.Map.fold (fun path info -> - Env.add_local_type (Subst.type_path subst path) + Env.add_local_constraint (Subst.type_path subst path) (Subst.type_declaration subst info)) map (env_from_summary s subst) | Env_copy_types s -> @@ -101,15 +101,19 @@ let env_of_only_summary env = (* Error report *) -open Format +open Format_doc +module Style = Misc.Style -let report_error ppf = function +let report_error_doc ppf = function | Module_not_found p -> - fprintf ppf "@[Cannot find module %a@].@." Printtyp.path p + fprintf ppf "@[Cannot find module %a@].@." + (Style.as_inline_code Printtyp.Doc.path) p let () = Location.register_error_of_exn (function - | Error err -> Some (Location.error_of_printer_file report_error err) + | Error err -> Some (Location.error_of_printer_file report_error_doc err) | _ -> None ) + +let report_error = Format_doc.compat report_error_doc diff --git a/ocamlmerlin_mlx/ocaml/typing/envaux.mli b/ocamlmerlin_mlx/ocaml/typing/envaux.mli index 2869890..5fbb841 100644 --- a/ocamlmerlin_mlx/ocaml/typing/envaux.mli +++ b/ocamlmerlin_mlx/ocaml/typing/envaux.mli @@ -14,8 +14,6 @@ (* *) (**************************************************************************) -open Format - (* Convert environment summaries to environments *) val env_from_summary : Env.summary -> Subst.t -> Env.t @@ -33,4 +31,5 @@ type error = exception Error of error -val report_error: formatter -> error -> unit +val report_error: error Format_doc.format_printer +val report_error_doc: error Format_doc.printer diff --git a/ocamlmerlin_mlx/ocaml/typing/errortrace.ml b/ocamlmerlin_mlx/ocaml/typing/errortrace.ml index 407b343..da47041 100644 --- a/ocamlmerlin_mlx/ocaml/typing/errortrace.ml +++ b/ocamlmerlin_mlx/ocaml/typing/errortrace.ml @@ -16,7 +16,7 @@ (**************************************************************************) open Types -open Format +open Format_doc type position = First | Second @@ -98,14 +98,22 @@ type 'variety obj = (* Unification *) | Self_cannot_be_closed : unification obj +type first_class_module = + | Package_cannot_scrape of Path.t + | Package_inclusion of Format_doc.doc + | Package_coercion of Format_doc.doc + type ('a, 'variety) elt = (* Common *) | Diff : 'a diff -> ('a, _) elt | Variant : 'variety variant -> ('a, 'variety) elt | Obj : 'variety obj -> ('a, 'variety) elt | Escape : 'a escape -> ('a, _) elt + | Function_label_mismatch of Asttypes.arg_label diff + | Tuple_label_mismatch of string option diff | Incompatible_fields : { name:string; diff: type_expr diff } -> ('a, _) elt (* Could move [Incompatible_fields] into [obj] *) + | First_class_module: first_class_module -> ('a,_) elt (* Unification & Moregen; included in Equality for simplicity *) | Rec_occur : type_expr * type_expr -> ('a, _) elt @@ -125,7 +133,9 @@ let map_elt (type variety) f : ('a, variety) elt -> ('b, variety) elt = function Escape { kind = Equation (f x); context } | Escape {kind = (Univ _ | Self | Constructor _ | Module_type _ | Constraint); _} - | Variant _ | Obj _ | Incompatible_fields _ | Rec_occur (_, _) as x -> x + | Variant _ | Obj _ | Function_label_mismatch _ | Tuple_label_mismatch _ + | Incompatible_fields _ + | Rec_occur (_, _) | First_class_module _ as x -> x let map f t = List.map (map_elt f) t diff --git a/ocamlmerlin_mlx/ocaml/typing/errortrace.mli b/ocamlmerlin_mlx/ocaml/typing/errortrace.mli index f3cfe48..5d0a95e 100644 --- a/ocamlmerlin_mlx/ocaml/typing/errortrace.mli +++ b/ocamlmerlin_mlx/ocaml/typing/errortrace.mli @@ -20,7 +20,7 @@ open Types type position = First | Second val swap_position : position -> position -val print_pos : Format.formatter -> position -> unit +val print_pos : position Format_doc.printer type expanded_type = { ty: type_expr; expanded: type_expr } @@ -84,13 +84,21 @@ type 'variety obj = (* Unification *) | Self_cannot_be_closed : unification obj +type first_class_module = + | Package_cannot_scrape of Path.t + | Package_inclusion of Format_doc.doc + | Package_coercion of Format_doc.doc + type ('a, 'variety) elt = (* Common *) | Diff : 'a diff -> ('a, _) elt | Variant : 'variety variant -> ('a, 'variety) elt | Obj : 'variety obj -> ('a, 'variety) elt | Escape : 'a escape -> ('a, _) elt + | Function_label_mismatch of Asttypes.arg_label diff + | Tuple_label_mismatch of string option diff | Incompatible_fields : { name:string; diff: type_expr diff } -> ('a, _) elt + | First_class_module: first_class_module -> ('a,_) elt (* Unification & Moregen; included in Equality for simplicity *) | Rec_occur : type_expr * type_expr -> ('a, _) elt diff --git a/ocamlmerlin_mlx/ocaml/typing/errortrace_report.ml b/ocamlmerlin_mlx/ocaml/typing/errortrace_report.ml new file mode 100644 index 0000000..18f233f --- /dev/null +++ b/ocamlmerlin_mlx/ocaml/typing/errortrace_report.ml @@ -0,0 +1,605 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Florian Angeletti, projet Cambium, INRIA Paris *) +(* *) +(* Copyright 2024 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(* Trace-specific printing *) + +(* A configuration type that controls which trace we print. This could be + exposed, but we instead expose three separate + [{unification,equality,moregen}] functions. This also lets us + give the unification case an extra optional argument without adding it to the + equality and moregen cases. *) +type 'variety trace_format = + | Unification : Errortrace.unification trace_format + | Equality : Errortrace.comparison trace_format + | Moregen : Errortrace.comparison trace_format + +let incompatibility_phrase (type variety) : variety trace_format -> string = + function + | Unification -> "is not compatible with type" + | Equality -> "is not equal to type" + | Moregen -> "is not compatible with type" + +(* Print a unification error *) +open Out_type +open Format_doc +module Fmt = Format_doc +module Style = Misc.Style + +type 'a diff = 'a Out_type.diff = Same of 'a | Diff of 'a * 'a + +let trees_of_trace mode = + List.map (Errortrace.map_diff (trees_of_type_expansion mode)) + +let rec trace fst txt ppf = function + | {Errortrace.got; expected} :: rem -> + if not fst then fprintf ppf "@,"; + fprintf ppf "@[Type@;<1 2>%a@ %s@;<1 2>%a@]%a" + pp_type_expansion got txt pp_type_expansion expected + (trace false txt) rem + | _ -> () + +type printing_status = + | Discard + | Keep + | Optional_refinement + (** An [Optional_refinement] printing status is attributed to trace + elements that are focusing on a new subpart of a structural type. + Since the whole type should have been printed earlier in the trace, + we only print those elements if they are the last printed element + of a trace, and there is no explicit explanation for the + type error. + *) + +let diff_printing_status Errortrace.{ got = {ty = t1; expanded = t1'}; + expected = {ty = t2; expanded = t2'} } = + if Btype.is_constr_row ~allow_ident:true t1' + || Btype.is_constr_row ~allow_ident:true t2' + then Discard + else if same_path t1 t1' && same_path t2 t2' then Optional_refinement + else Keep + +let printing_status = function + | Errortrace.Diff d -> diff_printing_status d + | Errortrace.Escape {kind = Constraint} -> Keep + | _ -> Keep + +(** Flatten the trace and remove elements that are always discarded + during printing *) + +(* Takes [printing_status] to change behavior for [Subtype] *) +let prepare_any_trace printing_status tr = + let clean_trace x l = match printing_status x with + | Keep -> x :: l + | Optional_refinement when l = [] -> [x] + | Optional_refinement | Discard -> l + in + match tr with + | [] -> [] + | elt :: rem -> elt :: List.fold_right clean_trace rem [] + +let prepare_trace f tr = + prepare_any_trace printing_status (Errortrace.map f tr) + +(** Keep elements that are [Diff _ ] and split the the last element if it is + optionally elidable, require a prepared trace *) +let rec filter_trace = function + | [] -> [], None + | [Errortrace.Diff d as elt] + when printing_status elt = Optional_refinement -> [], Some d + | Errortrace.Diff d :: rem -> + let filtered, last = filter_trace rem in + d :: filtered, last + | _ :: rem -> filter_trace rem + +let may_prepare_expansion compact (Errortrace.{ty; expanded} as ty_exp) = + match Types.get_desc expanded with + Tvariant _ | Tobject _ when compact -> + Variable_names.reserve ty; Errortrace.{ty; expanded = ty} + | _ -> prepare_expansion ty_exp + +let print_path p = + Fmt.dprintf "%a" !Oprint.out_ident (namespaced_tree_of_path Type p) + +let print_tag ppf s = Style.inline_code ppf ("`" ^ s) + +let print_tags ppf tags = + Fmt.(pp_print_list ~pp_sep:comma) print_tag ppf tags + +let is_unit env ty = + match Types.get_desc (Ctype.expand_head env ty) with + | Tconstr (p, _, _) -> Path.same p Predef.path_unit + | _ -> false + +let unifiable env ty1 ty2 = + let snap = Btype.snapshot () in + let res = + try Ctype.unify env ty1 ty2; true + with Ctype.Unify _ -> false + in + Btype.backtrack snap; + res + +let explanation_diff env t3 t4 = + match Types.get_desc t3, Types.get_desc t4 with + | Tarrow (_, ty1, ty2, _), _ + when is_unit env ty1 && unifiable env ty2 t4 -> + Some (doc_printf + "@,@[@{Hint@}: Did you forget to provide %a as argument?@]" + Style.inline_code "()" + ) + | _, Tarrow (_, ty1, ty2, _) + when is_unit env ty1 && unifiable env t3 ty2 -> + Some (doc_printf + "@,@[@{Hint@}: Did you forget to wrap the expression using \ + %a?@]" + Style.inline_code "fun () ->" + ) + | _ -> + None + +let explain_fixed_row_case = function + | Errortrace.Cannot_be_closed -> doc_printf "it cannot be closed" + | Errortrace.Cannot_add_tags tags -> + doc_printf "it may not allow the tag(s) %a" + print_tags tags + +let pp_path ppf p = + Style.as_inline_code Printtyp.Doc.path ppf p + +let explain_fixed_row pos expl = match expl with + | Types.Fixed_private -> + doc_printf "The %a variant type is private" Errortrace.print_pos pos + | Types.Univar x -> + Variable_names.reserve x; + doc_printf "The %a variant type is bound to the universal type variable %a" + Errortrace.print_pos pos + (Style.as_inline_code type_expr_with_reserved_names) x + | Types.Reified p -> + doc_printf "The %a variant type is bound to %a" + Errortrace.print_pos pos + (Style.as_inline_code + (fun ppf p -> + Internal_names.add p; + print_path p ppf)) + p + | Types.Rigid -> Format_doc.Doc.empty + +let explain_variant (type variety) : variety Errortrace.variant -> _ = function + (* Common *) + | Errortrace.Incompatible_types_for s -> + Some(doc_printf "@,Types for tag %a are incompatible" + print_tag s + ) + (* Unification *) + | Errortrace.No_intersection -> + Some(doc_printf "@,These two variant types have no intersection") + | Errortrace.No_tags(pos,fields) -> Some( + doc_printf + "@,@[The %a variant type does not allow tag(s)@ @[%a@]@]" + Errortrace.print_pos pos + print_tags (List.map fst fields) + ) + | Errortrace.Fixed_row (pos, + k, + (Univar _ | Reified _ | Fixed_private as e)) -> + Some ( + doc_printf "@,@[%a,@ %a@]" pp_doc (explain_fixed_row pos e) + pp_doc (explain_fixed_row_case k) + ) + | Errortrace.Fixed_row (_,_, Rigid) -> + (* this case never happens *) + None + (* Equality & Moregen *) + | Errortrace.Presence_not_guaranteed_for (pos, s) -> Some( + doc_printf + "@,@[The tag %a is guaranteed to be present in the %a variant type,\ + @ but not in the %a@]" + print_tag s + Errortrace.print_pos (Errortrace.swap_position pos) + Errortrace.print_pos pos + ) + | Errortrace.Openness pos -> + Some(doc_printf "@,The %a variant type is open and the %a is not" + Errortrace.print_pos pos + Errortrace.print_pos (Errortrace.swap_position pos)) + +let explain_escape pre = function + | Errortrace.Univ u -> + Variable_names.reserve u; + Some( + doc_printf "%a@,The universal variable %a would escape its scope" + pp_doc pre + (Style.as_inline_code type_expr_with_reserved_names) u + ) + | Errortrace.Constructor p -> Some( + doc_printf + "%a@,@[The type constructor@;<1 2>%a@ would escape its scope@]" + pp_doc pre pp_path p + ) + | Errortrace.Module_type p -> Some( + doc_printf + "%a@,@[The module type@;<1 2>%a@ would escape its scope@]" + pp_doc pre pp_path p + ) + | Errortrace.Equation Errortrace.{ty = _; expanded = t} -> + Variable_names.reserve t; + Some( + doc_printf "%a@ @[This instance of %a is ambiguous:@ %s@]" + pp_doc pre + (Style.as_inline_code type_expr_with_reserved_names) t + "it would escape the scope of its equation" + ) + | Errortrace.Self -> + Some (doc_printf "%a@,Self type cannot escape its class" pp_doc pre) + | Errortrace.Constraint -> + None + +let explain_object (type variety) : variety Errortrace.obj -> _ = function + | Errortrace.Missing_field (pos,f) -> Some( + doc_printf "@,@[The %a object type has no method %a@]" + Errortrace.print_pos pos Style.inline_code f + ) + | Errortrace.Abstract_row pos -> Some( + doc_printf + "@,@[The %a object type has an abstract row, it cannot be closed@]" + Errortrace.print_pos pos + ) + | Errortrace.Self_cannot_be_closed -> + Some (doc_printf + "@,Self type cannot be unified with a closed object type" + ) + +let explain_incompatible_fields name (diff: Types.type_expr Errortrace.diff) = + Variable_names.reserve diff.got; + Variable_names.reserve diff.expected; + doc_printf "@,@[The method %a has type@ %a,@ \ + but the expected method type was@ %a@]" + Style.inline_code name + (Style.as_inline_code type_expr_with_reserved_names) diff.got + (Style.as_inline_code type_expr_with_reserved_names) diff.expected + + +let explain_label_mismatch ~missing_label_msg {Errortrace.got;expected} = + let quoted_label ppf l = Style.inline_code ppf (Asttypes.string_of_label l) in + match got, expected with + | Asttypes.Nolabel, Asttypes.(Labelled _ | Optional _ ) -> + doc_printf "@,@[A label@ %a@ was expected@]" + quoted_label expected + | Asttypes.(Labelled _|Optional _), Asttypes.Nolabel -> + doc_printf missing_label_msg + quoted_label got + | Asttypes.Labelled g, Asttypes.Optional e when g = e -> + doc_printf + "@,@[The label@ %a@ was expected to be optional@]" + quoted_label got + | Asttypes.Optional g, Asttypes.Labelled e when g = e -> + doc_printf + "@,@[The label@ %a@ was expected to not be optional@]" + quoted_label got + | Asttypes.(Labelled _ | Optional _), Asttypes.(Labelled _ | Optional _) -> + doc_printf "@,@[Labels %a@ and@ %a do not match@]" + quoted_label got + quoted_label expected + | Asttypes.Nolabel, Asttypes.Nolabel -> + (* Two empty labels cannot be mismatched*) + assert false + + +let explain_first_class_module = function + | Errortrace.Package_cannot_scrape p -> Some( + doc_printf "@,@[The module alias %a could not be expanded@]" + pp_path p + ) + | Errortrace.Package_inclusion pr -> + Some(doc_printf "@,@[%a@]" Fmt.pp_doc pr) + | Errortrace.Package_coercion pr -> + Some(doc_printf "@,@[%a@]" Fmt.pp_doc pr) + +let explanation (type variety) intro prev env + : (Errortrace.expanded_type, variety) Errortrace.elt -> _ = function + | Errortrace.Diff {got; expected} -> + explanation_diff env got.expanded expected.expanded + | Errortrace.Escape {kind; context} -> + let pre = + match context, kind, prev with + | Some ctx, _, _ -> + Variable_names.reserve ctx; + doc_printf "@[%a@;<1 2>%a@]" pp_doc intro + (Style.as_inline_code type_expr_with_reserved_names) ctx + | None, Univ _, Some(Errortrace.Incompatible_fields {name; diff}) -> + explain_incompatible_fields name diff + | _ -> Format_doc.Doc.empty + in + explain_escape pre kind + | Errortrace.Incompatible_fields { name; diff} -> + Some(explain_incompatible_fields name diff) + | Errortrace.Function_label_mismatch diff -> + let missing_label_msg = + format_of_string + "@,@[The first argument is labeled@ %a,@ \ + but an unlabeled argument was expected@]" + in + Some(explain_label_mismatch ~missing_label_msg diff) + | Errortrace.Tuple_label_mismatch diff -> + let ast_label = function + | None -> Asttypes.Nolabel + | Some x -> Asttypes.Labelled x + in + let diff = Errortrace.map_diff ast_label diff in + let missing_label_msg = + format_of_string + "@,@[The first tuple element is labeled@ %a,@ \ + but an unlabeled element was expected@]" + in + Some(explain_label_mismatch ~missing_label_msg diff) + | Errortrace.Variant v -> + explain_variant v + | Errortrace.Obj o -> + explain_object o + | Errortrace.First_class_module fm -> + explain_first_class_module fm + | Errortrace.Rec_occur(x,y) -> + add_type_to_preparation x; + add_type_to_preparation y; + begin match Types.get_desc x with + | Tvar _ | Tunivar _ -> + Some( + doc_printf "@,@[The type variable %a occurs inside@ %a@]" + (Style.as_inline_code prepared_type_expr) x + (Style.as_inline_code prepared_type_expr) y + ) + | _ -> + (* We had a delayed unification of the type variable with + a non-variable after the occur check. *) + Some Format_doc.Doc.empty + (* There is no need to search further for an explanation, but + we don't want to print a message of the form: + {[ The type int occurs inside int list -> 'a |} + *) + end + +let mismatch intro env trace = + Errortrace.explain trace (fun ~prev h -> explanation intro prev env h) + +let warn_on_missing_def env ppf t = + match Types.get_desc t with + | Tconstr (p,_,_) -> + begin match Env.find_type p env with + | exception Not_found -> + fprintf ppf + "@,@[Type %a is abstract because@ no corresponding\ + @ cmi file@ was found@ in path.@]" pp_path p + | { type_manifest = Some _; _ } -> () + | { type_manifest = None; _ } as decl -> + match Btype.type_origin decl with + | Rec_check_regularity -> + fprintf ppf + "@,@[Type %a was considered abstract@ when checking\ + @ constraints@ in this@ recursive type definition.@]" + pp_path p + | Definition | Existential _ -> () + end + | _ -> () + +let prepare_expansion_head empty_tr = function + | Errortrace.Diff d -> + Some (Errortrace.map_diff (may_prepare_expansion empty_tr) d) + | _ -> None + +let head_error_printer mode txt_got txt_but = function + | None -> Format_doc.Doc.empty + | Some d -> + let d = Errortrace.map_diff (trees_of_type_expansion mode) d in + doc_printf "%a@;<1 2>%a@ %a@;<1 2>%a" + pp_doc txt_got pp_type_expansion d.Errortrace.got + pp_doc txt_but pp_type_expansion d.Errortrace.expected + +let warn_on_missing_defs env ppf = function + | None -> () + | Some Errortrace.{got = {ty=te1; expanded=_}; + expected = {ty=te2; expanded=_} } -> + warn_on_missing_def env ppf te1; + warn_on_missing_def env ppf te2 + +(* [subst] comes out of equality, and is [[]] otherwise *) +let error trace_format mode subst env tr txt1 ppf txt2 ty_expect_explanation = + reset (); + (* We want to substitute in the opposite order from [Eqtype] *) + Variable_names.add_subst (List.map (fun (ty1,ty2) -> ty2,ty1) subst); + let tr = + prepare_trace + (fun ty_exp -> + Errortrace.{ty_exp with expanded = hide_variant_name ty_exp.expanded}) + tr + in + match tr with + | [] -> assert false + | (elt :: tr) as full_trace -> + with_labels (not !Clflags.classic) (fun () -> + let tr, last = filter_trace tr in + let head = prepare_expansion_head (tr=[] && last=None) elt in + let tr = List.map (Errortrace.map_diff prepare_expansion) tr in + let last = Option.map (Errortrace.map_diff prepare_expansion) last in + let head_error = head_error_printer mode txt1 txt2 head in + let tr = trees_of_trace mode tr in + let last = + Option.map (Errortrace.map_diff (trees_of_type_expansion mode)) last in + let mis = mismatch txt1 env full_trace in + let tr = match mis, last with + | None, Some elt -> tr @ [elt] + | Some _, _ | _, None -> tr + in + fprintf ppf + "@[\ + @[%a%a@]%a%a\ + @]" + pp_doc head_error + pp_doc ty_expect_explanation + (trace false (incompatibility_phrase trace_format)) tr + (pp_print_option pp_doc) mis; + if env <> Env.empty + then warn_on_missing_defs env ppf head; + Internal_names.print_explanations env ppf; + Ident_conflicts.err_print ppf + ) + +let report_error trace_format ppf mode env tr + ?(subst = []) + ?(type_expected_explanation = Fmt.Doc.empty) + txt1 txt2 = + wrap_printing_env ~error:true env (fun () -> + error trace_format mode subst env tr txt1 ppf txt2 + type_expected_explanation) + +let unification + ppf env ({trace} : Errortrace.unification_error) = + report_error Unification ppf Type env + ?subst:None trace + +let equality + ppf mode env ({subst; trace} : Errortrace.equality_error) = + report_error Equality ppf mode env + ~subst ?type_expected_explanation:None trace + +let moregen + ppf mode env ({trace} : Errortrace.moregen_error) = + report_error Moregen ppf mode env + ?subst:None ?type_expected_explanation:None trace + +let comparison ppf mode env = function + | Errortrace.Equality_error error -> equality ppf mode env error + | Errortrace.Moregen_error error -> moregen ppf mode env error + +module Subtype = struct + (* There's a frustrating amount of code duplication between this module and + the outside code, particularly in [prepare_trace] and [filter_trace]. + Unfortunately, [Subtype] is *just* similar enough to have code duplication, + while being *just* different enough (it's only [Diff]) for the abstraction + to be nonobvious. Someday, perhaps... *) + + let printing_status = function + | Errortrace.Subtype.Diff d -> diff_printing_status d + + let prepare_unification_trace = prepare_trace + + let prepare_trace f tr = + prepare_any_trace printing_status (Errortrace.Subtype.map f tr) + + let trace filter_trace get_diff fst keep_last txt ppf tr = + with_labels (not !Clflags.classic) (fun () -> + match tr with + | elt :: tr' -> + let diffed_elt = get_diff elt in + let tr, last = filter_trace tr' in + let tr = match keep_last, last with + | true, Some last -> tr @ [last] + | _ -> tr + in + let tr = + trees_of_trace Type + @@ List.map (Errortrace.map_diff prepare_expansion) tr in + let tr = + match fst, diffed_elt with + | true, Some elt -> elt :: tr + | _, _ -> tr + in + trace fst txt ppf tr + | _ -> () + ) + + let rec filter_subtype_trace = function + | [] -> [], None + | [Errortrace.Subtype.Diff d as elt] + when printing_status elt = Optional_refinement -> + [], Some d + | Errortrace.Subtype.Diff d :: rem -> + let ftr, last = filter_subtype_trace rem in + d :: ftr, last + + let unification_get_diff = function + | Errortrace.Diff diff -> + Some (Errortrace.map_diff (trees_of_type_expansion Type) diff) + | _ -> None + + let subtype_get_diff = function + | Errortrace.Subtype.Diff diff -> + Some (Errortrace.map_diff (trees_of_type_expansion Type) diff) + + let error + ppf + env + (Errortrace.Subtype.{trace = tr_sub; unification_trace = tr_unif}) + txt1 = + wrap_printing_env ~error:true env (fun () -> + reset (); + let tr_sub = prepare_trace prepare_expansion tr_sub in + let tr_unif = prepare_unification_trace prepare_expansion tr_unif in + let keep_first = match tr_unif with + | [Obj _ | Variant _ | Escape _ ] | [] -> true + | _ -> false in + fprintf ppf "@[%a" + (trace filter_subtype_trace subtype_get_diff true keep_first txt1) + tr_sub; + if tr_unif = [] then fprintf ppf "@]" else + let mis = mismatch (doc_printf "Within this type") env tr_unif in + fprintf ppf "%a%a%t@]" + (trace filter_trace unification_get_diff false + (mis = None) "is not compatible with type") tr_unif + (pp_print_option pp_doc) mis + Ident_conflicts.err_print + ) +end + +let subtype = Subtype.error + +let quoted_ident ppf t = + Style.as_inline_code !Oprint.out_ident ppf t + +let type_path_expansion ppf = function + | Same p -> quoted_ident ppf p + | Diff(p,p') -> + fprintf ppf "@[<2>%a@ =@ %a@]" + quoted_ident p + quoted_ident p' + +let trees_of_type_path_expansion (tp,tp') = + let path_tree = namespaced_tree_of_path Type in + if Path.same tp tp' then Same(path_tree tp) else + Diff(path_tree tp, path_tree tp) + +let type_path_list ppf l = + Fmt.pp_print_list ~pp_sep:(fun ppf () -> Fmt.pp_print_break ppf 2 0) + type_path_expansion ppf l + +let ambiguous_type ppf env tp0 tpl txt1 txt2 txt3 = + wrap_printing_env ~error:true env (fun () -> + reset (); + let tp0 = trees_of_type_path_expansion tp0 in + match tpl with + [] -> assert false + | [tp] -> + fprintf ppf + "@[%a@;<1 2>%a@ \ + %a@;<1 2>%a\ + @]" + pp_doc txt1 type_path_expansion (trees_of_type_path_expansion tp) + pp_doc txt3 type_path_expansion tp0 + | _ -> + fprintf ppf + "@[%a@;<1 2>@[%a@]\ + @ %a@;<1 2>%a\ + @]" + pp_doc txt2 type_path_list (List.map trees_of_type_path_expansion tpl) + pp_doc txt3 type_path_expansion tp0) diff --git a/ocamlmerlin_mlx/ocaml/typing/errortrace_report.mli b/ocamlmerlin_mlx/ocaml/typing/errortrace_report.mli new file mode 100644 index 0000000..bb6f0ea --- /dev/null +++ b/ocamlmerlin_mlx/ocaml/typing/errortrace_report.mli @@ -0,0 +1,56 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Florian Angeletti, projet Cambium, INRIA Paris *) +(* *) +(* Copyright 2024 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(** Functions for reporting core level type errors. *) + +open Format_doc + +val ambiguous_type: + formatter -> Env.t -> (Path.t * Path.t) -> (Path.t * Path.t) list -> + Format_doc.t -> Format_doc.t -> Format_doc.t -> unit + +val unification : + formatter -> + Env.t -> Errortrace.unification_error -> + ?type_expected_explanation:Format_doc.t -> Format_doc.t -> Format_doc.t -> + unit + +val equality : + formatter -> + Out_type.type_or_scheme -> + Env.t -> Errortrace.equality_error -> + Format_doc.t -> Format_doc.t -> + unit + +val moregen : + formatter -> + Out_type.type_or_scheme -> + Env.t -> Errortrace.moregen_error -> + Format_doc.t -> Format_doc.t -> + unit + +val comparison : + formatter -> + Out_type.type_or_scheme -> + Env.t -> Errortrace.comparison_error -> + Format_doc.t -> Format_doc.t -> + unit + +val subtype : + formatter -> + Env.t -> + Errortrace.Subtype.error -> + string -> + unit diff --git a/ocamlmerlin_mlx/ocaml/typing/ident.ml b/ocamlmerlin_mlx/ocaml/typing/ident.ml index 149feff..56aa1da 100644 --- a/ocamlmerlin_mlx/ocaml/typing/ident.ml +++ b/ocamlmerlin_mlx/ocaml/typing/ident.ml @@ -16,7 +16,8 @@ open Local_store let lowest_scope = 0 -let highest_scope = 100000000 +let highest_scope = 100_000_000 + (* assumed to fit in 27 bits, see Types.scope_field *) type t = | Local of { name: string; stamp: int } @@ -111,6 +112,9 @@ let stamp = function | Scoped { stamp; _ } -> stamp | _ -> 0 +let compare_stamp id1 id2 = + compare (stamp id1) (stamp id2) + let scope = function | Scoped { scope; _ } -> scope | Local _ -> highest_scope @@ -133,22 +137,54 @@ let is_predef = function | Predef _ -> true | _ -> false +let canonical_stamps = s_table Hashtbl.create 0 +let next_canonical_stamp = s_table Hashtbl.create 0 + +let canonicalize name stamp = + try Hashtbl.find !canonical_stamps (name, stamp) + with Not_found -> + let canonical_stamp = + try Hashtbl.find !next_canonical_stamp name + with Not_found -> 0 + in + Hashtbl.replace !next_canonical_stamp name + (canonical_stamp + 1); + Hashtbl.add !canonical_stamps (name, stamp) + canonical_stamp; + canonical_stamp + +let pp_stamped ppf (name, stamp) = + let open Format_doc in + if not !Clflags.unique_ids then + fprintf ppf "%s" name + else begin + let stamp = + if not !Clflags.canonical_ids then stamp + else canonicalize name stamp + in + fprintf ppf "%s/%i" name stamp + end + let print ~with_scope ppf = - let open Format in + let open Format_doc in function - | Global name -> fprintf ppf "%s!" name - | Predef { name; stamp = n } -> - fprintf ppf "%s/%i!" name n - | Local { name; stamp = n } -> - fprintf ppf "%s/%i" name n - | Scoped { name; stamp = n; scope } -> - fprintf ppf "%s/%i%s" name n - (if with_scope then sprintf "[%i]" scope else "") + | Global name -> + fprintf ppf "%s!" name + | Predef { name; stamp } -> + fprintf ppf "%a!" + pp_stamped (name, stamp) + | Local { name; stamp } -> + fprintf ppf "%a" + pp_stamped (name, stamp) + | Scoped { name; stamp; scope } -> + fprintf ppf "%a%s" + pp_stamped (name, stamp) + (if with_scope then asprintf "[%i]" scope else "") let print_with_scope ppf id = print ~with_scope:true ppf id -let print ppf id = print ~with_scope:false ppf id - +let doc_print ppf id = print ~with_scope:false ppf id +let print ppf id = Format_doc.compat doc_print ppf id (* For the documentation of ['a Ident.tbl], see ident.mli. The implementation is a copy-paste specialization of diff --git a/ocamlmerlin_mlx/ocaml/typing/ident.mli b/ocamlmerlin_mlx/ocaml/typing/ident.mli index cfc4ca1..e878c1b 100644 --- a/ocamlmerlin_mlx/ocaml/typing/ident.mli +++ b/ocamlmerlin_mlx/ocaml/typing/ident.mli @@ -24,7 +24,8 @@ include Identifiable.S with type t := t - [compare] compares identifiers by binding location *) -val print_with_scope : Format.formatter -> t -> unit +val doc_print: t Format_doc.printer +val print_with_scope : t Format_doc.printer (** Same as {!print} except that it will also add a "[n]" suffix if the scope of the argument is [n]. *) @@ -50,7 +51,11 @@ val same: t -> t -> bool [create_*], or if they are both persistent and have the same name. *) +val compare_stamp: t -> t -> int + (** Compare only the internal stamps, 0 if absent *) + val compare: t -> t -> int + (** Compare identifiers structurally, including the name *) val global: t -> bool val is_predef: t -> bool diff --git a/ocamlmerlin_mlx/ocaml/typing/includeclass.ml b/ocamlmerlin_mlx/ocaml/typing/includeclass.ml index 3a2cd57..ff171e3 100644 --- a/ocamlmerlin_mlx/ocaml/typing/includeclass.ml +++ b/ocamlmerlin_mlx/ocaml/typing/includeclass.ml @@ -40,7 +40,7 @@ let class_declarations env cty1 cty2 = cty1.cty_params cty1.cty_type cty2.cty_params cty2.cty_type -open Format +open Format_doc open Ctype (* @@ -50,43 +50,38 @@ let rec hide_params = function *) let include_err mode ppf = + let msg fmt = Format_doc.Doc.msg fmt in function | CM_Virtual_class -> fprintf ppf "A class cannot be changed from virtual to concrete" | CM_Parameter_arity_mismatch _ -> fprintf ppf "The classes do not have the same number of type parameters" - | CM_Type_parameter_mismatch (env, err) -> - Printtyp.report_equality_error ppf mode env err - (function ppf -> - fprintf ppf "A type parameter has type") - (function ppf -> - fprintf ppf "but is expected to have type") + | CM_Type_parameter_mismatch (n, env, err) -> + Errortrace_report.equality ppf mode env err + (msg "The %d%s type parameter has type" + n (Misc.ordinal_suffix n)) + (msg "but is expected to have type") | CM_Class_type_mismatch (env, cty1, cty2) -> Printtyp.wrap_printing_env ~error:true env (fun () -> fprintf ppf "@[The class type@;<1 2>%a@ %s@;<1 2>%a@]" - Printtyp.class_type cty1 + Printtyp.Doc.class_type cty1 "is not matched by the class type" - Printtyp.class_type cty2) - | CM_Parameter_mismatch (env, err) -> - Printtyp.report_moregen_error ppf mode env err - (function ppf -> - fprintf ppf "A parameter has type") - (function ppf -> - fprintf ppf "but is expected to have type") + Printtyp.Doc.class_type cty2) + | CM_Parameter_mismatch (n, env, err) -> + Errortrace_report.moregen ppf mode env err + (msg "The %d%s parameter has type" + n (Misc.ordinal_suffix n)) + (msg "but is expected to have type") | CM_Val_type_mismatch (lab, env, err) -> - Printtyp.report_comparison_error ppf mode env err - (function ppf -> - fprintf ppf "The instance variable %s@ has type" lab) - (function ppf -> - fprintf ppf "but is expected to have type") + Errortrace_report.comparison ppf mode env err + (msg "The instance variable %s@ has type" lab) + (msg "but is expected to have type") | CM_Meth_type_mismatch (lab, env, err) -> - Printtyp.report_comparison_error ppf mode env err - (function ppf -> - fprintf ppf "The method %s@ has type" lab) - (function ppf -> - fprintf ppf "but is expected to have type") + Errortrace_report.comparison ppf mode env err + (msg "The method %s@ has type" lab) + (msg "but is expected to have type") | CM_Non_mutable_value lab -> fprintf ppf "@[The non-mutable instance variable %s cannot become mutable@]" lab @@ -108,9 +103,11 @@ let include_err mode ppf = | CM_Private_method lab -> fprintf ppf "@[The private method %s cannot become public@]" lab -let report_error mode ppf = function +let report_error_doc mode ppf = function | [] -> () | err :: errs -> let print_errs ppf errs = List.iter (fun err -> fprintf ppf "@ %a" (include_err mode) err) errs in fprintf ppf "@[%a%a@]" (include_err mode) err print_errs errs + +let report_error = Format_doc.compat1 report_error_doc diff --git a/ocamlmerlin_mlx/ocaml/typing/includeclass.mli b/ocamlmerlin_mlx/ocaml/typing/includeclass.mli index 84de621..a4d4d85 100644 --- a/ocamlmerlin_mlx/ocaml/typing/includeclass.mli +++ b/ocamlmerlin_mlx/ocaml/typing/includeclass.mli @@ -17,7 +17,6 @@ open Types open Ctype -open Format val class_types: Env.t -> class_type -> class_type -> class_match_failure list @@ -30,4 +29,6 @@ val class_declarations: class_match_failure list val report_error : - Printtyp.type_or_scheme -> formatter -> class_match_failure list -> unit + Out_type.type_or_scheme -> class_match_failure list Format_doc.format_printer +val report_error_doc : + Out_type.type_or_scheme -> class_match_failure list Format_doc.printer diff --git a/ocamlmerlin_mlx/ocaml/typing/includecore.ml b/ocamlmerlin_mlx/ocaml/typing/includecore.ml index a3cdd18..8530555 100644 --- a/ocamlmerlin_mlx/ocaml/typing/includecore.ml +++ b/ocamlmerlin_mlx/ocaml/typing/includecore.ml @@ -70,6 +70,26 @@ type value_mismatch = exception Dont_match of value_mismatch +(* A value description [vd1] is consistent with the value description [vd2] if + there is a context E such that [E |- vd1 <: vd2] for the ordinary subtyping. + For values, this is the case as soon as the kind of [vd1] is a subkind of the + [vd2] kind. *) +let value_descriptions_consistency env vd1 vd2 = + match (vd1.val_kind, vd2.val_kind) with + | (Val_prim p1, Val_prim p2) -> begin + match primitive_descriptions p1 p2 with + | None -> Tcoerce_none + | Some err -> raise (Dont_match (Primitive_mismatch err)) + end + | (Val_prim p, _) -> + let pc = + { pc_desc = p; pc_type = vd2.Types.val_type; + pc_env = env; pc_loc = vd1.Types.val_loc; } + in + Tcoerce_primitive pc + | (_, Val_prim _) -> raise (Dont_match Not_a_primitive) + | (_, _) -> Tcoerce_none + let value_descriptions ~loc env name (vd1 : Types.value_description) (vd2 : Types.value_description) = @@ -81,22 +101,7 @@ let value_descriptions ~loc env name name; match Ctype.moregeneral env true vd1.val_type vd2.val_type with | exception Ctype.Moregen err -> raise (Dont_match (Type err)) - | () -> begin - match (vd1.val_kind, vd2.val_kind) with - | (Val_prim p1, Val_prim p2) -> begin - match primitive_descriptions p1 p2 with - | None -> Tcoerce_none - | Some err -> raise (Dont_match (Primitive_mismatch err)) - end - | (Val_prim p, _) -> - let pc = - { pc_desc = p; pc_type = vd2.Types.val_type; - pc_env = env; pc_loc = vd1.Types.val_loc; } - in - Tcoerce_primitive pc - | (_, Val_prim _) -> raise (Dont_match Not_a_primitive) - | (_, _) -> Tcoerce_none - end + | () -> value_descriptions_consistency env vd1 vd2 (* Inclusion between manifest types (particularly for private row types) *) @@ -140,7 +145,7 @@ type type_kind = | Kind_open let of_kind = function - | Type_abstract -> Kind_abstract + | Type_abstract _ -> Kind_abstract | Type_record (_, _) -> Kind_record | Type_variant (_, _) -> Kind_variant | Type_open -> Kind_open @@ -150,6 +155,7 @@ type kind_mismatch = type_kind * type_kind type label_mismatch = | Type of Errortrace.equality_error | Mutability of position + | Atomicity of position type record_change = (Types.label_declaration, Types.label_declaration, label_mismatch) @@ -202,8 +208,11 @@ type type_mismatch = | Unboxed_representation of position | Immediate of Type_immediacy.Violation.t +module Style = Misc.Style +module Fmt = Format_doc + let report_primitive_mismatch first second ppf err = - let pr fmt = Format.fprintf ppf fmt in + let pr fmt = Fmt.fprintf ppf fmt in match (err : primitive_mismatch) with | Name -> pr "The names of the primitives are not the same" @@ -211,8 +220,9 @@ let report_primitive_mismatch first second ppf err = pr "The syntactic arities of these primitives were not the same.@ \ (They must have the same number of arrows present in the source.)" | No_alloc ord -> - pr "%s primitive is [@@@@noalloc] but %s is not" + pr "%s primitive is %a but %s is not" (String.capitalize_ascii (choose ord first second)) + Style.inline_code "[@@noalloc]" (choose_other ord first second) | Native_name -> pr "The native names of the primitives are not the same" @@ -223,7 +233,7 @@ let report_primitive_mismatch first second ppf err = n (Misc.ordinal_suffix n) let report_value_mismatch first second env ppf err = - let pr fmt = Format.fprintf ppf fmt in + let pr fmt = Fmt.fprintf ppf fmt in pr "@ "; match (err : value_mismatch) with | Primitive_mismatch pm -> @@ -231,14 +241,16 @@ let report_value_mismatch first second env ppf err = | Not_a_primitive -> pr "The implementation is not a primitive." | Type trace -> - Printtyp.report_moregen_error ppf Type_scheme env trace - (fun ppf -> Format.fprintf ppf "The type") - (fun ppf -> Format.fprintf ppf "is not compatible with the type") + let msg = Fmt.Doc.msg in + Errortrace_report.moregen ppf Type_scheme env trace + (msg "The type") + (msg "is not compatible with the type") let report_type_inequality env ppf err = - Printtyp.report_equality_error ppf Type_scheme env err - (fun ppf -> Format.fprintf ppf "The type") - (fun ppf -> Format.fprintf ppf "is not equal to the type") + let msg = Fmt.Doc.msg in + Errortrace_report.equality ppf Type_scheme env err + (msg "The type") + (msg "is not equal to the type") let report_privacy_mismatch ppf err = let singular, item = @@ -248,7 +260,7 @@ let report_privacy_mismatch ppf err = | Private_record_type -> true, "record constructor" | Private_extensible_variant -> true, "extensible variant" | Private_row_type -> true, "row type" - in Format.fprintf ppf "%s %s would be revealed." + in Format_doc.fprintf ppf "%s %s would be revealed." (if singular then "A private" else "Private") item @@ -257,52 +269,60 @@ let report_label_mismatch first second env ppf err = | Type err -> report_type_inequality env ppf err | Mutability ord -> - Format.fprintf ppf "%s is mutable and %s is not." + Format_doc.fprintf ppf "%s is mutable and %s is not." + (String.capitalize_ascii (choose ord first second)) + (choose_other ord first second) + | Atomicity ord -> + Format_doc.fprintf ppf "%s is atomic and %s is not." (String.capitalize_ascii (choose ord first second)) (choose_other ord first second) let pp_record_diff first second prefix decl env ppf (x : record_change) = match x with | Delete cd -> - Format.fprintf ppf "%aAn extra field, %s, is provided in %s %s." - prefix x (Ident.name cd.delete.ld_id) first decl + Fmt.fprintf ppf "%aAn extra field, %a, is provided in %s %s." + prefix x Style.inline_code (Ident.name cd.delete.ld_id) first decl | Insert cd -> - Format.fprintf ppf "%aA field, %s, is missing in %s %s." - prefix x (Ident.name cd.insert.ld_id) first decl + Fmt.fprintf ppf "%aA field, %a, is missing in %s %s." + prefix x Style.inline_code (Ident.name cd.insert.ld_id) first decl | Change Type {got=lbl1; expected=lbl2; reason} -> - Format.fprintf ppf + Fmt.fprintf ppf "@[%aFields do not match:@;<1 2>\ %a@ is not the same as:\ @;<1 2>%a@ %a@]" prefix x - Printtyp.label lbl1 - Printtyp.label lbl2 + (Style.as_inline_code Printtyp.Doc.label) lbl1 + (Style.as_inline_code Printtyp.Doc.label) lbl2 (report_label_mismatch first second env) reason | Change Name n -> - Format.fprintf ppf "%aFields have different names, %s and %s." - prefix x n.got n.expected + Fmt.fprintf ppf "%aFields have different names, %a and %a." + prefix x + Style.inline_code n.got + Style.inline_code n.expected | Swap sw -> - Format.fprintf ppf "%aFields %s and %s have been swapped." - prefix x sw.first sw.last + Fmt.fprintf ppf "%aFields %a and %a have been swapped." + prefix x + Style.inline_code sw.first + Style.inline_code sw.last | Move {name; got; expected } -> - Format.fprintf ppf - "@[<2>%aField %s has been moved@ from@ position %d@ to %d.@]" - prefix x name expected got + Fmt.fprintf ppf + "@[<2>%aField %a has been moved@ from@ position %d@ to %d.@]" + prefix x Style.inline_code name expected got let report_patch pr_diff first second decl env ppf patch = - let nl ppf () = Format.fprintf ppf "@," in + let nl ppf () = Fmt.fprintf ppf "@," in let no_prefix _ppf _ = () in match patch with | [ elt ] -> - Format.fprintf ppf "@[%a@]" + Fmt.fprintf ppf "@[%a@]" (pr_diff first second no_prefix decl env) elt | _ -> let pp_diff = pr_diff first second Diffing_with_keys.prefix decl env in - Format.fprintf ppf "@[%a@]" - (Format.pp_print_list ~pp_sep:nl pp_diff) patch + Fmt.fprintf ppf "@[%a@]" + (Fmt.pp_print_list ~pp_sep:nl pp_diff) patch let report_record_mismatch first second decl env ppf err = - let pr fmt = Format.fprintf ppf fmt in + let pr fmt = Fmt.fprintf ppf fmt in match err with | Label_mismatch patch -> report_patch pp_record_diff first second decl env ppf patch @@ -312,7 +332,7 @@ let report_record_mismatch first second decl env ppf err = "uses unboxed float representation" let report_constructor_mismatch first second decl env ppf err = - let pr fmt = Format.fprintf ppf fmt in + let pr fmt = Fmt.fprintf ppf fmt in match (err : constructor_mismatch) with | Type err -> report_type_inequality env ppf err | Arity -> pr "They have different arities." @@ -330,70 +350,80 @@ let report_constructor_mismatch first second decl env ppf err = let pp_variant_diff first second prefix decl env ppf (x : variant_change) = match x with | Delete cd -> - Format.fprintf ppf "%aAn extra constructor, %s, is provided in %s %s." - prefix x (Ident.name cd.delete.cd_id) first decl + Fmt.fprintf ppf "%aAn extra constructor, %a, is provided in %s %s." + prefix x Style.inline_code (Ident.name cd.delete.cd_id) first decl | Insert cd -> - Format.fprintf ppf "%aA constructor, %s, is missing in %s %s." - prefix x (Ident.name cd.insert.cd_id) first decl + Fmt.fprintf ppf "%aA constructor, %a, is missing in %s %s." + prefix x Style.inline_code (Ident.name cd.insert.cd_id) first decl | Change Type {got; expected; reason} -> - Format.fprintf ppf + Fmt.fprintf ppf "@[%aConstructors do not match:@;<1 2>\ %a@ is not the same as:\ @;<1 2>%a@ %a@]" prefix x - Printtyp.constructor got - Printtyp.constructor expected + (Style.as_inline_code Printtyp.Doc.constructor) got + (Style.as_inline_code Printtyp.Doc.constructor) expected (report_constructor_mismatch first second decl env) reason | Change Name n -> - Format.fprintf ppf - "%aConstructors have different names, %s and %s." - prefix x n.got n.expected + Fmt.fprintf ppf + "%aConstructors have different names, %a and %a." + prefix x + Style.inline_code n.got + Style.inline_code n.expected | Swap sw -> - Format.fprintf ppf - "%aConstructors %s and %s have been swapped." - prefix x sw.first sw.last + Fmt.fprintf ppf + "%aConstructors %a and %a have been swapped." + prefix x + Style.inline_code sw.first + Style.inline_code sw.last | Move {name; got; expected} -> - Format.fprintf ppf - "@[<2>%aConstructor %s has been moved@ from@ position %d@ to %d.@]" - prefix x name expected got + Fmt.fprintf ppf + "@[<2>%aConstructor %a has been moved@ from@ position %d@ to %d.@]" + prefix x Style.inline_code name expected got let report_extension_constructor_mismatch first second decl env ppf err = - let pr fmt = Format.fprintf ppf fmt in + let pr fmt = Fmt.fprintf ppf fmt in match (err : extension_constructor_mismatch) with | Constructor_privacy -> pr "Private extension constructor(s) would be revealed." | Constructor_mismatch (id, ext1, ext2, err) -> + let constructor = + Style.as_inline_code (Printtyp.Doc.extension_only_constructor id) + in pr "@[Constructors do not match:@;<1 2>%a@ is not the same as:\ @;<1 2>%a@ %a@]" - (Printtyp.extension_only_constructor id) ext1 - (Printtyp.extension_only_constructor id) ext2 + constructor ext1 + constructor ext2 (report_constructor_mismatch first second decl env) err + let report_private_variant_mismatch first second decl env ppf err = - let pr fmt = Format.fprintf ppf fmt in + let pr fmt = Fmt.fprintf ppf fmt in + let pp_tag ppf x = Fmt.fprintf ppf "`%s" x in match (err : private_variant_mismatch) with | Only_outer_closed -> (* It's only dangerous in one direction, so we don't have a position *) pr "%s is private and closed, but %s is not closed" (String.capitalize_ascii second) first | Missing (ord, name) -> - pr "The constructor %s is only present in %s %s." - name (choose ord first second) decl + pr "The constructor %a is only present in %s %s." + Style.inline_code name (choose ord first second) decl | Presence s -> - pr "The tag `%s is present in the %s %s,@ but might not be in the %s" - s second decl first + pr "The tag %a is present in the %s %s,@ but might not be in the %s" + (Style.as_inline_code pp_tag) s second decl first | Incompatible_types_for s -> pr "Types for tag `%s are incompatible" s | Types err -> report_type_inequality env ppf err let report_private_object_mismatch env ppf err = - let pr fmt = Format.fprintf ppf fmt in + let pr fmt = Fmt.fprintf ppf fmt in match (err : private_object_mismatch) with - | Missing s -> pr "The implementation is missing the method %s" s + | Missing s -> + pr "The implementation is missing the method %a" Style.inline_code s | Types err -> report_type_inequality env ppf err let report_kind_mismatch first second ppf (kind1, kind2) = - let pr fmt = Format.fprintf ppf fmt in + let pr fmt = Fmt.fprintf ppf fmt in let kind_to_string = function | Kind_abstract -> "abstract" | Kind_record -> "a record" @@ -406,8 +436,7 @@ let report_kind_mismatch first second ppf (kind1, kind2) = (kind_to_string kind2) let report_type_mismatch first second decl env ppf err = - let pr fmt = Format.fprintf ppf fmt in - pr "@ "; + let pr fmt = Fmt.fprintf ppf fmt in match err with | Arity -> pr "They have different arities." @@ -455,6 +484,14 @@ module Record_diffing = struct then let ord = if ld1.ld_mutable = Asttypes.Mutable then First else Second in Some (Mutability ord) + else if ld1.ld_atomic <> ld2.ld_atomic + then + let ord = + match ld1.ld_atomic with + | Atomic -> First + | Nonatomic -> Second + in + Some (Atomicity ord) else let tl1 = params1 @ [ld1.ld_type] in let tl2 = params2 @ [ld2.ld_type] in @@ -526,14 +563,37 @@ module Record_diffing = struct | None -> Ok () let weight: Diff.change -> _ = function - | Insert _ -> 10 - | Delete _ -> 10 + | Insert _ | Delete _ -> + (* Insertion and deletion are symmetrical for definitions *) + 100 | Keep _ -> 0 - | Change (_,_,Diffing_with_keys.Name t ) -> - if t.types_match then 10 else 15 - | Change _ -> 10 - - + (* [Keep] must have the smallest weight. *) + | Change (_,_,c) -> + (* Constraints: + - [ Change < Insert + Delete ], otherwise [Change] are never optimal + + - [ Swap < Move ] => [ 2 Change < Insert + Delete ] => + [ Change < Delete ], in order to favour consecutive [Swap]s + over [Move]s. + + - For some D and a large enough R, + [Delete^D Keep^R Insert^D < Change^(D+R)] + => [ Change > (2 D)/(D+R) Delete ]. + Note that the case [D=1,R=1] is incompatible with the inequation + above. If we choose [R = D + 1] for [D<5], we can specialize the + inequation to [ Change > 10 / 11 Delete ]. *) + match c with + (* With [Type + if t.types_match then 98 else 99 + | Diffing_with_keys.Type _ -> 50 + (* With the uniqueness constraint on keys, the only relevant constraint + is [Type-only change < Name change]. Indeed, names can only match at + one position. In other words, if a [ Type ] patch is admissible, the + only admissible patches at this position are of the form [Delete^D + Name_change]. And with the constranit [Type_change < Name_change], + we have [Type_change Delete^D < Delete^D Name_change]. *) let key (x: Defs.left) = Ident.name x.ld_id let diffing loc env params1 params2 cstrs_1 cstrs_2 = @@ -645,13 +705,12 @@ module Variant_diffing = struct let update _ st = st let weight: D.change -> _ = function - | Insert _ -> 10 - | Delete _ -> 10 + | Insert _ | Delete _ -> 100 | Keep _ -> 0 - | Change (_,_,Diffing_with_keys.Name t) -> - if t.types_match then 10 else 15 - | Change _ -> 10 - + | Change (_,_,Diffing_with_keys.Name c) -> + if c.types_match then 98 else 99 + | Change (_,_,Diffing_with_keys.Type _) -> 50 + (** See {!Variant_diffing.weight} for an explanation *) let test loc env (params1,params2) ({pos; data=cd1}: D.left) @@ -715,7 +774,7 @@ let privacy_mismatch env decl1 decl2 = | Type_record _, Type_record _ -> Some Private_record_type | Type_variant _, Type_variant _ -> Some Private_variant_type | Type_open, Type_open -> Some Private_extensible_variant - | Type_abstract, Type_abstract + | Type_abstract _, Type_abstract _ when Option.is_some decl2.type_manifest -> begin match decl1.type_manifest with | Some ty1 -> begin @@ -852,7 +911,7 @@ let type_manifest env ty1 params1 ty2 params2 priv2 kind2 = | _ -> begin let is_private_abbrev_2 = match priv2, kind2 with - | Private, Type_abstract -> begin + | Private, Type_abstract _ -> begin (* Same checks as the [when] guards from above, inverted *) match get_desc ty2' with | Tvariant row -> @@ -873,6 +932,17 @@ let type_manifest env ty1 params1 ty2 params2 priv2 kind2 = | () -> None end +(* A type declarations [td1] is consistent with the type declaration [td2] if + there is a context E such E |- td1 <: td2 for the ordinary subtyping. For + types, this is the case as soon as the two type declarations share the same + arity and the privacy of [td1] is less than the privacy of [td2] (consider a + context E where all type constructors are equal). *) +let type_declarations_consistency env decl1 decl2 = + if decl1.type_arity <> decl2.type_arity then Some Arity + else match privacy_mismatch env decl1 decl2 with + | Some err -> Some (Privacy err) + | None -> None + let type_declarations ?(equality = false) ~loc env ~mark name decl1 path decl2 = Builtin_attributes.check_alerts_inclusion @@ -881,12 +951,7 @@ let type_declarations ?(equality = false) ~loc env ~mark name loc decl1.type_attributes decl2.type_attributes name; - if decl1.type_arity <> decl2.type_arity then Some Arity else - let err = - match privacy_mismatch env decl1 decl2 with - | Some err -> Some (Privacy err) - | None -> None - in + let err = type_declarations_consistency env decl1 decl2 in if err <> None then err else let err = match (decl1.type_manifest, decl2.type_manifest) with (_, None) -> @@ -911,11 +976,13 @@ let type_declarations ?(equality = false) ~loc env ~mark name in if err <> None then err else let err = match (decl1.type_kind, decl2.type_kind) with - (_, Type_abstract) -> None + (_, Type_abstract _) -> None | (Type_variant (cstrs1, rep1), Type_variant (cstrs2, rep2)) -> if mark then begin let mark usage cstrs = - List.iter (Env.mark_constructor_used usage) cstrs + List.iter (fun cstr -> + Env.mark_constructor_used usage cstr.Types.cd_uid + ) cstrs in let usage : Env.constructor_usage = if decl2.type_private = Public then Env.Exported @@ -934,7 +1001,9 @@ let type_declarations ?(equality = false) ~loc env ~mark name | (Type_record(labels1,rep1), Type_record(labels2,rep2)) -> if mark then begin let mark usage lbls = - List.iter (Env.mark_label_used usage) lbls + List.iter (fun lbl -> + Env.mark_label_used usage lbl.Types.ld_uid + ) lbls in let usage : Env.label_usage = if decl2.type_private = Public then Env.Exported @@ -951,7 +1020,7 @@ let type_declarations ?(equality = false) ~loc env ~mark name | (_, _) -> Some (Kind (of_kind decl1.type_kind, of_kind decl2.type_kind)) in if err <> None then err else - let abstr = decl2.type_kind = Type_abstract && decl2.type_manifest = None in + let abstr = Btype.type_kind_is_abstract decl2 && decl2.type_manifest = None in (* If attempt to assign a non-immediate type (e.g. string) to a type that * must be immediate, then we error *) let err = @@ -965,10 +1034,21 @@ let type_declarations ?(equality = false) ~loc env ~mark name | Error violation -> Some (Immediate violation) in if err <> None then err else + (* We need to check coherence of internal and exported variance either + * when the export type is abstract, as there is no manifest to get + the minimal variance from + * when the export type is private, as the private manifest may be + result of expansions within Ctype.equal_private, forgetting + an explicit variance annotation in the internal type + * when the internal type is private, but this is already included + in the above two cases (a private type can only be exported as + abstract or private) + * when the internal type is open, as we do not allow changing the + variance in that case *) + let abstr' = abstr || decl2.type_private = Private in let need_variance = - abstr || decl1.type_private = Private || decl1.type_kind = Type_open in + abstr' || decl1.type_private = Private || decl1.type_kind = Type_open in if not need_variance then None else - let abstr = abstr || decl2.type_private = Private in let opn = decl2.type_kind = Type_open && decl2.type_manifest = None in let constrained ty = not (Btype.is_Tvar ty) in if List.for_all2 @@ -976,10 +1056,13 @@ let type_declarations ?(equality = false) ~loc env ~mark name let open Variance in let imp a b = not a || b in let (co1,cn1) = get_upper v1 and (co2,cn2) = get_upper v2 in - (if abstr then (imp co1 co2 && imp cn1 cn2) + (if abstr' then (imp co1 co2 && imp cn1 cn2) else if opn || constrained ty then (co1 = co2 && cn1 = cn2) else true) && let (p1,n1,j1) = get_lower v1 and (p2,n2,j2) = get_lower v2 in + (* Only check the lower bound for abstract types. + For private types, the lower bound can be inferred, and + the internal one may be wrong in the result of functors. *) imp abstr (imp p2 p1 && imp n2 n1 && imp j2 j1)) decl2.type_params (List.combine decl1.type_variance decl2.type_variance) then None else Some Variance @@ -992,7 +1075,7 @@ let extension_constructors ~loc env ~mark id ext1 ext2 = if ext2.ext_private = Public then Env.Exported else Env.Exported_private in - Env.mark_extension_used usage ext1 + Env.mark_extension_used usage ext1.ext_uid end; let ty1 = Btype.newgenty (Tconstr(ext1.ext_type_path, ext1.ext_type_params, ref Mnil)) diff --git a/ocamlmerlin_mlx/ocaml/typing/includecore.mli b/ocamlmerlin_mlx/ocaml/typing/includecore.mli index 5082597..f2eb179 100644 --- a/ocamlmerlin_mlx/ocaml/typing/includecore.mli +++ b/ocamlmerlin_mlx/ocaml/typing/includecore.mli @@ -54,6 +54,7 @@ type kind_mismatch = type_kind * type_kind type label_mismatch = | Type of Errortrace.equality_error | Mutability of position + | Atomicity of position type record_change = (Types.label_declaration as 'ld, 'ld, label_mismatch) Diffing_with_keys.change @@ -118,6 +119,21 @@ val extension_constructors: loc:Location.t -> Env.t -> mark:bool -> Ident.t -> extension_constructor -> extension_constructor -> extension_constructor_mismatch option + +(** The functions [value_descriptions_consistency] and + [type_declarations_consistency] check if two declaration are consistent. + Declarations are consistent when there exists an environment such that the + first declaration is a subtype of the second one. + + Notably, if a type declaration [td1] is consistent with [td2] then a type + expression [te] which is well-formed with the [td2] declaration in scope + is still well-formed with the [td1] declaration: [E, td2 |- te] => [E, td1 + |- te]. *) +val value_descriptions_consistency: + Env.t -> value_description -> value_description -> module_coercion +val type_declarations_consistency: + Env.t -> type_declaration -> type_declaration -> type_mismatch option + (* val class_types: Env.t -> class_type -> class_type -> bool @@ -126,14 +142,14 @@ val class_types: val report_value_mismatch : string -> string -> Env.t -> - Format.formatter -> value_mismatch -> unit + value_mismatch Format_doc.printer val report_type_mismatch : string -> string -> string -> Env.t -> - Format.formatter -> type_mismatch -> unit + type_mismatch Format_doc.printer val report_extension_constructor_mismatch : string -> string -> string -> Env.t -> - Format.formatter -> extension_constructor_mismatch -> unit + extension_constructor_mismatch Format_doc.printer diff --git a/ocamlmerlin_mlx/ocaml/typing/includemod.ml b/ocamlmerlin_mlx/ocaml/typing/includemod.ml index d0fa23a..0baeafc 100644 --- a/ocamlmerlin_mlx/ocaml/typing/includemod.ml +++ b/ocamlmerlin_mlx/ocaml/typing/includemod.ml @@ -100,10 +100,13 @@ module Error = struct and arg_functor_param_symptom = (functor_parameter, Ident.t) functor_param_symptom - and functor_params_diff = (functor_parameter list * module_type) core_diff + and functor_params_info = + { params: functor_parameter list; res: module_type } + and functor_params_diff = functor_params_info core_diff and signature_symptom = { env: Env.t; + subst: Subst.t; missings: signature_item list; incompatibles: (Ident.t * sigitem_symptom) list; oks: (int * module_coercion) list; @@ -132,80 +135,158 @@ module Error = struct | In_Type_declaration of Ident.t * core_sigitem_symptom | In_Expansion of core_module_type_symptom + let cons_arg arg params_info = + { params = arg :: params_info.params; res = params_info.res } + + let functor_params info1 info2 = + Error (Functor (Params (sdiff info1 info2))) + end -type mark = +module Directionality = struct + + type mark = | Mark_both | Mark_positive - | Mark_negative | Mark_neither -let negate_mark = function - | Mark_both -> Mark_both - | Mark_positive -> Mark_negative - | Mark_negative -> Mark_positive - | Mark_neither -> Mark_neither - -let mark_positive = function - | Mark_both | Mark_positive -> true - | Mark_negative | Mark_neither -> false - -(* All functions "blah env x1 x2" check that x1 is included in x2, - i.e. that x1 is the type of an implementation that fulfills the - specification x2. If not, Error is raised with a backtrace of the error. *) - -(* Inclusion between value descriptions *) - -let value_descriptions ~loc env ~mark subst id vd1 vd2 = - Cmt_format.record_value_dependency vd1 vd2; - if mark_positive mark then - Env.mark_value_used vd1.val_uid; - let vd2 = Subst.value_description subst vd2 in - try - Ok (Includecore.value_descriptions ~loc env (Ident.name id) vd1 vd2) - with Includecore.Dont_match err -> - Error Error.(Core (Value_descriptions (diff vd1 vd2 err))) - -(* Inclusion between type declarations *) - -let type_declarations ~loc env ~mark ?old_env:_ subst id decl1 decl2 = - let mark = mark_positive mark in - if mark then - Env.mark_type_used decl1.type_uid; - let decl2 = Subst.type_declaration subst decl2 in - match - Includecore.type_declarations ~loc env ~mark - (Ident.name id) decl1 (Path.Pident id) decl2 - with - | None -> Ok Tcoerce_none - | Some err -> - Error Error.(Core(Type_declarations (diff decl1 decl2 err))) - -(* Inclusion between extension constructors *) - -let extension_constructors ~loc env ~mark subst id ext1 ext2 = - let mark = mark_positive mark in - let ext2 = Subst.extension_constructor subst ext2 in - match Includecore.extension_constructors ~loc env ~mark id ext1 ext2 with - | None -> Ok Tcoerce_none - | Some err -> - Error Error.(Core(Extension_constructors(diff ext1 ext2 err))) - -(* Inclusion between class declarations *) - -let class_type_declarations ~loc ~old_env:_ env subst decl1 decl2 = - let decl2 = Subst.cltype_declaration subst decl2 in - match Includeclass.class_type_declarations ~loc env decl1 decl2 with - [] -> Ok Tcoerce_none - | reason -> - Error Error.(Core(Class_type_declarations(diff decl1 decl2 reason))) - -let class_declarations ~old_env:_ env subst decl1 decl2 = - let decl2 = Subst.class_declaration subst decl2 in - match Includeclass.class_declarations env decl1 decl2 with - [] -> Ok Tcoerce_none - | reason -> - Error Error.(Core(Class_declarations(diff decl1 decl2 reason))) + type pos = + | Strictly_positive + (** Strictly positive positions are notable for tools since they are the + the case where we match a implementation definition with an interface + declaration. Oherwise in the positive case we are matching + declatations inside functor arguments at even level of nesting.*) + | Positive + | Negative + + +(** + When checking inclusion, the [Directionality.t] type tracks the + subtyping direction at the syntactic level. + + The [posivity] field is used in the [cmt_declaration_dependencies] to + distinguish between directed and undirected edges, and to avoid recording + matched declarations twice. + + The [mark_as_used] field describes if we should record only positive use, + any use (because there is no clear implementation side), or none (because we + are inside an auxiliary check function.) + + The [in_eq] field is [true] when we are checking both directions inside of + module types which allows optimizing module type equality checks. The module + subtyping relation [A <: B] checks that [A.T = B.T] when [A] and [B] define a + module type [T]. The relation [A.T = B.T] is equivalent to [(A.T <: B.T) and + (B.T <: A.T)], but checking both recursively would lead to an exponential + slowdown (see #10598 and #10616). To avoid this issue, when [in_eq] is + [true], we compute a coarser relation [A << B] which is the same as [A <: B] + except that module types [T] are checked only for [A.T << B.T] and not the + reverse. Thus, we can implement a cheap module type equality check [A.T = + B.T] by computing [(A.T << B.T) and (B.T << A.T)], avoiding the exponential + slowdown described above. +*) + type t = { + in_eq:bool; + mark_as_used:mark; + pos:pos; + } + + let strictly_positive ~mark ~both = + let mark_as_used = + match mark, both with + | true, true -> Mark_both + | true, false -> Mark_positive + | false, _ -> Mark_neither + in + { in_eq=false; pos=Strictly_positive; mark_as_used } + + let unknown ~mark = + let mark_as_used = if mark then Mark_both else Mark_neither in + { in_eq=false; pos=Positive; mark_as_used } + + let negate_pos = function + | Positive | Strictly_positive -> Negative + | Negative -> Positive + + let negate d = { d with pos = negate_pos d.pos } + + let at_most_positive = function + | Strictly_positive -> Positive + | Positive | Negative as non_strict -> non_strict + + let enter_eq d = + { + in_eq = true; + pos = at_most_positive d.pos; + mark_as_used = d.mark_as_used + } + + let mark_as_used d = match d.mark_as_used with + | Mark_neither -> false + | Mark_both -> true + | Mark_positive -> + match d.pos with + | Positive | Strictly_positive -> true + | Negative -> false + +end + +module Core_inclusion = struct + (* All functions "blah env x1 x2" check that x1 is included in x2, + i.e. that x1 is the type of an implementation that fulfills the + specification x2. If not, Error is raised with a backtrace of the error. *) + + (* Inclusion between value descriptions *) + + let value_descriptions ~loc env ~direction subst id vd1 vd2 = + if Directionality.mark_as_used direction then + Env.mark_value_used vd1.val_uid; + let vd2 = Subst.value_description subst vd2 in + try + Ok (Includecore.value_descriptions ~loc env (Ident.name id) vd1 vd2) + with Includecore.Dont_match err -> + Error Error.(Core (Value_descriptions (diff vd1 vd2 err))) + + (* Inclusion between type declarations *) + + let type_declarations ~loc env ~direction subst id decl1 decl2 = + let mark = Directionality.mark_as_used direction in + if mark then + Env.mark_type_used decl1.type_uid; + let decl2 = Subst.type_declaration subst decl2 in + match + Includecore.type_declarations ~loc env ~mark + (Ident.name id) decl1 (Path.Pident id) decl2 + with + | None -> Ok Tcoerce_none + | Some err -> + Error Error.(Core(Type_declarations (diff decl1 decl2 err))) + + (* Inclusion between extension constructors *) + + let extension_constructors ~loc env ~direction subst id ext1 ext2 = + let mark = Directionality.mark_as_used direction in + let ext2 = Subst.extension_constructor subst ext2 in + match Includecore.extension_constructors ~loc env ~mark id ext1 ext2 with + | None -> Ok Tcoerce_none + | Some err -> + Error Error.(Core(Extension_constructors(diff ext1 ext2 err))) + + (* Inclusion between class declarations *) + + let class_type_declarations ~loc env ~direction:_ subst _id decl1 decl2 = + let decl2 = Subst.cltype_declaration subst decl2 in + match Includeclass.class_type_declarations ~loc env decl1 decl2 with + [] -> Ok Tcoerce_none + | reason -> + Error Error.(Core(Class_type_declarations(diff decl1 decl2 reason))) + + let class_declarations ~loc:_ env ~direction:_ subst _id decl1 decl2 = + let decl2 = Subst.class_declaration subst decl2 in + match Includeclass.class_declarations env decl1 decl2 with + [] -> Ok Tcoerce_none + | reason -> + Error Error.(Core(Class_declarations(diff decl1 decl2 reason))) +end (* Expand a module type identifier when possible *) @@ -308,10 +389,10 @@ let rec print_coercion ppf c = print_coercion out | Tcoerce_primitive {pc_desc; pc_env = _; pc_type} -> pr "prim %s@ (%a)" pc_desc.Primitive.prim_name - Printtyp.raw_type_expr pc_type + Rawprinttyp.type_expr pc_type | Tcoerce_alias (_, p, c) -> pr "@[<2>alias %a@ (%a)@]" - Printtyp.path p + (Format_doc.compat Printtyp.Doc.path) p print_coercion c and print_coercion2 ppf (n, c) = Format.fprintf ppf "@[%d,@ %a@]" n print_coercion c @@ -349,16 +430,16 @@ let retrieve_functor_params env mty = | Mty_ident p as res -> begin match expand_modtype_path env p with | Some mty -> retrieve_functor_params before env mty - | None -> List.rev before, res + | None -> { Error.params = List.rev before; res } end | Mty_alias p as res -> begin match expand_module_alias ~strengthen:false env p with | Ok mty -> retrieve_functor_params before env mty - | Error _ -> List.rev before, res + | Error _ -> { Error.params = List.rev before; res } end | Mty_functor (p, res) -> retrieve_functor_params (p :: before) env res - | Mty_signature _ as res -> List.rev before, res - | Mty_for_hole as res -> List.rev before, res + | Mty_signature _ as res -> { Error.params = List.rev before; res } + | Mty_for_hole as res -> { Error.params = List.rev before; res } in retrieve_functor_params [] env mty @@ -407,30 +488,33 @@ module Sign_diff = struct } end -(** - In the group of mutual functions below, the [~in_eq] argument is [true] when - we are in fact checking equality of module types. - - The module subtyping relation [A <: B] checks that [A.T = B.T] when [A] - and [B] define a module type [T]. The relation [A.T = B.T] is equivalent - to [(A.T <: B.T) and (B.T <: A.T)], but checking both recursively would lead - to an exponential slowdown (see #10598 and #10616). - To avoid this issue, when [~in_eq] is [true], we compute a coarser relation - [A << B] which is the same as [A <: B] except that module types [T] are - checked only for [A.T << B.T] and not the reverse. - Thus, we can implement a cheap module type equality check [A.T = B.T] by - computing [(A.T << B.T) and (B.T << A.T)], avoiding the exponential slowdown - described above. -*) +(** Core type system subtyping-like relation that we want to lift at the module + level. We have two relations that we want to lift: -let rec modtypes ~in_eq ~loc env ~mark subst mty1 mty2 shape = - match try_modtypes ~in_eq ~loc env ~mark subst mty1 mty2 shape with + - the normal subtyping relation [<:]. + - the coarse-grain consistency relation [C], which is defined by + [d1 C d2] if there is an environment [E] such that [E |- d1 <: d2]. *) +type 'a core_incl = + loc:Location.t -> Env.t -> direction:Directionality.t -> Subst.t -> Ident.t -> + 'a -> 'a -> (module_coercion, Error.sigitem_symptom) result + +type core_relation = { + value_descriptions: Types.value_description core_incl; + type_declarations: Types.type_declaration core_incl; + extension_constructors: Types.extension_constructor core_incl; + class_declarations: Types.class_declaration core_incl; + class_type_declarations: Types.class_type_declaration core_incl; +} + + +let rec modtypes ~core ~direction ~loc env subst mty1 mty2 shape = + match try_modtypes ~core ~direction ~loc env subst mty1 mty2 shape with | Ok _ as ok -> ok | Error reason -> let mty2 = Subst.modtype Make_local subst mty2 in Error Error.(diff mty1 mty2 reason) -and try_modtypes ~in_eq ~loc env ~mark subst mty1 mty2 orig_shape = +and try_modtypes ~core ~direction ~loc env subst mty1 mty2 orig_shape = match mty1, mty2 with | (Mty_alias p1, Mty_alias p2) -> if Env.is_functor_arg p2 env then @@ -448,8 +532,8 @@ and try_modtypes ~in_eq ~loc env ~mark subst mty1 mty2 orig_shape = begin match expand_module_alias ~strengthen:false env p1 with | Error e -> Error (Error.Mt_core e) | Ok mty1 -> - match strengthened_modtypes ~in_eq ~loc ~aliasable:true env ~mark - subst mty1 p1 mty2 orig_shape + match strengthened_modtypes ~core ~direction ~loc ~aliasable:true + env subst mty1 p1 mty2 orig_shape with | Ok _ as x -> x | Error reason -> Error (Error.After_alias_expansion reason) @@ -462,39 +546,41 @@ and try_modtypes ~in_eq ~loc env ~mark subst mty1 mty2 orig_shape = else begin match expand_modtype_path env p1, expand_modtype_path env p2 with | Some mty1, Some mty2 -> - try_modtypes ~in_eq ~loc env ~mark subst mty1 mty2 orig_shape + try_modtypes ~core ~direction ~loc env subst mty1 mty2 orig_shape | None, _ | _, None -> Error (Error.Mt_core Abstract_module_type) end | (Mty_ident p1, _) -> let p1 = Env.normalize_modtype_path env p1 in begin match expand_modtype_path env p1 with | Some p1 -> - try_modtypes ~in_eq ~loc env ~mark subst p1 mty2 orig_shape + try_modtypes ~core ~direction ~loc env subst p1 mty2 orig_shape | None -> Error (Error.Mt_core Abstract_module_type) end | (_, Mty_ident p2) -> let p2 = Env.normalize_modtype_path env (Subst.modtype_path subst p2) in begin match expand_modtype_path env p2 with - | Some p2 -> try_modtypes ~in_eq ~loc env ~mark subst mty1 p2 orig_shape + | Some p2 -> + try_modtypes ~core ~direction ~loc env subst mty1 p2 orig_shape | None -> begin match mty1 with | Mty_functor _ -> - let params1 = retrieve_functor_params env mty1 in - let d = Error.sdiff params1 ([],mty2) in - Error Error.(Functor (Params d)) + Error.functor_params + (retrieve_functor_params env mty1) + { params = []; res=mty2 } | _ -> Error Error.(Mt_core Not_an_identifier) end end | (Mty_signature sig1, Mty_signature sig2) -> begin match - signatures ~in_eq ~loc env ~mark subst sig1 sig2 orig_shape + signatures ~core ~direction ~loc env subst sig1 sig2 orig_shape with | Ok _ as ok -> ok | Error e -> Error (Error.Signature e) end | Mty_functor (param1, res1), Mty_functor (param2, res2) -> let cc_arg, env, subst = - functor_param ~in_eq ~loc env ~mark:(negate_mark mark) + let direction = Directionality.negate direction in + functor_param ~core ~direction ~loc env subst param1 param2 in let var, res_shape = @@ -502,16 +588,18 @@ and try_modtypes ~in_eq ~loc env ~mark subst mty1 mty2 orig_shape = | Some (var, res_shape) -> var, res_shape | None -> (* Using a fresh variable with a placeholder uid here is fine: users - will never try to jump to the definition of that variable. - If they try to jump to the parameter from inside the functor, - they will use the variable shape that is stored in the local - environment. *) + will never try to jump to the definition of that variable. If + they try to jump to the parameter from inside the functor, they + will use the variable shape that is stored in the local + environment. *) let var, shape_var = Shape.fresh_var Uid.internal_not_actually_unique in var, Shape.app orig_shape ~arg:shape_var in - let cc_res = modtypes ~in_eq ~loc env ~mark subst res1 res2 res_shape in + let cc_res = + modtypes ~core ~direction ~loc env subst res1 res2 res_shape + in begin match cc_arg, cc_res with | Ok Tcoerce_none, Ok (Tcoerce_none, final_res_shape) -> let final_shape = @@ -528,26 +616,22 @@ and try_modtypes ~in_eq ~loc env ~mark subst mty1 mty2 orig_shape = in Ok (Tcoerce_functor(cc_arg, cc_res), final_shape) | _, Error {Error.symptom = Error.Functor Error.Params res; _} -> - let got_params, got_res = res.got in - let expected_params, expected_res = res.expected in - let d = Error.sdiff - (param1::got_params, got_res) - (param2::expected_params, expected_res) in - Error Error.(Functor (Params d)) + let got = Error.cons_arg param1 res.got in + let expected = Error.cons_arg param2 res.expected in + Error.functor_params got expected | Error _, _ -> - let params1, res1 = retrieve_functor_params env res1 in - let params2, res2 = retrieve_functor_params env res2 in - let d = Error.sdiff (param1::params1, res1) (param2::params2, res2) in - Error Error.(Functor (Params d)) + let params env param res = + Error.cons_arg param (retrieve_functor_params env res) + in + Error.functor_params (params env param1 res1) (params env param2 res2) | Ok _, Error res -> Error Error.(Functor (Result res)) end | Mty_functor _, _ | _, Mty_functor _ -> - let params1 = retrieve_functor_params env mty1 in - let params2 = retrieve_functor_params env mty2 in - let d = Error.sdiff params1 params2 in - Error Error.(Functor (Params d)) + Error.functor_params + (retrieve_functor_params env mty1) + (retrieve_functor_params env mty2) | Mty_for_hole, _ | _, Mty_for_hole -> Ok (Tcoerce_none, Shape.dummy_mod) | _, Mty_alias _ -> @@ -555,7 +639,7 @@ and try_modtypes ~in_eq ~loc env ~mark subst mty1 mty2 orig_shape = (* Functor parameters *) -and functor_param ~in_eq ~loc env ~mark subst param1 param2 = +and functor_param ~core ~direction ~loc env subst param1 param2 = match param1, param2 with | Unit, Unit -> Ok Tcoerce_none, env, subst @@ -563,7 +647,7 @@ and functor_param ~in_eq ~loc env ~mark subst param1 param2 = let arg2' = Subst.modtype Keep subst arg2 in let cc_arg = match - modtypes ~in_eq ~loc env ~mark Subst.identity arg2' arg1 + modtypes ~core ~direction ~loc env Subst.identity arg2' arg1 Shape.dummy_mod with | Ok (cc, _) -> Ok cc @@ -591,27 +675,28 @@ and equate_one_functor_param subst env arg2' name1 name2 = | None, None -> env, subst -and strengthened_modtypes ~in_eq ~loc ~aliasable env ~mark +and strengthened_modtypes ~core ~direction ~loc ~aliasable env subst mty1 path1 mty2 shape = match mty1, mty2 with | Mty_ident p1, Mty_ident p2 when equal_modtype_paths env p1 subst p2 -> Ok (Tcoerce_none, shape) | _, _ -> let mty1 = Mtype.strengthen ~aliasable env mty1 path1 in - modtypes ~in_eq ~loc env ~mark subst mty1 mty2 shape + modtypes ~core ~direction ~loc env subst mty1 mty2 shape -and strengthened_module_decl ~loc ~aliasable env ~mark +and strengthened_module_decl ~core ~loc ~aliasable ~direction env subst md1 path1 md2 shape = match md1.md_type, md2.md_type with | Mty_ident p1, Mty_ident p2 when equal_modtype_paths env p1 subst p2 -> Ok (Tcoerce_none, shape) | _, _ -> let md1 = Mtype.strengthen_decl ~aliasable env md1 path1 in - modtypes ~in_eq:false ~loc env ~mark subst md1.md_type md2.md_type shape + modtypes ~core ~direction ~loc env subst md1.md_type md2.md_type shape + (* Inclusion between signatures *) -and signatures ~in_eq ~loc env ~mark subst sig1 sig2 mod_shape = +and signatures ~core ~direction ~loc env subst sig1 sig2 mod_shape = (* Environment used to check inclusion of components *) let new_env = Env.add_signature sig1 (Env.in_signature true env) in @@ -656,12 +741,12 @@ and signatures ~in_eq ~loc env ~mark subst sig1 sig2 mod_shape = Return a coercion list indicating, for all run-time components of sig2, the position of the matching run-time components of sig1 and the coercion to be applied to it. *) - let rec pair_components subst paired unpaired = function + let rec pair_components ~core subst paired unpaired = function [] -> let open Sign_diff in let d = - signature_components ~in_eq ~loc env ~mark new_env subst mod_shape - Shape.Map.empty + signature_components ~core ~direction ~loc env new_env subst + mod_shape Shape.Map.empty (List.rev paired) in begin match unpaired, d.errors, d.runtime_coercions, d.leftovers with @@ -678,6 +763,7 @@ and signatures ~in_eq ~loc env ~mark subst sig1 sig2 mod_shape = | missings, incompatibles, runtime_coercions, leftovers -> Error { Error.env=new_env; + subst; missings; incompatibles; oks=runtime_coercions; @@ -705,36 +791,37 @@ and signatures ~in_eq ~loc env ~mark subst sig1 sig2 mod_shape = | Sig_module _ -> Subst.add_module id2 (Path.Pident id1) subst | Sig_modtype _ -> - Subst.add_modtype id2 (Mty_ident (Path.Pident id1)) subst + Subst.add_modtype id2 (Path.Pident id1) subst | Sig_value _ | Sig_typext _ | Sig_class _ | Sig_class_type _ -> subst in - pair_components new_subst + pair_components ~core new_subst ((item1, item2, pos1) :: paired) unpaired rem | exception Not_found -> let unpaired = if report then item2 :: unpaired else unpaired in - pair_components subst paired unpaired rem + pair_components ~core subst paired unpaired rem end in (* Do the pairing and checking, and return the final coercion *) - pair_components subst [] [] sig2 + pair_components ~core subst [] [] sig2 (* Inclusion between signature components *) -and signature_components ~in_eq ~loc old_env ~mark env subst +and signature_components ~core ~direction ~loc old_env env subst orig_shape shape_map paired = match paired with | [] -> Sign_diff.{ empty with shape_map } | (sigi1, sigi2, pos) :: rem -> let shape_modified = ref false in - let id, item, shape_map, present_at_runtime = + let id, item, paired_uids, shape_map, present_at_runtime = match sigi1, sigi2 with | Sig_value(id1, valdecl1, _) ,Sig_value(_id2, valdecl2, _) -> let item = - value_descriptions ~loc env ~mark subst id1 valdecl1 valdecl2 + core.value_descriptions ~loc ~direction env subst id1 + valdecl1 valdecl2 in let item = mark_error_as_recoverable item in let present_at_runtime = match valdecl2.val_kind with @@ -742,31 +829,35 @@ and signature_components ~in_eq ~loc old_env ~mark env subst | _ -> true in let shape_map = Shape.Map.add_value_proj shape_map id1 orig_shape in - id1, item, shape_map, present_at_runtime + let paired_uids = (valdecl1.val_uid, valdecl2.val_uid) in + id1, item, paired_uids, shape_map, present_at_runtime | Sig_type(id1, tydec1, _, _), Sig_type(_id2, tydec2, _, _) -> let item = - type_declarations ~loc ~old_env env ~mark subst id1 tydec1 tydec2 + core.type_declarations ~loc ~direction env subst id1 tydec1 tydec2 in let item = mark_error_as_unrecoverable item in + (* Right now we don't filter hidden constructors / labels from the + shape. *) let shape_map = Shape.Map.add_type_proj shape_map id1 orig_shape in - id1, item, shape_map, false + id1, item, (tydec1.type_uid, tydec2.type_uid), shape_map, false | Sig_typext(id1, ext1, _, _), Sig_typext(_id2, ext2, _, _) -> let item = - extension_constructors ~loc env ~mark subst id1 ext1 ext2 + core.extension_constructors ~loc ~direction env subst id1 + ext1 ext2 in let item = mark_error_as_unrecoverable item in let shape_map = Shape.Map.add_extcons_proj shape_map id1 orig_shape in - id1, item, shape_map, true + id1, item, (ext1.ext_uid, ext2.ext_uid), shape_map, true | Sig_module(id1, pres1, mty1, _, _), Sig_module(_, pres2, mty2, _, _) -> begin let orig_shape = Shape.(proj orig_shape (Item.module_ id1)) in let item = - module_declarations ~in_eq ~loc env ~mark subst id1 mty1 mty2 - orig_shape + module_declarations ~core ~direction ~loc env subst id1 + mty1 mty2 orig_shape in let item, shape_map = match item with @@ -790,35 +881,37 @@ and signature_components ~in_eq ~loc old_env ~mark env subst | Mp_absent, Mp_present, _ -> assert false in let item = mark_error_as_unrecoverable item in - id1, item, shape_map, present_at_runtime + let paired_uids = (mty1.md_uid, mty2.md_uid) in + id1, item, paired_uids, shape_map, present_at_runtime end | Sig_modtype(id1, info1, _), Sig_modtype(_id2, info2, _) -> let item = - modtype_infos ~in_eq ~loc env ~mark subst id1 info1 info2 + modtype_infos ~core ~direction ~loc env subst id1 info1 info2 in let shape_map = Shape.Map.add_module_type_proj shape_map id1 orig_shape in let item = mark_error_as_unrecoverable item in - id1, item, shape_map, false + id1, item, (info1.mtd_uid, info2.mtd_uid), shape_map, false | Sig_class(id1, decl1, _, _), Sig_class(_id2, decl2, _, _) -> let item = - class_declarations ~old_env env subst decl1 decl2 + core.class_declarations ~loc ~direction env subst id1 decl1 decl2 in let shape_map = Shape.Map.add_class_proj shape_map id1 orig_shape in let item = mark_error_as_unrecoverable item in - id1, item, shape_map, true + id1, item, (decl1.cty_uid, decl2.cty_uid), shape_map, true | Sig_class_type(id1, info1, _, _), Sig_class_type(_id2, info2, _, _) -> let item = - class_type_declarations ~loc ~old_env env subst info1 info2 + core.class_type_declarations ~loc ~direction env subst id1 + info1 info2 in let item = mark_error_as_unrecoverable item in let shape_map = Shape.Map.add_class_type_proj shape_map id1 orig_shape in - id1, item, shape_map, false + id1, item, (info1.clty_uid, info2.clty_uid), shape_map, false | _ -> assert false in @@ -826,6 +919,25 @@ and signature_components ~in_eq ~loc old_env ~mark env subst let first = match item with | Ok x -> + begin match direction with + | { Directionality.in_eq = true; pos = Negative } + | { Directionality.mark_as_used = Mark_neither; _ } -> + (* We do not store paired uids when checking for reverse + module-type inclusion as it would introduce duplicates. *) + () + | { Directionality.pos; _} -> + let paired_uids = + let elt1, elt2 = paired_uids in + match pos with + | Negative -> + (Cmt_format.Declaration_to_declaration, elt2, elt1) + | Positive -> + (Cmt_format.Declaration_to_declaration, elt1, elt2) + | Strictly_positive -> + (Cmt_format. Definition_to_declaration, elt1, elt2) + in + Cmt_format.record_declaration_dependency paired_uids + end; let runtime_coercions = if present_at_runtime then [pos,x] else [] in @@ -839,13 +951,13 @@ and signature_components ~in_eq ~loc old_env ~mark env subst in let rest = if continue then - signature_components ~in_eq ~loc old_env ~mark env subst + signature_components ~core ~direction ~loc old_env env subst orig_shape shape_map rem else Sign_diff.{ empty with leftovers=rem } in Sign_diff.merge first rest -and module_declarations ~in_eq ~loc env ~mark subst id1 md1 md2 orig_shape = +and module_declarations ~direction ~loc env subst id1 md1 md2 orig_shape = Builtin_attributes.check_alerts_inclusion ~def:md1.md_loc ~use:md2.md_loc @@ -853,14 +965,14 @@ and module_declarations ~in_eq ~loc env ~mark subst id1 md1 md2 orig_shape = md1.md_attributes md2.md_attributes (Ident.name id1); let p1 = Path.Pident id1 in - if mark_positive mark then + if Directionality.mark_as_used direction then Env.mark_module_used md1.md_uid; - strengthened_modtypes ~in_eq ~loc ~aliasable:true env ~mark subst + strengthened_modtypes ~direction ~loc ~aliasable:true env subst md1.md_type p1 md2.md_type orig_shape (* Inclusion between module type specifications *) -and modtype_infos ~in_eq ~loc env ~mark subst id info1 info2 = +and modtype_infos ~core ~direction ~loc env subst id info1 info2 = Builtin_attributes.check_alerts_inclusion ~def:info1.mtd_loc ~use:info2.mtd_loc @@ -873,28 +985,30 @@ and modtype_infos ~in_eq ~loc env ~mark subst id info1 info2 = (None, None) -> Ok Tcoerce_none | (Some _, None) -> Ok Tcoerce_none | (Some mty1, Some mty2) -> - check_modtype_equiv ~in_eq ~loc env ~mark mty1 mty2 + check_modtype_equiv ~core ~direction ~loc env mty1 mty2 | (None, Some mty2) -> let mty1 = Mty_ident(Path.Pident id) in - check_modtype_equiv ~in_eq ~loc env ~mark mty1 mty2 in + check_modtype_equiv ~core ~direction ~loc env mty1 mty2 in match r with | Ok _ as ok -> ok | Error e -> Error Error.(Module_type_declaration (diff info1 info2 e)) -and check_modtype_equiv ~in_eq ~loc env ~mark mty1 mty2 = +and check_modtype_equiv ~core ~direction ~loc env mty1 mty2 = + let nested_eq = direction.Directionality.in_eq in + let direction = Directionality.enter_eq direction in let c1 = - modtypes ~in_eq:true ~loc env ~mark Subst.identity mty1 mty2 Shape.dummy_mod + modtypes ~core ~direction ~loc env Subst.identity mty1 mty2 Shape.dummy_mod in let c2 = (* For nested module type paths, we check only one side of the equivalence: the outer module type is the one responsible for checking the other side of the equivalence. *) - if in_eq then None + if nested_eq then None else - let mark = negate_mark mark in + let direction = Directionality.negate direction in Some ( - modtypes ~in_eq:true ~loc env ~mark Subst.identity + modtypes ~core ~direction ~loc env Subst.identity mty2 mty1 Shape.dummy_mod ) in @@ -920,22 +1034,54 @@ let can_alias env path = in no_apply path && not (Env.is_functor_arg path env) - +let core_inclusion = Core_inclusion.{ + type_declarations; + value_descriptions; + extension_constructors; + class_type_declarations; + class_declarations; +} + +let core_consistency = + let type_declarations ~loc:_ env ~direction:_ _ _ d1 d2 = + match Includecore.type_declarations_consistency env d1 d2 with + | None -> Ok Tcoerce_none + | Some err -> Error Error.(Core(Type_declarations (diff d1 d2 err))) + in + let value_descriptions ~loc:_ env ~direction:_ _ _ vd1 vd2 = + match Includecore.value_descriptions_consistency env vd1 vd2 with + | x -> Ok x + | exception Includecore.Dont_match err -> + Error Error.(Core (Value_descriptions (diff vd1 vd2 err))) + in + let accept ~loc:_ _env ~direction:_ _subst _id _d1 _d2 = Ok Tcoerce_none in + { + type_declarations; + value_descriptions; + class_declarations=accept; + class_type_declarations=accept; + extension_constructors=accept; + } type explanation = Env.t * Error.all exception Error of explanation +type application_name = + | Anonymous_functor + | Full_application_path of Longident.t + | Named_leftmost_functor of Longident.t exception Apply_error of { loc : Location.t ; env : Env.t ; - lid_app : Longident.t option ; + app_name : application_name ; mty_f : module_type ; args : (Error.functor_arg_descr * module_type) list ; } let check_modtype_inclusion_raw ~loc env mty1 path1 mty2 = let aliasable = can_alias env path1 in - strengthened_modtypes ~in_eq:false ~loc ~aliasable env ~mark:Mark_both + let direction = Directionality.unknown ~mark:true in + strengthened_modtypes ~core:core_inclusion ~direction ~loc ~aliasable env Subst.identity mty1 path1 mty2 Shape.dummy_mod |> Result.map fst @@ -958,8 +1104,8 @@ let check_functor_application_in_path in let mty_f = (Env.find_module f0_path env).md_type in let args = List.map prepare_arg args in - let lid_app = Some lid_whole_app in - raise (Apply_error {loc; env; lid_app; mty_f; args}) + let app_name = Full_application_path lid_whole_app in + raise (Apply_error {loc; env; app_name; mty_f; args}) else raise Not_found @@ -971,9 +1117,11 @@ let () = interface. *) let compunit env ~mark impl_name impl_sig intf_name intf_sig unit_shape = + let loc = Location.in_file impl_name in + let direction = Directionality.strictly_positive ~mark ~both:false in match - signatures ~in_eq:false ~loc:(Location.in_file impl_name) env ~mark - Subst.identity impl_sig intf_sig unit_shape + signatures ~core:core_inclusion ~direction ~loc env Subst.identity + impl_sig intf_sig unit_shape with Result.Error reasons -> let cdiff = Error.In_Compilation_unit(Error.diff impl_name intf_name reasons) in @@ -1030,8 +1178,8 @@ module Functor_inclusion_diff = struct | None -> None | Some res -> match retrieve_functor_params env res with - | [], _ -> None - | params, res -> + | { params = []; _ } -> None + | { params; res} -> let more = Array.of_list params in Some (keep_expansible_param res, more) @@ -1071,12 +1219,14 @@ module Functor_inclusion_diff = struct in expand_params { st with env; subst } - let diff env (l1,res1) (l2,_) = + type inclusion_env = { i_env:Env.t; i_subst:Subst.t } + let diff {i_env=env; i_subst=subst} (l1,res1) (l2,_) = let module Compute = Diff.Left_variadic(struct let test st mty1 mty2 = let loc = Location.none in let res, _, _ = - functor_param ~in_eq:false ~loc st.env ~mark:Mark_neither + let direction=Directionality.unknown ~mark:false in + functor_param ~core:core_inclusion ~direction ~loc st.env st.subst mty1 mty2 in res @@ -1087,7 +1237,7 @@ module Functor_inclusion_diff = struct let param1 = Array.of_list l1 in let param2 = Array.of_list l2 in let state = - { env; subst = Subst.identity; res = keep_expansible_param res1} + { env; subst; res = keep_expansible_param res1} in Compute.diff state param1 param2 @@ -1136,7 +1286,7 @@ module Functor_app_diff = struct | Insert(Named(Some param, param_ty)) | Change(_, Named(Some param, param_ty), _ ) -> (* Change is Delete + Insert: we add the Inserted parameter to the - environnement to track equalities with external components that the + environment to track equalities with external components that the parameter might add. *) let mty = Subst.modtype Keep st.subst param_ty in let env = Env.add_module ~arg:true param Mp_present mty st.env in @@ -1160,7 +1310,7 @@ module Functor_app_diff = struct I.expand_params { st with env; res} let diff env ~f ~args = - let params, res = retrieve_functor_params env f in + let {Error.params; res} = retrieve_functor_params env f in let module Compute = Diff.Right_variadic(struct let update = update let test (state:Defs.state) (arg,arg_mty) param = @@ -1170,9 +1320,12 @@ module Functor_app_diff = struct | Unit, Named _ | (Anonymous | Named _), Unit -> Result.Error (Error.Incompatible_params(arg,param)) | ( Anonymous | Named _ | Empty_struct ), Named (_, param) -> + let direction=Directionality.unknown ~mark:false in match - modtypes ~in_eq:false ~loc state.env ~mark:Mark_neither - state.subst arg_mty param Shape.dummy_mod + modtypes + ~core:core_inclusion ~direction ~loc + state.env state.subst arg_mty param + Shape.dummy_mod with | Error mty -> Result.Error (Error.Mismatch mty) | Ok (cc, _) -> Ok cc @@ -1192,37 +1345,67 @@ end (* Hide the context and substitution parameters to the outside world *) -let modtypes_with_shape ~shape ~loc env ~mark mty1 mty2 = - match modtypes ~in_eq:false ~loc env ~mark - Subst.identity mty1 mty2 shape +let modtypes_constraint ~shape ~loc env ~mark mty1 mty2 = + (* modtypes with shape is used when typing module expressions in [Typemod] *) + let direction = Directionality.strictly_positive ~mark ~both:true in + match + modtypes ~core:core_inclusion ~direction ~loc env Subst.identity + mty1 mty2 shape with | Ok (cc, shape) -> cc, shape | Error reason -> raise (Error (env, Error.(In_Module_type reason))) +let modtypes_consistency ~loc env mty1 mty2 = + let direction = Directionality.unknown ~mark:false in + match + modtypes ~core:core_consistency ~direction ~loc env Subst.identity + mty1 mty2 Shape.dummy_mod + with + | Ok _ -> () + | Error reason -> raise (Error (env, Error.(In_Module_type reason))) + let modtypes ~loc env ~mark mty1 mty2 = - match modtypes ~in_eq:false ~loc env ~mark - Subst.identity mty1 mty2 Shape.dummy_mod + let direction = Directionality.unknown ~mark in + match + modtypes ~core:core_inclusion ~direction ~loc env Subst.identity + mty1 mty2 Shape.dummy_mod with | Ok (cc, _) -> cc | Error reason -> raise (Error (env, Error.(In_Module_type reason))) -let signatures env ~mark sig1 sig2 = - match signatures ~in_eq:false ~loc:Location.none env ~mark - Subst.identity sig1 sig2 Shape.dummy_mod +let gen_signatures env ~direction sig1 sig2 = + match + signatures + ~core:core_inclusion ~direction ~loc:Location.none env + Subst.identity sig1 sig2 Shape.dummy_mod with | Ok (cc, _) -> cc | Error reason -> raise (Error(env,Error.(In_Signature reason))) +let signatures env ~mark sig1 sig2 = + let direction = Directionality.unknown ~mark in + gen_signatures env ~direction sig1 sig2 + +let check_implementation env impl intf = + let direction = + Directionality.strictly_positive ~mark:true ~both:false + in + ignore (gen_signatures env ~direction impl intf) + let type_declarations ~loc env ~mark id decl1 decl2 = - match type_declarations ~loc env ~mark Subst.identity id decl1 decl2 with + let direction = Directionality.unknown ~mark in + match Core_inclusion.type_declarations ~loc env ~direction + Subst.identity id decl1 decl2 + with | Ok _ -> () | Error (Error.Core reason) -> raise (Error(env,Error.(In_Type_declaration(id,reason)))) | Error _ -> assert false let strengthened_module_decl ~loc ~aliasable env ~mark md1 path1 md2 = - match strengthened_module_decl ~loc ~aliasable env ~mark Subst.identity - md1 path1 md2 Shape.dummy_mod with + let direction = Directionality.unknown ~mark in + match strengthened_module_decl ~core:core_inclusion ~loc ~aliasable ~direction + env Subst.identity md1 path1 md2 Shape.dummy_mod with | Ok (x, _shape) -> x | Error mdiff -> raise (Error(env,Error.(In_Module_type mdiff))) @@ -1234,7 +1417,10 @@ let expand_module_alias ~strengthen env path = raise (Error(env,In_Expansion(Error.Unbound_module_path path))) let check_modtype_equiv ~loc env id mty1 mty2 = - match check_modtype_equiv ~in_eq:false ~loc env ~mark:Mark_both mty1 mty2 with + let direction = Directionality.unknown ~mark:true in + match + check_modtype_equiv ~core:core_inclusion ~loc ~direction env mty1 mty2 + with | Ok _ -> () | Error e -> raise (Error(env, diff --git a/ocamlmerlin_mlx/ocaml/typing/includemod.mli b/ocamlmerlin_mlx/ocaml/typing/includemod.mli index d5b2ee9..3d3129b 100644 --- a/ocamlmerlin_mlx/ocaml/typing/includemod.mli +++ b/ocamlmerlin_mlx/ocaml/typing/includemod.mli @@ -18,18 +18,6 @@ open Typedtree open Types -(** Type describing which arguments of an inclusion to consider as used - for the usage warnings. [Mark_both] is the default. *) -type mark = - | Mark_both - (** Mark definitions used from both arguments *) - | Mark_positive - (** Mark definitions used from the positive (first) argument *) - | Mark_negative - (** Mark definitions used from the negative (second) argument *) - | Mark_neither - (** Do not mark definitions used from either argument *) - module Error: sig type ('elt,'explanation) diff = { @@ -89,10 +77,13 @@ module Error: sig (Types.functor_parameter, Ident.t) functor_param_symptom and functor_params_diff = - (Types.functor_parameter list * Types.module_type) core_diff + functor_params_info core_diff + and functor_params_info = + { params: functor_parameter list; res: module_type } and signature_symptom = { env: Env.t; + subst: Subst.t; missings: Types.signature_item list; incompatibles: (Ident.t * sigitem_symptom) list; oks: (int * Typedtree.module_coercion) list; @@ -152,15 +143,32 @@ val is_runtime_component: Types.signature_item -> bool (* Typechecking *) val modtypes: - loc:Location.t -> Env.t -> mark:mark -> + loc:Location.t -> Env.t -> mark:bool -> module_type -> module_type -> module_coercion -val modtypes_with_shape: - shape:Shape.t -> loc:Location.t -> Env.t -> mark:mark -> +val modtypes_consistency: + loc:Location.t -> Env.t -> module_type -> module_type -> unit + +(** [modtypes_constraint ~shape ~loc env ~mark exp_modtype constraint_modtype] + checks that [exp_modtype] is a subtype of [constraint_modtype], and returns + the module coercion and the shape of the constrained module. + + It also marks as used paired items in positive position in [exp_modtype], + and also paired items in negative position in [constraint_modtype]. + + This marking in negative position allows to raise an [unused item] warning + whenever an item in a functor parameter in [constraint_modtype] does not + exist in [exp_modtypes]. This behaviour differs from the one in + {!check_implementation} and {!compunit} which assumes that is not + appropriate to raise warning about the interface file while typechecking the + implementation file. +*) +val modtypes_constraint: + shape:Shape.t -> loc:Location.t -> Env.t -> mark:bool -> module_type -> module_type -> module_coercion * Shape.t val strengthened_module_decl: - loc:Location.t -> aliasable:bool -> Env.t -> mark:mark -> + loc:Location.t -> aliasable:bool -> Env.t -> mark:bool -> module_declaration -> Path.t -> module_declaration -> module_coercion val check_modtype_inclusion : @@ -173,15 +181,17 @@ val check_modtype_inclusion : val check_modtype_equiv: loc:Location.t -> Env.t -> Ident.t -> module_type -> module_type -> unit -val signatures: Env.t -> mark:mark -> - signature -> signature -> module_coercion +val signatures: Env.t -> mark:bool -> signature -> signature -> module_coercion + +(** Check an implementation against an interface *) +val check_implementation: Env.t -> signature -> signature -> unit val compunit: - Env.t -> mark:mark -> string -> signature -> + Env.t -> mark:bool -> string -> signature -> string -> signature -> Shape.t -> module_coercion * Shape.t val type_declarations: - loc:Location.t -> Env.t -> mark:mark -> + loc:Location.t -> Env.t -> mark:bool -> Ident.t -> type_declaration -> type_declaration -> unit val print_coercion: Format.formatter -> module_coercion -> unit @@ -215,10 +225,16 @@ type pos = | Body of functor_parameter exception Error of explanation + +type application_name = + | Anonymous_functor (** [(functor (_:sig end) -> struct end)(Int)] *) + | Full_application_path of Longident.t (** [F(G(X).P)(Y)] *) + | Named_leftmost_functor of Longident.t (** [F(struct end)...(...)] *) + exception Apply_error of { loc : Location.t ; env : Env.t ; - lid_app : Longident.t option ; + app_name : application_name ; mty_f : module_type ; args : (Error.functor_arg_descr * Types.module_type) list ; } @@ -233,7 +249,8 @@ module Functor_inclusion_diff: sig type diff = (Types.functor_parameter, unit) Error.functor_param_symptom type state end - val diff: Env.t -> + type inclusion_env = { i_env:Env.t; i_subst:Subst.t } + val diff: inclusion_env -> Types.functor_parameter list * Types.module_type -> Types.functor_parameter list * Types.module_type -> Diffing.Define(Defs).patch diff --git a/ocamlmerlin_mlx/ocaml/typing/includemod_errorprinter.ml b/ocamlmerlin_mlx/ocaml/typing/includemod_errorprinter.ml index f72795c..9e2763b 100644 --- a/ocamlmerlin_mlx/ocaml/typing/includemod_errorprinter.ml +++ b/ocamlmerlin_mlx/ocaml/typing/includemod_errorprinter.ml @@ -13,7 +13,11 @@ (* *) (**************************************************************************) - +module Style = Misc.Style +module Fmt = Format_doc +type inclusion_env = Includemod.Functor_inclusion_diff.inclusion_env = + { i_env:Env.t; i_subst:Subst.t } + module Context = struct type pos = | Module of Ident.t @@ -33,28 +37,28 @@ module Context = struct let rec context ppf = function Module id :: rem -> - Format.fprintf ppf "@[<2>module %a%a@]" Printtyp.ident id args rem + Fmt.fprintf ppf "@[<2>module %a%a@]" Printtyp.Doc.ident id args rem | Modtype id :: rem -> - Format.fprintf ppf "@[<2>module type %a =@ %a@]" - Printtyp.ident id context_mty rem + Fmt.fprintf ppf "@[<2>module type %a =@ %a@]" + Printtyp.Doc.ident id context_mty rem | Body x :: rem -> - Format.fprintf ppf "functor (%s) ->@ %a" (argname x) context_mty rem + Fmt.fprintf ppf "(%s) ->@ %a" (argname x) context_mty rem | Arg x :: rem -> - Format.fprintf ppf "functor (%s : %a) -> ..." + Fmt.fprintf ppf "(%s : %a) -> ..." (argname x) context_mty rem | [] -> - Format.fprintf ppf "" + Fmt.fprintf ppf "" and context_mty ppf = function (Module _ | Modtype _) :: _ as rem -> - Format.fprintf ppf "@[<2>sig@ %a@;<1 -2>end@]" context rem + Fmt.fprintf ppf "@[<2>sig@ %a@;<1 -2>end@]" context rem | cxt -> context ppf cxt and args ppf = function Body x :: rem -> - Format.fprintf ppf "(%s)%a" (argname x) args rem + Fmt.fprintf ppf "(%s)%a" (argname x) args rem | Arg x :: rem -> - Format.fprintf ppf "(%s :@ %a) : ..." (argname x) context_mty rem + Fmt.fprintf ppf "(%s :@ %a) : ..." (argname x) context_mty rem | cxt -> - Format.fprintf ppf " :@ %a" context_mty cxt + Fmt.fprintf ppf " :@ %a" context_mty cxt and argname = function | Types.Unit -> "" | Types.Named (None, _) -> "_" @@ -63,21 +67,24 @@ module Context = struct let alt_pp ppf cxt = if cxt = [] then () else if List.for_all (function Module _ -> true | _ -> false) cxt then - Format.fprintf ppf "in module %a," Printtyp.path (path_of_context cxt) + Fmt.fprintf ppf ",@ in module %a" + (Style.as_inline_code Printtyp.Doc.path) (path_of_context cxt) else - Format.fprintf ppf "@[at position@ %a,@]" context cxt + Fmt.fprintf ppf ",@ @[at position@ %a@]" + (Style.as_inline_code context) cxt let pp ppf cxt = if cxt = [] then () else if List.for_all (function Module _ -> true | _ -> false) cxt then - Format.fprintf ppf "In module %a:@ " Printtyp.path (path_of_context cxt) + Fmt.fprintf ppf "In module %a:@ " + (Style.as_inline_code Printtyp.Doc.path) (path_of_context cxt) else - Format.fprintf ppf "@[At position@ %a@]@ " context cxt + Fmt.fprintf ppf "@[At position@ %a@]@ " + (Style.as_inline_code context) cxt end -module Illegal_permutation = struct - (** Extraction of information in case of illegal permutation - in a module type *) +module Runtime_coercion = struct + (** Extraction of a small change from a non-identity runtime coercion *) (** When examining coercions, we only have runtime component indices, we use thus a limited version of {!pos}. *) @@ -90,43 +97,50 @@ module Illegal_permutation = struct | None -> g y | Some _ as v -> v - (** We extract a lone transposition from a full tree of permutations. *) - let rec transposition_under path (coerc:Typedtree.module_coercion) = + type change = + | Transposition of int * int + | Primitive_coercion of string + | Alias_coercion of Path.t + + (** We extract a small change from a full coercion. *) + let rec first_change_under path (coerc:Typedtree.module_coercion) = match coerc with | Tcoerce_structure(c,_) -> either - (not_fixpoint path 0) c + (first_item_transposition path 0) c (first_non_id path 0) c | Tcoerce_functor(arg,res) -> either - (transposition_under (InArg::path)) arg - (transposition_under (InBody::path)) res + (first_change_under (InArg::path)) arg + (first_change_under (InBody::path)) res | Tcoerce_none -> None - | Tcoerce_alias _ | Tcoerce_primitive _ -> - (* these coercions are not inversible, and raise an error earlier when - checking for module type equivalence *) - assert false + | Tcoerce_alias _ | Tcoerce_primitive _ -> None + (* we search the first point which is not invariant at the current level *) - and not_fixpoint path pos = function + and first_item_transposition path pos = function | [] -> None | (n, _) :: q -> - if n = pos then - not_fixpoint path (pos+1) q + if n < 0 || n = pos then + (* when n < 0, this is not a transposition but a kind coercion, + which will be covered in the first_non_id case *) + first_item_transposition path (pos+1) q else - Some(List.rev path, pos, n) + Some(List.rev path, Transposition (pos, n)) (* we search the first item with a non-identity inner coercion *) and first_non_id path pos = function | [] -> None | (_, Typedtree.Tcoerce_none) :: q -> first_non_id path (pos + 1) q + | (_, Typedtree.Tcoerce_alias (_,p,_)) :: _ -> + Some (List.rev path, Alias_coercion p) + | (_, Typedtree.Tcoerce_primitive p) :: _ -> + let name = Primitive.byte_name p.pc_desc in + Some (List.rev path, Primitive_coercion name) | (_,c) :: q -> either - (transposition_under (Item pos :: path)) c + (first_change_under (Item pos :: path)) c (first_non_id path (pos + 1)) q - let transposition c = - match transposition_under [] c with - | None -> raise Not_found - | Some x -> x + let first_change c = first_change_under [] c let rec runtime_item k = function | [] -> raise Not_found @@ -163,23 +177,64 @@ module Illegal_permutation = struct let item mt k = Includemod.item_ident_name (runtime_item k mt) let pp_item ppf (id,_,kind) = - Format.fprintf ppf "%s %S" + Fmt.fprintf ppf "%s %a" (Includemod.kind_of_field_desc kind) - (Ident.name id) + Style.inline_code (Ident.name id) - let pp ctx_printer env ppf (mty,c) = + let illegal_permutation ctx_printer env ppf (mty,c) = + match first_change c with + | None | Some (_, (Primitive_coercion _ | Alias_coercion _)) -> + (* those kind coercions are not inversible, and raise an error earlier + when checking for module type equivalence *) + assert false + | Some (path, Transposition (k,l)) -> try - let p, k, l = transposition c in - let ctx, mt = find env p mty in - Format.fprintf ppf + let ctx, mt = find env path mty in + Fmt.fprintf ppf "@[Illegal permutation of runtime components in a module type.@ \ - @[For example,@ %a@]@ @[the %a@ and the %a are not in the same order@ \ + @[For example%a,@]@ @[the %a@ and the %a are not in the same order@ \ in the expected and actual module types.@]@]" ctx_printer ctx pp_item (item mt k) pp_item (item mt l) with Not_found -> (* this should not happen *) - Format.fprintf ppf + Fmt.fprintf ppf "Illegal permutation of runtime components in a module type." + let in_package_subtype ctx_printer env mty c ppf = + match first_change c with + | None -> + (* The coercion looks like the identity but was not simplified to + [Tcoerce_none], this only happens when the two first-class module + types differ by runtime size *) + Fmt.fprintf ppf + "The two first-class module types differ by their runtime size." + | Some (path, c) -> + try + let ctx, mt = find env path mty in + match c with + | Primitive_coercion prim_name -> + Fmt.fprintf ppf + "@[The two first-class module types differ by a coercion of@ \ + the primitive %a@ to a value%a.@]" + Style.inline_code prim_name + ctx_printer ctx + | Alias_coercion path -> + Fmt.fprintf ppf + "@[The two first-class module types differ by a coercion of@ \ + a module alias %a@ to a module%a.@]" + (Style.as_inline_code Printtyp.Doc.path) path + ctx_printer ctx + | Transposition (k,l) -> + Fmt.fprintf ppf + "@[@[The two first-class module types do not share@ \ + the same positions for runtime components.@]@ \ + @[For example,%a@ the %a@ occurs at the expected position of@ \ + the %a.@]@]" + ctx_printer ctx pp_item (item mt k) pp_item (item mt l) + with Not_found -> + Fmt.fprintf ppf + "@[The two packages types do not share@ \ + the@ same@ positions@ for@ runtime@ components.@]" + end @@ -199,7 +254,7 @@ let is_big obj = let show_loc msg ppf loc = let pos = loc.Location.loc_start in if List.mem pos.Lexing.pos_fname [""; "_none_"; "//toplevel//"] then () - else Format.fprintf ppf "@\n@[<2>%a:@ %s@]" Location.print_loc loc msg + else Fmt.fprintf ppf "@\n@[<2>%a:@ %s@]" Location.Doc.loc loc msg let show_locs ppf (loc1, loc2) = show_loc "Expected declaration" ppf loc2; @@ -207,10 +262,10 @@ let show_locs ppf (loc1, loc2) = let dmodtype mty = - let tmty = Printtyp.tree_of_modtype mty in - Format.dprintf "%a" !Oprint.out_module_type tmty + let tmty = Out_type.tree_of_modtype mty in + Fmt.dprintf "%a" !Oprint.out_module_type tmty -let space ppf () = Format.fprintf ppf "@ " +let space ppf () = Fmt.fprintf ppf "@ " (** In order to display a list of functor arguments in a compact format, @@ -259,8 +314,8 @@ module With_shorthand = struct let make side pos = match side with - | Got -> Format.sprintf "$S%d" pos - | Expected -> Format.sprintf "$T%d" pos + | Got -> Fmt.asprintf "$S%d" pos + | Expected -> Fmt.asprintf "$T%d" pos | Unneeded -> "..." (** Add shorthands to a patch *) @@ -306,60 +361,60 @@ module With_shorthand = struct (** Printing of arguments with shorthands *) let pp ppx = function | Original x -> ppx x - | Synthetic s -> Format.dprintf "%s" s.name + | Synthetic s -> Fmt.dprintf "%s" s.name let pp_orig ppx = function | Original x | Synthetic { item=x; _ } -> ppx x let definition x = match functor_param x with - | Unit -> Format.dprintf "()" + | Unit -> Fmt.dprintf "()" | Named(_,short_mty) -> match short_mty with | Original mty -> dmodtype mty | Synthetic {name; item = mty} -> - Format.dprintf + Fmt.dprintf "%s@ =@ %t" name (dmodtype mty) let param x = match functor_param x with - | Unit -> Format.dprintf "()" + | Unit -> Fmt.dprintf "()" | Named (_, short_mty) -> pp dmodtype short_mty let qualified_param x = match functor_param x with - | Unit -> Format.dprintf "()" + | Unit -> Fmt.dprintf "()" | Named (None, Original (Mty_signature []) ) -> - Format.dprintf "(sig end)" + Fmt.dprintf "(sig end)" | Named (None, short_mty) -> pp dmodtype short_mty | Named (Some p, short_mty) -> - Format.dprintf "(%s : %t)" + Fmt.dprintf "(%s : %t)" (Ident.name p) (pp dmodtype short_mty) let definition_of_argument ua = let arg, mty = ua.item in match (arg: Err.functor_arg_descr) with - | Unit -> Format.dprintf "()" - | Empty_struct -> Format.dprintf "(struct end)" + | Unit -> Fmt.dprintf "()" + | Empty_struct -> Fmt.dprintf "(struct end)" | Named p -> let mty = modtype { ua with item = mty } in - Format.dprintf + Fmt.dprintf "%a@ :@ %t" - Printtyp.path p + Printtyp.Doc.path p (pp_orig dmodtype mty) | Anonymous -> let short_mty = modtype { ua with item = mty } in begin match short_mty with | Original mty -> dmodtype mty | Synthetic {name; item=mty} -> - Format.dprintf "%s@ :@ %t" name (dmodtype mty) + Fmt.dprintf "%s@ :@ %t" name (dmodtype mty) end let arg ua = let arg, mty = ua.item in match (arg: Err.functor_arg_descr) with - | Unit -> Format.dprintf "()" - | Empty_struct -> Format.dprintf "(struct end)" - | Named p -> fun ppf -> Printtyp.path ppf p + | Unit -> Fmt.dprintf "()" + | Empty_struct -> Fmt.dprintf "(struct end)" + | Named p -> fun ppf -> Printtyp.Doc.path ppf p | Anonymous -> let short_mty = modtype { ua with item=mty } in pp dmodtype short_mty @@ -374,17 +429,38 @@ module Functor_suberror = struct | Types.Named (Some _ as x,_) -> x | Types.(Unit | Named(None,_)) -> None - (** Print the list of params with style *) + +(** Print a list of functor parameters with style while adjusting the printing + environment for each functor argument. + + Currently, we are disabling disambiguation for functor argument name to + avoid the need to track the moving association between identifiers and + syntactic names in situation like: + + got: (X: sig module type T end) (Y:X.T) (X:sig module type T end) (Z:X.T) + expect: (_: sig end) (Y:X.T) (_:sig end) (Z:X.T) +*) let pretty_params sep proj printer patch = - let elt (x,param) = + let pp_param (x,param) = let sty = Diffing.(style @@ classify x) in - Format.dprintf "%a%t%a" - Format.pp_open_stag (Misc.Color.Style sty) + Fmt.dprintf "%a%t%a" + Fmt.pp_open_stag (Style.Style sty) (printer param) - Format.pp_close_stag () + Fmt.pp_close_stag () + in + let rec pp_params = function + | [] -> ignore + | [_,param] -> pp_param param + | (id,param) :: q -> + Fmt.dprintf "%t%a%t" + (pp_param param) sep () (hide_id id q) + and hide_id id q = + match id with + | None -> pp_params q + | Some id -> Out_type.Ident_names.with_fuzzy id (fun () -> pp_params q) in let params = List.filter_map proj @@ List.map snd patch in - Printtyp.functor_parameters ~sep elt params + pp_params params let expected d = let extract: _ Diffing.change -> _ = function @@ -420,17 +496,17 @@ module Functor_suberror = struct pretty_params space extract With_shorthand.qualified_param d let insert mty = - Format.dprintf + Fmt.dprintf "An argument appears to be missing with module type@;<1 2>@[%t@]" (With_shorthand.definition mty) let delete mty = - Format.dprintf + Fmt.dprintf "An extra argument is provided of module type@;<1 2>@[%t@]" (With_shorthand.definition mty) let ok x y = - Format.dprintf + Fmt.dprintf "Module types %t and %t match" (With_shorthand.param x) (With_shorthand.param y) @@ -438,17 +514,17 @@ module Functor_suberror = struct let diff g e more = let g = With_shorthand.definition g in let e = With_shorthand.definition e in - Format.dprintf + Fmt.dprintf "Module types do not match:@ @[%t@]@;<1 -2>does not include@ \ @[%t@]%t" g e (more ()) let incompatible = function | Types.Unit -> - Format.dprintf + Fmt.dprintf "The functor was expected to be applicative at this position" | Types.Named _ -> - Format.dprintf + Fmt.dprintf "The functor was expected to be generative at this position" let patch env got expected = @@ -474,7 +550,7 @@ module Functor_suberror = struct pretty_params space extract With_shorthand.arg d let delete mty = - Format.dprintf + Fmt.dprintf "The following extra argument is provided@;<1 2>@[%t@]" (With_shorthand.definition_of_argument mty) @@ -483,10 +559,10 @@ module Functor_suberror = struct let ok x y = let pp_orig_name = match With_shorthand.functor_param y with | With_shorthand.Named (_, Original mty) -> - Format.dprintf " %t" (dmodtype mty) + Fmt.dprintf " %t" (dmodtype mty) | _ -> ignore in - Format.dprintf + Fmt.dprintf "Module %t matches the expected module type%t" (With_shorthand.arg x) pp_orig_name @@ -494,7 +570,7 @@ module Functor_suberror = struct let diff g e more = let g = With_shorthand.definition_of_argument g in let e = With_shorthand.definition e in - Format.dprintf + Fmt.dprintf "Modules do not match:@ @[%t@]@;<1 -2>\ is not included in@ @[%t@]%t" g e (more ()) @@ -505,10 +581,10 @@ module Functor_suberror = struct let single_diff g e more = let _arg, mty = g.With_shorthand.item in let e = match e.With_shorthand.item with - | Types.Unit -> Format.dprintf "()" + | Types.Unit -> Fmt.dprintf "()" | Types.Named(_, mty) -> dmodtype mty in - Format.dprintf + Fmt.dprintf "Modules do not match:@ @[%t@]@;<1 -2>\ is not included in@ @[%t@]%t" (dmodtype mty) e (more ()) @@ -516,10 +592,10 @@ module Functor_suberror = struct let incompatible = function | Unit -> - Format.dprintf + Fmt.dprintf "The functor was expected to be applicative at this position" | Named _ | Anonymous -> - Format.dprintf + Fmt.dprintf "The functor was expected to be generative at this position" | Empty_struct -> (* an empty structure can be used in both applicative and generative @@ -529,19 +605,19 @@ module Functor_suberror = struct let subcase sub ~expansion_token env (pos, diff) = Location.msg "%a%a%a%a@[%t@]%a" - Format.pp_print_tab () - Format.pp_open_tbox () + Fmt.pp_print_tab () + Fmt.pp_open_tbox () Diffing.prefix (pos, Diffing.classify diff) - Format.pp_set_tab () - (Printtyp.wrap_printing_env env ~error:true + Fmt.pp_set_tab () + (Printtyp.wrap_printing_env env.i_env ~error:true (fun () -> sub ~expansion_token env diff) ) - Format.pp_close_tbox () + Fmt.pp_close_tbox () let onlycase sub ~expansion_token env (_, diff) = Location.msg "%a@[%t@]" - Format.pp_print_tab () - (Printtyp.wrap_printing_env env ~error:true + Fmt.pp_print_tab () + (Printtyp.wrap_printing_env env.i_env ~error:true (fun () -> sub ~expansion_token env diff) ) @@ -587,124 +663,153 @@ let coalesce msgs = | [] -> ignore | before -> let ctx ppf = - Format.pp_print_list ~pp_sep:space - (fun ppf x -> x.Location.txt ppf) + Fmt.pp_print_list ~pp_sep:space + (fun ppf x -> Fmt.pp_doc ppf x.Location.txt) ppf before in ctx let subcase_list l ppf = match l with | [] -> () | _ :: _ -> - Format.fprintf ppf "@;<1 -2>@[%a@]" - (Format.pp_print_list ~pp_sep:space - (fun ppf f -> f.Location.txt ppf) - ) + let pp_msg ppf lmsg = Fmt.pp_doc ppf lmsg.Location.txt in + Fmt.fprintf ppf "@;<1 -2>@[%a@]" + (Fmt.pp_print_list ~pp_sep:space pp_msg) (List.rev l) (* Printers for leaves *) let core env id x = match x with | Err.Value_descriptions diff -> - Format.dprintf "@[@[%s:@;<1 2>%a@ %s@;<1 2>%a@]%a%a%t@]" + Fmt.dprintf "@[@[%s:@;<1 2>%a@ %s@;<1 2>%a@]%a%a@]" "Values do not match" !Oprint.out_sig_item - (Printtyp.tree_of_value_description id diff.got) + (Out_type.tree_of_value_description id diff.got) "is not included in" !Oprint.out_sig_item - (Printtyp.tree_of_value_description id diff.expected) + (Out_type.tree_of_value_description id diff.expected) (Includecore.report_value_mismatch "the first" "the second" env) diff.symptom show_locs (diff.got.val_loc, diff.expected.val_loc) - Printtyp.Conflicts.print_explanations | Err.Type_declarations diff -> - Format.dprintf "@[@[%s:@;<1 2>%a@ %s@;<1 2>%a@]%a%a%t@]" + Fmt.dprintf "@[@[%s:@;<1 2>%a@ %s@;<1 2>%a@]@,%a%a@]" "Type declarations do not match" !Oprint.out_sig_item - (Printtyp.tree_of_type_declaration id diff.got Trec_first) + (Out_type.tree_of_type_declaration id diff.got Trec_first) "is not included in" !Oprint.out_sig_item - (Printtyp.tree_of_type_declaration id diff.expected Trec_first) + (Out_type.tree_of_type_declaration id diff.expected Trec_first) (Includecore.report_type_mismatch "the first" "the second" "declaration" env) diff.symptom show_locs (diff.got.type_loc, diff.expected.type_loc) - Printtyp.Conflicts.print_explanations | Err.Extension_constructors diff -> - Format.dprintf "@[@[%s:@;<1 2>%a@ %s@;<1 2>%a@]@ %a%a%t@]" + Fmt.dprintf "@[@[%s:@;<1 2>%a@ %s@;<1 2>%a@]@ %a%a@]" "Extension declarations do not match" !Oprint.out_sig_item - (Printtyp.tree_of_extension_constructor id diff.got Text_first) + (Out_type.tree_of_extension_constructor id diff.got Text_first) "is not included in" !Oprint.out_sig_item - (Printtyp.tree_of_extension_constructor id diff.expected Text_first) + (Out_type.tree_of_extension_constructor id diff.expected Text_first) (Includecore.report_extension_constructor_mismatch "the first" "the second" "declaration" env) diff.symptom show_locs (diff.got.ext_loc, diff.expected.ext_loc) - Printtyp.Conflicts.print_explanations | Err.Class_type_declarations diff -> - Format.dprintf + Fmt.dprintf "@[Class type declarations do not match:@ \ - %a@;<1 -2>does not match@ %a@]@ %a%t" + %a@;<1 -2>does not match@ %a@]@ %a" !Oprint.out_sig_item - (Printtyp.tree_of_cltype_declaration id diff.got Trec_first) + (Out_type.tree_of_cltype_declaration id diff.got Trec_first) !Oprint.out_sig_item - (Printtyp.tree_of_cltype_declaration id diff.expected Trec_first) - (Includeclass.report_error Type_scheme) diff.symptom - Printtyp.Conflicts.print_explanations + (Out_type.tree_of_cltype_declaration id diff.expected Trec_first) + (Includeclass.report_error_doc Type_scheme) diff.symptom | Err.Class_declarations {got;expected;symptom} -> - let t1 = Printtyp.tree_of_class_declaration id got Trec_first in - let t2 = Printtyp.tree_of_class_declaration id expected Trec_first in - Format.dprintf + let t1 = Out_type.tree_of_class_declaration id got Trec_first in + let t2 = Out_type.tree_of_class_declaration id expected Trec_first in + Fmt.dprintf "@[Class declarations do not match:@ \ - %a@;<1 -2>does not match@ %a@]@ %a%t" + %a@;<1 -2>does not match@ %a@]@ %a" !Oprint.out_sig_item t1 !Oprint.out_sig_item t2 - (Includeclass.report_error Type_scheme) symptom - Printtyp.Conflicts.print_explanations + (Includeclass.report_error_doc Type_scheme) symptom let missing_field ppf item = let id, loc, kind = Includemod.item_ident_name item in - Format.fprintf ppf "The %s `%a' is required but not provided%a" - (Includemod.kind_of_field_desc kind) Printtyp.ident id + Fmt.fprintf ppf "The %s %a is required but not provided%a" + (Includemod.kind_of_field_desc kind) + (Style.as_inline_code Printtyp.Doc.ident) id (show_loc "Expected declaration") loc let module_types {Err.got=mty1; expected=mty2} = - Format.dprintf + Fmt.dprintf "@[Modules do not match:@ \ %a@;<1 -2>is not included in@ %a@]" - !Oprint.out_module_type (Printtyp.tree_of_modtype mty1) - !Oprint.out_module_type (Printtyp.tree_of_modtype mty2) + !Oprint.out_module_type (Out_type.tree_of_modtype mty1) + !Oprint.out_module_type (Out_type.tree_of_modtype mty2) let eq_module_types {Err.got=mty1; expected=mty2} = - Format.dprintf + Fmt.dprintf "@[Module types do not match:@ \ %a@;<1 -2>is not equal to@ %a@]" - !Oprint.out_module_type (Printtyp.tree_of_modtype mty1) - !Oprint.out_module_type (Printtyp.tree_of_modtype mty2) + !Oprint.out_module_type (Out_type.tree_of_modtype mty1) + !Oprint.out_module_type (Out_type.tree_of_modtype mty2) let module_type_declarations id {Err.got=d1 ; expected=d2} = - Format.dprintf + Fmt.dprintf "@[Module type declarations do not match:@ \ %a@;<1 -2>does not match@ %a@]" - !Oprint.out_sig_item (Printtyp.tree_of_modtype_declaration id d1) - !Oprint.out_sig_item (Printtyp.tree_of_modtype_declaration id d2) + !Oprint.out_sig_item (Out_type.tree_of_modtype_declaration id d1) + !Oprint.out_sig_item (Out_type.tree_of_modtype_declaration id d2) let interface_mismatch ppf (diff: _ Err.diff) = - Format.fprintf ppf - "The implementation %s@ does not match the interface %s:@ " - diff.got diff.expected + Fmt.fprintf ppf + "The implementation %a@ does not match the interface %a:@ " + Style.inline_code diff.got Style.inline_code diff.expected let core_module_type_symptom (x:Err.core_module_type_symptom) = match x with | Not_an_alias | Not_an_identifier | Abstract_module_type - | Incompatible_aliases -> - if Printtyp.Conflicts.exists () then - Some Printtyp.Conflicts.print_explanations - else None + | Incompatible_aliases -> None | Unbound_module_path path -> - Some(Format.dprintf "Unbound module %a" Printtyp.path path) + Some(Fmt.dprintf "Unbound module %a" + (Style.as_inline_code Printtyp.Doc.path) path + ) (* Construct a linearized error message from the error tree *) +let functor_expected ~before ~ctx = + let main = + (* The abstract module type case is detected by {!Includemod} *) + Fmt.dprintf + "@[This module should not be@ a@ structure,@ \ + a@ functor@ was expected.@]" + in + dwith_context ctx main :: before + +let unexpected_functor ~env ~before ~ctx diff = + let rmty = diff.got.res in + let intro = + match diff.expected.res with + | Mty_ident _ -> + Fmt.dprintf + "@[This module should not be a functor,@ a@ module with an@ \ + abstract@ module@ type@ was@ expected.@]" + | Mty_signature _ | _ -> + Fmt.dprintf + "@[This module should not be a functor,@ a@ structure was expected.@]" + in + let main = + match Includemod.modtypes_consistency ~loc:Location.none env rmty + diff.expected.res with + | _ -> + Fmt.dprintf + "%t@ @{Hint@}: Did you forget to apply the functor?" + intro + | exception _ -> + Fmt.dprintf "%t@ @[Moreover,@ the type of the functor@ body@ is@ \ + incompatible@ with@ the@ expected@ module type.@]" + intro + in + dwith_context ctx main :: before + let rec module_type ~expansion_token ~eqmode ~env ~before ~ctx diff = match diff.symptom with | Invalid_module_alias _ (* the difference is non-informative here *) @@ -741,19 +846,30 @@ and module_type_symptom ~eqmode ~expansion_token ~env ~before ~ctx = function module_type ~eqmode ~expansion_token ~env ~before ~ctx diff | Invalid_module_alias path -> let printer = - Format.dprintf "Module %a cannot be aliased" Printtyp.path path + Fmt.dprintf "Module %a cannot be aliased" + (Style.as_inline_code Printtyp.Doc.path) path in dwith_context ctx printer :: before -and functor_params ~expansion_token ~env ~before ~ctx {got;expected;_} = - let d = Functor_suberror.Inclusion.patch env got expected in +and functor_params ~expansion_token ~env ~before ~ctx diff = + match diff.got.params, diff.expected.params with + | [], _ -> functor_expected ~before ~ctx + | _, [] -> unexpected_functor ~env:env.i_env ~before ~ctx diff + | _ :: _, _ :: _ -> + compare_functor_params ~expansion_token ~env ~before ~ctx diff + +and compare_functor_params ~expansion_token ~env ~before ~ctx {got;expected;_} = + let d = Functor_suberror.Inclusion.patch env + (got.params, got.res) + (expected.params, expected.res) + in let actual = Functor_suberror.Inclusion.got d in let expected = Functor_suberror.expected d in let main = - Format.dprintf + Fmt.dprintf "@[Modules do not match:@ \ - @[functor@ %t@ -> ...@]@;<1 -2>is not included in@ \ - @[functor@ %t@ -> ...@]@]" + @[%t@ -> ...@]@;<1 -2>is not included in@ \ + @[%t@ -> ...@]@]" actual expected in let msgs = dwith_context ctx main :: before in @@ -772,19 +888,22 @@ and functor_symptom ~expansion_token ~env ~before ~ctx = function and signature ~expansion_token ~env:_ ~before ~ctx sgs = Printtyp.wrap_printing_env ~error:true sgs.env (fun () -> match sgs.missings, sgs.incompatibles with - | a :: l , _ -> + | _ :: _ as missings, _ -> if expansion_token then - with_context ctx missing_field a - :: List.map (Location.msg "%a" missing_field) l - @ before + let init_missings, last_missing = Misc.split_last missings in + List.map (Location.msg "%a" missing_field) init_missings + @ with_context ctx missing_field last_missing + :: before else before - | [], a :: _ -> sigitem ~expansion_token ~env:sgs.env ~before ~ctx a + | [], a :: _ -> + let env = {i_env=sgs.env; i_subst=sgs.subst } in + sigitem ~expansion_token ~env ~before ~ctx a | [], [] -> assert false ) and sigitem ~expansion_token ~env ~before ~ctx (name,s) = match s with | Core c -> - dwith_context ctx (core env name c) :: before + dwith_context ctx (core env.i_env name c) :: before | Module_type diff -> module_type ~expansion_token ~eqmode:false ~env ~before ~ctx:(Context.Module name :: ctx) diff @@ -816,7 +935,8 @@ and module_type_decl ~expansion_token ~env ~before ~ctx id diff = | None -> assert false | Some mty -> with_context (Modtype id::ctx) - (Illegal_permutation.pp Context.alt_pp env) (mty,c) + (Runtime_coercion.illegal_permutation Context.alt_pp env.i_env) + (mty,c) :: before end @@ -863,17 +983,17 @@ let module_type_subst ~env id diff = ~ctx:[Modtype id] mts.less_than | Illegal_permutation c -> let mty = diff.got in - let main = - with_context [Modtype id] - (Illegal_permutation.pp Context.alt_pp env) (mty,c) in - [main] + [with_context [Modtype id] + (Runtime_coercion.illegal_permutation Context.alt_pp env.i_env) + (mty,c) + ] let all env = function | In_Compilation_unit diff -> let first = Location.msg "%a" interface_mismatch diff in signature ~expansion_token:true ~env ~before:[first] ~ctx:[] diff.symptom | In_Type_declaration (id,reason) -> - [Location.msg "%t" (core env id reason)] + [Location.msg "%t" (core env.i_env id reason)] | In_Module_type diff -> module_type ~expansion_token:true ~eqmode:false ~before:[] ~env ~ctx:[] diff @@ -888,54 +1008,90 @@ let all env = function (* General error reporting *) -let err_msgs (env, err) = - Printtyp.Conflicts.reset(); +let err_msgs ppf (env, err) = Printtyp.wrap_printing_env ~error:true env - (fun () -> coalesce @@ all env err) + (fun () -> (coalesce @@ all {i_env=env; i_subst=Subst.identity} err) ppf) -let report_error err = - let main = err_msgs err in - Location.errorf ~loc:Location.(in_file !input_name) "%t" main +let report_error_doc err = + Location.errorf + ~loc:Location.(in_file !input_name) + ~footnote:Out_type.Ident_conflicts.err_msg + "%a" err_msgs err -let report_apply_error ~loc env (lid_app, mty_f, args) = - let may_print_app ppf = match lid_app with - | None -> () - | Some lid -> Format.fprintf ppf "%a " Printtyp.longident lid - in +let report_apply_error_doc ~loc env (app_name, mty_f, args) = + let footnote = Out_type.Ident_conflicts.err_msg in let d = Functor_suberror.App.patch env ~f:mty_f ~args in match d with (* We specialize the one change and one argument case to remove the presentation of the functor arguments *) | [ _, Change (_, _, Err.Incompatible_params (i,_)) ] -> - Location.errorf ~loc "%t" (Functor_suberror.App.incompatible i) + Location.errorf ~loc ~footnote "%t" (Functor_suberror.App.incompatible i) | [ _, Change (g, e, Err.Mismatch mty_diff) ] -> let more () = subcase_list @@ - module_type_symptom ~eqmode:false ~expansion_token:true ~env ~before:[] + module_type_symptom ~eqmode:false ~expansion_token:true + ~env:{i_env=env; i_subst=Subst.identity} ~before:[] ~ctx:[] mty_diff.symptom in - Location.errorf ~loc "%t" (Functor_suberror.App.single_diff g e more) + Location.errorf ~loc ~footnote "%t" + (Functor_suberror.App.single_diff g e more) | _ -> - let actual = Functor_suberror.App.got d in - let expected = Functor_suberror.expected d in - let sub = - List.rev @@ - Functor_suberror.params functor_app_diff env ~expansion_token:true d + let not_functor = + List.for_all (function _, Diffing.Delete _ -> true | _ -> false) d in - Location.errorf ~loc ~sub - "@[The functor application %tis ill-typed.@ \ - These arguments:@;<1 2>\ - @[%t@]@ do not match these parameters:@;<1 2>@[functor@ %t@ -> ...@]@]" - may_print_app - actual expected + if not_functor then + match app_name with + | Includemod.Named_leftmost_functor lid -> + Location.errorf ~loc + "@[The module %a is not a functor, it cannot be applied.@]" + (Style.as_inline_code Printtyp.Doc.longident) lid + | Includemod.Anonymous_functor + | Includemod.Full_application_path _ + (* The "non-functor application in term" case is directly handled in + [Env] and it is the only case where we have a full application + path at hand. Thus this case of the or-pattern is currently + unreachable and we don't try to specialize the corresponding error + message. *) -> + Location.errorf ~loc + "@[This module is not a functor, it cannot be applied.@]" + else + let intro ppf = + match app_name with + | Includemod.Anonymous_functor -> + Fmt.fprintf ppf "This functor application is ill-typed." + | Includemod.Full_application_path lid -> + Fmt.fprintf ppf "The functor application %a is ill-typed." + (Style.as_inline_code Printtyp.Doc.longident) lid + | Includemod.Named_leftmost_functor lid -> + Fmt.fprintf ppf + "This application of the functor %a is ill-typed." + (Style.as_inline_code Printtyp.Doc.longident) lid + in + let actual = Functor_suberror.App.got d in + let expected = Functor_suberror.expected d in + let sub = + let env = {i_env=env; i_subst=Subst.identity} in + List.rev @@ + Functor_suberror.params functor_app_diff env ~expansion_token:true d + in + Location.errorf ~loc ~sub ~footnote + "@[%t@ \ + These arguments:@;<1 2>@[%t@]@ \ + do not match these parameters:@;<1 2>@[%t@ -> ...@]@]" + intro + actual expected + +let coercion_in_package_subtype env mty c = + Format_doc.doc_printf "%t" @@ + Runtime_coercion.in_package_subtype Context.alt_pp env mty c let register () = Location.register_error_of_exn (function - | Includemod.Error err -> Some (report_error err) - | Includemod.Apply_error {loc; env; lid_app; mty_f; args} -> + | Includemod.Error err -> Some (report_error_doc err) + | Includemod.Apply_error {loc; env; app_name; mty_f; args} -> Some (Printtyp.wrap_printing_env env ~error:true (fun () -> - report_apply_error ~loc env (lid_app, mty_f, args)) + report_apply_error_doc ~loc env (app_name, mty_f, args)) ) | _ -> None ) diff --git a/ocamlmerlin_mlx/ocaml/typing/includemod_errorprinter.mli b/ocamlmerlin_mlx/ocaml/typing/includemod_errorprinter.mli index 12ea216..0c7dda4 100644 --- a/ocamlmerlin_mlx/ocaml/typing/includemod_errorprinter.mli +++ b/ocamlmerlin_mlx/ocaml/typing/includemod_errorprinter.mli @@ -13,5 +13,7 @@ (* *) (**************************************************************************) -val err_msgs: Includemod.explanation -> Format.formatter -> unit +val err_msgs: Includemod.explanation Format_doc.printer +val coercion_in_package_subtype: + Env.t -> Types.module_type -> Typedtree.module_coercion -> Format_doc.doc val register: unit -> unit diff --git a/ocamlmerlin_mlx/ocaml/typing/lambda.ml b/ocamlmerlin_mlx/ocaml/typing/lambda.ml new file mode 100644 index 0000000..7e473d3 --- /dev/null +++ b/ocamlmerlin_mlx/ocaml/typing/lambda.ml @@ -0,0 +1,9 @@ +(* The lambda representation is of no interest for Merlin, but some types are + used by [value_rec_check]. *) + +type immediate_or_pointer = + | Immediate + | Pointer + +type array_kind = + Pgenarray | Paddrarray | Pintarray | Pfloatarray diff --git a/ocamlmerlin_mlx/ocaml/typing/magic_numbers.ml b/ocamlmerlin_mlx/ocaml/typing/magic_numbers.ml index f052ec9..108d8fc 100644 --- a/ocamlmerlin_mlx/ocaml/typing/magic_numbers.ml +++ b/ocamlmerlin_mlx/ocaml/typing/magic_numbers.ml @@ -24,16 +24,20 @@ module Cmi = struct | "Caml1999I031" -> Some "4.14" | "Caml1999I032" -> Some "5.0" | "Caml1999I033" -> Some "5.1" + | "Caml1999I034" -> Some "5.2" + | "Caml1999I035" -> Some "5.3" + | "Caml1999I036" -> Some "5.4" | _ -> None let () = assert (to_version_opt Config.cmi_magic_number <> None) - open Format + open Format_doc + module Style = Misc.Style let report_error ppf = function | Not_an_interface filename -> fprintf ppf "%a@ is not a compiled interface" - Location.print_filename filename + (Style.as_inline_code Location.Doc.filename) filename | Wrong_version_interface (filename, compiler_magic) -> let program_name = Lib_config.program_name () in begin match to_version_opt compiler_magic with @@ -49,7 +53,7 @@ module Cmi = struct compiler. \n\ This diagnostic is based on the compiled interface file: %a" program_name program_name program_name - Location.print_filename filename + Location.Doc.filename filename | Some version -> fprintf ppf "Compiler version mismatch: this project seems to be compiled with \ @@ -61,11 +65,11 @@ module Cmi = struct This diagnostic is based on the compiled interface file: %a" version program_name (Option.get @@ to_version_opt Config.cmi_magic_number) - program_name Location.print_filename filename + program_name Location.Doc.filename filename end | Corrupted_interface filename -> fprintf ppf "Corrupted compiled interface@ %a" - Location.print_filename filename + (Style.as_inline_code Location.Doc.filename) filename let () = Location.register_error_of_exn diff --git a/ocamlmerlin_mlx/ocaml/typing/msupport.ml b/ocamlmerlin_mlx/ocaml/typing/msupport.ml index 0261938..2491259 100644 --- a/ocamlmerlin_mlx/ocaml/typing/msupport.ml +++ b/ocamlmerlin_mlx/ocaml/typing/msupport.ml @@ -1,60 +1,58 @@ (* {{{ COPYING *( - This file is part of Merlin, an helper for ocaml editors + This file is part of Merlin, an helper for ocaml editors - Copyright (C) 2013 - 2015 Frédéric Bour - Thomas Refis - Simon Castellan + Copyright (C) 2013 - 2015 Frédéric Bour + Thomas Refis + Simon Castellan - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. - The Software is provided "as is", without warranty of any kind, express or - implied, including but not limited to the warranties of merchantability, - fitness for a particular purpose and noninfringement. In no event shall - the authors or copyright holders be liable for any claim, damages or other - liability, whether in an action of contract, tort or otherwise, arising - from, out of or in connection with the software or the use or other dealings - in the Software. + The Software is provided "as is", without warranty of any kind, express or + implied, including but not limited to the warranties of merchantability, + fitness for a particular purpose and noninfringement. In no event shall + the authors or copyright holders be liable for any claim, damages or other + liability, whether in an action of contract, tort or otherwise, arising + from, out of or in connection with the software or the use or other dealings + in the Software. -)* }}} *) + )* }}} *) open Std -let errors : (exn list ref * unit Btype.TypeHash.t) option ref = ref None +module RawTypeHash = Hashtbl.Make (Types.TransientTypeOps) + +let errors : (exn list ref * unit RawTypeHash.t) option ref = ref None let monitor_errors' = ref (ref false) let monitor_errors () = - if !(!monitor_errors') then - monitor_errors' := (ref false); + if !(!monitor_errors') then monitor_errors' := ref false; !monitor_errors' -let raise_error ?(ignore_unify=false) exn = +let raise_error ?(ignore_unify = false) exn = !monitor_errors' := true; match !errors with - | Some (l,_) -> - begin match exn with - | Ctype.Unify _ when ignore_unify -> () - | Ctype.Unify _ | Failure _ -> - Logger.log ~section:"Typing_aux.raise_error" - ~title:(Printexc.exn_slot_name exn) "%a" - Logger.fmt (fun fmt -> - Printexc.record_backtrace true; - Format.pp_print_string fmt (Printexc.get_backtrace ()) - ) - | exn -> l := exn :: !l - end + | Some (l, _) -> begin + match exn with + | Ctype.Unify _ when ignore_unify -> () + | Ctype.Unify _ | Failure _ -> + Logger.log ~section:"Typing_aux.raise_error" + ~title:(Printexc.exn_slot_name exn) "%a" Logger.fmt (fun fmt -> + Printexc.record_backtrace true; + Format.pp_print_string fmt (Printexc.get_backtrace ())) + | exn -> l := exn :: !l + end | None -> raise exn -let () = - Msupport_parsing.msupport_raise_error := raise_error +let () = Msupport_parsing.msupport_raise_error := raise_error exception Resume @@ -66,33 +64,31 @@ let catch_errors warnings caught f = let warnings' = Warnings.backup () in let errors' = !errors in Warnings.restore warnings; - errors := (Some (caught,Btype.TypeHash.create 3)); - Misc.try_finally f - ~always:(fun () -> - errors := errors'; - Warnings.restore warnings') + errors := Some (caught, RawTypeHash.create 3); + Misc.try_finally f ~always:(fun () -> + errors := errors'; + Warnings.restore warnings') -let uncatch_errors f = - let_ref errors None f +let uncatch_errors f = let_ref errors None f let erroneous_type_register te = let te = Types.Transient_expr.coerce te in match !errors with - | Some (_,h) -> Btype.TypeHash.replace h te () + | Some (_, h) -> RawTypeHash.replace h te () | None -> () let erroneous_type_check te = let te = Types.Transient_expr.coerce te in match !errors with - | Some (_,h) -> Btype.TypeHash.mem h te + | Some (_, h) -> RawTypeHash.mem h te | _ -> false let rec erroneous_expr_check e = - (erroneous_type_check e.Typedtree.exp_type) || + erroneous_type_check e.Typedtree.exp_type + || match e.Typedtree.exp_desc with - | Typedtree.Texp_ident (p,_,_) - when Ident.name (Path.head p) = "_" -> true - | Typedtree.Texp_apply (e',_) -> erroneous_expr_check e' + | Typedtree.Texp_ident (p, _, _) when Ident.name (Path.head p) = "_" -> true + | Typedtree.Texp_apply (e', _) -> erroneous_expr_check e' | _ -> false exception Warning of Location.t * string @@ -100,27 +96,28 @@ exception Warning of Location.t * string let prerr_warning loc w = match !errors with | None -> () (*Location.print_warning loc Format.err_formatter w*) - | Some (l, _) -> + | Some (l, _) -> ( let ppf, to_string = Format.to_string () in Location.print_warning loc ppf w; match to_string () with - | "" -> () - | s -> l := Warning (loc,s) :: !l + | "" -> () + | s -> l := Warning (loc, s) :: !l) let prerr_alert loc w = match !errors with | None -> () (*Location.print_warning loc Format.err_formatter w*) - | Some (l, _) -> + | Some (l, _) -> ( let ppf, to_string = Format.to_string () in Location.print_alert loc ppf w; match to_string () with - | "" -> () - | s -> l := Warning (loc,s) :: !l + | "" -> () + | s -> l := Warning (loc, s) :: !l) -let () = Location.register_error_of_exn (function - | Warning (loc, str) -> Some (Location.error ~loc ~source:Location.Warning str) - | _ -> None - ) +let () = + Location.register_error_of_exn (function + | Warning (loc, str) -> + Some (Location.error ~loc ~source:Location.Warning str) + | _ -> None) let () = Location.prerr_warning_ref := prerr_warning @@ -132,25 +129,29 @@ let flush_saved_types () = | parts -> Cmt_format.set_saved_types []; let open Ast_helper in - let pexp = Exp.constant (Saved_parts.store parts) in + let pconst_desc = Saved_parts.store parts in + let pexp = Exp.constant { pconst_desc; pconst_loc = !default_loc } in let pstr = Str.eval pexp in - [Attr.mk (Saved_parts.attribute) (Parsetree.PStr [pstr])] + [ Attr.mk Saved_parts.attribute (Parsetree.PStr [ pstr ]) ] let rec get_saved_types_from_attributes = function | [] -> [] | attr :: attrs -> - let (attr, str) = Ast_helper.Attr.as_tuple attr in + let attr, str = Ast_helper.Attr.as_tuple attr in if attr = Saved_parts.attribute then let open Parsetree in - begin match str with - | PStr({pstr_desc = - Pstr_eval ({pexp_desc = Pexp_constant key; _ } ,_) - ; _ } :: _) -> - Saved_parts.find key + begin + match str with + | PStr + ({ pstr_desc = + Pstr_eval + ({ pexp_desc = Pexp_constant { pconst_desc = key; _ }; _ }, _); + _ + } + :: _) -> Saved_parts.find key | _ -> [] end - else - get_saved_types_from_attributes attrs + else get_saved_types_from_attributes attrs let with_warning_attribute ?warning_attribute f = match warning_attribute with @@ -162,13 +163,14 @@ let with_saved_types ?warning_attribute ?save_part f = Cmt_format.set_saved_types []; try let result = with_warning_attribute ?warning_attribute f in - begin match save_part with + begin + match save_part with | None -> () | Some f -> Cmt_format.set_saved_types (f result :: saved_types) end; result with exn -> - let saved_types'= Cmt_format.get_saved_types () in + let saved_types' = Cmt_format.get_saved_types () in Cmt_format.set_saved_types (saved_types' @ saved_types); reraise exn diff --git a/ocamlmerlin_mlx/ocaml/typing/mtype.ml b/ocamlmerlin_mlx/ocaml/typing/mtype.ml index 312fec5..0fedd2f 100644 --- a/ocamlmerlin_mlx/ocaml/typing/mtype.ml +++ b/ocamlmerlin_mlx/ocaml/typing/mtype.ml @@ -65,7 +65,7 @@ and strengthen_lazy_sig' ~aliasable env sg p = [] -> [] | (SigL_value(_, _, _) as sigelt) :: rem -> sigelt :: strengthen_lazy_sig' ~aliasable env rem p - | SigL_type(id, {type_kind=Type_abstract}, _, _) :: rem + | SigL_type(id, {type_kind=Type_abstract _}, _, _) :: rem when Btype.is_row_name (Ident.name id) -> strengthen_lazy_sig' ~aliasable env rem p | SigL_type(id, decl, rs, vis) :: rem -> @@ -77,7 +77,7 @@ and strengthen_lazy_sig' ~aliasable env sg p = let manif = Some(Btype.newgenty(Tconstr(Pdot(p, Ident.name id), decl.type_params, ref Mnil))) in - if decl.type_kind = Type_abstract then + if Btype.type_kind_is_abstract decl then { decl with type_private = Public; type_manifest = manif } else { decl with type_manifest = manif } @@ -239,14 +239,7 @@ and nondep_sig_item env va ids = function let pres, mty = nondep_mty_with_presence env va ids pres md.md_type in Sig_module(id, pres, {md with md_type = mty}, rs, vis) | Sig_modtype(id, d, vis) -> - begin try - Sig_modtype(id, nondep_modtype_decl env ids d, vis) - with Ctype.Nondep_cannot_erase _ as exn -> - match va with - Co -> Sig_modtype(id, {mtd_type=None; mtd_loc=Location.none; - mtd_attributes=[]; mtd_uid = d.mtd_uid}, vis) - | _ -> raise exn - end + Sig_modtype(id, nondep_modtype_decl env ids d, vis) | Sig_class(id, d, rs, vis) -> Sig_class(id, Ctype.nondep_class_declaration env ids d, rs, vis) | Sig_class_type(id, d, rs, vis) -> @@ -392,7 +385,7 @@ and contains_type_sig env = List.iter (contains_type_item env) and contains_type_item env = function Sig_type (_,({type_manifest = None} | - {type_kind = Type_abstract; type_private = Private}),_, _) + {type_kind = Type_abstract _; type_private = Private}),_, _) | Sig_modtype _ | Sig_typext (_, {ext_args = Cstr_record _}, _, _) -> (* We consider that extension constructors with an inlined @@ -460,9 +453,11 @@ let collect_arg_paths mty = and bindings = ref Ident.empty in (* let rt = Ident.create "Root" in and prefix = ref (Path.Pident rt) in *) + with_type_mark begin fun mark -> + let super = type_iterators mark in let it_path p = paths := Path.Set.union (get_arg_paths p) !paths and it_signature_item it si = - type_iterators.it_signature_item it si; + super.it_signature_item it si; match si with | Sig_module (id, _, {md_type=Mty_alias p}, _, _) -> bindings := Ident.add id p !bindings @@ -475,11 +470,11 @@ let collect_arg_paths mty = sg | _ -> () in - let it = {type_iterators with it_path; it_signature_item} in + let it = {super with it_path; it_signature_item} in it.it_module_type it mty; - it.it_module_type unmark_iterators mty; Path.Set.fold (fun p -> Ident.Set.union (collect_ids !subst !bindings p)) !paths Ident.Set.empty + end type remove_alias_args = { mutable modified: bool; @@ -556,14 +551,16 @@ let scrape_for_type_of ~remove_aliases env mty = let lower_nongen nglev mty = let open Btype in - let it_type_expr it ty = + with_type_mark begin fun mark -> + let super = type_iterators mark in + let it_do_type_expr it ty = match get_desc ty with Tvar _ -> let level = get_level ty in if level < generic_level && level > nglev then set_level ty nglev | _ -> - type_iterators.it_type_expr it ty + super.it_do_type_expr it ty in - let it = {type_iterators with it_type_expr} in - it.it_module_type it mty; - it.it_module_type unmark_iterators mty + let it = {super with it_do_type_expr} in + it.it_module_type it mty + end diff --git a/ocamlmerlin_mlx/ocaml/typing/oprint.ml b/ocamlmerlin_mlx/ocaml/typing/oprint.ml index 8512426..55c631c 100644 --- a/ocamlmerlin_mlx/ocaml/typing/oprint.ml +++ b/ocamlmerlin_mlx/ocaml/typing/oprint.ml @@ -13,7 +13,7 @@ (* *) (**************************************************************************) -open Format +open Format_doc open Outcometree exception Ellipsis @@ -24,6 +24,7 @@ let cautious f ppf arg = let print_lident ppf = function | "::" -> pp_print_string ppf "(::)" + | s when Lexer.is_keyword s -> fprintf ppf "\\#%s" s | s -> pp_print_string ppf s let rec print_ident ppf = @@ -36,32 +37,15 @@ let rec print_ident ppf = let out_ident = ref print_ident -(* Check a character matches the [identchar_latin1] class from the lexer *) -let is_ident_char c = - match c with - | 'A'..'Z' | 'a'..'z' | '_' | '\192'..'\214' | '\216'..'\246' - | '\248'..'\255' | '\'' | '0'..'9' -> true - | _ -> false - -let all_ident_chars s = - let rec loop s len i = - if i < len then begin - if is_ident_char s.[i] then loop s len (i+1) - else false - end else begin - true - end - in - let len = String.length s in - loop s len 0 - let parenthesized_ident name = (List.mem name ["or"; "mod"; "land"; "lor"; "lxor"; "lsl"; "lsr"; "asr"]) - || not (all_ident_chars name) + || not (Misc.Utf8_lexeme.is_valid_identifier name) let value_ident ppf name = if parenthesized_ident name then fprintf ppf "( %s )" name + else if Lexer.is_keyword name then + fprintf ppf "\\#%s" name else pp_print_string ppf name @@ -138,6 +122,20 @@ let escape_string s = Bytes.to_string s' end +let print_label_type ppf = + function + | Some s -> + pp_print_string ppf s; + pp_print_string ppf ":"; + | None -> () + +let print_label ppf = + function + | Some s -> + pp_print_string ppf "~"; + pp_print_string ppf s; + pp_print_string ppf ":"; + | None -> () let print_out_string ppf s = let not_escaped = @@ -153,16 +151,29 @@ let print_out_string ppf s = else fprintf ppf "%S" s +let print_constr ppf name = + match name with + | Oide_ident {printed_name = ("true" | "false") as c} -> + (* despite being keywords, these are constructor names + and should not be escaped *) + fprintf ppf "%s" c + | Oide_dot (id, ("true"|"false" as s)) -> + (* Similarly, M.true is invalid *) + fprintf ppf "%a.(%s)" print_ident id s + | _ -> print_ident ppf name + let print_out_value ppf tree = let rec print_tree_1 ppf = function | Oval_constr (name, [param]) -> - fprintf ppf "@[<1>%a@ %a@]" print_ident name print_constr_param param + fprintf ppf "@[<1>%a@ %a@]" print_constr name print_constr_param param | Oval_constr (name, (_ :: _ as params)) -> - fprintf ppf "@[<1>%a@ (%a)@]" print_ident name + fprintf ppf "@[<1>%a@ (%a)@]" print_constr name (print_tree_list print_tree_1 ",") params | Oval_variant (name, Some param) -> - fprintf ppf "@[<2>`%s@ %a@]" name print_constr_param param + fprintf ppf "@[<2>`%a@ %a@]" print_lident name print_constr_param param + | Oval_lazy param -> + fprintf ppf "@[<2>lazy@ %a@]" print_constr_param param | tree -> print_simple_tree ppf tree and print_constr_param ppf = function | Oval_int i -> parenthesize_if_neg ppf "%i" i (i < 0) @@ -203,17 +214,24 @@ let print_out_value ppf tree = end | Oval_list tl -> fprintf ppf "@[<1>[%a]@]" (print_tree_list print_tree_1 ";") tl - | Oval_array tl -> + | Oval_array (tl, _mutability) -> fprintf ppf "@[<2>[|%a|]@]" (print_tree_list print_tree_1 ";") tl - | Oval_constr (name, []) -> print_ident ppf name - | Oval_variant (name, None) -> fprintf ppf "`%s" name + | Oval_constr (name, []) -> print_constr ppf name + | Oval_variant (name, None) -> fprintf ppf "`%a" print_lident name | Oval_stuff s -> pp_print_string ppf s | Oval_record fel -> fprintf ppf "@[<1>{%a}@]" (cautious (print_fields true)) fel | Oval_ellipsis -> raise Ellipsis | Oval_printer f -> f ppf | Oval_tuple tree_list -> - fprintf ppf "@[<1>(%a)@]" (print_tree_list print_tree_1 ",") tree_list + let print_elem ppf (lbl, item) = + print_label ppf lbl; print_tree_1 ppf item + in + fprintf ppf "@[<1>(%a)@]" (print_tree_list print_elem ",") tree_list + | Oval_floatarray arr -> + fprintf ppf "@[<2>[|%a|]@]" + (pp_print_seq ~pp_sep:semicolon pp_print_float) + (Float.Array.to_seq arr) | tree -> fprintf ppf "@[<1>(%a)@]" (cautious print_tree_1) tree and print_fields first ppf = function @@ -223,7 +241,8 @@ let print_out_value ppf tree = fprintf ppf "@[<1>%a@ =@ %a@]" print_ident name (cautious print_tree_1) tree; print_fields false ppf fields - and print_tree_list print_item sep ppf tree_list = + and print_tree_list : 'a . (_ -> 'a -> _) -> _ -> _ -> 'a list -> unit = + fun print_item sep ppf tree_list -> let rec print_list first ppf = function [] -> () @@ -236,7 +255,7 @@ let print_out_value ppf tree = in cautious print_tree_1 ppf tree -let out_value = ref print_out_value +let out_value = ref (compat print_out_value) (* Types *) @@ -254,13 +273,19 @@ let rec print_list pr sep ppf = let pr_present = print_list (fun ppf s -> fprintf ppf "`%s" s) (fun ppf -> fprintf ppf "@ ") -let pr_var = Pprintast.tyvar +let pr_var = Pprintast.Doc.tyvar let ty_var ~non_gen ppf s = pr_var ppf (if non_gen then "_" ^ s else s) let pr_vars = print_list pr_var (fun ppf -> fprintf ppf "@ ") +let print_arg_label ppf (lbl : Asttypes.arg_label) = + match lbl with + | Nolabel -> () + | Labelled s -> fprintf ppf "%a:" print_lident s + | Optional s -> fprintf ppf "?%a:" print_lident s + let rec print_out_type ppf = function | Otyp_alias {non_gen; aliased; alias } -> @@ -278,17 +303,32 @@ and print_out_type_1 ppf = function Otyp_arrow (lab, ty1, ty2) -> pp_open_box ppf 0; - if lab <> "" then (pp_print_string ppf lab; pp_print_char ppf ':'); - print_out_type_2 ppf ty1; + print_arg_label ppf lab; + print_out_type_2 ~arg:true ppf ty1; pp_print_string ppf " ->"; pp_print_space ppf (); print_out_type_1 ppf ty2; pp_close_box ppf () - | ty -> print_out_type_2 ppf ty -and print_out_type_2 ppf = + | ty -> print_out_type_2 ~arg:false ppf ty +and print_out_type_2 ~arg ppf = function Otyp_tuple tyl -> - fprintf ppf "@[<0>%a@]" (print_typlist print_simple_out_type " *") tyl + (* Tuples require parens in argument function argument position (~arg) + when the first element has a label. *) + let parens = + match tyl with + | (Some _, _) :: _ -> arg + | _ -> false + in + if parens then pp_print_char ppf '('; + let print_elem ppf (label, ty) = + pp_open_box ppf 0; + print_label_type ppf label; + print_simple_out_type ppf ty; + pp_close_box ppf () + in + fprintf ppf "@[<0>%a@]" (print_typlist print_elem " *") tyl; + if parens then pp_print_char ppf ')' | ty -> print_simple_out_type ppf ty and print_simple_out_type ppf = function @@ -331,18 +371,19 @@ and print_simple_out_type ppf = | Otyp_abstract | Otyp_open | Otyp_sum _ | Otyp_manifest (_, _) -> () | Otyp_record lbls -> print_record_decl ppf lbls - | Otyp_module (p, fl) -> - fprintf ppf "@[<1>(module %a" print_ident p; - let first = ref true in - List.iter - (fun (s, t) -> - let sep = if !first then (first := false; "with") else "and" in - fprintf ppf " %s type %s = %a" sep s print_out_type t - ) - fl; - fprintf ppf ")@]" + | Otyp_module pack -> + fprintf ppf "@[<1>(module %a)@]" print_package pack | Otyp_attribute (t, attr) -> fprintf ppf "@[<1>(%a [@@%s])@]" print_out_type t attr.oattr_name +and print_package ppf pack = + fprintf ppf "%a" print_ident pack.opack_path; + let first = ref true in + List.iter + (fun (s, t) -> + let sep = if !first then (first := false; "with") else "and" in + fprintf ppf " %s type %s = %a" sep s print_out_type t + ) + pack.opack_cstrs and print_record_decl ppf lbls = fprintf ppf "{%a@;<1 -2>}" (print_list_init print_out_label (fun ppf -> fprintf ppf "@ ")) lbls @@ -351,7 +392,7 @@ and print_fields open_row ppf = [] -> if open_row then fprintf ppf ".."; | [s, t] -> - fprintf ppf "%s : %a" s print_out_type t; + fprintf ppf "%a : %a" print_lident s print_out_type t; if open_row then fprintf ppf ";@ "; print_fields open_row ppf [] | (s, t) :: l -> @@ -362,10 +403,12 @@ and print_row_field ppf (l, opt_amp, tyl) = else if tyl <> [] then fprintf ppf " of@ " else fprintf ppf "" in - fprintf ppf "@[`%s%t%a@]" l pr_of (print_typlist print_out_type " &") + fprintf ppf "@[`%a%t%a@]" print_lident l pr_of + (print_typlist print_out_type " &") tyl -and print_typlist print_elem sep ppf = - function +and print_typlist : 'a . (_ -> 'a -> _) -> _ -> _ -> 'a list -> _ = + fun print_elem sep ppf tyl -> + match tyl with [] -> () | [ty] -> print_elem ppf ty | ty :: tyl -> @@ -384,9 +427,14 @@ and print_typargs ppf = pp_print_char ppf ')'; pp_close_box ppf (); pp_print_space ppf () -and print_out_label ppf (name, mut, arg) = - fprintf ppf "@[<2>%s%s :@ %a@];" (if mut then "mutable " else "") name - print_out_type arg +and print_out_label ppf {olab_name; olab_mut; olab_atomic; olab_type} = + fprintf ppf "@[<2>%s%a :@ %a%s@];" + (match olab_mut with + | Mutable -> "mutable " + | Immutable -> "") + print_lident olab_name + print_out_type olab_type + (match olab_atomic with Atomic -> " [@atomic]" | Nonatomic -> "") let out_label = ref print_out_label @@ -396,15 +444,19 @@ let out_type_args = ref print_typargs (* Class types *) -let print_type_parameter ppf s = - if s = "_" then fprintf ppf "_" else pr_var ppf s +let print_type_parameter ?(non_gen=false) ppf s = + if s = "_" then fprintf ppf "_" else ty_var ~non_gen ppf s -let type_parameter ppf (ty, (var, inj)) = +let type_parameter ppf {ot_non_gen=non_gen; ot_name=ty; ot_variance=var,inj} = let open Asttypes in fprintf ppf "%s%s%a" - (match var with Covariant -> "+" | Contravariant -> "-" | NoVariance -> "") + (match var with + | Covariant -> "+" + | Contravariant -> "-" + | NoVariance -> "" + | Bivariant -> "+-") (match inj with Injective -> "!" | NoInjectivity -> "") - print_type_parameter ty + (print_type_parameter ~non_gen) ty let print_out_class_params ppf = function @@ -425,8 +477,8 @@ let rec print_out_class_type ppf = in fprintf ppf "@[%a%a@]" pr_tyl tyl print_ident id | Octy_arrow (lab, ty, cty) -> - fprintf ppf "@[%s%a ->@ %a@]" (if lab <> "" then lab ^ ":" else "") - print_out_type_2 ty print_out_class_type cty + fprintf ppf "@[%a%a ->@ %a@]" print_arg_label lab + (print_out_type_2 ~arg:true) ty print_out_class_type cty | Octy_signature (self_ty, csil) -> let pr_param ppf = function @@ -442,14 +494,14 @@ and print_out_class_sig_item ppf = fprintf ppf "@[<2>constraint %a =@ %a@]" !out_type ty1 !out_type ty2 | Ocsg_method (name, priv, virt, ty) -> - fprintf ppf "@[<2>method %s%s%s :@ %a@]" + fprintf ppf "@[<2>method %s%s%a :@ %a@]" (if priv then "private " else "") (if virt then "virtual " else "") - name !out_type ty + print_lident name !out_type ty | Ocsg_value (name, mut, vr, ty) -> - fprintf ppf "@[<2>val %s%s%s :@ %a@]" + fprintf ppf "@[<2>val %s%s%a :@ %a@]" (if mut then "mutable " else "") (if vr then "virtual " else "") - name !out_type ty + print_lident name !out_type ty let out_class_type = ref print_out_class_type @@ -534,7 +586,7 @@ and print_out_functor_parameters ppf l = print_args l | _ :: _ as non_anonymous_functor -> let args, anons = split_anon_functor_arguments non_anonymous_functor in - fprintf ppf "@[<2>functor@ %a@]@ ->@ %a" + fprintf ppf "@[%a@]@ ->@ %a" (pp_print_list ~pp_sep:pp_print_space print_nonanon_arg) args print_args anons in @@ -590,15 +642,15 @@ and print_out_signature ppf = and print_out_sig_item ppf = function Osig_class (vir_flag, name, params, clt, rs) -> - fprintf ppf "@[<2>%s%s@ %a%s@ :@ %a@]" + fprintf ppf "@[<2>%s%s@ %a%a@ :@ %a@]" (if rs = Orec_next then "and" else "class") (if vir_flag then " virtual" else "") print_out_class_params params - name !out_class_type clt + print_lident name !out_class_type clt | Osig_class_type (vir_flag, name, params, clt, rs) -> - fprintf ppf "@[<2>%s%s@ %a%s@ =@ %a@]" + fprintf ppf "@[<2>%s%s@ %a%a@ =@ %a@]" (if rs = Orec_next then "and" else "class type") (if vir_flag then " virtual" else "") print_out_class_params params - name !out_class_type clt + print_lident name !out_class_type clt | Osig_typext (ext, Oext_exception) -> fprintf ppf "@[<2>exception %a@]" print_out_constr (constructor_of_extension_constructor ext) @@ -649,13 +701,15 @@ and print_out_type_decl kwd ppf td = in let type_defined ppf = match td.otype_params with - [] -> pp_print_string ppf td.otype_name - | [param] -> fprintf ppf "@[%a@ %s@]" type_parameter param td.otype_name + [] -> print_lident ppf td.otype_name + | [param] -> + fprintf ppf "@[%a@ %a@]" type_parameter param + print_lident td.otype_name | _ -> - fprintf ppf "@[(@[%a)@]@ %s@]" + fprintf ppf "@[(@[%a)@]@ %a@]" (print_list type_parameter (fun ppf -> fprintf ppf ",@ ")) td.otype_params - td.otype_name + print_lident td.otype_name in let print_manifest ppf = function @@ -744,17 +798,17 @@ and print_out_constr ppf constr = and print_out_extension_constructor ppf ext = let print_extended_type ppf = match ext.oext_type_params with - [] -> fprintf ppf "%s" ext.oext_type_name + [] -> fprintf ppf "%a" print_lident ext.oext_type_name | [ty_param] -> - fprintf ppf "@[%a@ %s@]" - print_type_parameter + fprintf ppf "@[%a@ %a@]" + (print_type_parameter ~non_gen:false) ty_param - ext.oext_type_name + print_lident ext.oext_type_name | _ -> - fprintf ppf "@[(@[%a)@]@ %s@]" + fprintf ppf "@[(@[%a)@]@ %a@]" (print_list print_type_parameter (fun ppf -> fprintf ppf ",@ ")) ext.oext_type_params - ext.oext_type_name + print_lident ext.oext_type_name in fprintf ppf "@[type %t +=%s@;<1 2>%a@]" print_extended_type @@ -765,16 +819,16 @@ and print_out_extension_constructor ppf ext = and print_out_type_extension ppf te = let print_extended_type ppf = match te.otyext_params with - [] -> fprintf ppf "%s" te.otyext_name + [] -> fprintf ppf "%a" print_lident te.otyext_name | [param] -> - fprintf ppf "@[%a@ %s@]" - print_type_parameter param - te.otyext_name + fprintf ppf "@[%a@ %a@]" + (print_type_parameter ~non_gen:false) param + print_lident te.otyext_name | _ -> - fprintf ppf "@[(@[%a)@]@ %s@]" + fprintf ppf "@[(@[%a)@]@ %a@]" (print_list print_type_parameter (fun ppf -> fprintf ppf ",@ ")) te.otyext_params - te.otyext_name + print_lident te.otyext_name in fprintf ppf "@[type %t +=%s@;<1 2>%a@]" print_extended_type @@ -791,6 +845,8 @@ let _ = out_functor_parameters := print_out_functor_parameters (* Phrases *) +open Format + let print_out_exception ppf exn outv = match exn with Sys.Break -> fprintf ppf "Interrupted.@." @@ -825,23 +881,26 @@ let rec print_items ppf = otyext_constructors = exts; otyext_private = ext.oext_private } in - fprintf ppf "@[%a@]" !out_type_extension te; + fprintf ppf "@[%a@]" (Format_doc.compat !out_type_extension) te; if items <> [] then fprintf ppf "@ %a" print_items items | (tree, valopt) :: items -> begin match valopt with Some v -> - fprintf ppf "@[<2>%a =@ %a@]" !out_sig_item tree + fprintf ppf "@[<2>%a =@ %a@]" (Format_doc.compat !out_sig_item) tree !out_value v - | None -> fprintf ppf "@[%a@]" !out_sig_item tree + | None -> fprintf ppf "@[%a@]" (Format_doc.compat !out_sig_item) tree end; if items <> [] then fprintf ppf "@ %a" print_items items let print_out_phrase ppf = function Ophr_eval (outv, ty) -> - fprintf ppf "@[- : %a@ =@ %a@]@." !out_type ty !out_value outv + fprintf ppf "@[- : %a@ =@ %a@]@." (compat !out_type) ty !out_value outv | Ophr_signature [] -> () | Ophr_signature items -> fprintf ppf "@[%a@]@." print_items items | Ophr_exception (exn, outv) -> print_out_exception ppf exn outv let out_phrase = ref print_out_phrase + +type 'a printer = 'a Format_doc.printer ref +type 'a toplevel_printer = (Format.formatter -> 'a -> unit) ref diff --git a/ocamlmerlin_mlx/ocaml/typing/oprint.mli b/ocamlmerlin_mlx/ocaml/typing/oprint.mli index 31dad9a..8ce44f3 100644 --- a/ocamlmerlin_mlx/ocaml/typing/oprint.mli +++ b/ocamlmerlin_mlx/ocaml/typing/oprint.mli @@ -13,24 +13,24 @@ (* *) (**************************************************************************) -open Format open Outcometree -val out_ident : (formatter -> out_ident -> unit) ref -val out_value : (formatter -> out_value -> unit) ref -val out_label : (formatter -> string * bool * out_type -> unit) ref -val out_type : (formatter -> out_type -> unit) ref -val out_type_args : (formatter -> out_type list -> unit) ref -val out_constr : (formatter -> out_constructor -> unit) ref -val out_class_type : (formatter -> out_class_type -> unit) ref -val out_module_type : (formatter -> out_module_type -> unit) ref -val out_sig_item : (formatter -> out_sig_item -> unit) ref -val out_signature : (formatter -> out_sig_item list -> unit) ref +type 'a printer = 'a Format_doc.printer ref +type 'a toplevel_printer = (Format.formatter -> 'a -> unit) ref + +val out_ident: out_ident printer +val out_value : out_value toplevel_printer +val out_label : out_label printer +val out_type : out_type printer +val out_type_args : out_type list printer +val out_constr : out_constructor printer +val out_class_type : out_class_type printer +val out_module_type : out_module_type printer +val out_sig_item : out_sig_item printer +val out_signature :out_sig_item list printer val out_functor_parameters : - (formatter -> - (string option * Outcometree.out_module_type) option list -> unit) - ref -val out_type_extension : (formatter -> out_type_extension -> unit) ref -val out_phrase : (formatter -> out_phrase -> unit) ref + (string option * Outcometree.out_module_type) option list printer +val out_type_extension : out_type_extension printer +val out_phrase : out_phrase toplevel_printer val parenthesized_ident : string -> bool diff --git a/ocamlmerlin_mlx/ocaml/typing/out_type.ml b/ocamlmerlin_mlx/ocaml/typing/out_type.ml new file mode 100644 index 0000000..c67f44b --- /dev/null +++ b/ocamlmerlin_mlx/ocaml/typing/out_type.ml @@ -0,0 +1,2146 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy and Jerome Vouillon, projet Cristal, INRIA Rocquencourt *) +(* *) +(* Copyright 1996 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(* Compute a spanning tree representation of types *) + +open Misc +open Ctype +open Longident +open Path +open Asttypes +open Types +open Btype +open Outcometree + +module Sig_component_kind = Shape.Sig_component_kind +module Style = Misc.Style + +(* Print a long identifier *) + +module Fmt = Format_doc +open Format_doc + +(* Print an identifier avoiding name collisions *) + +module Out_name = struct + let create x = { printed_name = x } + let print x = x.printed_name +end + +(** Some identifiers may require hiding when printing *) +type bound_ident = { hide:bool; ident:Ident.t } + +(* printing environment for path shortening and naming *) +let printing_env = ref Env.empty + +(* When printing, it is important to only observe the + current printing environment, without reading any new + cmi present on the file system *) +let in_printing_env f = Env.without_cmis f !printing_env + + type namespace = Sig_component_kind.t = + | Value + | Type + | Constructor + | Label + | Module + | Module_type + | Extension_constructor + | Class + | Class_type + + +module Namespace = struct + + let id = function + | Type -> 0 + | Module -> 1 + | Module_type -> 2 + | Class -> 3 + | Class_type -> 4 + | Extension_constructor | Value | Constructor | Label -> 5 + (* we do not handle those component *) + + let size = 1 + id Value + + + let pp ppf x = + Fmt.pp_print_string ppf (Shape.Sig_component_kind.to_string x) + + (** The two functions below should never access the filesystem, + and thus use {!in_printing_env} rather than directly + accessing the printing environment *) + let lookup = + let to_lookup f lid = fst @@ in_printing_env (f (Lident lid)) in + function + | Some Type -> to_lookup Env.find_type_by_name + | Some Module -> to_lookup Env.find_module_by_name + | Some Module_type -> to_lookup Env.find_modtype_by_name + | Some Class -> to_lookup Env.find_class_by_name + | Some Class_type -> to_lookup Env.find_cltype_by_name + | None | Some(Value|Extension_constructor|Constructor|Label) -> + fun _ -> raise Not_found + + let location namespace id = + let path = Path.Pident id in + try Some ( + match namespace with + | Some Type -> (in_printing_env @@ Env.find_type path).type_loc + | Some Module -> (in_printing_env @@ Env.find_module path).md_loc + | Some Module_type -> (in_printing_env @@ Env.find_modtype path).mtd_loc + | Some Class -> (in_printing_env @@ Env.find_class path).cty_loc + | Some Class_type -> (in_printing_env @@ Env.find_cltype path).clty_loc + | Some (Extension_constructor|Value|Constructor|Label) | None -> + Location.none + ) with Not_found -> None + + let best_class_namespace = function + | Papply _ | Pdot _ -> Some Module + | Pextra_ty _ -> assert false (* Only in type path *) + | Pident c -> + match location (Some Class) c with + | Some _ -> Some Class + | None -> Some Class_type + +end + +(** {2 Ident conflicts printing} + + Ident conflicts arise when multiple {!Ident.t}s are attributed the same name. + The following module stores the global conflict references and provides the + printing functions for explaining the source of the conflicts. +*) +module Ident_conflicts = struct + module M = String.Map + type explanation = + { kind: namespace; name:string; root_name:string; location:Location.t} + let explanations = ref M.empty + + let add namespace name id = + match Namespace.location (Some namespace) id with + | None -> () + | Some location -> + let explanation = + { kind = namespace; location; name; root_name=Ident.name id} + in + explanations := M.add name explanation !explanations + + let collect_explanation namespace id ~name = + let root_name = Ident.name id in + (* if [name] is of the form "root_name/%d", we register both + [id] and the identifier in scope for [root_name]. + *) + if root_name <> name && not (M.mem name !explanations) then + begin + add namespace name id; + if not (M.mem root_name !explanations) then + (* lookup the identifier in scope with name [root_name] and + add it too + *) + match Namespace.lookup (Some namespace) root_name with + | Pident root_id -> add namespace root_name root_id + | exception Not_found | _ -> () + end + + let pp_explanation ppf r= + Fmt.fprintf ppf "@[%a:@,Definition of %s %a@]" + Location.Doc.loc r.location (Sig_component_kind.to_string r.kind) + Style.inline_code r.name + + let print_located_explanations ppf l = + Fmt.fprintf ppf "@[%a@]" + (Fmt.pp_print_list pp_explanation) l + + let reset () = explanations := M.empty + let list_explanations () = + let c = !explanations in + reset (); + c |> M.bindings |> List.map snd |> List.sort Stdlib.compare + + + let print_toplevel_hint ppf l = + let conj ppf () = Fmt.fprintf ppf " and@ " in + let pp_namespace_plural ppf n = Fmt.fprintf ppf "%as" Namespace.pp n in + let root_names = List.map (fun r -> r.kind, r.root_name) l in + let unique_root_names = List.sort_uniq Stdlib.compare root_names in + let submsgs = Array.make Namespace.size [] in + let () = List.iter (fun (n,_ as x) -> + submsgs.(Namespace.id n) <- x :: submsgs.(Namespace.id n) + ) unique_root_names in + let pp_submsg ppf names = + match names with + | [] -> () + | [namespace, a] -> + Fmt.fprintf ppf + "@,\ + @[<2>@{Hint@}: The %a %a has been defined multiple times@ \ + in@ this@ toplevel@ session.@ \ + Some toplevel values still refer to@ old@ versions@ of@ this@ %a.\ + @ Did you try to redefine them?@]" + Namespace.pp namespace + Style.inline_code a Namespace.pp namespace + | (namespace, _) :: _ :: _ -> + Fmt.fprintf ppf + "@,\ + @[<2>@{Hint@}: The %a %a have been defined multiple times@ \ + in@ this@ toplevel@ session.@ \ + Some toplevel values still refer to@ old@ versions@ of@ those@ %a.\ + @ Did you try to redefine them?@]" + pp_namespace_plural namespace + Fmt.(pp_print_list ~pp_sep:conj Style.inline_code) + (List.map snd names) + pp_namespace_plural namespace in + Array.iter (pp_submsg ppf) submsgs + + let err_msg () = + let ltop, l = + (* isolate toplevel locations, since they are too imprecise *) + let from_toplevel a = + a.location.Location.loc_start.Lexing.pos_fname = "//toplevel//" in + List.partition from_toplevel (list_explanations ()) + in + match l, ltop with + | [], [] -> None + | _ -> + Some + (Fmt.doc_printf "%a%a" + print_located_explanations l + print_toplevel_hint ltop + ) + let err_print ppf = Option.iter Fmt.(fprintf ppf "@,%a" pp_doc) (err_msg ()) + + let exists () = M.cardinal !explanations >0 +end + +module Ident_names = struct + +module M = String.Map +module S = String.Set + +let enabled = ref true +let enable b = enabled := b + +(* Names bound in recursive definitions should be considered as bound + in the environment when printing identifiers but not when trying + to find shortest path. + For instance, if we define + [{ + module Avoid__me = struct + type t = A + end + type t = X + type u = [` A of t * t ] + module M = struct + type t = A of [ u | `B ] + type r = Avoid__me.t + end + }] + It is is important that in the definition of [t] that the outer type [t] is + printed as [t/2] reserving the name [t] to the type being defined in the + current recursive definition. + Contrarily, in the definition of [r], one should not shorten the + path [Avoid__me.t] to [r] until the end of the definition of [r]. + The [bound_in_recursion] bridges the gap between those two slightly different + notions of printing environment. +*) +let bound_in_recursion = ref M.empty + +(* When dealing with functor arguments, identity becomes fuzzy because the same + syntactic argument may be represented by different identifiers during the + error processing, we are thus disabling disambiguation on the argument name +*) +let fuzzy = ref S.empty +let with_fuzzy id f = + protect_refs [ R(fuzzy, S.add (Ident.name id) !fuzzy) ] f +let fuzzy_id namespace id = namespace = Module && S.mem (Ident.name id) !fuzzy + +let with_hidden ids f = + let update m id = M.add (Ident.name id.ident) id.ident m in + let updated = List.fold_left update !bound_in_recursion ids in + protect_refs [ R(bound_in_recursion, updated )] f + +let human_id id index = + (* The identifier with index [k] is the (k+1)-th most recent identifier in + the printing environment. We print them as [name/(k+1)] except for [k=0] + which is printed as [name] rather than [name/1]. + *) + if index = 0 then + Ident.name id + else + let ordinal = index + 1 in + String.concat "/" [Ident.name id; string_of_int ordinal] + +let indexed_name namespace id = + let find namespace id env = match namespace with + | Type -> Env.find_type_index id env + | Module -> Env.find_module_index id env + | Module_type -> Env.find_modtype_index id env + | Class -> Env.find_class_index id env + | Class_type-> Env.find_cltype_index id env + | Value | Extension_constructor | Constructor | Label -> None + in + let index = + match M.find_opt (Ident.name id) !bound_in_recursion with + | Some rec_bound_id -> + (* the identifier name appears in the current group of recursive + definition *) + if Ident.same rec_bound_id id then + Some 0 + else + (* the current recursive definition shadows one more time the + previously existing identifier with the same name *) + Option.map succ (in_printing_env (find namespace id)) + | None -> + in_printing_env (find namespace id) + in + let index = + (* If [index] is [None] at this point, it might indicate that + the identifier id is not defined in the environment, while there + are other identifiers in scope that share the same name. + Currently, this kind of partially incoherent environment happens + within functor error messages where the left and right hand side + have a different views of the environment at the source level. + Printing the source-level by using a default index of `0` + seems like a reasonable compromise in this situation however.*) + Option.value index ~default:0 + in + human_id id index + +let ident_name namespace id = + match namespace, !enabled with + | None, _ | _, false -> Out_name.create (Ident.name id) + | Some namespace, true -> + if fuzzy_id namespace id then Out_name.create (Ident.name id) + else + let name = indexed_name namespace id in + Ident_conflicts.collect_explanation namespace id ~name; + Out_name.create name +end +let ident_name = Ident_names.ident_name + +(* Print a path *) + +let ident_stdlib = Ident.create_persistent "Stdlib" + +let non_shadowed_stdlib namespace = function + | Pdot(Pident id, s) as path -> + Ident.same id ident_stdlib && + (match Namespace.lookup namespace s with + | path' -> Path.same path path' + | exception Not_found -> true) + | _ -> false + +let find_double_underscore s = + let len = String.length s in + let rec loop i = + if i + 1 >= len then + None + else if s.[i] = '_' && s.[i + 1] = '_' then + Some i + else + loop (i + 1) + in + loop 0 + +let rec module_path_is_an_alias_of env path ~alias_of = + match Env.find_module path env with + | { md_type = Mty_alias path'; _ } -> + Path.same path' alias_of || + module_path_is_an_alias_of env path' ~alias_of + | _ -> false + | exception Not_found -> false + +(* Simple heuristic to print Foo__bar.* as Foo.Bar.* when Foo.Bar is an alias + for Foo__bar. This pattern is used by the stdlib. *) +let rec rewrite_double_underscore_paths env p = + match p with + | Pdot (p, s) -> + Pdot (rewrite_double_underscore_paths env p, s) + | Papply (a, b) -> + Papply (rewrite_double_underscore_paths env a, + rewrite_double_underscore_paths env b) + | Pextra_ty (p, extra) -> + Pextra_ty (rewrite_double_underscore_paths env p, extra) + | Pident id -> + let name = Ident.name id in + match find_double_underscore name with + | None -> p + | Some i -> + let better_lid = + Ldot + (Location.mknoloc (Lident (String.sub name 0 i)), + (Location.mknoloc (Unit_info.modulize + (String.sub name (i + 2) (String.length name - i - 2))))) + in + match Env.find_module_by_name better_lid env with + | exception Not_found -> p + | p', _ -> + if module_path_is_an_alias_of env p' ~alias_of:p then + p' + else + p + +let rewrite_double_underscore_paths env p = + if env == Env.empty then + p + else + rewrite_double_underscore_paths env p + +let rec tree_of_path ?(disambiguation=true) namespace p = + let tree_of_path namespace p = tree_of_path ~disambiguation namespace p in + let namespace = if disambiguation then namespace else None in + match p with + | Pident id -> + Oide_ident (ident_name namespace id) + | Pdot(_, s) as path when non_shadowed_stdlib namespace path -> + Oide_ident (Out_name.create s) + | Pdot(p, s) -> + Oide_dot (tree_of_path (Some Module) p, s) + | Papply(p1, p2) -> + let t1 = tree_of_path (Some Module) p1 in + let t2 = tree_of_path (Some Module) p2 in + Oide_apply (t1, t2) + | Pextra_ty (p, extra) -> begin + (* inline record types are syntactically prevented from escaping their + binding scope, and are never shown to users. *) + match extra with + Pcstr_ty s -> + Oide_dot (tree_of_path (Some Type) p, s) + | Pext_ty -> + tree_of_path None p + end + +let tree_of_path ?disambiguation namespace p = + tree_of_path ?disambiguation namespace + (rewrite_double_underscore_paths !printing_env p) + + +(* Print a recursive annotation *) + +let tree_of_rec = function + | Trec_not -> Orec_not + | Trec_first -> Orec_first + | Trec_next -> Orec_next + +(* Normalize paths *) + +type param_subst = Id | Nth of int | Map of int list + +let _is_nth = function + Nth _ -> true + | _ -> false + +let compose l1 = function + | Id -> Map l1 + | Map l2 -> Map (List.map (List.nth l1) l2) + | Nth n -> Nth (List.nth l1 n) + +let _apply_subst s1 tyl = + if tyl = [] then [] + (* cf. PR#7543: Typemod.type_package doesn't respect type constructor arity *) + else + match s1 with + Nth n1 -> [List.nth tyl n1] + | Map l1 -> List.map (List.nth tyl) l1 + | Id -> tyl + +type best_path = Paths of Path.t list | Best of Path.t + +(** Short-paths cache: the five mutable variables below implement a one-slot + cache for short-paths + *) +let printing_old = ref Env.empty +let printing_pers = ref String.Set.empty +(** {!printing_old} and {!printing_pers} are the keys of the one-slot cache *) + +let printing_depth = ref 0 +let printing_cont = ref ([] : Env.iter_cont list) +let printing_map = ref Path.Map.empty +(** + - {!printing_map} is the main value stored in the cache. + Note that it is evaluated lazily and its value is updated during printing. + - {!printing_dep} is the current exploration depth of the environment, + it is used to determine whenever the {!printing_map} should be evaluated + further before completing a request. + - {!printing_cont} is the list of continuations needed to evaluate + the {!printing_map} one level further (see also {!Env.run_iter_cont}) +*) + +let rec index l x = + match l with + [] -> raise Not_found + | a :: l -> if eq_type x a then 0 else 1 + index l x + +let rec uniq = function + [] -> true + | a :: l -> not (List.memq (a : int) l) && uniq l + +let rec normalize_type_path ?(cache=false) env p = + try + let (params, ty, _) = Env.find_type_expansion p env in + match get_desc ty with + Tconstr (p1, tyl, _) -> + if List.length params = List.length tyl + && List.for_all2 eq_type params tyl + then normalize_type_path ~cache env p1 + else if cache || List.length params <= List.length tyl + || not (uniq (List.map get_id tyl)) then (p, Id) + else + let l1 = List.map (index params) tyl in + let (p2, s2) = normalize_type_path ~cache env p1 in + (p2, compose l1 s2) + | _ -> + (p, Nth (index params ty)) + with + Not_found -> + (Env.normalize_type_path None env p, Id) + +let penalty s = + if s <> "" && s.[0] = '_' then + 10 + else + match find_double_underscore s with + | None -> 1 + | Some _ -> 10 + +let rec path_size = function + Pident id -> + penalty (Ident.name id), -Ident.scope id + | Pdot (p, _) | Pextra_ty (p, Pcstr_ty _) -> + let (l, b) = path_size p in (1+l, b) + | Papply (p1, p2) -> + let (l, b) = path_size p1 in + (l + fst (path_size p2), b) + | Pextra_ty (p, _) -> path_size p + +let same_printing_env env = + let used_pers = Env.used_persistent () in + Env.same_types !printing_old env && String.Set.equal !printing_pers used_pers + +let set_printing_env env = + printing_env := env; + if !Clflags.real_paths || + !printing_env == Env.empty || + same_printing_env env then + () + else begin + (* printf "Reset printing_map@."; *) + printing_old := env; + printing_pers := Env.used_persistent (); + printing_map := Path.Map.empty; + printing_depth := 0; + (* printf "Recompute printing_map.@."; *) + let cont = + Env.iter_types + (fun p (p', _decl) -> + let (p1, s1) = normalize_type_path env p' ~cache:true in + (* Format.eprintf "%a -> %a = %a@." path p path p' path p1 *) + if s1 = Id then + try + let r = Path.Map.find p1 !printing_map in + match !r with + Paths l -> r := Paths (p :: l) + | Best p' -> r := Paths [p; p'] (* assert false *) + with Not_found -> + printing_map := Path.Map.add p1 (ref (Paths [p])) !printing_map) + env in + printing_cont := [cont]; + end + +let wrap_printing_env env f = + set_printing_env (Env.update_short_paths env); + try_finally f ~always:(fun () -> set_printing_env Env.empty) + +let wrap_printing_env ~error env f = + if error then Env.without_cmis (wrap_printing_env env) f + else wrap_printing_env env f + +let rec lid_of_path = function + Path.Pident id -> + Longident.Lident (Ident.name id) + | Path.Pdot (p1, s) | Path.Pextra_ty (p1, Pcstr_ty s) -> + Longident.Ldot (Location.mknoloc (lid_of_path p1), Location.mknoloc s) + | Path.Papply (p1, p2) -> + Longident.Lapply + (Location.mknoloc (lid_of_path p1), Location.mknoloc (lid_of_path p2)) + | Path.Pextra_ty (p, Pext_ty) -> lid_of_path p + +let is_unambiguous path env = + let l = Env.find_shadowed_types path env in + List.exists (Path.same path) l || (* concrete paths are ok *) + match l with + [] -> true + | p :: rem -> + (* allow also coherent paths: *) + let normalize p = fst (normalize_type_path ~cache:true env p) in + let p' = normalize p in + List.for_all (fun p -> Path.same (normalize p) p') rem || + (* also allow repeatedly defining and opening (for toplevel) *) + let id = lid_of_path p in + List.for_all (fun p -> Longident.same (lid_of_path p) id) rem && + Path.same p (fst (Env.find_type_by_name id env)) + +let rec get_best_path r = + match !r with + Best p' -> p' + | Paths [] -> raise Not_found + | Paths l -> + r := Paths []; + List.iter + (fun p -> + (* Format.eprintf "evaluating %a@." path p; *) + match !r with + Best p' when path_size p >= path_size p' -> () + | _ -> if is_unambiguous p !printing_env then r := Best p) + (* else Format.eprintf "%a ignored as ambiguous@." path p *) + l; + get_best_path r + +let best_type_path_original p = + if !printing_env == Env.empty + then (p, Id) + else if !Clflags.real_paths + then (p, Id) + else + let (p', s) = normalize_type_path !printing_env p in + let get_path () = get_best_path (Path.Map.find p' !printing_map) in + while !printing_cont <> [] && + try fst (path_size (get_path ())) > !printing_depth with Not_found -> true + do + printing_cont := List.map snd (Env.run_iter_cont !printing_cont); + incr printing_depth; + done; + let p'' = try get_path () with Not_found -> p' in + (* Format.eprintf "%a = %a -> %a@." path p path p' path p''; *) + (p'', s) + +type type_result = Short_paths.type_result = + | Nth of int + | Path of int list option * Path.t + +type type_resolution = Short_paths.type_resolution = + | Nth of int + | Subst of int list + | Id + +let apply_subst ns args = + List.map (List.nth args) ns + +let apply_subst_opt nso args = + match nso with + | None -> args + | Some ns -> apply_subst ns args + +let apply_nth n args = + List.nth args n + +let best_type_path p = + if !Clflags.real_paths || !printing_env == Env.empty + then Path(None, p) + else Short_paths.find_type (Env.short_paths !printing_env) p + +let best_type_path_resolution p = + if !Clflags.real_paths || !printing_env == Env.empty + then Id + else Short_paths.find_type_resolution (Env.short_paths !printing_env) p + +let best_type_path_simple p = + if !Clflags.real_paths || !printing_env == Env.empty + then p + else Short_paths.find_type_simple (Env.short_paths !printing_env) p + +let best_module_type_path p = + if !Clflags.real_paths || !printing_env == Env.empty + then p + else Short_paths.find_module_type (Env.short_paths !printing_env) p + +let best_module_path p = + if !Clflags.real_paths || !printing_env == Env.empty + then p + else Short_paths.find_module (Env.short_paths !printing_env) p + +let best_class_type_path p = + if !Clflags.real_paths || !printing_env == Env.empty + then None, p + else Short_paths.find_class_type (Env.short_paths !printing_env) p + +let best_class_type_path_simple p = + if !Clflags.real_paths || !printing_env == Env.empty + then p + else Short_paths.find_class_type_simple (Env.short_paths !printing_env) p + +(* When building a tree for a best type path, we should not disambiguate + identifiers whenever the short-path algorithm detected a better path than + the original one.*) +let tree_of_best_type_path p p' = + if Path.same p p' then tree_of_path (Some Type) p' + else tree_of_path ~disambiguation:false None p' + +(* Print a type expression *) + +let proxy ty = Transient_expr.repr (proxy ty) + +(* When printing a type scheme, we print weak names. When printing a plain + type, we do not. This type controls that behavior *) +type type_or_scheme = Type | Type_scheme + +let is_non_gen mode ty = + match mode with + | Type_scheme -> is_Tvar ty && get_level ty <> generic_level + | Type -> false + +let nameable_row row = + row_name row <> None && + List.for_all + (fun (_, f) -> + match row_field_repr f with + | Reither(c, l, _) -> + row_closed row && if c then l = [] else List.length l = 1 + | _ -> true) + (row_fields row) + +(* This specialized version of [Btype.iter_type_expr] normalizes and + short-circuits the traversal of the [type_expr], so that it covers only the + subterms that would be printed by the type printer. *) +let printer_iter_type_expr f ty = + match get_desc ty with + | Tconstr(p, tyl, _) -> begin + match best_type_path_resolution p with + | Nth n -> + f (apply_nth n tyl) + | Subst ns -> + List.iter f (apply_subst ns tyl) + | Id -> + List.iter f tyl + end + | Tvariant row -> begin + match row_name row with + | Some(_p, tyl) when nameable_row row -> + List.iter f tyl + | _ -> + iter_row f row + end + | Tobject (fi, nm) -> begin + match !nm with + | None -> + let fields, _ = flatten_fields fi in + List.iter + (fun (_, kind, ty) -> + if field_kind_repr kind = Fpublic then + f ty) + fields + | Some (_, l) -> + List.iter f (List.tl l) + end + | Tfield(_, kind, ty1, ty2) -> + if field_kind_repr kind = Fpublic then + f ty1; + f ty2 + | _ -> + Btype.iter_type_expr f ty + +let quoted_ident ppf x = + Style.as_inline_code !Oprint.out_ident ppf x + +module Internal_names : sig + + val reset : unit -> unit + + val add : Path.t -> unit + + val print_explanations : Env.t -> Fmt.formatter -> unit + +end = struct + + let names = ref Ident.Set.empty + + let reset () = + names := Ident.Set.empty + + let add p = + match p with + | Pident id -> + let name = Ident.name id in + if String.length name > 0 && name.[0] = '$' then begin + names := Ident.Set.add id !names + end + | Pdot _ | Papply _ | Pextra_ty _ -> () + + let print_explanations env ppf = + let constrs = + Ident.Set.fold + (fun id acc -> + let p = Pident id in + match Env.find_type p env with + | exception Not_found -> acc + | decl -> + match type_origin decl with + | Existential constr -> + let prev = String.Map.find_opt constr acc in + let prev = Option.value ~default:[] prev in + String.Map.add constr (tree_of_path None p :: prev) acc + | Definition | Rec_check_regularity -> acc) + !names String.Map.empty + in + String.Map.iter + (fun constr out_idents -> + match out_idents with + | [] -> () + | [out_ident] -> + fprintf ppf + "@ @[<2>@{Hint@}:@ %a@ is an existential type@ \ + bound by the constructor@ %a.@]" + quoted_ident out_ident + Style.inline_code constr + | out_ident :: out_idents -> + fprintf ppf + "@ @[<2>@{Hint@}:@ %a@ and %a@ are existential types@ \ + bound by the constructor@ %a.@]" + (Fmt.pp_print_list + ~pp_sep:(fun ppf () -> fprintf ppf ",@ ") + quoted_ident) + (List.rev out_idents) + quoted_ident out_ident + Style.inline_code constr) + constrs + +end + +module Variable_names : sig + val reset_names : unit -> unit + + val add_subst : (type_expr * type_expr) list -> unit + + val new_name : unit -> string + val new_var_name : non_gen:bool -> type_expr -> unit -> string + + val name_of_type : (unit -> string) -> transient_expr -> string + val check_name_of_type : non_gen:bool -> transient_expr -> unit + + + val reserve: type_expr -> unit + + val remove_names : transient_expr list -> unit + + val with_local_names : (unit -> 'a) -> 'a + + (* Refresh the weak variable map in the toplevel; for [print_items], which is + itself for the toplevel *) + val refresh_weak : unit -> unit +end = struct + (* We map from types to names, but not directly; we also store a substitution, + which maps from types to types. The lookup process is + "type -> apply substitution -> find name". The substitution is presumed to + be one-shot. *) + let names = ref ([] : (transient_expr * string) list) + let name_subst = ref ([] : (transient_expr * transient_expr) list) + let name_counter = ref 0 + let named_vars = ref ([] : string list) + let visited_for_named_vars = ref ([] : transient_expr list) + + let weak_counter = ref 1 + let weak_var_map = ref TypeMap.empty + let named_weak_vars = ref String.Set.empty + + let reset_names () = + names := []; + name_subst := []; + name_counter := 0; + named_vars := []; + visited_for_named_vars := [] + + let add_named_var tty = + match tty.desc with + Tvar (Some name) | Tunivar (Some name) -> + if List.mem name !named_vars then () else + named_vars := name :: !named_vars + | _ -> () + + let rec add_named_vars ty = + let tty = Transient_expr.repr ty in + let px = proxy ty in + if not (List.memq px !visited_for_named_vars) then begin + visited_for_named_vars := px :: !visited_for_named_vars; + match tty.desc with + | Tvar _ | Tunivar _ -> + add_named_var tty + | _ -> + printer_iter_type_expr add_named_vars ty + end + + let substitute ty = + match List.assq ty !name_subst with + | ty' -> ty' + | exception Not_found -> ty + + let add_subst subst = + name_subst := + List.map (fun (t1,t2) -> Transient_expr.repr t1, Transient_expr.repr t2) + subst + @ !name_subst + + let name_is_already_used name = + List.mem name !named_vars + || List.exists (fun (_, name') -> name = name') !names + || String.Set.mem name !named_weak_vars + + let rec new_name () = + let name = Misc.letter_of_int !name_counter in + incr name_counter; + if name_is_already_used name then new_name () else name + + let rec new_weak_name ty () = + let name = "weak" ^ Int.to_string !weak_counter in + incr weak_counter; + if name_is_already_used name then new_weak_name ty () + else begin + named_weak_vars := String.Set.add name !named_weak_vars; + weak_var_map := TypeMap.add ty name !weak_var_map; + name + end + + let new_var_name ~non_gen ty () = + if non_gen then new_weak_name ty () + else new_name () + + let name_of_type name_generator t = + (* We've already been through repr at this stage, so t is our representative + of the union-find class. *) + let t = substitute t in + try List.assq t !names with Not_found -> + try TransientTypeMap.find t !weak_var_map with Not_found -> + let name = + match t.desc with + Tvar (Some name) | Tunivar (Some name) -> + (* Some part of the type we've already printed has assigned another + * unification variable to that name. We want to keep the name, so + * try adding a number until we find a name that's not taken. *) + let available name = + List.for_all + (fun (_, name') -> name <> name') + !names + in + if available name then name + else + let suffixed i = name ^ Int.to_string i in + let i = Misc.find_first_mono (fun i -> available (suffixed i)) in + suffixed i + | _ -> + (* No name available, create a new one *) + name_generator () + in + (* Exception for type declarations *) + if name <> "_" then names := (t, name) :: !names; + name + + let check_name_of_type ~non_gen px = + let name_gen = new_var_name ~non_gen (Transient_expr.type_expr px) in + ignore(name_of_type name_gen px) + + let remove_names tyl = + let tyl = List.map substitute tyl in + names := List.filter (fun (ty,_) -> not (List.memq ty tyl)) !names + + let with_local_names f = + let old_names = !names in + let old_subst = !name_subst in + names := []; + name_subst := []; + try_finally + ~always:(fun () -> + names := old_names; + name_subst := old_subst) + f + + let refresh_weak () = + let refresh t name (m,s) = + if is_non_gen Type_scheme t then + begin + TypeMap.add t name m, + String.Set.add name s + end + else m, s in + let m, s = + TypeMap.fold refresh !weak_var_map (TypeMap.empty ,String.Set.empty) in + named_weak_vars := s; + weak_var_map := m + + let reserve ty = + normalize_type ty; + add_named_vars ty +end + +module Aliases = struct + let visited_objects = ref ([] : transient_expr list) + let aliased = ref ([] : transient_expr list) + let delayed = ref ([] : transient_expr list) + let printed_aliases = ref ([] : transient_expr list) + +(* [printed_aliases] is a subset of [aliased] that records only those aliased + types that have actually been printed; this allows us to avoid naming loops + that the user will never see. *) + + let is_delayed t = List.memq t !delayed + + let remove_delay t = + if is_delayed t then + delayed := List.filter ((!=) t) !delayed + + let add_delayed t = + if not (is_delayed t) then delayed := t :: !delayed + + let is_aliased_proxy px = List.memq px !aliased + let is_printed_proxy px = List.memq px !printed_aliases + + let add_proxy px = + if not (is_aliased_proxy px) then + aliased := px :: !aliased + + let add ty = add_proxy (proxy ty) + + let add_printed_proxy ~non_gen px = + Variable_names.check_name_of_type ~non_gen px; + printed_aliases := px :: !printed_aliases + + let mark_as_printed px = + if is_aliased_proxy px then (add_printed_proxy ~non_gen:false) px + + let add_printed ty = add_printed_proxy (proxy ty) + + let aliasable ty = + match get_desc ty with + Tvar _ | Tunivar _ | Tpoly _ -> false + | Tconstr (p, _, _) -> begin + match best_type_path_resolution p with + | Nth _ -> false + | Subst _ | Id -> true + end + | _ -> true + + (* + let should_visit_object ty = + match get_desc ty with + | Tvariant row -> not (static_row row) + | Tobject _ -> opened_object ty + | _ -> false + + let rec mark_loops_rec visited ty = + let px = proxy ty in + if List.memq px visited && aliasable ty then add_proxy px else + let tty = Transient_expr.repr ty in + let visited = px :: visited in + match tty.desc with + | Tvariant _ | Tobject _ -> + if List.memq px !visited_objects then add_proxy px else begin + if should_visit_object ty then + visited_objects := px :: !visited_objects; + printer_iter_type_expr (mark_loops_rec visited) ty + end + | Tpoly(ty, tyl) -> + List.iter add tyl; + mark_loops_rec visited ty + | _ -> + printer_iter_type_expr (mark_loops_rec visited) ty + *) + + let rec mark_loops_rec visited ty = + let px = proxy ty in + if List.memq px visited && aliasable ty then add_proxy px else + let visited = px :: visited in + match Types.get_desc ty with + | Tvar _ -> Variable_names.reserve ty + | Tarrow(_, ty1, ty2, _) -> + mark_loops_rec visited ty1; mark_loops_rec visited ty2 + | Ttuple tyl -> List.iter (fun (_, ty) -> mark_loops_rec visited ty) tyl + | Tconstr(p, tyl, _) -> begin + match best_type_path_resolution p with + | Nth n -> + mark_loops_rec visited (apply_nth n tyl) + | Subst ns -> + List.iter (mark_loops_rec visited) (apply_subst ns tyl) + | Id -> + List.iter (mark_loops_rec visited) tyl + end + | Tpackage { pack_cstrs; _ } -> + List.iter (fun (_n, ty) -> mark_loops_rec visited ty) pack_cstrs + | Tvariant row -> + if List.memq px !visited_objects then add_proxy px else + begin + if not (static_row row) then + visited_objects := px :: !visited_objects; + match row_name row with + | Some(_p, tyl) when nameable_row row -> + List.iter (mark_loops_rec visited) tyl + | _ -> + iter_row (mark_loops_rec visited) row + end + | Tobject (fi, nm) -> + if List.memq px !visited_objects then add_proxy px else + begin + if opened_object ty then + visited_objects := px :: !visited_objects; + begin match !nm with + | None -> + let fields, _ = flatten_fields fi in + List.iter + (fun (_, kind, ty) -> + if field_kind_repr kind = Fpublic then + mark_loops_rec visited ty) + fields + | Some (_, l) -> + List.iter (mark_loops_rec visited) (List.tl l) + end + end + | Tfield(_, kind, ty1, ty2) when field_kind_repr kind = Fpublic -> + mark_loops_rec visited ty1; mark_loops_rec visited ty2 + | Tfield(_, _, _, ty2) -> + mark_loops_rec visited ty2 + | Tnil -> () + | Tsubst _ -> () (* we do not print arguments *) + | Tlink _ -> fatal_error "Printtyp.mark_loops_rec (2)" + | Tpoly (ty, tyl) -> + List.iter (fun t -> add t) tyl; + mark_loops_rec visited ty + | Tunivar _ -> Variable_names.reserve ty + + let mark_loops ty = + mark_loops_rec [] ty + + let reset () = + visited_objects := []; aliased := []; delayed := []; printed_aliases := [] + +end + +let prepare_type ty = + Variable_names.reserve ty; + Aliases.mark_loops ty + + +let reset_except_conflicts () = + Variable_names.reset_names (); Aliases.reset (); Internal_names.reset () + +let reset () = + Ident_conflicts.reset (); + reset_except_conflicts () + +let prepare_for_printing tyl = + reset_except_conflicts (); + List.iter prepare_type tyl + +let add_type_to_preparation = prepare_type + +(* Disabled in classic mode when printing an unification error *) +let print_labels = ref true +let with_labels b f = Misc.protect_refs [R (print_labels,b)] f + +let alias_nongen_row mode px ty = + match get_desc ty with + | Tvariant _ | Tobject _ -> + if is_non_gen mode (Transient_expr.type_expr px) then + Aliases.add_proxy px + | _ -> () + +let rec tree_of_typexp mode ty = + let px = proxy ty in + if Aliases.is_printed_proxy px && not (Aliases.is_delayed px) then + let non_gen = is_non_gen mode (Transient_expr.type_expr px) in + let name = Variable_names.(name_of_type (new_var_name ~non_gen ty)) px in + Otyp_var (non_gen, name) else + + let pr_typ () = + let tty = Transient_expr.repr ty in + match tty.desc with + | Tvar _ -> + let non_gen = is_non_gen mode ty in + let name_gen = Variable_names.new_var_name ~non_gen ty in + Otyp_var (non_gen, Variable_names.name_of_type name_gen tty) + | Tarrow(l, ty1, ty2, _) -> + let lab = + if !print_labels || is_optional l then l else Nolabel + in + let t1 = + if is_optional l then + match get_desc ty1 with + | Tconstr(path, [ty], _) + when Path.same path Predef.path_option -> + tree_of_typexp mode ty + | _ -> Otyp_stuff "" + else tree_of_typexp mode ty1 in + Otyp_arrow (lab, t1, tree_of_typexp mode ty2) + | Ttuple tyl -> + Otyp_tuple (tree_of_labeled_typlist mode tyl) + | Tconstr(p, tyl, _abbrev) -> begin + match best_type_path p with + | Nth n -> tree_of_typexp mode (apply_nth n tyl) + | Path(nso, p') -> + Internal_names.add p'; + let tyl' = apply_subst_opt nso tyl in + Otyp_constr (tree_of_path (Some Type) p', tree_of_typlist mode tyl') + end + | Tvariant row -> + let Row {fields; name; closed; _} = row_repr row in + let fields = + if closed then + List.filter (fun (_, f) -> row_field_repr f <> Rabsent) + fields + else fields in + let present = + List.filter + (fun (_, f) -> + match row_field_repr f with + | Rpresent _ -> true + | _ -> false) + fields in + let all_present = List.length present = List.length fields in + begin match name with + | Some(p, tyl) when nameable_row row -> + let out_variant = + match best_type_path p with + | Nth n -> tree_of_typexp mode (apply_nth n tyl) + | Path(s, p) -> + let id = tree_of_path (Some Type) p in + let args = tree_of_typlist mode (apply_subst_opt s tyl) in + Otyp_constr (id, args) + in + if closed && all_present then + out_variant + else + let tags = + if all_present then None else Some (List.map fst present) in + Otyp_variant (Ovar_typ out_variant, closed, tags) + | _ -> + let fields = List.map (tree_of_row_field mode) fields in + let tags = + if all_present then None else Some (List.map fst present) in + Otyp_variant (Ovar_fields fields, closed, tags) + end + | Tobject (fi, nm) -> + tree_of_typobject mode fi !nm + | Tnil | Tfield _ -> + tree_of_typobject mode ty None + | Tsubst _ -> + (* This case should only happen when debugging the compiler *) + Otyp_stuff "" + | Tlink _ -> + fatal_error "Out_type.tree_of_typexp" + | Tpoly (ty, []) -> + tree_of_typexp mode ty + | Tpoly (ty, tyl) -> + (*let print_names () = + List.iter (fun (_, name) -> prerr_string (name ^ " ")) !names; + prerr_string "; " in *) + if tyl = [] then tree_of_typexp mode ty else begin + let tyl = List.map Transient_expr.repr tyl in + let old_delayed = !Aliases.delayed in + (* Make the names delayed, so that the real type is + printed once when used as proxy *) + List.iter Aliases.add_delayed tyl; + let tl = List.map Variable_names.(name_of_type new_name) tyl in + let tr = Otyp_poly (tl, tree_of_typexp mode ty) in + (* Forget names when we leave scope *) + Variable_names.remove_names tyl; + Aliases.delayed := old_delayed; tr + end + | Tunivar _ -> + Otyp_var (false, Variable_names.(name_of_type new_name) tty) + | Tpackage pack -> + let pack = tree_of_package mode pack in + Otyp_module pack + in + Aliases.remove_delay px; + alias_nongen_row mode px ty; + if Aliases.(is_aliased_proxy px && aliasable ty) then begin + let non_gen = is_non_gen mode (Transient_expr.type_expr px) in + Aliases.add_printed_proxy ~non_gen px; + (* add_printed_alias chose a name, thus the name generator + doesn't matter.*) + let alias = Variable_names.(name_of_type (new_var_name ~non_gen ty)) px in + Otyp_alias {non_gen; aliased = pr_typ (); alias } end + else pr_typ () + +and tree_of_row_field mode (l, f) = + match row_field_repr f with + | Rpresent None | Reither(true, [], _) -> (l, false, []) + | Rpresent(Some ty) -> (l, false, [tree_of_typexp mode ty]) + | Reither(c, tyl, _) -> + if c (* contradiction: constant constructor with an argument *) + then (l, true, tree_of_typlist mode tyl) + else (l, false, tree_of_typlist mode tyl) + | Rabsent -> (l, false, [] (* actually, an error *)) + +and tree_of_typlist mode tyl = + List.map (tree_of_typexp mode) tyl + +and tree_of_labeled_typlist mode tyl = + List.map (fun (label, ty) -> label, tree_of_typexp mode ty) tyl + +and tree_of_typobject mode fi nm = + begin match nm with + | None -> + let pr_fields fi = + let (fields, rest) = flatten_fields fi in + let present_fields = + List.fold_right + (fun (n, k, t) l -> + match field_kind_repr k with + | Fpublic -> (n, t) :: l + | _ -> l) + fields [] in + let sorted_fields = + List.sort + (fun (n, _) (n', _) -> String.compare n n') present_fields in + tree_of_typfields mode rest sorted_fields in + let (fields, open_row) = pr_fields fi in + Otyp_object {fields; open_row} + | Some (p, _ty :: tyl) -> + let args = tree_of_typlist mode tyl in + let p' = best_type_path_simple p in + Otyp_class (tree_of_best_type_path p p', args) + | _ -> + fatal_error "Out_type.tree_of_typobject" + end + +and tree_of_typfields mode rest = function + | [] -> + let open_row = + match get_desc rest with + | Tvar _ | Tunivar _ | Tconstr _-> true + | Tnil -> false + | _ -> fatal_error "typfields (1)" + in + ([], open_row) + | (s, t) :: l -> + let field = (s, tree_of_typexp mode t) in + let (fields, rest) = tree_of_typfields mode rest l in + (field :: fields, rest) + +and tree_of_package mode {pack_path; pack_cstrs} = + let pack_path = best_module_type_path pack_path in + { opack_path = tree_of_path (Some Module_type) pack_path; + opack_cstrs = + List.map + (fun (li, ty) -> (String.concat "." li, tree_of_typexp mode ty)) + pack_cstrs } + +let typexp mode ppf ty = + !Oprint.out_type ppf (tree_of_typexp mode ty) + +let prepared_type_expr ppf ty = typexp Type ppf ty + +(* "Half-prepared" type expression: [ty] should have had its names reserved, but + should not have had its loops marked. *) +let type_expr_with_reserved_names ppf ty = + Aliases.reset (); + Aliases.mark_loops ty; + prepared_type_expr ppf ty + + +let prepared_type_scheme ppf ty = typexp Type_scheme ppf ty + +(* Print one type declaration *) + +let tree_of_constraints params = + List.fold_right + (fun ty list -> + let ty' = unalias ty in + if proxy ty != proxy ty' then + let tr = tree_of_typexp Type_scheme ty in + (tr, tree_of_typexp Type_scheme ty') :: list + else list) + params [] + +let filter_params tyl = + let params = + List.fold_left + (fun tyl ty -> + if List.exists (eq_type ty) tyl + then newty2 ~level:generic_level (Ttuple [None, ty]) :: tyl + else ty :: tyl) + (* Two parameters might be identical due to a constraint but we need to + print them differently in order to make the output syntactically valid. + We use [Ttuple [ty]] because it is printed as [ty]. *) + (* Replacing fold_left by fold_right does not work! *) + [] tyl + in List.rev params + +let prepare_type_constructor_arguments = function + | Cstr_tuple l -> List.iter prepare_type l + | Cstr_record l -> List.iter (fun l -> prepare_type l.ld_type) l + +let tree_of_label l = + { + olab_name = Ident.name l.ld_id; + olab_mut = l.ld_mutable; + olab_atomic = l.ld_atomic; + olab_type = tree_of_typexp Type l.ld_type; + } + +let tree_of_constructor_arguments = function + | Cstr_tuple l -> tree_of_typlist Type l + | Cstr_record l -> [ Otyp_record (List.map tree_of_label l) ] + +let tree_of_single_constructor cd = + let name = Ident.name cd.cd_id in + let ret = Option.map (tree_of_typexp Type) cd.cd_res in + let args = tree_of_constructor_arguments cd.cd_args in + { + ocstr_name = name; + ocstr_args = args; + ocstr_return_type = ret; + } + +(* When printing GADT constructor, we need to forget the naming decision we took + for the type parameters and constraints. Indeed, in + {[ + type 'a t = X: 'a -> 'b t + ]} + It is fine to print both the type parameter ['a] and the existentially + quantified ['a] in the definition of the constructor X as ['a] + *) +let tree_of_constructor_in_decl cd = + match cd.cd_res with + | None -> tree_of_single_constructor cd + | Some _ -> + Variable_names.with_local_names (fun () -> tree_of_single_constructor cd) + +let prepare_decl id decl = + let params = filter_params decl.type_params in + begin match decl.type_manifest with + | Some ty -> + let vars = free_variables ty in + List.iter + (fun ty -> + if get_desc ty = Tvar (Some "_") && List.exists (eq_type ty) vars + then set_type_desc ty (Tvar None)) + params + | None -> () + end; + List.iter Aliases.add params; + List.iter prepare_type params; + List.iter (Aliases.add_printed ~non_gen:false) params; + let ty_manifest = + match decl.type_manifest with + | None -> None + | Some ty -> + let ty = + (* Special hack to hide variant name *) + match get_desc ty with + Tvariant row -> + begin match row_name row with + Some (Pident id', _) when Ident.same id id' -> + newgenty (Tvariant (set_row_name row None)) + | _ -> ty + end + | _ -> ty + in + prepare_type ty; + Some ty + in + begin match decl.type_kind with + | Type_abstract _ -> () + | Type_variant (cstrs, _rep) -> + List.iter + (fun c -> + prepare_type_constructor_arguments c.cd_args; + Option.iter prepare_type c.cd_res) + cstrs + | Type_record(l, _rep) -> + List.iter (fun l -> prepare_type l.ld_type) l + | Type_open -> () + end; + ty_manifest, params + +let tree_of_type_decl id decl = + let ty_manifest, params = prepare_decl id decl in + let type_param ot_variance = + function + | Otyp_var (ot_non_gen, ot_name) -> {ot_non_gen; ot_name; ot_variance} + | _ -> {ot_non_gen=false; ot_name="?"; ot_variance} + in + let type_defined decl = + let abstr = + match decl.type_kind with + Type_abstract _ -> + decl.type_manifest = None || decl.type_private = Private + | Type_record _ -> + decl.type_private = Private + | Type_variant (tll, _rep) -> + decl.type_private = Private || + List.exists (fun cd -> cd.cd_res <> None) tll + | Type_open -> + decl.type_manifest = None + in + let vari = + List.map2 + (fun ty v -> + let is_var = is_Tvar ty in + if !Clflags.print_variance || abstr || not is_var then + let inj = + !Clflags.print_variance && Variance.mem Inj v || + type_kind_is_abstract decl && Variance.mem Inj v && + match decl.type_manifest with + | None -> true + | Some ty -> (* only abstract or private row types *) + decl.type_private = Private && + Btype.is_constr_row ~allow_ident:true (Btype.row_of_type ty) + and (co, cn) = Variance.get_upper v in + (match co, cn with + | false, false -> Bivariant + | true, false -> Covariant + | false, true -> Contravariant + | true, true -> NoVariance), + (if inj then Injective else NoInjectivity) + else (NoVariance, NoInjectivity)) + decl.type_params decl.type_variance + in + (Ident.name id, + List.map2 (fun ty cocn -> type_param cocn (tree_of_typexp Type ty)) + params vari) + in + let tree_of_manifest ty1 = + match ty_manifest with + | None -> ty1 + | Some ty -> Otyp_manifest (tree_of_typexp Type ty, ty1) + in + let (name, args) = type_defined decl in + let constraints = tree_of_constraints params in + let ty, priv, unboxed = + match decl.type_kind with + | Type_abstract _ -> + begin match ty_manifest with + | None -> (Otyp_abstract, Public, false) + | Some ty -> + tree_of_typexp Type ty, decl.type_private, false + end + | Type_variant (cstrs, rep) -> + tree_of_manifest + (Otyp_sum (List.map tree_of_constructor_in_decl cstrs)), + decl.type_private, + (rep = Variant_unboxed) + | Type_record(lbls, rep) -> + tree_of_manifest (Otyp_record (List.map tree_of_label lbls)), + decl.type_private, + (match rep with Record_unboxed _ -> true | _ -> false) + | Type_open -> + tree_of_manifest Otyp_open, + decl.type_private, + false + in + { otype_name = name; + otype_params = args; + otype_type = ty; + otype_private = priv; + otype_immediate = Type_immediacy.of_attributes decl.type_attributes; + otype_unboxed = unboxed; + otype_cstrs = constraints } + +let add_type_decl_to_preparation id decl = + ignore @@ prepare_decl id decl + +let tree_of_prepared_type_decl id decl = + tree_of_type_decl id decl + +let tree_of_type_decl id decl = + reset_except_conflicts(); + tree_of_type_decl id decl + +let add_constructor_to_preparation c = + prepare_type_constructor_arguments c.cd_args; + Option.iter prepare_type c.cd_res + +let prepared_constructor ppf c = + !Oprint.out_constr ppf (tree_of_single_constructor c) + + +let tree_of_type_declaration id decl rs = + Osig_type (tree_of_type_decl id decl, tree_of_rec rs) + +let tree_of_prepared_type_declaration id decl rs = + Osig_type (tree_of_prepared_type_decl id decl, tree_of_rec rs) + +let add_type_declaration_to_preparation id decl = + add_type_decl_to_preparation id decl + +let prepared_type_declaration id ppf decl = + !Oprint.out_sig_item ppf + (tree_of_prepared_type_declaration id decl Trec_first) + + +(* When printing extension constructor, it is important to ensure that +after printing the constructor, we are still in the scope of the constructor. +For GADT constructor, this can be done by printing the type parameters inside +their own isolated scope. This ensures that in +{[ + type 'b t += A: 'b -> 'b any t +]} +the type parameter `'b` is not bound when printing the type variable `'b` from +the constructor definition from the type parameter. + +Contrarily, for non-gadt constructor, we must keep the same scope for +the type parameters and the constructor because a type constraint may +have changed the name of the type parameter: +{[ +type -'a t = .. constraint 'a> = 'a +(* the universal 'a is here to steal the name 'a from the type parameter *) +type 'a t = X of 'a +]} *) +let add_extension_constructor_to_preparation ext = + let ty_params = filter_params ext.ext_type_params in + List.iter Aliases.add ty_params; + List.iter prepare_type ty_params; + prepare_type_constructor_arguments ext.ext_args; + Option.iter prepare_type ext.ext_ret_type + +let extension_constructor_args_and_ret_type_subtree ext_args ext_ret_type = + let ret = Option.map (tree_of_typexp Type) ext_ret_type in + let args = tree_of_constructor_arguments ext_args in + (args, ret) + +let prepared_tree_of_extension_constructor + id ext es + = + let type_path = best_type_path_simple ext.ext_type_path in + let ty_name = Path.name type_path in + let ty_params = filter_params ext.ext_type_params in + let type_param = + function + | Otyp_var (_, id) -> id + | _ -> "?" + in + let param_scope f = + match ext.ext_ret_type with + | None -> + (* normal constructor: same scope for parameters and the constructor *) + f () + | Some _ -> + (* gadt constructor: isolated scope for the type parameters *) + Variable_names.with_local_names f + in + let ty_params = + param_scope + (fun () -> + List.iter (Aliases.add_printed ~non_gen:false) ty_params; + List.map (fun ty -> type_param (tree_of_typexp Type ty)) ty_params + ) + in + let name = Ident.name id in + let args, ret = + extension_constructor_args_and_ret_type_subtree + ext.ext_args + ext.ext_ret_type + in + let ext = + { oext_name = name; + oext_type_name = ty_name; + oext_type_params = ty_params; + oext_args = args; + oext_ret_type = ret; + oext_private = ext.ext_private } + in + let es = + match es with + Text_first -> Oext_first + | Text_next -> Oext_next + | Text_exception -> Oext_exception + in + Osig_typext (ext, es) + +let tree_of_extension_constructor id ext es = + reset_except_conflicts (); + add_extension_constructor_to_preparation ext; + prepared_tree_of_extension_constructor id ext es + +let prepared_extension_constructor id ppf ext = + !Oprint.out_sig_item ppf + (prepared_tree_of_extension_constructor id ext Text_first) + +(* Print a value declaration *) + +let tree_of_value_description id decl = + (* Format.eprintf "@[%a@]@." raw_type_expr decl.val_type; *) + let id = Ident.name id in + let () = prepare_for_printing [decl.val_type] in + let ty = tree_of_typexp Type_scheme decl.val_type in + let vd = + { oval_name = id; + oval_type = ty; + oval_prims = []; + oval_attributes = [] } + in + let vd = + match decl.val_kind with + | Val_prim p -> Primitive.print p vd + | _ -> vd + in + Osig_value vd + +(* Print a class type *) + +let method_type priv ty = + match priv, get_desc ty with + | Mpublic, Tpoly(ty, tyl) -> (ty, tyl) + | _ , _ -> (ty, []) + +let prepare_method _lab (priv, _virt, ty) = + let ty, _ = method_type priv ty in + prepare_type ty + +let tree_of_method mode (lab, priv, virt, ty) = + let (ty, tyl) = method_type priv ty in + let tty = tree_of_typexp mode ty in + Variable_names.remove_names (List.map Transient_expr.repr tyl); + let priv = priv <> Mpublic in + let virt = virt = Virtual in + Ocsg_method (lab, priv, virt, tty) + +let rec prepare_class_type params = function + | Cty_constr (_p, tyl, cty) -> + let row = Btype.self_type_row cty in + if List.memq (proxy row) !Aliases.visited_objects + || not (List.for_all is_Tvar params) + || deep_occur_list row tyl + then prepare_class_type params cty + else List.iter prepare_type tyl + | Cty_signature sign -> + (* Self may have a name *) + let px = proxy sign.csig_self_row in + if List.memq px !Aliases.visited_objects then Aliases.add_proxy px + else Aliases.(visited_objects := px :: !visited_objects); + Vars.iter (fun _ (_, _, ty) -> prepare_type ty) sign.csig_vars; + Meths.iter prepare_method sign.csig_meths + | Cty_arrow (_, ty, cty) -> + prepare_type ty; + prepare_class_type params cty + +let rec tree_of_class_type mode params = + function + | Cty_constr (p', tyl, cty) -> + let row = Btype.self_type_row cty in + if List.memq (proxy row) !Aliases.visited_objects + || not (List.for_all is_Tvar params) + then + tree_of_class_type mode params cty + else + let nso, p' = best_class_type_path p' in + let tyl = apply_subst_opt nso tyl in + let namespace = Namespace.best_class_namespace p' in + Octy_constr (tree_of_path namespace p', tree_of_typlist Type_scheme tyl) + | Cty_signature sign -> + let px = proxy sign.csig_self_row in + let self_ty = + if Aliases.is_aliased_proxy px then + Some + (Otyp_var (false, Variable_names.(name_of_type new_name) px)) + else None + in + let csil = [] in + let csil = + List.fold_left + (fun csil (ty1, ty2) -> Ocsg_constraint (ty1, ty2) :: csil) + csil (tree_of_constraints params) + in + let all_vars = + Vars.fold (fun l (m, v, t) all -> (l, m, v, t) :: all) sign.csig_vars [] + in + (* Consequence of PR#3607: order of Map.fold has changed! *) + let all_vars = List.rev all_vars in + let csil = + List.fold_left + (fun csil (l, m, v, t) -> + Ocsg_value (l, m = Mutable, v = Virtual, tree_of_typexp mode t) + :: csil) + csil all_vars + in + let all_meths = + Meths.fold + (fun l (p, v, t) all -> (l, p, v, t) :: all) + sign.csig_meths [] + in + let all_meths = List.rev all_meths in + let csil = + List.fold_left + (fun csil meth -> tree_of_method mode meth :: csil) + csil all_meths + in + Octy_signature (self_ty, List.rev csil) + | Cty_arrow (l, ty, cty) -> + let lab = + if !print_labels || is_optional l then l else Nolabel + in + let tr = + if is_optional l then + match get_desc ty with + | Tconstr(path, [ty], _) when Path.same path Predef.path_option -> + tree_of_typexp mode ty + | _ -> Otyp_stuff "" + else tree_of_typexp mode ty in + Octy_arrow (lab, tr, tree_of_class_type mode params cty) + + +let tree_of_class_param param variance = + let ot_variance = + if is_Tvar param then Asttypes.(NoVariance, NoInjectivity) else variance in + match tree_of_typexp Type_scheme param with + Otyp_var (ot_non_gen, ot_name) -> {ot_non_gen; ot_name; ot_variance} + | _ -> {ot_non_gen=false; ot_name="?"; ot_variance} + +let class_variance = + let open Variance in let open Asttypes in + List.map (fun v -> + let inj = !Clflags.print_variance && Variance.mem Inj v in + (match mem May_pos v, mem May_neg v with + | false, false -> Bivariant + | true, false -> Covariant + | false, true -> Contravariant + | true, true -> NoVariance), + (if inj then Injective else NoInjectivity)) + +let tree_of_class_declaration id cl rs = + let params = filter_params cl.cty_params in + + reset_except_conflicts (); + List.iter Aliases.add params; + prepare_class_type params cl.cty_type; + let px = proxy (Btype.self_type_row cl.cty_type) in + List.iter prepare_type params; + + List.iter (Aliases.add_printed ~non_gen:false) params; + if Aliases.is_aliased_proxy px then + Aliases.add_printed_proxy ~non_gen:false px; + + let vir_flag = cl.cty_new = None in + Osig_class + (vir_flag, Ident.name id, + List.map2 tree_of_class_param params (class_variance cl.cty_variance), + tree_of_class_type Type_scheme params cl.cty_type, + tree_of_rec rs) + +let tree_of_cltype_declaration id cl rs = + let params = cl.clty_params in + + reset_except_conflicts (); + List.iter Aliases.add params; + prepare_class_type params cl.clty_type; + let px = proxy (Btype.self_type_row cl.clty_type) in + List.iter prepare_type params; + + List.iter (Aliases.add_printed ~non_gen:false) params; + Aliases.mark_as_printed px; + + let sign = Btype.signature_of_class_type cl.clty_type in + let has_virtual_vars = + Vars.fold (fun _ (_,vr,_) b -> vr = Virtual || b) + sign.csig_vars false + in + let has_virtual_meths = + Meths.fold (fun _ (_,vr,_) b -> vr = Virtual || b) + sign.csig_meths false + in + Osig_class_type + (has_virtual_vars || has_virtual_meths, Ident.name id, + List.map2 tree_of_class_param params (class_variance cl.clty_variance), + tree_of_class_type Type_scheme params cl.clty_type, + tree_of_rec rs) + +(* Print a module type *) + +(* Wrap env from merlin: + +let wrap_env fenv ftree arg = + let env = !printing_env in + let env' = Env.update_short_paths (fenv env) in + set_printing_env env'; + let tree = ftree arg in + set_printing_env env; + tree + *) +let wrap_env fenv ftree arg = + (* We save the current value of the short-path cache *) + (* From keys *) + let env = !printing_env in + let old_pers = !printing_pers in + (* to data *) + let old_map = !printing_map in + let old_depth = !printing_depth in + let old_cont = !printing_cont in + set_printing_env (Env.update_short_paths (fenv env)); + let tree = ftree arg in + if !Clflags.real_paths + || same_printing_env env then () + (* our cached key is still live in the cache, and we want to keep all + progress made on the computation of the [printing_map] *) + else begin + (* we restore the snapshotted cache before calling set_printing_env *) + printing_old := env; + printing_pers := old_pers; + printing_depth := old_depth; + printing_cont := old_cont; + printing_map := old_map + end; + set_printing_env env; + tree + +let dummy = + { + type_params = []; + type_arity = 0; + type_kind = Type_abstract Definition; + type_private = Public; + type_manifest = None; + type_variance = []; + type_separability = []; + type_is_newtype = false; + type_expansion_scope = Btype.lowest_level; + type_loc = Location.none; + type_attributes = []; + type_immediate = Unknown; + type_unboxed_default = false; + type_uid = Uid.internal_not_actually_unique; + } + +(** we hide items being defined from short-path to avoid shortening + [type t = Path.To.t] into [type t = t]. +*) + +let ident_sigitem = function + | Types.Sig_type(ident,_,_,_) -> {hide=true;ident} + | Types.Sig_class(ident,_,_,_) + | Types.Sig_class_type (ident,_,_,_) + | Types.Sig_module(ident,_, _,_,_) + | Types.Sig_value (ident,_,_) + | Types.Sig_modtype (ident,_,_) + | Types.Sig_typext (ident,_,_,_) -> {hide=false; ident } + +let hide ids env = + let hide_id id env = + (* Global idents cannot be renamed *) + if id.hide && not (Ident.global id.ident) then + Env.add_type ~check:false (Ident.rename_no_exn id.ident) dummy env + else env + in + List.fold_right hide_id ids env + +let with_hidden_items ids f = + let with_hidden_in_printing_env ids f = + wrap_env (hide ids) (Ident_names.with_hidden ids) f + in + if not !Clflags.real_paths then + with_hidden_in_printing_env ids f + else + Ident_names.with_hidden ids f + + +let add_sigitem env x = + Env.add_signature (Signature_group.flatten x) env + +let rec tree_of_modtype ?(ellipsis=false) = function + | Mty_ident p -> + let p = best_module_path p in + Omty_ident (tree_of_path (Some Module_type) p) + | Mty_signature sg -> + Omty_signature (if ellipsis then [Osig_ellipsis] + else tree_of_signature sg) + | Mty_functor(param, ty_res) -> + let param, env = + tree_of_functor_parameter param + in + let res = wrap_env env (tree_of_modtype ~ellipsis) ty_res in + Omty_functor (param, res) + | Mty_alias p -> + let p = best_module_path p in + Omty_alias (tree_of_path (Some Module) p) + | Mty_for_hole -> Omty_hole + +and tree_of_functor_parameter = function + | Unit -> + None, fun k -> k + | Named (param, ty_arg) -> + let name, env = + match param with + | None -> None, fun env -> env + | Some id -> + Some (Ident.name id), + Env.add_module ~arg:true id Mp_present ty_arg + in + Some (name, tree_of_modtype ~ellipsis:false ty_arg), env + +and tree_of_signature sg = + wrap_env (fun env -> env)(fun sg -> + let tree_groups = tree_of_signature_rec !printing_env sg in + List.concat_map (fun (_env,l) -> List.map snd l) tree_groups + ) sg + +and tree_of_signature_rec env' sg = + let structured = List.of_seq (Signature_group.seq sg) in + let collect_trees_of_rec_group group = + let env = !printing_env in + let env', group_trees = + trees_of_recursive_sigitem_group env group + in + set_printing_env env'; + (env, group_trees) in + set_printing_env env'; + List.map collect_trees_of_rec_group structured + +and trees_of_recursive_sigitem_group env + (syntactic_group: Signature_group.rec_group) = + let display (x:Signature_group.sig_item) = x.src, tree_of_sigitem x.src in + let env = Env.add_signature syntactic_group.pre_ghosts env in + match syntactic_group.group with + | Not_rec x -> add_sigitem env x, [display x] + | Rec_group items -> + let ids = List.map (fun x -> ident_sigitem x.Signature_group.src) items in + List.fold_left add_sigitem env items, + with_hidden_items ids (fun () -> List.map display items) + +and tree_of_sigitem = function + | Sig_value(id, decl, _) -> + tree_of_value_description id decl + | Sig_type(id, decl, rs, _) -> + tree_of_type_declaration id decl rs + | Sig_typext(id, ext, es, _) -> + tree_of_extension_constructor id ext es + | Sig_module(id, _, md, rs, _) -> + let ellipsis = + List.exists (function + | Parsetree.{attr_name = {txt="..."}; attr_payload = PStr []} -> true + | _ -> false) + md.md_attributes in + tree_of_module id md.md_type rs ~ellipsis + | Sig_modtype(id, decl, _) -> + tree_of_modtype_declaration id decl + | Sig_class(id, decl, rs, _) -> + tree_of_class_declaration id decl rs + | Sig_class_type(id, decl, rs, _) -> + tree_of_cltype_declaration id decl rs + +and tree_of_modtype_declaration id decl = + let mty = + match decl.mtd_type with + | None -> Omty_abstract + | Some mty -> tree_of_modtype mty + in + Osig_modtype (Ident.name id, mty) + +and tree_of_module id ?ellipsis mty rs = + Osig_module (Ident.name id, tree_of_modtype ?ellipsis mty, tree_of_rec rs) + +(* For the toplevel: merge with tree_of_signature? *) +let print_items showval env x = + Variable_names.refresh_weak(); + Ident_conflicts.reset (); + let extend_val env (sigitem,outcome) = outcome, showval env sigitem in + let post_process (env,l) = List.map (extend_val env) l in + List.concat_map post_process @@ tree_of_signature_rec env x + +let same_path t t' = + eq_type t t' || + match get_desc t, get_desc t' with + | Tconstr(p,tl,_), Tconstr(p',tl',_) -> begin + match best_type_path p, best_type_path p' with + | Nth n, Nth n' when n = n' -> true + | Path(nso, p), Path(nso', p') when Path.same p p' -> + let tl = apply_subst_opt nso tl in + let tl' = apply_subst_opt nso' tl' in + List.length tl = List.length tl' && + List.for_all2 eq_type tl tl' + | _ -> false + end + | _ -> + false + +type 'a diff = Same of 'a | Diff of 'a * 'a + +let trees_of_type_expansion mode Errortrace.{ty = t; expanded = t'} = + Aliases.reset (); + Aliases.mark_loops t; + if same_path t t' + then begin Aliases.add_delayed (proxy t); Same (tree_of_typexp mode t) end + else begin + Aliases.mark_loops t'; + let t' = if proxy t == proxy t' then unalias t' else t' in + (* beware order matter due to side effect, + e.g. when printing object types *) + let first = tree_of_typexp mode t in + let second = tree_of_typexp mode t' in + if first = second then Same first + else Diff(first,second) + end + +let pp_type ppf t = + Style.as_inline_code !Oprint.out_type ppf t + +let pp_type_expansion ppf = function + | Same t -> pp_type ppf t + | Diff(t,t') -> + fprintf ppf "@[<2>%a@ =@ %a@]" + pp_type t + pp_type t' + +(* Hide variant name and var, to force printing the expanded type *) +let hide_variant_name t = + let open Types in + match get_desc t with + | Tvariant row -> + let Row {fields; more; name; fixed; closed} = row_repr row in + if name = None then t else + Btype.newty2 ~level:(get_level t) + (Tvariant + (create_row ~fields ~fixed ~closed ~name:None + ~more:(Ctype.newvar2 (get_level more)))) + | _ -> t + +let prepare_expansion Errortrace.{ty; expanded} = + let expanded = hide_variant_name expanded in + Variable_names.reserve ty; + if not (same_path ty expanded) then Variable_names.reserve expanded; + Errortrace.{ty; expanded} + + +(* Adapt functions to exposed interface *) +let namespaced_tree_of_path n = tree_of_path (Some n) +let tree_of_path ?disambiguation p = tree_of_path ?disambiguation None p +let tree_of_modtype = tree_of_modtype ~ellipsis:false +let tree_of_type_declaration ident td rs = + with_hidden_items [{hide=true; ident}] + (fun () -> tree_of_type_declaration ident td rs) + +let tree_of_class_type kind cty = tree_of_class_type kind [] cty +let prepare_class_type cty = prepare_class_type [] cty + +let tree_of_type_path p = + let (p', s) = best_type_path_original p in + let p'' = if (s = Id) then p' else p in + tree_of_best_type_path p p'' + +let wrap_printing_env ?(error = true) = wrap_printing_env ~error +let shorten_type_path env p = + wrap_printing_env env + (fun () -> best_type_path_simple p) + +let shorten_module_type_path env p = + wrap_printing_env env + (fun () -> best_module_type_path p) + +let shorten_module_path env p = + wrap_printing_env env + (fun () -> best_module_path p) + +let shorten_class_type_path env p = + wrap_printing_env env + (fun () -> best_class_type_path_simple p) + +let () = + Env.shorten_module_path := shorten_module_path diff --git a/ocamlmerlin_mlx/ocaml/typing/out_type.mli b/ocamlmerlin_mlx/ocaml/typing/out_type.mli new file mode 100644 index 0000000..acbc5b6 --- /dev/null +++ b/ocamlmerlin_mlx/ocaml/typing/out_type.mli @@ -0,0 +1,269 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) +(* *) +(* Copyright 1996 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(** Functions for representing type expressions and module types as outcometree + (with [as 'a] aliases for cycles) and printing them. All functions below + depends on global contexts that keep track of + +- If labels are disabled +- Current printing environment +- Shortest equivalent paths + +- Conflicts for identifier names +- Names chosen for type variables +- Aliases used for representing cycles or row variables +- Uses of internal names + +Whenever possible, it is advised to use the simpler functions available in +{!Printtyp} which take care of setting up this naming context. The functions +below are needed when one needs to share a common naming context (or part of it) +between different calls to printing functions (or in order to implement +{!Printtyp}). +*) + +open Format_doc +open Types +open Outcometree + +(** {1 Wrapping functions}*) + +val wrap_printing_env: ?error:bool -> Env.t -> (unit -> 'a) -> 'a +(** Call the function using the environment for type path shortening + This affects all the printing and tree cration functions functions below + Also, if [~error:true], then disable the loading of cmis *) + + +(** [with_labels false] disable labels in function types *) +val with_labels: bool -> (unit -> 'a) -> 'a + +(** {1 Printing idents and paths } *) + +val ident_name: Shape.Sig_component_kind.t option -> Ident.t -> out_name +val tree_of_path: ?disambiguation:bool -> Path.t -> out_ident +val namespaced_tree_of_path: Shape.Sig_component_kind.t -> Path.t -> out_ident +val tree_of_type_path: Path.t -> out_ident +(** Specialized functions for printing types with [short-paths] *) + +(** [same_path ty ty2] is true when there is an equation [ty]=[ty2] in the + short-path scope*) +val same_path: type_expr -> type_expr -> bool + +(** Simple heuristic to rewrite Foo__bar.* as Foo.Bar.* when Foo.Bar is an alias + for Foo__bar. This pattern is used by the stdlib. *) +val rewrite_double_underscore_paths: Env.t -> Path.t -> Path.t + +(** {1 Printing type expressions} *) + +(** Printing type expressions requires to translate the internal graph based + representation into to an {!Outcometree} closer to the source syntax. In + order to do so, the printing is generally split in three phase: + - A preparation phase which in particular + - marks cycles + - chooses user-facing names for type variables + - An outcometree generation phase, where we emit an outcometree as a + ready-for-printing representation of trees (represented by the various + [tree_of_*] functions) + - Printing proper +*) + +(** [prepare_for_printing] resets the global naming environment, a la + {!reset_except_conflicts}, and prepares the types for printing by reserving + variable names and marking cycles. Any type variables that are shared + between multiple types in the input list will be given the same name when + printed with {!prepared_type_expr}. *) +val prepare_for_printing: type_expr list -> unit + +(** [add_type_to_preparation ty] extend a previous type expression preparation + to the type expression [ty] +*) +val add_type_to_preparation: type_expr -> unit + +(** In [Type_scheme] mode, non-generic types variables are printed as weakly + polymorphic type variables. *) +type type_or_scheme = Type | Type_scheme +val tree_of_typexp: type_or_scheme -> type_expr -> out_type +(** [tree_of_typexp] generate the [outcometree] for a prepared type + expression.*) + +val prepared_type_scheme: type_expr printer +val prepared_type_expr: type_expr printer +(** The printers [prepared_type_expr] and [prepared_type_scheme] should only be + used on prepared types. Types can be prepared by initially calling + {!prepare_for_printing} or adding them later to the preparation with + {!add_type_to_preparation}. + + Calling this function on non-prepared types may cause a stack overflow (see + #8860) due to cycles in the printed types. + + See {!Printtyp.type_expr} for a safer but less flexible printer. *) + +(** [type_expr_with_reserved_names] can print "half-prepared" type expression. A + "half-prepared" type expression should have had its names reserved (with + {!Variable_names.reserve}), but should not have had its cycles marked. *) +val type_expr_with_reserved_names: type_expr printer + +type 'a diff = Same of 'a | Diff of 'a * 'a +val trees_of_type_expansion: + type_or_scheme -> Errortrace.expanded_type -> out_type diff +val prepare_expansion: Errortrace.expanded_type -> Errortrace.expanded_type +val pp_type_expansion: out_type diff printer +val hide_variant_name: Types.type_expr -> Types.type_expr + + +(** {1: Label and constructors }*) +val prepare_type_constructor_arguments: constructor_arguments -> unit +val tree_of_constructor_arguments: constructor_arguments -> out_type list + +val tree_of_label: label_declaration -> out_label + +val add_constructor_to_preparation : constructor_declaration -> unit +val prepared_constructor : constructor_declaration printer + +val tree_of_extension_constructor: + Ident.t -> extension_constructor -> ext_status -> out_sig_item +val extension_constructor_args_and_ret_type_subtree: + constructor_arguments -> type_expr option -> out_type list * out_type option +val add_extension_constructor_to_preparation : + extension_constructor -> unit +val prepared_extension_constructor: + Ident.t -> extension_constructor printer + + +(** {1 Declarations }*) + +val tree_of_type_declaration: + Ident.t -> type_declaration -> rec_status -> out_sig_item +val add_type_declaration_to_preparation : + Ident.t -> type_declaration -> unit +val prepared_type_declaration: Ident.t -> type_declaration printer + +val tree_of_value_description: Ident.t -> value_description -> out_sig_item +val tree_of_modtype_declaration: + Ident.t -> modtype_declaration -> out_sig_item +val tree_of_class_declaration: + Ident.t -> class_declaration -> rec_status -> out_sig_item +val tree_of_cltype_declaration: + Ident.t -> class_type_declaration -> rec_status -> out_sig_item + +(** {1 Module types }*) + +val tree_of_module: + Ident.t -> ?ellipsis:bool -> module_type -> rec_status -> out_sig_item +val tree_of_modtype: module_type -> out_module_type +val tree_of_signature: Types.signature -> out_sig_item list + +val tree_of_class_type: type_or_scheme -> class_type -> out_class_type +val prepare_class_type: class_type -> unit + +(** {1 Toplevel printing} *) +val print_items: (Env.t -> signature_item -> 'a option) -> + Env.t -> signature_item list -> (out_sig_item * 'a option) list + +(** {1 Naming contexts }*) + +(** Path name, which were mutable at some point *) +module Out_name: sig + val create: string -> out_name + val print: out_name -> string +end + +(** Disambiguation for identifiers, e.g. the two type constructors named [t] +in the type of [f] in +{[ + type t = A + module M = struct + type t = B + let f A = B + end +]} +should be disambiguated to [t/2->t] *) +module Ident_names: sig + val enable: bool -> unit + (** When contextual names are enabled, the mapping between identifiers + and names is ensured to be one-to-one. *) + + (** [with_fuzzy id f] locally disable ident disambiguation for [id] within + [f] *) + val with_fuzzy: Ident.t -> (unit -> 'a) -> 'a +end + +(** The [Ident_conflicts] module keeps track of conflicts arising when + attributing names to identifiers and provides functions that can print + explanations for these conflict in error messages *) +module Ident_conflicts: sig + val exists: unit -> bool + (** [exists()] returns true if the current naming context renamed + an identifier to avoid a name collision *) + + type explanation = + { kind: Shape.Sig_component_kind.t; + name:string; + root_name:string; + location:Location.t + } + + val list_explanations: unit -> explanation list +(** [list_explanations()] return the list of conflict explanations + collected up to this point, and reset the list of collected + explanations *) + + val print_located_explanations: explanation list printer + + val err_print: formatter -> unit + val err_msg: unit -> doc option + (** [err_msg ()] return an error message if there are pending conflict + explanations at this point. It is often important to check for conflicts + after all printing is done, thus the delayed nature of [err_msg]*) + + val reset: unit -> unit +end + +(** Naming choice for type variable names (['a], ['b], ...), for instance the + two classes of distinct type variables in + {[let repeat x y = x, y, y, x]} + should be printed printed as ['a -> 'b -> 'a * 'b * 'b * 'a]. +*) +module Variable_names: sig + + (** Add external type equalities*) + val add_subst: (type_expr * type_expr) list -> unit + + (** [reserve ty] registers the variable names appearing in [ty] *) + val reserve: type_expr -> unit +end + +(** Register internal typechecker names ([$0],[$a]) appearing in the + [outcometree] *) +module Internal_names: sig + val add: Path.t -> unit + val reset: unit -> unit + val print_explanations: Env.t -> formatter -> unit +end + +(** Reset all contexts *) +val reset: unit -> unit + +(** Reset all contexts except for conflicts *) +val reset_except_conflicts: unit -> unit + +(** {1 Merlin Short Path }*) + +val best_type_path_simple: Path.t -> Path.t +val best_class_type_path_simple: Path.t -> Path.t + +val shorten_type_path: Env.t -> Path.t -> Path.t +val shorten_module_type_path: Env.t -> Path.t -> Path.t +val shorten_module_path: Env.t -> Path.t -> Path.t +val shorten_class_type_path: Env.t -> Path.t -> Path.t diff --git a/ocamlmerlin_mlx/ocaml/typing/outcometree.mli b/ocamlmerlin_mlx/ocaml/typing/outcometree.mli index 8c32954..21668ea 100644 --- a/ocamlmerlin_mlx/ocaml/typing/outcometree.mli +++ b/ocamlmerlin_mlx/ocaml/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 @@ -49,47 +49,65 @@ type out_value = | Oval_int64 of int64 | Oval_nativeint of nativeint | Oval_list of out_value list - | Oval_printer of (Format.formatter -> unit) + | Oval_printer of (Format_doc.formatter -> unit) | Oval_record of (out_ident * out_value) list | Oval_string of string * int * out_string (* string, size-to-print, kind *) | Oval_stuff of string - | Oval_tuple of out_value list + | Oval_tuple of (string option * out_value) list | Oval_variant of string * out_value option + | Oval_lazy of out_value + | Oval_floatarray of floatarray -type out_type_param = string * (Asttypes.variance * Asttypes.injectivity) +type out_type_param = { + ot_non_gen: bool; + ot_name: string; + ot_variance: Asttypes.variance * Asttypes.injectivity +} type out_type = | Otyp_abstract | Otyp_open | Otyp_alias of {non_gen:bool; aliased:out_type; alias:string} - | Otyp_arrow of string * out_type * out_type + | Otyp_arrow of Asttypes.arg_label * out_type * out_type | Otyp_class of out_ident * out_type list | Otyp_constr of out_ident * out_type list | Otyp_manifest of out_type * out_type | Otyp_object of { fields: (string * out_type) list; open_row:bool} - | Otyp_record of (string * bool * out_type) list + | Otyp_record of out_label list | Otyp_stuff of string | Otyp_sum of out_constructor list - | Otyp_tuple of out_type list + | Otyp_tuple of (string option * out_type) list | Otyp_var of bool * string | Otyp_variant of out_variant * bool * (string list) option | Otyp_poly of string list * out_type - | Otyp_module of out_ident * (string * out_type) list + | Otyp_module of out_package | Otyp_attribute of out_type * out_attribute +and out_label = { + olab_name: string; + olab_mut: Asttypes.mutable_flag; + olab_atomic: Asttypes.atomic_flag; + olab_type: out_type; +} + and out_constructor = { ocstr_name: string; ocstr_args: out_type list; ocstr_return_type: out_type option; } +and out_package = { + opack_path: out_ident; + opack_cstrs: (string * out_type) list; +} + and out_variant = | Ovar_fields of (string * bool * out_type list) list | Ovar_typ of out_type type out_class_type = | Octy_constr of out_ident * out_type list - | Octy_arrow of string * out_type * out_class_type + | Octy_arrow of Asttypes.arg_label * out_type * out_class_type | Octy_signature of out_type option * out_class_sig_item list and out_class_sig_item = | Ocsg_constraint of out_type * out_type diff --git a/ocamlmerlin_mlx/ocaml/typing/parmatch.ml b/ocamlmerlin_mlx/ocaml/typing/parmatch.ml index 2a388f1..c182aa0 100644 --- a/ocamlmerlin_mlx/ocaml/typing/parmatch.ml +++ b/ocamlmerlin_mlx/ocaml/typing/parmatch.ml @@ -18,8 +18,26 @@ open Misc open Asttypes open Types +open Data_types open Typedtree +type 'pattern parmatch_case = + { pattern : 'pattern; + has_guard : bool; + needs_refute : bool; + } + +let typed_case { c_lhs; c_guard; c_rhs } = + { pattern = c_lhs; + has_guard = Option.is_some c_guard; + needs_refute = (c_rhs.exp_desc = Texp_unreachable); + } + +let untyped_case { Parsetree.pc_lhs; pc_guard; pc_rhs } = + { pattern = pc_lhs; + has_guard = Option.is_some pc_guard; + needs_refute = (pc_rhs.pexp_desc = Parsetree.Pexp_unreachable); + } (*************************************) (* Utilities for building patterns *) @@ -37,7 +55,8 @@ let omega_list = Patterns.omega_list let extra_pat = make_pat - (Tpat_var (Ident.create_local "+", mknoloc "+")) + (Tpat_var (Ident.create_local "+", mknoloc "+", + Uid.internal_not_actually_unique)) Ctype.none Env.empty @@ -143,11 +162,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 @@ -273,8 +292,8 @@ let records_args l1 l2 = module Compat (Constr:sig val equal : - Types.constructor_description -> - Types.constructor_description -> + Data_types.constructor_description -> + Data_types.constructor_description -> bool end) = struct @@ -283,8 +302,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,_) -> @@ -297,12 +316,14 @@ module Compat l1=l2 && ocompat op1 op2 | Tpat_constant c1, Tpat_constant c2 -> const_compare c1 c2 = 0 - | Tpat_tuple ps, Tpat_tuple qs -> compats ps qs + | Tpat_tuple labeled_ps, Tpat_tuple labeled_qs -> + tuple_compat labeled_ps labeled_qs | Tpat_lazy p, Tpat_lazy q -> compat p q | 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 @@ -317,12 +338,19 @@ module Compat | p::ps, q::qs -> compat p q && compats ps qs | _,_ -> false + and tuple_compat labeled_ps labeled_qs = match labeled_ps,labeled_qs with + | [], [] -> true + | (p_label, p)::labeled_ps, (q_label, q)::labeled_qs -> + Option.equal String.equal p_label q_label + && compat p q && tuple_compat labeled_ps labeled_qs + | _,_ -> false + end module SyntacticCompat = Compat (struct - let equal c1 c2 = Types.equal_tag c1.cstr_tag c2.cstr_tag + let equal = Data_types.equal_constr end) let compat = SyntacticCompat.compat @@ -357,14 +385,14 @@ let simple_match d h = let open Patterns.Head in match d.pat_desc, h.pat_desc with | Construct c1, Construct c2 -> - Types.equal_tag c1.cstr_tag c2.cstr_tag + Data_types.equal_constr c1 c2 | Variant { tag = t1; _ }, Variant { tag = t2 } -> t1 = t2 | 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 lbls1, Tuple lbls2 -> lbls1 = lbls2 + | Array (am1, len1), Array (am2, len2) -> am1 = am2 && len1 = len2 | _, Any -> true | _, _ -> false @@ -404,8 +432,8 @@ let simple_match_args discr head args = | Variant { has_arg = true } | Lazy -> [Patterns.omega] | Record lbls -> omega_list lbls - | Array len - | Tuple len -> Patterns.omegas len + | Array (_, len) -> Patterns.omegas len + | Tuple lbls -> omega_list lbls | Variant { has_arg = false } | Any | Constant _ -> [] @@ -486,26 +514,16 @@ let rec read_args xs r = match xs,r with | _,_ -> fatal_error "Parmatch.read_args" -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_env::rest +let set_args q r = match q with +| {pat_desc = Tpat_tuple lbls_omegas} -> + let lbls, omegas = List.split lbls_omegas in + let args, rest = read_args omegas r in + make_pat (Tpat_tuple (List.combine lbls args)) q.pat_type q.pat_env :: rest | {pat_desc = Tpat_record (omegas,closed)} -> let args,rest = read_args omegas r in - make_pat - (Tpat_record - (List.map2 (fun (lid, lbl,_) arg -> - if - erase_mutable && - (match lbl.lbl_mut with - | Mutable -> true | Immutable -> false) - then - lid, lbl, omega - else - lid, lbl, arg) - omegas args, closed)) - q.pat_type q.pat_env:: - rest + let args = + List.map2 (fun (lid, lbl, _) arg -> (lid, lbl, arg)) omegas args in + make_pat (Tpat_record (args, closed)) q.pat_type q.pat_env :: rest | {pat_desc = Tpat_construct (lid, c, omegas, _)} -> let args,rest = read_args omegas r in make_pat @@ -528,17 +546,15 @@ let do_set_args ~erase_mutable q r = match q with 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_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 *) -| _ -> fatal_error "Parmatch.set_args" - -let set_args q r = do_set_args ~erase_mutable:false q r -and set_args_erase_mutable q r = do_set_args ~erase_mutable:true q r +| {pat_desc = (Tpat_var _ | Tpat_alias _ | Tpat_or _); _} -> + fatal_error "Parmatch.set_args" (* Given a matrix of non-empty rows p1 :: r1... @@ -843,10 +859,11 @@ let pats_of_type env ty = | Has_no_typedecl -> begin match get_desc (Ctype.expand_head env ty) with Ttuple tl -> - [make_pat (Tpat_tuple (omegas (List.length tl))) ty env] + [make_pat (Tpat_tuple (List.map (fun (lbl, _) -> lbl, omega) tl)) + ty env] | _ -> [omega] end - | Typedecl (_, _, {type_kind = Type_abstract | Type_open}) + | Typedecl (_, _, {type_kind = Type_abstract _ | Type_open}) | May_have_typedecl -> [omega] let get_variant_constructors env ty = @@ -919,7 +936,8 @@ 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})) + {txt="*extension*"; loc = d.pat_loc}, + Uid.internal_not_actually_unique)) Ctype.none Env.empty | Construct _ -> begin match ext with @@ -1032,27 +1050,28 @@ 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_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_array (_, ps) -> has_instances ps + | Tpat_tuple labeled_ps -> has_instances (List.map snd labeled_ps) | Tpat_record (lps,_) -> has_instances (List.map (fun (_,_,x) -> x) lps) | Tpat_lazy p -> has_instance p @@ -1254,7 +1273,8 @@ let print_pat pat = Printf.sprintf "(%s)" (String.concat "," (List.map string_of_pat list)) | Tpat_variant (_, _, _) -> "variant" | Tpat_record (_, _) -> "record" - | Tpat_array _ -> "array" + | Tpat_array (Mutable, _) -> "array" + | Tpat_array (Immutable, _) -> "immutable array" in Printf.fprintf stderr "PAT[%s]\n%!" (string_of_pat pat) *) @@ -1503,7 +1523,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 *) @@ -1683,23 +1703,24 @@ 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 + Data_types.equal_constr c1 c2 && le_pats ps qs | Tpat_variant(l1,Some p1,_), Tpat_variant(l2,Some p2,_) -> (l1 = l2 && le_pat p1 p2) | Tpat_variant(l1,None,_r1), Tpat_variant(l2,None,_) -> l1 = l2 | Tpat_variant(_,_,_), Tpat_variant(_,_,_) -> false - | Tpat_tuple(ps), Tpat_tuple(qs) -> le_pats ps qs + | Tpat_tuple(labeled_ps), Tpat_tuple(labeled_qs) -> + le_tuple_pats labeled_ps labeled_qs | Tpat_lazy p, Tpat_lazy q -> 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]) @@ -1708,6 +1729,13 @@ and le_pats ps qs = p::ps, q::qs -> le_pat p q && le_pats ps qs | _, _ -> true +and le_tuple_pats labeled_ps labeled_qs = + match labeled_ps, labeled_qs with + (p_label, p)::labeled_ps, (q_label, q)::labeled_qs -> + Option.equal String.equal p_label q_label + && le_pat p q && le_tuple_pats labeled_ps labeled_qs + | _, _ -> true + let get_mins le ps = let rec select_rec r = function [] -> r @@ -1715,6 +1743,10 @@ let get_mins le ps = if List.exists (fun p0 -> le p0 p) ps then select_rec r ps else select_rec (p::r) ps in + (* [select_rec] removes the elements that are followed by a smaller element. + An element that is preceded by a smaller element may stay in the list. + We thus do two passes on the list, which is returned reversed + the first time. *) select_rec [] (select_rec [] ps) (* @@ -1723,21 +1755,21 @@ 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 | _,Tpat_or (q1,q2,_) -> orlub q1 q2 p (* Thanks god, lub is commutative *) | 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 + let rs = tuple_lubs ps qs in 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_env | Tpat_construct (lid,c1,ps1,_), Tpat_construct (_,c2,ps2,_) - when Types.equal_tag c1.cstr_tag c2.cstr_tag -> + when Data_types.equal_constr c1 c2 -> let rs = lubs ps1 ps2 in make_pat (Tpat_construct (lid, c1, rs, None)) p.pat_type p.pat_env @@ -1750,10 +1782,10 @@ let rec lub p q = match p.pat_desc,q.pat_desc with | 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_env -| Tpat_array ps, Tpat_array qs - when List.length ps = List.length qs -> +| 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_env + make_pat (Tpat_array (am1, rs)) p.pat_type p.pat_env | _,_ -> raise Empty @@ -1780,6 +1812,13 @@ and record_lubs l1 l2 = (lid1, lbl1,lub p1 p2)::lub_rec rem1 rem2 in lub_rec l1 l2 +and tuple_lubs ps qs = match ps,qs with +| [], [] -> [] +| (p_label, p)::ps, (q_label, q)::qs + when Option.equal String.equal p_label q_label -> + (p_label, lub p q) :: tuple_lubs ps qs +| _,_ -> raise Empty + and lubs ps qs = match ps,qs with | p::ps, q::qs -> lub p q :: lubs ps qs | _,_ -> [] @@ -1822,8 +1861,8 @@ let pressure_variants_in_computation_pattern tdefs patl = let rec initial_matrix = function [] -> [] - | {c_guard=Some _} :: rem -> initial_matrix rem - | {c_guard=None; c_lhs=p} :: rem -> [p] :: initial_matrix rem + | {has_guard=true} :: rem -> initial_matrix rem + | {has_guard=false; pattern=p} :: rem -> [p] :: initial_matrix rem (* Build up a working pattern matrix by keeping @@ -1831,9 +1870,9 @@ let rec initial_matrix = function *) let rec initial_only_guarded = function | [] -> [] - | { c_guard = None; _} :: rem -> + | { has_guard = false; _} :: rem -> initial_only_guarded rem - | { c_lhs = pat; _ } :: rem -> + | { pattern = pat; _ } :: rem -> [pat] :: initial_only_guarded rem @@ -1845,7 +1884,7 @@ let rec initial_only_guarded = function let contains_extension pat = exists_pattern (function - | {pat_desc=Tpat_var (_, {txt="*extension*"})} -> true + | {pat_desc=Tpat_var (_, {txt="*extension*"}, _)} -> true | _ -> false) pat @@ -1872,27 +1911,27 @@ let do_check_partial ~pred loc casel pss = match pss with match counter_examples () with | Seq.Nil -> Total | Seq.Cons (v, _rest) -> - if Warnings.is_active (Warnings.Partial_match "") then begin - let errmsg = - try - let buf = Buffer.create 16 in - let fmt = Format.formatter_of_buffer buf in - Printpat.top_pretty fmt v; + if Warnings.is_active (Warnings.Partial_match Format_doc.Doc.empty) then + begin + let errmsg = + let doc = ref Format_doc.Doc.empty in + let fmt = Format_doc.formatter doc in + Format_doc.fprintf fmt "@[%a" + (Misc.Style.as_inline_code Printpat.top_pretty) v; if do_match (initial_only_guarded casel) [v] then - Buffer.add_string buf - "\n(However, some guarded clause may match this value.)"; + Format_doc.fprintf fmt + "@,(However, some guarded clause may match this value.)"; if contains_extension v then - Buffer.add_string buf - "\nMatching over values of extensible variant types \ - (the *extension* above)\n\ - must include a wild card pattern in order to be exhaustive." + Format_doc.fprintf fmt + "@,@[Matching over values of extensible variant types \ + (the *extension* above)@,\ + must include a wild card pattern@ in order to be exhaustive.@]" ; - Buffer.contents buf - with _ -> - "" - in - Location.prerr_warning loc (Warnings.Partial_match errmsg) - end; + Format_doc.fprintf fmt "@]"; + !doc + in + Location.prerr_warning loc (Warnings.Partial_match errmsg) + end; Partial (*****************) @@ -1923,14 +1962,16 @@ 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_construct (_, {cstr_tag=Cstr_extension _}, ps, _)-> +| Tpat_tuple ps -> + List.fold_left (fun r (_, p) -> collect_paths_from_pat r p) r 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 @@ -1948,7 +1989,7 @@ let rec collect_paths_from_pat r p = match p.pat_desc with let do_check_fragile loc casel pss = let exts = List.fold_left - (fun r c -> collect_paths_from_pat r c.c_lhs) + (fun r c -> collect_paths_from_pat r c.pattern) [] casel in match exts with | [] -> () @@ -1972,10 +2013,10 @@ let do_check_fragile loc casel pss = let check_unused pred casel = if Warnings.is_active Warnings.Redundant_case - || List.exists (fun c -> c.c_rhs.exp_desc = Texp_unreachable) casel then + || List.exists (fun vc -> vc.needs_refute) casel then let rec do_rec pref = function | [] -> () - | {c_lhs=q; c_guard; c_rhs} :: rem -> + | {pattern=q; has_guard; needs_refute=refute} :: rem -> let qs = [q] in begin try let pss = @@ -1986,7 +2027,6 @@ let check_unused pred casel = |> get_mins le_pats in (* First look for redundant or partially redundant patterns *) let r = every_satisfiables (make_rows pss) (make_row qs) in - let refute = (c_rhs.exp_desc = Texp_unreachable) in (* Do not warn for unused [pat -> .] *) if r = Unused && refute then () else let r = @@ -2032,7 +2072,7 @@ let check_unused pred casel = with Empty | Not_found -> assert false end ; - if c_guard <> None then + if has_guard then do_rec pref rem else do_rec ([q]::pref) rem in @@ -2051,7 +2091,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 @@ -2061,9 +2101,11 @@ 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 -> + List.for_all (fun (_,p) -> loop p) 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 @@ -2182,9 +2224,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 @@ -2335,7 +2377,7 @@ let check_ambiguous_bindings = if is_active warn0 then let check_case ns case = match case with | { c_lhs = p; c_guard=None ; _} -> [p]::ns - | { c_lhs=p; c_guard=Some g; _} -> + | { c_lhs = p; c_guard=Some g; _} -> let all = Ident.Set.inter (pattern_vars p) (all_rhs_idents g) in if not (Ident.Set.is_empty all) then begin diff --git a/ocamlmerlin_mlx/ocaml/typing/parmatch.mli b/ocamlmerlin_mlx/ocaml/typing/parmatch.mli index 0fe0d50..b4a32ee 100644 --- a/ocamlmerlin_mlx/ocaml/typing/parmatch.mli +++ b/ocamlmerlin_mlx/ocaml/typing/parmatch.mli @@ -18,6 +18,25 @@ open Asttypes open Typedtree open Types +open Data_types + +(** Most checks in this file need not access all information about a case, + and just need a few pieces of information. [parmatch_case] is those + few pieces of information. +*) +type 'pattern parmatch_case = + { pattern : 'pattern; + has_guard : bool; + needs_refute : bool; + (** true if the program text claims the case is unreachable, a la + [function _ -> .] + *) + } + +type 'category typed_case := 'category general_pattern parmatch_case + +val typed_case : 'category case -> 'category typed_case +val untyped_case : Parsetree.case -> Parsetree.pattern parmatch_case val const_compare : constant -> constant -> int (** [const_compare c1 c2] compares the actual values represented by [c1] and @@ -37,8 +56,8 @@ module Compat : functor (_ : sig val equal : - Types.constructor_description -> - Types.constructor_description -> + Data_types.constructor_description -> + Data_types.constructor_description -> bool end) -> sig val compat : pattern -> pattern -> bool @@ -57,13 +76,11 @@ val lubs : pattern list -> pattern list -> pattern list val get_mins : ('a -> 'a -> bool) -> 'a list -> 'a list -(** Those two functions recombine one pattern and its arguments: +(** This function recombines one pattern and its arguments: For instance: (_,_)::p1::p2::rem -> (p1, p2)::rem - The second one will replace mutable arguments by '_' *) val set_args : pattern -> pattern list -> pattern list -val set_args_erase_mutable : pattern -> pattern list -> pattern list val pat_of_constr : pattern -> constructor_description -> pattern val complete_constrs : @@ -97,9 +114,11 @@ val pressure_variants_in_computation_pattern: [refute] indicates that [check_unused] was called on a refutation clause. *) val check_partial: - (pattern -> pattern option) -> Location.t -> value case list -> partial + (pattern -> pattern option) -> Location.t -> value typed_case list + -> partial + val check_unused: - (bool -> pattern -> pattern option) -> value case list -> unit + (bool -> pattern -> pattern option) -> value typed_case list -> unit (* Irrefutability tests *) val irrefutable : pattern -> bool @@ -110,7 +129,7 @@ val irrefutable : pattern -> bool active. *) val inactive : partial:partial -> pattern -> bool -(* Ambiguous bindings *) +(* Ambiguous bindings. *) val check_ambiguous_bindings : value case list -> unit (* The tag used for open polymorphic variant types with an abstract row *) diff --git a/ocamlmerlin_mlx/ocaml/typing/path.ml b/ocamlmerlin_mlx/ocaml/typing/path.ml index 69b8f34..2d259b1 100644 --- a/ocamlmerlin_mlx/ocaml/typing/path.ml +++ b/ocamlmerlin_mlx/ocaml/typing/path.ml @@ -90,9 +90,13 @@ let rec scope = function let kfalse _ = false +let maybe_escape s = + if Lexer.is_keyword s then "\\#" ^ s else s + let rec name ?(paren=kfalse) = function - Pident id -> Ident.name id + Pident id -> maybe_escape (Ident.name id) | Pdot(p, s) | Pextra_ty (p, Pcstr_ty s) -> + let s = maybe_escape s in name ~paren p ^ if paren s then ".( " ^ s ^ " )" else "." ^ s | Papply(p1, p2) -> name ~paren p1 ^ "(" ^ name ~paren p2 ^ ")" | Pextra_ty (p, Pext_ty) -> name ~paren p @@ -100,8 +104,8 @@ let rec name ?(paren=kfalse) = function let rec print ppf = function | Pident id -> Ident.print_with_scope ppf id | Pdot(p, s) | Pextra_ty (p, Pcstr_ty s) -> - Format.fprintf ppf "%a.%s" print p s - | Papply(p1, p2) -> Format.fprintf ppf "%a(%a)" print p1 print p2 + Format_doc.fprintf ppf "%a.%s" print p s + | Papply(p1, p2) -> Format_doc.fprintf ppf "%a(%a)" print p1 print p2 | Pextra_ty (p, Pext_ty) -> print ppf p let rec head = function @@ -118,6 +122,10 @@ let flatten = in fun t -> flatten [] t +let rec scrape_extra_ty = function + | Pextra_ty (t, _) -> scrape_extra_ty t + | t -> t + let heads p = let rec heads p acc = match p with | Pident id -> id :: acc diff --git a/ocamlmerlin_mlx/ocaml/typing/path.mli b/ocamlmerlin_mlx/ocaml/typing/path.mli index 39e76a3..be55d98 100644 --- a/ocamlmerlin_mlx/ocaml/typing/path.mli +++ b/ocamlmerlin_mlx/ocaml/typing/path.mli @@ -64,11 +64,14 @@ val exists_free: Ident.t list -> t -> bool val scope: t -> int val flatten : t -> [ `Contains_apply | `Ok of Ident.t * string list ] +val scrape_extra_ty: t -> t +(** Removes surrounding `Pext_ty` constructors from a path *) + val name: ?paren:(string -> bool) -> t -> string (* [paren] tells whether a path suffix needs parentheses *) val head: t -> Ident.t -val print: Format.formatter -> t -> unit +val print: t Format_doc.printer val heads: t -> Ident.t list diff --git a/ocamlmerlin_mlx/ocaml/typing/patterns.ml b/ocamlmerlin_mlx/ocaml/typing/patterns.ml index 55f9d4f..7b10185 100644 --- a/ocamlmerlin_mlx/ocaml/typing/patterns.ml +++ b/ocamlmerlin_mlx/ocaml/typing/patterns.ml @@ -16,6 +16,7 @@ open Asttypes open Types +open Data_types open Typedtree (* useful pattern auxiliary functions *) @@ -52,13 +53,13 @@ module Simple = struct type view = [ | `Any | `Constant of constant - | `Tuple of pattern list + | `Tuple of (string option * pattern) list | `Construct of Longident.t loc * constructor_description * pattern list | `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 ] @@ -79,18 +80,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 * Uid.t + | `Alias of pattern * Ident.t * string loc * Uid.t * Types.type_expr ] 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, uid) -> + `Var (id, str, uid) + | Tpat_alias (p, id, str, uid, ty) -> + `Alias (p, id, str, uid, ty) | Tpat_constant cst -> `Constant cst | Tpat_tuple ps -> @@ -101,7 +102,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 @@ -110,8 +111,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, uid) -> Tpat_var (id, str, uid) + | `Alias (p, id, str, uid, ty) -> Tpat_alias (p, id, str, uid, ty) | `Constant cst -> Tpat_constant cst | `Tuple ps -> Tpat_tuple ps | `Construct (cstr, cst_descr, args) -> @@ -120,7 +121,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 @@ -129,7 +130,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 @@ -141,13 +142,13 @@ module Head : sig | Any | Construct of constructor_description | Constant of constant - | Tuple of int + | Tuple of string option list | Record of label_description list | Variant of { 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 @@ -166,7 +167,7 @@ end = struct | Any | Construct of constructor_description | Constant of constant - | Tuple of int + | Tuple of string option list | Record of label_description list | Variant of { tag: label; has_arg: bool; @@ -174,7 +175,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 @@ -184,7 +185,7 @@ end = struct | `Any -> Any, [] | `Constant c -> Constant c, [] | `Tuple args -> - Tuple (List.length args), args + Tuple (List.map fst args), (List.map snd args) | `Construct (_, c, args) -> Construct c, args | `Variant (tag, arg, cstr_row) -> @@ -199,8 +200,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 @@ -216,7 +217,8 @@ end = struct | Any -> 0 | Constant _ -> 0 | Construct c -> c.cstr_arity - | Tuple n | Array n -> n + | Tuple l -> List.length l + | Array (_, n) -> n | Record l -> List.length l | Variant { has_arg; _ } -> if has_arg then 1 else 0 | Lazy -> 1 @@ -228,8 +230,9 @@ end = struct | Any -> Tpat_any | Lazy -> Tpat_lazy omega | Constant c -> Tpat_constant c - | Tuple n -> Tpat_tuple (omegas n) - | Array n -> Tpat_array (omegas n) + | Tuple lbls -> + Tpat_tuple (List.map (fun lbl -> lbl, omega) lbls) + | 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/ocamlmerlin_mlx/ocaml/typing/patterns.mli b/ocamlmerlin_mlx/ocaml/typing/patterns.mli index 66dd2d0..9a9ff7c 100644 --- a/ocamlmerlin_mlx/ocaml/typing/patterns.mli +++ b/ocamlmerlin_mlx/ocaml/typing/patterns.mli @@ -17,6 +17,7 @@ open Asttypes open Typedtree open Types +open Data_types val omega : pattern (** aka. "Tpat_any" or "_" *) @@ -40,13 +41,13 @@ module Simple : sig type view = [ | `Any | `Constant of constant - | `Tuple of pattern list + | `Tuple of (string option * pattern) list | `Construct of Longident.t loc * constructor_description * pattern list | `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 +66,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 * Uid.t + | `Alias of pattern * Ident.t * string loc * Uid.t * Types.type_expr ] type pattern = view pattern_data @@ -81,7 +82,7 @@ module Head : sig | Any | Construct of constructor_description | Constant of constant - | Tuple of int + | Tuple of string option list | Record of label_description list | Variant of { tag: label; has_arg: bool; @@ -89,7 +90,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/ocamlmerlin_mlx/ocaml/typing/persistent_env.ml b/ocamlmerlin_mlx/ocaml/typing/persistent_env.ml index 15bb941..9a20ed6 100644 --- a/ocamlmerlin_mlx/ocaml/typing/persistent_env.ml +++ b/ocamlmerlin_mlx/ocaml/typing/persistent_env.ml @@ -34,14 +34,19 @@ let error err = raise (Error err) module Persistent_signature = struct type t = { filename : string; - cmi : Cmi_format.cmi_infos } - - let load = ref (fun ~unit_name -> - match Load_path.find_uncap (unit_name ^ ".cmi") with - | filename -> - let cmi = Cmi_cache.read filename in - Some { filename; cmi } - | exception Not_found -> None) + cmi : Cmi_format.cmi_infos; + visibility : Load_path.visibility } + + let load = ref (fun ~allow_hidden ~unit_name -> + match Load_path.find_normalized_with_visibility (unit_name ^ ".cmi") with + | filename, visibility when allow_hidden -> + let cmi = Cmi_cache.read filename in + Some { filename; cmi; visibility} + | filename, Visible -> + let cmi = Cmi_cache.read filename in + Some { filename; cmi; visibility = Visible} + | _, Hidden + | exception Not_found -> None) end type can_load_cmis = @@ -53,6 +58,7 @@ type pers_struct = { ps_crcs: (string * Digest.t option) list; ps_filename: string; ps_flags: pers_flags list; + ps_visibility: Load_path.visibility; } module String = Misc.String @@ -204,7 +210,7 @@ let save_pers_struct penv crc ps pm = add_import penv modname let acknowledge_pers_struct penv short_path_comps check modname pers_sig pm = - let { Persistent_signature.filename; cmi } = pers_sig in + let { Persistent_signature.filename; cmi; visibility } = pers_sig in let name = cmi.cmi_name in let crcs = cmi.cmi_crcs in let flags = cmi.cmi_flags in @@ -212,6 +218,7 @@ let acknowledge_pers_struct penv short_path_comps check modname pers_sig pm = ps_crcs = crcs; ps_filename = filename; ps_flags = flags; + ps_visibility = visibility; } in if ps.ps_name <> modname then error (Illegal_renaming(modname, ps.ps_name, filename)); @@ -229,29 +236,33 @@ let acknowledge_pers_struct penv short_path_comps check modname pers_sig pm = register_pers_for_short_paths penv ps (short_path_comps ps.ps_name pm); ps -let read_pers_struct penv val_of_pers_sig short_path_comps check modname filename = +let read_pers_struct penv val_of_pers_sig short_path_comps check cmi = + let modname = Unit_info.Artifact.modname cmi in + let filename = Unit_info.Artifact.filename cmi in add_import penv modname; let cmi = Cmi_cache.read filename in - let pers_sig = { Persistent_signature.filename; cmi } in + let pers_sig = { Persistent_signature.filename; cmi; visibility = Visible } in let pm = val_of_pers_sig pers_sig in let ps = acknowledge_pers_struct penv short_path_comps check modname pers_sig pm in (ps, pm) -let find_pers_struct penv val_of_pers_sig short_path_comps check name = +let find_pers_struct ~allow_hidden penv val_of_pers_sig short_path_comps check name = let {persistent_structures; _} = penv in if name = "*predef*" then raise Not_found; match Hashtbl.find persistent_structures name with - | Found (ps, pm) -> (ps, pm) + | Found (ps, pm) when allow_hidden || ps.ps_visibility = Load_path.Visible -> + (ps, pm) + | Found _ -> raise Not_found | Missing -> raise Not_found | exception Not_found -> match can_load_cmis penv with | Cannot_load_cmis _ -> raise Not_found | Can_load_cmis -> let psig = - match !Persistent_signature.load ~unit_name:name with + match !Persistent_signature.load ~allow_hidden ~unit_name:name with | Some psig -> psig | None -> - Hashtbl.add persistent_structures name Missing; + if allow_hidden then Hashtbl.add persistent_structures name Missing; raise Not_found in add_import penv name; @@ -259,42 +270,46 @@ let find_pers_struct penv val_of_pers_sig short_path_comps check name = let ps = acknowledge_pers_struct penv short_path_comps check name psig pm in (ps, pm) +module Style = Misc.Style (* Emits a warning if there is no valid cmi for name *) -let check_pers_struct penv f1 f2 ~loc name = +let check_pers_struct ~allow_hidden penv f1 f2 ~loc name = try - ignore (find_pers_struct penv f1 f2 false name) + ignore (find_pers_struct ~allow_hidden penv f1 f2 false name) with | Not_found -> let warn = Warnings.No_cmi_file(name, None) in Location.prerr_warning loc warn | Magic_numbers.Cmi.Error err -> - let msg = Format.asprintf "%a" Magic_numbers.Cmi.report_error err in + let msg = Format_doc.asprintf "%a" Magic_numbers.Cmi.report_error err in let warn = Warnings.No_cmi_file(name, Some msg) in Location.prerr_warning loc warn | Error err -> let msg = match err with | Illegal_renaming(name, ps_name, filename) -> - Format.asprintf + Format_doc.doc_printf " %a@ contains the compiled interface for @ \ - %s when %s was expected" - Location.print_filename filename ps_name name + %a when %a was expected" + Location.Doc.quoted_filename filename + Style.inline_code ps_name + Style.inline_code name | Inconsistent_import _ -> assert false | Need_recursive_types name -> - Format.sprintf - "%s uses recursive types" - name + Format_doc.doc_printf + "%a uses recursive types" + Style.inline_code name in + let msg = Format_doc.(asprintf "%a" pp_doc) msg in let warn = Warnings.No_cmi_file(name, Some msg) in Location.prerr_warning loc warn -let read penv f1 f2 modname filename = - snd (read_pers_struct penv f1 f2 true modname filename) +let read penv f1 f2 a = + snd (read_pers_struct penv f1 f2 true a) -let find penv f1 f2 name = - snd (find_pers_struct penv f1 f2 true name) +let find ~allow_hidden penv f1 f2 name = + snd (find_pers_struct ~allow_hidden penv f1 f2 true name) -let check penv f1 f2 ~loc name = +let check ~allow_hidden penv f1 f2 ~loc name = let {persistent_structures; _} = penv in if not (Hashtbl.mem persistent_structures name) then begin (* PR#6843: record the weak dependency ([add_import]) regardless of @@ -303,11 +318,11 @@ let check penv f1 f2 ~loc name = add_import penv name; if (Warnings.is_active (Warnings.No_cmi_file("", None))) then !add_delayed_check_forward - (fun () -> check_pers_struct penv f1 f2 ~loc name) + (fun () -> check_pers_struct ~allow_hidden penv f1 f2 ~loc name) end let crc_of_unit penv f1 f2 name = - let (ps, _pm) = find_pers_struct penv f1 f2 true name in + let (ps, _pm) = find_pers_struct ~allow_hidden:true penv f1 f2 true name in let crco = try List.assoc name ps.ps_crcs @@ -347,7 +362,7 @@ let make_cmi penv modname sign alerts = } let save_cmi penv psig pm = - let { Persistent_signature.filename; cmi } = psig in + let { Persistent_signature.filename; cmi; visibility } = psig in Misc.try_finally (fun () -> let { cmi_name = modname; @@ -366,34 +381,34 @@ let save_cmi penv psig pm = ps_crcs = (cmi.cmi_name, Some crc) :: imports; ps_filename = filename; ps_flags = flags; + ps_visibility = visibility } in save_pers_struct penv crc ps pm ) ~exceptionally:(fun () -> remove_file filename) -let report_error ppf = - let open Format in +let report_error_doc ppf = + let open Format_doc in function | Illegal_renaming(modname, ps_name, filename) -> fprintf ppf "Wrong file naming: %a@ contains the compiled interface for@ \ - %s when %s was expected" - Location.print_filename filename ps_name modname + %a when %a was expected" + Location.Doc.quoted_filename filename + Style.inline_code ps_name + Style.inline_code modname | Inconsistent_import(name, source1, source2) -> fprintf ppf "@[The files %a@ and %a@ \ - make inconsistent assumptions@ over interface %s@]" - Location.print_filename source1 Location.print_filename source2 name + make inconsistent assumptions@ over interface %a@]" + Location.Doc.quoted_filename source1 + Location.Doc.quoted_filename source2 + Style.inline_code name | Need_recursive_types(import) -> fprintf ppf - "@[Invalid import of %s, which uses recursive types.@ %s@]" - import "The compilation flag -rectypes is required" + "@[Invalid import of %a, which uses recursive types.@ \ + The compilation flag %a is required@]" + Style.inline_code import + Style.inline_code "-rectypes" -let () = - Location.register_error_of_exn - (function - | Error err -> - Some (Location.error_of_printer_file report_error err) - | _ -> None - ) (* helper for merlin *) @@ -408,3 +423,13 @@ let forall ~found ~missing t = | Found (pers_struct, a) -> found name pers_struct.ps_filename pers_struct.ps_name a ) + +let () = + Location.register_error_of_exn + (function + | Error err -> + Some (Location.error_of_printer_file report_error_doc err) + | _ -> None + ) + +let report_error = Format_doc.compat report_error_doc diff --git a/ocamlmerlin_mlx/ocaml/typing/persistent_env.mli b/ocamlmerlin_mlx/ocaml/typing/persistent_env.mli index afcea8e..a622cd0 100644 --- a/ocamlmerlin_mlx/ocaml/typing/persistent_env.mli +++ b/ocamlmerlin_mlx/ocaml/typing/persistent_env.mli @@ -27,17 +27,20 @@ type error = exception Error of error -val report_error: Format.formatter -> error -> unit +val report_error: error Format_doc.format_printer +val report_error_doc: error Format_doc.printer module Persistent_signature : sig type t = { filename : string; (** Name of the file containing the signature. *) - cmi : Cmi_format.cmi_infos } + cmi : Cmi_format.cmi_infos; + visibility : Load_path.visibility + } (** Function used to load a persistent signature. The default is to look for the .cmi file in the load path. This function can be overridden to load it from memory, for instance to build a self-contained toplevel. *) - val load : (unit_name:string -> t option) ref + val load : (allow_hidden:bool -> unit_name:string -> t option) ref end type can_load_cmis = @@ -57,14 +60,14 @@ val fold : 'a t -> (modname -> 'a -> 'b -> 'b) -> 'b -> 'b val read : 'a t -> (Persistent_signature.t -> 'a) -> (string -> 'a -> Short_paths.Desc.Module.components Lazy.t) - -> modname -> filepath -> 'a -val find : 'a t -> (Persistent_signature.t -> 'a) + -> Unit_info.Artifact.t -> 'a +val find : allow_hidden:bool -> 'a t -> (Persistent_signature.t -> 'a) -> (string -> 'a -> Short_paths.Desc.Module.components Lazy.t) -> modname -> 'a val find_in_cache : 'a t -> modname -> 'a option -val check : 'a t -> (Persistent_signature.t -> 'a) +val check : allow_hidden:bool -> 'a t -> (Persistent_signature.t -> 'a) -> (string -> 'a -> Short_paths.Desc.Module.components Lazy.t) -> loc:Location.t -> modname -> unit diff --git a/ocamlmerlin_mlx/ocaml/typing/predef.ml b/ocamlmerlin_mlx/ocaml/typing/predef.ml index 185825c..46bafac 100644 --- a/ocamlmerlin_mlx/ocaml/typing/predef.ml +++ b/ocamlmerlin_mlx/ocaml/typing/predef.ml @@ -28,6 +28,60 @@ let wrap create s = let ident_create = wrap Ident.create_predef +type abstract_type_constr = [ + | `Int + | `Char + | `String + | `Bytes + | `Float + | `Continuation + | `Array + | `Nativeint + | `Int32 + | `Int64 + | `Lazy_t + | `Extension_constructor + | `Floatarray + | `Iarray + | `Atomic_loc +] +type data_type_constr = [ + | `Bool + | `Unit + | `Exn + | `Eff + | `List + | `Option +] +type type_constr = [ + | abstract_type_constr + | data_type_constr +] + +let all_type_constrs : type_constr list = [ + `Int; + `Char; + `String; + `Bytes; + `Float; + `Bool; + `Unit; + `Exn; + `Eff; + `Continuation; + `Array; + `List; + `Option; + `Nativeint; + `Int32; + `Int64; + `Lazy_t; + `Extension_constructor; + `Floatarray; + `Iarray; + `Atomic_loc; +] + let ident_int = ident_create "int" and ident_char = ident_create "char" and ident_bytes = ident_create "bytes" @@ -35,6 +89,8 @@ and ident_float = ident_create "float" and ident_bool = ident_create "bool" and ident_unit = ident_create "unit" and ident_exn = ident_create "exn" +and ident_eff = ident_create "eff" +and ident_continuation = ident_create "continuation" and ident_array = ident_create "array" and ident_list = ident_create "list" and ident_option = ident_create "option" @@ -45,6 +101,31 @@ and ident_lazy_t = ident_create "lazy_t" and ident_string = ident_create "string" and ident_extension_constructor = ident_create "extension_constructor" and ident_floatarray = ident_create "floatarray" +and ident_iarray = ident_create "iarray" +and ident_atomic_loc = ident_create "atomic_loc" + +let ident_of_type_constr : type_constr -> Ident.t = function + | `Int -> ident_int + | `Char -> ident_char + | `String -> ident_string + | `Bytes -> ident_bytes + | `Float -> ident_float + | `Bool -> ident_bool + | `Unit -> ident_unit + | `Exn -> ident_exn + | `Eff -> ident_eff + | `Continuation -> ident_continuation + | `Array -> ident_array + | `List -> ident_list + | `Option -> ident_option + | `Nativeint -> ident_nativeint + | `Int32 -> ident_int32 + | `Int64 -> ident_int64 + | `Lazy_t -> ident_lazy_t + | `Extension_constructor -> ident_extension_constructor + | `Floatarray -> ident_floatarray + | `Iarray -> ident_iarray + | `Atomic_loc -> ident_atomic_loc let path_int = Pident ident_int and path_char = Pident ident_char @@ -53,6 +134,8 @@ and path_float = Pident ident_float and path_bool = Pident ident_bool and path_unit = Pident ident_unit and path_exn = Pident ident_exn +and path_eff = Pident ident_eff +and path_continuation = Pident ident_continuation and path_array = Pident ident_array and path_list = Pident ident_list and path_option = Pident ident_option @@ -63,25 +146,42 @@ and path_lazy_t = Pident ident_lazy_t and path_string = Pident ident_string and path_extension_constructor = Pident ident_extension_constructor and path_floatarray = Pident ident_floatarray +and path_iarray = Pident ident_iarray +and path_atomic_loc = Pident ident_atomic_loc + +let path_of_type_constr typ = + Pident (ident_of_type_constr typ) -let type_int = newgenty (Tconstr(path_int, [], ref Mnil)) -and type_char = newgenty (Tconstr(path_char, [], ref Mnil)) -and type_bytes = newgenty (Tconstr(path_bytes, [], ref Mnil)) -and type_float = newgenty (Tconstr(path_float, [], ref Mnil)) -and type_bool = newgenty (Tconstr(path_bool, [], ref Mnil)) -and type_unit = newgenty (Tconstr(path_unit, [], ref Mnil)) -and type_exn = newgenty (Tconstr(path_exn, [], ref Mnil)) -and type_array t = newgenty (Tconstr(path_array, [t], ref Mnil)) -and type_list t = newgenty (Tconstr(path_list, [t], ref Mnil)) -and type_option t = newgenty (Tconstr(path_option, [t], ref Mnil)) -and type_nativeint = newgenty (Tconstr(path_nativeint, [], ref Mnil)) -and type_int32 = newgenty (Tconstr(path_int32, [], ref Mnil)) -and type_int64 = newgenty (Tconstr(path_int64, [], ref Mnil)) -and type_lazy_t t = newgenty (Tconstr(path_lazy_t, [t], ref Mnil)) -and type_string = newgenty (Tconstr(path_string, [], ref Mnil)) -and type_extension_constructor = - newgenty (Tconstr(path_extension_constructor, [], ref Mnil)) -and type_floatarray = newgenty (Tconstr(path_floatarray, [], ref Mnil)) +let tconstr p args = newgenty (Tconstr(p, args, ref Mnil)) +let type_int = tconstr path_int [] +and type_char = tconstr path_char [] +and type_bytes = tconstr path_bytes [] +and type_float = tconstr path_float [] +and type_bool = tconstr path_bool [] +and type_unit = tconstr path_unit [] +and type_exn = tconstr path_exn [] +and type_eff t = tconstr path_eff [t] +and type_continuation t1 t2 = tconstr path_continuation [t1; t2] +and type_array t = tconstr path_array [t] +and type_list t = tconstr path_list [t] +and type_option t = tconstr path_option [t] +and type_nativeint = tconstr path_nativeint [] +and type_int32 = tconstr path_int32 [] +and type_int64 = tconstr path_int64 [] +and type_lazy_t t = tconstr path_lazy_t [t] +and type_string = tconstr path_string [] +and type_extension_constructor = tconstr path_extension_constructor [] +and type_floatarray = tconstr path_floatarray [] +and type_iarray t = tconstr path_iarray [t] +and type_atomic_loc t = tconstr path_atomic_loc [t] + +let find_type_constr = + let all_predef_paths = + all_type_constrs + |> List.map (fun tconstr -> path_of_type_constr tconstr, tconstr) + |> List.fold_left (fun m (k, v) -> Path.Map.add k v m) Path.Map.empty + in + fun p -> Path.Map.find_opt p all_predef_paths let ident_match_failure = ident_create "Match_failure" and ident_out_of_memory = ident_create "Out_of_memory" @@ -96,6 +196,7 @@ and ident_sys_blocked_io = ident_create "Sys_blocked_io" and ident_assert_failure = ident_create "Assert_failure" and ident_undefined_recursive_module = ident_create "Undefined_recursive_module" +and ident_continuation_already_taken = ident_create "Continuation_already_taken" let all_predef_exns = [ ident_match_failure; @@ -110,22 +211,13 @@ let all_predef_exns = [ ident_sys_blocked_io; ident_assert_failure; ident_undefined_recursive_module; + ident_continuation_already_taken; ] let path_match_failure = Pident ident_match_failure and path_assert_failure = Pident ident_assert_failure and path_undefined_recursive_module = Pident ident_undefined_recursive_module -let cstr id args = - { - cd_id = id; - cd_args = Cstr_tuple args; - cd_res = None; - cd_loc = Location.none; - cd_attributes = []; - cd_uid = Uid.of_predef_id id; - } - let ident_false = ident_create "false" and ident_true = ident_create "true" and ident_void = ident_create "()" @@ -134,15 +226,19 @@ and ident_cons = ident_create "::" and ident_none = ident_create "None" and ident_some = ident_create "Some" -let mk_add_type add_type type_ident - ?manifest ?(immediate=Type_immediacy.Unknown) ?(kind=Type_abstract) env = - let decl = +let decl_of_type_constr tconstr = + let type_uid = Uid.of_predef_id (ident_of_type_constr tconstr) in + let decl0 + ?(immediate = Type_immediacy.Unknown) + ?(kind = Type_abstract Definition) + () + = {type_params = []; type_arity = 0; type_kind = kind; type_loc = Location.none; type_private = Asttypes.Public; - type_manifest = manifest; + type_manifest = None; type_variance = []; type_separability = []; type_is_newtype = false; @@ -150,35 +246,91 @@ let mk_add_type add_type type_ident type_attributes = []; type_immediate = immediate; type_unboxed_default = false; - type_uid = Uid.of_predef_id type_ident; + type_uid; } in - add_type type_ident decl env - -let build_initial_env add_type add_extension empty_env = - let add_type = mk_add_type add_type - and add_type1 type_ident - ~variance ~separability ?(kind=fun _ -> Type_abstract) env = + let decl1 + ~variance + ?(separability = Separability.Ind) + ?(kind = fun _ -> Type_abstract Definition) + () + = let param = newgenvar () in - let decl = - {type_params = [param]; - type_arity = 1; - type_kind = kind param; - type_loc = Location.none; - type_private = Asttypes.Public; - type_manifest = None; - type_variance = [variance]; - type_separability = [separability]; - type_is_newtype = false; - type_expansion_scope = lowest_level; - type_attributes = []; - type_immediate = Unknown; - type_unboxed_default = false; - type_uid = Uid.of_predef_id type_ident; - } - in - add_type type_ident decl env + { (decl0 ~kind:(kind param) ()) with + type_params = [param]; + type_arity = 1; + type_variance = [variance]; + type_separability = [separability]; + } + in + let decl2 + ~variance:(var1, var2) + ?separability:((sep1, sep2) = (Separability.Ind, Separability.Ind)) + ?(kind = fun _ _ -> Type_abstract Definition) + () + = + let param1, param2 = newgenvar (), newgenvar () in + { (decl0 ~kind:(kind param1 param2) ()) with + type_params = [param1; param2]; + type_arity = 2; + type_variance = [var1; var2]; + type_separability = [sep1; sep2]; + } + in + let cstr id args = + { + cd_id = id; + cd_args = Cstr_tuple args; + cd_res = None; + cd_loc = Location.none; + cd_attributes = []; + cd_uid = Uid.of_predef_id id; + } in + let variant constrs = + Type_variant (constrs, Variant_regular) in + match tconstr with + | `Int | `Char + -> decl0 ~immediate:Always () + | `String | `Bytes + | `Float + | `Floatarray + | `Nativeint | `Int32 | `Int64 + | `Extension_constructor + -> decl0 () + | `Bool -> + let kind = variant [cstr ident_false []; + cstr ident_true []] in + decl0 ~immediate:Always ~kind () + | `Unit -> + let kind = variant [cstr ident_void []] in + decl0 ~immediate:Always ~kind () + | `Exn -> decl0 ~kind:Type_open () + | `Eff -> + let kind _ = Type_open in + decl1 ~variance:Variance.full ~kind () + | `Continuation -> + let variance = Variance.(contravariant, covariant) in + decl2 ~variance () + | `Array + | `Atomic_loc + -> + decl1 ~variance:Variance.full () + | `Iarray -> + decl1 ~variance:Variance.covariant () + | `List -> + let kind tvar = + variant [cstr ident_nil []; + cstr ident_cons [tvar; type_list tvar]] in + decl1 ~variance:Variance.covariant ~kind () + | `Option -> + let kind tvar = + variant [cstr ident_none []; + cstr ident_some [tvar]] in + decl1 ~variance:Variance.covariant ~kind () + | `Lazy_t -> decl1 ~variance:Variance.covariant () + +let build_initial_env add_type add_extension empty_env = let add_extension id l = add_extension id { ext_type_path = path_exn; @@ -193,58 +345,26 @@ let build_initial_env add_type add_extension empty_env = ext_uid = Uid.of_predef_id id; } in - let variant constrs = Type_variant (constrs, Variant_regular) in - empty_env - (* Predefined types - alphabetical order *) - |> add_type1 ident_array - ~variance:Variance.full - ~separability:Separability.Ind - |> add_type ident_bool - ~immediate:Always - ~kind:(variant [cstr ident_false []; cstr ident_true []]) - |> add_type ident_char ~immediate:Always - |> add_type ident_exn ~kind:Type_open - |> add_type ident_extension_constructor - |> add_type ident_float - |> add_type ident_floatarray - |> add_type ident_int ~immediate:Always - |> add_type ident_int32 - |> add_type ident_int64 - |> add_type1 ident_lazy_t - ~variance:Variance.covariant - ~separability:Separability.Ind - |> add_type1 ident_list - ~variance:Variance.covariant - ~separability:Separability.Ind - ~kind:(fun tvar -> - variant [cstr ident_nil []; cstr ident_cons [tvar; type_list tvar]]) - |> add_type ident_nativeint - |> add_type1 ident_option - ~variance:Variance.covariant - ~separability:Separability.Ind - ~kind:(fun tvar -> - variant [cstr ident_none []; cstr ident_some [tvar]]) - |> add_type ident_string - |> add_type ident_bytes - |> add_type ident_unit - ~immediate:Always - ~kind:(variant [cstr ident_void []]) + List.fold_left (fun env tconstr -> + add_type (ident_of_type_constr tconstr) (decl_of_type_constr tconstr) env + ) empty_env all_type_constrs (* Predefined exceptions - alphabetical order *) |> add_extension ident_assert_failure - [newgenty (Ttuple[type_string; type_int; type_int])] + [newgenty (Ttuple[None, type_string; None, type_int; None, type_int])] |> add_extension ident_division_by_zero [] |> add_extension ident_end_of_file [] |> add_extension ident_failure [type_string] |> add_extension ident_invalid_argument [type_string] |> add_extension ident_match_failure - [newgenty (Ttuple[type_string; type_int; type_int])] + [newgenty (Ttuple[None, type_string; None, type_int; None, type_int])] |> add_extension ident_not_found [] |> add_extension ident_out_of_memory [] |> add_extension ident_stack_overflow [] |> add_extension ident_sys_blocked_io [] |> add_extension ident_sys_error [type_string] |> add_extension ident_undefined_recursive_module - [newgenty (Ttuple[type_string; type_int; type_int])] + [newgenty (Ttuple[None, type_string; None, type_int; None, type_int])] + |> add_extension ident_continuation_already_taken [] let builtin_values = List.map (fun id -> (Ident.name id, id)) all_predef_exns diff --git a/ocamlmerlin_mlx/ocaml/typing/predef.mli b/ocamlmerlin_mlx/ocaml/typing/predef.mli index ff67206..bea7467 100644 --- a/ocamlmerlin_mlx/ocaml/typing/predef.mli +++ b/ocamlmerlin_mlx/ocaml/typing/predef.mli @@ -19,6 +19,38 @@ open Types val ident_bytes: Ident.t +type abstract_type_constr = [ + | `Int + | `Char + | `String + | `Bytes + | `Float + | `Continuation + | `Array + | `Nativeint + | `Int32 + | `Int64 + | `Lazy_t + | `Extension_constructor + | `Floatarray + | `Iarray + | `Atomic_loc +] +type data_type_constr = [ + | `Bool + | `Unit + | `Exn + | `Eff + | `List + | `Option +] +type type_constr = [ + | abstract_type_constr + | data_type_constr +] + +val find_type_constr : Path.t -> type_constr option + val type_int: type_expr val type_char: type_expr val type_string: type_expr @@ -27,15 +59,19 @@ val type_float: type_expr val type_bool: type_expr val type_unit: type_expr val type_exn: type_expr +val type_eff: type_expr -> type_expr +val type_continuation: type_expr -> type_expr -> 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 val type_int32: type_expr val type_int64: type_expr val type_lazy_t: type_expr -> type_expr -val type_extension_constructor:type_expr -val type_floatarray:type_expr +val type_extension_constructor: type_expr +val type_floatarray: type_expr +val type_atomic_loc: type_expr -> type_expr val path_int: Path.t val path_char: Path.t @@ -45,7 +81,9 @@ val path_float: Path.t val path_bool: Path.t val path_unit: Path.t val path_exn: Path.t +val path_eff: 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 +92,7 @@ val path_int64: Path.t val path_lazy_t: Path.t val path_extension_constructor: Path.t val path_floatarray: Path.t +val path_continuation: Path.t val path_match_failure: Path.t val path_assert_failure : Path.t diff --git a/ocamlmerlin_mlx/ocaml/typing/primitive.ml b/ocamlmerlin_mlx/ocaml/typing/primitive.ml index bf4fe83..a0cb5d7 100644 --- a/ocamlmerlin_mlx/ocaml/typing/primitive.ml +++ b/ocamlmerlin_mlx/ocaml/typing/primitive.ml @@ -24,7 +24,7 @@ type native_repr = | Same_as_ocaml_repr | Unboxed_float | Unboxed_integer of boxed_integer - | Untagged_int + | Untagged_immediate type description = { prim_name: string; (* Name of primitive or C function *) @@ -45,16 +45,16 @@ let is_ocaml_repr = function | Same_as_ocaml_repr -> true | Unboxed_float | Unboxed_integer _ - | Untagged_int -> false + | Untagged_immediate -> false let is_unboxed = function | Same_as_ocaml_repr - | Untagged_int -> false + | Untagged_immediate -> false | Unboxed_float | Unboxed_integer _ -> true let is_untagged = function - | Untagged_int -> true + | Untagged_immediate -> true | Same_as_ocaml_repr | Unboxed_float | Unboxed_integer _ -> false @@ -95,8 +95,7 @@ let parse_declaration valdecl ~native_repr_args ~native_repr_res = fatal_error "Primitive.parse_declaration" in let noalloc_attribute = - Attr_helper.has_no_payload_attribute ["noalloc"; "ocaml.noalloc"] - valdecl.pval_attributes + Attr_helper.has_no_payload_attribute "noalloc" valdecl.pval_attributes in if old_style_float && not (List.for_all is_ocaml_repr native_repr_args && @@ -181,7 +180,7 @@ let print p osig_val_decl = | Same_as_ocaml_repr -> None | Unboxed_float | Unboxed_integer _ -> if all_unboxed then None else Some oattr_unboxed - | Untagged_int -> if all_untagged then None else Some oattr_untagged + | Untagged_immediate -> if all_untagged then None else Some oattr_untagged in let type_attrs = List.map attr_of_native_repr p.prim_native_repr_args @ @@ -213,33 +212,40 @@ let equal_native_repr nr1 nr2 = match nr1, nr2 with | Same_as_ocaml_repr, Same_as_ocaml_repr -> true | Same_as_ocaml_repr, - (Unboxed_float | Unboxed_integer _ | Untagged_int) -> false + (Unboxed_float | Unboxed_integer _ | Untagged_immediate) -> false | Unboxed_float, Unboxed_float -> true | Unboxed_float, - (Same_as_ocaml_repr | Unboxed_integer _ | Untagged_int) -> false + (Same_as_ocaml_repr | Unboxed_integer _ | Untagged_immediate) -> false | Unboxed_integer bi1, Unboxed_integer bi2 -> equal_boxed_integer bi1 bi2 | Unboxed_integer _, - (Same_as_ocaml_repr | Unboxed_float | Untagged_int) -> false - | Untagged_int, Untagged_int -> true - | Untagged_int, + (Same_as_ocaml_repr | Unboxed_float | Untagged_immediate) -> false + | Untagged_immediate, Untagged_immediate -> true + | Untagged_immediate, (Same_as_ocaml_repr | Unboxed_float | Unboxed_integer _) -> false let native_name_is_external p = let nat_name = native_name p in nat_name <> "" && nat_name.[0] <> '%' +module Style = Misc.Style + let report_error ppf err = match err with | Old_style_float_with_native_repr_attribute -> - Format.fprintf ppf "Cannot use \"float\" in conjunction with \ - [%@unboxed]/[%@untagged]." + Format_doc.fprintf ppf "Cannot use %a in conjunction with %a/%a." + Style.inline_code "float" + Style.inline_code "[@unboxed]" + Style.inline_code "[@untagged]" | Old_style_noalloc_with_noalloc_attribute -> - Format.fprintf ppf "Cannot use \"noalloc\" in conjunction with \ - [%@%@noalloc]." + Format_doc.fprintf ppf "Cannot use %a in conjunction with %a." + Style.inline_code "noalloc" + Style.inline_code "[@@noalloc]" | No_native_primitive_with_repr_attribute -> - Format.fprintf ppf - "[@The native code version of the primitive is mandatory@ \ - when attributes [%@untagged] or [%@unboxed] are present.@]" + Format_doc.fprintf ppf + "@[The native code version of the primitive is mandatory@ \ + when attributes %a or %a are present.@]" + Style.inline_code "[@untagged]" + Style.inline_code "[@unboxed]" let () = Location.register_error_of_exn diff --git a/ocamlmerlin_mlx/ocaml/typing/primitive.mli b/ocamlmerlin_mlx/ocaml/typing/primitive.mli index e8376ad..3d3ae88 100644 --- a/ocamlmerlin_mlx/ocaml/typing/primitive.mli +++ b/ocamlmerlin_mlx/ocaml/typing/primitive.mli @@ -23,7 +23,7 @@ type native_repr = | Same_as_ocaml_repr | Unboxed_float | Unboxed_integer of boxed_integer - | Untagged_int + | Untagged_immediate type description = private { prim_name: string; (* Name of primitive or C function *) diff --git a/ocamlmerlin_mlx/ocaml/typing/printpat.ml b/ocamlmerlin_mlx/ocaml/typing/printpat.ml index 64094b6..eea6c01 100644 --- a/ocamlmerlin_mlx/ocaml/typing/printpat.ml +++ b/ocamlmerlin_mlx/ocaml/typing/printpat.ml @@ -17,8 +17,8 @@ open Asttypes open Typedtree -open Types -open Format +open Data_types +open Format_doc let is_cons = function | {cstr_name = "::"} -> true @@ -52,10 +52,10 @@ 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 + fprintf ppf "@[(%a)@]" (pretty_list pretty_labeled_val ",") vs | Tpat_construct (_, cstr, [], _) -> fprintf ppf "%s" cstr.cstr_name | Tpat_construct (_, cstr, [w], None) -> @@ -84,7 +84,7 @@ let rec pretty_val : type k . _ -> k general_pattern -> _ = fun ppf v -> | (_,_,{pat_desc=Tpat_any}) -> false (* do not show lbl=_ *) | _ -> true) lvs in begin match filtered_lvs with - | [] -> fprintf ppf "_" + | [] -> fprintf ppf "{ _ }" | (_, lbl, _) :: q -> let elision_mark ppf = (* we assume that there is no label repetitions here *) @@ -94,12 +94,12 @@ 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 -> + | Tpat_array (_, vs) -> fprintf ppf "@[[| %a |]@]" (pretty_vals " ;") vs | Tpat_lazy v -> fprintf ppf "@[<2>lazy@ %a@]" pretty_arg v - | Tpat_alias (v, x,_) -> - fprintf ppf "@[(%a@ as %a)@]" pretty_val v Ident.print x + | Tpat_alias (v, x,_,_,_) -> + fprintf ppf "@[(%a@ as %a)@]" pretty_val v Ident.doc_print x | Tpat_value v -> fprintf ppf "%a" pretty_val (v :> pattern) | Tpat_exception v -> @@ -130,11 +130,22 @@ and pretty_or : type k . _ -> k general_pattern -> _ = fun ppf v -> fprintf ppf "%a|@,%a" pretty_or v pretty_or w | _ -> pretty_val ppf v -and pretty_vals sep ppf = function - | [] -> () - | [v] -> pretty_val ppf v - | v::vs -> - fprintf ppf "%a%s@ %a" pretty_val v sep (pretty_vals sep) vs +and pretty_list : type k . (_ -> k -> _) -> _ -> _ -> k list -> _ = + fun print_val sep ppf -> + function + | [] -> () + | [v] -> print_val ppf v + | v::vs -> + fprintf ppf "%a%s@ %a" print_val v sep (pretty_list print_val sep) vs + +and pretty_vals sep = pretty_list pretty_val sep + +and pretty_labeled_val ppf (l, p) = + begin match l with + | Some s -> fprintf ppf "~%s:" s + | None -> () + end; + pretty_val ppf p and pretty_lvals ppf = function | [] -> () @@ -145,25 +156,29 @@ and pretty_lvals ppf = function lbl.lbl_name pretty_val v pretty_lvals rest let top_pretty ppf v = - fprintf ppf "@[%a@]@?" pretty_val v + fprintf ppf "@[%a@]" pretty_val v -let pretty_pat p = - top_pretty Format.str_formatter p ; - prerr_string (Format.flush_str_formatter ()) +let pretty_pat ppf p = + top_pretty ppf p ; + pp_print_flush ppf () type 'k matrix = 'k general_pattern list list -let pretty_line fmt = +let pretty_line ppf line = + fprintf ppf "@["; List.iter (fun p -> - Format.fprintf fmt " <"; - top_pretty fmt p; - Format.fprintf fmt ">"; - ) - -let pretty_matrix fmt (pss : 'k matrix) = - Format.fprintf fmt "begin matrix\n" ; - List.iter (fun ps -> - pretty_line fmt ps ; - Format.fprintf fmt "\n" - ) pss; - Format.fprintf fmt "end matrix\n%!" + fprintf ppf "<%a>@ " + pretty_val p + ) line; + fprintf ppf "@]" + +let pretty_matrix ppf (pss : 'k matrix) = + fprintf ppf "@[ %a@]" + (pp_print_list ~pp_sep:pp_print_cut pretty_line) + pss + +module Compat = struct + let pretty_pat ppf x = compat pretty_pat ppf x + let pretty_line ppf x = compat pretty_line ppf x + let pretty_matrix ppf x = compat pretty_matrix ppf x +end diff --git a/ocamlmerlin_mlx/ocaml/typing/printpat.mli b/ocamlmerlin_mlx/ocaml/typing/printpat.mli index 1865a2a..2d9a93c 100644 --- a/ocamlmerlin_mlx/ocaml/typing/printpat.mli +++ b/ocamlmerlin_mlx/ocaml/typing/printpat.mli @@ -16,12 +16,13 @@ val pretty_const - : Asttypes.constant -> string -val top_pretty - : Format.formatter -> 'k Typedtree.general_pattern -> unit -val pretty_pat - : 'k Typedtree.general_pattern -> unit -val pretty_line - : Format.formatter -> 'k Typedtree.general_pattern list -> unit -val pretty_matrix - : Format.formatter -> 'k Typedtree.general_pattern list list -> unit + : Asttypes.constant -> string + +val top_pretty: 'k Typedtree.general_pattern Format_doc.printer + +module Compat: sig + val pretty_pat: Format.formatter -> 'k Typedtree.general_pattern -> unit + val pretty_line: Format.formatter -> 'k Typedtree.general_pattern list -> unit + val pretty_matrix: + Format.formatter -> 'k Typedtree.general_pattern list list -> unit +end diff --git a/ocamlmerlin_mlx/ocaml/typing/printtyp.ml b/ocamlmerlin_mlx/ocaml/typing/printtyp.ml index cba0d9c..f7b7c20 100644 --- a/ocamlmerlin_mlx/ocaml/typing/printtyp.ml +++ b/ocamlmerlin_mlx/ocaml/typing/printtyp.ml @@ -13,2565 +13,200 @@ (* *) (**************************************************************************) -(* Printing functions *) +open Out_type +module Fmt = Format_doc -module M = Misc.String.Map -module S = Misc.String.Set - -open Misc -open Ctype -open Format -open Longident -open Path -open Asttypes -open Types -open Btype -open Outcometree - -(* Print a long identifier *) - -let rec longident ppf = function - | Lident s -> pp_print_string ppf s - | Ldot(p, s) -> fprintf ppf "%a.%s" longident p s - | Lapply(p1, p2) -> fprintf ppf "%a(%a)" longident p1 longident p2 - -let () = Env.print_longident := longident - -(* Print an identifier avoiding name collisions *) - -module Out_name = struct - let create x = { printed_name = x } - let print x = x.printed_name -end - -(** Some identifiers may require hiding when printing *) -type bound_ident = { hide:bool; ident:Ident.t } - -(* printing environment for path shortening and naming *) -let printing_env = ref Env.empty - -(* When printing, it is important to only observe the - current printing environment, without reading any new - cmi present on the file system *) -let in_printing_env f = Env.without_cmis f !printing_env +let namespaced_ident namespace id = + Out_name.print (ident_name (Some namespace) id) - type namespace = Shape.Sig_component_kind.t = - | Value - | Type - | Module - | Module_type - | Extension_constructor - | Class - | Class_type +module Doc = struct + let wrap_printing_env = wrap_printing_env + let longident = Pprintast.Doc.longident -module Namespace = struct + let ident ppf id = Fmt.pp_print_string ppf + (Out_name.print (ident_name None id)) - let id = function - | Type -> 0 - | Module -> 1 - | Module_type -> 2 - | Class -> 3 - | Class_type -> 4 - | Extension_constructor | Value -> 5 - (* we do not handle those component *) - let size = 1 + id Value + let typexp mode ppf ty = + !Oprint.out_type ppf (tree_of_typexp mode ty) - let pp ppf x = - Format.pp_print_string ppf (Shape.Sig_component_kind.to_string x) + let type_expansion k ppf e = + pp_type_expansion ppf (trees_of_type_expansion k e) - let lookup = - let to_lookup f lid = fst @@ in_printing_env (f (Lident lid)) in - function - | Some Type -> to_lookup Env.find_type_by_name - | Some Module -> to_lookup Env.find_module_by_name - | Some Module_type -> to_lookup Env.find_modtype_by_name - | Some Class -> to_lookup Env.find_class_by_name - | Some Class_type -> to_lookup Env.find_cltype_by_name - | None | Some(Value|Extension_constructor) -> fun _ -> raise Not_found + let type_declaration id ppf decl = + !Oprint.out_sig_item ppf (tree_of_type_declaration id decl Trec_first) - let location namespace id = - let path = Path.Pident id in - try Some ( - match namespace with - | Some Type -> (in_printing_env @@ Env.find_type path).type_loc - | Some Module -> (in_printing_env @@ Env.find_module path).md_loc - | Some Module_type -> (in_printing_env @@ Env.find_modtype path).mtd_loc - | Some Class -> (in_printing_env @@ Env.find_class path).cty_loc - | Some Class_type -> (in_printing_env @@ Env.find_cltype path).clty_loc - | Some (Extension_constructor|Value) | None -> Location.none - ) with Not_found -> None + let type_expr ppf ty = + (* [type_expr] is used directly by error message printers, + we mark eventual loops ourself to avoid any misuse and stack overflow *) + prepare_for_printing [ty]; + prepared_type_expr ppf ty - let best_class_namespace = function - | Papply _ | Pdot _ -> Some Module - | Pextra_ty _ -> assert false (* Only in type path *) - | Pident c -> - match location (Some Class) c with - | Some _ -> Some Class - | None -> Some Class_type + let shared_type_scheme ppf ty = + add_type_to_preparation ty; + typexp Type_scheme ppf ty -end + let type_scheme ppf ty = + prepare_for_printing [ty]; + prepared_type_scheme ppf ty -(** {2 Conflicts printing} - Conflicts arise when multiple items are attributed the same name, - the following module stores the global conflict references and - provides the printing functions for explaining the source of - the conflicts. -*) -module Conflicts = struct - type explanation = - { kind: namespace; name:string; root_name:string; location:Location.t} - let explanations = ref M.empty - - let add namespace name id = - match Namespace.location (Some namespace) id with - | None -> () - | Some location -> - let explanation = - { kind = namespace; location; name; root_name=Ident.name id} - in - explanations := M.add name explanation !explanations + let path ppf p = + !Oprint.out_ident ppf (tree_of_path ~disambiguation:false p) - let collect_explanation namespace id ~name = - let root_name = Ident.name id in - (* if [name] is of the form "root_name/%d", we register both - [id] and the identifier in scope for [root_name]. - *) - if root_name <> name && not (M.mem name !explanations) then - begin - add namespace name id; - if not (M.mem root_name !explanations) then - (* lookup the identifier in scope with name [root_name] and - add it too - *) - match Namespace.lookup (Some namespace) root_name with - | Pident root_id -> add namespace root_name root_id - | exception Not_found | _ -> () - end + let () = Env.print_path := path - let pp_explanation ppf r= - Format.fprintf ppf "@[%a:@,Definition of %s %s@]" - Location.print_loc r.location - (Shape.Sig_component_kind.to_string r.kind) r.name + let type_path ppf p = !Oprint.out_ident ppf (tree_of_type_path p) - let print_located_explanations ppf l = - Format.fprintf ppf "@[%a@]" (Format.pp_print_list pp_explanation) l + let value_description id ppf decl = + !Oprint.out_sig_item ppf (tree_of_value_description id decl) - let reset () = explanations := M.empty - let list_explanations () = - let c = !explanations in + let class_type ppf cty = reset (); - c |> M.bindings |> List.map snd |> List.sort Stdlib.compare - - - let print_toplevel_hint ppf l = - let conj ppf () = Format.fprintf ppf " and@ " in - let pp_namespace_plural ppf n = Format.fprintf ppf "%as" Namespace.pp n in - let root_names = List.map (fun r -> r.kind, r.root_name) l in - let unique_root_names = List.sort_uniq Stdlib.compare root_names in - let submsgs = Array.make Namespace.size [] in - let () = List.iter (fun (n,_ as x) -> - submsgs.(Namespace.id n) <- x :: submsgs.(Namespace.id n) - ) unique_root_names in - let pp_submsg ppf names = - match names with - | [] -> () - | [namespace, a] -> - Format.fprintf ppf - "@ \ - @[<2>@{Hint@}: The %a %s has been defined multiple times@ \ - in@ this@ toplevel@ session.@ \ - Some toplevel values still refer to@ old@ versions@ of@ this@ %a.\ - @ Did you try to redefine them?@]" - Namespace.pp namespace a Namespace.pp namespace - | (namespace, _) :: _ :: _ -> - Format.fprintf ppf - "@ \ - @[<2>@{Hint@}: The %a %a have been defined multiple times@ \ - in@ this@ toplevel@ session.@ \ - Some toplevel values still refer to@ old@ versions@ of@ those@ %a.\ - @ Did you try to redefine them?@]" - pp_namespace_plural namespace - Format.(pp_print_list ~pp_sep:conj pp_print_string) (List.map snd names) - pp_namespace_plural namespace in - Array.iter (pp_submsg ppf) submsgs - - let print_explanations ppf = - let ltop, l = - (* isolate toplevel locations, since they are too imprecise *) - let from_toplevel a = - a.location.Location.loc_start.Lexing.pos_fname = "//toplevel//" in - List.partition from_toplevel (list_explanations ()) - in - begin match l with - | [] -> () - | l -> Format.fprintf ppf "@,%a" print_located_explanations l - end; - (* if there are name collisions in a toplevel session, - display at least one generic hint by namespace *) - print_toplevel_hint ppf ltop - - let exists () = M.cardinal !explanations >0 -end - -module Naming_context = struct - -let enabled = ref true -let enable b = enabled := b - -(* Names bound in recursive definitions should be considered as bound - in the environment when printing identifiers but not when trying - to find shortest path. - For instance, if we define - [{ - module Avoid__me = struct - type t = A - end - type t = X - type u = [` A of t * t ] - module M = struct - type t = A of [ u | `B ] - type r = Avoid__me.t - end - }] - It is is important that in the definition of [t] that the outer type [t] is - printed as [t/2] reserving the name [t] to the type being defined in the - current recursive definition. - Contrarily, in the definition of [r], one should not shorten the - path [Avoid__me.t] to [r] until the end of the definition of [r]. - The [bound_in_recursion] bridges the gap between those two slightly different - notions of printing environment. -*) -let bound_in_recursion = ref M.empty - -(* When dealing with functor arguments, identity becomes fuzzy because the same - syntactic argument may be represented by different identifiers during the - error processing, we are thus disabling disambiguation on the argument name -*) -let fuzzy = ref S.empty -let with_arg id f = - protect_refs [ R(fuzzy, S.add (Ident.name id) !fuzzy) ] f -let fuzzy_id namespace id = namespace = Module && S.mem (Ident.name id) !fuzzy - -let with_hidden ids f = - let update m id = M.add (Ident.name id.ident) id.ident m in - let updated = List.fold_left update !bound_in_recursion ids in - protect_refs [ R(bound_in_recursion, updated )] f - -let human_id id index = - (* The identifier with index [k] is the (k+1)-th most recent identifier in - the printing environment. We print them as [name/(k+1)] except for [k=0] - which is printed as [name] rather than [name/1]. - *) - if index = 0 then - Ident.name id - else - let ordinal = index + 1 in - String.concat "/" [Ident.name id; string_of_int ordinal] + prepare_class_type cty; + !Oprint.out_class_type ppf (tree_of_class_type Type cty) -let indexed_name namespace id = - let find namespace id env = match namespace with - | Type -> Env.find_type_index id env - | Module -> Env.find_module_index id env - | Module_type -> Env.find_modtype_index id env - | Class -> Env.find_class_index id env - | Class_type-> Env.find_cltype_index id env - | Value | Extension_constructor -> None - in - let index = - match M.find_opt (Ident.name id) !bound_in_recursion with - | Some rec_bound_id -> - (* the identifier name appears in the current group of recursive - definition *) - if Ident.same rec_bound_id id then - Some 0 - else - (* the current recursive definition shadows one more time the - previously existing identifier with the same name *) - Option.map succ (in_printing_env (find namespace id)) - | None -> - in_printing_env (find namespace id) - in - let index = - (* If [index] is [None] at this point, it might indicate that - the identifier id is not defined in the environment, while there - are other identifiers in scope that share the same name. - Currently, this kind of partially incoherent environment happens - within functor error messages where the left and right hand side - have a different views of the environment at the source level. - Printing the source-level by using a default index of `0` - seems like a reasonable compromise in this situation however.*) - Option.value index ~default:0 - in - human_id id index + let class_declaration id ppf cl = + !Oprint.out_sig_item ppf (tree_of_class_declaration id cl Trec_first) -let ident_name namespace id = - match namespace, !enabled with - | None, _ | _, false -> Out_name.create (Ident.name id) - | Some namespace, true -> - if fuzzy_id namespace id then Out_name.create (Ident.name id) - else - let name = indexed_name namespace id in - Conflicts.collect_explanation namespace id ~name; - Out_name.create name -end -let ident_name = Naming_context.ident_name + let cltype_declaration id ppf cl = + !Oprint.out_sig_item ppf (tree_of_cltype_declaration id cl Trec_first) -let ident ppf id = pp_print_string ppf - (Out_name.print (Naming_context.ident_name None id)) + let modtype ppf mty = !Oprint.out_module_type ppf (tree_of_modtype mty) + let modtype_declaration id ppf decl = + !Oprint.out_sig_item ppf (tree_of_modtype_declaration id decl) -let namespaced_ident namespace id = - Out_name.print (Naming_context.ident_name (Some namespace) id) + let constructor ppf c = + reset_except_conflicts (); + add_constructor_to_preparation c; + prepared_constructor ppf c + let constructor_arguments ppf a = + let tys = tree_of_constructor_arguments a in + !Oprint.out_type ppf (Otyp_tuple (List.map (fun t -> None, t) tys)) -(* Print a path *) + let label ppf l = + prepare_for_printing [l.Types.ld_type]; + !Oprint.out_label ppf (tree_of_label l) -let ident_stdlib = Ident.create_persistent "Stdlib" + let extension_constructor id ppf ext = + !Oprint.out_sig_item ppf (tree_of_extension_constructor id ext Text_first) -let non_shadowed_stdlib namespace = function - | Pdot(Pident id, s) as path -> - Ident.same id ident_stdlib && - (match Namespace.lookup namespace s with - | path' -> Path.same path path' - | exception Not_found -> true) - | _ -> false + (* Print an extension declaration *) -let find_double_underscore s = - let len = String.length s in - let rec loop i = - if i + 1 >= len then - None - else if s.[i] = '_' && s.[i + 1] = '_' then - Some i - else - loop (i + 1) - in - loop 0 -let rec module_path_is_an_alias_of env path ~alias_of = - match Env.find_module path env with - | { md_type = Mty_alias path'; _ } -> - Path.same path' alias_of || - module_path_is_an_alias_of env path' ~alias_of - | _ -> false - | exception Not_found -> false -(* Simple heuristic to print Foo__bar.* as Foo.Bar.* when Foo.Bar is an alias - for Foo__bar. This pattern is used by the stdlib. *) -let rec rewrite_double_underscore_paths env p = - match p with - | Pdot (p, s) -> - Pdot (rewrite_double_underscore_paths env p, s) - | Papply (a, b) -> - Papply (rewrite_double_underscore_paths env a, - rewrite_double_underscore_paths env b) - | Pextra_ty (p, extra) -> - Pextra_ty (rewrite_double_underscore_paths env p, extra) - | Pident id -> + let extension_only_constructor id ppf (ext:Types.extension_constructor) = + reset_except_conflicts (); + prepare_type_constructor_arguments ext.ext_args; + Option.iter add_type_to_preparation ext.ext_ret_type; let name = Ident.name id in - match find_double_underscore name with - | None -> p - | Some i -> - let better_lid = - Ldot - (Lident (String.sub name 0 i), - String.capitalize_ascii - (String.sub name (i + 2) (String.length name - i - 2))) - in - match Env.find_module_by_name better_lid env with - | exception Not_found -> p - | p', _ -> - if module_path_is_an_alias_of env p' ~alias_of:p then - p' - else - p - -let rewrite_double_underscore_paths env p = - if env == Env.empty then - p - else - rewrite_double_underscore_paths env p - -let rec tree_of_path ?(disambiguation=true) namespace p = - let tree_of_path namespace p = tree_of_path ~disambiguation namespace p in - let namespace = if disambiguation then namespace else None in - match p with - | Pident id -> - Oide_ident (ident_name namespace id) - | Pdot(_, s) as path when non_shadowed_stdlib namespace path -> - Oide_ident (Out_name.create s) - | Pdot(p, s) -> - Oide_dot (tree_of_path (Some Module) p, s) - | Papply(p1, p2) -> - let t1 = tree_of_path (Some Module) p1 in - let t2 = tree_of_path (Some Module) p2 in - Oide_apply (t1, t2) - | Pextra_ty (p, extra) -> begin - (* inline record types are syntactically prevented from escaping their - binding scope, and are never shown to users. *) - match extra with - Pcstr_ty s -> - Oide_dot (tree_of_path (Some Type) p, s) - | Pext_ty -> - tree_of_path None p - end - -let tree_of_path ?disambiguation namespace p = - tree_of_path ?disambiguation namespace - (rewrite_double_underscore_paths !printing_env p) - -let path ppf p = - !Oprint.out_ident ppf (tree_of_path None p) - -let string_of_path p = - Format.asprintf "%a" path p - -let strings_of_paths namespace p = - let trees = List.map (tree_of_path namespace) p in - List.map (Format.asprintf "%a" !Oprint.out_ident) trees - -let () = Env.print_path := path - -(* Print a recursive annotation *) - -let tree_of_rec = function - | Trec_not -> Orec_not - | Trec_first -> Orec_first - | Trec_next -> Orec_next - -(* Print a raw type expression, with sharing *) - -let raw_list pr ppf = function - [] -> fprintf ppf "[]" - | a :: l -> - fprintf ppf "@[<1>[%a%t]@]" pr a - (fun ppf -> List.iter (fun x -> fprintf ppf ";@,%a" pr x) l) - -let kind_vars = ref [] -let kind_count = ref 0 - -let string_of_field_kind v = - match field_kind_repr v with - | Fpublic -> "Fpublic" - | Fabsent -> "Fabsent" - | Fprivate -> "Fprivate" - -let rec safe_repr v t = - match Transient_expr.coerce t with - {desc = Tlink t} when not (List.memq t v) -> - safe_repr (t::v) t - | t' -> t' - -let rec list_of_memo = function - Mnil -> [] - | Mcons (_priv, p, _t1, _t2, rem) -> p :: list_of_memo rem - | Mlink rem -> list_of_memo !rem - -let print_name ppf = function - None -> fprintf ppf "None" - | Some name -> fprintf ppf "\"%s\"" name - -let string_of_label = function - Nolabel -> "" - | Labelled s -> s - | Optional s -> "?"^s - -let visited = ref [] -let rec raw_type ppf ty = - let ty = safe_repr [] ty in - if List.memq ty !visited then fprintf ppf "{id=%d}" ty.id else begin - visited := ty :: !visited; - fprintf ppf "@[<1>{id=%d;level=%d;scope=%d;desc=@,%a}@]" ty.id ty.level - ty.scope raw_type_desc ty.desc - end -and raw_type_list tl = raw_list raw_type tl -and raw_type_desc ppf = function - Tvar name -> fprintf ppf "Tvar %a" print_name name - | Tarrow(l,t1,t2,c) -> - fprintf ppf "@[Tarrow(\"%s\",@,%a,@,%a,@,%s)@]" - (string_of_label l) raw_type t1 raw_type t2 - (if is_commu_ok c then "Cok" else "Cunknown") - | Ttuple tl -> - fprintf ppf "@[<1>Ttuple@,%a@]" raw_type_list tl - | Tconstr (p, tl, abbrev) -> - fprintf ppf "@[Tconstr(@,%a,@,%a,@,%a)@]" path p - raw_type_list tl - (raw_list path) (list_of_memo !abbrev) - | Tobject (t, nm) -> - fprintf ppf "@[Tobject(@,%a,@,@[<1>ref%t@])@]" raw_type t - (fun ppf -> - match !nm with None -> fprintf ppf " None" - | Some(p,tl) -> - fprintf ppf "(Some(@,%a,@,%a))" path p raw_type_list tl) - | Tfield (f, k, t1, t2) -> - fprintf ppf "@[Tfield(@,%s,@,%s,@,%a,@;<0 -1>%a)@]" f - (string_of_field_kind k) - raw_type t1 raw_type t2 - | Tnil -> fprintf ppf "Tnil" - | Tlink t -> fprintf ppf "@[<1>Tlink@,%a@]" raw_type t - | Tsubst (t, None) -> fprintf ppf "@[<1>Tsubst@,(%a,None)@]" raw_type t - | Tsubst (t, Some t') -> - fprintf ppf "@[<1>Tsubst@,(%a,@ Some%a)@]" raw_type t raw_type t' - | Tunivar name -> fprintf ppf "Tunivar %a" print_name name - | Tpoly (t, tl) -> - fprintf ppf "@[Tpoly(@,%a,@,%a)@]" - raw_type t - raw_type_list tl - | Tvariant row -> - let Row {fields; more; name; fixed; closed} = row_repr row in - fprintf ppf - "@[{@[%s@,%a;@]@ @[%s@,%a;@]@ %s%B;@ %s%a;@ @[<1>%s%t@]}@]" - "row_fields=" - (raw_list (fun ppf (l, f) -> - fprintf ppf "@[%s,@ %a@]" l raw_field f)) - fields - "row_more=" raw_type more - "row_closed=" closed - "row_fixed=" raw_row_fixed fixed - "row_name=" - (fun ppf -> - match name with None -> fprintf ppf "None" - | Some(p,tl) -> - fprintf ppf "Some(@,%a,@,%a)" path p raw_type_list tl) - | Tpackage (p, fl) -> - fprintf ppf "@[Tpackage(@,%a@,%a)@]" path p - raw_type_list (List.map snd fl) -and raw_row_fixed ppf = function -| None -> fprintf ppf "None" -| Some Types.Fixed_private -> fprintf ppf "Some Fixed_private" -| Some Types.Rigid -> fprintf ppf "Some Rigid" -| Some Types.Univar t -> fprintf ppf "Some(Univar(%a))" raw_type t -| Some Types.Reified p -> fprintf ppf "Some(Reified(%a))" path p - -and raw_field ppf rf = - match_row_field - ~absent:(fun _ -> fprintf ppf "RFabsent") - ~present:(function - | None -> - fprintf ppf "RFpresent None" - | Some t -> - fprintf ppf "@[<1>RFpresent(Some@,%a)@]" raw_type t) - ~either:(fun c tl m e -> - fprintf ppf "@[RFeither(%B,@,%a,@,%B,@,@[<1>ref%t@])@]" c - raw_type_list tl m - (fun ppf -> - match e with None -> fprintf ppf " RFnone" - | Some f -> fprintf ppf "@,@[<1>(%a)@]" raw_field f)) - rf - -let raw_type_expr ppf t = - visited := []; kind_vars := []; kind_count := 0; - raw_type ppf t; - visited := []; kind_vars := [] - -let () = Btype.print_raw := raw_type_expr - -(* Normalize paths *) - -let set_printing_env env = - printing_env := - if !Clflags.real_paths then Env.empty - else env - -let wrap_printing_env env f = - set_printing_env (Env.update_short_paths env); - try_finally f ~always:(fun () -> set_printing_env Env.empty) - -let wrap_printing_env ?error:_ env f = - Env.without_cmis (wrap_printing_env env) f - -type type_result = Short_paths.type_result = - | Nth of int - | Path of int list option * Path.t - -type type_resolution = Short_paths.type_resolution = - | Nth of int - | Subst of int list - | Id - -let apply_subst ns args = - List.map (List.nth args) ns - -let apply_subst_opt nso args = - match nso with - | None -> args - | Some ns -> apply_subst ns args - -let apply_nth n args = - List.nth args n - -let best_type_path p = - if !Clflags.real_paths || !printing_env == Env.empty - then Path(None, p) - else Short_paths.find_type (Env.short_paths !printing_env) p - -let best_type_path_resolution p = - if !Clflags.real_paths || !printing_env == Env.empty - then Id - else Short_paths.find_type_resolution (Env.short_paths !printing_env) p - -let best_type_path_simple p = - if !Clflags.real_paths || !printing_env == Env.empty - then p - else Short_paths.find_type_simple (Env.short_paths !printing_env) p - -let best_module_type_path p = - if !Clflags.real_paths || !printing_env == Env.empty - then p - else Short_paths.find_module_type (Env.short_paths !printing_env) p - -let best_module_path p = - if !Clflags.real_paths || !printing_env == Env.empty - then p - else Short_paths.find_module (Env.short_paths !printing_env) p - -let best_class_type_path p = - if !Clflags.real_paths || !printing_env == Env.empty - then None, p - else Short_paths.find_class_type (Env.short_paths !printing_env) p - -let best_class_type_path_simple p = - if !Clflags.real_paths || !printing_env == Env.empty - then p - else Short_paths.find_class_type_simple (Env.short_paths !printing_env) p - -(* When building a tree for a best type path, we should not disambiguate - identifiers whenever the short-path algorithm detected a better path than - the original one.*) -let tree_of_best_type_path p p' = - if Path.same p p' then tree_of_path (Some Type) p' - else tree_of_path ~disambiguation:false None p' - -(* Print a type expression *) - -let proxy ty = Transient_expr.repr (proxy ty) - -(* When printing a type scheme, we print weak names. When printing a plain - type, we do not. This type controls that behavior *) -type type_or_scheme = Type | Type_scheme - -let is_non_gen mode ty = - match mode with - | Type_scheme -> is_Tvar ty && get_level ty <> generic_level - | Type -> false - -let nameable_row row = - row_name row <> None && - List.for_all - (fun (_, f) -> - match row_field_repr f with - | Reither(c, l, _) -> - row_closed row && if c then l = [] else List.length l = 1 - | _ -> true) - (row_fields row) - -(* This specialized version of [Btype.iter_type_expr] normalizes and - short-circuits the traversal of the [type_expr], so that it covers only the - subterms that would be printed by the type printer. *) -let printer_iter_type_expr f ty = - match get_desc ty with - | Tconstr(p, tyl, _) -> begin - match best_type_path_resolution p with - | Nth n -> - f (apply_nth n tyl) - | Subst ns -> - List.iter f (apply_subst ns tyl) - | Id -> - List.iter f tyl - end - | Tvariant row -> begin - match row_name row with - | Some(_p, tyl) when nameable_row row -> - List.iter f tyl - | _ -> - iter_row f row - end - | Tobject (fi, nm) -> begin - match !nm with - | None -> - let fields, _ = flatten_fields fi in - List.iter - (fun (_, kind, ty) -> - if field_kind_repr kind = Fpublic then - f ty) - fields - | Some (_, l) -> - List.iter f (List.tl l) - end - | Tfield(_, kind, ty1, ty2) -> - if field_kind_repr kind = Fpublic then - f ty1; - f ty2 - | _ -> - Btype.iter_type_expr f ty - -module Names : sig - val reset_names : unit -> unit - - val add_named_vars : type_expr -> unit - val add_subst : (type_expr * type_expr) list -> unit - - val new_name : unit -> string - val new_var_name : non_gen:bool -> type_expr -> unit -> string - - val name_of_type : (unit -> string) -> transient_expr -> string - val check_name_of_type : non_gen:bool -> transient_expr -> unit - - val remove_names : transient_expr list -> unit - - val with_local_names : (unit -> 'a) -> 'a - - (* Refresh the weak variable map in the toplevel; for [print_items], which is - itself for the toplevel *) - val refresh_weak : unit -> unit -end = struct - (* We map from types to names, but not directly; we also store a substitution, - which maps from types to types. The lookup process is - "type -> apply substitution -> find name". The substitution is presumed to - be acyclic. *) - let names = ref ([] : (transient_expr * string) list) - let name_subst = ref ([] : (transient_expr * transient_expr) list) - let name_counter = ref 0 - let named_vars = ref ([] : string list) - let visited_for_named_vars = ref ([] : transient_expr list) - - let weak_counter = ref 1 - let weak_var_map = ref TypeMap.empty - let named_weak_vars = ref String.Set.empty - - let reset_names () = - names := []; - name_subst := []; - name_counter := 0; - named_vars := []; - visited_for_named_vars := [] - - let add_named_var tty = - match tty.desc with - Tvar (Some name) | Tunivar (Some name) -> - if List.mem name !named_vars then () else - named_vars := name :: !named_vars - | _ -> () - - let rec add_named_vars ty = - let tty = Transient_expr.repr ty in - let px = proxy ty in - if not (List.memq px !visited_for_named_vars) then begin - visited_for_named_vars := px :: !visited_for_named_vars; - match tty.desc with - | Tvar _ | Tunivar _ -> - add_named_var tty - | _ -> - printer_iter_type_expr add_named_vars ty - end - - let rec substitute ty = - match List.assq ty !name_subst with - | ty' -> substitute ty' - | exception Not_found -> ty - - let add_subst subst = - name_subst := - List.map (fun (t1,t2) -> Transient_expr.repr t1, Transient_expr.repr t2) - subst - @ !name_subst - - let name_is_already_used name = - List.mem name !named_vars - || List.exists (fun (_, name') -> name = name') !names - || String.Set.mem name !named_weak_vars - - let rec new_name () = - let name = - if !name_counter < 26 - then String.make 1 (Char.chr(97 + !name_counter)) - else String.make 1 (Char.chr(97 + !name_counter mod 26)) ^ - Int.to_string(!name_counter / 26) in - incr name_counter; - if name_is_already_used name then new_name () else name - - let rec new_weak_name ty () = - let name = "weak" ^ Int.to_string !weak_counter in - incr weak_counter; - if name_is_already_used name then new_weak_name ty () - else begin - named_weak_vars := String.Set.add name !named_weak_vars; - weak_var_map := TypeMap.add ty name !weak_var_map; - name - end - - let new_var_name ~non_gen ty () = - if non_gen then new_weak_name ty () - else new_name () - - let name_of_type name_generator t = - (* We've already been through repr at this stage, so t is our representative - of the union-find class. *) - let t = substitute t in - try List.assq t !names with Not_found -> - try TransientTypeMap.find t !weak_var_map with Not_found -> - let name = - match t.desc with - Tvar (Some name) | Tunivar (Some name) -> - (* Some part of the type we've already printed has assigned another - * unification variable to that name. We want to keep the name, so - * try adding a number until we find a name that's not taken. *) - let available name = - List.for_all - (fun (_, name') -> name <> name') - !names - in - if available name then name - else - let suffixed i = name ^ Int.to_string i in - let i = Misc.find_first_mono (fun i -> available (suffixed i)) in - suffixed i - | _ -> - (* No name available, create a new one *) - name_generator () - in - (* Exception for type declarations *) - if name <> "_" then names := (t, name) :: !names; - name - - let check_name_of_type ~non_gen px = - let name_gen = new_var_name ~non_gen (Transient_expr.type_expr px) in - ignore(name_of_type name_gen px) - - let remove_names tyl = - let tyl = List.map substitute tyl in - names := List.filter (fun (ty,_) -> not (List.memq ty tyl)) !names - - let with_local_names f = - let old_names = !names in - let old_subst = !name_subst in - names := []; - name_subst := []; - try_finally - ~always:(fun () -> - names := old_names; - name_subst := old_subst) - f - - let refresh_weak () = - let refresh t name (m,s) = - if is_non_gen Type_scheme t then - begin - TypeMap.add t name m, - String.Set.add name s - end - else m, s in - let m, s = - TypeMap.fold refresh !weak_var_map (TypeMap.empty ,String.Set.empty) in - named_weak_vars := s; - weak_var_map := m -end - -let reserve_names ty = - normalize_type ty; - Names.add_named_vars ty - -let visited_objects = ref ([] : transient_expr list) -let aliased = ref ([] : transient_expr list) -let delayed = ref ([] : transient_expr list) -let printed_aliases = ref ([] : transient_expr list) - -(* [printed_aliases] is a subset of [aliased] that records only those aliased - types that have actually been printed; this allows us to avoid naming loops - that the user will never see. *) - -let add_delayed t = - if not (List.memq t !delayed) then delayed := t :: !delayed - -let is_aliased_proxy px = List.memq px !aliased - -let add_alias_proxy px = - if not (is_aliased_proxy px) then - aliased := px :: !aliased - -let add_alias ty = add_alias_proxy (proxy ty) - -let add_printed_alias_proxy ~non_gen px = - Names.check_name_of_type ~non_gen px; - printed_aliases := px :: !printed_aliases - -let add_printed_alias ty = add_printed_alias_proxy (proxy ty) - -let aliasable ty = - match get_desc ty with - Tvar _ | Tunivar _ | Tpoly _ -> false - | Tconstr (p, _, _) -> begin - match best_type_path_resolution p with - | Nth _ -> false - | Subst _ | Id -> true - end - | _ -> true - -(* let namable_row row = - row.row_name <> None && - List.for_all - (fun (_, f) -> - match row_field_repr f with - | Reither(c, l, _, _) -> - row.row_closed && if c then l = [] else List.length l = 1 - | _ -> true) - row.row_fields *) -let should_visit_object ty = - match get_desc ty with - | Tvariant row -> not (static_row row) - | Tobject _ -> opened_object ty - | _ -> false - -(*let rec mark_loops_rec visited ty = - let ty = repr ty in - let px = proxy ty in - if List.memq px visited && aliasable ty then add_alias px else - let visited = px :: visited in - match ty.desc with - | Tvar _ -> add_named_var ty - | Tarrow(_, ty1, ty2, _) -> - mark_loops_rec visited ty1; mark_loops_rec visited ty2 - | Ttuple tyl -> List.iter (mark_loops_rec visited) tyl - | Tconstr(p, tyl, _) -> begin - match best_type_path_resolution p with - | Nth n -> - mark_loops_rec visited (apply_nth n tyl) - | Subst ns -> - List.iter (mark_loops_rec visited) (apply_subst ns tyl) - | Id -> - List.iter (mark_loops_rec visited) tyl - end - | Tpackage (_, fl) -> - List.iter (fun (_n, ty) -> mark_loops_rec visited ty) fl - | Tvariant row -> - if List.memq px !visited_objects then add_alias px else - begin - let row = row_repr row in - if not (static_row row) then - visited_objects := px :: !visited_objects; - match row.row_name with - | Some(_p, tyl) when namable_row row -> - List.iter (mark_loops_rec visited) tyl - | _ -> - iter_row (mark_loops_rec visited) row - end - | Tobject (fi, nm) -> - if List.memq px !visited_objects then add_alias px else - begin - if opened_object ty then - visited_objects := px :: !visited_objects; - begin match !nm with - | None -> - let fields, _ = flatten_fields fi in - List.iter - (fun (_, kind, ty) -> - if field_kind_repr kind = Fpresent then - mark_loops_rec visited ty) - fields - | Some (_, l) -> - List.iter (mark_loops_rec visited) (List.tl l) - end - end - | Tfield(_, kind, ty1, ty2) when field_kind_repr kind = Fpresent -> - mark_loops_rec visited ty1; mark_loops_rec visited ty2 - | Tfield(_, _, _, ty2) -> - mark_loops_rec visited ty2 - | Tnil -> () - | Tsubst _ -> () (* we do not print arguments *) - | Tlink _ -> fatal_error "Printtyp.mark_loops_rec (2)" - | Tpoly (ty, tyl) -> - List.iter (fun t -> add_alias t) tyl; - mark_loops_rec visited ty - | Tunivar _ -> add_named_var ty *) -let rec mark_loops_rec visited ty = - let px = proxy ty in - if List.memq px visited && aliasable ty then add_alias_proxy px else - let tty = Transient_expr.repr ty in - let visited = px :: visited in - match tty.desc with - | Tvariant _ | Tobject _ -> - if List.memq px !visited_objects then add_alias_proxy px else begin - if should_visit_object ty then - visited_objects := px :: !visited_objects; - printer_iter_type_expr (mark_loops_rec visited) ty - end - | Tpoly(ty, tyl) -> - List.iter add_alias tyl; - mark_loops_rec visited ty - | _ -> - printer_iter_type_expr (mark_loops_rec visited) ty -let mark_loops ty = - mark_loops_rec [] ty;; - -let prepare_type ty = - reserve_names ty; - mark_loops ty;; - -let reset_loop_marks () = - visited_objects := []; aliased := []; delayed := []; printed_aliases := [] - -let reset_except_context () = - Names.reset_names (); reset_loop_marks () - -let reset () = - Conflicts.reset (); - reset_except_context () - -let prepare_for_printing tyl = - reset_except_context (); - List.iter prepare_type tyl - -let add_type_to_preparation = prepare_type - -(* Disabled in classic mode when printing an unification error *) -let print_labels = ref true - -let alias_nongen_row mode px ty = - match get_desc ty with - | Tvariant _ | Tobject _ -> - if is_non_gen mode (Transient_expr.type_expr px) then - add_alias_proxy px - | _ -> () - -let rec tree_of_typexp mode ty = - let px = proxy ty in - if List.memq px !printed_aliases && not (List.memq px !delayed) then - let non_gen = is_non_gen mode (Transient_expr.type_expr px) in - let name = Names.name_of_type (Names.new_var_name ~non_gen ty) px in - Otyp_var (non_gen, name) else - - let pr_typ () = - let tty = Transient_expr.repr ty in - match tty.desc with - | Tvar _ -> - let non_gen = is_non_gen mode ty in - let name_gen = Names.new_var_name ~non_gen ty in - Otyp_var (non_gen, Names.name_of_type name_gen tty) - | Tarrow(l, ty1, ty2, _) -> - let lab = - if !print_labels || is_optional l then string_of_label l else "" - in - let t1 = - if is_optional l then - match get_desc ty1 with - | Tconstr(path, [ty], _) - when Path.same path Predef.path_option -> - tree_of_typexp mode ty - | _ -> Otyp_stuff "" - else tree_of_typexp mode ty1 in - Otyp_arrow (lab, t1, tree_of_typexp mode ty2) - | Ttuple tyl -> - Otyp_tuple (tree_of_typlist mode tyl) - | Tconstr(p, tyl, _abbrev) -> begin - match best_type_path p with - | Nth n -> tree_of_typexp mode (apply_nth n tyl) - | Path(nso, p) -> - let tyl' = apply_subst_opt nso tyl in - Otyp_constr (tree_of_path (Some Type) p, tree_of_typlist mode tyl') - end - | Tvariant row -> - let Row {fields; name; closed; _} = row_repr row in - let fields = - if closed then - List.filter (fun (_, f) -> row_field_repr f <> Rabsent) - fields - else fields in - let present = - List.filter - (fun (_, f) -> - match row_field_repr f with - | Rpresent _ -> true - | _ -> false) - fields in - let all_present = List.length present = List.length fields in - begin match name with - | Some(p, tyl) when nameable_row row -> - let out_variant = - match best_type_path p with - | Nth n -> tree_of_typexp mode (apply_nth n tyl) - | Path(s, p) -> - let id = tree_of_path (Some Type) p in - let args = tree_of_typlist mode (apply_subst_opt s tyl) in - Otyp_constr (id, args) - in - if closed && all_present then - out_variant - else - let tags = - if all_present then None else Some (List.map fst present) in - Otyp_variant (Ovar_typ out_variant, closed, tags) - | _ -> - let fields = List.map (tree_of_row_field mode) fields in - let tags = - if all_present then None else Some (List.map fst present) in - Otyp_variant (Ovar_fields fields, closed, tags) - end - | Tobject (fi, nm) -> - tree_of_typobject mode fi !nm - | Tnil | Tfield _ -> - tree_of_typobject mode ty None - | Tsubst _ -> - (* This case should only happen when debugging the compiler *) - Otyp_stuff "" - | Tlink _ -> - fatal_error "Printtyp.tree_of_typexp" - | Tpoly (ty, []) -> - tree_of_typexp mode ty - | Tpoly (ty, tyl) -> - (*let print_names () = - List.iter (fun (_, name) -> prerr_string (name ^ " ")) !names; - prerr_string "; " in *) - if tyl = [] then tree_of_typexp mode ty else begin - let tyl = List.map Transient_expr.repr tyl in - let old_delayed = !delayed in - (* Make the names delayed, so that the real type is - printed once when used as proxy *) - List.iter add_delayed tyl; - let tl = List.map (Names.name_of_type Names.new_name) tyl in - let tr = Otyp_poly (tl, tree_of_typexp mode ty) in - (* Forget names when we leave scope *) - Names.remove_names tyl; - delayed := old_delayed; tr - end - | Tunivar _ -> - Otyp_var (false, Names.name_of_type Names.new_name tty) - | Tpackage (p, fl) -> - let p = best_module_type_path p in - let fl = - List.map - (fun (li, ty) -> ( - String.concat "." (Longident.flatten li), - tree_of_typexp mode ty - )) fl in - Otyp_module (tree_of_path (Some Module_type) p, fl) - in - if List.memq px !delayed then delayed := List.filter ((!=) px) !delayed; - alias_nongen_row mode px ty; - if is_aliased_proxy px && aliasable ty then begin - let non_gen = is_non_gen mode (Transient_expr.type_expr px) in - add_printed_alias_proxy ~non_gen px; - (* add_printed_alias chose a name, thus the name generator - doesn't matter.*) - let alias = Names.name_of_type (Names.new_var_name ~non_gen ty) px in - Otyp_alias {non_gen; aliased = pr_typ (); alias } end - else pr_typ () - -and tree_of_row_field mode (l, f) = - match row_field_repr f with - | Rpresent None | Reither(true, [], _) -> (l, false, []) - | Rpresent(Some ty) -> (l, false, [tree_of_typexp mode ty]) - | Reither(c, tyl, _) -> - if c (* contradiction: constant constructor with an argument *) - then (l, true, tree_of_typlist mode tyl) - else (l, false, tree_of_typlist mode tyl) - | Rabsent -> (l, false, [] (* actually, an error *)) - -and tree_of_typlist mode tyl = - List.map (tree_of_typexp mode) tyl - -and tree_of_typobject mode fi nm = - begin match nm with - | None -> - let pr_fields fi = - let (fields, rest) = flatten_fields fi in - let present_fields = - List.fold_right - (fun (n, k, t) l -> - match field_kind_repr k with - | Fpublic -> (n, t) :: l - | _ -> l) - fields [] in - let sorted_fields = - List.sort - (fun (n, _) (n', _) -> String.compare n n') present_fields in - tree_of_typfields mode rest sorted_fields in - let (fields, open_row) = pr_fields fi in - Otyp_object {fields; open_row} - | Some (p, _ty :: tyl) -> - let args = tree_of_typlist mode tyl in - let p' = best_type_path_simple p in - Otyp_class (tree_of_best_type_path p p', args) - | _ -> - fatal_error "Printtyp.tree_of_typobject" - end - -and tree_of_typfields mode rest = function - | [] -> - let open_row = - match get_desc rest with - | Tvar _ | Tunivar _ | Tconstr _-> true - | Tnil -> false - | _ -> fatal_error "typfields (1)" - in - ([], open_row) - | (s, t) :: l -> - let field = (s, tree_of_typexp mode t) in - let (fields, rest) = tree_of_typfields mode rest l in - (field :: fields, rest) - -let typexp mode ppf ty = - !Oprint.out_type ppf (tree_of_typexp mode ty) - -let prepared_type_expr ppf ty = typexp Type ppf ty -let prepared_type_scheme ppf ty = typexp Type_scheme ppf ty - -let type_expr ppf ty = - (* [type_expr] is used directly by error message printers, - we mark eventual loops ourself to avoid any misuse and stack overflow *) - prepare_for_printing [ty]; - prepared_type_expr ppf ty - -(* "Half-prepared" type expression: [ty] should have had its names reserved, but - should not have had its loops marked. *) -let type_expr_with_reserved_names ppf ty = - reset_loop_marks (); - mark_loops ty; - prepared_type_expr ppf ty - -let shared_type_scheme ppf ty = - prepare_type ty; - typexp Type_scheme ppf ty - -let type_scheme ppf ty = - prepare_for_printing [ty]; - prepared_type_scheme ppf ty - -let type_path ppf p = - let p = best_class_type_path_simple p in - let t = tree_of_path (Some Type) p in - !Oprint.out_ident ppf t - -let tree_of_type_scheme ty = - prepare_for_printing [ty]; - tree_of_typexp Type_scheme ty - -(* Print one type declaration *) - -let tree_of_constraints params = - List.fold_right - (fun ty list -> - let ty' = unalias ty in - if proxy ty != proxy ty' then - let tr = tree_of_typexp Type_scheme ty in - (tr, tree_of_typexp Type_scheme ty') :: list - else list) - params [] - -let filter_params tyl = - let params = - List.fold_left - (fun tyl ty -> - if List.exists (eq_type ty) tyl - then newty2 ~level:generic_level (Ttuple [ty]) :: tyl - else ty :: tyl) - (* Two parameters might be identical due to a constraint but we need to - print them differently in order to make the output syntactically valid. - We use [Ttuple [ty]] because it is printed as [ty]. *) - (* Replacing fold_left by fold_right does not work! *) - [] tyl - in List.rev params - -let prepare_type_constructor_arguments = function - | Cstr_tuple l -> List.iter prepare_type l - | Cstr_record l -> List.iter (fun l -> prepare_type l.ld_type) l - -let tree_of_label l = - (Ident.name l.ld_id, l.ld_mutable = Mutable, tree_of_typexp Type l.ld_type) - -let tree_of_constructor_arguments = function - | Cstr_tuple l -> tree_of_typlist Type l - | Cstr_record l -> [ Otyp_record (List.map tree_of_label l) ] - -let tree_of_single_constructor cd = - let name = Ident.name cd.cd_id in - let ret = Option.map (tree_of_typexp Type) cd.cd_res in - let args = tree_of_constructor_arguments cd.cd_args in - { - ocstr_name = name; - ocstr_args = args; - ocstr_return_type = ret; - } - -(* When printing GADT constructor, we need to forget the naming decision we took - for the type parameters and constraints. Indeed, in - {[ - type 'a t = X: 'a -> 'b t - ]} - It is fine to print both the type parameter ['a] and the existentially - quantified ['a] in the definition of the constructor X as ['a] - *) -let tree_of_constructor_in_decl cd = - match cd.cd_res with - | None -> tree_of_single_constructor cd - | Some _ -> Names.with_local_names (fun () -> tree_of_single_constructor cd) - -let prepare_decl id decl = - let params = filter_params decl.type_params in - begin match decl.type_manifest with - | Some ty -> - let vars = free_variables ty in - List.iter - (fun ty -> - if get_desc ty = Tvar (Some "_") && List.exists (eq_type ty) vars - then set_type_desc ty (Tvar None)) - params - | None -> () - end; - List.iter add_alias params; - List.iter prepare_type params; - List.iter (add_printed_alias ~non_gen:false) params; - let ty_manifest = - match decl.type_manifest with - | None -> None - | Some ty -> - let ty = - (* Special hack to hide variant name *) - match get_desc ty with - Tvariant row -> - begin match row_name row with - Some (Pident id', _) when Ident.same id id' -> - newgenty (Tvariant (set_row_name row None)) - | _ -> ty - end - | _ -> ty - in - prepare_type ty; - Some ty - in - begin match decl.type_kind with - | Type_abstract -> () - | Type_variant (cstrs, _rep) -> - List.iter - (fun c -> - prepare_type_constructor_arguments c.cd_args; - Option.iter prepare_type c.cd_res) - cstrs - | Type_record(l, _rep) -> - List.iter (fun l -> prepare_type l.ld_type) l - | Type_open -> () - end; - ty_manifest, params - -let tree_of_type_decl id decl = - let ty_manifest, params = prepare_decl id decl in - let type_param = - function - | Otyp_var (_, id) -> id - | _ -> "?" - in - let type_defined decl = - let abstr = - match decl.type_kind with - Type_abstract -> - decl.type_manifest = None || decl.type_private = Private - | Type_record _ -> - decl.type_private = Private - | Type_variant (tll, _rep) -> - decl.type_private = Private || - List.exists (fun cd -> cd.cd_res <> None) tll - | Type_open -> - decl.type_manifest = None - in - let vari = - List.map2 - (fun ty v -> - let is_var = is_Tvar ty in - if abstr || not is_var then - let inj = - decl.type_kind = Type_abstract && Variance.mem Inj v && - match decl.type_manifest with - | None -> true - | Some ty -> (* only abstract or private row types *) - decl.type_private = Private && - Btype.is_constr_row ~allow_ident:true (Btype.row_of_type ty) - and (co, cn) = Variance.get_upper v in - (if not cn then Covariant else - if not co then Contravariant else NoVariance), - (if inj then Injective else NoInjectivity) - else (NoVariance, NoInjectivity)) - decl.type_params decl.type_variance + let args, ret = + extension_constructor_args_and_ret_type_subtree + ext.ext_args + ext.ext_ret_type in - (Ident.name id, - List.map2 (fun ty cocn -> type_param (tree_of_typexp Type ty), cocn) - params vari) - in - let tree_of_manifest ty1 = - match ty_manifest with - | None -> ty1 - | Some ty -> Otyp_manifest (tree_of_typexp Type ty, ty1) - in - let (name, args) = type_defined decl in - let constraints = tree_of_constraints params in - let ty, priv, unboxed = - match decl.type_kind with - | Type_abstract -> - begin match ty_manifest with - | None -> (Otyp_abstract, Public, false) - | Some ty -> - tree_of_typexp Type ty, decl.type_private, false - end - | Type_variant (cstrs, rep) -> - tree_of_manifest - (Otyp_sum (List.map tree_of_constructor_in_decl cstrs)), - decl.type_private, - (rep = Variant_unboxed) - | Type_record(lbls, rep) -> - tree_of_manifest (Otyp_record (List.map tree_of_label lbls)), - decl.type_private, - (match rep with Record_unboxed _ -> true | _ -> false) - | Type_open -> - tree_of_manifest Otyp_open, - decl.type_private, - false - in - { otype_name = name; - otype_params = args; - otype_type = ty; - otype_private = priv; - otype_immediate = Type_immediacy.of_attributes decl.type_attributes; - otype_unboxed = unboxed; - otype_cstrs = constraints } - -let add_type_decl_to_preparation id decl = - ignore @@ prepare_decl id decl - -let tree_of_prepared_type_decl id decl = - tree_of_type_decl id decl - -let tree_of_type_decl id decl = - reset_except_context(); - tree_of_type_decl id decl - -let add_constructor_to_preparation c = - prepare_type_constructor_arguments c.cd_args; - Option.iter prepare_type c.cd_res - -let prepared_constructor ppf c = - !Oprint.out_constr ppf (tree_of_single_constructor c) - -let constructor ppf c = - reset_except_context (); - add_constructor_to_preparation c; - prepared_constructor ppf c - -let label ppf l = - reset_except_context (); - prepare_type l.ld_type; - !Oprint.out_label ppf (tree_of_label l) - -let tree_of_type_declaration id decl rs = - Osig_type (tree_of_type_decl id decl, tree_of_rec rs) - -let tree_of_prepared_type_declaration id decl rs = - Osig_type (tree_of_prepared_type_decl id decl, tree_of_rec rs) - -let type_declaration id ppf decl = - !Oprint.out_sig_item ppf (tree_of_type_declaration id decl Trec_first) - -let add_type_declaration_to_preparation id decl = - add_type_decl_to_preparation id decl - -let prepared_type_declaration id ppf decl = - !Oprint.out_sig_item ppf - (tree_of_prepared_type_declaration id decl Trec_first) - -let constructor_arguments ppf a = - let tys = tree_of_constructor_arguments a in - !Oprint.out_type ppf (Otyp_tuple tys) - -(* Print an extension declaration *) - -let extension_constructor_args_and_ret_type_subtree ext_args ext_ret_type = - let ret = Option.map (tree_of_typexp Type) ext_ret_type in - let args = tree_of_constructor_arguments ext_args in - (args, ret) - -(* When printing extension constructor, it is important to ensure that -after printing the constructor, we are still in the scope of the constructor. -For GADT constructor, this can be done by printing the type parameters inside -their own isolated scope. This ensures that in -{[ - type 'b t += A: 'b -> 'b any t -]} -the type parameter `'b` is not bound when printing the type variable `'b` from -the constructor definition from the type parameter. - -Contrarily, for non-gadt constructor, we must keep the same scope for -the type parameters and the constructor because a type constraint may -have changed the name of the type parameter: -{[ -type -'a t = .. constraint 'a> = 'a -(* the universal 'a is here to steal the name 'a from the type parameter *) -type 'a t = X of 'a -]} *) - -let add_extension_constructor_to_preparation ext = - let ty_params = filter_params ext.ext_type_params in - List.iter add_alias ty_params; - List.iter prepare_type ty_params; - prepare_type_constructor_arguments ext.ext_args; - Option.iter prepare_type ext.ext_ret_type - -let prepared_tree_of_extension_constructor - id ext es - = - let type_path = best_type_path_simple ext.ext_type_path in - let ty_name = Path.name type_path in - let ty_params = filter_params ext.ext_type_params in - let type_param = - function - | Otyp_var (_, id) -> id - | _ -> "?" - in - let param_scope f = - match ext.ext_ret_type with - | None -> - (* normal constructor: same scope for parameters and the constructor *) - f () - | Some _ -> - (* gadt constructor: isolated scope for the type parameters *) - Names.with_local_names f - in - let ty_params = - param_scope - (fun () -> - List.iter (add_printed_alias ~non_gen:false) ty_params; - List.map (fun ty -> type_param (tree_of_typexp Type ty)) ty_params - ) - in - let name = Ident.name id in - let args, ret = - extension_constructor_args_and_ret_type_subtree - ext.ext_args - ext.ext_ret_type - in - let ext = - { oext_name = name; - oext_type_name = ty_name; - oext_type_params = ty_params; - oext_args = args; - oext_ret_type = ret; - oext_private = ext.ext_private } - in - let es = - match es with - Text_first -> Oext_first - | Text_next -> Oext_next - | Text_exception -> Oext_exception - in - Osig_typext (ext, es) - -let tree_of_extension_constructor id ext es = - reset_except_context (); - add_extension_constructor_to_preparation ext; - prepared_tree_of_extension_constructor id ext es - -let extension_constructor id ppf ext = - !Oprint.out_sig_item ppf (tree_of_extension_constructor id ext Text_first) - -let prepared_extension_constructor id ppf ext = - !Oprint.out_sig_item ppf - (prepared_tree_of_extension_constructor id ext Text_first) - -let extension_only_constructor id ppf ext = - reset_except_context (); - prepare_type_constructor_arguments ext.ext_args; - Option.iter prepare_type ext.ext_ret_type; - let name = Ident.name id in - let args, ret = - extension_constructor_args_and_ret_type_subtree - ext.ext_args - ext.ext_ret_type - in - Format.fprintf ppf "@[%a@]" - !Oprint.out_constr { - ocstr_name = name; + Fmt.fprintf ppf "@[%a@]" + !Oprint.out_constr { + Outcometree.ocstr_name = name; ocstr_args = args; ocstr_return_type = ret; } -(* Print a value declaration *) - -let tree_of_value_description id decl = - (* Format.eprintf "@[%a@]@." raw_type_expr decl.val_type; *) - let id = Ident.name id in - let ty = tree_of_type_scheme decl.val_type in - let vd = - { oval_name = id; - oval_type = ty; - oval_prims = []; - oval_attributes = [] } - in - let vd = - match decl.val_kind with - | Val_prim p -> Primitive.print p vd - | _ -> vd - in - Osig_value vd - -let value_description id ppf decl = - !Oprint.out_sig_item ppf (tree_of_value_description id decl) - -(* Print a class type *) - -let method_type priv ty = - match priv, get_desc ty with - | Mpublic, Tpoly(ty, tyl) -> (ty, tyl) - | _ , _ -> (ty, []) - -let prepare_method _lab (priv, _virt, ty) = - let ty, _ = method_type priv ty in - prepare_type ty - -let tree_of_method mode (lab, priv, virt, ty) = - let (ty, tyl) = method_type priv ty in - let tty = tree_of_typexp mode ty in - Names.remove_names (List.map Transient_expr.repr tyl); - let priv = priv <> Mpublic in - let virt = virt = Virtual in - Ocsg_method (lab, priv, virt, tty) - -let rec prepare_class_type params = function - | Cty_constr (_p, tyl, cty) -> - let row = Btype.self_type_row cty in - if List.memq (proxy row) !visited_objects - || not (List.for_all is_Tvar params) - || List.exists (deep_occur row) tyl - then prepare_class_type params cty - else List.iter prepare_type tyl - | Cty_signature sign -> - (* Self may have a name *) - let px = proxy sign.csig_self_row in - if List.memq px !visited_objects then add_alias_proxy px - else visited_objects := px :: !visited_objects; - Vars.iter (fun _ (_, _, ty) -> prepare_type ty) sign.csig_vars; - Meths.iter prepare_method sign.csig_meths - | Cty_arrow (_, ty, cty) -> - prepare_type ty; - prepare_class_type params cty - -let rec tree_of_class_type mode params = - function - | Cty_constr (p, tyl, cty) -> - let row = Btype.self_type_row cty in - if List.memq (proxy row) !visited_objects - || not (List.for_all is_Tvar params) - then - tree_of_class_type mode params cty - else begin - let nso, p = best_class_type_path p in - let tyl = apply_subst_opt nso tyl in - let namespace = Namespace.best_class_namespace p in - Octy_constr (tree_of_path namespace p, tree_of_typlist Type_scheme tyl) - end - | Cty_signature sign -> - let px = proxy sign.csig_self_row in - let self_ty = - if is_aliased_proxy px then - Some - (Otyp_var (false, Names.name_of_type Names.new_name px)) - else None - in - let csil = [] in - let csil = - List.fold_left - (fun csil (ty1, ty2) -> Ocsg_constraint (ty1, ty2) :: csil) - csil (tree_of_constraints params) - in - let all_vars = - Vars.fold (fun l (m, v, t) all -> (l, m, v, t) :: all) sign.csig_vars [] - in - (* Consequence of PR#3607: order of Map.fold has changed! *) - let all_vars = List.rev all_vars in - let csil = - List.fold_left - (fun csil (l, m, v, t) -> - Ocsg_value (l, m = Mutable, v = Virtual, tree_of_typexp mode t) - :: csil) - csil all_vars - in - let all_meths = - Meths.fold - (fun l (p, v, t) all -> (l, p, v, t) :: all) - sign.csig_meths [] - in - let all_meths = List.rev all_meths in - let csil = - List.fold_left - (fun csil meth -> tree_of_method mode meth :: csil) - csil all_meths - in - Octy_signature (self_ty, List.rev csil) - | Cty_arrow (l, ty, cty) -> - let lab = - if !print_labels || is_optional l then string_of_label l else "" - in - let tr = - if is_optional l then - match get_desc ty with - | Tconstr(path, [ty], _) when Path.same path Predef.path_option -> - tree_of_typexp mode ty - | _ -> Otyp_stuff "" - else tree_of_typexp mode ty in - Octy_arrow (lab, tr, tree_of_class_type mode params cty) - -let class_type ppf cty = - reset (); - prepare_class_type [] cty; - !Oprint.out_class_type ppf (tree_of_class_type Type [] cty) - -let tree_of_class_param param variance = - (match tree_of_typexp Type_scheme param with - Otyp_var (_, s) -> s - | _ -> "?"), - if is_Tvar param then Asttypes.(NoVariance, NoInjectivity) - else variance - -let class_variance = - let open Variance in let open Asttypes in - List.map (fun v -> - (if not (mem May_pos v) then Contravariant else - if not (mem May_neg v) then Covariant else NoVariance), - NoInjectivity) - -let tree_of_class_declaration id cl rs = - let params = filter_params cl.cty_params in - - reset_except_context (); - List.iter add_alias params; - prepare_class_type params cl.cty_type; - let px = proxy (Btype.self_type_row cl.cty_type) in - List.iter prepare_type params; - - List.iter (add_printed_alias ~non_gen:false) params; - if is_aliased_proxy px then add_printed_alias_proxy ~non_gen:false px; - - let vir_flag = cl.cty_new = None in - Osig_class - (vir_flag, Ident.name id, - List.map2 tree_of_class_param params (class_variance cl.cty_variance), - tree_of_class_type Type_scheme params cl.cty_type, - tree_of_rec rs) - -let class_declaration id ppf cl = - !Oprint.out_sig_item ppf (tree_of_class_declaration id cl Trec_first) - -let tree_of_cltype_declaration id cl rs = - let params = cl.clty_params in - - reset_except_context (); - List.iter add_alias params; - prepare_class_type params cl.clty_type; - let px = proxy (Btype.self_type_row cl.clty_type) in - List.iter prepare_type params; - - List.iter (add_printed_alias ~non_gen:false) params; - if is_aliased_proxy px then (add_printed_alias_proxy ~non_gen:false) px; - - let sign = Btype.signature_of_class_type cl.clty_type in - let has_virtual_vars = - Vars.fold (fun _ (_,vr,_) b -> vr = Virtual || b) - sign.csig_vars false - in - let has_virtual_meths = - Meths.fold (fun _ (_,vr,_) b -> vr = Virtual || b) - sign.csig_meths false - in - Osig_class_type - (has_virtual_vars || has_virtual_meths, Ident.name id, - List.map2 tree_of_class_param params (class_variance cl.clty_variance), - tree_of_class_type Type_scheme params cl.clty_type, - tree_of_rec rs) - -let cltype_declaration id ppf cl = - !Oprint.out_sig_item ppf (tree_of_cltype_declaration id cl Trec_first) - -(* Print a module type *) - -let wrap_env fenv ftree arg = - let env = !printing_env in - let env' = Env.update_short_paths (fenv env) in - set_printing_env env'; - let tree = ftree arg in - set_printing_env env; - tree - -let dummy = - { - type_params = []; - type_arity = 0; - type_kind = Type_abstract; - type_private = Public; - type_manifest = None; - type_variance = []; - type_separability = []; - type_is_newtype = false; - type_expansion_scope = Btype.lowest_level; - type_loc = Location.none; - type_attributes = []; - type_immediate = Unknown; - type_unboxed_default = false; - type_uid = Uid.internal_not_actually_unique; - } - -(** we hide items being defined from short-path to avoid shortening - [type t = Path.To.t] into [type t = t]. -*) - -let ident_sigitem = function - | Types.Sig_type(ident,_,_,_) -> {hide=true;ident} - | Types.Sig_class(ident,_,_,_) - | Types.Sig_class_type (ident,_,_,_) - | Types.Sig_module(ident,_, _,_,_) - | Types.Sig_value (ident,_,_) - | Types.Sig_modtype (ident,_,_) - | Types.Sig_typext (ident,_,_,_) -> {hide=false; ident } - -let hide ids env = - let hide_id id env = - (* Global idents cannot be renamed *) - if id.hide && not (Ident.global id.ident) then - Env.add_type ~check:false (Ident.rename_no_exn id.ident) dummy env - else env - in - List.fold_right hide_id ids env - -let with_hidden_items ids f = - let with_hidden_in_printing_env ids f = - wrap_env (hide ids) (Naming_context.with_hidden ids) f - in - if not !Clflags.real_paths then - with_hidden_in_printing_env ids f - else - Naming_context.with_hidden ids f - -let add_sigitem env x = - Env.add_signature (Signature_group.flatten x) env - -let rec tree_of_modtype ?(ellipsis=false) = function - | Mty_ident p -> - let p = best_module_type_path p in - Omty_ident (tree_of_path (Some Module_type) p) - | Mty_signature sg -> - Omty_signature (if ellipsis then [Osig_ellipsis] - else tree_of_signature sg) - | Mty_functor(param, ty_res) -> - let param, env = - tree_of_functor_parameter param - in - let res = wrap_env env (tree_of_modtype ~ellipsis) ty_res in - Omty_functor (param, res) - | Mty_alias p -> - let p = best_module_path p in - Omty_alias (tree_of_path (Some Module) p) - | Mty_for_hole -> Omty_hole - -and tree_of_functor_parameter = function - | Unit -> - None, fun k -> k - | Named (param, ty_arg) -> - let name, env = - match param with - | None -> None, fun env -> env - | Some id -> - Some (Ident.name id), - Env.add_module ~arg:true id Mp_present ty_arg - in - Some (name, tree_of_modtype ~ellipsis:false ty_arg), env - -and tree_of_signature sg = - wrap_env (fun env -> env)(fun sg -> - let tree_groups = tree_of_signature_rec !printing_env sg in - List.concat_map (fun (_env,l) -> List.map snd l) tree_groups - ) sg - -and tree_of_signature_rec env' sg = - let structured = List.of_seq (Signature_group.seq sg) in - let collect_trees_of_rec_group group = - let env = !printing_env in - let env', group_trees = - trees_of_recursive_sigitem_group env group - in - set_printing_env env'; - (env, group_trees) in - set_printing_env env'; - List.map collect_trees_of_rec_group structured - -and trees_of_recursive_sigitem_group env - (syntactic_group: Signature_group.rec_group) = - let display (x:Signature_group.sig_item) = x.src, tree_of_sigitem x.src in - let env = Env.add_signature syntactic_group.pre_ghosts env in - match syntactic_group.group with - | Not_rec x -> add_sigitem env x, [display x] - | Rec_group items -> - let ids = List.map (fun x -> ident_sigitem x.Signature_group.src) items in - List.fold_left add_sigitem env items, - with_hidden_items ids (fun () -> List.map display items) - -and tree_of_sigitem = function - | Sig_value(id, decl, _) -> - tree_of_value_description id decl - | Sig_type(id, decl, rs, _) -> - tree_of_type_declaration id decl rs - | Sig_typext(id, ext, es, _) -> - tree_of_extension_constructor id ext es - | Sig_module(id, _, md, rs, _) -> - let ellipsis = - List.exists (function - | Parsetree.{attr_name = {txt="..."}; attr_payload = PStr []} -> true - | _ -> false) - md.md_attributes in - tree_of_module id md.md_type rs ~ellipsis - | Sig_modtype(id, decl, _) -> - tree_of_modtype_declaration id decl - | Sig_class(id, decl, rs, _) -> - tree_of_class_declaration id decl rs - | Sig_class_type(id, decl, rs, _) -> - tree_of_cltype_declaration id decl rs - -and tree_of_modtype_declaration id decl = - let mty = - match decl.mtd_type with - | None -> Omty_abstract - | Some mty -> tree_of_modtype mty - in - Osig_modtype (Ident.name id, mty) - -and tree_of_module id ?ellipsis mty rs = - Osig_module (Ident.name id, tree_of_modtype ?ellipsis mty, tree_of_rec rs) - -let rec functor_parameters ~sep custom_printer = function - | [] -> ignore - | [id,param] -> - Format.dprintf "%t%t" - (custom_printer param) - (functor_param ~sep ~custom_printer id []) - | (id,param) :: q -> - Format.dprintf "%t%a%t" - (custom_printer param) - sep () - (functor_param ~sep ~custom_printer id q) -and functor_param ~sep ~custom_printer id q = - match id with - | None -> functor_parameters ~sep custom_printer q - | Some id -> - Naming_context.with_arg id - (fun () -> functor_parameters ~sep custom_printer q) - - - -let modtype ppf mty = !Oprint.out_module_type ppf (tree_of_modtype mty) -let modtype_declaration id ppf decl = - !Oprint.out_sig_item ppf (tree_of_modtype_declaration id decl) - -(* For the toplevel: merge with tree_of_signature? *) + (* Print a signature body (used by -i when compiling a .ml) *) + + let print_signature ppf tree = + Fmt.fprintf ppf "@[%a@]" !Oprint.out_signature tree + + let signature ppf sg = + Fmt.fprintf ppf "%a" print_signature (tree_of_signature sg) + + (* Merlin: Print a type path taking account of [-short-paths]. + Calls should be within [wrap_printing_env]. *) + (* let type_path ppf p = + let p = best_class_type_path_simple p in + let t = tree_of_path (Some Type) p in + !Oprint.out_ident ppf t *) + + (* Merlin *) + + let rec functor_parameters ~sep custom_printer = function + | [] -> ignore + | [id,param] -> + Format.dprintf "%t%t" + (custom_printer param) + (functor_param ~sep ~custom_printer id []) + | (id,param) :: q -> + Format.dprintf "%t%a%t" + (custom_printer param) + sep () + (functor_param ~sep ~custom_printer id q) + and functor_param ~sep ~custom_printer id q = + match id with + | None -> functor_parameters ~sep custom_printer q + | Some id -> + Ident_names.with_fuzzy id + (fun () -> functor_parameters ~sep custom_printer q) + let _ = ignore (functor_parameters, functor_param) (* todo *) + + + (* For the toplevel: merge with tree_of_signature? *) + + (* let print_items showval env x = + Variable_names.refresh_weak(); + Ident_conflicts.reset (); + let extend_val env (sigitem,outcome) = outcome, showval env sigitem in + let post_process (env,l) = List.map (extend_val env) l in + List.concat_map post_process @@ tree_of_signature_rec env x *) +end +open Doc -let print_items showval env x = - Names.refresh_weak(); - Conflicts.reset (); - let extend_val env (sigitem,outcome) = outcome, showval env sigitem in - let post_process (env,l) = List.map (extend_val env) l in - List.concat_map post_process @@ tree_of_signature_rec env x +let string_of_path p = Fmt.asprintf "%a" path p -(* Print a signature body (used by -i when compiling a .ml) *) - -let print_signature ppf tree = - fprintf ppf "@[%a@]" !Oprint.out_signature tree +let strings_of_paths namespace p = + let trees = List.map (namespaced_tree_of_path namespace) p in + List.map (Fmt.asprintf "%a" !Oprint.out_ident) trees + +let wrap_printing_env = wrap_printing_env +let ident = Fmt.compat ident +let longident = Fmt.compat longident +let path = Fmt.compat path +let type_path = Fmt.compat type_path +let type_expr = Fmt.compat type_expr +let type_scheme = Fmt.compat type_scheme +let shared_type_scheme = Fmt.compat shared_type_scheme + +let type_declaration = Fmt.compat1 type_declaration +let type_expansion = Fmt.compat1 type_expansion +let value_description = Fmt.compat1 value_description +let label = Fmt.compat label +let constructor = Fmt.compat constructor +let constructor_arguments = Fmt.compat constructor_arguments +let extension_constructor = Fmt.compat1 extension_constructor +let extension_only_constructor = Fmt.compat1 extension_only_constructor + +let modtype = Fmt.compat modtype +let modtype_declaration = Fmt.compat1 modtype_declaration +let signature = Fmt.compat signature + +let class_declaration = Fmt.compat1 class_declaration +let class_type = Fmt.compat class_type +let cltype_declaration = Fmt.compat1 cltype_declaration -let signature ppf sg = - fprintf ppf "%a" print_signature (tree_of_signature sg) (* Print a signature body (used by -i when compiling a .ml) *) let printed_signature sourcefile ppf sg = (* we are tracking any collision event for warning 63 *) - Conflicts.reset (); + Ident_conflicts.reset (); let t = tree_of_signature sg in - if Warnings.(is_active @@ Erroneous_printed_signature "") - && Conflicts.exists () - then begin - let conflicts = Format.asprintf "%t" Conflicts.print_explanations in - Location.prerr_warning (Location.in_file sourcefile) - (Warnings.Erroneous_printed_signature conflicts); - Warnings.check_fatal () - end; - fprintf ppf "%a" print_signature t - -(* Trace-specific printing *) - -(* A configuration type that controls which trace we print. This could be - exposed, but we instead expose three separate - [report_{unification,equality,moregen}_error] functions. This also lets us - give the unification case an extra optional argument without adding it to the - equality and moregen cases. *) -type 'variety trace_format = - | Unification : Errortrace.unification trace_format - | Equality : Errortrace.comparison trace_format - | Moregen : Errortrace.comparison trace_format - -let incompatibility_phrase (type variety) : variety trace_format -> string = - function - | Unification -> "is not compatible with type" - | Equality -> "is not equal to type" - | Moregen -> "is not compatible with type" - -(* Print a unification error *) - -let same_path t t' = - eq_type t t' || - match get_desc t, get_desc t' with - | Tconstr(p,tl,_), Tconstr(p',tl',_) -> begin - match best_type_path p, best_type_path p' with - | Nth n, Nth n' when n = n' -> true - | Path(nso, p), Path(nso', p') when Path.same p p' -> - let tl = apply_subst_opt nso tl in - let tl' = apply_subst_opt nso' tl' in - List.length tl = List.length tl' && - List.for_all2 eq_type tl tl' - | _ -> false - end - | _ -> - false - -type 'a diff = Same of 'a | Diff of 'a * 'a - -let trees_of_type_expansion mode Errortrace.{ty = t; expanded = t'} = - reset_loop_marks (); - mark_loops t; - if same_path t t' - then begin add_delayed (proxy t); Same (tree_of_typexp mode t) end - else begin - mark_loops t'; - let t' = if proxy t == proxy t' then unalias t' else t' in - (* beware order matter due to side effect, - e.g. when printing object types *) - let first = tree_of_typexp mode t in - let second = tree_of_typexp mode t' in - if first = second then Same first - else Diff(first,second) - end - -let type_expansion ppf = function - | Same t -> !Oprint.out_type ppf t - | Diff(t,t') -> - fprintf ppf "@[<2>%a@ =@ %a@]" !Oprint.out_type t !Oprint.out_type t' - -let trees_of_trace mode = - List.map (Errortrace.map_diff (trees_of_type_expansion mode)) - -let trees_of_type_path_expansion (tp,tp') = - if Path.same tp tp' then Same(tree_of_path (Some Type) tp) else - Diff(tree_of_path (Some Type) tp, tree_of_path (Some Type) tp') - -let type_path_expansion ppf = function - | Same p -> !Oprint.out_ident ppf p - | Diff(p,p') -> - fprintf ppf "@[<2>%a@ =@ %a@]" - !Oprint.out_ident p - !Oprint.out_ident p' - -let rec trace fst txt ppf = function - | {Errortrace.got; expected} :: rem -> - if not fst then fprintf ppf "@,"; - fprintf ppf "@[Type@;<1 2>%a@ %s@;<1 2>%a@]%a" - type_expansion got txt type_expansion expected - (trace false txt) rem - | _ -> () - -type printing_status = - | Discard - | Keep - | Optional_refinement - (** An [Optional_refinement] printing status is attributed to trace - elements that are focusing on a new subpart of a structural type. - Since the whole type should have been printed earlier in the trace, - we only print those elements if they are the last printed element - of a trace, and there is no explicit explanation for the - type error. - *) - -let diff_printing_status Errortrace.{ got = {ty = t1; expanded = t1'}; - expected = {ty = t2; expanded = t2'} } = - if is_constr_row ~allow_ident:true t1' - || is_constr_row ~allow_ident:true t2' - then Discard - else if same_path t1 t1' && same_path t2 t2' then Optional_refinement - else Keep - -let printing_status = function - | Errortrace.Diff d -> diff_printing_status d - | Errortrace.Escape {kind = Constraint} -> Keep - | _ -> Keep - -(** Flatten the trace and remove elements that are always discarded - during printing *) - -(* Takes [printing_status] to change behavior for [Subtype] *) -let prepare_any_trace printing_status tr = - let clean_trace x l = match printing_status x with - | Keep -> x :: l - | Optional_refinement when l = [] -> [x] - | Optional_refinement | Discard -> l - in - match tr with - | [] -> [] - | elt :: rem -> elt :: List.fold_right clean_trace rem [] - -let prepare_trace f tr = - prepare_any_trace printing_status (Errortrace.map f tr) - -(** Keep elements that are [Diff _ ] and take the decision - for the last element, require a prepared trace *) -let rec filter_trace keep_last = function - | [] -> [] - | [Errortrace.Diff d as elt] - when printing_status elt = Optional_refinement -> - if keep_last then [d] else [] - | Errortrace.Diff d :: rem -> d :: filter_trace keep_last rem - | _ :: rem -> filter_trace keep_last rem - -let type_path_list = - Format.pp_print_list ~pp_sep:(fun ppf () -> Format.pp_print_break ppf 2 0) - type_path_expansion - -(* Hide variant name and var, to force printing the expanded type *) -let hide_variant_name t = - match get_desc t with - | Tvariant row -> - let Row {fields; more; name; fixed; closed} = row_repr row in - if name = None then t else - newty2 ~level:(get_level t) - (Tvariant - (create_row ~fields ~fixed ~closed ~name:None - ~more:(newvar2 (get_level more)))) - | _ -> t - -let prepare_expansion Errortrace.{ty; expanded} = - let expanded = hide_variant_name expanded in - reserve_names ty; - if not (same_path ty expanded) then reserve_names expanded; - Errortrace.{ty; expanded} - -let may_prepare_expansion compact (Errortrace.{ty; expanded} as ty_exp) = - match get_desc expanded with - Tvariant _ | Tobject _ when compact -> - reserve_names ty; Errortrace.{ty; expanded = ty} - | _ -> prepare_expansion ty_exp - -let print_path p = - Format.dprintf "%a" !Oprint.out_ident (tree_of_path (Some Type) p) - -let print_tag ppf = fprintf ppf "`%s" - -let print_tags = - let comma ppf () = Format.fprintf ppf ",@ " in - Format.pp_print_list ~pp_sep:comma print_tag - -let is_unit env ty = - match get_desc (Ctype.expand_head env ty) with - | Tconstr (p, _, _) -> Path.same p Predef.path_unit - | _ -> false - -let unifiable env ty1 ty2 = - let snap = Btype.snapshot () in - let res = - try Ctype.unify env ty1 ty2; true - with Unify _ -> false - in - Btype.backtrack snap; - res - -let explanation_diff env t3 t4 : (Format.formatter -> unit) option = - match get_desc t3, get_desc t4 with - | Tarrow (_, ty1, ty2, _), _ - when is_unit env ty1 && unifiable env ty2 t4 -> - Some (fun ppf -> - fprintf ppf - "@,@[@{Hint@}: Did you forget to provide `()' as argument?@]") - | _, Tarrow (_, ty1, ty2, _) - when is_unit env ty1 && unifiable env t3 ty2 -> - Some (fun ppf -> - fprintf ppf - "@,@[@{Hint@}: Did you forget to wrap the expression using \ - `fun () ->'?@]") - | _ -> - None - -let explain_fixed_row_case ppf = function - | Errortrace.Cannot_be_closed -> - fprintf ppf "it cannot be closed" - | Errortrace.Cannot_add_tags tags -> - fprintf ppf "it may not allow the tag(s) %a" print_tags tags - -let explain_fixed_row pos expl = match expl with - | Fixed_private -> - dprintf "The %a variant type is private" Errortrace.print_pos pos - | Univar x -> - reserve_names x; - dprintf "The %a variant type is bound to the universal type variable %a" - Errortrace.print_pos pos type_expr_with_reserved_names x - | Reified p -> - dprintf "The %a variant type is bound to %t" - Errortrace.print_pos pos (print_path p) - | Rigid -> ignore - -let explain_variant (type variety) : variety Errortrace.variant -> _ = function - (* Common *) - | Errortrace.Incompatible_types_for s -> - Some(dprintf "@,Types for tag `%s are incompatible" s) - (* Unification *) - | Errortrace.No_intersection -> - Some(dprintf "@,These two variant types have no intersection") - | Errortrace.No_tags(pos,fields) -> Some( - dprintf - "@,@[The %a variant type does not allow tag(s)@ @[%a@]@]" - Errortrace.print_pos pos - print_tags (List.map fst fields) - ) - | Errortrace.Fixed_row (pos, - k, - (Univar _ | Reified _ | Fixed_private as e)) -> - Some ( - dprintf "@,@[%t,@ %a@]" (explain_fixed_row pos e) - explain_fixed_row_case k - ) - | Errortrace.Fixed_row (_,_, Rigid) -> - (* this case never happens *) - None - (* Equality & Moregen *) - | Errortrace.Presence_not_guaranteed_for (pos, s) -> Some( - dprintf - "@,@[The tag `%s is guaranteed to be present in the %a variant type,\ - @ but not in the %a@]" - s - Errortrace.print_pos (Errortrace.swap_position pos) - Errortrace.print_pos pos - ) - | Errortrace.Openness pos -> - Some(dprintf "@,The %a variant type is open and the %a is not" - Errortrace.print_pos pos - Errortrace.print_pos (Errortrace.swap_position pos)) - -let explain_escape pre = function - | Errortrace.Univ u -> - reserve_names u; - Some( - dprintf "%t@,The universal variable %a would escape its scope" - pre type_expr_with_reserved_names u) - | Errortrace.Constructor p -> Some( - dprintf - "%t@,@[The type constructor@;<1 2>%a@ would escape its scope@]" - pre path p - ) - | Errortrace.Module_type p -> Some( - dprintf - "%t@,@[The module type@;<1 2>%a@ would escape its scope@]" - pre path p - ) - | Errortrace.Equation Errortrace.{ty = _; expanded = t} -> - reserve_names t; - Some( - dprintf "%t @,@[This instance of %a is ambiguous:@ %s@]" - pre type_expr_with_reserved_names t - "it would escape the scope of its equation" - ) - | Errortrace.Self -> - Some (dprintf "%t@,Self type cannot escape its class" pre) - | Errortrace.Constraint -> - None - -let explain_object (type variety) : variety Errortrace.obj -> _ = function - | Errortrace.Missing_field (pos,f) -> Some( - dprintf "@,@[The %a object type has no method %s@]" - Errortrace.print_pos pos f - ) - | Errortrace.Abstract_row pos -> Some( - dprintf - "@,@[The %a object type has an abstract row, it cannot be closed@]" - Errortrace.print_pos pos - ) - | Errortrace.Self_cannot_be_closed -> - Some (dprintf "@,Self type cannot be unified with a closed object type") - -let explanation (type variety) intro prev env - : (Errortrace.expanded_type, variety) Errortrace.elt -> _ = function - | Errortrace.Diff {got; expected} -> - explanation_diff env got.expanded expected.expanded - | Errortrace.Escape {kind; context} -> - let pre = - match context, kind, prev with - | Some ctx, _, _ -> - reserve_names ctx; - dprintf "@[%t@;<1 2>%a@]" intro type_expr_with_reserved_names ctx - | None, Univ _, Some(Errortrace.Incompatible_fields {name; diff}) -> - reserve_names diff.got; - reserve_names diff.expected; - dprintf "@,@[The method %s has type@ %a,@ \ - but the expected method type was@ %a@]" - name - type_expr_with_reserved_names diff.got - type_expr_with_reserved_names diff.expected - | _ -> ignore - in - explain_escape pre kind - | Errortrace.Incompatible_fields { name; _ } -> - Some(dprintf "@,Types for method %s are incompatible" name) - | Errortrace.Variant v -> - explain_variant v - | Errortrace.Obj o -> - explain_object o - | Errortrace.Rec_occur(x,y) -> - reserve_names x; - reserve_names y; - begin match get_desc x with - | Tvar _ | Tunivar _ -> - Some(fun ppf -> - reset_loop_marks (); - mark_loops x; - mark_loops y; - dprintf "@,@[The type variable %a occurs inside@ %a@]" - prepared_type_expr x prepared_type_expr y - ppf) - | _ -> - (* We had a delayed unification of the type variable with - a non-variable after the occur check. *) - Some ignore - (* There is no need to search further for an explanation, but - we don't want to print a message of the form: - {[ The type int occurs inside int list -> 'a |} - *) - end - -let mismatch intro env trace = - Errortrace.explain trace (fun ~prev h -> explanation intro prev env h) - -let explain mis ppf = - match mis with - | None -> () - | Some explain -> explain ppf - -let warn_on_missing_def env ppf t = - match get_desc t with - | Tconstr (p,_,_) -> - begin - try - ignore(Env.find_type p env : Types.type_declaration) - with Not_found -> - fprintf ppf - "@,@[%a is abstract because no corresponding cmi file was found \ - in path.@]" path p - end - | _ -> () - -let prepare_expansion_head empty_tr = function - | Errortrace.Diff d -> - Some (Errortrace.map_diff (may_prepare_expansion empty_tr) d) - | _ -> None - -let head_error_printer mode txt_got txt_but = function - | None -> ignore - | Some d -> - let d = Errortrace.map_diff (trees_of_type_expansion mode) d in - dprintf "%t@;<1 2>%a@ %t@;<1 2>%a" - txt_got type_expansion d.Errortrace.got - txt_but type_expansion d.Errortrace.expected - -let warn_on_missing_defs env ppf = function - | None -> () - | Some Errortrace.{got = {ty=te1; expanded=_}; - expected = {ty=te2; expanded=_} } -> - warn_on_missing_def env ppf te1; - warn_on_missing_def env ppf te2 - -(* [subst] comes out of equality, and is [[]] otherwise *) -let error trace_format mode subst env tr txt1 ppf txt2 ty_expect_explanation = - reset (); - (* We want to substitute in the opposite order from [Eqtype] *) - Names.add_subst (List.map (fun (ty1,ty2) -> ty2,ty1) subst); - let tr = - prepare_trace - (fun ty_exp -> - Errortrace.{ty_exp with expanded = hide_variant_name ty_exp.expanded}) - tr - in - let mis = mismatch txt1 env tr in - match tr with - | [] -> assert false - | elt :: tr -> - try - print_labels := not !Clflags.classic; - let tr = filter_trace (mis = None) tr in - let head = prepare_expansion_head (tr=[]) elt in - let tr = List.map (Errortrace.map_diff prepare_expansion) tr in - let head_error = head_error_printer mode txt1 txt2 head in - let tr = trees_of_trace mode tr in - fprintf ppf - "@[\ - @[%t%t@]%a%t\ - @]" - head_error - ty_expect_explanation - (trace false (incompatibility_phrase trace_format)) tr - (explain mis); - if env <> Env.empty - then warn_on_missing_defs env ppf head; - Conflicts.print_explanations ppf; - print_labels := true - with exn -> - print_labels := true; - raise exn - -let report_error trace_format ppf mode env tr - ?(subst = []) - ?(type_expected_explanation = fun _ -> ()) - txt1 txt2 = - wrap_printing_env ~error:true env (fun () -> - error trace_format mode subst env tr txt1 ppf txt2 - type_expected_explanation) - -let report_unification_error - ppf env ({trace} : Errortrace.unification_error) = - report_error Unification ppf Type env - ?subst:None trace - -let report_equality_error - ppf mode env ({subst; trace} : Errortrace.equality_error) = - report_error Equality ppf mode env - ~subst ?type_expected_explanation:None trace - -let report_moregen_error - ppf mode env ({trace} : Errortrace.moregen_error) = - report_error Moregen ppf mode env - ?subst:None ?type_expected_explanation:None trace - -let report_comparison_error ppf mode env = function - | Errortrace.Equality_error error -> report_equality_error ppf mode env error - | Errortrace.Moregen_error error -> report_moregen_error ppf mode env error - -module Subtype = struct - (* There's a frustrating amount of code duplication between this module and - the outside code, particularly in [prepare_trace] and [filter_trace]. - Unfortunately, [Subtype] is *just* similar enough to have code duplication, - while being *just* different enough (it's only [Diff]) for the abstraction - to be nonobvious. Someday, perhaps... *) - - let printing_status = function - | Errortrace.Subtype.Diff d -> diff_printing_status d - - let prepare_unification_trace = prepare_trace - - let prepare_trace f tr = - prepare_any_trace printing_status (Errortrace.Subtype.map f tr) - - let trace filter_trace get_diff fst keep_last txt ppf tr = - print_labels := not !Clflags.classic; - try match tr with - | elt :: tr' -> - let diffed_elt = get_diff elt in - let tr = - trees_of_trace Type - @@ List.map (Errortrace.map_diff prepare_expansion) - @@ filter_trace keep_last tr' in - let tr = - match fst, diffed_elt with - | true, Some elt -> elt :: tr - | _, _ -> tr - in - trace fst txt ppf tr; - print_labels := true - | _ -> () - with exn -> - print_labels := true; - raise exn - - let rec filter_subtype_trace keep_last = function - | [] -> [] - | [Errortrace.Subtype.Diff d as elt] - when printing_status elt = Optional_refinement -> - if keep_last then [d] else [] - | Errortrace.Subtype.Diff d :: rem -> - d :: filter_subtype_trace keep_last rem - - let unification_get_diff = function - | Errortrace.Diff diff -> - Some (Errortrace.map_diff (trees_of_type_expansion Type) diff) - | _ -> None - - let subtype_get_diff = function - | Errortrace.Subtype.Diff diff -> - Some (Errortrace.map_diff (trees_of_type_expansion Type) diff) - - let report_error - ppf - env - (Errortrace.Subtype.{trace = tr_sub; unification_trace = tr_unif}) - txt1 = - wrap_printing_env ~error:true env (fun () -> - reset (); - let tr_sub = prepare_trace prepare_expansion tr_sub in - let tr_unif = prepare_unification_trace prepare_expansion tr_unif in - let keep_first = match tr_unif with - | [Obj _ | Variant _ | Escape _ ] | [] -> true - | _ -> false in - fprintf ppf "@[%a" - (trace filter_subtype_trace subtype_get_diff true keep_first txt1) - tr_sub; - if tr_unif = [] then fprintf ppf "@]" else - let mis = mismatch (dprintf "Within this type") env tr_unif in - fprintf ppf "%a%t%t@]" - (trace filter_trace unification_get_diff false - (mis = None) "is not compatible with type") tr_unif - (explain mis) - Conflicts.print_explanations - ) -end - -let report_ambiguous_type_error ppf env tp0 tpl txt1 txt2 txt3 = - wrap_printing_env ~error:true env (fun () -> - reset (); - let tp0 = trees_of_type_path_expansion tp0 in - match tpl with - [] -> assert false - | [tp] -> - fprintf ppf - "@[%t@;<1 2>%a@ \ - %t@;<1 2>%a\ - @]" - txt1 type_path_expansion (trees_of_type_path_expansion tp) - txt3 type_path_expansion tp0 - | _ -> - fprintf ppf - "@[%t@;<1 2>@[%a@]\ - @ %t@;<1 2>%a\ - @]" - txt2 type_path_list (List.map trees_of_type_path_expansion tpl) - txt3 type_path_expansion tp0) - -(* Adapt functions to exposed interface *) -let tree_of_path = tree_of_path None -let tree_of_modtype = tree_of_modtype ~ellipsis:false -let type_expansion mode ppf ty_exp = - type_expansion ppf (trees_of_type_expansion mode ty_exp) -let tree_of_type_declaration ident td rs = - with_hidden_items [{hide=true; ident}] - (fun () -> tree_of_type_declaration ident td rs) - -let shorten_type_path env p = - wrap_printing_env env - (fun () -> best_type_path_simple p) - -let shorten_module_type_path env p = - wrap_printing_env env - (fun () -> best_module_type_path p) - -let shorten_module_path env p = - wrap_printing_env env - (fun () -> best_module_path p) - -let shorten_class_type_path env p = - wrap_printing_env env - (fun () -> best_class_type_path_simple p) - -let () = - Env.shorten_module_path := shorten_module_path + if Warnings.(is_active @@ Erroneous_printed_signature "") then + begin match Ident_conflicts.err_msg () with + | None -> () + | Some msg -> + let conflicts = Fmt.asprintf "%a" Fmt.pp_doc msg in + Location.prerr_warning (Location.in_file sourcefile) + (Warnings.Erroneous_printed_signature conflicts); + Warnings.check_fatal () + end; + Fmt.compat print_signature ppf t diff --git a/ocamlmerlin_mlx/ocaml/typing/printtyp.mli b/ocamlmerlin_mlx/ocaml/typing/printtyp.mli index 2769fe0..a0c654a 100644 --- a/ocamlmerlin_mlx/ocaml/typing/printtyp.mli +++ b/ocamlmerlin_mlx/ocaml/typing/printtyp.mli @@ -15,240 +15,93 @@ (* Printing functions *) -open Format + open Types -open Outcometree -val longident: formatter -> Longident.t -> unit -val ident: formatter -> Ident.t -> unit +type namespace := Shape.Sig_component_kind.t + val namespaced_ident: Shape.Sig_component_kind.t -> Ident.t -> string -val tree_of_path: Path.t -> out_ident -val path: formatter -> Path.t -> unit val string_of_path: Path.t -> string +val strings_of_paths: namespace -> Path.t list -> string list +(** Print a list of paths, using the same naming context to + avoid name collisions *) -val type_path: formatter -> Path.t -> unit +(* val type_path: formatter -> Path.t -> unit (** Print a type path taking account of [-short-paths]. - Calls should be within [wrap_printing_env]. *) + Calls should be within [wrap_printing_env]. *) *) -module Out_name: sig - val create: string -> out_name - val print: out_name -> string -end +(** [printed_signature sourcefile ppf sg] print the signature [sg] of + [sourcefile] with potential warnings for name collisions *) +val printed_signature: string -> Format.formatter -> signature -> unit -type namespace := Shape.Sig_component_kind.t option +module type Printers := sig -val strings_of_paths: namespace -> Path.t list -> string list - (** Print a list of paths, using the same naming context to - avoid name collisions *) - -val raw_type_expr: formatter -> type_expr -> unit -val string_of_label: Asttypes.arg_label -> string - -val wrap_printing_env: ?error:bool -> Env.t -> (unit -> 'a) -> 'a - (* Call the function using the environment for type path shortening *) - (* This affects all the printing functions below *) - (* Also, if [~error:true], then disable the loading of cmis *) -val shorten_type_path: Env.t -> Path.t -> Path.t -val shorten_module_type_path: Env.t -> Path.t -> Path.t -val shorten_module_path: Env.t -> Path.t -> Path.t -val shorten_class_type_path: Env.t -> Path.t -> Path.t - -module Naming_context: sig - val enable: bool -> unit - (** When contextual names are enabled, the mapping between identifiers - and names is ensured to be one-to-one. *) -end + val wrap_printing_env: ?error:bool -> Env.t -> (unit -> 'a) -> 'a + (** Call the function using the environment for type path shortening This + affects all the printing functions below Also, if [~error:true], then + disable the loading of cmis *) -(** The [Conflicts] module keeps track of conflicts arising when attributing - names to identifiers and provides functions that can print explanations - for these conflict in error messages *) -module Conflicts: sig - val exists: unit -> bool - (** [exists()] returns true if the current naming context renamed - an identifier to avoid a name collision *) - - type explanation = - { kind: Shape.Sig_component_kind.t; - name:string; - root_name:string; - location:Location.t - } - - val list_explanations: unit -> explanation list -(** [list_explanations()] return the list of conflict explanations - collected up to this point, and reset the list of collected - explanations *) - - val print_located_explanations: - Format.formatter -> explanation list -> unit - - val print_explanations: Format.formatter -> unit - (** Print all conflict explanations collected up to this point *) - - val reset: unit -> unit -end + type 'a printer + val longident: Longident.t printer + val ident: Ident.t printer + val path: Path.t printer + val type_path: Path.t printer + (** Print a type path taking account of [-short-paths]. + Calls should be within [wrap_printing_env]. *) -val reset: unit -> unit - -(** Print out a type. This will pick names for type variables, and will not - reuse names for common type variables shared across multiple type - expressions. (It will also reset the printing state, which matters for - other type formatters such as [prepared_type_expr].) If you want multiple - types to use common names for type variables, see [prepare_for_printing] and - [prepared_type_expr]. *) -val type_expr: formatter -> type_expr -> unit - -(** [prepare_for_printing] resets the global printing environment, a la [reset], - and prepares the types for printing by reserving names and marking loops. - Any type variables that are shared between multiple types in the input list - will be given the same name when printed with [prepared_type_expr]. *) -val prepare_for_printing: type_expr list -> unit - -(** [add_type_to_preparation ty] extend a previous type expression preparation - to the type expression [ty] -*) -val add_type_to_preparation: type_expr -> unit - -val prepared_type_expr: formatter -> type_expr -> unit -(** The function [prepared_type_expr] is a less-safe but more-flexible version - of [type_expr] that should only be called on [type_expr]s that have been - passed to [prepare_for_printing]. Unlike [type_expr], this function does no - extra work before printing a type; in particular, this means that any loops - in the type expression may cause a stack overflow (see #8860) since this - function does not mark any loops. The benefit of this is that if multiple - type expressions are prepared simultaneously and then printed with - [prepared_type_expr], they will use the same names for the same type - variables. *) - -val constructor_arguments: formatter -> constructor_arguments -> unit -val tree_of_type_scheme: type_expr -> out_type -val type_scheme: formatter -> type_expr -> unit -val prepared_type_scheme: formatter -> type_expr -> unit -val shared_type_scheme: formatter -> type_expr -> unit -(** [shared_type_scheme] is very similar to [type_scheme], but does not reset - the printing context first. This is intended to be used in cases where the - printing should have a particularly wide context, such as documentation - generators; most use cases, such as error messages, have narrower contexts - for which [type_scheme] is better suited. *) - -val tree_of_value_description: Ident.t -> value_description -> out_sig_item -val value_description: Ident.t -> formatter -> value_description -> unit -val label : formatter -> label_declaration -> unit -val add_constructor_to_preparation : constructor_declaration -> unit -val prepared_constructor : formatter -> constructor_declaration -> unit -val constructor : formatter -> constructor_declaration -> unit -val tree_of_type_declaration: - Ident.t -> type_declaration -> rec_status -> out_sig_item -val add_type_declaration_to_preparation : - Ident.t -> type_declaration -> unit -val prepared_type_declaration: Ident.t -> formatter -> type_declaration -> unit -val type_declaration: Ident.t -> formatter -> type_declaration -> unit -val tree_of_extension_constructor: - Ident.t -> extension_constructor -> ext_status -> out_sig_item -val add_extension_constructor_to_preparation : - extension_constructor -> unit -val prepared_extension_constructor: - Ident.t -> formatter -> extension_constructor -> unit -val extension_constructor: - Ident.t -> formatter -> extension_constructor -> unit -(* Prints extension constructor with the type signature: - type ('a, 'b) bar += A of float -*) - -val extension_only_constructor: - Ident.t -> formatter -> extension_constructor -> unit -(* Prints only extension constructor without type signature: - A of float -*) - -val tree_of_module: - Ident.t -> ?ellipsis:bool -> module_type -> rec_status -> out_sig_item -val modtype: formatter -> module_type -> unit -val signature: formatter -> signature -> unit -val tree_of_modtype: module_type -> out_module_type -val tree_of_modtype_declaration: - Ident.t -> modtype_declaration -> out_sig_item - -(** Print a list of functor parameters while adjusting the printing environment - for each functor argument. - - Currently, we are disabling disambiguation for functor argument name to - avoid the need to track the moving association between identifiers and - syntactic names in situation like: - - got: (X: sig module type T end) (Y:X.T) (X:sig module type T end) (Z:X.T) - expect: (_: sig end) (Y:X.T) (_:sig end) (Z:X.T) -*) -val functor_parameters: - sep:(Format.formatter -> unit -> unit) -> - ('b -> Format.formatter -> unit) -> - (Ident.t option * 'b) list -> Format.formatter -> unit - -type type_or_scheme = Type | Type_scheme - -val tree_of_signature: Types.signature -> out_sig_item list -val tree_of_typexp: type_or_scheme -> type_expr -> out_type -val modtype_declaration: Ident.t -> formatter -> modtype_declaration -> unit -val class_type: formatter -> class_type -> unit -val tree_of_class_declaration: - Ident.t -> class_declaration -> rec_status -> out_sig_item -val class_declaration: Ident.t -> formatter -> class_declaration -> unit -val tree_of_cltype_declaration: - Ident.t -> class_type_declaration -> rec_status -> out_sig_item -val cltype_declaration: Ident.t -> formatter -> class_type_declaration -> unit -val type_expansion : - type_or_scheme -> Format.formatter -> Errortrace.expanded_type -> unit -val prepare_expansion: Errortrace.expanded_type -> Errortrace.expanded_type -val report_ambiguous_type_error: - formatter -> Env.t -> (Path.t * Path.t) -> (Path.t * Path.t) list -> - (formatter -> unit) -> (formatter -> unit) -> (formatter -> unit) -> unit - -val report_unification_error : - formatter -> - Env.t -> Errortrace.unification_error -> - ?type_expected_explanation:(formatter -> unit) -> - (formatter -> unit) -> (formatter -> unit) -> - unit - -val report_equality_error : - formatter -> - type_or_scheme -> - Env.t -> Errortrace.equality_error -> - (formatter -> unit) -> (formatter -> unit) -> - unit - -val report_moregen_error : - formatter -> - type_or_scheme -> - Env.t -> Errortrace.moregen_error -> - (formatter -> unit) -> (formatter -> unit) -> - unit - -val report_comparison_error : - formatter -> - type_or_scheme -> - Env.t -> Errortrace.comparison_error -> - (formatter -> unit) -> (formatter -> unit) -> - unit - -module Subtype : sig - val report_error : - formatter -> - Env.t -> - Errortrace.Subtype.error -> - string -> - unit -end + (** Print out a type. This will pick names for type variables, and will not + reuse names for common type variables shared across multiple type + expressions. (It will also reset the printing state, which matters for + other type formatters such as [prepared_type_expr].) If you want + multiple types to use common names for type variables, see + {!Out_type.prepare_for_printing} and {!Out_type.prepared_type_expr}. *) + val type_expr: type_expr printer -(* for toploop *) -val print_items: (Env.t -> signature_item -> 'a option) -> - Env.t -> signature_item list -> (out_sig_item * 'a option) list + val type_scheme: type_expr printer -(* Simple heuristic to rewrite Foo__bar.* as Foo.Bar.* when Foo.Bar is an alias - for Foo__bar. This pattern is used by the stdlib. *) -val rewrite_double_underscore_paths: Env.t -> Path.t -> Path.t + val shared_type_scheme: type_expr printer + (** [shared_type_scheme] is very similar to [type_scheme], but does not + reset the printing context first. This is intended to be used in cases + where the printing should have a particularly wide context, such as + documentation generators; most use cases, such as error messages, have + narrower contexts for which [type_scheme] is better suited. *) -(** [printed_signature sourcefile ppf sg] print the signature [sg] of - [sourcefile] with potential warnings for name collisions *) -val printed_signature: string -> formatter -> signature -> unit + val type_expansion: + Out_type.type_or_scheme -> Errortrace.expanded_type printer + + val label : label_declaration printer + + val constructor : constructor_declaration printer + val constructor_arguments: constructor_arguments printer + + val extension_constructor: + Ident.t -> extension_constructor printer + (** Prints extension constructor with the type signature: + type ('a, 'b) bar += A of float + *) + + val extension_only_constructor: + Ident.t -> extension_constructor printer + (** Prints only extension constructor without type signature: + A of float + *) + + + val value_description: Ident.t -> value_description printer + val type_declaration: Ident.t -> type_declaration printer + val modtype_declaration: Ident.t -> modtype_declaration printer + val class_declaration: Ident.t -> class_declaration printer + val cltype_declaration: Ident.t -> class_type_declaration printer + + + val modtype: module_type printer + val signature: signature printer + val class_type: class_type printer + +end + +module Doc : Printers with type 'a printer := 'a Format_doc.printer + +(** For compatibility with Format printers *) +include Printers with type 'a printer := 'a Format_doc.format_printer diff --git a/ocamlmerlin_mlx/ocaml/typing/printtyped.ml b/ocamlmerlin_mlx/ocaml/typing/printtyped.ml index 67afedc..94e90a7 100644 --- a/ocamlmerlin_mlx/ocaml/typing/printtyped.ml +++ b/ocamlmerlin_mlx/ocaml/typing/printtyped.ml @@ -37,10 +37,9 @@ let fmt_location f loc = let rec fmt_longident_aux f x = match x with | Longident.Lident (s) -> fprintf f "%s" s; - | Longident.Ldot (y, s) -> fprintf f "%a.%s" fmt_longident_aux y s; + | Longident.Ldot (y, s) -> fprintf f "%a.%s" fmt_longident_aux y.txt s.txt; | Longident.Lapply (y, z) -> - fprintf f "%a(%a)" fmt_longident_aux y fmt_longident_aux z - + fprintf f "%a(%a)" fmt_longident_aux y.txt fmt_longident_aux z.txt let fmt_longident f x = fprintf f "\"%a\"" fmt_longident_aux x.txt @@ -79,6 +78,11 @@ let fmt_mutable_flag f x = | Immutable -> fprintf f "Immutable" | Mutable -> fprintf f "Mutable" +let fmt_atomic_flag f x = + match x with + | Nonatomic -> fprintf f "Nonatomic" + | Atomic -> fprintf f "Atomic" + let fmt_virtual_flag f x = match x with | Virtual -> fprintf f "Virtual" @@ -109,6 +113,16 @@ let fmt_private_flag f x = | Public -> fprintf f "Public" | Private -> fprintf f "Private" +let fmt_partiality f x = + match x with + | Total -> () + | Partial -> fprintf f " (Partial)" + +let fmt_presence f x = + match x with + | Types.Mp_present -> fprintf f "(Present)" + | Types.Mp_absent -> fprintf f "(Absent)" + let line i f s (*...*) = fprintf f "%s" (String.make (2*i) ' '); fprintf f s (*...*) @@ -145,6 +159,10 @@ let arg_label i ppf = function | Labelled s -> line i ppf "Labelled \"%s\"\n" s +let tuple_component_label i ppf = function + | None -> line i ppf "Label: None\n" + | Some s -> line i ppf "Label: Some \"%s\"\n" s + let typevars ppf vs = List.iter (fun x -> fprintf ppf " %a" Pprintast.tyvar x.txt) vs @@ -181,7 +199,7 @@ let rec core_type i ppf x = core_type i ppf ct2; | Ttyp_tuple l -> line i ppf "Ttyp_tuple\n"; - list i core_type ppf l; + list i labeled_core_type ppf l; | Ttyp_constr (li, _, l) -> line i ppf "Ttyp_constr %a\n" fmt_path li; list i core_type ppf l; @@ -206,15 +224,22 @@ let rec core_type i ppf x = line i ppf "Ttyp_class %a\n" fmt_path li; list i core_type ppf l; | Ttyp_alias (ct, s) -> - line i ppf "Ttyp_alias \"%s\"\n" s; + line i ppf "Ttyp_alias \"%s\"\n" s.txt; core_type i ppf ct; | Ttyp_poly (sl, ct) -> line i ppf "Ttyp_poly%a\n" (fun ppf -> List.iter (fun x -> fprintf ppf " '%s" x)) sl; core_type i ppf ct; - | Ttyp_package { pack_path = s; pack_fields = l } -> + | Ttyp_package { tpt_path = s; tpt_cstrs = l } -> line i ppf "Ttyp_package %a\n" fmt_path s; list i package_with ppf l; + | Ttyp_open (path, _mod_ident, t) -> + line i ppf "Ttyp_open %a\n" fmt_path path; + core_type i ppf t + +and labeled_core_type i ppf (l, t) = + tuple_component_label i ppf l; + core_type i ppf t and package_with i ppf (s, t) = line i ppf "with type %a\n" fmt_longident s; @@ -224,22 +249,17 @@ and pattern : type k . _ -> _ -> k general_pattern -> unit = fun i ppf x -> line i ppf "pattern %a\n" fmt_location x.pat_loc; attributes i ppf x.pat_attributes; let i = i+1 in - begin match x.pat_extra with - | [] -> () - | extra -> - line i ppf "extra\n"; - List.iter (pattern_extra (i+1) ppf) extra; - end; + List.iter (pattern_extra i ppf) x.pat_extra; 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,_,_) -> line i ppf "Tpat_var \"%a\"\n" fmt_ident s; + | Tpat_alias (p, s,_,_,_) -> line i ppf "Tpat_alias \"%a\"\n" fmt_ident s; pattern i ppf p; | Tpat_constant (c) -> line i ppf "Tpat_constant %a\n" fmt_constant c; | Tpat_tuple (l) -> line i ppf "Tpat_tuple\n"; - list i pattern ppf l; + list i labeled_pattern ppf l; | Tpat_construct (li, _, po, vto) -> line i ppf "Tpat_construct %a\n" fmt_longident li; list i pattern ppf po; @@ -255,8 +275,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"; @@ -272,7 +292,15 @@ and pattern : type k . _ -> _ -> k general_pattern -> unit = fun i ppf x -> pattern i ppf p1; pattern i ppf p2; -and pattern_extra i ppf (extra_pat, _, attrs) = +and labeled_pattern + : type k . _ -> _ -> string option * k general_pattern -> unit = + fun i ppf (label, x) -> + tuple_component_label i ppf label; + pattern i ppf x + +and pattern_extra i ppf (extra_pat, loc, attrs) = + line i ppf "extra %a\n" fmt_location loc; + let i = i + 1 in match extra_pat with | Tpat_unpack -> line i ppf "Tpat_extra_unpack\n"; @@ -288,8 +316,26 @@ and pattern_extra i ppf (extra_pat, _, attrs) = line i ppf "Tpat_extra_open %a\n" fmt_path id; attributes i ppf attrs; -and expression_extra i ppf (x,_,attrs) = - match x with +and function_body i ppf (body : function_body) = + match[@warning "+9"] body with + | Tfunction_body e -> + line i ppf "Tfunction_body\n"; + expression (i+1) ppf e + | Tfunction_cases + { cases; loc; exp_extra; attributes = attrs; param = _; partial } + -> + line i ppf "Tfunction_cases%a %a\n" + fmt_partiality partial + fmt_location loc; + let i = i+1 in + attributes i ppf attrs; + Option.iter (fun e -> expression_extra i ppf (e, loc, [])) exp_extra; + list i case ppf cases + +and expression_extra i ppf (extra, loc, attrs) = + line i ppf "extra %a\n" fmt_location loc; + let i = i + 1 in + match extra with | Texp_constraint ct -> line i ppf "Texp_constraint\n"; attributes i ppf attrs; @@ -305,7 +351,7 @@ and expression_extra i ppf (x,_,attrs) = option i core_type ppf cto; | Texp_newtype s -> line i ppf "Texp_newtype \"%s\"\n" s; - | Texp_newtype' (id, _) -> + | Texp_newtype' (id, _, _) -> line i ppf "Texp_newtype' \"%a\"\n" fmt_ident id; attributes i ppf attrs; @@ -313,39 +359,36 @@ and expression i ppf x = line i ppf "expression %a\n" fmt_location x.exp_loc; attributes i ppf x.exp_attributes; let i = i+1 in - begin match x.exp_extra with - | [] -> () - | extra -> - line i ppf "extra\n"; - List.iter (expression_extra (i+1) ppf) extra; - end; + List.iter (expression_extra i ppf) x.exp_extra; 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; | Texp_constant (c) -> line i ppf "Texp_constant %a\n" fmt_constant c; | Texp_let (rf, l, e) -> line i ppf "Texp_let %a\n" fmt_rec_flag rf; - list i value_binding ppf l; + list i (value_binding rf) ppf l; expression i ppf e; - | Texp_function { arg_label = p; param = _; cases; partial = _; } -> + | Texp_function (params, body) -> line i ppf "Texp_function\n"; - arg_label i ppf p; - list i case ppf cases; + list i function_param ppf params; + function_body i ppf body; | Texp_apply (e, l) -> line i ppf "Texp_apply\n"; expression i ppf e; - list i label_x_expression ppf l; - | Texp_match (e, l, _partial) -> - line i ppf "Texp_match\n"; + list i label_x_apply_arg ppf l; + | Texp_match (e, l1, l2, partial) -> + line i ppf "Texp_match%a\n" fmt_partiality partial; expression i ppf e; - list i case ppf l; - | Texp_try (e, l) -> + list i case ppf l1; + list i case ppf l2; + | Texp_try (e, l1, l2) -> line i ppf "Texp_try\n"; expression i ppf e; - list i case ppf l; + list i case ppf l1; + list i case ppf l2; | Texp_tuple (l) -> line i ppf "Texp_tuple\n"; - list i expression ppf l; + list i labeled_expression ppf l; | Texp_construct (li, _, eo) -> line i ppf "Texp_construct %a\n" fmt_longident li; list i expression ppf eo; @@ -370,8 +413,12 @@ and expression i ppf x = expression i ppf e1; longident i ppf li; expression i ppf e2; - | Texp_array (l) -> - line i ppf "Texp_array\n"; + | Texp_atomic_loc (e, li, _) -> + line i ppf "Texp_atomic_loc\n"; + expression i ppf e; + longident i ppf li; + | Texp_array (mut, l) -> + line i ppf "Texp_array %a\n" fmt_mutable_flag mut; list i expression ppf l; | Texp_ifthenelse (e1, e2, eo) -> line i ppf "Texp_ifthenelse\n"; @@ -427,8 +474,9 @@ and expression i ppf x = | Texp_pack me -> line i ppf "Texp_pack"; module_expr i ppf me - | Texp_letop {let_; ands; param = _; body; partial = _} -> - line i ppf "Texp_letop"; + | Texp_letop {let_; ands; param = _; body; partial } -> + line i ppf "Texp_letop%a" + fmt_partiality partial; binding_op (i+1) ppf let_; list (i+1) binding_op ppf ands; case i ppf body @@ -442,8 +490,8 @@ and expression i ppf x = module_expr i ppf o.open_expr; attributes i ppf o.open_attributes; expression i ppf e; - | Texp_hole -> - line i ppf "Texp_hole" + | Texp_typed_hole -> + line i ppf "Texp_typed_hole" and value_description i ppf x = line i ppf "value_description %a %a\n" fmt_ident x.val_id fmt_location @@ -457,6 +505,20 @@ and binding_op i ppf x = fmt_location x.bop_loc; expression i ppf x.bop_exp +and function_param i ppf x = + let p = x.fp_arg_label in + arg_label i ppf p; + match x.fp_kind with + | Tparam_pat pat -> + line i ppf "Param_pat%a\n" + fmt_partiality x.fp_partial; + pattern (i+1) ppf pat + | Tparam_optional_default (pat, expr) -> + line i ppf "Param_optional_default%a\n" + fmt_partiality x.fp_partial; + pattern (i+1) ppf pat; + expression (i+1) ppf expr + and type_parameter i ppf (x, _variance) = core_type i ppf x and type_declaration i ppf x = @@ -615,10 +677,10 @@ and class_expr i ppf x = | Tcl_apply (ce, l) -> line i ppf "Tcl_apply\n"; class_expr i ppf ce; - list i label_x_expression ppf l; + list i label_x_apply_arg ppf l; | Tcl_let (rf, l1, l2, ce) -> line i ppf "Tcl_let %a\n" fmt_rec_flag rf; - list i value_binding ppf l1; + list i (value_binding rf) ppf l1; list i ident_x_expression_def ppf l2; class_expr i ppf ce; | Tcl_constraint (ce, Some ct, _, _, _) -> @@ -727,9 +789,8 @@ and signature_item i ppf x = line i ppf "Tsig_exception\n"; type_exception i ppf ext | Tsig_module md -> - line i ppf "Tsig_module \"%a\"\n" fmt_modname md.md_id; - attributes i ppf md.md_attributes; - module_type i ppf md.md_type + line i ppf "Tsig_module %a\n" fmt_presence md.md_presence; + module_declaration i ppf md | Tsig_modsubst ms -> line i ppf "Tsig_modsubst \"%a\" = %a\n" fmt_ident ms.ms_id fmt_path ms.ms_manifest; @@ -764,7 +825,7 @@ and signature_item i ppf x = attribute i ppf "Tsig_attribute" a and module_declaration i ppf md = - line i ppf "%a" fmt_modname md.md_id; + line i ppf "%a\n" fmt_modname md.md_id; attributes i ppf md.md_attributes; module_type (i+1) ppf md.md_type; @@ -800,7 +861,7 @@ and module_expr i ppf x = let i = i+1 in match x.mod_desc with | Tmod_ident (li,_) -> line i ppf "Tmod_ident %a\n" fmt_path li; - | Tmod_hole -> line i ppf "Tmod_hole\n"; + | Tmod_typed_hole -> line i ppf "Tmod_typed_hole\n"; | Tmod_structure (s) -> line i ppf "Tmod_structure\n"; structure i ppf s; @@ -839,7 +900,7 @@ and structure_item i ppf x = expression i ppf e; | Tstr_value (rf, l) -> line i ppf "Tstr_value %a\n" fmt_rec_flag rf; - list i value_binding ppf l; + list i (value_binding rf) ppf l; | Tstr_primitive vd -> line i ppf "Tstr_primitive\n"; value_description i ppf vd; @@ -853,7 +914,7 @@ and structure_item i ppf x = line i ppf "Tstr_exception\n"; type_exception i ppf ext; | Tstr_module x -> - line i ppf "Tstr_module\n"; + line i ppf "Tstr_module %a\n" fmt_presence x.mb_presence; module_binding i ppf x | Tstr_recmodule bindings -> line i ppf "Tstr_recmodule\n"; @@ -902,11 +963,12 @@ and constructor_arguments i ppf = function | Cstr_tuple l -> list i core_type ppf l | Cstr_record l -> list i label_decl ppf l -and label_decl i ppf {ld_id; ld_name = _; ld_mutable; ld_type; ld_loc; +and label_decl i ppf {ld_id; ld_name= _; ld_mutable; ld_atomic; ld_type; ld_loc; ld_attributes} = line i ppf "%a\n" fmt_location ld_loc; attributes i ppf ld_attributes; line (i+1) ppf "%a\n" fmt_mutable_flag ld_mutable; + line (i+1) ppf "%a\n" fmt_atomic_flag ld_atomic; line (i+1) ppf "%a" fmt_ident ld_id; core_type (i+1) ppf ld_type @@ -925,8 +987,12 @@ and case end; expression (i+1) ppf c_rhs; -and value_binding i ppf x = - line i ppf "\n"; +and value_binding rec_flag i ppf x = + begin match rec_flag, x.vb_rec_kind with + | Nonrecursive, _ -> line i ppf "\n" + | Recursive, Static -> line i ppf "\n" + | Recursive, Dynamic -> line i ppf "\n" + end; attributes (i+1) ppf x.vb_attributes; pattern (i+1) ppf x.vb_pat; expression (i+1) ppf x.vb_expr @@ -942,10 +1008,14 @@ and record_field i ppf = function | _, Kept _ -> line i ppf "" -and label_x_expression i ppf (l, e) = +and label_x_apply_arg i ppf (l, e) = line i ppf "\n"; arg_label (i+1) ppf l; - (match e with None -> () | Some e -> expression (i+1) ppf e) + (match e with Omitted () -> () | Arg e -> expression (i+1) ppf e) + +and labeled_expression i ppf (l, e) = + tuple_component_label i ppf l; + expression (i+1) ppf e; and ident_x_expression_def i ppf (l, e) = line i ppf " \"%a\"\n" fmt_ident l; @@ -968,3 +1038,5 @@ let implementation ppf x = list 0 structure_item ppf x.str_items let implementation_with_coercion ppf Typedtree.{structure; _} = implementation ppf structure + +let expression ppf x = expression 0 ppf x diff --git a/ocamlmerlin_mlx/ocaml/typing/printtyped.mli b/ocamlmerlin_mlx/ocaml/typing/printtyped.mli index ae9a6ad..1150e2e 100644 --- a/ocamlmerlin_mlx/ocaml/typing/printtyped.mli +++ b/ocamlmerlin_mlx/ocaml/typing/printtyped.mli @@ -24,3 +24,4 @@ val implementation_with_coercion : (* Added by merlin for debugging purposes *) val pattern : int -> formatter -> _ general_pattern -> unit +val expression : formatter -> expression -> unit diff --git a/ocamlmerlin_mlx/ocaml/typing/rawprinttyp.ml b/ocamlmerlin_mlx/ocaml/typing/rawprinttyp.ml new file mode 100644 index 0000000..6f15750 --- /dev/null +++ b/ocamlmerlin_mlx/ocaml/typing/rawprinttyp.ml @@ -0,0 +1,156 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Jacques Garrigue, Graduate School of Mathematics, Nagoya University *) +(* *) +(* Copyright 2003 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + + +(* Print a raw type expression, with sharing *) + +open Format +open Types +let longident = Pprintast.longident + +let raw_list pr ppf = function + [] -> fprintf ppf "[]" + | a :: l -> + fprintf ppf "@[<1>[%a%t]@]" pr a + (fun ppf -> List.iter (fun x -> fprintf ppf ";@,%a" pr x) l) + +let kind_vars = ref [] +let kind_count = ref 0 + +let string_of_field_kind v = + match field_kind_repr v with + | Fpublic -> "Fpublic" + | Fabsent -> "Fabsent" + | Fprivate -> "Fprivate" + +let rec safe_repr v t = + match Transient_expr.coerce t with + {desc = Tlink t} when not (List.memq t v) -> + safe_repr (t::v) t + | t' -> t' + +let rec list_of_memo = function + Mnil -> [] + | Mcons (_priv, p, _t1, _t2, rem) -> p :: list_of_memo rem + | Mlink rem -> list_of_memo !rem + +let print_name ppf = function + None -> fprintf ppf "None" + | Some name -> fprintf ppf "\"%s\"" name + +let path = Format_doc.compat Path.print + +let visited = ref [] +let rec raw_type ppf ty = + let ty = safe_repr [] ty in + if List.memq ty !visited then fprintf ppf "{id=%d}" ty.id else begin + visited := ty :: !visited; + fprintf ppf "@[<1>{id=%d;level=%d;scope=%d;marks=%x;desc=@,%a}@]" + ty.id ty.level + (Transient_expr.get_scope ty) (Transient_expr.get_marks ty) + raw_type_desc ty.desc + end +and labeled_type ppf (label, ty) = + begin match label with + | Some s -> fprintf ppf "label=\"%s\" " s + | None -> () + end; + raw_type ppf ty +and raw_type_list tl = raw_list raw_type tl +and labeled_type_list tl = raw_list labeled_type tl +and raw_lid_type_list tl = + raw_list (fun ppf (lid, typ) -> + let lid = Longident.unflatten lid |> Option.get in + fprintf ppf "(@,%a,@,%a)" longident lid raw_type typ) + tl +and raw_type_desc ppf = function + Tvar name -> fprintf ppf "Tvar %a" print_name name + | Tarrow(l,t1,t2,c) -> + fprintf ppf "@[Tarrow(\"%s\",@,%a,@,%a,@,%s)@]" + (Asttypes.string_of_label l) raw_type t1 raw_type t2 + (if is_commu_ok c then "Cok" else "Cunknown") + | Ttuple tl -> + fprintf ppf "@[<1>Ttuple@,%a@]" labeled_type_list tl + | Tconstr (p, tl, abbrev) -> + fprintf ppf "@[Tconstr(@,%a,@,%a,@,%a)@]" path p + raw_type_list tl + (raw_list path) (list_of_memo !abbrev) + | Tobject (t, nm) -> + fprintf ppf "@[Tobject(@,%a,@,@[<1>ref%t@])@]" raw_type t + (fun ppf -> + match !nm with None -> fprintf ppf " None" + | Some(p,tl) -> + fprintf ppf "(Some(@,%a,@,%a))" path p raw_type_list tl) + | Tfield (f, k, t1, t2) -> + fprintf ppf "@[Tfield(@,%s,@,%s,@,%a,@;<0 -1>%a)@]" f + (string_of_field_kind k) + raw_type t1 raw_type t2 + | Tnil -> fprintf ppf "Tnil" + | Tlink t -> fprintf ppf "@[<1>Tlink@,%a@]" raw_type t + | Tsubst (t, None) -> fprintf ppf "@[<1>Tsubst@,(%a,None)@]" raw_type t + | Tsubst (t, Some t') -> + fprintf ppf "@[<1>Tsubst@,(%a,@ Some%a)@]" raw_type t raw_type t' + | Tunivar name -> fprintf ppf "Tunivar %a" print_name name + | Tpoly (t, tl) -> + fprintf ppf "@[Tpoly(@,%a,@,%a)@]" + raw_type t + raw_type_list tl + | Tvariant row -> + let Row {fields; more; name; fixed; closed} = row_repr row in + fprintf ppf + "@[{@[%s@,%a;@]@ @[%s@,%a;@]@ %s%B;@ %s%a;@ @[<1>%s%t@]}@]" + "row_fields=" + (raw_list (fun ppf (l, f) -> + fprintf ppf "@[%s,@ %a@]" l raw_field f)) + fields + "row_more=" raw_type more + "row_closed=" closed + "row_fixed=" raw_row_fixed fixed + "row_name=" + (fun ppf -> + match name with None -> fprintf ppf "None" + | Some(p,tl) -> + fprintf ppf "Some(@,%a,@,%a)" path p raw_type_list tl) + | Tpackage pack -> + fprintf ppf "@[Tpackage(@,%a,@,%a)@]" + path pack.pack_path + raw_lid_type_list pack.pack_cstrs +and raw_row_fixed ppf = function +| None -> fprintf ppf "None" +| Some Types.Fixed_private -> fprintf ppf "Some Fixed_private" +| Some Types.Rigid -> fprintf ppf "Some Rigid" +| Some Types.Univar t -> fprintf ppf "Some(Univar(%a))" raw_type t +| Some Types.Reified p -> fprintf ppf "Some(Reified(%a))" path p + +and raw_field ppf rf = + match_row_field + ~absent:(fun _ -> fprintf ppf "RFabsent") + ~present:(function + | None -> + fprintf ppf "RFpresent None" + | Some t -> + fprintf ppf "@[<1>RFpresent(Some@,%a)@]" raw_type t) + ~either:(fun c tl m (_,e) -> + fprintf ppf "@[RFeither(%B,@,%a,@,%B,@,@[<1>ref%t@])@]" c + raw_type_list tl m + (fun ppf -> + match e with None -> fprintf ppf " RFnone" + | Some f -> fprintf ppf "@,@[<1>(%a)@]" raw_field f)) + rf + +let type_expr ppf t = + visited := []; kind_vars := []; kind_count := 0; + raw_type ppf t; + visited := []; kind_vars := [] diff --git a/ocamlmerlin_mlx/ocaml/typing/rawprinttyp.mli b/ocamlmerlin_mlx/ocaml/typing/rawprinttyp.mli new file mode 100644 index 0000000..205bf29 --- /dev/null +++ b/ocamlmerlin_mlx/ocaml/typing/rawprinttyp.mli @@ -0,0 +1,20 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Jacques Garrigue, Graduate School of Mathematics, Nagoya University *) +(* *) +(* Copyright 2003 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(** This module provides function(s) for printing the internal representation of + type expressions. It is targetted at internal use when debbuging the + compiler itself. *) + +val type_expr: Format.formatter -> Types.type_expr -> unit diff --git a/ocamlmerlin_mlx/ocaml/typing/saved_parts.mli b/ocamlmerlin_mlx/ocaml/typing/saved_parts.mli index be1a206..23569e3 100644 --- a/ocamlmerlin_mlx/ocaml/typing/saved_parts.mli +++ b/ocamlmerlin_mlx/ocaml/typing/saved_parts.mli @@ -1,3 +1,3 @@ val attribute : string Location.loc -val store : Cmt_format.binary_part list -> Parsetree.constant -val find : Parsetree.constant -> Cmt_format.binary_part list +val store : Cmt_format.binary_part list -> Parsetree.constant_desc +val find : Parsetree.constant_desc -> Cmt_format.binary_part list diff --git a/ocamlmerlin_mlx/ocaml/typing/shape.ml b/ocamlmerlin_mlx/ocaml/typing/shape.ml index fb89660..739deb6 100644 --- a/ocamlmerlin_mlx/ocaml/typing/shape.ml +++ b/ocamlmerlin_mlx/ocaml/typing/shape.ml @@ -16,7 +16,7 @@ module Uid = struct type t = | Compilation_unit of string - | Item of { comp_unit: string; id: int } + | Item of { comp_unit: string; id: int; from: Unit_info.intf_or_impl } | Internal | Predef of string @@ -27,24 +27,42 @@ module Uid = struct let compare (x : t) y = compare x y let hash (x : t) = Hashtbl.hash x + let pp_intf_or_impl fmt = function + | Unit_info.Intf -> Format.pp_print_string fmt "[intf]" + | Unit_info.Impl -> () + let print fmt = function | Internal -> Format.pp_print_string fmt "" | Predef name -> Format.fprintf fmt "" name | Compilation_unit s -> Format.pp_print_string fmt s - | Item { comp_unit; id } -> Format.fprintf fmt "%s.%d" comp_unit id + | Item { comp_unit; id; from } -> + Format.fprintf fmt "%a%s.%d" pp_intf_or_impl from comp_unit id let output oc t = let fmt = Format.formatter_of_out_channel oc in print fmt t end) - let id = ref (-1) + let id = Local_store.s_ref (-1) let reinit () = id := (-1) + let get_current_stamp () = !id + let restore_stamp i = id := i + + let stamp_of_uid = function + | Item { id; _ } -> Some id + | _ -> None + let mk ~current_unit = + let comp_unit, from = + let open Unit_info in + match current_unit with + | None -> "", Impl + | Some ui -> modname ui, kind ui + in incr id; - Item { comp_unit = current_unit; id = !id } + Item { comp_unit; id = !id; from } let of_compilation_unit_id id = if not (Ident.persistent id) then @@ -67,6 +85,8 @@ module Sig_component_kind = struct type t = | Value | Type + | Constructor + | Label | Module | Module_type | Extension_constructor @@ -76,6 +96,8 @@ module Sig_component_kind = struct let to_string = function | Value -> "value" | Type -> "type" + | Constructor -> "constructor" + | Label -> "label" | Module -> "module" | Module_type -> "module type" | Extension_constructor -> "extension constructor" @@ -87,6 +109,8 @@ module Sig_component_kind = struct | Extension_constructor -> false | Type + | Constructor + | Label | Module | Module_type | Class @@ -99,10 +123,15 @@ module Item = struct type t = string * Sig_component_kind.t let compare = compare + let name (name, _) = name + let kind (_, kind) = kind + let make str ns = str, ns let value id = Ident.name id, Sig_component_kind.Value let type_ id = Ident.name id, Sig_component_kind.Type + let constr id = Ident.name id, Sig_component_kind.Constructor + let label id = Ident.name id, Sig_component_kind.Label let module_ id = Ident.name id, Sig_component_kind.Module let module_type id = Ident.name id, Sig_component_kind.Module_type let extension_constructor id = @@ -124,24 +153,26 @@ module Item = struct end type var = Ident.t -type t = { uid: Uid.t option; desc: desc } +type t = { uid: Uid.t option; desc: desc; approximated: bool } and desc = | Var of var | Abs of var * t | App of t * t | Struct of t Item.Map.t + | Alias of t | Leaf | Proj of t * Item.t | Comp_unit of string + | Error of string -let print fmt = +let print fmt t = let print_uid_opt = Format.pp_print_option (fun fmt -> Format.fprintf fmt "<%a>" Uid.print) in let rec aux fmt { uid; desc } = match desc with | Var id -> - Format.fprintf fmt "%a%a" Ident.print id print_uid_opt uid + Format.fprintf fmt "%s%a" (Ident.name id) print_uid_opt uid | Abs (id, t) -> let rec collect_idents = function | { uid = None; desc = Abs(id, t) } -> @@ -152,8 +183,9 @@ let print fmt = in let (other_idents, body) = collect_idents t in let pp_idents fmt idents = + let idents_names = List.map Ident.name idents in let pp_sep fmt () = Format.fprintf fmt ",@ " in - Format.pp_print_list ~pp_sep Ident.print fmt idents + Format.pp_print_list ~pp_sep Format.pp_print_string fmt idents_names in Format.fprintf fmt "Abs@[%a@,(@[%a,@ @[%a@]@])@]" print_uid_opt uid pp_idents (id :: other_idents) aux body @@ -183,350 +215,98 @@ let print fmt = aux t ) in - Format.fprintf fmt "{@[%a@,%a@]}" print_uid_opt uid print_map map + if Item.Map.is_empty map then + Format.fprintf fmt "@[{%a}@]" print_uid_opt uid + else + Format.fprintf fmt "{@[%a@,%a@]}" print_uid_opt uid print_map map + | Alias t -> + Format.fprintf fmt "Alias@[(@[%a@,%a@])@]" print_uid_opt uid aux t + | Error s -> + Format.fprintf fmt "Error %s" s in - Format.fprintf fmt"@[%a@]@;" aux + if t.approximated then + Format.fprintf fmt "@[(approx)@ %a@]@;" aux t + else + Format.fprintf fmt "@[%a@]@;" aux t + +let rec strip_head_aliases = function + | { desc = Alias t; _ } -> strip_head_aliases t + | t -> t let fresh_var ?(name="shape-var") uid = let var = Ident.create_local name in - var, { uid = Some uid; desc = Var var } + var, { uid = Some uid; desc = Var var; approximated = false } let for_unnamed_functor_param = Ident.create_local "()" let var uid id = - { uid = Some uid; desc = Var id } + { uid = Some uid; desc = Var id; approximated = false } let abs ?uid var body = - { uid; desc = Abs (var, body) } + { uid; desc = Abs (var, body); approximated = false } let str ?uid map = - { uid; desc = Struct map } + { uid; desc = Struct map; approximated = false } + +let alias ?uid t = + { uid; desc = Alias t; approximated = false} let leaf uid = - { uid = Some uid; desc = Leaf } + { uid = Some uid; desc = Leaf; approximated = false } + +let approx t = { t with approximated = true} let proj ?uid t item = match t.desc with | Leaf -> (* When stuck projecting in a leaf we propagate the leaf as a best effort *) - t + approx t | Struct map -> begin try Item.Map.find item map - with Not_found -> t (* ill-typed program *) + with Not_found -> approx t (* ill-typed program *) end | _ -> - { uid; desc = Proj (t, item) } + { uid; desc = Proj (t, item); approximated = false } let app ?uid f ~arg = - { uid; desc = App (f, arg) } + { uid; desc = App (f, arg); approximated = false } let decompose_abs t = match t.desc with | Abs (x, t) -> Some (x, t) | _ -> None - -module Make_reduce(Params : sig - type env - val fuel : int - val read_unit_shape : unit_name:string -> t option - val find_shape : env -> Ident.t -> t -end) = struct - (* We implement a strong call-by-need reduction, following an - evaluator from Nathanaelle Courant. *) - - type nf = { uid: Uid.t option; desc: nf_desc } - and nf_desc = - | NVar of var - | NApp of nf * nf - | NAbs of local_env * var * t * delayed_nf - | NStruct of delayed_nf Item.Map.t - | NProj of nf * Item.t - | NLeaf - | NComp_unit of string - | NoFuelLeft of desc - (* A type of normal forms for strong call-by-need evaluation. - The normal form of an abstraction - Abs(x, t) - is a closure - NAbs(env, x, t, dnf) - when [env] is the local environment, and [dnf] is a delayed - normal form of [t]. - - A "delayed normal form" is morally equivalent to (nf Lazy.t), but - we use a different representation that is compatible with - memoization (lazy values are not hashable/comparable by default - comparison functions): we represent a delayed normal form as - just a not-yet-computed pair [local_env * t] of a term in a - local environment -- we could also see this as a term under - an explicit substitution. This delayed thunked is "forced" - by calling the normalization function as usual, but duplicate - computations are precisely avoided by memoization. - *) - and delayed_nf = Thunk of local_env * t - - and local_env = delayed_nf option Ident.Map.t - (* When reducing in the body of an abstraction [Abs(x, body)], we - bind [x] to [None] in the environment. [Some v] is used for - actual substitutions, for example in [App(Abs(x, body), t)], when - [v] is a thunk that will evaluate to the normal form of [t]. *) - - let improve_uid uid (nf : nf) = - match nf.uid with - | Some _ -> nf - | None -> { nf with uid } - - let in_memo_table memo_table memo_key f arg = - match Hashtbl.find memo_table memo_key with - | res -> res - | exception Not_found -> - let res = f arg in - Hashtbl.replace memo_table memo_key res; - res - - type env = { - fuel: int ref; - global_env: Params.env; - local_env: local_env; - reduce_memo_table: (local_env * t, nf) Hashtbl.t; - read_back_memo_table: (nf, t) Hashtbl.t; - } - - let bind env var shape = - { env with local_env = Ident.Map.add var shape env.local_env } - - let rec reduce_ env t = - let memo_key = (env.local_env, t) in - in_memo_table env.reduce_memo_table memo_key (reduce__ env) t - (* Memoization is absolutely essential for performance on this - problem, because the normal forms we build can in some real-world - cases contain an exponential amount of redundancy. Memoization - can avoid the repeated evaluation of identical subterms, - providing a large speedup, but even more importantly it - implicitly shares the memory of the repeated results, providing - much smaller normal forms (that blow up again if printed back - as trees). A functor-heavy file from Irmin has its shape normal - form decrease from 100Mio to 2.5Mio when memoization is enabled. - - Note: the local environment is part of the memoization key, while - it is defined using a type Ident.Map.t of non-canonical balanced - trees: two maps could have exactly the same items, but be - balanced differently and therefore hash differently, reducing - the effectivenss of memoization. - This could in theory happen, say, with the two programs - (fun x -> fun y -> ...) - and - (fun y -> fun x -> ...) - having "the same" local environments, with additions done in - a different order, giving non-structurally-equal trees. Should we - define our own hash functions to provide robust hashing on - environments? - - We believe that the answer is "no": this problem does not occur - in practice. We can assume that identifiers are unique on valid - typedtree fragments (identifier "stamps" distinguish - binding positions); in particular the two program fragments above - in fact bind *distinct* identifiers x (with different stamps) and - different identifiers y, so the environments are distinct. If two - environments are structurally the same, they must correspond to - the evaluation evnrionments of two sub-terms that are under - exactly the same scope of binders. So the two environments were - obtained by the same term traversal, adding binders in the same - order, giving the same balanced trees: the environments have the - same hash. -*) - - and reduce__ ({fuel; global_env; local_env; _} as env) (t : t) = - let reduce env t = reduce_ env t in - let delay_reduce env t = Thunk (env.local_env, t) in - let force (Thunk (local_env, t)) = - reduce { env with local_env } t in - let return desc : nf = { uid = t.uid; desc } in - if !fuel < 0 then return (NoFuelLeft t.desc) - else - match t.desc with - | Comp_unit unit_name -> - begin match Params.read_unit_shape ~unit_name with - | Some t -> reduce env t - | None -> return (NComp_unit unit_name) - end - | App(f, arg) -> - let f = reduce env f in - begin match f.desc with - | NAbs(clos_env, var, body, _body_nf) -> - let arg = delay_reduce env arg in - let env = bind { env with local_env = clos_env } var (Some arg) in - reduce env body - |> improve_uid t.uid - | _ -> - let arg = reduce env arg in - return (NApp(f, arg)) - end - | Proj(str, item) -> - let str = reduce env str in - let nored () = return (NProj(str, item)) in - begin match str.desc with - | NStruct (items) -> - begin match Item.Map.find item items with - | exception Not_found -> nored () - | nf -> - force nf - |> improve_uid t.uid - end - | _ -> - nored () - end - | Abs(var, body) -> - let body_nf = delay_reduce (bind env var None) body in - return (NAbs(local_env, var, body, body_nf)) - | Var id -> - begin match Ident.Map.find id local_env with - (* Note: instead of binding abstraction-bound variables to - [None], we could unify it with the [Some v] case by - binding the bound variable [x] to [NVar x]. - - One reason to distinguish the situations is that we can - provide a different [Uid.t] location; for bound - variables, we use the [Uid.t] of the bound occurrence - (not the binding site), whereas for bound values we use - their binding-time [Uid.t]. *) - | None -> return (NVar id) - | Some def -> force def - | exception Not_found -> - match Params.find_shape global_env id with - | exception Not_found -> return (NVar id) - | res when res = t -> return (NVar id) - | res -> - decr fuel; - reduce env res - end - | Leaf -> return NLeaf - | Struct m -> - let mnf = Item.Map.map (delay_reduce env) m in - return (NStruct mnf) - - let rec read_back env (nf : nf) : t = - in_memo_table env.read_back_memo_table nf (read_back_ env) nf - (* The [nf] normal form we receive may contain a lot of internal - sharing due to the use of memoization in the evaluator. We have - to memoize here again, otherwise the sharing is lost by mapping - over the term as a tree. *) - - and read_back_ env (nf : nf) : t = - { uid = nf.uid; desc = read_back_desc env nf.desc } - - and read_back_desc env desc = - let read_back nf = read_back env nf in - let read_back_force (Thunk (local_env, t)) = - read_back (reduce_ { env with local_env } t) in - match desc with - | NVar v -> - Var v - | NApp (nft, nfu) -> - App(read_back nft, read_back nfu) - | NAbs (_env, x, _t, nf) -> - Abs(x, read_back_force nf) - | NStruct nstr -> - Struct (Item.Map.map read_back_force nstr) - | NProj (nf, item) -> - Proj (read_back nf, item) - | NLeaf -> Leaf - | NComp_unit s -> Comp_unit s - | NoFuelLeft t -> t - - (* When in Merlin we don't need to perform full shape reduction since we are - only interested by uid's stored at the "top-level" of the shape once the - projections have been done. *) - let weak_read_back env (nf : nf) : t = - let cache = Hashtbl.create 42 in - let rec weak_read_back env nf = - let memo_key = (env.local_env, nf) in - in_memo_table cache memo_key (weak_read_back_ env) nf - and weak_read_back_ env nf : t = - { uid = nf.uid; desc = weak_read_back_desc env nf.desc } - and weak_read_back_desc env desc : desc = - let weak_read_back_no_force (Thunk (_local_env, t)) = t in - match desc with - | NVar v -> - Var v - | NApp (nft, nfu) -> - App(weak_read_back env nft, weak_read_back env nfu) - | NAbs (_env, x, _t, nf) -> - Abs(x, weak_read_back_no_force nf) - | NStruct nstr -> - Struct (Item.Map.map weak_read_back_no_force nstr) - | NProj (nf, item) -> - Proj (read_back env nf, item) - | NLeaf -> Leaf - | NComp_unit s -> Comp_unit s - | NoFuelLeft t -> t - in weak_read_back env nf - - let reduce global_env t = - let fuel = ref Params.fuel in - let reduce_memo_table = Hashtbl.create 42 in - let read_back_memo_table = Hashtbl.create 42 in - let local_env = Ident.Map.empty in - let env = { - fuel; - global_env; - reduce_memo_table; - read_back_memo_table; - local_env; - } in - reduce_ env t |> read_back env - - let weak_reduce global_env t = - let fuel = ref Params.fuel in - let reduce_memo_table = Hashtbl.create 42 in - let read_back_memo_table = Hashtbl.create 42 in - let local_env = Ident.Map.empty in - let env = { - fuel; - global_env; - reduce_memo_table; - read_back_memo_table; - local_env; - } in - reduce_ env t |> weak_read_back env -end - -module Local_reduce = - (* Note: this definition with [type env = unit] is only suitable for - reduction of toplevel shapes -- shapes of compilation units, - where free variables are only Comp_unit names. If we wanted to - reduce shapes inside module signatures, we would need to take - a typing environment as parameter. *) - Make_reduce(struct - type env = unit - let fuel = 10 - let read_unit_shape ~unit_name:_ = None - let find_shape _env _id = raise Not_found - end) - -let local_reduce shape = - Local_reduce.reduce () shape - -let dummy_mod = { uid = None; desc = Struct Item.Map.empty } - -let of_path ~find_shape ~namespace = +let dummy_mod = + { uid = None; desc = Struct Item.Map.empty; approximated = false } + +let of_path ~find_shape ~namespace path = + (* We need to handle the following cases: + Path of constructor: + M.t.C [Pextra_ty("M.t", "C")] + Path of label: + M.t.lbl [Pextra_ty("M.t", "lbl")] + Path of label of inline record: + M.t.C.lbl [Pextra_ty(Pextra_ty("M.t", "C"), "lbl")] *) let rec aux : Sig_component_kind.t -> Path.t -> t = fun ns -> function | Pident id -> find_shape ns id | Pdot (path, name) -> proj (aux Module path) (name, ns) | Papply (p1, p2) -> app (aux Module p1) ~arg:(aux Module p2) | Pextra_ty (path, extra) -> begin - match extra with - Pcstr_ty _ -> aux Type path - | Pext_ty -> aux Extension_constructor path + match extra, ns, path with + | Pcstr_ty name, Label, Pextra_ty _ -> + (* Handle the M.t.C.lbl case *) + proj (aux Constructor path) (name, ns) + | Pcstr_ty name, _, _ -> proj (aux Type path) (name, ns) + | Pext_ty, _, _ -> aux Extension_constructor path end in - aux namespace + aux namespace path let for_persistent_unit s = { uid = Some (Uid.of_compilation_unit_id (Ident.create_persistent s)); - desc = Comp_unit s } + desc = Comp_unit s; approximated = false } -let leaf_for_unpack = { uid = None; desc = Leaf } +let leaf_for_unpack = { uid = None; desc = Leaf; approximated = false } let set_uid_if_none t uid = match t.uid with @@ -546,11 +326,21 @@ module Map = struct let item = Item.value id in Item.Map.add item (proj shape item) t - let add_type t id uid = Item.Map.add (Item.type_ id) (leaf uid) t + let add_type t id shape = Item.Map.add (Item.type_ id) shape t let add_type_proj t id shape = let item = Item.type_ id in Item.Map.add item (proj shape item) t + let add_constr t id shape = Item.Map.add (Item.constr id) shape t + let add_constr_proj t id shape = + let item = Item.constr id in + Item.Map.add item (proj shape item) t + + let add_label t id uid = Item.Map.add (Item.label id) (leaf uid) t + let add_label_proj t id shape = + let item = Item.label id in + Item.Map.add item (proj shape item) t + let add_module t id shape = Item.Map.add (Item.module_ id) shape t let add_module_proj t id shape = let item = Item.module_ id in @@ -562,8 +352,8 @@ module Map = struct let item = Item.module_type id in Item.Map.add item (proj shape item) t - let add_extcons t id uid = - Item.Map.add (Item.extension_constructor id) (leaf uid) t + let add_extcons t id shape = + Item.Map.add (Item.extension_constructor id) shape t let add_extcons_proj t id shape = let item = Item.extension_constructor id in Item.Map.add item (proj shape item) t diff --git a/ocamlmerlin_mlx/ocaml/typing/shape.mli b/ocamlmerlin_mlx/ocaml/typing/shape.mli index 9740a3a..83300d8 100644 --- a/ocamlmerlin_mlx/ocaml/typing/shape.mli +++ b/ocamlmerlin_mlx/ocaml/typing/shape.mli @@ -13,16 +13,60 @@ (* *) (**************************************************************************) +(** Shapes are an abstract representation of modules' implementations which + allow the tracking of definitions through functor applications and other + module-level operations. + + The Shape of a compilation unit is elaborated during typing, partially + reduced (without loading external shapes) and written to the [cmt] file. + + External tools can retrieve the definition of any value (or type, or module, + etc) by following this procedure: + + - Build the Shape corresponding to the value's path: + [let shape = Env.shape_of_path ~namespace env path] + + - Instantiate the [Shape_reduce.Make] functor with a way to load shapes from + external units and to looks for shapes in the environment (usually using + [Env.shape_of_path]). + + - Completely reduce the shape: + [let shape = My_reduce.(weak_)reduce env shape] + + - The [Uid.t] stored in the reduced shape should be the one of the + definition. However, if the [approximate] field of the reduced shape is + [true] then the [Uid.t] will not correspond to the definition, but to the + closest parent module's uid. This happens when Shape reduction gets stuck, + for example when hitting first-class modules. + + - The location of the definition can be easily found with the + [cmt_format.cmt_uid_to_decl] table of the corresponding compilation unit. + + See: + - {{:https://icfp22.sigplan.org/details/mlfamilyworkshop-2022-papers/10/Module-Shapes-for-Modern-Tooling} + the design document} + - {{:https://www.lix.polytechnique.fr/Labo/Gabriel.Scherer/research/shapes/2022-ml-workshop-shapes-talk.pdf} + a talk about the reduction strategy +*) + +(** A [Uid.t] is associated to every declaration in signatures and + implementations. They uniquely identify bindings in the program. When + associated with these bindings' locations they are useful to external tools + when trying to jump to an identifier's declaration or definition. They are + stored to that effect in the [uid_to_decl] table of cmt files. *) module Uid : sig type t = private | Compilation_unit of string - | Item of { comp_unit: string; id: int } + | Item of { comp_unit: string; id: int; from: Unit_info.intf_or_impl } | Internal | Predef of string val reinit : unit -> unit + val get_current_stamp : unit -> int + val restore_stamp : int -> unit + val stamp_of_uid : t -> int option - val mk : current_unit:string -> t + val mk : current_unit:(Unit_info.t option) -> t val of_compilation_unit_id : Ident.t -> t val of_predef_id : Ident.t -> t val internal_not_actually_unique : t @@ -36,6 +80,8 @@ module Sig_component_kind : sig type t = | Value | Type + | Constructor + | Label | Module | Module_type | Extension_constructor @@ -48,35 +94,49 @@ module Sig_component_kind : sig val can_appear_in_types : t -> bool end +(** Shape's items are elements of a structure or, in the case of constructors + and labels, elements of a record or variants definition seen as a structure. + These structures model module components and nested types' constructors and + labels. *) module Item : sig - type t + type t = string * Sig_component_kind.t + val name : t -> string + val kind : t -> Sig_component_kind.t val make : string -> Sig_component_kind.t -> t val value : Ident.t -> t val type_ : Ident.t -> t + val constr : Ident.t -> t + val label : Ident.t -> t val module_ : Ident.t -> t val module_type : Ident.t -> t val extension_constructor : Ident.t -> t val class_ : Ident.t -> t val class_type : Ident.t -> t + val print : Format.formatter -> t -> unit + module Map : Map.S with type key = t end type var = Ident.t -type t = { uid: Uid.t option; desc: desc } +type t = { uid: Uid.t option; desc: desc; approximated: bool } and desc = | Var of var | Abs of var * t | App of t * t | Struct of t Item.Map.t + | Alias of t | Leaf | Proj of t * Item.t | Comp_unit of string + | Error of string val print : Format.formatter -> t -> unit +val strip_head_aliases : t -> t + (* Smart constructors *) val for_unnamed_functor_param : var @@ -86,6 +146,7 @@ val var : Uid.t -> Ident.t -> t val abs : ?uid:Uid.t -> var -> t -> t val app : ?uid:Uid.t -> t -> arg:t -> t val str : ?uid:Uid.t -> t Item.Map.t -> t +val alias : ?uid:Uid.t -> t -> t val proj : ?uid:Uid.t -> t -> Item.t -> t val leaf : Uid.t -> t @@ -105,16 +166,22 @@ module Map : sig val add_value : t -> Ident.t -> Uid.t -> t val add_value_proj : t -> Ident.t -> shape -> t - val add_type : t -> Ident.t -> Uid.t -> t + val add_type : t -> Ident.t -> shape -> t val add_type_proj : t -> Ident.t -> shape -> t + val add_constr : t -> Ident.t -> shape -> t + val add_constr_proj : t -> Ident.t -> shape -> t + + val add_label : t -> Ident.t -> Uid.t -> t + val add_label_proj : t -> Ident.t -> shape -> t + val add_module : t -> Ident.t -> shape -> t val add_module_proj : t -> Ident.t -> shape -> t val add_module_type : t -> Ident.t -> Uid.t -> t val add_module_type_proj : t -> Ident.t -> shape -> t - val add_extcons : t -> Ident.t -> Uid.t -> t + val add_extcons : t -> Ident.t -> shape -> t val add_extcons_proj : t -> Ident.t -> shape -> t val add_class : t -> Ident.t -> Uid.t -> t @@ -131,28 +198,3 @@ val of_path : namespace:Sig_component_kind.t -> Path.t -> t val set_uid_if_none : t -> Uid.t -> t - -(** The [Make_reduce] functor is used to generate a reduction function for - shapes. - - It is parametrized by: - - an environment and a function to find shapes by path in that environment - - a function to load the shape of an external compilation unit - - some fuel, which is used to bound recursion when dealing with recursive - shapes introduced by recursive modules. (FTR: merlin currently uses a - fuel of 10, which seems to be enough for most practical examples) -*) -module Make_reduce(Context : sig - type env - - val fuel : int - - val read_unit_shape : unit_name:string -> t option - - val find_shape : env -> Ident.t -> t - end) : sig - val reduce : Context.env -> t -> t - val weak_reduce : Context.env -> t -> t -end - -val local_reduce : t -> t diff --git a/ocamlmerlin_mlx/ocaml/typing/shape_reduce.ml b/ocamlmerlin_mlx/ocaml/typing/shape_reduce.ml new file mode 100644 index 0000000..cb4e949 --- /dev/null +++ b/ocamlmerlin_mlx/ocaml/typing/shape_reduce.ml @@ -0,0 +1,342 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Ulysse Gérard, Thomas Refis, Tarides *) +(* Nathanaëlle Courant, OCamlPro *) +(* Gabriel Scherer, projet Picube, INRIA Paris *) +(* *) +(* Copyright 2021 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +open Shape + +type result = + | Resolved of Uid.t + | Resolved_alias of Uid.t * result + | Unresolved of t + | Approximated of Uid.t option + | Internal_error_missing_uid + +let rec print_result fmt result = + match result with + | Resolved uid -> + Format.fprintf fmt "@[Resolved:@ %a@]" Uid.print uid + | Resolved_alias (uid, r) -> + Format.fprintf fmt "@[Alias:@ %a@] ->@ %a" + Uid.print uid print_result r + | Unresolved shape -> + Format.fprintf fmt "@[Unresolved:@ %a@]" print shape + | Approximated (Some uid) -> + Format.fprintf fmt "@[Approximated:@ %a@]" Uid.print uid + | Approximated None -> + Format.fprintf fmt "Approximated: No uid" + | Internal_error_missing_uid -> + Format.fprintf fmt "Missing uid" + + +let find_shape env id = + let namespace = Shape.Sig_component_kind.Module in + Env.shape_of_path ~namespace env (Pident id) + +module Make(Params : sig + val fuel : int + val read_unit_shape : unit_name:string -> t option +end) = struct + (* We implement a strong call-by-need reduction, following an + evaluator from Nathanaelle Courant. *) + + type nf = { uid: Uid.t option; desc: nf_desc; approximated: bool } + and nf_desc = + | NVar of var + | NApp of nf * nf + | NAbs of local_env * var * t * delayed_nf + | NStruct of delayed_nf Item.Map.t + | NAlias of delayed_nf + | NProj of nf * Item.t + | NLeaf + | NComp_unit of string + | NError of string + + (* A type of normal forms for strong call-by-need evaluation. + The normal form of an abstraction + Abs(x, t) + is a closure + NAbs(env, x, t, dnf) + when [env] is the local environment, and [dnf] is a delayed + normal form of [t]. + + A "delayed normal form" is morally equivalent to (nf Lazy.t), but + we use a different representation that is compatible with + memoization (lazy values are not hashable/comparable by default + comparison functions): we represent a delayed normal form as + just a not-yet-computed pair [local_env * t] of a term in a + local environment -- we could also see this as a term under + an explicit substitution. This delayed thunked is "forced" + by calling the normalization function as usual, but duplicate + computations are precisely avoided by memoization. + *) + and delayed_nf = Thunk of local_env * t + + and local_env = delayed_nf option Ident.Map.t + (* When reducing in the body of an abstraction [Abs(x, body)], we + bind [x] to [None] in the environment. [Some v] is used for + actual substitutions, for example in [App(Abs(x, body), t)], when + [v] is a thunk that will evaluate to the normal form of [t]. *) + + let approx_nf nf = { nf with approximated = true } + + let in_memo_table memo_table memo_key f arg = + match Hashtbl.find memo_table memo_key with + | res -> res + | exception Not_found -> + let res = f arg in + Hashtbl.replace memo_table memo_key res; + res + + type env = { + fuel: int ref; + global_env: Env.t; + local_env: local_env; + reduce_memo_table: (local_env * t, nf) Hashtbl.t; + read_back_memo_table: (nf, t) Hashtbl.t; + } + + let bind env var shape = + { env with local_env = Ident.Map.add var shape env.local_env } + + let rec reduce_ env t = + let local_env = env.local_env in + let memo_key = (local_env, t) in + in_memo_table env.reduce_memo_table memo_key (reduce__ env) t + (* Memoization is absolutely essential for performance on this + problem, because the normal forms we build can in some real-world + cases contain an exponential amount of redundancy. Memoization + can avoid the repeated evaluation of identical subterms, + providing a large speedup, but even more importantly it + implicitly shares the memory of the repeated results, providing + much smaller normal forms (that blow up again if printed back + as trees). A functor-heavy file from Irmin has its shape normal + form decrease from 100Mio to 2.5Mio when memoization is enabled. + + Note: the local environment is part of the memoization key, while + it is defined using a type Ident.Map.t of non-canonical balanced + trees: two maps could have exactly the same items, but be + balanced differently and therefore hash differently, reducing + the effectivenss of memoization. + This could in theory happen, say, with the two programs + (fun x -> fun y -> ...) + and + (fun y -> fun x -> ...) + having "the same" local environments, with additions done in + a different order, giving non-structurally-equal trees. Should we + define our own hash functions to provide robust hashing on + environments? + + We believe that the answer is "no": this problem does not occur + in practice. We can assume that identifiers are unique on valid + typedtree fragments (identifier "stamps" distinguish + binding positions); in particular the two program fragments above + in fact bind *distinct* identifiers x (with different stamps) and + different identifiers y, so the environments are distinct. If two + environments are structurally the same, they must correspond to + the evaluation evnrionments of two sub-terms that are under + exactly the same scope of binders. So the two environments were + obtained by the same term traversal, adding binders in the same + order, giving the same balanced trees: the environments have the + same hash. + *) + + and force env (Thunk (local_env, t)) = + reduce_ { env with local_env } t + + and reduce__ + ({fuel; global_env; local_env; _} as env) (t : t) = + let reduce env t = reduce_ env t in + let delay_reduce env t = Thunk (env.local_env, t) in + let return desc = { uid = t.uid; desc; approximated = t.approximated } in + let rec force_aliases nf = match nf.desc with + | NAlias delayed_nf -> + let nf = force env delayed_nf in + force_aliases nf + | _ -> nf + in + let reset_uid_if_new_binding t' = + match t.uid with + | None -> t' + | Some _ as uid -> { t' with uid } + in + if !fuel < 0 then approx_nf (return (NError "NoFuelLeft")) + else + match t.desc with + | Comp_unit unit_name -> + begin match Params.read_unit_shape ~unit_name with + | Some t -> reduce env t + | None -> return (NComp_unit unit_name) + end + | App(f, arg) -> + let f = reduce env f |> force_aliases in + begin match f.desc with + | NAbs(clos_env, var, body, _body_nf) -> + let arg = delay_reduce env arg in + let env = bind { env with local_env = clos_env } var (Some arg) in + reduce env body |> reset_uid_if_new_binding + | _ -> + let arg = reduce env arg in + return (NApp(f, arg)) + end + | Proj(str, item) -> + let str = reduce env str |> force_aliases in + let nored () = return (NProj(str, item)) in + begin match str.desc with + | NStruct (items) -> + begin match Item.Map.find item items with + | exception Not_found -> nored () + | nf -> force env nf |> reset_uid_if_new_binding + end + | _ -> + nored () + end + | Abs(var, body) -> + let body_nf = delay_reduce (bind env var None) body in + return (NAbs(local_env, var, body, body_nf)) + | Var id -> + begin match Ident.Map.find id local_env with + (* Note: instead of binding abstraction-bound variables to + [None], we could unify it with the [Some v] case by + binding the bound variable [x] to [NVar x]. + + One reason to distinguish the situations is that we can + provide a different [Uid.t] location; for bound + variables, we use the [Uid.t] of the bound occurrence + (not the binding site), whereas for bound values we use + their binding-time [Uid.t]. *) + | None -> return (NVar id) + | Some def -> + begin match force env def with + | { uid = Some _; _ } as nf -> nf + (* This var already has a binding uid *) + | { uid = None; _ } as nf -> { nf with uid = t.uid } + (* Set the var's binding uid *) + end + | exception Not_found -> + match find_shape global_env id with + | exception Not_found -> return (NVar id) + | res when res = t -> return (NVar id) + | res -> + decr fuel; + reduce env res + end + | Leaf -> return NLeaf + | Struct m -> + let mnf = Item.Map.map (delay_reduce env) m in + return (NStruct mnf) + | Alias t -> return (NAlias (delay_reduce env t)) + | Error s -> approx_nf (return (NError s)) + + and read_back env (nf : nf) : t = + in_memo_table env.read_back_memo_table nf (read_back_ env) nf + (* The [nf] normal form we receive may contain a lot of internal + sharing due to the use of memoization in the evaluator. We have + to memoize here again, otherwise the sharing is lost by mapping + over the term as a tree. *) + + and read_back_ env (nf : nf) : t = + { uid = nf.uid ; + desc = read_back_desc env nf.desc; + approximated = nf.approximated } + + and read_back_desc env desc = + let read_back nf = read_back env nf in + let read_back_force dnf = read_back (force env dnf) in + match desc with + | NVar v -> + Var v + | NApp (nft, nfu) -> + App(read_back nft, read_back nfu) + | NAbs (_env, x, _t, nf) -> + Abs(x, read_back_force nf) + | NStruct nstr -> + Struct (Item.Map.map read_back_force nstr) + | NAlias nf -> Alias (read_back_force nf) + | NProj (nf, item) -> + Proj (read_back nf, item) + | NLeaf -> Leaf + | NComp_unit s -> Comp_unit s + | NError s -> Error s + + (* Sharing the memo tables is safe at the level of a compilation unit since + idents should be unique *) + let reduce_memo_table = Hashtbl.create 42 + let read_back_memo_table = Hashtbl.create 42 + + let reduce global_env t = + let fuel = ref Params.fuel in + let local_env = Ident.Map.empty in + let env = { + fuel; + global_env; + reduce_memo_table = reduce_memo_table; + read_back_memo_table = read_back_memo_table; + local_env; + } in + reduce_ env t |> read_back env + + let rec is_stuck_on_comp_unit (nf : nf) = + match nf.desc with + | NVar _ -> + (* This should not happen if we only reduce closed terms *) + false + | NApp (nf, _) | NProj (nf, _) -> is_stuck_on_comp_unit nf + | NStruct _ | NAbs _ -> false + | NAlias _ -> false + | NComp_unit _ -> true + | NError _ -> false + | NLeaf -> false + + let rec reduce_aliases_for_uid env (nf : nf) = + match nf with + | { uid = Some uid; desc = NAlias dnf; approximated = false; _ } -> + let result = reduce_aliases_for_uid env (force env dnf) in + Resolved_alias (uid, result) + | { uid = Some uid; approximated = false; _ } -> Resolved uid + | { uid; approximated = true } -> Approximated uid + | { uid = None; approximated = false; _ } -> + (* A missing Uid after a complete reduction means the Uid was first + missing in the shape which is a code error. Having the + [Missing_uid] reported will allow Merlin (or another tool working + with the index) to ask users to report the issue if it does happen. + *) + Internal_error_missing_uid + + let reduce_for_uid global_env t = + let fuel = ref Params.fuel in + let local_env = Ident.Map.empty in + let env = { + fuel; + global_env; + reduce_memo_table = reduce_memo_table; + read_back_memo_table = read_back_memo_table; + local_env; + } in + let nf = reduce_ env t in + if is_stuck_on_comp_unit nf then + Unresolved (read_back env nf) + else + reduce_aliases_for_uid env nf +end + +module Local_reduce = + Make(struct + let fuel = 10 + let read_unit_shape ~unit_name:_ = None + end) + +let local_reduce = Local_reduce.reduce +let local_reduce_for_uid = Local_reduce.reduce_for_uid diff --git a/ocamlmerlin_mlx/ocaml/typing/shape_reduce.mli b/ocamlmerlin_mlx/ocaml/typing/shape_reduce.mli new file mode 100644 index 0000000..307bc76 --- /dev/null +++ b/ocamlmerlin_mlx/ocaml/typing/shape_reduce.mli @@ -0,0 +1,62 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Ulysse Gérard, Thomas Refis, Tarides *) +(* Nathanaëlle Courant, OCamlPro *) +(* Gabriel Scherer, projet Picube, INRIA Paris *) +(* *) +(* Copyright 2021 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(** The result of reducing a shape and looking for its uid *) +type result = + | Resolved of Shape.Uid.t (** Shape reduction succeeded and a uid was found *) + | Resolved_alias of Shape.Uid.t * result (** Reduction led to an alias *) + | Unresolved of Shape.t (** Result still contains [Comp_unit] terms *) + | Approximated of Shape.Uid.t option + (** Reduction failed: it can arrive with first-class modules for example *) + | Internal_error_missing_uid + (** Reduction succeeded but no uid was found, this should never happen *) + +val print_result : Format.formatter -> result -> unit + +(** The [Make] functor is used to generate a reduction function for + shapes. + + It is parametrized by: + - a function to load the shape of an external compilation unit + - some fuel, which is used to bound recursion when dealing with recursive + shapes introduced by recursive modules. (FTR: merlin currently uses a + fuel of 10, which seems to be enough for most practical examples) + + Usage warning: To ensure good performances, every reduction made with the + same instance of that functor share the same ident-based memoization tables. + Such an instance should only be used to perform reduction inside a unique + compilation unit to prevent conflicting entries in these memoization tables. +*) +module Make(_ : sig + val fuel : int + + val read_unit_shape : unit_name:string -> Shape.t option + end) : sig + val reduce : Env.t -> Shape.t -> Shape.t + + (** Perform weak reduction and return the head's uid if any. If reduction was + incomplete the partially reduced shape is returned. *) + val reduce_for_uid : Env.t -> Shape.t -> result +end + +(** [local_reduce] will not reduce shapes that require loading external + compilation units. *) +val local_reduce : Env.t -> Shape.t -> Shape.t + +(** [local_reduce_for_uid] will not reduce shapes that require loading external + compilation units. *) +val local_reduce_for_uid : Env.t -> Shape.t -> result diff --git a/ocamlmerlin_mlx/ocaml/typing/short_paths_graph.ml b/ocamlmerlin_mlx/ocaml/typing/short_paths_graph.ml index c3d9d8b..b3ed9e4 100644 --- a/ocamlmerlin_mlx/ocaml/typing/short_paths_graph.ml +++ b/ocamlmerlin_mlx/ocaml/typing/short_paths_graph.ml @@ -14,6 +14,7 @@ module Ident = struct let global name = Ident.create_persistent name + let print_with_scope t = Ident.print_with_scope t end module Ident_map = Map.Make(Ident) @@ -1153,12 +1154,15 @@ end = struct module_type_names = String_map.empty; module_names = String_map.empty; } - let previous_type t id = + let failwith_id msg id = + failwith (Format_doc.asprintf "%s: %a" msg Ident.print_with_scope id) + + let previous_type _desc t id = match Ident_map.find id t.types with | exception Not_found -> None | prev -> match Type.declaration prev with - | None -> failwith "Graph.add: type already defined" + | None -> failwith_id "Graph.add: type already defined" id | Some _ as o -> o let previous_class_type t id = @@ -1166,7 +1170,7 @@ end = struct | exception Not_found -> None | prev -> match Class_type.declaration prev with - | None -> failwith "Graph.add: class type already defined" + | None -> failwith_id "Graph.add: class type already defined" id | Some _ as o -> o let previous_module_type t id = @@ -1174,7 +1178,7 @@ end = struct | exception Not_found -> None | prev -> match Module_type.declaration prev with - | None -> failwith "Graph.add: module type already defined" + | None -> failwith_id "Graph.add: module type already defined" id | Some _ as o -> o let previous_module t id = @@ -1182,7 +1186,7 @@ end = struct | exception Not_found -> None | prev -> match Module.declaration prev with - | None -> failwith "Graph.add: module already defined" + | None -> failwith_id "Graph.add: module already defined" id | Some _ as o -> o let add_name source id names = @@ -1213,7 +1217,7 @@ end = struct let rec loop acc diff declarations = function | [] -> loop_declarations acc diff declarations | Component.Type(origin, id, desc, source, dpr) :: rest -> - let prev = previous_type acc id in + let prev = previous_type desc acc id in let typ = Type.base origin id (Some desc) dpr in let types = Ident_map.add id typ acc.types in let type_names = add_name source id acc.type_names in diff --git a/ocamlmerlin_mlx/ocaml/typing/signature_group.mli b/ocamlmerlin_mlx/ocaml/typing/signature_group.mli index 0b736a5..a84925d 100644 --- a/ocamlmerlin_mlx/ocaml/typing/signature_group.mli +++ b/ocamlmerlin_mlx/ocaml/typing/signature_group.mli @@ -73,9 +73,7 @@ type in_place_patch = { (** [!replace_in_place patch sg] replaces the first element of the signature - for which [patch ~rec_group ~ghosts component] returns [Some (value,patch)]. - The [rec_group] argument is the remaining part of the mutually - recursive group of [component]. + for which [patch ~ghosts component] returns [Some (value,patch)]. The [ghosts] list is the current prefix of ghost components associated to [component] *) diff --git a/ocamlmerlin_mlx/ocaml/typing/stypes.ml b/ocamlmerlin_mlx/ocaml/typing/stypes.ml index 9d4a2ff..035b488 100644 --- a/ocamlmerlin_mlx/ocaml/typing/stypes.ml +++ b/ocamlmerlin_mlx/ocaml/typing/stypes.ml @@ -103,7 +103,7 @@ let sort_filter_phrases () = let rec printtyp_reset_maybe loc = match !phrases with | cur :: t when cur.loc_start.pos_cnum <= loc.loc_start.pos_cnum -> - Printtyp.reset (); + Out_type.reset (); phrases := t; printtyp_reset_maybe loc; | _ -> () @@ -148,7 +148,9 @@ let print_info pp prev_loc ti = printtyp_reset_maybe loc; Format.pp_print_string Format.str_formatter " "; Printtyp.wrap_printing_env ~error:false env - (fun () -> Printtyp.shared_type_scheme Format.str_formatter typ); + (fun () -> + Printtyp.shared_type_scheme + Format.str_formatter typ); (* (fun () -> Printtyp.shared_type_scheme Format.str_formatter typ); *) Format.pp_print_newline Format.str_formatter (); let s = Format.flush_str_formatter () in diff --git a/ocamlmerlin_mlx/ocaml/typing/subst.ml b/ocamlmerlin_mlx/ocaml/typing/subst.ml index deef667..872abc0 100644 --- a/ocamlmerlin_mlx/ocaml/typing/subst.ml +++ b/ocamlmerlin_mlx/ocaml/typing/subst.ml @@ -26,7 +26,7 @@ type type_replacement = | Path of Path.t | Type_function of { params : type_expr list; body : type_expr } -type t = +type s = { types: type_replacement Path.Map.t; modules: Path.t Path.Map.t; modtypes: module_type Path.Map.t; @@ -35,6 +35,12 @@ type t = make_loc_ghost: bool; } +type 'a subst = s +type safe = [`Safe] +type unsafe = [`Unsafe] +type t = safe subst +exception Module_type_path_substituted_away of Path.t * Types.module_type + let identity = { types = Path.Map.empty; modules = Path.Map.empty; @@ -44,17 +50,17 @@ let identity = make_loc_ghost = false; } -let add_type_path id p s = { s with types = Path.Map.add id (Path p) s.types } -let add_type id p s = add_type_path (Pident id) p s +let unsafe x = x -let add_type_function id ~params ~body s = - { s with types = Path.Map.add id (Type_function { params; body }) s.types } +let add_type id p s = + { s with types = Path.Map.add (Pident id) (Path p) s.types } -let add_module_path id p s = { s with modules = Path.Map.add id p s.modules } -let add_module id p s = add_module_path (Pident id) p s +let add_module id p s = + { s with modules = Path.Map.add (Pident id) p s.modules } -let add_modtype_path p ty s = { s with modtypes = Path.Map.add p ty s.modtypes } -let add_modtype id ty s = add_modtype_path (Pident id) ty s +let add_modtype_gen p ty s = { s with modtypes = Path.Map.add p ty s.modtypes } +let add_modtype_path p p' s = add_modtype_gen p (Mty_ident p') s +let add_modtype id p s = add_modtype_path (Pident id) p s let for_saving s = { s with for_saving = true } let change_locs s loc = { s with loc = Some loc } @@ -104,8 +110,8 @@ let rec module_path s path = let modtype_path s path = match Path.Map.find path s.modtypes with | Mty_ident p -> p - | Mty_alias _ | Mty_signature _ | Mty_functor _ | Mty_for_hole -> - fatal_error "Subst.modtype_path" + | Mty_alias _ | Mty_signature _ | Mty_functor _ | Mty_for_hole as mty -> + raise (Module_type_path_substituted_away (path,mty)) | exception Not_found -> match path with | Pdot(p, n) -> @@ -161,7 +167,68 @@ let norm = function | Tunivar None -> tunivar_none | d -> d -let ctype_apply_env_empty = ref (fun _ -> assert false) +let apply_type_function params args body = + For_copy.with_scope (fun copy_scope -> + List.iter2 + (fun param arg -> + For_copy.redirect_desc copy_scope param (Tsubst (arg, None))) + params args; + let rec copy ty = + assert (get_level ty = generic_level); + match get_desc ty with + | Tsubst (ty, _) -> ty + | Tvariant row -> + let t = newgenstub ~scope:(get_scope ty) in + For_copy.redirect_desc copy_scope ty (Tsubst (t, None)); + let more = row_more row in + assert (get_level more = generic_level); + let mored = get_desc more in + (* We must substitute in a subtle way *) + (* Tsubst takes a tuple containing the row var and the variant *) + let desc' = + match mored with + | Tsubst (_, Some ty2) -> + (* This variant type has been already copied *) + (* Change the stub to avoid Tlink in the new type *) + For_copy.redirect_desc copy_scope ty (Tsubst (ty2, None)); + Tlink ty2 + | _ -> + let more' = + match mored with + Tsubst (ty, None) -> ty + (* TODO: is this case possible? + possibly an interaction with (copy more) below? *) + | Tconstr _ | Tnil -> + copy more + | Tvar _ | Tunivar _ -> + newgenty mored + | _ -> assert false + in + let row = + match get_desc more' with (* PR#6163 *) + Tconstr (x,_,_) when not (is_fixed row) -> + let Row {fields; more; closed; name} = row_repr row in + create_row ~fields ~more ~closed ~name + ~fixed:(Some (Reified x)) + | _ -> row + in + (* Register new type first for recursion *) + For_copy.redirect_desc copy_scope more + (Tsubst(more', Some t)); + (* Return a new copy *) + Tvariant (copy_row copy true row false more') + in + Transient_expr.set_stub_desc t desc'; + t + | desc -> + let t = newgenstub ~scope:(get_scope ty) in + For_copy.redirect_desc copy_scope ty (Tsubst (t, None)); + let desc' = copy_type_desc copy desc in + Transient_expr.set_stub_desc t desc'; + t + in + copy body) + (* Similar to [Ctype.nondep_type_rec]. *) let rec typexp copy_scope s ty = @@ -210,11 +277,14 @@ let rec typexp copy_scope s ty = | exception Not_found -> Tconstr(type_path s p, args, ref Mnil) | Path _ -> Tconstr(type_path s p, args, ref Mnil) | Type_function { params; body } -> - Tlink (!ctype_apply_env_empty params body args) + Tlink (apply_type_function params args body) end - | Tpackage(p, fl) -> - Tpackage(modtype_path s p, - List.map (fun (n, ty) -> (n, typexp copy_scope s ty)) fl) + | Tpackage {pack_path; pack_cstrs} -> + Tpackage { + pack_path = modtype_path s pack_path; + pack_cstrs = + List.map (fun (n, ty) -> (n, typexp copy_scope s ty)) pack_cstrs; + } | Tobject (t1, name) -> let t1' = typexp copy_scope s t1 in let name' = @@ -287,6 +357,7 @@ let label_declaration copy_scope s l = { ld_id = l.ld_id; ld_mutable = l.ld_mutable; + ld_atomic = l.ld_atomic; ld_type = typexp copy_scope s l.ld_type; ld_loc = loc s l.ld_loc; ld_attributes = attrs s l.ld_attributes; @@ -314,7 +385,7 @@ let type_declaration' copy_scope s decl = type_arity = decl.type_arity; type_kind = begin match decl.type_kind with - Type_abstract -> Type_abstract + Type_abstract r -> Type_abstract r | Type_variant (cstrs, rep) -> Type_variant (List.map (constructor_declaration copy_scope s) cstrs, rep) @@ -528,7 +599,7 @@ let rename_bound_idents scoping s sg = | SigL_modtype(id, mtd, vis) :: rest -> let id' = rename id in rename_bound_idents - (add_modtype id (Mty_ident(Pident id')) s) + (add_modtype id (Pident id') s) (SigL_modtype(id', mtd, vis) :: sg) rest | SigL_class(id, cd, rs, vis) :: rest -> @@ -780,3 +851,27 @@ let modtype_declaration sc s decl = let module_declaration scoping s decl = Lazy.(decl |> of_module_decl |> module_decl scoping s |> force_module_decl) + +module Unsafe = struct + + type t = unsafe subst + type error = Fcm_type_substituted_away of Path.t * Types.module_type + + let add_modtype_path = add_modtype_gen + let add_modtype id mty s = add_modtype_path (Pident id) mty s + let add_type_path id p s = { s with types = Path.Map.add id (Path p) s.types } + let add_type_function id ~params ~body s = + { s with types = Path.Map.add id (Type_function { params; body }) s.types } + let add_module_path id p s = { s with modules = Path.Map.add id p s.modules } + + let wrap f = match f () with + | x -> Ok x + | exception Module_type_path_substituted_away (p,mty) -> + Error (Fcm_type_substituted_away (p,mty)) + + let signature_item sc s comp = wrap (fun () -> signature_item sc s comp) + let signature sc s comp = wrap (fun () -> signature sc s comp ) + let compose s1 s2 = wrap (fun () -> compose s1 s2) + let type_declaration s t = wrap (fun () -> type_declaration s t) + +end diff --git a/ocamlmerlin_mlx/ocaml/typing/subst.mli b/ocamlmerlin_mlx/ocaml/typing/subst.mli index 3a1c85c..075d5ae 100644 --- a/ocamlmerlin_mlx/ocaml/typing/subst.mli +++ b/ocamlmerlin_mlx/ocaml/typing/subst.mli @@ -13,13 +13,12 @@ (* *) (**************************************************************************) -(* Substitutions *) +(** Substitutions *) open Types -type t -(* +(** Substitutions are used to translate a type from one context to another. This requires substituting paths for identifiers, and possibly also lowering the level of non-generic variables so that @@ -29,23 +28,33 @@ type t Indeed, non-variable node of a type are duplicated, with their levels set to generic level. That way, the resulting type is well-formed (decreasing levels), even if the original one was not. -*) -val identity: t + In the presence of local substitutions for module types, a substitution for a + type expression may fail to produce a well-formed type. In order to confine + this issue to local substitutions, the type of substitutions is split into a + safe and unsafe variant. Only unsafe substitutions may expand a module type + path into a generic module type. *) + +(** Type familly for substitutions *) +type +'k subst + +type safe = [`Safe] +type unsafe = [`Unsafe] + +type t = safe subst +(** Standard substitution*) -val add_type: Ident.t -> Path.t -> t -> t -val add_type_path: Path.t -> Path.t -> t -> t -val add_type_function: - Path.t -> params:type_expr list -> body:type_expr -> t -> t -val add_module: Ident.t -> Path.t -> t -> t -val add_module_path: Path.t -> Path.t -> t -> t -val add_modtype: Ident.t -> module_type -> t -> t -val add_modtype_path: Path.t -> module_type -> t -> t +val identity: 'a subst +val unsafe: t -> unsafe subst + +val add_type: Ident.t -> Path.t -> 'k subst -> 'k subst +val add_module: Ident.t -> Path.t -> 'k subst -> 'k subst +val add_modtype: Ident.t -> Path.t -> 'k subst -> 'k subst val for_saving: t -> t val make_loc_ghost: t -> t val reset_for_saving: unit -> unit -val change_locs: t -> Location.t -> t +val change_locs: 'k subst -> Location.t -> 'k subst val module_path: t -> Path.t -> Path.t val type_path: t -> Path.t -> Path.t @@ -60,7 +69,7 @@ val extension_constructor: val class_declaration: t -> class_declaration -> class_declaration val cltype_declaration: t -> class_type_declaration -> class_type_declaration -(* +(** When applied to a signature item, a substitution not only modifies the types present in its declaration, but also refreshes the identifier of the item. Effectively this creates new declarations, and so one should decide what the @@ -81,14 +90,43 @@ val modtype_declaration: scoping -> t -> modtype_declaration -> modtype_declaration val module_declaration: scoping -> t -> module_declaration -> module_declaration -(* Composition of substitutions: - apply (compose s1 s2) x = apply s2 (apply s1 x) *) +(** Composition of substitutions: + apply (compose s1 s2) x = apply s2 (apply s1 x) **) val compose: t -> t -> t -(* A forward reference to be filled in ctype.ml. *) -val ctype_apply_env_empty: - (type_expr list -> type_expr -> type_expr list -> type_expr) ref +module Unsafe: sig + + type t = unsafe subst + (** Unsafe substitutions introduced by [with] constraints, local substitutions + ([type t := int * int]) or recursive module check. *) + +(** Replacing a module type name S by a non-path signature is unsafe as the + packed module type [(module S)] becomes ill-formed. *) + val add_modtype: Ident.t -> module_type -> 'any subst -> t + val add_modtype_path: Path.t -> module_type -> 'any subst -> t + (** Deep editing inside a module type require to retypecheck the module, for + applicative functors in path and module aliases. *) + val add_type_path: Path.t -> Path.t -> t -> t + val add_type_function: + Path.t -> params:type_expr list -> body:type_expr -> t -> t + val add_module_path: Path.t -> Path.t -> t -> t + + type error = + | Fcm_type_substituted_away of Path.t * Types.module_type + + type 'a res := ('a, error) result + + val type_declaration: t -> type_declaration -> type_declaration res + val signature_item: scoping -> t -> signature_item -> signature_item res + val signature: scoping -> t -> signature -> signature res + + val compose: t -> t -> t res + (** Composition of substitutions is eager and fails when the two substitution + are incompatible, for example [ module type t := sig end] is not + compatible with [module type s := sig type t=(module t) end]*) + +end module Lazy : sig type module_decl = diff --git a/ocamlmerlin_mlx/ocaml/typing/tast_iterator.ml b/ocamlmerlin_mlx/ocaml/typing/tast_iterator.ml index 049dded..5f445e5 100644 --- a/ocamlmerlin_mlx/ocaml/typing/tast_iterator.ml +++ b/ocamlmerlin_mlx/ocaml/typing/tast_iterator.ml @@ -34,6 +34,8 @@ type iterator = env: iterator -> Env.t -> unit; expr: iterator -> expression -> unit; extension_constructor: iterator -> extension_constructor -> unit; + include_declaration: iterator -> include_declaration -> unit; + include_description: iterator -> include_description -> unit; location: iterator -> Location.t -> unit; module_binding: iterator -> module_binding -> unit; module_coercion: iterator -> module_coercion -> unit; @@ -62,11 +64,26 @@ type iterator = value_bindings: iterator -> (rec_flag * value_binding list) -> unit; value_description: iterator -> value_description -> unit; with_constraint: iterator -> with_constraint -> unit; + item_declaration: iterator -> item_declaration -> unit; } let iter_snd f (_, y) = f y let iter_loc sub {loc; _} = sub.location sub loc +let rec iter_loc_lid sub lid = + let open Longident in + match lid with + | Lident _ -> () + | Ldot (lid, id) -> + iter_loc sub lid; iter_loc_lid sub lid.txt; iter_loc sub id + | Lapply (lid, lid') -> + iter_loc sub lid; iter_loc_lid sub lid.txt; + iter_loc sub lid'; iter_loc_lid sub lid'.txt + +let iter_loc_lid sub {loc; txt} = + iter_loc sub {loc; txt}; + iter_loc_lid sub txt + let location _sub _l = () let attribute sub x = @@ -92,32 +109,45 @@ let class_infos sub f x = f x.ci_expr let module_type_declaration sub x = + sub.item_declaration sub (Module_type x); sub.location sub x.mtd_loc; sub.attributes sub x.mtd_attributes; iter_loc sub x.mtd_name; Option.iter (sub.module_type sub) x.mtd_type -let module_declaration sub {md_loc; md_name; md_type; md_attributes; _} = +let module_declaration sub md = + let {md_loc; md_name; md_type; md_attributes; _} = md in + sub.item_declaration sub (Module md); sub.location sub md_loc; sub.attributes sub md_attributes; iter_loc sub md_name; sub.module_type sub md_type -let module_substitution sub {ms_loc; ms_name; ms_txt; ms_attributes; _} = +let module_substitution sub ms = + let {ms_loc; ms_name; ms_txt; ms_attributes; _} = ms in + sub.item_declaration sub (Module_substitution ms); sub.location sub ms_loc; sub.attributes sub ms_attributes; iter_loc sub ms_name; - iter_loc sub ms_txt + iter_loc_lid sub ms_txt let include_infos sub f {incl_loc; incl_mod; incl_attributes; _} = sub.location sub incl_loc; sub.attributes sub incl_attributes; f incl_mod +let include_description sub incl = + include_infos sub (sub.module_type sub) incl + +let include_declaration sub incl = + include_infos sub (sub.module_expr sub) incl + let class_type_declaration sub x = + sub.item_declaration sub (Class_type x); class_infos sub (sub.class_type sub) x let class_declaration sub x = + sub.item_declaration sub (Class x); class_infos sub (sub.class_expr sub) x let structure_item sub {str_loc; str_desc; str_env; _} = @@ -138,17 +168,19 @@ let structure_item sub {str_loc; str_desc; str_env; _} = | Tstr_class_type list -> List.iter (fun (_, s, cltd) -> iter_loc sub s; sub.class_type_declaration sub cltd) list - | Tstr_include incl -> include_infos sub (sub.module_expr sub) incl + | Tstr_include incl -> sub.include_declaration sub incl | Tstr_open od -> sub.open_declaration sub od | Tstr_attribute attr -> sub.attribute sub attr let value_description sub x = + sub.item_declaration sub (Value x); sub.location sub x.val_loc; sub.attributes sub x.val_attributes; iter_loc sub x.val_name; sub.typ sub x.val_desc -let label_decl sub {ld_loc; ld_name; ld_type; ld_attributes; _} = +let label_decl sub ({ld_loc; ld_name; ld_type; ld_attributes; _} as ld) = + sub.item_declaration sub (Label ld); sub.location sub ld_loc; sub.attributes sub ld_attributes; iter_loc sub ld_name; @@ -159,6 +191,7 @@ let constructor_args sub = function | Cstr_record l -> List.iter (label_decl sub) l let constructor_decl sub x = + sub.item_declaration sub (Constructor x); sub.location sub x.cd_loc; sub.attributes sub x.cd_attributes; iter_loc sub x.cd_name; @@ -173,6 +206,7 @@ let type_kind sub = function | Ttype_open -> () let type_declaration sub x = + sub.item_declaration sub (Type x); sub.location sub x.typ_loc; sub.attributes sub x.typ_attributes; iter_loc sub x.typ_name; @@ -191,7 +225,7 @@ let type_declarations sub (_, list) = List.iter (sub.type_declaration sub) list let type_extension sub x = sub.location sub x.tyext_loc; sub.attributes sub x.tyext_attributes; - iter_loc sub x.tyext_txt; + iter_loc_lid sub x.tyext_txt; List.iter (fun (c, _) -> sub.typ sub c) x.tyext_params; List.iter (sub.extension_constructor sub) x.tyext_constructors @@ -200,7 +234,9 @@ let type_exception sub {tyexn_loc; tyexn_constructor; tyexn_attributes; _} = sub.attributes sub tyexn_attributes; sub.extension_constructor sub tyexn_constructor -let extension_constructor sub {ext_loc; ext_name; ext_kind; ext_attributes; _} = +let extension_constructor sub ec = + let {ext_loc; ext_name; ext_kind; ext_attributes; _} = ec in + sub.item_declaration sub (Extension_constructor ec); sub.location sub ext_loc; sub.attributes sub ext_attributes; iter_loc sub ext_name; @@ -209,15 +245,15 @@ let extension_constructor sub {ext_loc; ext_name; ext_kind; ext_attributes; _} = List.iter (iter_loc sub) ids; constructor_args sub ctl; Option.iter (sub.typ sub) cto - | Text_rebind (_, lid) -> iter_loc sub lid + | Text_rebind (_, lid) -> iter_loc_lid sub lid let pat_extra sub (e, loc, attrs) = sub.location sub loc; sub.attributes sub attrs; match e with - | Tpat_type (_, lid) -> iter_loc sub lid + | Tpat_type (_, lid) -> iter_loc_lid sub lid | Tpat_unpack -> () - | Tpat_open (_, lid, env) -> iter_loc sub lid; sub.env sub env + | Tpat_open (_, lid, env) -> iter_loc_lid sub lid; sub.env sub env | Tpat_constraint ct -> sub.typ sub ct let pat @@ -229,19 +265,19 @@ let pat List.iter (pat_extra sub) extra; match pat_desc with | Tpat_any -> () - | Tpat_var (_, s) -> iter_loc sub s + | Tpat_var (_, s, _) -> iter_loc sub s | Tpat_constant _ -> () - | Tpat_tuple l -> List.iter (sub.pat sub) l + | Tpat_tuple l -> List.iter (fun (_, p) -> sub.pat sub p) l | Tpat_construct (lid, _, l, vto) -> - iter_loc sub lid; + iter_loc_lid sub lid; List.iter (sub.pat sub) l; Option.iter (fun (ids, ct) -> List.iter (iter_loc sub) ids; sub.typ sub ct) vto | Tpat_variant (_, po, _) -> Option.iter (sub.pat sub) po | Tpat_record (l, _) -> - List.iter (fun (lid, _, i) -> iter_loc sub lid; sub.pat sub i) l - | Tpat_array l -> List.iter (sub.pat sub) l - | Tpat_alias (p, _, s) -> sub.pat sub p; iter_loc sub s + List.iter (fun (lid, _, i) -> iter_loc_lid sub lid; sub.pat sub i) l + | Tpat_array (_, l) -> List.iter (sub.pat sub) l + | Tpat_alias (p, _, s, _, _) -> sub.pat sub p; iter_loc sub s | Tpat_lazy p -> sub.pat sub p | Tpat_value p -> sub.pat sub (p :> pattern) | Tpat_exception p -> sub.pat sub p @@ -249,56 +285,85 @@ let pat sub.pat sub p1; sub.pat sub p2 +let extra sub = function + | Texp_constraint cty -> sub.typ sub cty + | Texp_coerce (cty1, cty2) -> + Option.iter (sub.typ sub) cty1; + sub.typ sub cty2 + | Texp_newtype _ | Texp_newtype' _ -> () + | Texp_poly cto -> Option.iter (sub.typ sub) cto + +let function_param sub fp = + sub.location sub fp.fp_loc; + match fp.fp_kind with + | Tparam_pat pat -> sub.pat sub pat + | Tparam_optional_default (pat, default_arg) -> + sub.pat sub pat; + sub.expr sub default_arg + +let function_body sub body = + match[@warning "+9"] body with + | Tfunction_body body -> + sub.expr sub body + | Tfunction_cases + { cases; loc; exp_extra; attributes; partial = _; param = _ } + -> + List.iter (sub.case sub) cases; + sub.location sub loc; + Option.iter (extra sub) exp_extra; + sub.attributes sub attributes + let expr sub {exp_loc; exp_extra; exp_desc; exp_env; exp_attributes; _} = - let extra = function - | Texp_constraint cty -> sub.typ sub cty - | Texp_coerce (cty1, cty2) -> - Option.iter (sub.typ sub) cty1; - sub.typ sub cty2 - | Texp_newtype _ -> () - | Texp_newtype' _ -> () - | Texp_poly cto -> Option.iter (sub.typ sub) cto - in + let extra x = extra sub x in sub.location sub exp_loc; sub.attributes sub exp_attributes; List.iter (fun (e, loc, _) -> extra e; sub.location sub loc) exp_extra; sub.env sub exp_env; match exp_desc with - | Texp_ident (_, lid, _) -> iter_loc sub lid + | Texp_ident (_, lid, _) -> iter_loc_lid sub lid | Texp_constant _ -> () | Texp_let (rec_flag, list, exp) -> sub.value_bindings sub (rec_flag, list); sub.expr sub exp - | Texp_function {cases; _} -> - List.iter (sub.case sub) cases + | Texp_function (params, body) -> + List.iter (function_param sub) params; + function_body sub body | Texp_apply (exp, list) -> sub.expr sub exp; - List.iter (fun (_, o) -> Option.iter (sub.expr sub) o) list - | Texp_match (exp, cases, _) -> + List.iter (function + | (_, Arg exp) -> sub.expr sub exp + | (_, Omitted ()) -> ()) + list + | Texp_match (exp, cases, effs, _) -> sub.expr sub exp; - List.iter (sub.case sub) cases - | Texp_try (exp, cases) -> + List.iter (sub.case sub) cases; + List.iter (sub.case sub) effs + | Texp_try (exp, cases, effs) -> sub.expr sub exp; - List.iter (sub.case sub) cases - | Texp_tuple list -> List.iter (sub.expr sub) list + List.iter (sub.case sub) cases; + List.iter (sub.case sub) effs + | Texp_tuple list -> List.iter (fun (_, e) -> sub.expr sub e) list | Texp_construct (lid, _, args) -> - iter_loc sub lid; + iter_loc_lid sub lid; List.iter (sub.expr sub) args | Texp_variant (_, expo) -> Option.iter (sub.expr sub) expo | Texp_record { fields; extended_expression; _} -> Array.iter (function | _, Kept _ -> () - | _, Overridden (lid, exp) -> iter_loc sub lid; sub.expr sub exp) + | _, Overridden (lid, exp) -> iter_loc_lid sub lid; sub.expr sub exp) fields; Option.iter (sub.expr sub) extended_expression; | Texp_field (exp, lid, _) -> - iter_loc sub lid; + iter_loc_lid sub lid; sub.expr sub exp | Texp_setfield (exp1, lid, _, exp2) -> - iter_loc sub lid; + iter_loc_lid sub lid; sub.expr sub exp1; sub.expr sub exp2 - | Texp_array list -> List.iter (sub.expr sub) list + | Texp_atomic_loc (exp, lid, _) -> + iter_loc sub lid; + sub.expr sub exp + | Texp_array (_, list) -> List.iter (sub.expr sub) list | Texp_ifthenelse (exp1, exp2, expo) -> sub.expr sub exp1; sub.expr sub exp2; @@ -315,7 +380,7 @@ let expr sub {exp_loc; exp_extra; exp_desc; exp_env; exp_attributes; _} = sub.expr sub exp3 | Texp_send (exp, _) -> sub.expr sub exp - | Texp_new (_, lid, _) -> iter_loc sub lid + | Texp_new (_, lid, _) -> iter_loc_lid sub lid | Texp_instvar (_, _, s) -> iter_loc sub s | Texp_setinstvar (_, _, s, exp) -> iter_loc sub s; @@ -338,16 +403,16 @@ let expr sub {exp_loc; exp_extra; exp_desc; exp_env; exp_attributes; _} = List.iter (sub.binding_op sub) ands; sub.case sub body | Texp_unreachable -> () - | Texp_extension_constructor (lid, _) -> iter_loc sub lid + | Texp_extension_constructor (lid, _) -> iter_loc_lid sub lid | Texp_open (od, e) -> sub.open_declaration sub od; sub.expr sub e - | Texp_hole -> () + | Texp_typed_hole -> () -let package_type sub {pack_fields; pack_txt; _} = - List.iter (fun (lid, p) -> iter_loc sub lid; sub.typ sub p) pack_fields; - iter_loc sub pack_txt +let package_type sub {tpt_cstrs; tpt_txt; _} = + List.iter (fun (lid, p) -> iter_loc_lid sub lid; sub.typ sub p) tpt_cstrs; + iter_loc_lid sub tpt_txt let binding_op sub {bop_loc; bop_op_name; bop_exp; _} = sub.location sub bop_loc; @@ -372,13 +437,14 @@ let signature_item sub {sig_loc; sig_desc; sig_env; _} = | Tsig_recmodule list -> List.iter (sub.module_declaration sub) list | Tsig_modtype x -> sub.module_type_declaration sub x | Tsig_modtypesubst x -> sub.module_type_declaration sub x - | Tsig_include incl -> include_infos sub (sub.module_type sub) incl + | Tsig_include incl -> sub.include_description sub incl | Tsig_class list -> List.iter (sub.class_description sub) list | Tsig_class_type list -> List.iter (sub.class_type_declaration sub) list | Tsig_open od -> sub.open_description sub od | Tsig_attribute _ -> () let class_description sub x = + sub.item_declaration sub (Class_type x); class_infos sub (sub.class_type sub) x let functor_parameter sub = function @@ -390,8 +456,8 @@ let module_type sub {mty_loc; mty_desc; mty_env; mty_attributes; _} = sub.attributes sub mty_attributes; sub.env sub mty_env; match mty_desc with - | Tmty_ident (_, lid) -> iter_loc sub lid - | Tmty_alias (_, lid) -> iter_loc sub lid + | Tmty_ident (_, lid) -> iter_loc_lid sub lid + | Tmty_alias (_, lid) -> iter_loc_lid sub lid | Tmty_signature sg -> sub.signature sub sg | Tmty_functor (arg, mtype2) -> functor_parameter sub arg; @@ -399,14 +465,14 @@ let module_type sub {mty_loc; mty_desc; mty_env; mty_attributes; _} = | Tmty_with (mtype, list) -> sub.module_type sub mtype; List.iter (fun (_, lid, e) -> - iter_loc sub lid; sub.with_constraint sub e) list + iter_loc_lid sub lid; sub.with_constraint sub e) list | Tmty_typeof mexpr -> sub.module_expr sub mexpr let with_constraint sub = function | Twith_type decl -> sub.type_declaration sub decl | Twith_typesubst decl -> sub.type_declaration sub decl - | Twith_module (_, lid) -> iter_loc sub lid - | Twith_modsubst (_, lid) -> iter_loc sub lid + | Twith_module (_, lid) -> iter_loc_lid sub lid + | Twith_modsubst (_, lid) -> iter_loc_lid sub lid | Twith_modtype mty -> sub.module_type sub mty | Twith_modtypesubst mty -> sub.module_type sub mty @@ -414,7 +480,7 @@ let with_constraint sub = function let open_description sub {open_loc; open_expr; open_env; open_attributes; _} = sub.location sub open_loc; sub.attributes sub open_attributes; - iter_snd (iter_loc sub) open_expr; + iter_snd (iter_loc_lid sub) open_expr; sub.env sub open_env let open_declaration sub {open_loc; open_expr; open_env; open_attributes; _} = @@ -443,8 +509,8 @@ let module_expr sub {mod_loc; mod_desc; mod_env; mod_attributes; _} = sub.attributes sub mod_attributes; sub.env sub mod_env; match mod_desc with - | Tmod_hole -> () - | Tmod_ident (_, lid) -> iter_loc sub lid + | Tmod_typed_hole -> () + | Tmod_ident (_, lid) -> iter_loc_lid sub lid | Tmod_structure st -> sub.structure sub st | Tmod_functor (arg, mexpr) -> functor_parameter sub arg; @@ -464,7 +530,8 @@ let module_expr sub {mod_loc; mod_desc; mod_env; mod_attributes; _} = sub.module_coercion sub c | Tmod_unpack (exp, _) -> sub.expr sub exp -let module_binding sub {mb_loc; mb_name; mb_expr; mb_attributes; _} = +let module_binding sub ({mb_loc; mb_name; mb_expr; mb_attributes; _} as mb) = + sub.item_declaration sub (Module_binding mb); sub.location sub mb_loc; sub.attributes sub mb_attributes; iter_loc sub mb_name; @@ -485,13 +552,16 @@ let class_expr sub {cl_loc; cl_desc; cl_env; cl_attributes; _} = sub.class_expr sub cl | Tcl_apply (cl, args) -> sub.class_expr sub cl; - List.iter (fun (_, e) -> Option.iter (sub.expr sub) e) args + List.iter (function + | (_, Arg exp) -> sub.expr sub exp + | (_, Omitted ()) -> ()) + args | Tcl_let (rec_flag, value_bindings, ivars, cl) -> sub.value_bindings sub (rec_flag, value_bindings); List.iter (fun (_, e) -> sub.expr sub e) ivars; sub.class_expr sub cl | Tcl_ident (_, lid, tyl) -> - iter_loc sub lid; + iter_loc_lid sub lid; List.iter (sub.typ sub) tyl | Tcl_open (od, e) -> sub.open_description sub od; @@ -504,7 +574,7 @@ let class_type sub {cltyp_loc; cltyp_desc; cltyp_env; cltyp_attributes; _} = match cltyp_desc with | Tcty_signature csg -> sub.class_signature sub csg | Tcty_constr (_, lid, list) -> - iter_loc sub lid; + iter_loc_lid sub lid; List.iter (sub.typ sub) list | Tcty_arrow (_, ct, cl) -> sub.typ sub ct; @@ -539,18 +609,21 @@ let typ sub {ctyp_loc; ctyp_desc; ctyp_env; ctyp_attributes; _} = | Ttyp_arrow (_, ct1, ct2) -> sub.typ sub ct1; sub.typ sub ct2 - | Ttyp_tuple list -> List.iter (sub.typ sub) list + | Ttyp_tuple list -> List.iter (fun (_, t) -> sub.typ sub t) list | Ttyp_constr (_, lid, list) -> - iter_loc sub lid; + iter_loc_lid sub lid; List.iter (sub.typ sub) list | Ttyp_object (list, _) -> List.iter (sub.object_field sub) list | Ttyp_class (_, lid, list) -> - iter_loc sub lid; + iter_loc_lid sub lid; List.iter (sub.typ sub) list | Ttyp_alias (ct, _) -> sub.typ sub ct | Ttyp_variant (list, _, _) -> List.iter (sub.row_field sub) list | Ttyp_poly (_, ct) -> sub.typ sub ct | Ttyp_package pack -> sub.package_type sub pack + | Ttyp_open (_, mod_ident, t) -> + iter_loc_lid sub mod_ident; + sub.typ sub t let class_structure sub {cstr_self; cstr_fields; _} = sub.pat sub cstr_self; @@ -594,7 +667,8 @@ let case sub {c_lhs; c_guard; c_rhs} = Option.iter (sub.expr sub) c_guard; sub.expr sub c_rhs -let value_binding sub {vb_loc; vb_pat; vb_expr; vb_attributes; _} = +let value_binding sub ({vb_loc; vb_pat; vb_expr; vb_attributes; _} as vb) = + sub.item_declaration sub (Value_binding vb); sub.location sub vb_loc; sub.attributes sub vb_attributes; sub.pat sub vb_pat; @@ -602,6 +676,8 @@ let value_binding sub {vb_loc; vb_pat; vb_expr; vb_attributes; _} = let env _sub _ = () +let item_declaration _sub _ = () + let default_iterator = { attribute; @@ -620,6 +696,8 @@ let default_iterator = env; expr; extension_constructor; + include_description; + include_declaration; location; module_binding; module_coercion; @@ -648,4 +726,5 @@ let default_iterator = value_bindings; value_description; with_constraint; + item_declaration; } diff --git a/ocamlmerlin_mlx/ocaml/typing/tast_iterator.mli b/ocamlmerlin_mlx/ocaml/typing/tast_iterator.mli index 96352fc..70fbfad 100644 --- a/ocamlmerlin_mlx/ocaml/typing/tast_iterator.mli +++ b/ocamlmerlin_mlx/ocaml/typing/tast_iterator.mli @@ -38,6 +38,8 @@ type iterator = env: iterator -> Env.t -> unit; expr: iterator -> expression -> unit; extension_constructor: iterator -> extension_constructor -> unit; + include_declaration: iterator -> include_declaration -> unit; + include_description: iterator -> include_description -> unit; location: iterator -> Location.t -> unit; module_binding: iterator -> module_binding -> unit; module_coercion: iterator -> module_coercion -> unit; @@ -66,6 +68,7 @@ type iterator = value_bindings: iterator -> (rec_flag * value_binding list) -> unit; value_description: iterator -> value_description -> unit; with_constraint: iterator -> with_constraint -> unit; + item_declaration: iterator -> item_declaration -> unit; } val default_iterator: iterator diff --git a/ocamlmerlin_mlx/ocaml/typing/tast_mapper.ml b/ocamlmerlin_mlx/ocaml/typing/tast_mapper.ml index 500c07c..4ab0266 100644 --- a/ocamlmerlin_mlx/ocaml/typing/tast_mapper.ml +++ b/ocamlmerlin_mlx/ocaml/typing/tast_mapper.ml @@ -77,6 +77,22 @@ let tuple2 f1 f2 (x, y) = (f1 x, f2 y) let tuple3 f1 f2 f3 (x, y, z) = (f1 x, f2 y, f3 z) let map_loc sub {loc; txt} = {loc=sub.location sub loc; txt} +let rec map_loc_lid sub lid = + let open Longident in + match lid with + | Lident id -> Lident id + | Ldot (lid, id) -> + let lid = { lid with txt = map_loc_lid sub lid.txt } in + Ldot (map_loc sub lid, map_loc sub id) + | Lapply (lid, lid') -> + let lid = { lid with txt = map_loc_lid sub lid.txt } in + let lid' = { lid' with txt = map_loc_lid sub lid'.txt } in + Lapply(map_loc sub lid, map_loc sub lid') + +let map_loc_lid sub {loc; txt} = + let txt = map_loc_lid sub txt in + map_loc sub {loc; txt} + let location _sub l = l let attribute sub x = @@ -125,7 +141,7 @@ let module_declaration sub x = let module_substitution sub x = let ms_loc = sub.location sub x.ms_loc in let ms_name = map_loc sub x.ms_name in - let ms_txt = map_loc sub x.ms_txt in + let ms_txt = map_loc_lid sub x.ms_txt in let ms_attributes = sub.attributes sub x.ms_attributes in {x with ms_loc; ms_name; ms_txt; ms_attributes} @@ -227,7 +243,7 @@ let type_declarations sub (rec_flag, list) = let type_extension sub x = let tyext_loc = sub.location sub x.tyext_loc in - let tyext_txt = map_loc sub x.tyext_txt in + let tyext_txt = map_loc_lid sub x.tyext_txt in let tyext_params = List.map (tuple2 (sub.typ sub) id) x.tyext_params in let tyext_constructors = List.map (sub.extension_constructor sub) x.tyext_constructors @@ -256,16 +272,16 @@ let extension_constructor sub x = Option.map (sub.typ sub) cto ) | Text_rebind (path, lid) -> - Text_rebind (path, map_loc sub lid) + Text_rebind (path, map_loc_lid sub lid) in let ext_attributes = sub.attributes sub x.ext_attributes in {x with ext_loc; ext_name; ext_kind; ext_attributes} let pat_extra sub = function | Tpat_unpack as d -> d - | Tpat_type (path,loc) -> Tpat_type (path, map_loc sub loc) - | Tpat_open (path,loc,env) -> - Tpat_open (path, map_loc sub loc, sub.env sub env) + | Tpat_type (path,lid) -> Tpat_type (path, map_loc_lid sub lid) + | Tpat_open (path,lid,env) -> + Tpat_open (path, map_loc_lid sub lid, sub.env sub env) | Tpat_constraint ct -> Tpat_constraint (sub.typ sub ct) let pat @@ -279,18 +295,21 @@ let pat match x.pat_desc with | Tpat_any | Tpat_constant _ -> x.pat_desc - | Tpat_var (id, s) -> Tpat_var (id, map_loc sub s) - | Tpat_tuple l -> Tpat_tuple (List.map (sub.pat sub) l) - | Tpat_construct (loc, cd, l, vto) -> + | Tpat_var (id, s, uid) -> Tpat_var (id, map_loc sub s, uid) + | Tpat_tuple l -> + Tpat_tuple (List.map (fun (label, p) -> label, sub.pat sub p) l) + | Tpat_construct (lid, cd, l, vto) -> let vto = Option.map (fun (vl,cty) -> List.map (map_loc sub) vl, sub.typ sub cty) vto in - Tpat_construct (map_loc sub loc, cd, List.map (sub.pat sub) l, vto) + Tpat_construct (map_loc_lid sub lid, cd, List.map (sub.pat sub) l, vto) | Tpat_variant (l, po, rd) -> Tpat_variant (l, Option.map (sub.pat sub) po, rd) | Tpat_record (l, closed) -> - Tpat_record (List.map (tuple3 (map_loc sub) 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, map_loc sub s) + Tpat_record + (List.map (tuple3 (map_loc_lid sub) id (sub.pat sub)) l, closed) + | Tpat_array (mut, l) -> Tpat_array (mut, List.map (sub.pat sub) l) + | Tpat_alias (p, id, s, uid, ty) -> + Tpat_alias (sub.pat sub p, id, map_loc sub s, uid, ty) | Tpat_lazy p -> Tpat_lazy (sub.pat sub p) | Tpat_value p -> (as_computation_pattern (sub.pat sub (p :> pattern))).pat_desc @@ -302,57 +321,89 @@ let pat let pat_attributes = sub.attributes sub x.pat_attributes in {x with pat_loc; pat_extra; pat_desc; pat_env; pat_attributes} -let expr sub x = - let extra = function - | Texp_constraint cty -> - Texp_constraint (sub.typ sub cty) - | Texp_coerce (cty1, cty2) -> - Texp_coerce (Option.map (sub.typ sub) cty1, sub.typ sub cty2) - | Texp_newtype _ as d -> d - | Texp_newtype' _ as d -> d - | Texp_poly cto -> Texp_poly (Option.map (sub.typ sub) cto) +let function_param sub fp = + let fp_kind = + match fp.fp_kind with + | Tparam_pat pat -> Tparam_pat (sub.pat sub pat) + | Tparam_optional_default (pat, expr) -> + let pat = sub.pat sub pat in + let expr = sub.expr sub expr in + Tparam_optional_default (pat, expr) in + let fp_loc = sub.location sub fp.fp_loc in + { fp_kind; + fp_param = fp.fp_param; + fp_arg_label = fp.fp_arg_label; + fp_partial = fp.fp_partial; + fp_newtypes = fp.fp_newtypes; + fp_loc; + } + +let extra sub = function + | Texp_constraint cty -> + Texp_constraint (sub.typ sub cty) + | Texp_coerce (cty1, cty2) -> + Texp_coerce (Option.map (sub.typ sub) cty1, sub.typ sub cty2) + | (Texp_newtype _ | Texp_newtype' _) as d -> d + | Texp_poly cto -> Texp_poly (Option.map (sub.typ sub) cto) + +let function_body sub body = + match body with + | Tfunction_body body -> + Tfunction_body (sub.expr sub body) + | Tfunction_cases { cases; partial; param; loc; exp_extra; attributes } -> + let loc = sub.location sub loc in + let cases = List.map (sub.case sub) cases in + let exp_extra = Option.map (extra sub) exp_extra in + let attributes = sub.attributes sub attributes in + Tfunction_cases { cases; partial; param; loc; exp_extra; attributes } + +let expr sub x = + let extra x = extra sub x in let exp_loc = sub.location sub x.exp_loc in let exp_extra = List.map (tuple3 extra (sub.location sub) id) x.exp_extra in let exp_env = sub.env sub x.exp_env in let exp_desc = match x.exp_desc with | Texp_ident (path, lid, vd) -> - Texp_ident (path, map_loc sub lid, vd) + Texp_ident (path, map_loc_lid sub lid, vd) | Texp_constant _ as d -> d | Texp_let (rec_flag, list, exp) -> let (rec_flag, list) = sub.value_bindings sub (rec_flag, list) in Texp_let (rec_flag, list, sub.expr sub exp) - | Texp_function { arg_label; param; cases; partial; } -> - let cases = List.map (sub.case sub) cases in - Texp_function { arg_label; param; cases; partial; } + | Texp_function (params, body) -> + let params = List.map (function_param sub) params in + let body = function_body sub body in + Texp_function (params, body) | Texp_apply (exp, list) -> Texp_apply ( sub.expr sub exp, - List.map (tuple2 id (Option.map (sub.expr sub))) list + List.map (tuple2 id (Typedtree.map_apply_arg (sub.expr sub))) list ) - | Texp_match (exp, cases, p) -> + | Texp_match (exp, cases, eff_cases, p) -> Texp_match ( sub.expr sub exp, List.map (sub.case sub) cases, + List.map (sub.case sub) eff_cases, p ) - | Texp_try (exp, cases) -> + | Texp_try (exp, exn_cases, eff_cases) -> Texp_try ( sub.expr sub exp, - List.map (sub.case sub) cases + List.map (sub.case sub) exn_cases, + List.map (sub.case sub) eff_cases ) | Texp_tuple list -> - Texp_tuple (List.map (sub.expr sub) list) + Texp_tuple (List.map (fun (label, e) -> label, sub.expr sub e) list) | Texp_construct (lid, cd, args) -> - Texp_construct (map_loc sub lid, cd, List.map (sub.expr sub) args) + Texp_construct (map_loc_lid sub lid, cd, List.map (sub.expr sub) args) | Texp_variant (l, expo) -> Texp_variant (l, Option.map (sub.expr sub) expo) | Texp_record { fields; representation; extended_expression } -> let fields = Array.map (function | label, Kept (t, mut) -> label, Kept (t, mut) | label, Overridden (lid, exp) -> - label, Overridden (map_loc sub lid, sub.expr sub exp)) + label, Overridden (map_loc_lid sub lid, sub.expr sub exp)) fields in Texp_record { @@ -360,16 +411,18 @@ let expr sub x = extended_expression = Option.map (sub.expr sub) extended_expression; } | Texp_field (exp, lid, ld) -> - Texp_field (sub.expr sub exp, map_loc sub lid, ld) + Texp_field (sub.expr sub exp, map_loc_lid sub lid, ld) | Texp_setfield (exp1, lid, ld, exp2) -> Texp_setfield ( sub.expr sub exp1, - map_loc sub lid, + map_loc_lid sub lid, ld, sub.expr sub exp2 ) - | Texp_array list -> - Texp_array (List.map (sub.expr sub) list) + | Texp_atomic_loc (exp, lid, ld) -> + Texp_atomic_loc (sub.expr sub exp, map_loc sub lid, ld) + | Texp_array (mut, list) -> + Texp_array (mut, List.map (sub.expr sub) list) | Texp_ifthenelse (exp1, exp2, expo) -> Texp_ifthenelse ( sub.expr sub exp1, @@ -404,7 +457,7 @@ let expr sub x = | Texp_new (path, lid, cd) -> Texp_new ( path, - map_loc sub lid, + map_loc_lid sub lid, cd ) | Texp_instvar (path1, path2, id) -> @@ -457,21 +510,21 @@ let expr sub x = | Texp_unreachable -> Texp_unreachable | Texp_extension_constructor (lid, path) -> - Texp_extension_constructor (map_loc sub lid, path) + Texp_extension_constructor (map_loc_lid sub lid, path) | Texp_open (od, e) -> Texp_open (sub.open_declaration sub od, sub.expr sub e) - | Texp_hole -> - Texp_hole + | Texp_typed_hole -> + Texp_typed_hole in let exp_attributes = sub.attributes sub x.exp_attributes in {x with exp_loc; exp_extra; exp_desc; exp_env; exp_attributes} let package_type sub x = - let pack_txt = map_loc sub x.pack_txt in - let pack_fields = List.map - (tuple2 (map_loc sub) (sub.typ sub)) x.pack_fields in - {x with pack_txt; pack_fields} + let tpt_txt = map_loc_lid sub x.tpt_txt in + let tpt_cstrs = List.map + (tuple2 (map_loc_lid sub) (sub.typ sub)) x.tpt_cstrs in + {x with tpt_txt; tpt_cstrs} let binding_op sub x = let bop_loc = sub.location sub x.bop_loc in @@ -534,15 +587,15 @@ let module_type sub x = let mty_env = sub.env sub x.mty_env in let mty_desc = match x.mty_desc with - | Tmty_ident (path, lid) -> Tmty_ident (path, map_loc sub lid) - | Tmty_alias (path, lid) -> Tmty_alias (path, map_loc sub lid) + | Tmty_ident (path, lid) -> Tmty_ident (path, map_loc_lid sub lid) + | Tmty_alias (path, lid) -> Tmty_alias (path, map_loc_lid sub lid) | Tmty_signature sg -> Tmty_signature (sub.signature sub sg) | Tmty_functor (arg, mtype2) -> Tmty_functor (functor_parameter sub arg, sub.module_type sub mtype2) | Tmty_with (mtype, list) -> Tmty_with ( sub.module_type sub mtype, - List.map (tuple3 id (map_loc sub) (sub.with_constraint sub)) list + List.map (tuple3 id (map_loc_lid sub) (sub.with_constraint sub)) list ) | Tmty_typeof mexpr -> Tmty_typeof (sub.module_expr sub mexpr) @@ -555,12 +608,12 @@ let with_constraint sub = function | Twith_typesubst decl -> Twith_typesubst (sub.type_declaration sub decl) | Twith_modtype mty -> Twith_modtype (sub.module_type sub mty) | Twith_modtypesubst mty -> Twith_modtypesubst (sub.module_type sub mty) - | Twith_module (path, lid) -> Twith_module (path, map_loc sub lid) - | Twith_modsubst (path, lid) -> Twith_modsubst (path, map_loc sub lid) + | Twith_module (path, lid) -> Twith_module (path, map_loc_lid sub lid) + | Twith_modsubst (path, lid) -> Twith_modsubst (path, map_loc_lid sub lid) let open_description sub od = {od with open_loc = sub.location sub od.open_loc; - open_expr = tuple2 id (map_loc sub) od.open_expr; + open_expr = tuple2 id (map_loc_lid sub) od.open_expr; open_env = sub.env sub od.open_env; open_attributes = sub.attributes sub od.open_attributes} @@ -591,8 +644,8 @@ let module_expr sub x = let mod_env = sub.env sub x.mod_env in let mod_desc = match x.mod_desc with - | Tmod_ident (path, lid) -> Tmod_ident (path, map_loc sub lid) - | Tmod_hole -> Tmod_hole + | Tmod_typed_hole -> Tmod_typed_hole + | Tmod_ident (path, lid) -> Tmod_ident (path, map_loc_lid sub lid) | Tmod_structure st -> Tmod_structure (sub.structure sub st) | Tmod_functor (arg, mexpr) -> Tmod_functor (functor_parameter sub arg, sub.module_expr sub mexpr) @@ -657,7 +710,7 @@ let class_expr sub x = | Tcl_apply (cl, args) -> Tcl_apply ( sub.class_expr sub cl, - List.map (tuple2 id (Option.map (sub.expr sub))) args + List.map (tuple2 id (Typedtree.map_apply_arg (sub.expr sub))) args ) | Tcl_let (rec_flag, value_bindings, ivars, cl) -> let (rec_flag, value_bindings) = @@ -670,7 +723,7 @@ let class_expr sub x = sub.class_expr sub cl ) | Tcl_ident (path, lid, tyl) -> - Tcl_ident (path, map_loc sub lid, List.map (sub.typ sub) tyl) + Tcl_ident (path, map_loc_lid sub lid, List.map (sub.typ sub) tyl) | Tcl_open (od, e) -> Tcl_open (sub.open_description sub od, sub.class_expr sub e) in @@ -686,7 +739,7 @@ let class_type sub x = | Tcty_constr (path, lid, list) -> Tcty_constr ( path, - map_loc sub lid, + map_loc_lid sub lid, List.map (sub.typ sub) list ) | Tcty_arrow (label, ct, cl) -> @@ -733,15 +786,16 @@ let typ sub x = | Ttyp_var _ as d -> d | Ttyp_arrow (label, ct1, ct2) -> Ttyp_arrow (label, sub.typ sub ct1, sub.typ sub ct2) - | Ttyp_tuple list -> Ttyp_tuple (List.map (sub.typ sub) list) + | Ttyp_tuple list -> + Ttyp_tuple (List.map (fun (label, t) -> label, sub.typ sub t) list) | Ttyp_constr (path, lid, list) -> - Ttyp_constr (path, map_loc sub lid, List.map (sub.typ sub) list) + Ttyp_constr (path, map_loc_lid sub lid, List.map (sub.typ sub) list) | Ttyp_object (list, closed) -> Ttyp_object ((List.map (sub.object_field sub) list), closed) | Ttyp_class (path, lid, list) -> Ttyp_class (path, - map_loc sub lid, + map_loc_lid sub lid, List.map (sub.typ sub) list ) | Ttyp_alias (ct, s) -> @@ -752,6 +806,8 @@ let typ sub x = Ttyp_poly (sl, sub.typ sub ct) | Ttyp_package pack -> Ttyp_package (sub.package_type sub pack) + | Ttyp_open (path, mod_ident, t) -> + Ttyp_open (path, map_loc_lid sub mod_ident, sub.typ sub t) in let ctyp_attributes = sub.attributes sub x.ctyp_attributes in {x with ctyp_loc; ctyp_desc; ctyp_env; ctyp_attributes} @@ -813,11 +869,12 @@ let value_bindings sub (rec_flag, list) = let case : type k . mapper -> k case -> k case - = fun sub {c_lhs; c_guard; c_rhs} -> + = fun sub {c_lhs; c_guard; c_rhs; c_cont} -> { c_lhs = sub.pat sub c_lhs; c_guard = Option.map (sub.expr sub) c_guard; c_rhs = sub.expr sub c_rhs; + c_cont } let value_binding sub x = @@ -825,7 +882,8 @@ let value_binding sub x = let vb_pat = sub.pat sub x.vb_pat in let vb_expr = sub.expr sub x.vb_expr in let vb_attributes = sub.attributes sub x.vb_attributes in - {vb_loc; vb_pat; vb_expr; vb_attributes} + let vb_rec_kind = x.vb_rec_kind in + {vb_loc; vb_pat; vb_expr; vb_attributes; vb_rec_kind} let env _sub x = x diff --git a/ocamlmerlin_mlx/ocaml/typing/typeclass.ml b/ocamlmerlin_mlx/ocaml/typing/typeclass.ml index 82b8c55..929ee62 100644 --- a/ocamlmerlin_mlx/ocaml/typing/typeclass.ml +++ b/ocamlmerlin_mlx/ocaml/typing/typeclass.ml @@ -19,7 +19,7 @@ open Path open Types open Typecore open Typetexp -open Format + type 'a class_info = { cls_id : Ident.t; @@ -47,7 +47,7 @@ type class_type_info = { type 'a full_class = { id : Ident.t; - id_loc : tag loc; + id_loc : string loc; clty: class_declaration; ty_id: Ident.t; cltydef: class_type_declaration; @@ -93,7 +93,7 @@ type error = | Bad_class_type_parameters of Ident.t * type_expr list * type_expr list | Class_match_failure of Ctype.class_match_failure list | Unbound_val of string - | Unbound_type_var of (formatter -> unit) * Ctype.closed_class_failure + | Unbound_type_var of Format_doc.t * Ctype.closed_class_failure | Non_generalizable_class of { id : Ident.t ; clty : Types.class_declaration @@ -268,9 +268,15 @@ let type_constraint val_env sty sty' loc = let make_method loc cl_num expr = let open Ast_helper in let mkid s = mkloc s loc in - Exp.fun_ ~loc:expr.pexp_loc Nolabel None - (Pat.alias ~loc (Pat.var ~loc (mkid "self-*")) (mkid ("self-" ^ cl_num))) - expr + let pat = + Pat.alias ~loc (Pat.var ~loc (mkid "self-*")) (mkid ("self-" ^ cl_num)) + in + Exp.function_ ~loc:expr.pexp_loc + [ { pparam_desc = Pparam_val (Nolabel, None, pat); + pparam_loc = pat.ppat_loc; + } + ] + None (Pfunction_body expr) (*******************************) @@ -458,7 +464,7 @@ let enter_ancestor_met ~loc name ~sign ~meths ~cl_num ~ty ~attrs met_env = { val_type = ty; val_kind = kind; val_attributes = attrs; Types.val_loc = loc; - val_uid = Uid.mk ~current_unit:(Env.get_unit_name ()) } + val_uid = Uid.mk ~current_unit:(Env.get_current_unit ()) } in Env.enter_value ~check name desc met_env @@ -473,7 +479,7 @@ let add_self_met loc id sign self_var_kind vars cl_num { val_type = ty; val_kind = kind; val_attributes = attrs; Types.val_loc = loc; - val_uid = Uid.mk ~current_unit:(Env.get_unit_name ()) } + val_uid = Uid.mk ~current_unit:(Env.get_current_unit ()) } in Env.add_value ~check id desc met_env @@ -488,7 +494,7 @@ let add_instance_var_met loc label id sign cl_num attrs met_env = { val_type = ty; val_kind = kind; val_attributes = attrs; Types.val_loc = loc; - val_uid = Uid.mk ~current_unit:(Env.get_unit_name ()) } + val_uid = Uid.mk ~current_unit:(Env.get_current_unit ()) } in Env.add_value id desc met_env @@ -647,10 +653,9 @@ let rec class_field_first_pass self_loc cl_num sign self_scope acc cf = with_attrs (fun () -> let cty = - Ctype.with_local_level_if_principal + Ctype.with_local_level_generalize_structure_if_principal (fun () -> Typetexp.transl_simple_type val_env ~closed:false styp) - ~post:(fun cty -> Ctype.generalize_structure cty.ctyp_type) in add_instance_variable ~strict:true loc val_env label.txt mut Virtual cty.ctyp_type sign; @@ -687,8 +692,7 @@ let rec class_field_first_pass self_loc cl_num sign self_scope acc cf = No_overriding ("instance variable", label.txt))) end; let definition = - Ctype.with_local_level_if_principal - ~post:Typecore.generalize_structure_exp + Ctype.with_local_level_generalize_structure_if_principal (fun () -> type_exp val_env sdefinition) in add_instance_variable ~strict:true loc val_env @@ -772,7 +776,7 @@ let rec class_field_first_pass self_loc cl_num sign self_scope acc cf = Ctype.unify val_env (Ctype.newty (Tpoly (ty', []))) ty; Ctype.unify val_env (type_approx val_env sbody) ty' | Tpoly (ty1, tl) -> - let _, ty1' = Ctype.instance_poly false tl ty1 in + let _, ty1' = Ctype.instance_poly ~fixed:false tl ty1 in let ty2 = type_approx val_env sbody in Ctype.unify val_env ty2 ty1' | _ -> assert false @@ -1021,7 +1025,7 @@ and class_structure cl_num virt self_scope final val_env met_env loc raise(Error(loc, val_env, Closing_self_type sign)); end; (* Typing of method bodies *) - Ctype.generalize_class_signature_spine val_env sign; + Ctype.generalize_class_signature_spine sign; let self_var_kind = match virt with | Virtual -> Self_virtual(ref meths) @@ -1029,9 +1033,9 @@ and class_structure cl_num virt self_scope final val_env met_env loc in let met_env = List.fold_right - (fun {pv_id; pv_type; pv_loc; pv_as_var; pv_attributes} met_env -> + (fun {pv_id; pv_type; pv_loc; pv_kind; pv_attributes} met_env -> add_self_met pv_loc pv_id sign self_var_kind vars - cl_num pv_as_var pv_type pv_attributes met_env) + cl_num (pv_kind=As_var) pv_type pv_attributes met_env) self_pat_vars met_env in let fields = @@ -1118,19 +1122,22 @@ and class_expr_aux cl_num val_env met_env virt self_scope scl = let scases = [ Exp.case (Pat.construct ~loc - (mknoloc (Longident.(Ldot (Lident "*predef*", "Some")))) + (mknoloc (Longident.(Ldot (mknoloc (Lident "*predef*"), + mknoloc "Some")))) (Some ([], Pat.var ~loc (mknoloc "*sth*")))) (Exp.ident ~loc (mknoloc (Longident.Lident "*sth*"))); Exp.case (Pat.construct ~loc - (mknoloc (Longident.(Ldot (Lident "*predef*", "None")))) + (mknoloc (Longident.(Ldot (mknoloc (Lident "*predef*"), + mknoloc "None")))) None) default; ] in let smatch = - Exp.match_ ~loc (Exp.ident ~loc (mknoloc (Longident.Lident "*opt*"))) + Exp.match_ ~loc + (Exp.ident ~loc (mknoloc (Longident.Lident "*opt*"))) scases in let sfun = @@ -1144,13 +1151,9 @@ and class_expr_aux cl_num val_env met_env virt self_scope scl = class_expr cl_num val_env met_env virt self_scope sfun | Pcl_fun (l, None, spat, scl') -> let (pat, pv, val_env', met_env) = - Ctype.with_local_level_if_principal + Ctype.with_local_level_generalize_structure_if_principal (fun () -> Typecore.type_class_arg_pattern cl_num val_env met_env l spat) - ~post: begin fun (pat, _, _, _) -> - let gen {pat_type = ty} = Ctype.generalize_structure ty in - iter_pattern gen pat - end in let pv = List.map @@ -1160,7 +1163,8 @@ and class_expr_aux cl_num val_env met_env virt self_scope scl = let vd = Env.find_value path val_env' in (id, {exp_desc = - Texp_ident(path, mknoloc (Longident.Lident (Ident.name id)), vd); + Texp_ident(path, mknoloc + (Longident.Lident (Ident.name id)), vd); exp_loc = Location.none; exp_extra = []; exp_type = Ctype.instance vd.val_type; exp_attributes = []; (* check *) @@ -1175,8 +1179,8 @@ and class_expr_aux cl_num val_env met_env virt self_scope scl = in let partial = let dummy = type_exp val_env (Ast_helper.Exp.unreachable ()) in - Typecore.check_partial Modules_rejected val_env pat.pat_type pat.pat_loc - [{c_lhs = pat; c_guard = None; c_rhs = dummy}] + Typecore.check_partial val_env pat.pat_type pat.pat_loc + [{c_lhs = pat; c_cont = None; c_guard = None; c_rhs = dummy}] in let cl = Ctype.with_raised_nongen_level @@ -1194,9 +1198,8 @@ and class_expr_aux cl_num val_env met_env virt self_scope scl = | Pcl_apply (scl', sargs) -> assert (sargs <> []); let cl = - Ctype.with_local_level_if_principal + Ctype.with_local_level_generalize_structure_if_principal (fun () -> class_expr cl_num val_env met_env virt self_scope scl') - ~post:(fun cl -> Ctype.generalize_class_type_structure cl.cl_type) in let rec nonopt_labels ls ty_fun = match ty_fun with @@ -1215,7 +1218,7 @@ and class_expr_aux cl_num val_env met_env virt self_scope scl = Location.prerr_warning cl.cl_loc (Warnings.Labels_omitted - (List.map Printtyp.string_of_label + (List.map Asttypes.string_of_label (List.filter ((<>) Nolabel) labels))); true end @@ -1227,7 +1230,7 @@ and class_expr_aux cl_num val_env met_env virt self_scope scl = let name = Btype.label_name l and optional = Btype.is_optional l in let use_arg sarg l' = - Some ( + Arg ( if not optional || Btype.is_optional l' then type_argument val_env sarg ty ty0 else @@ -1238,7 +1241,7 @@ and class_expr_aux cl_num val_env met_env virt self_scope scl = ) in let eliminate_optional_arg () = - Some (option_none val_env ty0 Location.none) + Arg (option_none val_env ty0 Location.none) in let remaining_sargs, arg = if ignore_labels then begin @@ -1263,16 +1266,20 @@ and class_expr_aux cl_num val_env met_env virt self_scope scl = if not optional && Btype.is_optional l' then Location.prerr_warning sarg.pexp_loc (Warnings.Nonoptional_label - (Printtyp.string_of_label l)); + (Asttypes.string_of_label l)); remaining_sargs, use_arg sarg l' | None -> sargs, if Btype.is_optional l && List.mem_assoc Nolabel sargs then eliminate_optional_arg () else - None + Omitted () + in + let omitted = + match arg with + | Omitted () -> (l,ty0) :: omitted + | Arg _ -> omitted in - let omitted = if arg = None then (l,ty0) :: omitted else omitted in type_args ((l,arg)::args) omitted ty_fun ty_fun0 remaining_sargs | _ -> match sargs with @@ -1302,17 +1309,18 @@ and class_expr_aux cl_num val_env met_env virt self_scope scl = Typecore.type_let In_class_def val_env rec_flag sdefs in let (vals, met_env) = List.fold_right - (fun (id, _id_loc, _typ) (vals, met_env) -> + (fun (id, _id_loc, _typ, _uid) (vals, met_env) -> let path = Pident id in (* do not mark the value as used *) let vd = Env.find_value path val_env in let ty = - Ctype.with_local_level ~post:Ctype.generalize + Ctype.with_local_level_generalize (fun () -> Ctype.instance vd.val_type) in let expr = {exp_desc = - Texp_ident(path, mknoloc(Longident.Lident (Ident.name id)),vd); + Texp_ident(path, mknoloc( + Longident.Lident (Ident.name id)),vd); exp_loc = Location.none; exp_extra = []; exp_type = ty; exp_attributes = []; @@ -1335,8 +1343,9 @@ and class_expr_aux cl_num val_env met_env virt self_scope scl = ([], met_env) in let cl = class_expr cl_num val_env met_env virt self_scope scl' in - let () = if rec_flag = Recursive then - check_recursive_bindings val_env defs + let defs = match rec_flag with + | Recursive -> annotate_recursive_bindings val_env defs + | Nonrecursive -> defs in rc {cl_desc = Tcl_let (rec_flag, defs, vals, cl); cl_loc = scl.pcl_loc; @@ -1364,8 +1373,10 @@ and class_expr_aux cl_num val_env met_env virt self_scope scl = cl, clty end ~post: begin fun ({cl_type=cl}, {cltyp_type=clty}) -> - Ctype.limited_generalize_class_type (Btype.self_type_row cl) cl; - Ctype.limited_generalize_class_type (Btype.self_type_row clty) clty; + Ctype.limited_generalize_class_type + (Btype.self_type_row cl) ~inside:cl; + Ctype.limited_generalize_class_type + (Btype.self_type_row clty) ~inside:clty; end in begin match @@ -1440,7 +1451,7 @@ let temp_abbrev loc arity uid = let ty_td = {type_params = !params; type_arity = arity; - type_kind = Type_abstract; + type_kind = Type_abstract Definition; type_private = Public; type_manifest = Some ty; type_variance = Variance.unknown_signature ~injective:false ~arity; @@ -1466,8 +1477,8 @@ let initial_env define_class approx (* Temporary type for the class constructor *) let constr_type = - Ctype.with_local_level_if_principal (fun () -> approx cl.pci_expr) - ~post:Ctype.generalize_structure + Ctype.with_local_level_generalize_structure_if_principal + (fun () -> approx cl.pci_expr) in let dummy_cty = Cty_signature (Ctype.new_class_signature ()) in let dummy_class = @@ -1552,8 +1563,10 @@ let class_infos define_class kind end ~post: begin fun (_, params, _, _, typ, sign) -> (* Generalize the row variable *) - List.iter (Ctype.limited_generalize sign.csig_self_row) params; - Ctype.limited_generalize_class_type sign.csig_self_row typ; + List.iter + (fun inside -> Ctype.limited_generalize sign.csig_self_row ~inside) + params; + Ctype.limited_generalize_class_type sign.csig_self_row ~inside:typ; end in (* Check the abbreviation for the object type *) @@ -1664,7 +1677,7 @@ let class_infos define_class kind { type_params = obj_params; type_arity = arity; - type_kind = Type_abstract; + type_kind = Type_abstract Definition; type_private = Public; type_manifest = Some obj_ty; type_variance = Variance.unknown_signature ~injective:false ~arity; @@ -1702,31 +1715,20 @@ let class_infos define_class kind arity, pub_meths, List.rev !coercion_locs, expr) :: res, env) -let final_decl env define_class - (cl, id, clty, ty_id, cltydef, obj_id, obj_abbr, ci_params, - arity, pub_meths, coe, expr) = - let cl_abbr = cltydef.clty_hash_type in - - begin try Ctype.collapse_conj_params env clty.cty_params +let collapse_conj_class_params env (cl, id, clty, _, _, _, _, _, _, _, _, _) = + try Ctype.collapse_conj_params env clty.cty_params with Ctype.Unify err -> raise(Error(cl.pci_loc, env, Non_collapsable_conjunction (id, clty, err))) - end; - - List.iter Ctype.generalize clty.cty_params; - Ctype.generalize_class_type clty.cty_type; - Option.iter Ctype.generalize clty.cty_new; - List.iter Ctype.generalize obj_abbr.type_params; - Option.iter Ctype.generalize obj_abbr.type_manifest; - List.iter Ctype.generalize cl_abbr.type_params; - Option.iter Ctype.generalize cl_abbr.type_manifest; +let final_decl env define_class + (cl, id, clty, ty_id, cltydef, obj_id, obj_abbr, ci_params, + arity, pub_meths, coe, expr) = Ctype.nongen_vars_in_class_declaration clty |> Option.iter (fun vars -> let nongen_vars = Btype.TypeSet.elements vars in raise(Error(cl.pci_loc, env , Non_generalizable_class { id; clty; nongen_vars })); ); - begin match Ctype.closed_class clty.cty_params (Btype.signature_of_class_type clty.cty_type) @@ -1735,8 +1737,11 @@ let final_decl env define_class | Some reason -> let printer = if define_class - then function ppf -> Printtyp.class_declaration id ppf clty - else function ppf -> Printtyp.cltype_declaration id ppf cltydef + then + Format_doc.doc_printf "%a" (Printtyp.Doc.class_declaration id) clty + else + Format_doc.doc_printf "%a" + (Printtyp.Doc.cltype_declaration id) cltydef in raise(Error(cl.pci_loc, env, Unbound_type_var(printer, reason))) end; @@ -1840,18 +1845,19 @@ let type_classes define_class approx kind env cls = Ident.create_scoped ~scope cl.pci_name.txt, Ident.create_scoped ~scope cl.pci_name.txt, Ident.create_scoped ~scope cl.pci_name.txt, - Uid.mk ~current_unit:(Env.get_unit_name ()) + Uid.mk ~current_unit:(Env.get_current_unit ()) )) cls in let res, newenv = - Ctype.with_local_level_for_class begin fun () -> + Ctype.with_local_level_generalize_for_class begin fun () -> let (res, env) = List.fold_left (initial_env define_class approx) ([], env) cls in let (res, env) = List.fold_right (class_infos define_class kind) res ([], env) in + List.iter (collapse_conj_class_params env) res; res, env end in @@ -1931,30 +1937,45 @@ let () = (*******************************) (* Check that there is no references through recursive modules (GPR#6491) *) -let rec check_recmod_class_type env cty = +let rec check_recmod_class_type env name cty = match cty.pcty_desc with | Pcty_constr(lid, _) -> - ignore (Env.lookup_cltype ~use:false ~loc:lid.loc lid.txt env) + begin try + ignore (Env.lookup_cltype ~use:false ~loc:lid.loc lid.txt env) + with + | Env.Error + (Lookup_error + (location, env, + Illegal_reference_to_recursive_module { container; unbound; })) -> + Env.lookup_error + location env + (Illegal_reference_to_recursive_class_type + { container; + unbound; + unbound_class_type = lid.txt; + container_class_type = name.txt; + }) + end | Pcty_extension _ -> () | Pcty_arrow(_, _, cty) -> - check_recmod_class_type env cty + check_recmod_class_type env name cty | Pcty_open(od, cty) -> let _, env = !type_open_descr env od in - check_recmod_class_type env cty + check_recmod_class_type env name cty | Pcty_signature csig -> - check_recmod_class_sig env csig + check_recmod_class_sig env name csig -and check_recmod_class_sig env csig = +and check_recmod_class_sig env name csig = List.iter (fun ctf -> match ctf.pctf_desc with - | Pctf_inherit cty -> check_recmod_class_type env cty + | Pctf_inherit cty -> check_recmod_class_type env name cty | Pctf_val _ | Pctf_method _ | Pctf_constraint _ | Pctf_attribute _ | Pctf_extension _ -> ()) csig.pcsig_fields let check_recmod_decl env sdecl = - check_recmod_class_type env sdecl.pci_expr + check_recmod_class_type env sdecl.pci_name sdecl.pci_expr (* Approximate the class declaration as class ['params] id = object end *) let approx_class sdecl = @@ -1968,75 +1989,92 @@ let approx_class_declarations env sdecls = List.iter (check_recmod_decl env) sdecls; decls, env + + (*******************************) (* Error report *) -open Format +open Format_doc -let non_virtual_string_of_kind = function +let non_virtual_string_of_kind : kind -> string = function | Object -> "object" | Class -> "non-virtual class" | Class_type -> "non-virtual class type" -let report_error env ppf = function +module Style=Misc.Style +module Printtyp = Printtyp.Doc + +let out_type ppf t = Style.as_inline_code !Oprint.out_type ppf t +let quoted_type ppf t = Style.as_inline_code Printtyp.type_expr ppf t + +let report_error_doc env ppf = + let pp_args ppf args = + let args = List.map (Out_type.tree_of_typexp Type) args in + Style.as_inline_code !Oprint.out_type_args ppf args + in + function | Repeated_parameter -> fprintf ppf "A type parameter occurs several times" | Unconsistent_constraint err -> + let msg = Format_doc.Doc.msg in fprintf ppf "@[The class constraints are not consistent.@ "; - Printtyp.report_unification_error ppf env err - (fun ppf -> fprintf ppf "Type") - (fun ppf -> fprintf ppf "is not compatible with type"); + Errortrace_report.unification ppf env err + (msg "Type") + (msg "is not compatible with type"); fprintf ppf "@]" | Field_type_mismatch (k, m, err) -> - Printtyp.report_unification_error ppf env err - (function ppf -> - fprintf ppf "The %s %s@ has type" k m) - (function ppf -> - fprintf ppf "but is expected to have type") + let msg = Format_doc.doc_printf in + Errortrace_report.unification ppf env err + (msg "The %s %a@ has type" k Style.inline_code m) + (msg "but is expected to have type") | Unexpected_field (ty, lab) -> fprintf ppf "@[@[<2>This object is expected to have type :@ %a@]\ - @ This type does not have a method %s." - Printtyp.type_expr ty lab + @ This type does not have a method %a." + quoted_type ty + Style.inline_code lab | Structure_expected clty -> fprintf ppf "@[This class expression is not a class structure; it has type@ %a@]" - Printtyp.class_type clty + (Style.as_inline_code Printtyp.class_type) clty | Cannot_apply _ -> fprintf ppf "This class expression is not a class function, it cannot be applied" | Apply_wrong_label l -> - let mark_label = function - | Nolabel -> "out label" - | l -> sprintf " label %s" (Btype.prefixed_label_name l) in - fprintf ppf "This argument cannot be applied with%s" (mark_label l) + let mark_label ppf = function + | Nolabel -> fprintf ppf "without label" + | l -> fprintf ppf "with label %a" + Style.inline_code (Btype.prefixed_label_name l) + in + fprintf ppf "This argument cannot be applied %a" mark_label l | Pattern_type_clash ty -> (* XXX Trace *) (* XXX Revoir message d'erreur | Improve error message *) fprintf ppf "@[%s@ %a@]" "This pattern cannot match self: it only matches values of type" - Printtyp.type_expr ty + quoted_type ty | Unbound_class_2 cl -> fprintf ppf "@[The class@ %a@ is not yet completely defined@]" - Printtyp.longident cl + (Style.as_inline_code Printtyp.longident) cl | Unbound_class_type_2 cl -> fprintf ppf "@[The class type@ %a@ is not yet completely defined@]" - Printtyp.longident cl + (Style.as_inline_code Printtyp.longident) cl | Abbrev_type_clash (abbrev, actual, expected) -> (* XXX Afficher une trace ? | Print a trace? *) - Printtyp.prepare_for_printing [abbrev; actual; expected]; + Out_type.prepare_for_printing [abbrev; actual; expected]; fprintf ppf "@[The abbreviation@ %a@ expands to type@ %a@ \ but is used with type@ %a@]" - !Oprint.out_type (Printtyp.tree_of_typexp Type abbrev) - !Oprint.out_type (Printtyp.tree_of_typexp Type actual) - !Oprint.out_type (Printtyp.tree_of_typexp Type expected) + out_type (Out_type.tree_of_typexp Type abbrev) + out_type (Out_type.tree_of_typexp Type actual) + out_type (Out_type.tree_of_typexp Type expected) | Constructor_type_mismatch (c, err) -> - Printtyp.report_unification_error ppf env err - (function ppf -> - fprintf ppf "The expression \"new %s\" has type" c) - (function ppf -> - fprintf ppf "but is used with type") + let msg = Format_doc.doc_printf in + Errortrace_report.unification ppf env err + (msg "The expression %a has type" + Style.inline_code ("new " ^ c) + ) + (msg "but is used with type") | Virtual_class (kind, mets, vals) -> let kind = non_virtual_string_of_kind kind in let missings = @@ -2049,46 +2087,46 @@ let report_error env ppf = function "@[This %s has virtual %s.@ \ @[<2>The following %s are virtual : %a@]@]" kind missings missings - (pp_print_list ~pp_sep:pp_print_space pp_print_string) (mets @ vals) + (pp_print_list ~pp_sep:pp_print_space Style.inline_code) (mets @ vals) | Undeclared_methods(kind, mets) -> let kind = non_virtual_string_of_kind kind in fprintf ppf "@[This %s has undeclared virtual methods.@ \ @[<2>The following methods were not declared : %a@]@]" - kind (pp_print_list ~pp_sep:pp_print_space pp_print_string) mets + kind (pp_print_list ~pp_sep:pp_print_space Style.inline_code) mets | Parameter_arity_mismatch(lid, expected, provided) -> fprintf ppf "@[The class constructor %a@ expects %i type argument(s),@ \ but is here applied to %i type argument(s)@]" - Printtyp.longident lid expected provided + (Style.as_inline_code Printtyp.longident) lid expected provided | Parameter_mismatch err -> - Printtyp.report_unification_error ppf env err - (function ppf -> - fprintf ppf "The type parameter") - (function ppf -> - fprintf ppf "does not meet its constraint: it should be") + let msg = Format_doc.Doc.msg in + Errortrace_report.unification ppf env err + (msg "The type parameter") + (msg "does not meet its constraint: it should be") | Bad_parameters (id, params, cstrs) -> - Printtyp.prepare_for_printing (params @ cstrs); + Out_type.prepare_for_printing (params @ cstrs); fprintf ppf "@[The abbreviation %a@ is used with parameter(s)@ %a@ \ which are incompatible with constraint(s)@ %a@]" - Printtyp.ident id - !Oprint.out_type_args (List.map (Printtyp.tree_of_typexp Type) params) - !Oprint.out_type_args (List.map (Printtyp.tree_of_typexp Type) cstrs) + (Style.as_inline_code Printtyp.ident) id + pp_args params + pp_args cstrs | Bad_class_type_parameters (id, params, cstrs) -> - Printtyp.prepare_for_printing (params @ cstrs); + let pp_hash ppf id = fprintf ppf "#%a" Printtyp.ident id in + Out_type.prepare_for_printing (params @ cstrs); fprintf ppf - "@[The class type #%a@ is used with parameter(s)@ %a,@ \ + "@[The class type %a@ is used with parameter(s)@ %a,@ \ whereas the class type definition@ constrains@ \ those parameters to be@ %a@]" - Printtyp.ident id - !Oprint.out_type_args (List.map (Printtyp.tree_of_typexp Type) params) - !Oprint.out_type_args (List.map (Printtyp.tree_of_typexp Type) cstrs) + (Style.as_inline_code pp_hash) id + pp_args params + pp_args cstrs | Class_match_failure error -> - Includeclass.report_error Type ppf error + Includeclass.report_error_doc Type ppf error | Unbound_val lab -> - fprintf ppf "Unbound instance variable %s" lab - | Unbound_type_var (printer, reason) -> + fprintf ppf "Unbound instance variable %a" Style.inline_code lab + | Unbound_type_var (msg, reason) -> let print_reason ppf { Ctype.free_variable; meth; meth_ty; } = let (ty0, kind) = free_variable in let ty1 = @@ -2096,27 +2134,28 @@ let report_error env ppf = function | Type_variable -> ty0 | Row_variable -> Btype.newgenty(Tobject(ty0, ref None)) in - Printtyp.add_type_to_preparation meth_ty; - Printtyp.add_type_to_preparation ty1; + Out_type.add_type_to_preparation meth_ty; + Out_type.add_type_to_preparation ty1; fprintf ppf - "The method %s@ has type@;<1 2>%a@ where@ %a@ is unbound" - meth - !Oprint.out_type (Printtyp.tree_of_typexp Type meth_ty) - !Oprint.out_type (Printtyp.tree_of_typexp Type ty0) + "The method %a@ has type@;<1 2>%a@ where@ %a@ is unbound" + Style.inline_code meth + out_type (Out_type.tree_of_typexp Type meth_ty) + out_type (Out_type.tree_of_typexp Type ty0) in fprintf ppf - "@[@[Some type variables are unbound in this type:@;<1 2>%t@]@ \ + "@[@[Some type variables are unbound in this type:@;<1 2>%a@]@ \ @[%a@]@]" - printer print_reason reason + pp_doc msg print_reason reason | Non_generalizable_class {id; clty; nongen_vars } -> let[@manual.ref "ss:valuerestriction"] manual_ref = [ 6; 1; 2] in - Printtyp.prepare_for_printing nongen_vars; + Out_type.prepare_for_printing nongen_vars; fprintf ppf "@[The type of this class,@ %a,@ \ contains the non-generalizable type variable(s): %a.@ %a@]" - (Printtyp.class_declaration id) clty + (Style.as_inline_code @@ Printtyp.class_declaration id) clty (pp_print_list ~pp_sep:(fun f () -> fprintf f ",@ ") - Printtyp.prepared_type_scheme) nongen_vars + (Style.as_inline_code Out_type.prepared_type_scheme) + ) nongen_vars Misc.print_see_manual manual_ref | Cannot_coerce_self ty -> @@ -2124,22 +2163,22 @@ let report_error env ppf = function "@[The type of self cannot be coerced to@ \ the type of the current class:@ %a.@.\ Some occurrences are contravariant@]" - Printtyp.type_scheme ty + (Style.as_inline_code Printtyp.type_scheme) ty | Non_collapsable_conjunction (id, clty, err) -> + let msg = Format_doc.Doc.msg in fprintf ppf "@[The type of this class,@ %a,@ \ contains non-collapsible conjunctive types in constraints.@ %t@]" - (Printtyp.class_declaration id) clty - (fun ppf -> Printtyp.report_unification_error ppf env err - (fun ppf -> fprintf ppf "Type") - (fun ppf -> fprintf ppf "is not compatible with type") + (Style.as_inline_code @@ Printtyp.class_declaration id) clty + (fun ppf -> Errortrace_report.unification ppf env err + (msg "Type") + (msg "is not compatible with type") ) | Self_clash err -> - Printtyp.report_unification_error ppf env err - (function ppf -> - fprintf ppf "This object is expected to have type") - (function ppf -> - fprintf ppf "but actually has type") + let msg = Format_doc.Doc.msg in + Errortrace_report.unification ppf env err + (msg "This object is expected to have type") + (msg "but actually has type") | Mutability_mismatch (_lab, mut) -> let mut1, mut2 = if mut = Immutable then "mutable", "immutable" @@ -2148,31 +2187,37 @@ let report_error env ppf = function "@[The instance variable is %s;@ it cannot be redefined as %s@]" mut1 mut2 | No_overriding (_, "") -> - fprintf ppf "@[This inheritance does not override any method@ %s@]" - "instance variable" + fprintf ppf + "@[This inheritance does not override any methods@ \ + or instance variables@ but is explicitly marked as@ \ + overriding with %a.@]" + Style.inline_code "!" | No_overriding (kind, name) -> - fprintf ppf "@[The %s `%s'@ has no previous definition@]" kind name + fprintf ppf "@[The %s %a@ has no previous definition@]" kind + Style.inline_code name | Duplicate (kind, name) -> - fprintf ppf "@[The %s `%s'@ has multiple definitions in this object@]" - kind name + fprintf ppf "@[The %s %a@ has multiple definitions in this object@]" + kind Style.inline_code name | Closing_self_type sign -> fprintf ppf "@[Cannot close type of object literal:@ %a@,\ it has been unified with the self type of a class that is not yet@ \ completely defined.@]" - Printtyp.type_scheme sign.csig_self + (Style.as_inline_code Printtyp.type_scheme) sign.csig_self -let report_error env ppf err = +let report_error_doc env ppf err = Printtyp.wrap_printing_env ~error:true - env (fun () -> report_error env ppf err) + env (fun () -> report_error_doc env ppf err) let () = Location.register_error_of_exn (function | Error (loc, env, err) -> - Some (Location.error_of_printer ~loc (report_error env) err) + Some (Location.error_of_printer ~loc (report_error_doc env) err) | Error_forward err -> Some err | _ -> None ) + +let report_error = Format_doc.compat1 report_error_doc diff --git a/ocamlmerlin_mlx/ocaml/typing/typeclass.mli b/ocamlmerlin_mlx/ocaml/typing/typeclass.mli index cdecc8d..89e230d 100644 --- a/ocamlmerlin_mlx/ocaml/typing/typeclass.mli +++ b/ocamlmerlin_mlx/ocaml/typing/typeclass.mli @@ -15,8 +15,6 @@ open Asttypes open Types -open Format - type 'a class_info = { cls_id : Ident.t; cls_id_loc : string loc; @@ -111,7 +109,7 @@ type error = | Bad_class_type_parameters of Ident.t * type_expr list * type_expr list | Class_match_failure of Ctype.class_match_failure list | Unbound_val of string - | Unbound_type_var of (formatter -> unit) * Ctype.closed_class_failure + | Unbound_type_var of Format_doc.t * Ctype.closed_class_failure | Non_generalizable_class of { id : Ident.t ; clty : Types.class_declaration @@ -129,7 +127,8 @@ type error = exception Error of Location.t * Env.t * error exception Error_forward of Location.error -val report_error : Env.t -> formatter -> error -> unit +val report_error : Env.t -> Format.formatter -> error -> unit +val report_error_doc : Env.t -> error Format_doc.printer (* Forward decl filled in by Typemod.type_open_descr *) val type_open_descr : diff --git a/ocamlmerlin_mlx/ocaml/typing/typecore.ml b/ocamlmerlin_mlx/ocaml/typing/typecore.ml index 5240dd0..f95cb28 100644 --- a/ocamlmerlin_mlx/ocaml/typing/typecore.ml +++ b/ocamlmerlin_mlx/ocaml/typing/typecore.ml @@ -15,16 +15,22 @@ (* Typechecking for the core language *) +[@@@ocaml.warning "-60"] module Str = Ast_helper.Str (* For ocamldep *) +[@@@ocaml.warning "+60"] + open Misc open Asttypes open Parsetree open Types +open Data_types open Typedtree open Btype open Ctype let raise_error = Msupport.raise_error +module Style = Misc.Style + type type_forcing_context = | If_conditional | If_no_else_branch @@ -72,12 +78,18 @@ type wrong_kind_sort = | List | Unit +type contains_gadt = + | Contains_gadt + | No_gadt + let wrong_kind_sort_of_constructor (lid : Longident.t) = match lid with - | Lident "true" | Lident "false" | Ldot(_, "true") | Ldot(_, "false") -> + | Lident "true" | Lident "false" + | Ldot(_, {txt="true"; _}) | Ldot(_, {txt="false"; _}) -> Boolean - | Lident "[]" | Lident "::" | Ldot(_, "[]") | Ldot(_, "::") -> List - | Lident "()" | Ldot(_, "()") -> Unit + | Lident "[]" | Lident "::" + | Ldot(_, {txt="[]"; _}) | Ldot(_, {txt="::"; _}) -> List + | Lident "()" | Ldot(_, {txt="()"; _}) -> Unit | _ -> Constructor type existential_restriction = @@ -89,6 +101,11 @@ type existential_restriction = | In_class_def (** or in [class c = let ... in ...] *) | In_self_pattern (** or in self pattern *) +type existential_binding = + | Bind_already_bound + | Bind_not_in_scope + | Bind_non_locally_abstract + type error = | Constructor_arity_mismatch of Longident.t * int * int | Label_mismatch of Longident.t * Errortrace.unification_error @@ -99,7 +116,25 @@ type error = | Orpat_vars of Ident.t * Ident.t list | Expr_type_clash of Errortrace.unification_error * type_forcing_context option - * Parsetree.expression_desc option + * Parsetree.expression option + | Function_arity_type_clash of + { syntactic_arity : int; + type_constraint : type_expr; + trace : Errortrace.unification_error; + } + (* [Function_arity_type_clash { syntactic_arity = n; type_constraint; trace }] + is the type error for the specific case where an n-ary function is + constrained at a type with an arity less than n, e.g.: + {[ + type (_, _) eq = Eq : ('a, 'a) eq + let bad : type a. ?opt:(a, int -> int) eq -> unit -> a = + fun ?opt:(Eq = assert false) () x -> x + 1 + ]} + + [type_constraint] is the user-written polymorphic type (in this example + [?opt:(a, int -> int) eq -> unit -> a]) that causes this type clash, and + [trace] is the unification error that signaled the issue. + *) | Apply_non_function of { funct : Typedtree.expression; func_ty : type_expr; @@ -144,17 +179,22 @@ type error = | Modules_not_allowed | Cannot_infer_signature | Not_a_packed_module of type_expr - | Unexpected_existential of existential_restriction * string * string list + | Unexpected_existential of existential_restriction * string | Invalid_interval | Invalid_for_loop_index | No_value_clauses | Exception_pattern_disallowed | Mixed_value_and_exception_patterns_under_guard + | Effect_pattern_below_toplevel + | Invalid_continuation_pattern | Inlined_record_escape | Inlined_record_expected | Unrefuted_pattern of pattern | Invalid_extension_constructor_payload | Not_an_extension_constructor + | Invalid_atomic_loc_payload + | Label_not_atomic of Longident.t + | Atomic_in_pattern of Longident.t | Literal_overflow of string | Unknown_literal of string * char | Illegal_letrec_pat @@ -164,9 +204,20 @@ type error = | Andop_type_clash of string * Errortrace.unification_error | Bindings_type_clash of Errortrace.unification_error | Unbound_existential of Ident.t list * type_expr + | Bind_existential of existential_binding * Ident.t * type_expr | Missing_type_constraint | Wrong_expected_kind of wrong_kind_sort * wrong_kind_context * type_expr | Expr_not_a_record_type of type_expr + | Constructor_labeled_arg + | Partial_tuple_pattern_bad_type + | Extra_tuple_label of string option * type_expr + | Missing_tuple_label of string option * type_expr + | Repeated_tuple_exp_label of string + | Repeated_tuple_pat_label of string + + +let not_principal fmt = + Format_doc.Doc.kmsg (fun x -> Warnings.Not_principal x) fmt exception Error of Location.t * Env.t * error exception Error_forward of Location.error @@ -179,7 +230,8 @@ let deep_copy () = try TypeHash.find table ty with Not_found -> let ty' = - let {Types. level; id; desc; scope} = Transient_expr.repr ty in + let ({Types. level; id; desc; _} as texp) = Transient_expr.repr ty in + let scope = Transient_expr.get_scope texp in create_expr ~level ~id ~scope desc in TypeHash.add table ty ty'; @@ -188,7 +240,7 @@ let deep_copy () = | Tvar _ | Tnil | Tunivar _ as desc -> desc | Tvariant _ as desc -> (* fixme *) desc | Tarrow (l,t1,t2,c) -> Tarrow (l, copy t1, copy t2, c) - | Ttuple tl -> Ttuple (List.map copy tl) + | Ttuple tl -> Ttuple (List.map (fun (label, ty) -> label, copy ty) tl) | Tconstr (p, tl, _) -> Tconstr (p, List.map copy tl, ref Mnil) | Tobject (t1, r) -> let r = match !r with @@ -198,8 +250,9 @@ let deep_copy () = Tobject (copy t1, ref r) | Tfield (s,fk,t1,t2) -> Tfield (s, fk, copy t1, copy t2) | Tpoly (t,tl) -> Tpoly (copy t, List.map copy tl) - | Tpackage (p,ltl) -> - Tpackage (p, List.map (fun (l, tl) -> l, copy tl) ltl) + | Tpackage { pack_path; pack_cstrs } -> + let pack_cstrs = List.map (fun (l, tl) -> l, copy tl) pack_cstrs in + Tpackage { pack_path; pack_cstrs } | Tlink _ | Tsubst _ -> assert false in Transient_expr.(set_desc (repr ty') desc); @@ -327,20 +380,10 @@ type recarg = | Required | Rejected -(* Whether or not patterns of the form (module M) are accepted. (If they are, - the idents will be created at the provided scope.) When module patterns are - allowed, the caller should take care to check that the introduced module - bindings' types don't escape their scope; see the callsites in [type_let] - and [type_cases] for examples. -*) -type module_patterns_restriction = - | Modules_allowed of { scope : int } - | Modules_rejected - let mk_expected ?explanation ty = { ty; explanation; } let case lhs rhs = - {c_lhs = lhs; c_guard = None; c_rhs = rhs} + {c_lhs = lhs; c_cont = None; c_guard = None; c_rhs = rhs} (* Typing of constants *) @@ -353,7 +396,8 @@ let type_constant = function | Const_int64 _ -> instance Predef.type_int64 | Const_nativeint _ -> instance Predef.type_nativeint -let constant : Parsetree.constant -> (Asttypes.constant, error) result = +let constant_desc + : Parsetree.constant_desc -> (Asttypes.constant, error) result = function | Pconst_integer (i,None) -> begin @@ -381,6 +425,8 @@ let constant : Parsetree.constant -> (Asttypes.constant, error) result = | Pconst_float (f,None)-> Ok (Const_float f) | Pconst_float (f,Some c) -> Error (Unknown_literal (f, c)) +let constant const = constant_desc const.pconst_desc + let constant_or_raise env loc cst = match constant cst with | Ok c -> c @@ -410,6 +456,16 @@ let extract_option_type env ty = Tconstr(path, [ty], _) when Path.same path Predef.path_option -> ty | _ -> assert false +let is_floatarray_type env ty = + match get_desc (expand_head env ty) with + Tconstr(path, [], _) -> Path.same path Predef.path_floatarray + | _ -> false + +let is_iarray_type env ty = + match get_desc (expand_head env ty) with + | Tconstr(path, [_], _) -> Path.same path Predef.path_iarray + | _ -> false + let protect_expansion env ty = if Env.has_local_constraints env then generic_instance ty else ty @@ -450,8 +506,45 @@ let extract_label_names env ty = let is_principal ty = not !Clflags.principal || get_level ty = generic_level +(* Represents information about an array type inferred using type-directed + disambiguation. *) +type array_info = + { ty_elt : type_expr option; + mut : mutable_flag } + +let disambiguate_array_literal ~loc env expected_ty = + let return (ty_elt : type_expr option) (mut : mutable_flag) = + if not (is_principal expected_ty) then + Location.prerr_warning loc + (not_principal "this type-based array disambiguation"); + { ty_elt; mut } + in + if is_floatarray_type env expected_ty then + return (Some (instance Predef.type_float)) Mutable + else if is_iarray_type env expected_ty then + return None Immutable + else + { ty_elt = None; mut = Mutable } + (* Typing of patterns *) +(* Simplified patterns for effect continuations *) +let type_continuation_pat env expected_ty sp = + let loc = sp.ppat_loc in + match sp.ppat_desc with + | Ppat_any -> None + | Ppat_var name -> + let id = Ident.create_local name.txt in + let desc = + { val_type = expected_ty; val_kind = Val_reg; + Types.val_loc = loc; val_attributes = []; + val_uid = Uid.mk ~current_unit:(Env.get_current_unit ()); } + in + Some (id, desc) + | Ppat_extension ext -> + raise (Error_forward (Builtin_attributes.error_of_extension ext)) + | _ -> raise (Error (loc, env, Invalid_continuation_pattern)) + (* unification inside type_exp and type_expect *) let unify_exp_types loc env ty expected_ty = (* Format.eprintf "@[%a@ %a@]@." Printtyp.raw_type_expr exp.exp_type @@ -464,49 +557,91 @@ let unify_exp_types loc env ty expected_ty = | Tags(l1,l2) -> raise(Typetexp.Error(loc, env, Typetexp.Variant_tags (l1, l2))) -(* level at which to create the local type declarations *) -let gadt_equations_level = ref None -let get_gadt_equations_level () = - match !gadt_equations_level with - Some y -> y - | None -> assert false +(* Getting proper location of already typed expressions. -let nothing_equated = TypePairs.create 0 + Used to avoid confusing locations on type error messages in presence of + type constraints. + For example: + + (* Before patch *) + # let x : string = (5 : int);; + ^ + (* After patch *) + # let x : string = (5 : int);; + ^^^^^^^^^ +*) +let proper_exp_loc exp = + let rec aux = function + | [] -> exp.exp_loc + | ((Texp_constraint _ | Texp_coerce _), loc, _) :: _ -> loc + | _ :: rest -> aux rest + in + aux exp.exp_extra -(* unification inside type_pat*) -let unify_pat_types_return_equated_pairs ?(refine = None) loc env ty ty' = +(** [sexp] is used by error messages to report literals in their + original formatting *) +let unify_exp ~sexp env exp expected_ty = + let loc = proper_exp_loc exp in try - match refine with - | Some allow_recursive_equations -> - unify_gadt ~equations_level:(get_gadt_equations_level ()) - ~allow_recursive_equations env ty ty' - | None -> - unify !env ty ty'; - nothing_equated - with - | Unify err -> - raise(error(loc, !env, Pattern_type_clash(err, None))) - | Tags(l1,l2) -> - raise(Typetexp.Error(loc, !env, Typetexp.Variant_tags (l1, l2))) + unify_exp_types loc env exp.exp_type expected_ty + with Error(loc, env, Expr_type_clash(err, tfc, None)) -> + raise (Error(loc, env, Expr_type_clash(err, tfc, Some sexp))) -let unify_pat_types ?refine loc env ty ty' = - ignore (unify_pat_types_return_equated_pairs ?refine loc env ty ty') +(* helper notation for Pattern_env.t *) +let (!!) (penv : Pattern_env.t) = penv.env +(* Unification inside type_pat *) +(* If [penv] is available, calling this function requires + [penv.in_counterexample = false] *) +let unify_pat_types loc env ty ty' = + try unify env ty ty' with + | Unify err -> + raise(Error(loc, env, Pattern_type_clash(err, None))) + | Tags(l1,l2) -> + raise(Typetexp.Error(loc, env, Typetexp.Variant_tags (l1, l2))) +(* GADT unification inside solve_Ppat_construct and check_counter_example_pat *) +(* We need to distinguish [pat] and [expected] if [refine = true] and + [penv.in_counterexample = false] (see [unify_gadt] for details) *) +let nothing_equated = TypePairs.create 0 +let unify_pat_types_return_equated_pairs ~refine loc penv ~pat ~expected = + try + if refine || penv.Pattern_env.in_counterexample + then unify_gadt penv ~pat ~expected + else (unify !!penv pat expected; nothing_equated) + with + | Unify err -> + raise(error(loc, !!penv, Pattern_type_clash(err, None))) + | Tags(l1,l2) -> + raise(Typetexp.Error(loc, !!penv, Typetexp.Variant_tags (l1, l2))) + +(* Unify pattern types in functions that can be called either from + [type_pat] or [check_counter_example_pat]. + Since it calls normal unification when [penv.in_counterexample = false], + or [unify_gadt] when [penv.in_counterexample = true], + [ty] and [ty'] always have symmetric roles. *) +let unify_pat_types_penv loc penv ty ty' = + (* [penv.in_counterexample = true] only in calls originating + from [check_counter_example_pat], + which in turn may contain only non-leaking type variables *) + ignore (unify_pat_types_return_equated_pairs ~refine:false loc penv + ~pat:ty ~expected:ty') (** [sdesc_for_hint] is used by error messages to report literals in their original formatting *) -let unify_pat ?refine ?sdesc_for_hint env pat expected_ty = - try unify_pat_types ?refine pat.pat_loc env pat.pat_type expected_ty +(* If [penv] is available, calling this function requires + [penv.in_counterexample = false] *) +let unify_pat ?sdesc_for_hint env pat expected_ty = + try unify_pat_types pat.pat_loc env pat.pat_type expected_ty with Error (loc, env, Pattern_type_clash(err, None)) -> raise(error(loc, env, Pattern_type_clash(err, sdesc_for_hint))) (* unification of a type with a Tconstr with freshly created arguments *) -let unify_head_only ~refine loc env ty constr = - let path = cstr_type_path constr in - let decl = Env.find_type path !env in +let unify_head_only loc penv constr ~expected:ty = + let path = cstr_res_type_path constr in + let decl = Env.find_type path !!penv in let ty' = Ctype.newconstr path (Ctype.instance_list decl.type_params) in - unify_pat_types ~refine loc env ty' ty + unify_pat_types_penv loc penv ty' ty (* Creating new conjunctive types is not allowed when typing patterns *) (* make all Reither present in open variants *) @@ -524,8 +659,7 @@ let finalize_variant pat tag opat r = | Reither (false, ty::tl, _) when not (row_closed row) -> link_row_field_ext ~inside:f (rf_present (Some ty)); begin match opat with None -> assert false - | Some pat -> - let env = ref pat.pat_env in List.iter (unify_pat env pat) (ty::tl) + | Some pat -> List.iter (unify_pat pat.pat_env pat) (ty::tl) end | Reither (c, _l, true) when not (has_fixed_explanation row) -> link_row_field_ext ~inside:f (rf_either [] ~no_arg:c ~matched:false) @@ -549,14 +683,22 @@ let finalize_variants p = finalize_variant p tag opat r | _ -> () } p -(* pattern environment *) +(* [type_pat_state] and related types for pattern environment; + these should not be confused with Pattern_env.t, which is a part of the + interface to unification functions in [Ctype] *) +type pattern_variable_kind = + | Std_var + | As_var + | Continuation_var + type pattern_variable = { pv_id: Ident.t; pv_type: type_expr; pv_loc: Location.t; - pv_as_var: bool; + pv_kind: pattern_variable_kind; pv_attributes: attributes; + pv_uid : Uid.t; } type module_variable = @@ -567,15 +709,83 @@ type module_variable = mv_uid: Uid.t } -let pattern_variables = ref ([] : pattern_variable list) -let pattern_force = ref ([] : (unit -> unit) list) -let allow_modules = ref Modules_rejected -let module_variables = ref ([] : module_variable list) -let reset_pattern allow = - pattern_variables := []; - pattern_force := []; - allow_modules := allow; - module_variables := [] +(* Whether or not patterns of the form (module M) are accepted. (If they are, + the idents will be created at the provided scope.) When module patterns are + allowed, the caller should take care to check that the introduced module + bindings' types don't escape their scope; see the callsites in [type_let] + and [type_cases] for examples. + [Modules_ignored] indicates that the typing of patterns should not accumulate + a list of module patterns to unpack. It's no different than using + [Modules_allowed] and then ignoring the accumulated [module_variables] list, + but signals more clearly that the module patterns aren't used in an + interesting way. +*) +type module_patterns_restriction = + | Modules_allowed of { scope: int } + | Modules_rejected + | Modules_ignored + +(* A parallel type to [module_patterns_restriction], though also + tracking the module variables encountered. +*) +type module_variables = + | Modvars_allowed of + { scope: int; + module_variables: module_variable list; + } + | Modvars_rejected + | Modvars_ignored + +type type_pat_state = + { mutable tps_pattern_variables: pattern_variable list; + mutable tps_pattern_force: (unit -> unit) list; + mutable tps_module_variables: module_variables; + (* Mutation will not change the constructor of [tps_module_variables], just + the contained [module_variables] list. [module_variables] could be made + mutable instead, but we felt this made the code more awkward. + *) + } + +let continuation_variable = function + | None -> [] + | Some (id, (desc:Types.value_description)) -> + [{pv_id = id; + pv_type = desc.val_type; + pv_loc = desc.val_loc; + pv_kind = Continuation_var; + pv_attributes = desc.val_attributes; + pv_uid= desc.val_uid}] + +let create_type_pat_state ?cont allow_modules = + let tps_module_variables = + match allow_modules with + | Modules_allowed { scope } -> + Modvars_allowed { scope; module_variables = [] } + | Modules_ignored -> Modvars_ignored + | Modules_rejected -> Modvars_rejected + in + { tps_pattern_variables = continuation_variable cont; + tps_module_variables; + tps_pattern_force = []; + } + +(* Copy mutable fields. Used in typechecking or-patterns. *) +let copy_type_pat_state + { tps_pattern_variables; + tps_module_variables; + tps_pattern_force; + } + = + { tps_pattern_variables; + tps_module_variables; + tps_pattern_force; + } + +let blit_type_pat_state ~src ~dst = + dst.tps_pattern_variables <- src.tps_pattern_variables; + dst.tps_module_variables <- src.tps_module_variables; + dst.tps_pattern_force <- src.tps_pattern_force; +;; let maybe_add_pattern_variables_ghost loc_let env pv = List.fold_right @@ -588,39 +798,45 @@ let maybe_add_pattern_variables_ghost loc_let env pv = end ) pv env -let enter_variable ?(is_module=false) ?(is_as_variable=false) loc name ty +let enter_variable ?(is_module=false) ?(is_as_variable=false) tps loc name ty attrs = if List.exists (fun {pv_id; _} -> Ident.name pv_id = name.txt) - !pattern_variables + tps.tps_pattern_variables then raise(error(loc, Env.empty, Multiply_bound_variable name.txt)); let id = if is_module then begin (* Unpack patterns result in both a module declaration and a value variable of the same name being entered into the environment. (The - module is via [module_variables], and the variable is via - [pattern_variables].) *) - match !allow_modules with - | Modules_rejected -> + module is via [tps_module_variables], and the variable is via + [tps_pattern_variables].) *) + match tps.tps_module_variables with + | Modvars_ignored -> Ident.create_local name.txt + | Modvars_rejected -> raise (error (loc, Env.empty, Modules_not_allowed)); - | Modules_allowed { scope } -> + | Modvars_allowed { scope; module_variables } -> let id = Ident.create_scoped name.txt ~scope in - module_variables := + let module_variables = { mv_id = id; mv_name = name; mv_loc = loc; - mv_uid = Uid.mk ~current_unit:(Env.get_unit_name ()); - } :: !module_variables; + mv_uid = Uid.mk ~current_unit:(Env.get_current_unit ()); + } :: module_variables + in + tps.tps_module_variables <- + Modvars_allowed { scope; module_variables; }; id end else Ident.create_local name.txt in - pattern_variables := + let pv_uid = Uid.mk ~current_unit:(Env.get_current_unit ()) in + tps.tps_pattern_variables <- {pv_id = id; pv_type = ty; pv_loc = loc; - pv_as_var = is_as_variable; - pv_attributes = attrs} :: !pattern_variables; - id + pv_kind = if is_as_variable then As_var else Std_var; + pv_attributes = attrs; + pv_uid} :: tps.tps_pattern_variables; + id, pv_uid let sort_pattern_variables vs = List.sort @@ -662,34 +878,39 @@ 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 ~refine (env : Env.t ref) p = - let as_ty = build_as_type_aux ~refine env p in - (* Cf. #1655 *) - List.fold_left (fun as_ty (extra, _loc, _attrs) -> - match extra with - | Tpat_type _ | Tpat_open _ | Tpat_unpack -> as_ty - | Tpat_constraint cty -> +let rec build_as_type (env : Env.t) p = + build_as_type_extra env p p.pat_extra + +and build_as_type_extra env p = function + | [] -> build_as_type_aux env p + | ((Tpat_type _ | Tpat_open _ | Tpat_unpack), _, _) :: rest -> + build_as_type_extra env p rest + | (Tpat_constraint {ctyp_type = ty; _}, _, _) :: rest -> + (* If the type constraint is ground, then this is the best type + we can return, so just return an instance (cf. #12313) *) + if closed_type_expr ty then instance ty else + (* Otherwise we combine the inferred type for the pattern with + then non-ground constraint in a non-ambivalent way *) + let as_ty = build_as_type_extra env p rest in (* [generic_instance] can only be used if the variables of the original type ([cty.ctyp_type] here) are not at [generic_level], which they are here. If we used [generic_instance] we would lose the sharing between [instance ty] and [ty]. *) let ty = - with_local_level ~post:generalize_structure - (fun () -> instance cty.ctyp_type) + with_local_level_generalize_structure (fun () -> instance ty) in - (* This call to unify can't fail since the pattern is well typed. *) - unify_pat_types ~refine p.pat_loc env (instance as_ty) (instance ty); + (* This call to unify may only fail due to missing GADT equations *) + unify_pat_types p.pat_loc env (instance as_ty) (instance ty); ty - ) as_ty p.pat_extra -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 (env : Env.t) p = match p.pat_desc with - Tpat_alias(p1,_, _) -> build_as_type env p1 + Tpat_alias(p1,_, _, _, _) -> build_as_type env p1 | Tpat_tuple pl -> - let tyl = List.map (build_as_type env) pl in - newty (Ttuple tyl) + let labeled_tyl = + List.map (fun (label, p) -> label, build_as_type env p) pl in + newty (Ttuple labeled_tyl) | Tpat_construct(_, cstr, pl, vto) -> let keep = cstr.cstr_private = Private || cstr.cstr_existentials <> [] || @@ -699,7 +920,7 @@ and build_as_type_aux ~refine (env : Env.t ref) p = let ty_args, ty_res, _ = instance_constructor Keep_existentials_flexible cstr in - List.iter2 (fun (p,ty) -> unify_pat ~refine env {p with pat_type = ty}) + List.iter2 (fun (p,ty) -> unify_pat env {p with pat_type = ty}) (List.combine pl tyl) ty_args; ty_res | Tpat_variant(l, p', _) -> @@ -713,19 +934,18 @@ and build_as_type_aux ~refine (env : Env.t ref) p = let ty = newvar () in let ppl = List.map (fun (_, l, p) -> l.lbl_pos, p) lpl in let do_label lbl = - let _, ty_arg, ty_res = instance_label false lbl in - unify_pat ~refine env {p with pat_type = ty} ty_res; + let _, ty_arg, ty_res = instance_label ~fixed:false lbl in + unify_pat env {p with pat_type = ty} ty_res; let refinable = lbl.lbl_mut = Immutable && List.mem_assoc lbl.lbl_pos ppl && match get_desc lbl.lbl_arg with Tpoly _ -> false | _ -> true in if refinable then begin let arg = List.assoc lbl.lbl_pos ppl in - unify_pat ~refine env - {arg with pat_type = build_as_type env arg} ty_arg + unify_pat env {arg with pat_type = build_as_type env arg} ty_arg end else begin - let _, ty_arg', ty_res' = instance_label false lbl in - unify_pat_types ~refine p.pat_loc env ty_arg ty_arg'; - unify_pat ~refine env p ty_res' + let _, ty_arg', ty_res' = instance_label ~fixed:false lbl in + unify_pat_types p.pat_loc env ty_arg ty_arg'; + unify_pat env p ty_res' end in Array.iter do_label lbl.lbl_all; ty @@ -733,7 +953,7 @@ and build_as_type_aux ~refine (env : Env.t ref) p = begin match row with None -> let ty1 = build_as_type env p1 and ty2 = build_as_type env p2 in - unify_pat ~refine env {p2 with pat_type = ty2} ty1; + unify_pat env {p2 with pat_type = ty2} ty1; ty1 | Some row -> let Row {fields; fixed; name} = row_repr row in @@ -745,112 +965,208 @@ and build_as_type_aux ~refine (env : Env.t ref) p = (* Constraint solving during typing of patterns *) -let solve_Ppat_poly_constraint ~refine env loc sty expected_ty = - let cty, ty, force = Typetexp.transl_simple_type_delayed !env sty in - unify_pat_types ~refine loc env ty (instance expected_ty); - pattern_force := force :: !pattern_force; +let solve_Ppat_poly_constraint tps env loc sty expected_ty = + let cty, ty, force = Typetexp.transl_simple_type_delayed env sty in + unify_pat_types loc env ty (instance expected_ty); + tps.tps_pattern_force <- force :: tps.tps_pattern_force; match get_desc ty with | Tpoly (body, tyl) -> let _, ty' = with_level ~level:generic_level - (fun () -> instance_poly ~keep_names:true false tyl body) + (fun () -> instance_poly ~keep_names:true ~fixed:false tyl body) in (cty, ty, ty') | _ -> assert false -let solve_Ppat_alias ~refine env pat = - with_local_level ~post:generalize (fun () -> build_as_type ~refine env pat) +let solve_Ppat_alias env pat = + with_local_level_generalize (fun () -> build_as_type env pat) -let solve_Ppat_tuple (type a) ~refine loc env (args : a list) expected_ty = - let vars = List.map (fun _ -> newgenvar ()) args in +(* Extracts the first element from a list matching a label. Roughly: + pat <- List.assoc_opt label patl; + return (pat, List.remove_assoc label patl) + *) +let extract_pat label patl = + let rec extract_pat_aux acc = function + | [] -> None + | ((label', t) as pat) :: rest -> + if Option.equal String.equal label label' then + Some (t, List.rev_append acc rest) + else + extract_pat_aux (pat::acc) rest + in + extract_pat_aux [] patl + +let extract_or_mk_pat label rem closed = + match extract_pat label rem, closed with + (* Take the first match from patl *) + | (Some _ as pat_and_rem), _ -> pat_and_rem + (* No match, but the partial pattern allows us to generate a _ *) + | None, Open -> Some (Ast_helper.Pat.mk Ppat_any, rem) + | None, Closed -> None + +(* Reorders [patl] to match the label order in [labeled_tl], erroring if [patl] + is missing a label or has an a extra label (unlabeled components morally + share the same special label). + + If [closed] is [Open], then no "missing label" errors are possible; instead, + [_] patterns will be generated for those labels. An unnecessarily [Open] + pattern results in a warning. + *) +let reorder_pat loc penv patl closed labeled_tl expected_ty = + let take_next (taken, rem) (label, _) = + match extract_or_mk_pat label rem closed with + | Some (pat, rem) -> (label, pat) :: taken, rem + | None -> + raise (Error (loc, !!penv, Missing_tuple_label(label, expected_ty))) + in + match List.fold_left take_next ([], patl) labeled_tl with + | taken, [] -> + if closed = Open + && Int.equal (List.length labeled_tl) (List.length patl) then + Location.prerr_warning loc Warnings.Unnecessarily_partial_tuple_pattern; + List.rev taken + | _, (extra_label, _) :: _ -> + raise + (Error (loc, !!penv, Extra_tuple_label(extra_label, expected_ty))) + +(* This assumes the [args] have already been reordered according to the + [expected_ty], if needed. *) +let solve_Ppat_tuple loc env args expected_ty = + let vars = List.map (fun (label, _) -> (label, newgenvar ())) args in let ty = newgenty (Ttuple vars) in let expected_ty = generic_instance expected_ty in - unify_pat_types ~refine loc env ty expected_ty; + unify_pat_types_penv loc env ty expected_ty; vars -let solve_constructor_annotation env name_list sty ty_args ty_ex = - let expansion_scope = get_gadt_equations_level () in - let ids = +let solve_constructor_annotation + tps (penv : Pattern_env.t) name_list sty ty_args ty_ex unify_res = + assert (not penv.in_counterexample); + let expansion_scope = penv.equations_scope in + (* Introduce fresh type names that expand to type variables. + They should eventually be bound to ground types. *) + let ids_decls = List.map (fun name -> - let decl = new_local_type ~loc:name.loc () in + let tv = newvar () in + let decl = + new_local_type ~loc:name.loc Definition + ~manifest_and_scope:(tv, Ident.lowest_scope) in let (id, new_env) = - Env.enter_type ~scope:expansion_scope name.txt decl !env in - env := new_env; - {name with txt = id}) + (* These redundant types should not be added to the shortpath graph *) + Env.enter_type ~long_path:true ~scope:expansion_scope name.txt decl !!penv in + Pattern_env.set_env penv new_env; + ({name with txt = id}, (decl, tv))) name_list in + (* Translate the type annotation using these type names. *) let cty, ty, force = - with_local_level ~post:(fun (_,ty,_) -> generalize_structure ty) - (fun () -> Typetexp.transl_simple_type_delayed !env sty) + with_local_level_generalize_structure + (fun () -> Typetexp.transl_simple_type_delayed !!penv sty) in - pattern_force := force :: !pattern_force; + tps.tps_pattern_force <- force :: tps.tps_pattern_force; + (* Only unify the return type after generating the ids *) + unify_res (); let ty_args = let ty1 = instance ty and ty2 = instance ty in match ty_args with [] -> assert false | [ty_arg] -> - unify_pat_types cty.ctyp_loc env ty1 ty_arg; + unify_pat_types cty.ctyp_loc !!penv ty1 ty_arg; [ty2] | _ -> - unify_pat_types cty.ctyp_loc env ty1 (newty (Ttuple ty_args)); - match get_desc (expand_head !env ty2) with - Ttuple tyl -> tyl + unify_pat_types cty.ctyp_loc !!penv ty1 + (newty (Ttuple (List.map (fun t -> None, t) ty_args))); + match get_desc (expand_head !!penv ty2) with + Ttuple tyl -> List.map snd tyl | _ -> assert false in - if ids <> [] then ignore begin - let ids = List.map (fun x -> x.txt) ids in + if ids_decls <> [] then begin + let ids_decls = List.map (fun (x,dm) -> (x.txt,dm)) ids_decls in + let ids = List.map fst ids_decls in let rem = + (* First process the existentials introduced by this constructor. + Just need to make their definitions abstract. *) List.fold_left (fun rem tv -> match get_desc tv with - Tconstr(Path.Pident id, [], _) when List.mem id rem -> - list_remove id rem + Tconstr(Path.Pident id, [], _) when List.mem_assoc id rem -> + let decl, tv' = List.assoc id ids_decls in + let env = + Env.add_type ~check:false id + {decl with type_manifest = None} !!penv + in + Pattern_env.set_env penv env; + (* We have changed the definition, so clean up *) + Btype.cleanup_abbrev (); + (* Since id is now abstract, this does not create a cycle *) + unify_pat_types cty.ctyp_loc env tv tv'; + List.remove_assoc id rem | _ -> - raise (Error (cty.ctyp_loc, !env, + raise (error (cty.ctyp_loc, !!penv, Unbound_existential (ids, ty)))) - ids ty_ex + ids_decls ty_ex in - if rem <> [] then - raise (Error (cty.ctyp_loc, !env, - Unbound_existential (ids, ty))) + (* The other type names should be bound to newly introduced existentials. *) + let bound_ids = ref ids in + List.iter + (fun (id, (decl, tv')) -> + let tv' = expand_head !!penv tv' in + begin match get_desc tv' with + | Tconstr (Path.Pident id', [], _) -> + if List.exists (Ident.same id') !bound_ids then + raise (error (cty.ctyp_loc, !!penv, + Bind_existential (Bind_already_bound, id, tv'))); + (* Both id and id' are Scoped identifiers, so their stamps grow *) + if Ident.scope id' <> penv.equations_scope + || Ident.compare_stamp id id' > 0 then + raise (error (cty.ctyp_loc, !!penv, + Bind_existential (Bind_not_in_scope, id, tv'))); + bound_ids := id' :: !bound_ids + | _ -> + raise (error (cty.ctyp_loc, !!penv, + Bind_existential + (Bind_non_locally_abstract, id, tv'))); + end; + let env = + Env.add_type ~check:false id + {decl with type_manifest = Some (duplicate_type tv')} !!penv + in + Pattern_env.set_env penv env) + rem; + if rem <> [] then Btype.cleanup_abbrev (); end; - ty_args, Some (ids, cty) + ty_args, Some (List.map fst ids_decls, cty) -let solve_Ppat_construct ~refine env loc constr no_existentials +let solve_Ppat_construct tps (penv : Pattern_env.t) loc constr no_existentials existential_styp expected_ty = (* if constructor is gadt, we must verify that the expected type has the correct head *) if constr.cstr_generalized then - unify_head_only ~refine loc env (instance expected_ty) constr; + unify_head_only loc penv constr ~expected:(instance expected_ty); (* PR#7214: do not use gadt unification for toplevel lets *) let unify_res ty_res expected_ty = - let refine = - match refine, no_existentials with - | None, None when constr.cstr_generalized -> Some false - | _ -> refine - in - unify_pat_types_return_equated_pairs ~refine loc env ty_res expected_ty + let refine = constr.cstr_generalized && no_existentials = None in + (* Here [ty_res] contains only fresh (non-leaking) type variables, + so the requirement of [unify_gadt] is fulfilled. *) + unify_pat_types_return_equated_pairs ~refine loc penv ~pat:ty_res + ~expected:expected_ty in let ty_args, equated_types, existential_ctyp = - with_local_level_iter ~post: generalize_structure begin fun () -> + with_local_level_generalize_structure begin fun () -> let expected_ty = instance expected_ty in - let expansion_scope = get_gadt_equations_level () in let ty_args, ty_res, equated_types, existential_ctyp = match existential_styp with None -> let ty_args, ty_res, _ = - instance_constructor - (Make_existentials_abstract { env; scope = expansion_scope }) - constr + instance_constructor (Make_existentials_abstract penv) constr in ty_args, ty_res, unify_res ty_res expected_ty, None | Some (name_list, sty) -> let existential_treatment = if name_list = [] then - Make_existentials_abstract { env; scope = expansion_scope } + Make_existentials_abstract penv else (* we will unify them (in solve_constructor_annotation) with the local types provided by the user *) @@ -859,33 +1175,32 @@ let solve_Ppat_construct ~refine env loc constr no_existentials let ty_args, ty_res, ty_ex = instance_constructor existential_treatment constr in - let equated_types = unify_res ty_res expected_ty in + let equated_types = lazy (unify_res ty_res expected_ty) in let ty_args, existential_ctyp = - solve_constructor_annotation env name_list sty ty_args ty_ex in - ty_args, ty_res, equated_types, existential_ctyp + solve_constructor_annotation tps penv name_list sty ty_args ty_ex + (fun () -> ignore (Lazy.force equated_types)) + in + ty_args, ty_res, Lazy.force equated_types, existential_ctyp in if constr.cstr_existentials <> [] then - lower_variables_only !env expansion_scope ty_res; - ((ty_args, equated_types, existential_ctyp), - expected_ty :: ty_res :: ty_args) + lower_variables_only !!penv penv.Pattern_env.equations_scope ty_res; + (ty_args, equated_types, existential_ctyp) end in - if !Clflags.principal && refine = None then begin + if !Clflags.principal && not penv.in_counterexample then begin (* Do not warn for counter-examples *) let exception Warn_only_once in try TypePairs.iter (fun (t1, t2) -> - generalize_structure t1; - generalize_structure t2; if not (fully_generic t1 && fully_generic t2) then let msg = - Format.asprintf - "typing this pattern requires considering@ %a@ and@ %a@ as \ - equal.@,\ - But the knowledge of these types" - Printtyp.type_expr t1 - Printtyp.type_expr t2 + Format_doc.doc_printf + "typing this pattern requires considering@ @[%a@]@ and@ \ + @[%a@]@ as@ equal.@ \ + But@ the@ knowledge@ of@ these@ types" + (Style.as_inline_code Printtyp.Doc.type_expr) t1 + (Style.as_inline_code Printtyp.Doc.type_expr) t2 in Location.prerr_warning loc (Warnings.Not_principal msg); raise Warn_only_once) @@ -894,42 +1209,48 @@ let solve_Ppat_construct ~refine env loc constr no_existentials end; (ty_args, existential_ctyp) -let solve_Ppat_record_field ~refine loc env label label_lid record_ty = - with_local_level_iter ~post:generalize_structure begin fun () -> - let (_, ty_arg, ty_res) = instance_label false label in +let solve_Ppat_record_field loc penv label label_lid record_ty = + with_local_level_generalize_structure begin fun () -> + let (_, ty_arg, ty_res) = instance_label ~fixed:false label in begin try - unify_pat_types ~refine loc env ty_res (instance record_ty) + unify_pat_types_penv loc penv ty_res (instance record_ty) with Error(_loc, _env, Pattern_type_clash(err, _)) -> - raise(error(label_lid.loc, !env, + raise(error(label_lid.loc, !!penv, Label_mismatch(label_lid.txt, err))) end; - (ty_arg, [ty_res; ty_arg]) + ty_arg end -let solve_Ppat_array ~refine loc env expected_ty = - let ty_elt = newgenvar() in +let solve_Ppat_array loc env expected_ty = let expected_ty = generic_instance expected_ty in - unify_pat_types ~refine - loc env (Predef.type_array ty_elt) expected_ty; - ty_elt + match disambiguate_array_literal ~loc !!env expected_ty with + | { ty_elt = Some ty_elt; mut } -> ty_elt, mut + | { ty_elt = None; mut } -> + let array_type = match mut with + | Immutable -> Predef.type_iarray + | Mutable -> Predef.type_array + in + let ty_elt = newgenvar() in + unify_pat_types_penv loc env (array_type ty_elt) expected_ty; + ty_elt, mut -let solve_Ppat_lazy ~refine loc env expected_ty = +let solve_Ppat_lazy loc env expected_ty = let nv = newgenvar () in - unify_pat_types ~refine loc env (Predef.type_lazy_t nv) + unify_pat_types_penv loc env (Predef.type_lazy_t nv) (generic_instance expected_ty); nv -let solve_Ppat_constraint ~refine loc env sty expected_ty = +let solve_Ppat_constraint tps loc env sty expected_ty = let cty, ty, force = - with_local_level ~post:(fun (_, ty, _) -> generalize_structure ty) - (fun () -> Typetexp.transl_simple_type_delayed !env sty) + with_local_level_generalize_structure + (fun () -> Typetexp.transl_simple_type_delayed env sty) in - pattern_force := force :: !pattern_force; + tps.tps_pattern_force <- force :: tps.tps_pattern_force; let ty, expected_ty' = instance ty, ty in - unify_pat_types ~refine loc env ty (instance expected_ty); + unify_pat_types loc env ty (instance expected_ty); (cty, ty, expected_ty') -let solve_Ppat_variant ~refine loc env tag no_arg expected_ty = +let solve_Ppat_variant loc env tag no_arg expected_ty = let arg_type = if no_arg then [] else [newgenvar()] in let fields = [tag, rf_either ~no_arg arg_type ~matched:true] in let make_row more = @@ -940,7 +1261,7 @@ let solve_Ppat_variant ~refine loc env tag no_arg expected_ty = (* PR#7404: allow some_private_tag blindly, as it would not unify with the abstract row variable *) if tag <> Parmatch.some_private_tag then - unify_pat_types ~refine loc env (newgenty(Tvariant row)) expected_ty; + unify_pat_types_penv loc env (newgenty(Tvariant row)) expected_ty; (arg_type, make_row (newvar ()), instance expected_ty) (* Building the or-pattern corresponding to a polymorphic variant type *) @@ -997,19 +1318,6 @@ let build_or_pat env loc lid = pat pats in (path, rp { r with pat_loc = loc }) -let split_cases env cases = - let add_case lst case = function - | None -> lst - | Some c_lhs -> { case with c_lhs } :: lst - in - List.fold_right (fun ({ c_lhs; c_guard } as case) (vals, exns) -> - match split_pattern c_lhs with - | Some _, Some _ when c_guard <> None -> - raise (error (c_lhs.pat_loc, env, - Mixed_value_and_exception_patterns_under_guard)) - | vp, ep -> add_case vals case vp, add_case exns case ep - ) cases ([], []) - (* Type paths *) let rec expand_path env p = @@ -1091,7 +1399,7 @@ end) = struct [_] -> [] | _ -> let open Printtyp in wrap_printing_env ~error:true env (fun () -> - reset(); strings_of_paths (Some Type) tpaths) + Out_type.reset(); strings_of_paths Type tpaths) let disambiguate_by_type env tpath lbls = match lbls with @@ -1106,10 +1414,12 @@ end) = struct (* warn if there are several distinct candidates in scope *) let warn_if_ambiguous warn lid env lbl rest = if Warnings.is_active (Ambiguous_name ([],[],false,"")) then begin - Printtyp.Conflicts.reset (); + Out_type.Ident_conflicts.reset (); let paths = ambiguous_types env lbl rest in - let expansion = - Format.asprintf "%t" Printtyp.Conflicts.print_explanations in + let expansion = match Out_type.Ident_conflicts.err_msg () with + | None -> "" + | Some msg -> Format_doc.(asprintf "%a" pp_doc) msg + in if paths <> [] then warn lid.loc (Warnings.Ambiguous_name ([Longident.last lid.txt], @@ -1120,15 +1430,15 @@ end) = struct let warn_non_principal warn lid = let name = Datatype_kind.label_name kind in warn lid.loc - (Warnings.Not_principal - ("this type-based " ^ name ^ " disambiguation")) + (not_principal "this type-based %s disambiguation" name) (* we selected a name out of the lexical scope *) let warn_out_of_scope warn lid env tpath = if Warnings.is_active (Name_out_of_scope ("",[],false)) then begin let path_s = Printtyp.wrap_printing_env ~error:true env - (fun () -> Printtyp.string_of_path tpath) in + (fun () -> Format_doc.asprintf "%a" Printtyp.Doc.type_path tpath) + in warn lid.loc (Warnings.Name_out_of_scope (path_s, [Longident.last lid.txt], false)) end @@ -1360,7 +1670,8 @@ let disambiguate_lid_a_list loc closed env usage expected_type lid_a_list = let qual_lid = match qual, lid.txt with | Some modname, Longident.Lident s -> - {lid with txt = Longident.Ldot (modname, s)} + let name = { lid with txt = s } in + {lid with txt = Longident.Ldot (modname, name)} | _ -> lid in lid, process_label qual_lid, a @@ -1368,7 +1679,7 @@ let disambiguate_lid_a_list loc closed env usage expected_type lid_a_list = in if !w_pr then Location.prerr_warning loc - (Warnings.Not_principal "this type-based record disambiguation") + (not_principal "this type-based record disambiguation") else begin match List.rev !w_amb with (_,types,ex)::_ as amb -> @@ -1463,19 +1774,39 @@ end) (* Typing of patterns *) -(* "half typed" cases are produced in [type_cases] when we've just typechecked - the pattern but haven't type-checked the body yet. - At this point we might have added some type equalities to the environment, - but haven't yet added identifiers bound by the pattern. *) -type 'case_pattern half_typed_case = +(* "untyped" cases are prior to checking the pattern. *) +type untyped_case = Parsetree.pattern Parmatch.parmatch_case + +(* "half typed" cases are produced in [map_half_typed_cases] when we've just + typechecked the pattern but haven't type-checked the body yet. At this point + we might have added some type equalities to the environment, but haven't yet + added identifiers bound by the pattern. *) +type ('case_pattern, 'case_data) half_typed_case = { typed_pat: 'case_pattern; pat_type_for_unif: type_expr; - untyped_case: Parsetree.case; + untyped_case : untyped_case; + case_data : 'case_data; branch_env: Env.t; pat_vars: pattern_variable list; - module_vars: module_variable list; + module_vars: module_variables; contains_gadt: bool; } +(* Used to split patterns into value cases and exception cases. *) +let split_half_typed_cases env zipped_cases = + let add_case lst htc data = function + | None -> lst + | Some split_pat -> + ({ htc.untyped_case with pattern = split_pat }, data) :: lst + in + List.fold_right (fun (htc, data) (vals, exns) -> + let pat = htc.typed_pat in + match split_pattern pat with + | Some _, Some _ when htc.untyped_case.has_guard -> + raise (Error (pat.pat_loc, env, + Mixed_value_and_exception_patterns_under_guard)) + | vp, ep -> add_case vals htc data vp, add_case exns htc data ep + ) zipped_cases ([], []) + let rec has_literal_pattern p = match p.ppat_desc with | Ppat_constant _ | Ppat_interval _ -> @@ -1496,11 +1827,13 @@ let rec has_literal_pattern p = match p.ppat_desc with | Ppat_lazy p | Ppat_open (_, p) -> has_literal_pattern p - | Ppat_tuple ps | Ppat_array ps -> List.exists has_literal_pattern ps + | Ppat_tuple (ps, _) -> + List.exists (fun (_,p) -> has_literal_pattern p) ps | Ppat_record (ps, _) -> List.exists (fun (_,p) -> has_literal_pattern p) ps + | Ppat_effect (p, q) | Ppat_or (p, q) -> has_literal_pattern p || has_literal_pattern q @@ -1563,19 +1896,31 @@ let as_comp_pattern | Value -> as_computation_pattern pat | Computation -> pat +let forbid_atomic_field_patterns loc penv (label_lid, label, pat) = + (* Pattern-matching under atomic record fields is not allowed. We + still allow wildcard patterns, so that it is valid to list all + record fields exhaustively. *) + let wildcard pat = match pat.pat_desc with + | Tpat_any -> true + | _ -> false + in + if label.lbl_atomic = Atomic && not (wildcard pat) then + raise (Error (loc, !!penv, Atomic_in_pattern label_lid.txt)) + (** [type_pat] propagates the expected type, and unification may update the typing environment. *) let rec type_pat - : type k . k pattern_category -> + : type k . type_pat_state -> k pattern_category -> no_existentials: existential_restriction option -> - env: Env.t ref -> Parsetree.pattern -> type_expr -> k general_pattern - = fun category ~no_existentials ~env sp expected_ty -> + penv: Pattern_env.t -> Parsetree.pattern -> type_expr -> + k general_pattern + = fun tps category ~no_existentials ~penv sp expected_ty -> Msupport.with_saved_types ~warning_attribute:sp.ppat_attributes ?save_part:None (fun () -> let saved = save_levels () in try - type_pat_aux category ~no_existentials ~env sp expected_ty + type_pat_aux tps category ~no_existentials ~penv sp expected_ty with Error _ as exn -> (* We only want to catch error, not internal exceptions such as [Need_backtrack], etc. *) @@ -1589,7 +1934,7 @@ let rec type_pat pat_loc = loc; pat_extra = []; pat_type = expected_ty; - pat_env = !env; + pat_env = !!penv; pat_attributes = Msupport.recovery_attributes sp.ppat_attributes; } in @@ -1599,16 +1944,16 @@ let rec type_pat ) and type_pat_aux - : type k . k pattern_category -> no_existentials:_ -> - env:_ -> _ -> _ -> k general_pattern - = fun category ~no_existentials ~env sp expected_ty -> - let type_pat category ?(env=env) = - type_pat category ~no_existentials ~env + : type k . type_pat_state -> k pattern_category -> no_existentials:_ -> + penv:Pattern_env.t -> _ -> _ -> k general_pattern + = fun tps category ~no_existentials ~penv sp expected_ty -> + assert (penv.in_counterexample = false); + let type_pat tps category ?(penv=penv) = + type_pat tps category ~no_existentials ~penv in let loc = sp.ppat_loc in - let refine = None in let solve_expected (x : pattern) : pattern = - unify_pat ~refine ~sdesc_for_hint:sp.ppat_desc env x (instance expected_ty); + unify_pat ~sdesc_for_hint:sp.ppat_desc !!penv x (instance expected_ty); x in let crp (x : k general_pattern) : k general_pattern = @@ -1627,16 +1972,16 @@ and type_pat_aux pat_loc = loc; pat_extra=[]; pat_type = instance expected_ty; pat_attributes = sp.ppat_attributes; - pat_env = !env } + pat_env = !!penv } | Ppat_var name -> let ty = instance expected_ty in - let id = enter_variable loc name ty sp.ppat_attributes in + let id, uid = enter_variable tps loc name ty sp.ppat_attributes in rvp { - pat_desc = Tpat_var (id, name); + pat_desc = Tpat_var (id, name, uid); pat_loc = loc; pat_extra=[]; pat_type = ty; pat_attributes = sp.ppat_attributes; - pat_env = !env } + pat_env = !!penv } | Ppat_unpack name -> let t = instance expected_ty in begin match name.txt with @@ -1647,104 +1992,131 @@ and type_pat_aux pat_extra=[Tpat_unpack, name.loc, sp.ppat_attributes]; pat_type = t; pat_attributes = []; - pat_env = !env } + pat_env = !!penv } | Some s -> let v = { name with txt = s } in (* We're able to pass ~is_module:true here without an error because [Ppat_unpack] is a case identified by [may_contain_modules]. See the comment on [may_contain_modules]. *) - let id = enter_variable loc v t ~is_module:true sp.ppat_attributes in + let id, uid = + enter_variable tps loc v t ~is_module:true sp.ppat_attributes + in rvp { - pat_desc = Tpat_var (id, v); + pat_desc = Tpat_var (id, v, uid); pat_loc = sp.ppat_loc; pat_extra=[Tpat_unpack, loc, sp.ppat_attributes]; pat_type = t; pat_attributes = []; - pat_env = !env } + pat_env = !!penv } end | Ppat_constraint( {ppat_desc=Ppat_var name; ppat_loc=lloc; ppat_attributes = attrs}, ({ptyp_desc=Ptyp_poly _} as sty)) -> (* explicitly polymorphic type *) let cty, ty, ty' = - solve_Ppat_poly_constraint ~refine env lloc sty expected_ty in - let id = enter_variable lloc name ty' attrs in - rvp { pat_desc = Tpat_var (id, name); + solve_Ppat_poly_constraint tps !!penv lloc sty expected_ty in + let id, uid = enter_variable tps lloc name ty' attrs in + rvp { pat_desc = Tpat_var (id, name, uid); pat_loc = lloc; pat_extra = [Tpat_constraint cty, loc, sp.ppat_attributes]; pat_type = ty; pat_attributes = []; - pat_env = !env } + pat_env = !!penv } | Ppat_alias(sq, name) -> - let q = type_pat Value sq expected_ty in - let ty_var = solve_Ppat_alias ~refine env q in - let id = - enter_variable ~is_as_variable:true loc name ty_var sp.ppat_attributes + let q = type_pat tps Value sq expected_ty in + let ty_var = solve_Ppat_alias !!penv q in + let id, uid = + enter_variable + ~is_as_variable:true tps name.loc name ty_var sp.ppat_attributes in - rvp { pat_desc = Tpat_alias(q, id, name); + rvp { pat_desc = Tpat_alias(q, id, name, uid, ty_var); pat_loc = loc; pat_extra=[]; pat_type = q.pat_type; pat_attributes = sp.ppat_attributes; - pat_env = !env } + pat_env = !!penv } | Ppat_constant cst -> - let cst = constant_or_raise !env loc cst in + let cst = constant_or_raise !!penv loc cst in rvp @@ solve_expected { pat_desc = Tpat_constant cst; pat_loc = loc; pat_extra=[]; pat_type = type_constant cst; pat_attributes = sp.ppat_attributes; - pat_env = !env } - | Ppat_interval (Pconst_char c1, Pconst_char c2) -> - let open Ast_helper.Pat in + pat_env = !!penv } + | Ppat_interval (c1, c2) -> + let open Ast_helper in + let get_bound = function + | {pconst_desc = Pconst_char c; _} -> c + | {pconst_loc = loc; _} -> + raise (error (loc, !!penv, Invalid_interval)) + in + let c1 = get_bound c1 in + let c2 = get_bound c2 in let gloc = {loc with Location.loc_ghost=true} in let rec loop c1 c2 = - if c1 = c2 then constant ~loc:gloc (Pconst_char c1) + if c1 = c2 then Pat.constant ~loc:gloc (Const.char ~loc:gloc c1) else - or_ ~loc:gloc - (constant ~loc:gloc (Pconst_char c1)) + Pat.or_ ~loc:gloc + (Pat.constant ~loc:gloc (Const.char ~loc:gloc c1)) (loop (Char.chr(Char.code c1 + 1)) c2) in let p = if c1 <= c2 then loop c1 c2 else loop c2 c1 in let p = {p with ppat_loc=loc} in - type_pat category p expected_ty + type_pat tps category p expected_ty (* TODO: record 'extra' to remember about interval *) - | Ppat_interval _ -> - raise (error (loc, !env, Invalid_interval)) - | Ppat_tuple spl -> - assert (List.length spl >= 2); - let expected_tys = solve_Ppat_tuple ~refine loc env spl expected_ty in - let pl = List.map2 (type_pat Value) spl expected_tys in + | Ppat_tuple (spl, closed) -> + assert (closed = Open || List.length spl >= 2); + Option.iter + (fun l -> raise (Error (loc, !!penv, Repeated_tuple_pat_label l))) + (Misc.repeated_label spl); + let args = + match get_desc (expand_head !!penv expected_ty) with + (* If it's a principally-known tuple pattern, try to reorder *) + | Ttuple labeled_tl when is_principal expected_ty -> + reorder_pat loc penv spl closed labeled_tl expected_ty + (* If not, it's not allowed to be open (partial) *) + | _ -> + match closed with + | Open -> raise (Error (loc, !!penv, Partial_tuple_pattern_bad_type)) + | Closed -> spl + in + let expected_tys = + solve_Ppat_tuple loc penv args expected_ty + in + let pl = + List.map2 (fun (lbl, t) (_, p) -> lbl, type_pat tps Value p t) + expected_tys args + in rvp { pat_desc = Tpat_tuple pl; pat_loc = loc; pat_extra=[]; - pat_type = newty (Ttuple(List.map (fun p -> p.pat_type) pl)); + pat_type = + newty (Ttuple (List.map (fun (lbl, p) -> lbl, p.pat_type) pl)); pat_attributes = sp.ppat_attributes; - pat_env = !env } + pat_env = !!penv } | Ppat_construct(lid, sarg) -> let expected_type = - match extract_concrete_variant !env expected_ty with + match extract_concrete_variant !!penv expected_ty with | Variant_type(p0, p, _) -> Some (p0, p, is_principal expected_ty) | Maybe_a_variant_type -> None | Not_a_variant_type -> let srt = wrong_kind_sort_of_constructor lid.txt in let err = Wrong_expected_kind(srt, Pattern, expected_ty) in - raise (error (loc, !env, err)) + raise (error (loc, !!penv, err)) in let constr = let candidates = - Env.lookup_all_constructors Env.Pattern ~loc:lid.loc lid.txt !env in + Env.lookup_all_constructors Env.Pattern ~loc:lid.loc lid.txt !!penv in wrap_disambiguate "This variant pattern is expected to have" (mk_expected expected_ty) - (Constructor.disambiguate Env.Pattern lid !env expected_type) + (Constructor.disambiguate Env.Pattern lid !!penv expected_type) candidates in begin match no_existentials, constr.cstr_existentials with | None, _ | _, [] -> () - | Some r, (_ :: _ as exs) -> - let exs = List.map (Ctype.existential_name constr) exs in + | Some r, (_ :: _) -> let name = constr.cstr_name in - raise (error (loc, !env, Unexpected_existential (r, name, exs))) + raise (error (loc, !!penv, Unexpected_existential (r, name))) end; let sarg', existential_styp = match sarg with @@ -1755,15 +2127,20 @@ and type_pat_aux | Some ([], sp) -> Some sp, None | Some (_, sp) -> - raise (error (sp.ppat_loc, !env, Missing_type_constraint)) + raise (error (sp.ppat_loc, !!penv, Missing_type_constraint)) in let sargs = match sarg' with None -> [] - | Some {ppat_desc = Ppat_tuple spl} when + | Some {ppat_desc = Ppat_tuple (spl, _)} when constr.cstr_arity > 1 || Builtin_attributes.explicit_arity sp.ppat_attributes - -> spl + -> + List.map (fun (l, sp) -> + match l with + | Some _ -> raise (Error(loc, !!penv, Constructor_labeled_arg)) + | None -> sp + ) spl | Some({ppat_desc = Ppat_any} as sp) when constr.cstr_arity = 0 && existential_styp = None -> @@ -1780,11 +2157,11 @@ and type_pat_aux | _ -> () end; if List.length sargs <> constr.cstr_arity then - raise(error(loc, !env, Constructor_arity_mismatch(lid.txt, + raise(error(loc, !!penv, Constructor_arity_mismatch(lid.txt, constr.cstr_arity, List.length sargs))); let (ty_args, existential_ctyp) = - solve_Ppat_construct ~refine env loc constr no_existentials + solve_Ppat_construct tps penv loc constr no_existentials existential_styp expected_ty in @@ -1796,7 +2173,7 @@ and type_pat_aux | Ppat_alias (p, _) -> check_non_escaping p | Ppat_constraint _ -> - raise (error (p.ppat_loc, !env, Inlined_record_escape)) + raise (error (p.ppat_loc, !!penv, Inlined_record_escape)) | _ -> () in @@ -1805,21 +2182,21 @@ and type_pat_aux Option.iter (fun (_, sarg) -> check_non_escaping sarg) sarg end; - let args = List.map2 (type_pat Value) sargs ty_args in + let args = List.map2 (type_pat tps Value) sargs ty_args in rvp { pat_desc=Tpat_construct(lid, constr, args, existential_ctyp); pat_loc = loc; pat_extra=[]; pat_type = instance expected_ty; pat_attributes = sp.ppat_attributes; - pat_env = !env } + pat_env = !!penv } | Ppat_variant(tag, sarg) -> assert (tag <> Parmatch.some_private_tag); let constant = (sarg = None) in let arg_type, row, pat_type = - solve_Ppat_variant ~refine loc env tag constant expected_ty in + solve_Ppat_variant loc penv tag constant expected_ty in let arg = (* PR#6235: propagate type information *) match sarg, arg_type with - Some sp, [ty] -> Some (type_pat Value sp ty) + Some sp, [ty] -> Some (type_pat tps Value sp ty) | _ -> None in rvp { @@ -1827,171 +2204,195 @@ and type_pat_aux pat_loc = loc; pat_extra = []; pat_type = pat_type; pat_attributes = sp.ppat_attributes; - pat_env = !env } + pat_env = !!penv } | Ppat_record(lid_sp_list, closed) -> assert (lid_sp_list <> []); let expected_type, record_ty = - match extract_concrete_record !env expected_ty with + match extract_concrete_record !!penv expected_ty with | 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 () | Not_a_record_type -> let err = Wrong_expected_kind(Record, Pattern, expected_ty) in - raise (error (loc, !env, err)) + raise (error (loc, !!penv, err)) in let type_label_pat (label_lid, label, sarg) = let ty_arg = - solve_Ppat_record_field ~refine loc env label label_lid record_ty in - (label_lid, label, type_pat Value sarg ty_arg) + solve_Ppat_record_field loc penv label label_lid record_ty in + (label_lid, label, type_pat tps Value sarg ty_arg) in let make_record_pat lbl_pat_list = check_recordpat_labels loc lbl_pat_list closed; + List.iter (forbid_atomic_field_patterns loc penv) lbl_pat_list; { pat_desc = Tpat_record (lbl_pat_list, closed); pat_loc = loc; pat_extra=[]; pat_type = instance record_ty; pat_attributes = sp.ppat_attributes; - pat_env = !env; + pat_env = !!penv; } in let lbl_a_list = wrap_disambiguate "This record pattern is expected to have" (mk_expected expected_ty) - (type_label_a_list loc false !env Env.Projection + (type_label_a_list loc false !!penv Env.Projection type_label_pat expected_type) lid_sp_list in rvp @@ solve_expected (make_record_pat lbl_a_list) - | Ppat_array spl -> - let ty_elt = solve_Ppat_array ~refine loc env expected_ty in - let pl = List.map (fun p -> type_pat Value p ty_elt) spl in + | Ppat_array(spl) -> + let ty_elt, expected_mutability = solve_Ppat_array loc penv expected_ty in + let pl = List.map (fun p -> type_pat tps Value p ty_elt) spl in rvp { - pat_desc = Tpat_array pl; + pat_desc = Tpat_array (expected_mutability, pl); pat_loc = loc; pat_extra=[]; pat_type = instance expected_ty; pat_attributes = sp.ppat_attributes; - pat_env = !env } + pat_env = !!penv } | Ppat_or(sp1, sp2) -> - let initial_pattern_variables = !pattern_variables in - let initial_module_variables = !module_variables in - let equation_level = !gadt_equations_level in - let outter_lev = get_current_level () in + (* Reset pattern forces for just [tps2] because later we append [tps1] and + [tps2]'s pattern forces, and we don't want to duplicate [tps]'s pattern + forces. *) + let tps1 = copy_type_pat_state tps in + let tps2 = {(copy_type_pat_state tps) with tps_pattern_force = []} in + (* Introduce a new level to avoid keeping nodes at intermediate levels *) + let pat_desc = with_local_level_generalize begin fun () -> (* Introduce a new scope using with_local_level without generalizations *) - let env1, p1, p1_variables, p1_module_variables, env2, p2 = + let env1, p1, env2, p2 = with_local_level begin fun () -> - let lev = get_current_level () in - gadt_equations_level := Some lev; - let type_pat_rec env sp = type_pat category sp expected_ty ~env in - let env1 = ref !env in - let p1 = type_pat_rec env1 sp1 in - let p1_variables = !pattern_variables in - let p1_module_variables = !module_variables in - pattern_variables := initial_pattern_variables; - module_variables := initial_module_variables; - let env2 = ref !env in - let p2 = type_pat_rec env2 sp2 in - (env1, p1, p1_variables, p1_module_variables, env2, p2) + let type_pat_rec tps penv sp = + type_pat tps category sp expected_ty ~penv + in + let penv1 = + Pattern_env.copy ~equations_scope:(get_current_level ()) penv in + let penv2 = Pattern_env.copy penv1 in + let p1 = type_pat_rec tps1 penv1 sp1 in + let p2 = type_pat_rec tps2 penv2 sp2 in + (penv1.env, p1, penv2.env, p2) end in - gadt_equations_level := equation_level; - let p2_variables = !pattern_variables in + let p1_variables = tps1.tps_pattern_variables in + let p2_variables = tps2.tps_pattern_variables in (* Make sure no variable with an ambiguous type gets added to the environment. *) + let outer_lev = get_current_level () in List.iter (fun { pv_type; pv_loc; _ } -> - check_scope_escape pv_loc !env1 outter_lev pv_type + check_scope_escape pv_loc env1 outer_lev pv_type ) p1_variables; List.iter (fun { pv_type; pv_loc; _ } -> - check_scope_escape pv_loc !env2 outter_lev pv_type + check_scope_escape pv_loc env2 outer_lev pv_type ) p2_variables; let alpha_env = - enter_orpat_variables loc !env p1_variables p2_variables in + enter_orpat_variables loc !!penv p1_variables p2_variables in + (* Propagate the outcome of checking the or-pattern back to + the type_pat_state that the caller passed in. + *) + blit_type_pat_state + ~src: + { tps_pattern_variables = tps1.tps_pattern_variables; + (* We want to propagate all pattern forces, regardless of + which branch they were found in. + *) + tps_pattern_force = + tps2.tps_pattern_force @ tps1.tps_pattern_force; + tps_module_variables = tps1.tps_module_variables; + } + ~dst:tps; let p2 = alpha_pat alpha_env p2 in - pattern_variables := p1_variables; - module_variables := p1_module_variables; - rp { pat_desc = Tpat_or (p1, p2, None); + Tpat_or (p1, p2, None) + end + in + rp { pat_desc = pat_desc; pat_loc = loc; pat_extra = []; pat_type = instance expected_ty; pat_attributes = sp.ppat_attributes; - pat_env = !env } + pat_env = !!penv } | Ppat_lazy sp1 -> - let nv = solve_Ppat_lazy ~refine loc env expected_ty in - let p1 = type_pat Value sp1 nv in + let nv = solve_Ppat_lazy loc penv expected_ty in + let p1 = type_pat tps Value sp1 nv in rvp { pat_desc = Tpat_lazy p1; pat_loc = loc; pat_extra=[]; pat_type = instance expected_ty; pat_attributes = sp.ppat_attributes; - pat_env = !env } + pat_env = !!penv } | Ppat_constraint(sp, sty) -> (* Pretend separate = true *) let cty, ty, expected_ty' = - solve_Ppat_constraint ~refine loc env sty expected_ty in - let p = type_pat category sp expected_ty' in + solve_Ppat_constraint tps loc !!penv sty expected_ty in + let p = type_pat tps category sp expected_ty' in let extra = (Tpat_constraint cty, loc, sp.ppat_attributes) in begin match category, (p : k general_pattern) with - | Value, {pat_desc = Tpat_var (id,s); _} -> + | Value, {pat_desc = Tpat_var (id,s,uid); _} -> { p with pat_type = ty; pat_desc = - Tpat_alias - ({p with pat_desc = Tpat_any; pat_attributes = []}, id,s); + Tpat_alias + ({p with + pat_desc = Tpat_any; + pat_attributes = (* Merlin should ignore these nodes *) + [Ast_helper.Attr.mk (mknoloc "merlin.hide") (PStr [])]; + pat_loc = { p.pat_loc with loc_ghost = true }}, + id, s, uid, ty); pat_extra = [extra]; } | _, p -> { p with pat_type = ty; pat_extra = extra::p.pat_extra } end | Ppat_type lid -> - let (path, p) = build_or_pat !env loc lid in + let (path, p) = build_or_pat !!penv loc lid in pure category @@ solve_expected { p with pat_extra = (Tpat_type (path, lid), loc, sp.ppat_attributes) :: p.pat_extra } | Ppat_open (lid,p) -> let path, new_env = - !type_open Asttypes.Fresh !env sp.ppat_loc lid in - env := new_env; - let p = type_pat category ~env p expected_ty in - let new_env = !env in + !type_open Asttypes.Fresh !!penv sp.ppat_loc lid in + Pattern_env.set_env penv new_env; + let p = type_pat tps category ~penv p expected_ty in + let new_env = !!penv in begin match Env.remove_last_open path new_env with | None -> assert false - | Some closed_env -> env := closed_env + | Some closed_env -> Pattern_env.set_env penv closed_env end; { p with pat_extra = (Tpat_open (path,lid,new_env), loc, sp.ppat_attributes) :: p.pat_extra } | Ppat_exception p -> - let p_exn = type_pat Value p Predef.type_exn in + let p_exn = type_pat tps Value p Predef.type_exn in rcp { pat_desc = Tpat_exception p_exn; pat_loc = sp.ppat_loc; pat_extra = []; pat_type = expected_ty; - pat_env = !env; + pat_env = !!penv; pat_attributes = sp.ppat_attributes; } + | Ppat_effect _ -> + raise (error (loc, !!penv, Effect_pattern_below_toplevel)) | Ppat_extension ext -> raise (Error_forward (Builtin_attributes.error_of_extension ext)) -let type_pat category ?no_existentials - ?(lev=get_current_level()) env sp expected_ty = - Misc.protect_refs [Misc.R (gadt_equations_level, Some lev)] - (fun () -> type_pat category ~no_existentials ~env sp expected_ty) - 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_type; pv_loc; pv_as_var; pv_attributes} env -> - let check = if pv_as_var then check_as else check in + (fun {pv_id; pv_type; pv_loc; pv_kind; pv_attributes; pv_uid} env -> + let check = if pv_kind=As_var then check_as else check in Env.add_value ?check 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 ()); + val_uid = pv_uid; } env ) pv env let add_module_variables env module_variables = + let module_variables_as_list = + match module_variables with + | Modvars_allowed mvs -> mvs.module_variables + | Modvars_ignored | Modvars_rejected -> [] + in List.fold_left (fun env { mv_id; mv_loc; mv_name; mv_uid } -> Typetexp.TyVarEnv.with_local_scope begin fun () -> (* This code is parallel to the typing of Pexp_letmodule. However we @@ -2021,52 +2422,65 @@ let add_module_variables env module_variables = in Env.add_module_declaration ~shape:md_shape ~check:true mv_id pres md env end - ) env module_variables - -let type_pattern category ~lev env spat expected_ty allow_modules = - reset_pattern allow_modules; - let new_env = ref env in - let pat = type_pat category ~lev new_env spat expected_ty in - let pvs = get_ref pattern_variables in - let mvs = get_ref module_variables in - (pat, !new_env, get_ref pattern_force, pvs, mvs) + ) env module_variables_as_list + +let type_pat tps category ?no_existentials penv = + type_pat tps category ~no_existentials ~penv + +let type_pattern category ~lev env spat expected_ty ?cont allow_modules = + let tps = create_type_pat_state ?cont allow_modules in + let new_penv = Pattern_env.make env + ~equations_scope:lev ~in_counterexample:false in + let pat = type_pat tps category new_penv spat expected_ty in + let { tps_pattern_variables = pvs; + tps_module_variables = mvs; + tps_pattern_force = pattern_forces; + } = tps in + (pat, !!new_penv, pattern_forces, pvs, mvs) let type_pattern_list category no_existentials env spatl expected_tys allow_modules = - reset_pattern allow_modules; - let new_env = ref env in + let tps = create_type_pat_state allow_modules in + let equations_scope = get_current_level () in + let new_penv = Pattern_env.make env + ~equations_scope ~in_counterexample:false in let type_pat (attrs, pat) ty = Builtin_attributes.warning_scope ~ppwarning:false attrs (fun () -> - type_pat category ~no_existentials new_env pat ty + type_pat tps category ~no_existentials new_penv pat ty ) in let patl = List.map2 type_pat spatl expected_tys in - let pvs = get_ref pattern_variables in - let mvs = get_ref module_variables in - (patl, !new_env, get_ref pattern_force, pvs, mvs) + let { tps_pattern_variables = pvs; + tps_module_variables = mvs; + tps_pattern_force = pattern_forces; + } = tps in + (patl, !!new_penv, pattern_forces, pvs, mvs) let type_class_arg_pattern cl_num val_env met_env l spat = - reset_pattern Modules_rejected; + let tps = create_type_pat_state Modules_rejected in let nv = newvar () in + let equations_scope = get_current_level () in + let new_penv = Pattern_env.make val_env + ~equations_scope ~in_counterexample:false in let pat = - type_pat Value ~no_existentials:In_class_args (ref val_env) spat nv in + type_pat tps Value ~no_existentials:In_class_args new_penv spat nv in if has_variants pat then begin Parmatch.pressure_variants val_env [pat]; finalize_variants pat; end; - List.iter (fun f -> f()) (get_ref pattern_force); - if is_optional l then unify_pat (ref val_env) pat (type_option (newvar ())); + List.iter (fun f -> f()) tps.tps_pattern_force; + if is_optional l then unify_pat val_env pat (type_option (newvar ())); let (pv, val_env, met_env) = List.fold_right - (fun {pv_id; pv_type; pv_loc; pv_as_var; pv_attributes} + (fun {pv_id; pv_type; pv_loc; pv_kind; pv_attributes} (pv, val_env, met_env) -> let check s = - if pv_as_var then Warnings.Unused_var s + if pv_kind = As_var then Warnings.Unused_var s else Warnings.Unused_var_strict s in let id' = Ident.rename pv_id in - let val_uid = Uid.mk ~current_unit:(Env.get_unit_name ()) in + let val_uid = Uid.mk ~current_unit:(Env.get_current_unit ()) in let val_env = Env.add_value pv_id { val_type = pv_type @@ -2088,21 +2502,22 @@ let type_class_arg_pattern cl_num val_env met_env l spat = met_env in ((id', pv_id, pv_type)::pv, val_env, met_env)) - !pattern_variables ([], val_env, met_env) + tps.tps_pattern_variables ([], val_env, met_env) in (pat, pv, val_env, met_env) let type_self_pattern env spat = let open Ast_helper in let spat = Pat.mk(Ppat_alias (spat, mknoloc "selfpat-*")) in - reset_pattern Modules_rejected; + let tps = create_type_pat_state Modules_rejected in let nv = newvar() in + let equations_scope = get_current_level () in + let new_penv = Pattern_env.make env + ~equations_scope ~in_counterexample:false in let pat = - type_pat Value ~no_existentials:In_self_pattern (ref env) spat nv in - List.iter (fun f -> f()) (get_ref pattern_force); - let pv = !pattern_variables in - pattern_variables := []; - pat, pv + type_pat tps Value ~no_existentials:In_self_pattern new_penv spat nv in + List.iter (fun f -> f()) tps.tps_pattern_force; + pat, tps.tps_pattern_variables type delayed_check = ((unit -> unit) * Warnings.state) @@ -2233,12 +2648,12 @@ type abort_reason = Adds_constraints | Empty type unification_state = { snapshot: snapshot; env: Env.t; } -let save_state env = +let save_state penv = { snapshot = Btype.snapshot (); - env = !env; } -let set_state s env = + env = !!penv; } +let set_state s penv = Btype.backtrack s.snapshot; - env := s.env + Pattern_env.set_env penv s.env (** Find the first alternative in the tree of or-patterns for which [f] does not raise an error. If all fail, the last error is @@ -2262,19 +2677,21 @@ let enter_nonsplit_or info = Refine_or {inside_nonsplit_or = true} in { info with splitting_mode } -let rec check_counter_example_pat ~info ~env tp expected_ty k = - let check_rec ?(info=info) ?(env=env) = - check_counter_example_pat ~info ~env in +let rec check_counter_example_pat + ~info ~(penv : Pattern_env.t) type_pat_state tp expected_ty k = + assert (penv.in_counterexample = true); + let check_rec ?(info=info) ?(penv=penv) = + check_counter_example_pat ~info ~penv type_pat_state in let loc = tp.pat_loc in - let refine = Some true in let solve_expected (x : pattern) : pattern = - unify_pat ~refine env x (instance expected_ty); + unify_pat_types_penv x.pat_loc penv x.pat_type + (instance expected_ty); x in (* "make pattern" and "make pattern then continue" *) let mp ?(pat_type = expected_ty) desc = { pat_desc = desc; pat_loc = loc; pat_extra=[]; - pat_type = instance pat_type; pat_attributes = []; pat_env = !env } in + pat_type = instance pat_type; pat_attributes = []; pat_env = !!penv } in let mkp k ?pat_type desc = k (mp ?pat_type desc) in let must_backtrack_on_gadt = match info.splitting_mode with @@ -2286,7 +2703,7 @@ let rec check_counter_example_pat ~info ~env tp expected_ty k = let k' () = mkp k tp.pat_desc in if info.explosion_fuel <= 0 then k' () else let decrease n = {info with explosion_fuel = info.explosion_fuel - n} in - begin match Parmatch.pats_of_type !env expected_ty with + begin match Parmatch.pats_of_type !!penv expected_ty with | [] -> raise Empty_branch | [{pat_desc = Tpat_any}] -> k' () | [tp] -> check_rec ~info:(decrease 1) tp expected_ty k @@ -2299,22 +2716,27 @@ let rec check_counter_example_pat ~info ~env tp expected_ty k = in check_rec ~info:(decrease 5) tp expected_ty k end - | Tpat_alias (p, _, _) -> check_rec ~info p expected_ty k + | Tpat_alias (p, _, _, _, _) -> check_rec ~info p expected_ty k | Tpat_constant cst -> - let cst = constant_or_raise !env loc (Untypeast.constant cst) in + let cst = constant_or_raise !!penv loc (Untypeast.constant cst) in k @@ solve_expected (mp (Tpat_constant cst) ~pat_type:(type_constant cst)) | Tpat_tuple tpl -> assert (List.length tpl >= 2); - let expected_tys = solve_Ppat_tuple ~refine loc env tpl expected_ty in + let expected_tys = solve_Ppat_tuple loc penv tpl expected_ty in let tpl_ann = List.combine tpl expected_tys in - map_fold_cont (fun (p,t) -> check_rec p t) tpl_ann (fun pl -> - mkp k (Tpat_tuple pl) - ~pat_type:(newty (Ttuple(List.map (fun p -> p.pat_type) pl)))) + map_fold_cont (fun ((l,p),(_,t)) k -> check_rec p t (fun p -> k (l, p))) + tpl_ann + (fun pl -> + let pat_type = + newty (Ttuple(List.map (fun (l, p) -> l, p.pat_type) pl)) + in + mkp k (Tpat_tuple pl) ~pat_type) | Tpat_construct(cstr_lid, constr, targs, _) -> if constr.cstr_generalized && must_backtrack_on_gadt then raise Need_backtrack; let (ty_args, existential_ctyp) = - solve_Ppat_construct ~refine env loc constr None None expected_ty + solve_Ppat_construct + type_pat_state penv loc constr None None expected_ty in map_fold_cont (fun (p,t) -> check_rec p t) @@ -2324,7 +2746,7 @@ let rec check_counter_example_pat ~info ~env tp expected_ty k = | Tpat_variant(tag, targ, _) -> let constant = (targ = None) in let arg_type, row, pat_type = - solve_Ppat_variant ~refine loc env tag constant expected_ty in + solve_Ppat_variant loc penv tag constant expected_ty in let k arg = mkp k ~pat_type (Tpat_variant(tag, arg, ref row)) in begin @@ -2337,37 +2759,37 @@ let rec check_counter_example_pat ~info ~env tp expected_ty k = let record_ty = generic_instance expected_ty in let type_label_pat (label_lid, label, targ) k = let ty_arg = - solve_Ppat_record_field ~refine loc env label label_lid record_ty in + solve_Ppat_record_field loc penv label label_lid record_ty in check_rec targ ty_arg (fun arg -> k (label_lid, label, arg)) in map_fold_cont type_label_pat fields (fun fields -> mkp k (Tpat_record (fields, closed))) - | Tpat_array tpl -> - let ty_elt = solve_Ppat_array ~refine loc env expected_ty in + | Tpat_array (mutability, tpl) -> + let ty_elt, _ = solve_Ppat_array loc penv expected_ty in map_fold_cont (fun p -> check_rec p ty_elt) tpl - (fun pl -> mkp k (Tpat_array pl)) + (fun pl -> mkp k (Tpat_array (mutability, pl))) | Tpat_or(tp1, tp2, _) -> (* We are in counter-example mode, but try to avoid backtracking *) let must_split = match info.splitting_mode with | Backtrack_or -> true | Refine_or _ -> false in - let state = save_state env in + let state = save_state penv in let split_or tp = let type_alternative pat = - set_state state env; check_rec pat expected_ty k in + set_state state penv; check_rec pat expected_ty k in find_valid_alternative type_alternative tp in if must_split then split_or tp else - let check_rec_result env tp : (_, abort_reason) result = + let check_rec_result penv tp : (_, abort_reason) result = let info = enter_nonsplit_or info in - match check_rec ~info tp expected_ty ~env (fun x -> x) with + match check_rec ~info tp expected_ty ~penv (fun x -> x) with | res -> Ok res | exception Need_backtrack -> Error Adds_constraints | exception Empty_branch -> Error Empty in - let p1 = check_rec_result (ref !env) tp1 in - let p2 = check_rec_result (ref !env) tp2 in + let p1 = check_rec_result (Pattern_env.copy penv) tp1 in + let p2 = check_rec_result (Pattern_env.copy penv) tp2 in begin match p1, p2 with | Error Empty, Error Empty -> raise Empty_branch @@ -2387,56 +2809,59 @@ let rec check_counter_example_pat ~info ~env tp expected_ty k = mkp k (Tpat_or (p1, p2, None)) end | Tpat_lazy tp1 -> - let nv = solve_Ppat_lazy ~refine loc env expected_ty in + let nv = solve_Ppat_lazy loc penv expected_ty in (* do not explode under lazy: PR#7421 *) check_rec ~info:(no_explosion info) tp1 nv (fun p1 -> mkp k (Tpat_lazy p1)) -let check_counter_example_pat ~counter_example_args - ?(lev=get_current_level()) env tp expected_ty = - Misc.protect_refs [Misc.R (gadt_equations_level, Some lev)] (fun () -> - check_counter_example_pat - ~info:counter_example_args ~env tp expected_ty (fun x -> x) - ) +let check_counter_example_pat ~counter_example_args penv tp expected_ty = + (* [check_counter_example_pat] doesn't use [type_pat_state] in an interesting + way -- one of the functions it calls writes an entry into + [tps_pattern_forces] -- so we can just ignore module patterns. *) + let type_pat_state = create_type_pat_state Modules_ignored in + wrap_trace_gadt_instances ~force:true !!penv + (check_counter_example_pat ~info:counter_example_args ~penv + type_pat_state tp expected_ty) + (fun x -> x) (* this function is passed to Partial.parmatch to type check gadt nonexhaustiveness *) -let partial_pred ~lev ~allow_modules ~splitting_mode ?(explode=0) - env expected_ty p = - let env = ref env in - let state = save_state env in +let partial_pred ~lev ~splitting_mode ?(explode=0) env expected_ty p = + let penv = Pattern_env.make env + ~equations_scope:lev ~in_counterexample:true in + let state = save_state penv in let counter_example_args = { splitting_mode; explosion_fuel = explode; } in try - reset_pattern allow_modules; let typed_p = - check_counter_example_pat ~lev ~counter_example_args env p expected_ty in - set_state state env; + check_counter_example_pat ~counter_example_args penv p expected_ty + in + set_state state penv; (* types are invalidated but we don't need them here *) Some typed_p with Error _ | Empty_branch -> - set_state state env; + set_state state penv; None let check_partial - ?(lev=get_current_level ()) allow_modules env expected_ty loc cases + ?(lev=get_current_level ()) env expected_ty loc cases = let explode = match cases with [_] -> 5 | _ -> 0 in let splitting_mode = Refine_or {inside_nonsplit_or = false} in Parmatch.check_partial - (partial_pred ~lev ~allow_modules ~splitting_mode ~explode env expected_ty) + (partial_pred ~lev ~splitting_mode ~explode env expected_ty) loc cases let check_unused - ?(lev=get_current_level ()) allow_modules env expected_ty cases + ?(lev=get_current_level ()) env expected_ty cases = Parmatch.check_unused (fun refute pat -> match - partial_pred ~lev ~allow_modules ~splitting_mode:Backtrack_or ~explode:5 + partial_pred ~lev ~splitting_mode:Backtrack_or ~explode:5 env expected_ty pat with Some pat' when refute -> @@ -2468,15 +2893,284 @@ let rec final_subexpression exp = match exp.exp_desc with Texp_let (_, _, e) | Texp_sequence (_, e) - | Texp_try (e, _) + | Texp_try (e, _, _) | Texp_ifthenelse (_, e, _) - | Texp_match (_, {c_rhs=e} :: _, _) + | Texp_match (_, {c_rhs=e} :: _, _, _) | Texp_letmodule (_, _, _, _, e) | Texp_letexception (_, e) | Texp_open (_, e) -> final_subexpression e | _ -> exp +let is_prim ~name funct = + match funct.exp_desc with + | Texp_ident (_, _, {val_kind=Val_prim{Primitive.prim_name; _}}) -> + prim_name = name + | _ -> false + +(* List labels in a function type, and whether return type is a variable *) +let rec list_labels_aux env visited ls ty_fun = + let ty = expand_head env ty_fun in + if TypeSet.mem ty visited then + List.rev ls, false + else match get_desc ty with + | Tarrow (l, _, ty_res, _) -> + list_labels_aux env (TypeSet.add ty visited) (l::ls) ty_res + | _ -> + List.rev ls, is_Tvar ty + +let list_labels env ty = + let snap = Btype.snapshot () in + let result = + wrap_trace_gadt_instances env (list_labels_aux env TypeSet.empty []) ty + in + Btype.backtrack snap; + result + + +(* Collecting arguments for function applications. *) + +type untyped_apply_arg = + | Known_arg of + { + sarg : Parsetree.expression; + ty_arg : type_expr; + ty_arg0 : type_expr; + wrapped_in_some : bool; + } + (* [arg] is a [Known_arg] in: + - [f arg] when is known to be a function (f : _ -> _) + - [f ~lab:arg] when (f : lab:_ -> _) + - [f ?lab:arg] when (f : ?lab:_ -> _) + In these cases we have [wrapped_in_some = false]. + + - [f ~lab:arg] when (f : ?lab:_ -> _) + In this case [wrapped_in_some = true]. + + [ty_arg] is the (possibly generic) expected type of the argument, + and [ty_arg0] is an instance of [ty_arg]. *) + | Unknown_arg of + { + sarg : Parsetree.expression; + ty_arg : type_expr; + } + (* [arg] is an [Unknown_arg] in: + [f arg] when [f] is not known (either a type variable, + or the [commu_ok] case where a function type is known + but not principally). + + [ty_arg] is the expected type of the argument, usually just + a fresh type variable. *) + | Eliminated_optional_arg of + { + ty_arg : type_expr; + level: int; + } + (* When [f : ?foo:ty -> _ -> _], [~foo] is an [Eliminated_optional_arg] + in [f x] ([foo] is an optional argument that was not passed, but a + following positional argument was passed). + + [level] is the level of the function arrow. *) + +type untyped_omitted_param = + { + ty_arg : type_expr; + level: int; + } + +let remaining_function_type_for_error ty_ret rev_args = + List.fold_left + (fun ty_ret (lbl, arg) -> + match arg with + | Arg (Unknown_arg _ | Known_arg _) -> ty_ret + | Arg (Eliminated_optional_arg { ty_arg; level }) + | Omitted { ty_arg; level } -> + let ty_ret = + newty2 ~level + (Tarrow (lbl, ty_arg, ty_ret, commu_ok)) + in + ty_ret) + ty_ret rev_args + +let previous_arg_loc rev_args ~funct = + (* [rev_args] is the arguments typed until now, in reverse + order of appearance. Not all arguments have a location + attached (eg. an optional argument that is not passed). *) + rev_args + |> List.find_map (function + | _, Arg (Known_arg { sarg = {pexp_loc = loc; _ }} + | Unknown_arg { sarg = {pexp_loc = loc; _}}) -> + Some loc + | _ -> None) + |> Option.value ~default:funct.exp_loc + +let collect_unknown_apply_args env funct ty_fun0 rev_args sargs = + let labels_match ~param ~arg = + param = arg + || !Clflags.classic && arg = Nolabel && not (is_optional param) + in + let has_label l ty_fun = + let ls, tvar = list_labels env ty_fun in + tvar || List.mem l ls + in + let rec loop ty_fun rev_args sargs = + match sargs with + | [] -> ty_fun, List.rev rev_args + | (lbl, sarg) :: rest -> + let (ty_arg, ty_res) = + try + let ty_fun = expand_head env ty_fun in + match get_desc ty_fun with + | Tvar _ -> + let ty_arg = newvar () in + let ty_res = newvar () in + if get_level ty_fun >= get_level ty_arg && + not (is_prim ~name:"%identity" funct) && + not (Msupport.erroneous_expr_check funct) + then + Location.prerr_warning sarg.pexp_loc + Warnings.Ignored_extra_argument; + unify env ty_fun (newty (Tarrow(lbl,ty_arg,ty_res,commu_var ()))); + (ty_arg, ty_res) + | Tarrow (l, ty_arg, ty_res, _) when labels_match ~param:l ~arg:lbl -> + (ty_arg, ty_res) + | td -> + let ty_fun = match td with Tarrow _ -> newty td | _ -> ty_fun in + let ty_res = remaining_function_type_for_error ty_fun rev_args in + match get_desc ty_res with + | Tarrow _ -> + if !Clflags.classic || not (has_label lbl ty_fun) then + Msupport.resume_raise (error(sarg.pexp_loc, env, + Apply_wrong_label(lbl, ty_res, false))) + else + Msupport.resume_raise (error(funct.exp_loc, env, Incoherent_label_order)) + | _ -> + Msupport.resume_raise(error(funct.exp_loc, env, Apply_non_function { + funct; + func_ty = expand_head env funct.exp_type; + res_ty = expand_head env ty_res; + previous_arg_loc = previous_arg_loc rev_args ~funct; + extra_arg_loc = sarg.pexp_loc; })) + with Msupport.Resume -> + newvar (), ty_fun + in + let arg = Unknown_arg { sarg; ty_arg } in + loop ty_res ((lbl, Arg arg) :: rev_args) rest + in + loop ty_fun0 rev_args sargs + +let collect_apply_args env funct ignore_labels ty_fun ty_fun0 sargs = + let warned = ref false in + let rec loop ty_fun ty_fun0 rev_args sargs = + if sargs = [] then + collect_unknown_apply_args env funct ty_fun0 rev_args sargs + else + let ty_fun' = expand_head env ty_fun in + let lv = get_level ty_fun' in + let may_warn loc w = + if not !warned && !Clflags.principal && lv <> generic_level + then begin + warned := true; + Location.prerr_warning loc w + end + in + let lopt = + match get_desc ty_fun', get_desc (expand_head env ty_fun0) with + | Tarrow (l, ty_arg, ty_ret, com), Tarrow (_, ty_arg0, ty_ret0, _) + when is_commu_ok com -> + Some (l, `Arrow (ty_arg, ty_ret, ty_arg0, ty_ret0)) + | _ -> None + in + match lopt with + | None -> + (* We're not looking at a *known* function type anymore. *) + collect_unknown_apply_args env funct ty_fun0 rev_args sargs + | Some (l, arrow_kind) -> + begin + let name = label_name l + and optional = is_optional l in + let remaining_sargs, arg_opt = + if ignore_labels then begin + (* No reordering is allowed, process arguments in order *) + match sargs with + | [] -> assert false + | (l', sarg) :: remaining_sargs -> + if name = label_name l' || (not optional && l' = Nolabel) then + (remaining_sargs, Some (sarg, l')) + else if + optional && + not (List.exists (fun (l, _) -> name = label_name l) + remaining_sargs) && + List.exists (function (Nolabel, _) -> true | _ -> false) + sargs + then + (sargs, None) + else + raise(error(sarg.pexp_loc, env, + Apply_wrong_label(l', ty_fun', optional))) + end else + (* Arguments can be commuted, try to fetch the argument + corresponding to the first parameter. *) + match extract_label name sargs with + | Some (l', sarg, commuted, remaining_sargs) -> + if commuted then begin + may_warn sarg.pexp_loc + (not_principal "commuting this argument") + end; + if not optional && is_optional l' then + Location.prerr_warning sarg.pexp_loc + (Warnings.Nonoptional_label (Asttypes.string_of_label l)); + remaining_sargs, Some (sarg, l') + | None -> + sargs, None + in + match arrow_kind with + | `Arrow (ty_arg, ty_ret, ty_arg0, ty_ret0) -> + let arg = + match arg_opt with + | Some (sarg, l') -> + let wrapped_in_some = optional && not (is_optional l') in + if wrapped_in_some then + may_warn sarg.pexp_loc + (not_principal "using an optional argument here"); + Arg (Known_arg { sarg; ty_arg; ty_arg0; wrapped_in_some }) + | None -> + if optional && List.mem_assoc Nolabel sargs then begin + may_warn funct.exp_loc (Warnings.Non_principal_labels + "eliminated optional argument"); + Arg (Eliminated_optional_arg { ty_arg; level = lv }) + end else begin + (* No argument was given for this parameter, we abstract + over it. *) + may_warn funct.exp_loc + (Warnings.Non_principal_labels "commuted an argument"); + Omitted { ty_arg; level = lv } + end + in + loop ty_ret ty_ret0 ((l, arg) :: rev_args) remaining_sargs + end + in + loop ty_fun ty_fun0 [] sargs + +let type_omitted_parameters_and_build_result_type ty_ret args = + let ty_ret, args = + List.fold_left + (fun (ty_ret, args) (lbl, arg) -> + match arg with + | Arg _exp as arg -> + let args = (lbl, arg) :: args in + (ty_ret, args) + | Omitted { ty_arg; level } -> + let ty_ret = + newty2 ~level + (Tarrow ((lbl, ty_arg, ty_ret, commu_ok))) + in + let args = (lbl, Omitted ()) :: args in + (ty_ret, args)) + (ty_ret, []) (List.rev args) + in + ty_ret, args + (* Generalization criterion for expressions *) let rec is_nonexpansive exp = @@ -2485,14 +3179,14 @@ let rec is_nonexpansive exp = | Texp_constant _ | Texp_unreachable | Texp_function _ - | Texp_array [] - | Texp_hole -> true + | Texp_array (_, []) -> true + | Texp_typed_hole -> 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, (_,None)::el) -> - is_nonexpansive e && List.for_all is_nonexpansive_opt (List.map snd el) - | Texp_match(e, cases, _) -> + | 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 care if there are exception patterns. But the previous version enforced that there be none, so... *) @@ -2509,7 +3203,7 @@ let rec is_nonexpansive exp = && not (contains_exception_pat c_lhs) ) cases | Texp_tuple el -> - List.for_all is_nonexpansive el + List.for_all (fun (_, e) -> is_nonexpansive e) el | Texp_construct( _, _, el) -> List.for_all is_nonexpansive el | Texp_variant(_, arg) -> is_nonexpansive_opt arg @@ -2522,6 +3216,7 @@ let rec is_nonexpansive exp = | Kept _ -> true) fields && is_nonexpansive_opt extended_expression + | Texp_atomic_loc(exp, _, _) -> is_nonexpansive exp | Texp_field(exp, _, _) -> is_nonexpansive exp | Texp_ifthenelse(_cond, ifso, ifnot) -> is_nonexpansive ifso && is_nonexpansive_opt ifnot @@ -2561,9 +3256,9 @@ let rec is_nonexpansive exp = { exp_desc = Texp_ident (_, _, {val_kind = Val_prim {Primitive.prim_name = ("%raise" | "%reraise" | "%raise_notrace")}}) }, - [Nolabel, Some e]) -> + [Nolabel, Arg e]) -> is_nonexpansive e - | Texp_array (_ :: _) + | Texp_array (_, _ :: _) | Texp_apply _ | Texp_try _ | Texp_setfield _ @@ -2582,7 +3277,7 @@ and is_nonexpansive_mod mexp = match mexp.mod_desc with | Tmod_ident _ | Tmod_functor _ - | Tmod_hole -> true + | Tmod_typed_hole -> true | Tmod_unpack (e, _) -> is_nonexpansive e | Tmod_constraint (m, _, _, _) -> is_nonexpansive_mod m | Tmod_structure str -> @@ -2617,29 +3312,31 @@ and is_nonexpansive_opt = function | None -> true | Some e -> is_nonexpansive e +and is_nonexpansive_arg = function + | Omitted () -> true + | Arg e -> is_nonexpansive e + let maybe_expansive e = not (is_nonexpansive e) -let check_recursive_bindings env valbinds = +let annotate_recursive_bindings env valbinds = let ids = let_bound_idents valbinds in - List.iter - (fun {vb_expr} -> - if not (Rec_check.is_valid_recursive_expression ids vb_expr) then - raise(error(vb_expr.exp_loc, env, Illegal_letrec_expr)) - ) + List.map + (fun ({vb_pat; vb_expr; vb_rec_kind = _; vb_attributes; vb_loc} as vb) -> + match (Value_rec_check.is_valid_recursive_expression ids vb_expr) with + | None -> + raise_error(error(vb_expr.exp_loc, env, Illegal_letrec_expr)); + vb + | Some vb_rec_kind -> + { vb_pat; vb_expr; vb_rec_kind; vb_attributes; vb_loc}) valbinds let check_recursive_class_bindings env ids exprs = List.iter (fun expr -> - if not (Rec_check.is_valid_class_expr ids expr) then + if not (Value_rec_check.is_valid_class_expr ids expr) then raise(error(expr.cl_loc, env, Illegal_class_expr))) exprs -let is_prim ~name funct = - match funct.exp_desc with - | Texp_ident (_, _, {val_kind=Val_prim{Primitive.prim_name; _}}) -> - prim_name = name - | _ -> false (* Approximate the type of an expression, for better recursion *) let rec approx_type env sty = @@ -2648,7 +3345,7 @@ let rec approx_type env sty = let ty1 = if is_optional p then type_option (newvar ()) else newvar () in newty (Tarrow (p, ty1, approx_type env sty, commu_ok)) | Ptyp_tuple args -> - newty (Ttuple (List.map (approx_type env) args)) + newty (Ttuple (List.map (fun (l, t) -> l, approx_type env t) args)) | Ptyp_constr (lid, ctl) -> let path, decl = Env.lookup_type ~use:false ~loc:lid.loc lid.txt env in if List.length ctl <> decl.type_arity then newvar () @@ -2660,69 +3357,111 @@ let rec approx_type env sty = approx_type env sty | _ -> newvar () +let type_pattern_approx env spat = + match spat.ppat_desc with + | Ppat_constraint (_, sty) -> approx_type env sty + | _ -> newvar () + +let type_approx_fun env label default spat ret_ty = + let ty = type_pattern_approx env spat in + let ty = + match label, default with + | (Nolabel | Labelled _), _ -> ty + | Optional _, None -> + unify_pat_types spat.ppat_loc env ty (type_option (newvar ())); + ty + | Optional _, Some _ -> + type_option ty + in + newty (Tarrow (label, ty, ret_ty, commu_ok)) + +let type_approx_constraint env ty constraint_ ~loc = + match constraint_ with + | Pconstraint constrain -> + let ty_constrain = approx_type env constrain in + begin try unify env ty ty_constrain with Unify err -> + raise (error (loc, env, Expr_type_clash (err, None, None))) + end; + ty_constrain + | Pcoerce (constrain, coerce) -> + let approx_ty_opt = function + | None -> newvar () + | Some sty -> approx_type env sty + in + let ty_constrain = approx_ty_opt constrain + and ty_coerce = approx_type env coerce in + begin try unify env ty ty_constrain with Unify err -> + raise (error (loc, env, Expr_type_clash (err, None, None))) + end; + ty_coerce + +let type_approx_constraint_opt env ty constraint_ ~loc = + match constraint_ with + | None -> ty + | Some constraint_ -> type_approx_constraint env ty constraint_ ~loc + let rec type_approx env sexp = + let loc = sexp.pexp_loc in match sexp.pexp_desc with Pexp_let (_, _, e) -> type_approx env e - | Pexp_fun (p, _, _, e) -> - let ty = if is_optional p then type_option (newvar ()) else newvar () in - newty (Tarrow(p, ty, type_approx env e, commu_ok)) - | Pexp_function ({pc_rhs=e}::_) -> - newty (Tarrow(Nolabel, newvar (), type_approx env e, commu_ok)) + | Pexp_function (params, c, body) -> + type_approx_function env params c body ~loc | Pexp_match (_, {pc_rhs=e}::_) -> type_approx env e | Pexp_try (e, _) -> type_approx env e - | Pexp_tuple l -> newty (Ttuple(List.map (type_approx env) l)) + | Pexp_tuple l -> + let labeled_tys = List.map (fun (label, l) -> label, type_approx env l) l in + newty (Ttuple labeled_tys) | Pexp_ifthenelse (_,e,_) -> type_approx env e | Pexp_sequence (_,e) -> type_approx env e | Pexp_constraint (e, sty) -> let ty = type_approx env e in - let ty1 = approx_type env sty in - begin try unify env ty ty1 with Unify err -> - raise(error(sexp.pexp_loc, env, Expr_type_clash (err, None, None))) - end; - ty1 + type_approx_constraint env ty (Pconstraint sty) ~loc | Pexp_coerce (e, sty1, sty2) -> - let approx_ty_opt = function - | None -> newvar () - | Some sty -> approx_type env sty - in - let ty = type_approx env e - and ty1 = approx_ty_opt sty1 - and ty2 = approx_type env sty2 in - begin try unify env ty ty1 with Unify err -> - raise(error(sexp.pexp_loc, env, Expr_type_clash (err, None, None))) - end; - ty2 + let ty = type_approx env e in + type_approx_constraint env ty (Pcoerce (sty1, sty2)) ~loc + | Pexp_pack (_, Some ptyp) -> + let ty = newvar () in + let sty = Ast_helper.Typ.package ~loc ptyp in + type_approx_constraint env ty (Pconstraint sty) ~loc | _ -> newvar () -(* List labels in a function type, and whether return type is a variable *) -let rec list_labels_aux env visited ls ty_fun = - let ty = expand_head env ty_fun in - if TypeSet.mem ty visited then - List.rev ls, false - else match get_desc ty with - Tarrow (l, _, ty_res, _) -> - list_labels_aux env (TypeSet.add ty visited) (l::ls) ty_res - | _ -> - List.rev ls, is_Tvar ty - -let list_labels env ty = - wrap_trace_gadt_instances env (list_labels_aux env TypeSet.empty []) ty +and type_approx_function env params c body ~loc = + (* We can approximate types up to the first newtype parameter, whereupon + we give up. + *) + match params with + | { pparam_desc = Pparam_val (label, default, pat) } :: params -> + type_approx_fun env label default pat + (type_approx_function env params c body ~loc) + | { pparam_desc = Pparam_newtype _ } :: _ -> + newvar () + | [] -> + let body_ty = + match body with + | Pfunction_body body -> + type_approx env body + | Pfunction_cases ({pc_rhs = e} :: _, _, _) -> + newty (Tarrow (Nolabel, newvar (), type_approx env e, commu_ok)) + | Pfunction_cases ([], _, _) -> + newvar () + in + type_approx_constraint_opt env body_ty c ~loc (* Check that all univars are safe in a type. Both exp.exp_type and ty_expected should already be generalized. *) let check_univars env kind exp ty_expected vars = let pty = instance ty_expected in let exp_ty, vars = - with_local_level_iter ~post:generalize begin fun () -> + with_local_level_generalize begin fun () -> match get_desc pty with Tpoly (body, tl) -> (* Enforce scoping for type_let: since body is not generic, instance_poly only makes copies of nodes that have a Tunivar as descendant *) - let _, ty' = instance_poly true tl body in + let _, ty' = instance_poly ~fixed:true tl body in let vars, exp_ty = instance_parameterized_type vars exp.exp_type in unify_exp_types exp.exp_loc env exp_ty ty'; - ((exp_ty, vars), exp_ty::vars) + (exp_ty, vars) | _ -> assert false end in @@ -2736,12 +3475,6 @@ let check_univars env kind exp ty_expected vars = ~trace:[Ctype.expanded_diff env ~got:ty ~expected:ty_expected]))) -let generalize_and_check_univars env kind exp ty_expected vars = - generalize exp.exp_type; - generalize ty_expected; - List.iter generalize vars; - check_univars env kind exp ty_expected vars - (* [check_statement] implements the [non-unit-statement] check. This check is called in contexts where the value of the expression is known @@ -2809,17 +3542,20 @@ let check_partial_application ~statement exp = match exp_desc with | Texp_ident _ | Texp_constant _ | Texp_tuple _ | Texp_construct _ | Texp_variant _ | Texp_record _ - | Texp_field _ | Texp_setfield _ | Texp_array _ + | Texp_atomic_loc _ | Texp_field _ | Texp_setfield _ | Texp_array _ | Texp_while _ | Texp_for _ | Texp_instvar _ | Texp_setinstvar _ | Texp_override _ | Texp_assert _ | Texp_lazy _ | Texp_object _ | Texp_pack _ | Texp_unreachable | Texp_extension_constructor _ | Texp_ifthenelse (_, _, None) | Texp_function _ -> check_statement () - | Texp_match (_, cases, _) -> - List.iter (fun {c_rhs; _} -> check c_rhs) cases - | Texp_try (e, cases) -> - check e; List.iter (fun {c_rhs; _} -> check c_rhs) cases + | Texp_match (_, cases, eff_cases, _) -> + List.iter (fun {c_rhs; _} -> check c_rhs) cases; + List.iter (fun {c_rhs; _} -> check c_rhs) eff_cases + | Texp_try (e, cases, eff_cases) -> + check e; + List.iter (fun {c_rhs; _} -> check c_rhs) cases; + List.iter (fun {c_rhs; _} -> check c_rhs) eff_cases | Texp_ifthenelse (_, e1, Some e2) -> check e1; check e2 | Texp_let (_, _, e) | Texp_sequence (_, e) | Texp_open (_, e) @@ -2828,7 +3564,7 @@ let check_partial_application ~statement exp = | Texp_apply _ | Texp_send _ | Texp_new _ | Texp_letop _ -> Location.prerr_warning exp_loc Warnings.Ignored_partial_application - | Texp_hole -> () + | Texp_typed_hole -> () end in check exp @@ -2860,13 +3596,13 @@ let pattern_needs_partial_application_check p = (* Check that a type is generalizable at some level *) let generalizable level ty = - let rec check ty = - if not_marked_node ty then - if get_level ty <= level then raise Exit else - (flip_mark_node ty; iter_type_expr check ty) - in - try check ty; unmark_type ty; true - with Exit -> unmark_type ty; false + with_type_mark begin fun mark -> + let rec check ty = + if try_mark_node mark ty then + if get_level ty <= level then raise Exit else iter_type_expr check ty + in + try check ty; true with Exit -> false + end (* Hack to allow coercion of self. Will clean-up later. *) let self_coercion = ref ([] : (Path.t * Location.t list ref) list) @@ -2874,8 +3610,9 @@ let self_coercion = ref ([] : (Path.t * Location.t list ref) list) (* Helpers for type_cases *) let contains_variant_either ty = + with_type_mark begin fun mark -> let rec loop ty = - if try_mark_node ty then + if try_mark_node mark ty then begin match get_desc ty with Tvariant row -> if not (is_fixed row) then @@ -2888,8 +3625,8 @@ let contains_variant_either ty = iter_type_expr loop ty end in - try loop ty; unmark_type ty; false - with Exit -> unmark_type ty; true + try loop ty; false with Exit -> true + end let shallow_iter_ppat f p = match p.ppat_desc with @@ -2898,9 +3635,10 @@ let shallow_iter_ppat f p = | Ppat_extension _ | Ppat_type _ | Ppat_unpack _ -> () | Ppat_array pats -> List.iter f pats - | Ppat_or (p1,p2) -> f p1; f p2 + | Ppat_or (p1,p2) + | Ppat_effect(p1, p2) -> f p1; f p2 | Ppat_variant (_, arg) -> Option.iter f arg - | Ppat_tuple lst -> List.iter f lst + | Ppat_tuple (lst, _) -> List.iter (fun (_, p) -> f p) lst | Ppat_construct (_, Some (_, p)) | Ppat_exception p | Ppat_alias (p,_) | Ppat_open (_,p) @@ -2941,6 +3679,22 @@ let may_contain_gadts p = | _ -> false) p +(* One of the things we do in the presence of GADT constructors (see above + definition) is treat `let p = e in ...` as a match `match e with p -> ...`. + This changes the way type inference works to check the expression first, and + use its type in the checking of the pattern. We want that behavior for + labeled tuple patterns as well. *) +let turn_let_into_match p = + exists_ppat + (fun p -> + match p.ppat_desc with + | Ppat_construct _ -> true + | Ppat_tuple (_, Open) -> true + | Ppat_tuple (spl, Closed) -> + List.exists (fun (l, _) -> Option.is_some l) spl + | _ -> false) + p + (* There are various things that we need to do in presence of module patterns that aren't required if there are none. Most notably, we need to ensure the modules are entered at the appropriate scope. The caller should use @@ -2967,45 +3721,24 @@ let check_absent_variant env = || not (is_fixed row) && not (static_row row) (* same as Ctype.poly *) then () else let ty_arg = - match arg with None -> [] | Some p -> [correct_levels p.pat_type] in + match arg with None -> [] | Some p -> [duplicate_type p.pat_type] in let fields = [s, rf_either ty_arg ~no_arg:(arg=None) ~matched:true] in let row' = create_row ~fields ~more:(newvar ()) ~closed:false ~fixed:None ~name:None in (* Should fail *) - unify_pat (ref env) {pat with pat_type = newty (Tvariant row')} - (correct_levels pat.pat_type) + unify_pat env {pat with pat_type = newty (Tvariant row')} + (duplicate_type pat.pat_type) | _ -> () } -(* Getting proper location of already typed expressions. - - Used to avoid confusing locations on type error messages in presence of - type constraints. - For example: - - (* Before patch *) - # let x : string = (5 : int);; - ^ - (* After patch *) - # let x : string = (5 : int);; - ^^^^^^^^^ -*) -let proper_exp_loc exp = - let rec aux = function - | [] -> exp.exp_loc - | ((Texp_constraint _ | Texp_coerce _), loc, _) :: _ -> loc - | _ :: rest -> aux rest - in - aux exp.exp_extra - (* To find reasonable names for let-bound and lambda-bound idents *) 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 = @@ -3013,22 +3746,13 @@ let name_cases default lst = (* Typing of expressions *) -(** [sdesc_for_hint] is used by error messages to report literals in their - original formatting *) -let unify_exp ?sdesc_for_hint env exp expected_ty = - let loc = proper_exp_loc exp in - try - unify_exp_types loc env exp.exp_type expected_ty - with Error(loc, env, Expr_type_clash(err, tfc, None)) -> - raise (error(loc, env, Expr_type_clash(err, tfc, sdesc_for_hint))) - (* If [is_inferred e] is true, [e] will be typechecked without using the "expected type" provided by the context. *) let rec is_inferred sexp = match sexp.pexp_desc with | Pexp_ident _ | Pexp_apply _ | Pexp_field _ | Pexp_constraint _ - | Pexp_coerce _ | Pexp_send _ | Pexp_new _ -> true + | Pexp_coerce _ | Pexp_send _ | Pexp_new _ | Pexp_pack (_, Some _) -> true | Pexp_sequence (_, e) | Pexp_open (_, e) -> is_inferred e | Pexp_ifthenelse (_, e1, Some e2) -> is_inferred e1 && is_inferred e2 | _ -> false @@ -3072,10 +3796,8 @@ let with_explanation explanation f = raise (error (loc', env', err)) (* Generalize expressions *) -let generalize_structure_exp exp = generalize_structure exp.exp_type -let may_lower_contravariant_then_generalize env exp = - if maybe_expansive exp then lower_contravariant env exp.exp_type; - generalize exp.exp_type +let may_lower_contravariant env exp = + if maybe_expansive exp then lower_contravariant env exp.exp_type (* value binding elaboration *) @@ -3121,6 +3843,24 @@ let vb_pat_constraint ({pvb_pat=pat; pvb_expr = exp; _ } as vb) = Pat.constraint_ ~loc:{pat.ppat_loc with Location.loc_ghost=true} pat sty | _ -> pat +(** The body of a constraint or coercion. The "body" may be either an expression + or a list of function cases. This type is polymorphic in the data returned + out of typing so that typing an expression body can return an expression + and typing a function cases body can return the cases. +*) +type 'ret constraint_arg = + { type_without_constraint: Env.t -> 'ret * type_expr; + (** [type_without_constraint] types a body (e :> t) where there is no + constraint. + *) + type_with_constraint: Env.t -> type_expr -> 'ret; + (** [type_with_constraint] types a body (e : t) or (e : t :> t') in + the presence of a constraint. + *) + is_self: 'ret -> bool; + (** Whether the thing being constrained is a [Val_self] ident. *) + } + let rec type_exp ?recarg env sexp = (* We now delegate everything to type_expect *) type_expect ?recarg env sexp (mk_expected (newvar ())) @@ -3132,13 +3872,13 @@ let rec type_exp ?recarg env sexp = at [generic_level] (but its variables no higher than [!current_level]). *) -and type_expect ?in_function ?recarg env sexp ty_expected_explained = +and type_expect ?recarg env sexp ty_expected_explained = Msupport.with_saved_types ~warning_attribute:sexp.pexp_attributes ?save_part:None (fun () -> let saved = save_levels () in try - type_expect_ ?in_function ?recarg env sexp ty_expected_explained + type_expect_ ?recarg env sexp ty_expected_explained with exn -> Msupport.erroneous_type_register ty_expected_explained.ty; raise_error exn; @@ -3163,20 +3903,19 @@ and type_expect ?in_function ?recarg env sexp ty_expected_explained = }) and type_expect_ - ?in_function ?(recarg=Rejected) + ?(recarg=Rejected) env sexp ty_expected_explained = let { ty = ty_expected; explanation } = ty_expected_explained in let loc = sexp.pexp_loc in - let desc = sexp.pexp_desc in (* Record the expression type before unifying it with the expected type *) let with_explanation = with_explanation explanation in (* Unify the result with [ty_expected], enforcing the current level *) let rue exp = with_explanation (fun () -> - unify_exp ~sdesc_for_hint:desc env (re exp) (instance ty_expected)); + unify_exp ~sexp env (re exp) (instance ty_expected)); exp in - match desc with + match sexp.pexp_desc with | Pexp_ident lid -> let path, desc = type_ident env ~recarg lid in let exp_desc = @@ -3203,7 +3942,7 @@ and type_expect_ exp_type = instance desc.val_type; exp_attributes = sexp.pexp_attributes; exp_env = env } - | Pexp_constant(Pconst_string (str, _, _) as cst) -> ( + | Pexp_constant({pconst_desc = Pconst_string (str, _, _); _} as cst) -> ( let cst = constant_or_raise env loc cst in (* Terrible hack for format strings *) let ty_exp = expand_head env (protect_expansion env ty_expected) in @@ -3215,14 +3954,14 @@ and type_expect_ | 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"); + (not_principal "this coercion to format6"); true | _ -> false in if is_format then let format_parsetree = { (type_format loc str env) with pexp_loc = sexp.pexp_loc } in - type_expect ?in_function env format_parsetree ty_expected_explained + type_expect env format_parsetree ty_expected_explained else rue { exp_desc = Texp_constant cst; @@ -3241,10 +3980,10 @@ and type_expect_ exp_env = env } | Pexp_let(Nonrecursive, [{pvb_pat=spat; pvb_attributes=[]; _ } as vb], sbody) - when may_contain_gadts spat -> + when turn_let_into_match spat -> (* TODO: allow non-empty attributes? *) let sval = vb_exp_constraint vb in - type_expect ?in_function env + type_expect env {sexp with pexp_desc = Pexp_match (sval, [Ast_helper.Exp.case spat sbody])} ty_expected_explained @@ -3263,7 +4002,7 @@ and type_expect_ introduced by those unpacks. The below code checks for scope escape via both of these pathways (body, bound expressions). *) - with_local_level_if may_contain_modules begin fun () -> + with_local_level_generalize_if may_contain_modules begin fun () -> let allow_modules = if may_contain_modules then @@ -3276,9 +4015,9 @@ and type_expect_ allow_modules in let body = type_expect new_env sbody ty_expected_explained in - let () = - if rec_flag = Recursive then - check_recursive_bindings env pat_exp_list + let pat_exp_list = match rec_flag with + | Recursive -> annotate_recursive_bindings env pat_exp_list + | Nonrecursive -> pat_exp_list in (* The "bound expressions" component of the scope escape check. @@ -3294,7 +4033,6 @@ and type_expect_ types added to [new_env]. *) let bound_exp = vb.vb_expr in - generalize_structure_exp bound_exp; let bound_exp_type = Ctype.instance bound_exp.exp_type in let loc = proper_exp_loc bound_exp in let outer_var = newvar2 outer_level in @@ -3308,9 +4046,9 @@ and type_expect_ end; (pat_exp_list, body, new_env) end - ~post:(fun (_pat_exp_list, body, new_env) -> + ~before_generalize:(fun (_pat_exp_list, body, new_env) -> (* The "body" component of the scope escape check. *) - unify_exp new_env body (newvar ())) + unify_exp ~sexp new_env body (newvar ())) in re { exp_desc = Texp_let(rec_flag, pat_exp_list, body); @@ -3318,73 +4056,83 @@ and type_expect_ exp_type = body.exp_type; exp_attributes = sexp.pexp_attributes; exp_env = env } - | Pexp_fun (l, Some default, spat, sbody) -> - assert(is_optional l); (* default allowed only with optional argument *) - let open Ast_helper in - let default_loc = default.pexp_loc in - let default_ghost = {default.pexp_loc with loc_ghost = true} in - let scases = [ - Exp.case - (Pat.construct ~loc:default_ghost - (mknoloc (Longident.(Ldot (Lident "*predef*", "Some")))) - (Some ([], Pat.var ~loc:default_ghost (mknoloc "*sth*")))) - (Exp.ident ~loc:default_ghost (mknoloc (Longident.Lident "*sth*"))); - - Exp.case - (Pat.construct ~loc:default_loc - (mknoloc (Longident.(Ldot (Lident "*predef*", "None")))) - None) - default; - ] - in - let sloc = - { Location.loc_start = spat.ppat_loc.Location.loc_start; - loc_end = default_loc.Location.loc_end; - loc_ghost = true } - in - let smatch = - Exp.match_ ~loc:sloc - (Exp.ident ~loc (mknoloc (Longident.Lident "*opt*"))) - scases + | Pexp_function (params, body_constraint, body) -> + let in_function = ty_expected_explained, loc in + let exp_type, params, body, newtypes, contains_gadt = + type_function env params body_constraint body ty_expected ~in_function + ~first:true in - let pat = Pat.var ~loc:sloc (mknoloc "*opt*") in - let body = - Exp.let_ ~loc Nonrecursive - ~attrs:[Attr.mk (mknoloc "#default") (PStr [])] - [Vb.mk spat smatch] sbody - in - type_function ?in_function loc sexp.pexp_attributes env - ty_expected_explained l [Exp.case pat body] - | Pexp_fun (l, None, spat, sbody) -> - type_function ?in_function loc sexp.pexp_attributes env - ty_expected_explained l [Ast_helper.Exp.case spat sbody] - | Pexp_function caselist -> - type_function ?in_function - loc sexp.pexp_attributes env ty_expected_explained Nolabel caselist + (* Require that the n-ary function is known to have at least n arrows + in the type. This prevents GADT equations introduced by the parameters + from hiding arrows from the resulting type. + + Performance hack: Only do this check when any of [params] contains a + GADT, as this is the only opportunity for arrows to be hidden from the + resulting type. + *) + begin match contains_gadt with + | No_gadt -> () + | Contains_gadt -> + let ty_function = + List.fold_right + (fun param rest_ty -> + newty + (Tarrow (param.fp_arg_label, newvar (), rest_ty, commu_ok))) + params + (match body with + | Tfunction_body _ -> newvar () + | Tfunction_cases _ -> + newty (Tarrow (Nolabel, newvar (), newvar (), commu_ok))) + in + try unify env ty_function exp_type + with Unify trace -> + let syntactic_arity = + List.length params + + (match body with + | Tfunction_body _ -> 0 + | Tfunction_cases _ -> 1) + in + let err = + Function_arity_type_clash + { syntactic_arity; + type_constraint = exp_type; + trace; + } + in + raise (Error (loc, env, err)) + end; + re + { exp_desc = Texp_function (params, body); + exp_loc = loc; + exp_extra = List.map (fun (id, txt_loc, uid) -> + Texp_newtype' (id, txt_loc, uid), txt_loc.loc, []) newtypes; + exp_type; + exp_attributes = sexp.pexp_attributes; + exp_env = env; + } | Pexp_apply(sfunct, sargs) -> assert (sargs <> []); + let outer_level = get_current_level () in let rec lower_args seen ty_fun = let ty = expand_head env ty_fun in if TypeSet.mem ty seen then () else match get_desc ty with Tarrow (_l, ty_arg, ty_fun, _com) -> - (try enforce_current_level env ty_arg + (try Ctype.unify_var env (newvar2 outer_level) ty_arg with Unify _ -> assert false); lower_args (TypeSet.add ty seen) ty_fun | _ -> () in + (* one more level for warning on non-returning functions *) + with_local_level_generalize begin fun () -> let type_sfunct sfunct = - (* one more level for warning on non-returning functions *) - with_local_level_iter - begin fun () -> - let funct = - with_local_level_if_principal (fun () -> type_exp env sfunct) - ~post: generalize_structure_exp - in - let ty = instance funct.exp_type in - (funct, [ty]) - end - ~post:(wrap_trace_gadt_instances env (lower_args TypeSet.empty)) + let funct = + with_local_level_generalize_structure_if_principal + (fun () -> type_exp env sfunct) + in + let ty = instance funct.exp_type in + wrap_trace_gadt_instances env (lower_args TypeSet.empty) ty; + funct in let funct, sargs = let funct = type_sfunct sfunct in @@ -3410,54 +4158,100 @@ and type_expect_ exp_type = ty_res; exp_attributes = sexp.pexp_attributes; exp_env = env } + end | Pexp_match(sarg, caselist) -> let arg = - with_local_level (fun () -> type_exp env sarg) - ~post:(may_lower_contravariant_then_generalize env) + with_local_level_generalize (fun () -> type_exp env sarg) + ~before_generalize:(may_lower_contravariant env) + in + let rec split_cases valc effc conts = function + | [] -> List.rev valc, List.rev effc, List.rev conts + | {pc_lhs = {ppat_desc=Ppat_effect(p1, p2)}} as c :: rest -> + split_cases valc + (({c with pc_lhs = p1}) :: effc) (p2 :: conts) rest + | c :: rest -> + split_cases (c :: valc) effc conts rest + in + let val_caselist, eff_caselist, eff_conts = + split_cases [] [] [] caselist + in + if val_caselist = [] && eff_caselist <> [] then + raise (Error (loc, env, No_value_clauses)); + let val_cases, partial = + type_cases Computation env arg.exp_type ty_expected_explained + ~check_if_total:true loc val_caselist + in + let eff_cases = + match eff_caselist with + | [] -> [] + | eff_caselist -> + type_effect_cases Value env ty_expected_explained loc eff_caselist + eff_conts in - let cases, partial = - type_cases Computation env - arg.exp_type ty_expected_explained true loc caselist in if List.for_all (fun c -> pattern_needs_partial_application_check c.c_lhs) - cases + val_cases then check_partial_application ~statement:false arg; re { - exp_desc = Texp_match(arg, cases, partial); + exp_desc = Texp_match(arg, val_cases, eff_cases, partial); exp_loc = loc; exp_extra = []; exp_type = instance ty_expected; exp_attributes = sexp.pexp_attributes; exp_env = env } | Pexp_try(sbody, caselist) -> let body = type_expect env sbody ty_expected_explained in - let cases, _ = - type_cases Value env - Predef.type_exn ty_expected_explained false loc caselist in + let rec split_cases exnc effc conts = function + | [] -> List.rev exnc, List.rev effc, List.rev conts + | {pc_lhs = {ppat_desc=Ppat_effect(p1, p2)}} as c :: rest -> + split_cases exnc + (({c with pc_lhs = p1}) :: effc) (p2 :: conts) rest + | c :: rest -> + split_cases (c :: exnc) effc conts rest + in + let exn_caselist, eff_caselist, eff_conts = + split_cases [] [] [] caselist + in + let exn_cases, _ = + type_cases Value env Predef.type_exn ty_expected_explained + ~check_if_total:false loc exn_caselist + in + let eff_cases = + match eff_caselist with + | [] -> [] + | eff_caselist -> + type_effect_cases Value env ty_expected_explained loc eff_caselist + eff_conts + in re { - exp_desc = Texp_try(body, cases); + exp_desc = Texp_try(body, exn_cases, eff_cases); exp_loc = loc; exp_extra = []; exp_type = body.exp_type; exp_attributes = sexp.pexp_attributes; exp_env = env } | Pexp_tuple sexpl -> assert (List.length sexpl >= 2); - let subtypes = List.map (fun _ -> newgenvar ()) sexpl in - let to_unify = newgenty (Ttuple subtypes) in + Option.iter + (fun l -> raise (Error (loc, env, Repeated_tuple_exp_label l))) + (Misc.repeated_label sexpl); + let labeled_subtypes = List.map (fun (l, _) -> l, newgenvar ()) sexpl in + let to_unify = newgenty (Ttuple labeled_subtypes) in with_explanation (fun () -> unify_exp_types loc env to_unify (generic_instance ty_expected)); let expl = - List.map2 (fun body ty -> type_expect env body (mk_expected ty)) - sexpl subtypes + List.map2 + (fun (l, body) (_, ty) -> + (l, type_expect env body (mk_expected ty))) + sexpl labeled_subtypes in re { exp_desc = Texp_tuple expl; exp_loc = loc; exp_extra = []; (* Keep sharing *) - exp_type = newty (Ttuple (List.map (fun e -> e.exp_type) expl)); + exp_type = newty (Ttuple (List.map (fun (l, e) -> l, e.exp_type) expl)); exp_attributes = sexp.pexp_attributes; exp_env = env } | Pexp_construct(lid, sarg) -> - type_construct env loc lid sarg ty_expected_explained sexp.pexp_attributes + type_construct env ~sexp lid sarg ty_expected_explained | Pexp_variant(l, sarg) -> (* Keep sharing *) let ty_expected1 = protect_expansion env ty_expected in @@ -3508,9 +4302,8 @@ and type_expect_ None -> None | Some sexp -> let exp = - with_local_level_if_principal + with_local_level_generalize_structure_if_principal (fun () -> type_exp ~recarg env sexp) - ~post: generalize_structure_exp in Some exp in @@ -3543,7 +4336,7 @@ and type_expect_ | (None | Some (_, _, false)), Some (_, p', _) -> let decl = Env.find_type p' env in let ty = - with_local_level ~post:generalize_structure + with_local_level_generalize_structure (fun () -> newconstr p' (instance_list decl.type_params)) in ty, opt_exp_opath @@ -3605,14 +4398,14 @@ and type_expect_ | Some exp -> let ty_exp = instance exp.exp_type in let unify_kept lbl = - let _, ty_arg1, ty_res1 = instance_label false lbl in + let _, ty_arg1, ty_res1 = instance_label ~fixed:false lbl in unify_exp_types exp.exp_loc env ty_exp ty_res1; match matching_label lbl with | lid, _lbl, lbl_exp -> (* do not connect result types for overridden labels *) Overridden (lid, lbl_exp) | exception Not_found -> begin - let _, ty_arg2, ty_res2 = instance_label false lbl in + let _, ty_arg2, ty_res2 = instance_label ~fixed:false lbl in unify_exp_types loc env ty_arg1 ty_arg2; with_explanation (fun () -> unify_exp_types loc env (instance ty_expected) ty_res2); @@ -3658,11 +4451,9 @@ and type_expect_ exp_env = env } end | Pexp_field(srecord, lid) -> - let (record, label, _) = - type_label_access env srecord Env.Projection lid + let record, label, ty_arg = + solve_Pexp_field ~label_usage:Env.Projection env sexp srecord lid in - let (_, ty_arg, ty_res) = instance_label false label in - unify_exp env record ty_res; rue { exp_desc = Texp_field(record, lid, label); exp_loc = loc; exp_extra = []; @@ -3676,7 +4467,7 @@ and type_expect_ if expected_type = None then newvar () else record.exp_type in let (label_loc, label, newval) = type_label_exp false env loc ty_record (lid, label, snewval) in - unify_exp env record ty_record; + unify_exp ~sexp env record ty_record; if label.lbl_mut = Immutable then raise(error(loc, env, Label_not_mutable lid.txt)); rue { @@ -3686,14 +4477,26 @@ and type_expect_ exp_attributes = sexp.pexp_attributes; exp_env = env } | Pexp_array(sargl) -> - 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 ty_elt, mutability = + let ty_expected = generic_instance ty_expected in + match disambiguate_array_literal ~loc env ty_expected with + | { ty_elt = Some ty; mut } -> ty, mut + | { ty_elt = None; mut } -> + let ty = newgenvar () in + let to_unify = + match mut with + | Mutable -> Predef.type_array ty + | Immutable -> Predef.type_iarray ty + in + with_explanation (fun () -> + unify_exp_types loc env to_unify ty_expected); + ty, mut + in let argl = - List.map (fun sarg -> type_expect env sarg (mk_expected ty)) sargl in + List.map (fun sarg -> type_expect env sarg (mk_expected ty_elt)) sargl + in re { - exp_desc = Texp_array argl; + exp_desc = Texp_array (mutability, argl); exp_loc = loc; exp_extra = []; exp_type = instance ty_expected; exp_attributes = sexp.pexp_attributes; @@ -3715,7 +4518,7 @@ and type_expect_ let ifso = type_expect env sifso ty_expected_explained in let ifnot = type_expect env sifnot ty_expected_explained in (* Keep sharing *) - unify_exp env ifnot ifso.exp_type; + unify_exp ~sexp env ifnot ifso.exp_type; re { exp_desc = Texp_ifthenelse(cond, ifso, Some ifnot); exp_loc = loc; exp_extra = []; @@ -3736,11 +4539,16 @@ and type_expect_ | Pexp_while(scond, sbody) -> let cond = type_expect env scond (mk_expected ~explanation:While_loop_conditional Predef.type_bool) in + let exp_type = + match cond.exp_desc with + | Texp_construct(_, {cstr_name="true"}, _) -> instance ty_expected + | _ -> instance Predef.type_unit + in let body = type_statement ~explanation:While_loop_body env sbody in rue { exp_desc = Texp_while(cond, body); exp_loc = loc; exp_extra = []; - exp_type = instance Predef.type_unit; + exp_type; exp_attributes = sexp.pexp_attributes; exp_env = env } | Pexp_for(param, slow, shigh, dir, sbody) -> @@ -3757,7 +4565,7 @@ and type_expect_ val_attributes = []; val_kind = Val_reg; val_loc = loc; - val_uid = Uid.mk ~current_unit:(Env.get_unit_name ()); + val_uid = Uid.mk ~current_unit:(Env.get_current_unit ()); } env ~check:(fun s -> Warnings.Unused_for_index s) | _ -> @@ -3771,98 +4579,20 @@ and type_expect_ exp_attributes = sexp.pexp_attributes; exp_env = env } | Pexp_constraint (sarg, sty) -> - (* Pretend separate = true, 1% slowdown for lablgtk *) - let cty = - with_local_level begin fun () -> - Typetexp.transl_simple_type env ~closed:false sty - end - ~post:(fun cty -> generalize_structure cty.ctyp_type) - in - let ty = cty.ctyp_type in - let (arg, ty') = (type_argument env sarg ty (instance ty), instance ty) in + let (ty, exp_extra) = type_constraint env sty in + let arg = type_argument env sarg ty (instance ty) in rue { exp_desc = arg.exp_desc; exp_loc = arg.exp_loc; - exp_type = ty'; + exp_type = instance ty; exp_attributes = arg.exp_attributes; exp_env = env; - exp_extra = - (Texp_constraint cty, loc, sexp.pexp_attributes) :: arg.exp_extra; + exp_extra = (exp_extra, loc, sexp.pexp_attributes) :: arg.exp_extra; } | Pexp_coerce(sarg, sty, sty') -> - (* Pretend separate = true, 1% slowdown for lablgtk *) - (* Also see PR#7199 for a problem with the following: - let separate = !Clflags.principal || Env.has_local_constraints env in*) - let (arg, ty',cty,cty') = - match sty with - | None -> - let (cty', ty', force) = - Typetexp.transl_simple_type_delayed env sty' - in - let arg, gen = - let lv = get_current_level () in - with_local_level begin fun () -> - let arg = type_exp env sarg in - (arg, generalizable lv arg.exp_type) - end - ~post:(fun (arg,_) -> enforce_current_level env arg.exp_type) - in - begin match arg.exp_desc, !self_coercion, get_desc ty' with - Texp_ident(_, _, {val_kind=Val_self _}), (path,r) :: _, - Tconstr(path',_,_) when Path.same path path' -> - (* prerr_endline "self coercion"; *) - r := loc :: !r; - force () - | _ when free_variables ~env arg.exp_type = [] - && free_variables ~env ty' = [] -> - if not gen && (* first try a single coercion *) - let snap = snapshot () in - let ty, _b = enlarge_type env ty' in - try - force (); Ctype.unify env arg.exp_type ty; true - with Unify _ -> - backtrack snap; false - then () - else begin try - let force' = subtype env arg.exp_type ty' in - force (); force' (); - if not gen && !Clflags.principal then - Location.prerr_warning loc - (Warnings.Not_principal "this ground coercion"); - with Subtype err -> - (* prerr_endline "coercion failed"; *) - raise(error(loc, env, Not_subtype err)) - end; - | _ -> - let ty, b = enlarge_type env ty' in - force (); - begin try Ctype.unify env arg.exp_type ty with Unify err -> - let expanded = full_expand ~may_forget_scope:true env ty' in - raise(error(sarg.pexp_loc, env, - Coercion_failure({ty = ty'; expanded}, err, b))) - end - end; - (arg, ty', None, cty') - | Some sty -> - let cty, ty, force, cty', ty', force' = - with_local_level_iter ~post:generalize_structure begin fun () -> - let (cty, ty, force) = - Typetexp.transl_simple_type_delayed env sty - and (cty', ty', force') = - Typetexp.transl_simple_type_delayed env sty' - in - ((cty, ty, force, cty', ty', force'), - [ty; ty']) - end - in - begin try - let force'' = subtype env (instance ty) (instance ty') in - force (); force' (); force'' () - with Subtype err -> - raise(error(loc, env, Not_subtype err)) - end; - (type_argument env sarg ty (instance ty), - instance ty', Some cty, cty') + let arg, ty', exp_extra = + type_coerce (expression_constraint sarg) env loc sty sty' + ~loc_arg:sarg.pexp_loc in rue { exp_desc = arg.exp_desc; @@ -3870,34 +4600,32 @@ and type_expect_ exp_type = ty'; exp_attributes = arg.exp_attributes; exp_env = env; - exp_extra = (Texp_coerce (cty, cty'), loc, sexp.pexp_attributes) :: - arg.exp_extra; + exp_extra = (exp_extra, loc, sexp.pexp_attributes) :: arg.exp_extra; } | Pexp_send (e, {txt=met}) -> let obj = type_exp env e in begin try let (obj,meth,typ) = - with_local_level_if_principal + with_local_level_generalize_structure_if_principal (fun () -> type_send env loc explanation e met) - ~post:(fun (_,_,typ) -> generalize_structure typ) - in - let typ = - match get_desc typ with - | Tpoly (ty, []) -> - instance ty - | Tpoly (ty, tl) -> - if !Clflags.principal && get_level typ <> generic_level then - Location.prerr_warning loc - (Warnings.Not_principal "this use of a polymorphic method"); - snd (instance_poly false tl ty) - | Tvar _ -> - let ty' = newvar () in - unify env (instance typ) (newty(Tpoly(ty',[]))); - (* if not !Clflags.nolabels then - Location.prerr_warning loc (Warnings.Unknown_method met); *) - ty' - | _ -> - assert false + in + let typ = + match get_desc typ with + | Tpoly (ty, []) -> + instance ty + | Tpoly (ty, tl) -> + if !Clflags.principal && get_level typ <> generic_level then + Location.prerr_warning loc + (not_principal "this use of a polymorphic method"); + snd (instance_poly ~fixed:false tl ty) + | Tvar _ -> + let ty' = newvar () in + unify env (instance typ) (newty(Tpoly(ty',[]))); + (* if not !Clflags.nolabels then + Location.prerr_warning loc (Warnings.Unknown_method met); *) + ty' + | _ -> + assert false in rue { exp_desc = Texp_send(obj, meth); @@ -4019,10 +4747,12 @@ and type_expect_ | _ -> Mp_present in let scope = create_scope () in + let md_uid = Uid.mk ~current_unit:(Env.get_current_unit ()) in + let md_shape = Shape.set_uid_if_none md_shape md_uid in let md = { md_type = modl.mod_type; md_attributes = []; md_loc = name.loc; - md_uid = Uid.mk ~current_unit:(Env.get_unit_name ()); } + md_uid; } in let (id, new_env) = match name.txt with @@ -4058,7 +4788,7 @@ and type_expect_ exp_attributes = sexp.pexp_attributes; exp_env = env } | Pexp_letexception(cd, sbody) -> - let (cd, newenv) = Typedecl.transl_exception env cd in + let (cd, newenv, _shape) = Typedecl.transl_exception env cd in let body = type_expect newenv sbody ty_expected_explained in re { exp_desc = Texp_letexception(cd, body); @@ -4114,8 +4844,7 @@ and type_expect_ } | Pexp_poly(sbody, sty) -> let ty, cty = - with_local_level_if_principal - ~post:(fun (ty,_) -> generalize_structure ty) + with_local_level_generalize_structure_if_principal begin fun () -> match sty with None -> protect_expansion env ty_expected, None | Some sty -> @@ -4134,91 +4863,82 @@ and type_expect_ { exp with exp_type = instance ty } | Tpoly (ty', tl) -> (* One more level to generalize locally *) - let (exp,_) = + let (exp, vars) = with_local_level begin fun () -> let vars, ty'' = - with_local_level_if_principal - (fun () -> instance_poly true tl ty') - ~post:(fun (_,ty'') -> generalize_structure ty'') + with_local_level_generalize_structure_if_principal + (fun () -> instance_poly ~fixed:true tl ty') in let exp = type_expect env sbody (mk_expected ty'') in (exp, vars) end - ~post: begin fun (exp,vars) -> - generalize_and_check_univars env "method" exp ty_expected vars - end in + check_univars env "method" exp ty_expected vars; { exp with exp_type = instance ty } | Tvar _ -> let exp = type_exp env sbody in let exp = {exp with exp_type = newty (Tpoly (exp.exp_type, []))} in - unify_exp env exp ty; + unify_exp ~sexp env exp ty; exp | _ -> assert false in re { exp with exp_extra = (Texp_poly cty, loc, sexp.pexp_attributes) :: exp.exp_extra } - | Pexp_newtype({txt=name} as label_loc, sbody) -> - let ty = - if Typetexp.valid_tyvar_name name then - newvar ~name () - else - newvar () - in - (* Use [with_local_level] just for scoping *) - let body, ety, id = with_local_level begin fun () -> - (* Create a fake abstract type declaration for [name]. *) - let decl = new_local_type ~loc () in - let scope = create_scope () in - let (id, new_env) = Env.enter_type ~scope name decl env in - - let body = type_exp new_env sbody in - (* Replace every instance of this type constructor in the resulting - type. *) - let seen = Hashtbl.create 8 in - let rec replace t = - if Hashtbl.mem seen (get_id t) then () - else begin - Hashtbl.add seen (get_id t) (); - match get_desc t with - | Tconstr (Path.Pident id', _, _) when id == id' -> link_type t ty - | _ -> Btype.iter_type_expr replace t - end - in - let ety = Subst.type_expr Subst.identity body.exp_type in - replace ety; - (body, ety, id) - end + | Pexp_newtype(name, sbody) -> + let body, ety, id, uid = type_newtype env name (fun env -> + let expr = type_exp env sbody in + expr, expr.exp_type) in (* non-expansive if the body is non-expansive, so we don't introduce any new extra node in the typed AST. *) rue { body with exp_loc = loc; exp_type = ety; exp_extra = - (Texp_newtype' (id, label_loc), loc, sexp.pexp_attributes) :: body.exp_extra } - | Pexp_pack m -> - let (p, fl) = - match get_desc (Ctype.expand_head env (instance ty_expected)) with - Tpackage (p, fl) -> - if !Clflags.principal && - get_level (Ctype.expand_head env - (protect_expansion env ty_expected)) - < Btype.generic_level - then - Location.prerr_warning loc - (Warnings.Not_principal "this module packing"); - (p, fl) - | Tvar _ -> - raise (error (loc, env, Cannot_infer_signature)) - | _ -> - raise (error (loc, env, Not_a_packed_module ty_expected)) - in - let (modl, fl') = !type_package env m p fl in - rue { - exp_desc = Texp_pack modl; - exp_loc = loc; exp_extra = []; - exp_type = newty (Tpackage (p, fl')); - exp_attributes = sexp.pexp_attributes; - exp_env = env } + (Texp_newtype' (id, name, uid), loc, sexp.pexp_attributes) :: body.exp_extra + } + | Pexp_pack (m, optyp) -> + begin match optyp with + | Some ptyp -> + let t = Ast_helper.Typ.package ~loc:ptyp.ppt_loc ptyp in + let pty, exp_extra = type_constraint env t in + begin match get_desc (instance pty) with + | Tpackage pack -> + let (modl, pack') = !type_package env m pack in + let ty = newty (Tpackage pack') in + unify_exp_types m.pmod_loc env (instance pty) ty; + rue { + exp_desc = Texp_pack modl; + exp_loc = loc; exp_extra = [exp_extra, loc, []]; + exp_type = instance pty; + exp_attributes = sexp.pexp_attributes; + exp_env = env } + | _ -> + fatal_error "[type_expect] Package not translated to a package" + end + | None -> + let pack = + match get_desc (Ctype.expand_head env (instance ty_expected)) with + Tpackage pack -> + if !Clflags.principal && + get_level (Ctype.expand_head env + (protect_expansion env ty_expected)) + < Btype.generic_level + then + Location.prerr_warning loc + (not_principal "this module packing"); + pack + | Tvar _ -> + raise (error (loc, env, Cannot_infer_signature)) + | _ -> + raise (error (loc, env, Not_a_packed_module ty_expected)) + in + let (modl, pack') = !type_package env m pack in + rue { + exp_desc = Texp_pack modl; + exp_loc = loc; exp_extra = []; + exp_type = newty (Tpackage pack'); + exp_attributes = sexp.pexp_attributes; + exp_env = env } + end | Pexp_open (od, e) -> let tv = newvar () in begin match !type_open_decl env od with @@ -4250,14 +4970,15 @@ and type_expect_ | { pbop_pat = spat; _} :: rest -> let ty = newvar () in let loc = { slet.pbop_op.loc with Location.loc_ghost = true } in - let spat_acc = Ast_helper.Pat.tuple ~loc [spat_acc; spat] in - let ty_acc = newty (Ttuple [ty_acc; ty]) in + let spat_acc = + Ast_helper.Pat.tuple ~loc [None, spat_acc; None, spat] Closed + in + let ty_acc = newty (Ttuple [None, ty_acc; None, ty]) in loop spat_acc ty_acc rest in let op_path, op_desc, op_type, spat_params, ty_params, ty_func_result, ty_result, ty_andops = - with_local_level_iter_if_principal - ~post:generalize_structure begin fun () -> + with_local_level_generalize_structure_if_principal begin fun () -> let let_loc = slet.pbop_op.loc in let op_path, op_desc = type_binding_op_ident env slet.pbop_op in let op_type = instance op_desc.val_type in @@ -4276,16 +4997,16 @@ and type_expect_ with Unify err -> raise(error(let_loc, env, Letop_type_clash(slet.pbop_op.txt, err))) end; - ((op_path, op_desc, op_type, spat_params, ty_params, - ty_func_result, ty_result, ty_andops), - [ty_andops; ty_params; ty_func_result; ty_result]) + (op_path, op_desc, op_type, spat_params, ty_params, + ty_func_result, ty_result, ty_andops) end in let exp, ands = type_andops env slet.pbop_exp sands ty_andops in let scase = Ast_helper.Exp.case spat_params sbody in let cases, partial = type_cases Value env - ty_params (mk_expected ty_func_result) true loc [scase] + ty_params (mk_expected ty_func_result) + ~check_if_total:true loc [scase] in let body = match cases with @@ -4335,10 +5056,33 @@ and type_expect_ | _ -> raise (error (loc, env, Invalid_extension_constructor_payload)) end - + | Pexp_extension ({ txt = ("ocaml.atomic.loc" + |"atomic.loc"); _ }, + payload) -> + begin match payload with + | PStr [ { pstr_desc = + Pstr_eval ( + { pexp_desc = Pexp_field (srecord, lid); _ } as sexp, _ + ) + } ] -> + let record, label, ty_arg = + solve_Pexp_field ~label_usage:Env.Mutation env sexp srecord lid + in + Env.mark_label_used Env.Projection label.lbl_uid; + if label.lbl_atomic = Nonatomic then + raise (error (loc, env, Label_not_atomic lid.txt)) ; + rue { + exp_desc = Texp_atomic_loc (record, lid, label); + exp_loc = loc; exp_extra = []; + exp_type = instance (Predef.type_atomic_loc ty_arg); + exp_attributes = sexp.pexp_attributes; + exp_env = env } + | _ -> + raise (error (loc, env, Invalid_atomic_loc_payload)) + end | Pexp_extension ({ txt; _ } as s, payload) when txt = Ast_helper.hole_txt -> let attr = Ast_helper.Attr.mk s payload in - re { exp_desc = Texp_hole; + re { exp_desc = Texp_typed_hole; exp_loc = loc; exp_extra = []; exp_type = instance ty_expected; exp_attributes = attr :: sexp.pexp_attributes; @@ -4354,6 +5098,181 @@ and type_expect_ exp_attributes = sexp.pexp_attributes; exp_env = env } +and expression_constraint pexp = + { type_without_constraint = (fun env -> + let expr = type_exp env pexp in + expr, expr.exp_type); + type_with_constraint = + (fun env ty -> type_argument env pexp ty (instance ty)); + is_self = + (fun expr -> + match expr.exp_desc with + | Texp_ident (_, _, { val_kind = Val_self _ }) -> true + | _ -> false); + } + +(** Types a body in the scope of a coercion (with an optional constraint) + and returns the inferred type. See the comment on {!constraint_arg} for + an explanation of how this typechecking is polymorphic in the body. +*) +and type_coerce + : type a. a constraint_arg -> _ -> _ -> _ -> _ -> loc_arg:_ + -> a * type_expr * exp_extra = + fun constraint_arg env loc sty sty' ~loc_arg -> + (* Pretend separate = true, 1% slowdown for lablgtk *) + (* Also see PR#7199 for a problem with the following: + let separate = !Clflags.principal || Env.has_local_constraints env in*) + let { is_self; type_with_constraint; type_without_constraint } = + constraint_arg + in + match sty with + | None -> + let (cty', ty', force) = + with_local_level_generalize_structure begin fun () -> + Typetexp.transl_simple_type_delayed env sty' + end + in + let arg, arg_type, gen = + let lv = get_current_level () in + with_local_level_generalize begin fun () -> + let arg, arg_type = type_without_constraint env in + arg, arg_type, generalizable lv arg_type + end + ~before_generalize: + (fun (_, arg_type, _) -> enforce_current_level env arg_type) + in + begin match !self_coercion, get_desc ty' with + | ((path, r) :: _, Tconstr (path', _, _)) + when is_self arg && Path.same path path' -> + (* prerr_endline "self coercion"; *) + r := loc :: !r; + force () + | _ when closed_type_expr ~env arg_type + && closed_type_expr ~env ty' -> + if not gen && (* first try a single coercion *) + let snap = snapshot () in + let ty, _b = enlarge_type env (generic_instance ty') in + try + force (); Ctype.unify env arg_type ty; true + with Unify _ -> + backtrack snap; false + then () + else begin try + let force' = subtype env arg_type (generic_instance ty') in + force (); force' (); + if not gen && !Clflags.principal then + Location.prerr_warning loc + (not_principal "this ground coercion"); + with Subtype err -> + (* prerr_endline "coercion failed"; *) + raise (Error (loc, env, Not_subtype err)) + end; + | _ -> + let ty, b = enlarge_type env (generic_instance ty') in + force (); + begin try Ctype.unify env arg_type ty with Unify err -> + let expanded = full_expand ~may_forget_scope:true env ty' in + raise(Error(loc_arg, env, + Coercion_failure ({ ty = ty'; expanded }, err, b))) + end + end; + (arg, ty', Texp_coerce (None, cty')) + | Some sty -> + let cty, ty, force, cty', ty', force' = + with_local_level_generalize_structure begin fun () -> + let (cty, ty, force) = + Typetexp.transl_simple_type_delayed env sty + and (cty', ty', force') = + Typetexp.transl_simple_type_delayed env sty' + in + (cty, ty, force, cty', ty', force') + end + in + begin try + let force'' = + subtype env (generic_instance ty) (generic_instance ty') + in + force (); force' (); force'' () + with Subtype err -> + raise (Error (loc, env, Not_subtype err)) + end; + (type_with_constraint env ty, + instance ty', Texp_coerce (Some cty, cty')) + +and type_constraint env sty = + (* Pretend separate = true, 1% slowdown for lablgtk *) + let cty = + with_local_level_generalize_structure begin fun () -> + Typetexp.transl_simple_type env ~closed:false sty + end + in + cty.ctyp_type, Texp_constraint cty + +(** Types a body in the scope of a coercion (:>) or a constraint (:), and + unifies the inferred type with the expected type. + + @param loc the location of the overall constraint + @param loc_arg the location of the thing being constrained +*) +and type_constraint_expect + : type a. a constraint_arg -> _ -> _ -> loc_arg:_ -> _ -> _ -> a * _ * _ = + fun constraint_arg env loc ~loc_arg constraint_ ty_expected -> + let ret, ty, exp_extra = + match constraint_ with + | Pcoerce (ty_constrain, ty_coerce) -> + type_coerce constraint_arg env loc ty_constrain ty_coerce ~loc_arg + | Pconstraint ty_constrain -> + let ty, exp_extra = type_constraint env ty_constrain in + constraint_arg.type_with_constraint env ty, ty, exp_extra + in + unify_exp_types loc env ty (instance ty_expected); + ret, ty, exp_extra + +(** Typecheck the body of a newtype. The "body" of a newtype may be: + - an expression + - a suffix of function parameters together with a function body + That's why this function is polymorphic over the body. + + @param type_body A function that produces a type for the body given the + environment. When typechecking an expression, this is [type_exp]. + @return The type returned by [type_body] but with the Tconstr + nodes for the newtype properly linked. +*) +and type_newtype + : type a. _ -> _ -> (Env.t -> a * type_expr) -> a * type_expr * Ident.t * Uid.t = + fun env { txt = name; loc = name_loc } type_body -> + let ty = + if Typetexp.valid_tyvar_name name then + newvar ~name () + else + newvar () + in + (* Use [with_local_level_generalize] just for scoping *) + with_local_level_generalize begin fun () -> + (* Create a fake abstract type declaration for [name]. *) + let decl = new_local_type ~loc:name_loc Definition in + let scope = create_scope () in + let (id, new_env) = Env.enter_type ~scope name decl env in + + let result, exp_type = type_body new_env in + (* Replace every instance of this type constructor in the resulting + type. *) + let seen = Hashtbl.create 8 in + let rec replace t = + if Hashtbl.mem seen (get_id t) then () + else begin + Hashtbl.add seen (get_id t) (); + match get_desc t with + | Tconstr (Path.Pident id', _, _) when id == id' -> link_type t ty + | _ -> Btype.iter_type_expr replace t + end + in + let ety = Subst.type_expr Subst.identity exp_type in + replace ety; + (result, ety, id, decl.type_uid) + end + ~before_generalize:(fun (_,ety,_id,_uid) -> enforce_current_level env ety) + and type_ident env ?(recarg=Rejected) lid = let (path, desc) = Env.lookup_value ~loc:lid.loc lid.txt env in let is_recarg = @@ -4389,71 +5308,283 @@ and type_binding_op_ident env s = in path, desc -and type_function ?(in_function : (Location.t * type_expr) option) - loc attrs env ty_expected_explained arg_label caselist = - let { ty = ty_expected; explanation } = ty_expected_explained in - let (loc_fun, ty_fun) = - match in_function with Some p -> p - | None -> (loc, instance ty_expected) - in +(** Returns the argument type and then the return type. + + @param first Whether the parameter corresponding to the argument of + [ty_expected] is the first parameter to the (n-ary) function. This only + affects error messages. + @param in_function Information about the [Pexp_function] node that's in the + process of being typechecked (its overall type and its location). Again, + this is only used to improve error messages. +*) +and split_function_ty env ty_expected ~arg_label ~first ~in_function = + let { ty = ty_fun; explanation }, loc = in_function in let separate = !Clflags.principal || Env.has_local_constraints env in - let ty_arg, ty_res = - with_local_level_iter_if separate ~post:generalize_structure begin fun () -> - let (ty_arg, ty_res) = - try filter_arrow env (instance ty_expected) arg_label - with Filter_arrow_failed err -> - let err = match err with - | Unification_error unif_err -> - Expr_type_clash(unif_err, explanation, None) - | Label_mismatch { got; expected; expected_type} -> - Abstract_wrong_label { got; expected; expected_type; explanation } - | Not_a_function -> begin - match in_function with - | Some _ -> Too_many_arguments(ty_fun, explanation) - | None -> Not_a_function(ty_fun, explanation) - end + with_local_level_generalize_structure_if separate begin fun () -> + let ty_arg, ty_res = + try filter_arrow env (instance ty_expected) arg_label + with Filter_arrow_failed err -> + let err = match err with + | Unification_error unif_err -> + Expr_type_clash (unif_err, explanation, None) + | Label_mismatch { got; expected; expected_type } -> + Abstract_wrong_label { got; expected; expected_type; explanation } + | Not_a_function -> + if first + then Not_a_function (ty_fun, explanation) + else Too_many_arguments (ty_fun, explanation) + in + (* Merlin: we recover with an expected type of 'a -> 'b *) + let level = get_level (instance ty_expected) in + raise_error (error(loc, env, err)); + (newvar2 level, ty_expected) + in + let ty_arg = + if is_optional arg_label then + let tv = newvar () in + begin + try unify env ty_arg (type_option tv) + with Unify _ -> assert false + end; + type_option tv + else ty_arg + in + (ty_arg, ty_res) + end + +(* Typecheck parameters one at a time followed by the body. Later parameters + are checked in the scope of earlier ones. That's necessary to support + constructs like [fun (type a) (x : a) -> ...] and + [fun (module M : S) (x : M.t) -> ...]. + + Operates like [type_expect] in that it unifies the "type of the remaining + function params + body" with [ty_expected], and returns out the inferred + type. + + See [split_function_ty] for the meaning of [first] and [in_function]. + + Returns (inferred_ty, params, body, newtypes, contains_gadt), where: + - [newtypes] are the newtypes immediately bound by the prefix of function + parameters. These should be added to an [exp_extra] node. + - [contains_gadt] is whether any of [params] contains a GADT. Note + this does not indicate whether [body] contains a GADT (if it's + [Tfunction_cases]). +*) +and type_function + env params_suffix body_constraint body ty_expected ~first ~in_function + = + let ty_fun, (loc_function : Location.t) = in_function in + (* The "rest of the function" extends from the start of the first parameter + to the end of the overall function. The parser does not construct such + a location so we forge one for type errors. + *) + let loc : Location.t = + match params_suffix, body with + | param :: _, _ -> + { loc_start = param.pparam_loc.loc_start; + loc_end = loc_function.loc_end; + loc_ghost = true; + } + | [], Pfunction_body pexp -> pexp.pexp_loc + | [], Pfunction_cases (_, loc_cases, _) -> loc_cases + in + match params_suffix with + | { pparam_desc = Pparam_newtype newtype; pparam_loc = _ } :: rest -> + (* Check everything else in the scope of (type a). *) + let (params, body, newtypes, contains_gadt), exp_type, nt_id, nt_uid = + type_newtype env newtype (fun env -> + let exp_type, params, body, newtypes, contains_gadt = + (* mimic the typing of Pexp_newtype by minting a new type var, + like [type_exp]. + *) + type_function env rest body_constraint body (newvar ()) + ~first:false ~in_function in - (* Merlin: we recover with an expected type of 'a -> 'b *) - let level = get_level (instance ty_expected) in - raise_error (error(loc_fun, env, err)); - (newvar2 level, newvar2 level) + (params, body, newtypes, contains_gadt), exp_type) in - let ty_arg = - if is_optional arg_label then - let tv = newvar() in - begin - try unify env ty_arg (type_option tv) - with Unify _ -> assert false - end; - type_option tv - else ty_arg + (try with_explanation ty_fun.explanation (fun () -> + unify_exp_types loc env exp_type (instance ty_expected)); + with _ -> Msupport.erroneous_type_register ty_expected); + let newtype = nt_id, newtype, nt_uid in + exp_type, params, body, newtype :: newtypes, contains_gadt + | { pparam_desc = Pparam_val (arg_label, default_arg, pat); pparam_loc } + :: rest + -> + let ty_arg, ty_res = + split_function_ty env ty_expected ~arg_label ~first ~in_function in - ((ty_arg, ty_res), [ty_arg; ty_res]) - end - in - let cases, partial = - type_cases Value ~in_function:(loc_fun,ty_fun) env - ty_arg (mk_expected ty_res) true loc caselist in - let not_nolabel_function ty = - let ls, tvar = list_labels env ty in - List.for_all ((<>) Nolabel) ls && not tvar - in - if is_optional arg_label && not_nolabel_function ty_res then - Location.prerr_warning (List.hd cases).c_lhs.pat_loc - Warnings.Unerasable_optional_argument; - let param = name_cases "param" cases in - re { - exp_desc = Texp_function { arg_label; param; cases; partial; }; - exp_loc = loc; exp_extra = []; - exp_type = - instance (newgenty (Tarrow(arg_label, ty_arg, ty_res, commu_ok))); - exp_attributes = attrs; - exp_env = env } + (* [ty_arg_internal] is the type of the parameter viewed internally + to the function. This is different than [ty_arg] exactly for + optional arguments with defaults, where the external [ty_arg] + is optional and the internal view is not optional. + *) + let ty_arg_internal, default_arg = + match default_arg with + | None -> ty_arg, None + | Some default -> + assert (is_optional arg_label); + let ty_default = newvar () in + begin + try unify env (type_option ty_default) ty_arg + with Unify _ -> assert false; + end; + (* Issue#12668: Retain type-directed disambiguation of + ?x:(y : Variant.t = Constr) + *) + let default = + match pat.ppat_desc with + | Ppat_constraint (_, sty) -> + let gloc = { default.pexp_loc with loc_ghost = true } in + Ast_helper.Exp.constraint_ default sty ~loc:gloc + | _ -> default + in + let default = type_expect env default (mk_expected ty_default) in + ty_default, Some default + in + let (pat, params, body, newtypes, contains_gadt), partial = + (* Check everything else in the scope of the parameter. *) + map_half_typed_cases Value env ty_arg_internal ty_res pat.ppat_loc + ~check_if_total:true + (* We don't make use of [case_data] here so we pass unit. *) + [ { pattern = pat; has_guard = false; needs_refute = false }, () ] + ~type_body:begin + fun () pat ~when_env:_ ~ext_env ~cont:_ ~ty_expected ~ty_infer:_ + ~contains_gadt:param_contains_gadt -> + let _, params, body, newtypes, suffix_contains_gadt = + type_function ext_env rest body_constraint body + ty_expected ~first:false ~in_function + in + let contains_gadt = + if param_contains_gadt then + Contains_gadt + else + suffix_contains_gadt + in + (pat, params, body, newtypes, contains_gadt) + end + |> function + (* The result must be a singleton because we passed a singleton + list above. *) + | [ result ], partial -> result, partial + | ([] | _ :: _ :: _), _ -> assert false + in + let exp_type = + instance (newgenty (Tarrow (arg_label, ty_arg, ty_res, commu_ok))) + in + (* This is quadratic, as it operates over the entire tail of the + type for each new parameter. Now that functions are n-ary, we + could possibly run this once. + *) + (try with_explanation ty_fun.explanation (fun () -> + unify_exp_types loc env exp_type (instance ty_expected)); + with _ -> Msupport.erroneous_type_register ty_expected); + (* This is quadratic, as it extracts all of the parameters from an arrow + type for each parameter that's added. Now that functions are n-ary, + there might be an opportunity to improve this. + *) + let not_nolabel_function ty = + let ls, tvar = list_labels env ty in + List.for_all (( <> ) Nolabel) ls && not tvar + in + if is_optional arg_label && not_nolabel_function ty_res + then + Location.prerr_warning + pat.pat_loc + Warnings.Unerasable_optional_argument; + let fp_kind, fp_param = + match default_arg with + | None -> + let param = name_pattern "param" [ pat ] in + Tparam_pat pat, param + | Some default_arg -> + let param = Ident.create_local "*opt*" in + Tparam_optional_default (pat, default_arg), param + in + let param = + { fp_kind; + fp_arg_label = arg_label; + fp_param; + fp_partial = partial; + fp_newtypes = List.map (fun (_,v,_) -> v) newtypes; + fp_loc = pparam_loc; + } + in + exp_type, param :: params, body, [], contains_gadt + | [] -> + let exp_type, body = + match body with + | Pfunction_body body -> + let body = + match body_constraint with + | None -> type_expect env body (mk_expected ty_expected) + | Some constraint_ -> + let body_loc = body.pexp_loc in + let body, exp_type, exp_extra = + type_constraint_expect (expression_constraint body) + env body_loc ~loc_arg:body_loc constraint_ ty_expected + in + { body with + exp_extra = (exp_extra, body_loc, []) :: body.exp_extra; + exp_type; + } + in + body.exp_type, Tfunction_body body + | Pfunction_cases (cases, _, attributes) -> + let type_cases_expect env ty_expected = + type_function_cases_expect + env ty_expected loc cases attributes ~first ~in_function + in + let (cases, partial, exp_type), exp_extra = + match body_constraint with + | None -> type_cases_expect env ty_expected, None + | Some constraint_ -> + (* The typing of function case coercions/constraints is + analogous to the typing of expression coercions/constraints. + + - [type_with_constraint]: If there is a constraint, then call + [type_argument] on the cases, and discard the cases' + inferred type in favor of the constrained type. (Function + cases aren't inferred, so [type_argument] would just call + [type_expect] straight away, so we do the same here.) + - [type_without_constraint]: If there is just a coercion and + no constraint, call [type_exp] on the cases and surface the + cases' inferred type to [type_constraint_expect]. *) + let function_cases_constraint_arg = + { is_self = (fun _ -> false); + type_with_constraint = (fun env ty -> + let cases, partial, _ = type_cases_expect env ty in + cases, partial); + type_without_constraint = (fun env -> + let cases, partial, ty_fun = + (* The analogy to [type_exp] for expressions. *) + type_cases_expect env (newvar ()) + in + (cases, partial), ty_fun); + } + in + let (cases, partial), exp_type, exp_extra = + type_constraint_expect function_cases_constraint_arg + env loc constraint_ ty_expected ~loc_arg:loc + in + (cases, partial, exp_type), Some exp_extra + in + let param = name_cases "param" cases in + let body = + Tfunction_cases + { cases; partial; param; loc; exp_extra; attributes } + in + exp_type, body + in + (* [No_gadt] is fine because this return value is only meant to indicate + whether [params] (here, the empty list) contains any GADT, not whether + the body is a [Tfunction_cases] whose patterns include a GADT. + *) + exp_type, [], body, [], No_gadt and type_label_access env srecord usage lid = let record = - with_local_level_if_principal ~post:generalize_structure_exp + with_local_level_generalize_structure_if_principal (fun () -> type_exp ~recarg:Allowed env srecord) in let ty_exp = record.exp_type in @@ -4481,6 +5612,7 @@ and type_label_access env srecord usage lid = lbl_mut = Mutable; lbl_pos = 0; lbl_all = [||]; + lbl_atomic = Nonatomic; lbl_repres = Record_regular; lbl_private = Public; lbl_loc = lid.loc; @@ -4489,6 +5621,14 @@ and type_label_access env srecord usage lid = } in (record, fake_label, expected_type) +and solve_Pexp_field ~label_usage env sexp srecord lid = + let (record, label, _) = + type_label_access env srecord label_usage lid + in + let (_, ty_arg, ty_res) = instance_label ~fixed:false label in + unify_exp ~sexp env record ty_res; + (record, label, ty_arg) + (* Typing format strings for printing or reading. These formats are used by functions in modules Printf, Format, and Scanf. (Handling of * modifiers contributed by Thorsten Ohl.) *) @@ -4507,13 +5647,20 @@ and type_format loc str env = loc = loc; } in let mk_constr name args = - let lid = Longident.(Ldot(Lident "CamlinternalFormatBasics", name)) in + let lid = + Longident.(Ldot(mknoloc (Lident "CamlinternalFormatBasics"), + mknoloc name)) + in let arg = match args with | [] -> None | [ e ] -> Some e - | _ :: _ :: _ -> Some (mk_exp_loc (Pexp_tuple args)) in + | _ :: _ :: _ -> + Some (mk_exp_loc (Pexp_tuple (List.map (fun e -> None, e) args))) + in mk_exp_loc (Pexp_construct (mk_lid_loc lid, arg)) in - let mk_cst cst = mk_exp_loc (Pexp_constant cst) in + let mk_cst cst = + mk_exp_loc (Pexp_constant {pconst_desc = cst; pconst_loc = loc}) + in let mk_int n = mk_cst (Pconst_integer (Int.to_string n, None)) and mk_string str = mk_cst (Pconst_string (str, loc, None)) and mk_char chr = mk_cst (Pconst_char chr) in @@ -4577,7 +5724,7 @@ and type_format loc str env = | Float_H -> mk_constr "Float_H" [] | Float_F -> mk_constr "Float_F" [] | Float_CF -> mk_constr "Float_CF" [] in - mk_exp_loc (Pexp_tuple [flag; kind]) + mk_exp_loc (Pexp_tuple [None, flag; None, kind]) and mk_counter cnt = match cnt with | Line_counter -> mk_constr "Line_counter" [] | Char_counter -> mk_constr "Char_counter" [] @@ -4739,21 +5886,15 @@ and type_label_exp create env loc ty_expected (lid, label, sarg) = (* Here also ty_expected may be at generic_level *) let separate = !Clflags.principal || Env.has_local_constraints env in - (* #4682: we try two type-checking approaches for [arg] using backtracking: - - first try: we try with [ty_arg] as expected type; - - second try; if that fails, we backtrack and try without - *) - let (vars, ty_arg, snap, arg) = - (* try the first approach *) - with_local_level begin fun () -> + let is_poly = is_poly_Tpoly label.lbl_arg in + let (vars, arg) = + (* raise level to check univars *) + with_local_level_generalize_if is_poly begin fun () -> let (vars, ty_arg) = - with_local_level_iter_if separate begin fun () -> + with_local_level_generalize_structure_if separate begin fun () -> let (vars, ty_arg, ty_res) = - with_local_level_iter_if separate ~post:generalize_structure - begin fun () -> - let ((_, ty_arg, ty_res) as r) = instance_label true label in - (r, [ty_arg; ty_res]) - end + with_local_level_generalize_structure_if separate + (fun () -> instance_label ~fixed:true label) in begin try unify env (instance ty_res) (instance ty_expected) @@ -4762,9 +5903,8 @@ and type_label_exp create env loc ty_expected end; (* Instantiate so that we can generalize internal nodes *) let ty_arg = instance ty_arg in - ((vars, ty_arg), [ty_arg]) + (vars, ty_arg) end - ~post:generalize_structure in if label.lbl_private = Private then @@ -4772,47 +5912,14 @@ and type_label_exp create env loc ty_expected raise (error(loc, env, Private_type ty_expected)) else raise (error(lid.loc, env, Private_label(lid.txt, ty_expected))); - let snap = if vars = [] then None else Some (Btype.snapshot ()) in - let arg = type_argument env sarg ty_arg (instance ty_arg) in - (vars, ty_arg, snap, arg) + (vars, type_argument env sarg ty_arg (instance ty_arg)) end - (* Note: there is no generalization logic here as could be expected, - because it is part of the backtracking logic below. *) - in - let arg = - try - if (vars = []) then arg - else begin - (* We detect if the first try failed here, - during generalization. *) - if maybe_expansive arg then - lower_contravariant env arg.exp_type; - generalize_and_check_univars env "field value" arg label.lbl_arg vars; - {arg with exp_type = instance arg.exp_type} - end - with first_try_exn when maybe_expansive arg -> try - (* backtrack and try the second approach *) - Option.iter Btype.backtrack snap; - let arg = with_local_level (fun () -> type_exp env sarg) - ~post:(fun arg -> lower_contravariant env arg.exp_type) - in - let arg = - with_local_level begin fun () -> - let arg = {arg with exp_type = instance arg.exp_type} in - unify_exp env arg (instance ty_arg); - arg - end - ~post: begin fun arg -> - generalize_and_check_univars env "field value" arg label.lbl_arg vars - end - in - {arg with exp_type = instance arg.exp_type} - with Error (_, _, Less_general _) as e -> raise e - | _ -> raise first_try_exn + ~before_generalize:(fun (_,arg) -> may_lower_contravariant env arg) in - (lid, label, arg) + if is_poly then check_univars env "field value" arg label.lbl_arg vars; + (lid, label, {arg with exp_type = instance arg.exp_type}) -and type_argument ?explanation ?recarg env sarg ty_expected' ty_expected = +and type_argument_ ?explanation ?recarg env sarg ty_expected' ty_expected = (* ty_expected' may be generic *) let no_labels ty = let ls, tvar = list_labels env ty in @@ -4838,14 +5945,14 @@ and type_argument ?explanation ?recarg env sarg ty_expected' ty_expected = (* apply optional arguments when expected type is "" *) (* we must be very careful about not breaking the semantics *) let texp = - with_local_level_if_principal ~post:generalize_structure_exp + with_local_level_generalize_structure_if_principal (fun () -> type_exp env sarg) in let rec make_args args ty_fun = match get_desc (expand_head env ty_fun) with | Tarrow (l,ty_arg,ty_fun,_) when is_optional l -> let ty = option_none env (instance ty_arg) sarg.pexp_loc in - make_args ((l, Some ty) :: args) ty_fun + make_args ((l, Arg ty) :: args) ty_fun | Tarrow (l,_,ty_res',_) when l = Nolabel || !Clflags.classic -> List.rev args, ty_fun, no_labels ty_res' | Tvar _ -> List.rev args, ty_fun, false @@ -4854,7 +5961,7 @@ and type_argument ?explanation ?recarg env sarg ty_expected' ty_expected = let args, ty_fun', simple_res = make_args [] texp.exp_type and texp = {texp with exp_type = instance texp.exp_type} in if not (simple_res || safe_expect) then begin - unify_exp env texp ty_expected; + unify_exp ~sexp:sarg env texp ty_expected; texp end else begin let warn = !Clflags.principal && @@ -4865,7 +5972,7 @@ and type_argument ?explanation ?recarg env sarg ty_expected' ty_expected = Tarrow(Nolabel,ty_arg,ty_res,_) -> ty_arg, ty_res | _ -> assert false in - unify_exp env {texp with exp_type = ty_fun} ty_expected; + unify_exp ~sexp:sarg env {texp with exp_type = ty_fun} ty_expected; if args = [] then texp else (* eta-expand to avoid side effects *) let var_pair name ty = @@ -4874,11 +5981,14 @@ and type_argument ?explanation ?recarg env sarg ty_expected' ty_expected = { val_type = ty; val_kind = Val_reg; val_attributes = []; val_loc = Location.none; - val_uid = Uid.mk ~current_unit:(Env.get_unit_name ()); + val_uid = Uid.mk ~current_unit:(Env.get_current_unit ()); } in let exp_env = Env.add_value id desc env in - {pat_desc = Tpat_var (id, mknoloc name); pat_type = ty;pat_extra=[]; + {pat_desc = + Tpat_var (id, mknoloc name, desc.val_uid); + pat_type = ty; + pat_extra=[]; pat_attributes = []; pat_loc = Location.none; pat_env = env}, {exp_type = ty; exp_loc = Location.none; exp_env = exp_env; @@ -4892,17 +6002,22 @@ and type_argument ?explanation ?recarg env sarg ty_expected' ty_expected = {texp with exp_type = ty_res; exp_desc = Texp_apply (texp, - args @ [Nolabel, Some eta_var])} + args @ [Nolabel, Arg eta_var])} in - let cases = [case eta_pat e] in + let cases = [ case eta_pat e ] in + let cases_loc = { texp.exp_loc with loc_ghost = true } in let param = name_cases "param" cases in { texp with exp_type = ty_fun; exp_desc = - Texp_function { arg_label = Nolabel; param; cases; - partial = Total; } } + Texp_function ([], + Tfunction_cases + { cases; partial = Total; param; loc = cases_loc; + exp_extra = None; attributes = []; + }) + } in Location.prerr_warning texp.exp_loc (Warnings.Eliminated_optional_arguments - (List.map (fun (l, _) -> Printtyp.string_of_label l) args)); + (List.map (fun (l, _) -> Asttypes.string_of_label l) args)); if warn then Location.prerr_warning texp.exp_loc (Warnings.Non_principal_labels "eliminated optional argument"); (* let-expand to have side effects *) @@ -4910,232 +6025,131 @@ and type_argument ?explanation ?recarg env sarg ty_expected' ty_expected = re { texp with exp_type = ty_fun; exp_desc = Texp_let (Nonrecursive, [{vb_pat=let_pat; vb_expr=texp; vb_attributes=[]; - vb_loc=Location.none; + vb_loc=Location.none; vb_rec_kind = Dynamic; }], func let_var) } end | None -> let texp = type_expect ?recarg env sarg (mk_expected ?explanation ty_expected') in - unify_exp env texp ty_expected; + unify_exp ~sexp:sarg env texp ty_expected; texp -and type_application env funct sargs = - (* funct.exp_type may be generic *) - let result_type omitted ty_fun = - List.fold_left - (fun ty_fun (l,ty,lv) -> newty2 ~level:lv (Tarrow(l,ty,ty_fun,commu_ok))) - ty_fun omitted - in - let has_label l ty_fun = - let ls, tvar = list_labels env ty_fun in - tvar || List.mem l ls - in - let eliminated_optional_arguments = ref [] in - let omitted_parameters = ref [] in - let type_unknown_arg (ty_fun, typed_args) (lbl, sarg) = - let (ty_arg, ty_res) = - try - let ty_fun = expand_head env ty_fun in - match get_desc ty_fun with - | Tvar _ -> - let t1 = newvar () and t2 = newvar () in - if get_level ty_fun >= get_level t1 && - not (is_prim ~name:"%identity" funct) && - not (Msupport.erroneous_expr_check funct) - then - Location.prerr_warning sarg.pexp_loc - Warnings.Ignored_extra_argument; - unify env ty_fun (newty (Tarrow(lbl,t1,t2,commu_var ()))); - (t1, t2) - | Tarrow (l,t1,t2,_) when l = lbl - || !Clflags.classic && lbl = Nolabel && not (is_optional l) -> - (t1, t2) - | td -> - let ty_fun = match td with Tarrow _ -> newty td | _ -> ty_fun in - let ty_res = - result_type (!omitted_parameters @ !eliminated_optional_arguments) - ty_fun - in - match get_desc ty_res with - | Tarrow _ -> - if !Clflags.classic || not (has_label lbl ty_fun) then - Msupport.resume_raise - (error(sarg.pexp_loc, env, - Apply_wrong_label(lbl, ty_res, false))) - else - Msupport.resume_raise - (error(funct.exp_loc, env, Incoherent_label_order)) - | _ -> - let previous_arg_loc = - (* [typed_args] is the arguments typed until now, in reverse - order of appearance. Not all arguments have a location - attached (eg. an optional argument that is not passed). *) - typed_args - |> List.find_map - (function (_, Some (_, loc)) -> loc | _ -> None) - |> Option.value ~default:funct.exp_loc - in - Msupport.resume_raise - (error(funct.exp_loc, env, Apply_non_function { - funct; - func_ty = expand_head env funct.exp_type; - res_ty = expand_head env ty_res; - previous_arg_loc; - extra_arg_loc = sarg.pexp_loc; })) - with Msupport.Resume -> - newvar(), ty_fun - in - let arg () = +and type_argument ?explanation ?recarg env sarg ty_expected' ty_expected = + Msupport.with_saved_types + ~warning_attribute:sarg.pexp_attributes ?save_part:None + (fun () -> + let saved = save_levels () in + try + type_argument_ ?explanation ?recarg env sarg ty_expected' ty_expected + with exn -> + Msupport.erroneous_type_register ty_expected; + raise_error exn; + set_levels saved; + let loc = sarg.pexp_loc in + { + exp_desc = Texp_ident + (Path.Pident (Ident.create_local "*type-error*"), + Location.mkloc (Longident.Lident "*type-error*") loc, + { Types. + val_type = ty_expected; + val_kind = Val_reg; + val_loc = loc; + val_attributes = []; + val_uid = Uid.internal_not_actually_unique; + }); + exp_loc = loc; + exp_extra = []; + exp_type = ty_expected; + exp_env = env; + exp_attributes = Msupport.recovery_attributes sarg.pexp_attributes; + }) + +and type_apply_arg env (lbl, arg) = + match arg with + | Arg (Unknown_arg { sarg; ty_arg }) -> let arg = type_expect env sarg (mk_expected ty_arg) in if is_optional lbl then - unify_exp env arg (type_option(newvar())); - arg - in - (ty_res, (lbl, Some (arg, Some sarg.pexp_loc)) :: typed_args) - in - let ignore_labels = - !Clflags.classic || - begin - let ls, tvar = list_labels env funct.exp_type in - not tvar && - let labels = List.filter (fun l -> not (is_optional l)) ls in - List.length labels = List.length sargs && - List.for_all (fun (l,_) -> l = Nolabel) sargs && - List.exists (fun l -> l <> Nolabel) labels && - (Location.prerr_warning - funct.exp_loc - (Warnings.Labels_omitted - (List.map Printtyp.string_of_label - (List.filter ((<>) Nolabel) labels))); - true) - end - in - let warned = ref false in - (* [args] remember the location of each argument in sources. *) - let rec type_args args ty_fun ty_fun0 sargs = - let type_unknown_args () = - (* We're not looking at a *known* function type anymore, or there are no - arguments left. *) - let ty_fun, typed_args = - List.fold_left type_unknown_arg (ty_fun0, args) sargs + unify_exp ~sexp:sarg env arg (type_option(newvar())); + (lbl, Arg arg) + | Arg (Known_arg { sarg; ty_arg; ty_arg0; wrapped_in_some }) -> + let arg = + if wrapped_in_some then + option_some env + (type_argument env sarg + (extract_option_type env ty_arg) + (extract_option_type env ty_arg0)) + else + type_argument env sarg ty_arg ty_arg0 in - let args = - (* Force typing of arguments. - Careful: the order matters here. Using [List.rev_map] would be - incorrect. *) - List.map - (function - | l, None -> l, None - | l, Some (f, _loc) -> l, Some (f ())) - (List.rev typed_args) + (lbl, Arg arg) + | Arg (Eliminated_optional_arg { ty_arg; _ }) -> + let arg = + option_none env (instance ty_arg) Location.none in - let result_ty = instance (result_type !omitted_parameters ty_fun) in - args, result_ty - in - if sargs = [] then type_unknown_args () else - let ty_fun' = expand_head env ty_fun in - match get_desc ty_fun', get_desc (expand_head env ty_fun0) with - | Tarrow (l, ty, ty_fun, com), Tarrow (_, ty0, ty_fun0, _) - when is_commu_ok com -> - let lv = get_level ty_fun' in - let may_warn loc w = - if not !warned && !Clflags.principal && lv <> generic_level - then begin - warned := true; - Location.prerr_warning loc w - end - in - let name = label_name l - and optional = is_optional l in - let use_arg sarg l' = - if not optional || is_optional l' then - (fun () -> type_argument env sarg ty ty0) - else begin - may_warn sarg.pexp_loc - (Warnings.Not_principal "using an optional argument here"); - (fun () -> option_some env (type_argument env sarg - (extract_option_type env ty) - (extract_option_type env ty0))) - end - in - let eliminate_optional_arg () = - may_warn funct.exp_loc - (Warnings.Non_principal_labels "eliminated optional argument"); - eliminated_optional_arguments := - (l,ty,lv) :: !eliminated_optional_arguments; - (fun () -> option_none env (instance ty) Location.none) - in - let remaining_sargs, arg = - if ignore_labels then begin - (* No reordering is allowed, process arguments in order *) - match sargs with - | [] -> assert false - | (l', sarg) :: remaining_sargs -> - if name = label_name l' || (not optional && l' = Nolabel) then - (remaining_sargs, Some (use_arg sarg l', Some sarg.pexp_loc)) - else if - optional && - not (List.exists (fun (l, _) -> name = label_name l) - remaining_sargs) && - List.exists (function (Nolabel, _) -> true | _ -> false) - sargs - then - (sargs, Some (eliminate_optional_arg (), Some sarg.pexp_loc)) - else - raise(error(sarg.pexp_loc, env, - Apply_wrong_label(l', ty_fun', optional))) - end else - (* Arguments can be commuted, try to fetch the argument - corresponding to the first parameter. *) - match extract_label name sargs with - | Some (l', sarg, commuted, remaining_sargs) -> - if commuted then begin - may_warn sarg.pexp_loc - (Warnings.Not_principal "commuting this argument") - end; - if not optional && is_optional l' then - Location.prerr_warning sarg.pexp_loc - (Warnings.Nonoptional_label (Printtyp.string_of_label l)); - remaining_sargs, Some (use_arg sarg l', Some sarg.pexp_loc) - | None -> - sargs, - if optional && List.mem_assoc Nolabel sargs then - Some (eliminate_optional_arg (), None) - else begin - (* No argument was given for this parameter, we abstract over - it. *) - may_warn funct.exp_loc - (Warnings.Non_principal_labels "commuted an argument"); - omitted_parameters := (l,ty,lv) :: !omitted_parameters; - None - end - in - type_args ((l,arg)::args) ty_fun ty_fun0 remaining_sargs - | _ -> - type_unknown_args () - in + (lbl, Arg arg) + | Omitted _ as arg -> (lbl, arg) + +and type_application env funct sargs = let is_ignore funct = is_prim ~name:"%ignore" funct && (try ignore (filter_arrow env (instance funct.exp_type) Nolabel); true with Filter_arrow_failed _ -> false) in - (* Extra scope to check for non-returning functions *) - with_local_level begin fun () -> - match sargs with - | (* Special case for ignore: avoid discarding warning *) - [Nolabel, sarg] when is_ignore funct -> - let ty_arg, ty_res = - filter_arrow env (instance funct.exp_type) Nolabel in - let exp = type_expect env sarg (mk_expected ty_arg) in - check_partial_application ~statement:false exp; - ([Nolabel, Some exp], ty_res) - | _ -> - let ty = funct.exp_type in - type_args [] ty (instance ty) sargs - end - -and type_construct env loc lid sarg ty_expected_explained attrs = + match sargs with + | (* Special case for ignore: avoid discarding warning *) + [Nolabel, sarg] when is_ignore funct -> + let ty_arg, ty_res = + filter_arrow env (instance funct.exp_type) Nolabel in + let exp = type_expect env sarg (mk_expected ty_arg) in + check_partial_application ~statement:false exp; + ([Nolabel, Arg exp], ty_res) + | _ -> + let ty = funct.exp_type in + let ignore_labels = + !Clflags.classic || + begin + let ls, tvar = list_labels env ty in + not tvar && + let labels = List.filter (fun l -> not (is_optional l)) ls in + List.length labels = List.length sargs && + List.for_all (fun (l,_) -> l = Nolabel) sargs && + List.exists (fun l -> l <> Nolabel) labels && + (Location.prerr_warning + funct.exp_loc + (Warnings.Labels_omitted + (List.map Asttypes.string_of_label + (List.filter ((<>) Nolabel) labels))); + true) + end + in + (* Consider for example the application + [f n] + with + [f : a:bar -> ?opt:baz -> int -> unit] *) + let ty_ret, args = + collect_apply_args env funct ignore_labels ty (instance ty) sargs + in + (* example: [collect_apply_args] returns + [ty_ret = unit] and + [args = [(Label "a", Omitted bar); + (Optional "opt", Arg (Eliminated_optional_arg baz)); + (Nolabel, Arg (Known_arg n))]] *) + let args = List.map (fun arg -> type_apply_arg env arg) args in + (* example: type-check [n] and generate [None] for [?opt]. + [args] becomes [(Label "a", Omitted bar); + (Optional "opt", Arg None); + (Nolabel, Arg n)] *) + let ty_ret, args = + type_omitted_parameters_and_build_result_type ty_ret args in + (* example: + [ty_ret] becomes [a:bar -> unit] + [args] becomes [(Label "a", Omitted ()); + (Optional "opt", Arg None); + (Nolabel, Arg n)] *) + args, instance ty_ret + +and type_construct env ~sexp lid sarg ty_expected_explained = let { ty = ty_expected; explanation } = ty_expected_explained in let expected_type = match extract_concrete_variant env ty_expected with @@ -5146,7 +6160,7 @@ and type_construct env loc lid sarg ty_expected_explained attrs = let srt = wrong_kind_sort_of_constructor lid.txt in let ctx = Expression explanation in let err = Wrong_expected_kind(srt, ctx, ty_expected) in - raise (error (loc, env, err)) + raise (error (sexp.pexp_loc, env, err)) in let constrs = Env.lookup_all_constructors ~loc:lid.loc Env.Positive lid.txt env @@ -5160,37 +6174,42 @@ and type_construct env loc lid sarg ty_expected_explained attrs = match sarg with None -> [] | Some {pexp_desc = Pexp_tuple sel} when - constr.cstr_arity > 1 || Builtin_attributes.explicit_arity attrs - -> sel + constr.cstr_arity > 1 + || Builtin_attributes.explicit_arity sexp.pexp_attributes + -> + List.map (fun (l, se) -> + match l with + | Some _ -> + raise (Error(sexp.pexp_loc, env, Constructor_labeled_arg)) + | None -> se + ) sel | Some se -> [se] in if List.length sargs <> constr.cstr_arity then - raise(error(loc, env, Constructor_arity_mismatch - (lid.txt, constr.cstr_arity, List.length sargs))); + raise(Error(sexp.pexp_loc, env, + Constructor_arity_mismatch + (lid.txt, constr.cstr_arity, List.length sargs))); let separate = !Clflags.principal || Env.has_local_constraints env in let ty_args, ty_res, texp = - with_local_level_iter_if separate ~post:generalize_structure begin fun () -> + with_local_level_generalize_structure_if separate begin fun () -> let ty_args, ty_res, texp = - with_local_level_if separate begin fun () -> + with_local_level_generalize_structure_if separate begin fun () -> let (ty_args, ty_res, _) = instance_constructor Keep_existentials_flexible constr in let texp = re { exp_desc = Texp_construct(lid, constr, []); - exp_loc = loc; exp_extra = []; + exp_loc = sexp.pexp_loc; exp_extra = []; exp_type = ty_res; - exp_attributes = attrs; + exp_attributes = sexp.pexp_attributes; exp_env = env } in (ty_args, ty_res, texp) end - ~post: begin fun (_, ty_res, texp) -> - generalize_structure ty_res; - with_explanation explanation (fun () -> - unify_exp env {texp with exp_type = instance ty_res} - (instance ty_expected)); - end in - ((ty_args, ty_res, texp), ty_res::ty_args) + with_explanation explanation (fun () -> + unify_exp ~sexp env {texp with exp_type = instance ty_res} + (instance ty_expected)); + (ty_args, ty_res, texp) end in let ty_args0, ty_res = @@ -5199,20 +6218,20 @@ and type_construct env loc lid sarg ty_expected_explained attrs = | _ -> assert false in let texp = {texp with exp_type = ty_res} in - if not separate then unify_exp env texp (instance ty_expected); + if not separate then unify_exp ~sexp env texp (instance ty_expected); let recarg = match constr.cstr_inlined with | None -> Rejected | Some _ -> begin match sargs with - | [{pexp_desc = Pexp_extension ({ txt; _ }, _); _ }] - when txt = Ast_helper.hole_txt -> Required + | [{pexp_desc = Pexp_extension ({ txt; _ }, _)}] + when txt = Ast_helper.hole_txt -> Required | [{pexp_desc = Pexp_ident _ | Pexp_record (_, (Some {pexp_desc = Pexp_ident _}| None))}] -> Required | _ -> - raise (error(loc, env, Inlined_record_expected)) + raise (Error(sexp.pexp_loc, env, Inlined_record_expected)) end in let args = @@ -5221,9 +6240,9 @@ and type_construct env loc lid sarg ty_expected_explained attrs = if constr.cstr_private = Private then begin match constr.cstr_tag with | Cstr_extension _ -> - raise_error (error(loc, env, Private_constructor (constr, ty_res))) + raise(Error(sexp.pexp_loc, env, Private_constructor (constr, ty_res))) | Cstr_constant _ | Cstr_block _ | Cstr_unboxed -> - raise_error (error(loc, env, Private_type ty_res)); + raise (Error(sexp.pexp_loc, env, Private_type ty_res)); end; (* NOTE: shouldn't we call "re" on this final expression? -- AF *) { texp with @@ -5233,35 +6252,76 @@ and type_construct env loc lid sarg ty_expected_explained attrs = and type_statement ?explanation env sexp = let has_errors = Msupport.monitor_errors () in + (* OCaml 5.2.0 changed the type of 'while' to give 'while true do e done' + a polymorphic type. The change has the potential to trigger a + nonreturning-statement warning in existing code that follows + 'while true' with some other statement, e.g. + + while true do e done; assert false + + To avoid this issue, we disable the warning in this particular case. + We might consider re-enabling it at a point when most users have + migrated to OCaml 5.2.0 or later. *) + let allow_polymorphic e = match e.exp_desc with + | Texp_while _ -> true + | _ -> false + in (* Raise the current level to detect non-returning functions *) - let exp = with_local_level (fun () -> type_exp env sexp) in - let ty = expand_head env exp.exp_type in - if is_Tvar ty && get_level ty > get_current_level () && not !has_errors then - Location.prerr_warning - (final_subexpression exp).exp_loc - Warnings.Nonreturning_statement; - if !Clflags.strict_sequence then - let expected_ty = instance Predef.type_unit in - with_explanation explanation (fun () -> - unify_exp env exp expected_ty); - exp - else begin - if not !has_errors then check_partial_application ~statement:true exp; - enforce_current_level env ty; - exp + with_local_level_generalize (fun () -> type_exp env sexp) + ~before_generalize: begin fun exp -> + let subexp = final_subexpression exp in + let ty = expand_head env exp.exp_type in + if is_Tvar ty && not !has_errors + && get_level ty > get_current_level () + && not (allow_polymorphic subexp) then + Location.prerr_warning + subexp.exp_loc + Warnings.Nonreturning_statement; + if !Clflags.strict_sequence then + let expected_ty = instance Predef.type_unit in + with_explanation explanation (fun () -> + unify_exp ~sexp env exp expected_ty) + else begin + if not !has_errors then + check_partial_application ~statement:true exp; + enforce_current_level env ty + end end -(* Typing of match cases *) -and type_cases - : type k . k pattern_category -> - ?in_function:_ -> _ -> _ -> _ -> _ -> _ -> Parsetree.case list -> - k case list * partial - = fun category ?in_function env - ty_arg ty_res_explained partial_flag loc caselist -> +(* Most of the arguments are the same as [type_cases]. + + Takes a callback which is responsible for typing the body of the case. + The arguments are documented inline in the type signature. + + It takes a callback rather than returning the half-typed cases directly + because the typing of the body must take place at an increased level. + + The overall function returns: + - The data returned by the callback + - Whether the cases' patterns are partial or total +*) +and map_half_typed_cases + : type k ret case_data. + ?additional_checks_for_split_cases:((_ * ret) list -> unit) -> ?conts:_ + -> k pattern_category -> _ -> _ -> _ -> _ + -> (untyped_case * case_data) list + -> type_body:( + case_data + -> k general_pattern (* the typed pattern *) + -> when_env:_ (* environment with module/pattern variables *) + -> ext_env:_ (* when_env + continuation var*) + -> cont:_ + -> ty_expected:_ (* type to check body in scope of *) + -> ty_infer:_ (* type to infer for body *) + -> contains_gadt:_ (* whether the pattern contains a GADT *) + -> ret) + -> check_if_total:bool (* if false, assume Partial right away *) + -> ret list * partial + = fun ?additional_checks_for_split_cases ?conts + category env ty_arg ty_res loc caselist ~type_body ~check_if_total -> let has_errors = Msupport.monitor_errors () in (* ty_arg is _fully_ generalized *) - let { ty = ty_res; explanation } = ty_res_explained in - let patterns = List.map (fun {pc_lhs=p} -> p) caselist in + let patterns = List.map (fun ((x : untyped_case), _) -> x.pattern) caselist in let contains_polyvars = List.exists contains_polymorphic_variant patterns in let erase_either = contains_polyvars && contains_variant_either ty_arg in let may_contain_gadts = List.exists may_contain_gadts patterns in @@ -5269,7 +6329,7 @@ and type_cases let create_inner_level = may_contain_gadts || may_contain_modules in let ty_arg = if (may_contain_gadts || erase_either) && not !Clflags.principal - then correct_levels ty_arg else ty_arg + then duplicate_type ty_arg else ty_arg in let rec is_var spat = match spat.ppat_desc with @@ -5278,8 +6338,8 @@ and type_cases | _ -> false in let needs_exhaust_check = match caselist with - [{pc_rhs = {pexp_desc = Pexp_unreachable}}] -> true - | [{pc_lhs}] when is_var pc_lhs -> false + [ ({ needs_refute = true }, _) ] -> true + | [ ({ pattern }, _) ] when is_var pattern -> false | _ -> true in let outer_level = get_current_level () in @@ -5299,36 +6359,40 @@ and type_cases if erase_either then Some false else None in + let map_conts f conts caselist = match conts with + | None -> List.map (fun c -> f c None) caselist + | Some conts -> List.map2 f caselist conts + in let half_typed_cases, ty_res, do_copy_types, ty_arg' = (* propagation of the argument *) - with_local_level begin fun () -> + with_local_level_generalize begin fun () -> let pattern_force = ref [] in (* Format.printf "@[%i %i@ %a@]@." lev (get_current_level()) Printtyp.raw_type_expr ty_arg; *) let half_typed_cases = - List.map - (fun ({pc_lhs; pc_guard = _; pc_rhs = _} as case) -> + map_conts + (fun ({ Parmatch.pattern; _ } as untyped_case, case_data) cont -> let htc = - with_local_level_if_principal begin fun () -> + with_local_level_generalize_structure_if_principal begin fun () -> let ty_arg = (* propagation of pattern *) - with_local_level ~post:generalize_structure + with_local_level_generalize_structure (fun () -> instance ?partial:take_partial_instance ty_arg) in let (pat, ext_env, force, pvs, mvs) = - type_pattern category ~lev env pc_lhs ty_arg allow_modules + type_pattern ?cont category ~lev env pattern ty_arg + allow_modules in pattern_force := force @ !pattern_force; { typed_pat = pat; pat_type_for_unif = ty_arg; - untyped_case = case; + untyped_case; + case_data; branch_env = ext_env; pat_vars = pvs; module_vars = mvs; - contains_gadt = contains_gadt (as_comp_pattern category pat); } - end - ~post: begin fun htc -> - iter_pattern_variables_type generalize_structure htc.pat_vars; + contains_gadt = contains_gadt (as_comp_pattern category pat); + } end in (* Ensure that no ambivalent pattern type escapes its branch *) @@ -5337,7 +6401,7 @@ and type_cases let pat = htc.typed_pat in {htc with typed_pat = { pat with pat_type = instance pat.pat_type }} ) - caselist in + conts caselist in let patl = List.map (fun { typed_pat; _ } -> typed_pat) half_typed_cases in let does_contain_gadt = @@ -5345,14 +6409,14 @@ and type_cases in let ty_res, do_copy_types = if does_contain_gadt && not !Clflags.principal then - correct_levels ty_res, Env.make_copy_of_types env + duplicate_type ty_res, Env.make_copy_of_types env else ty_res, (fun env -> env) in (* Unify all cases (delayed to keep it order-free) *) let ty_arg' = newvar () in let unify_pats ty = List.iter (fun { typed_pat = pat; pat_type_for_unif = pat_ty; _ } -> - unify_pat_types pat.pat_loc (ref env) pat_ty ty + unify_pat_types pat.pat_loc env pat_ty ty ) half_typed_cases in unify_pats ty_arg'; @@ -5371,59 +6435,44 @@ and type_cases ) half_typed_cases; (half_typed_cases, ty_res, do_copy_types, ty_arg') end - ~post: begin fun (half_typed_cases, _, _, ty_arg') -> - generalize ty_arg'; - List.iter (fun { pat_vars; _ } -> - iter_pattern_variables_type generalize pat_vars - ) half_typed_cases - end in (* type bodies *) - let in_function = if List.length caselist = 1 then in_function else None in let ty_res' = instance ty_res in - let cases = with_local_level_if_principal ~post:ignore begin fun () -> - List.map - (fun { typed_pat = pat; branch_env = ext_env; - pat_vars = pvs; module_vars = mvs; - untyped_case = {pc_lhs = _; pc_guard; pc_rhs}; - contains_gadt; _ } -> + (* Why is it needed to keep the level of result raised ? *) + let result = with_local_level_if_principal ~post:ignore begin fun () -> + map_conts + (fun { typed_pat = pat; branch_env = ext_env; + pat_vars = pvs; module_vars = mvs; + case_data; contains_gadt; _ } cont + -> let ext_env = if contains_gadt then do_copy_types ext_env else ext_env in - let ext_env = - add_pattern_variables ext_env pvs + (* Before handing off the cases to the callback, first set up the the + branch environments by adding the variables (and module variables) + from the patterns. + *) + let cont_vars, pvs = + List.partition (fun pv -> pv.pv_kind = Continuation_var) pvs in + let add_pattern_vars = add_pattern_variables ~check:(fun s -> Warnings.Unused_var_strict s) ~check_as:(fun s -> Warnings.Unused_var s) in - let ext_env = add_module_variables ext_env mvs in + let when_env = add_pattern_vars ext_env pvs in + let when_env = add_module_variables when_env mvs in + let ext_env = add_pattern_vars when_env cont_vars in let ty_expected = if contains_gadt && not !Clflags.principal then (* Take a generic copy of [ty_res] again to allow propagation of - type information from preceding branches *) - correct_levels ty_res + type information from preceding branches *) + duplicate_type ty_res else ty_res in - let guard = - match pc_guard with - | None -> None - | Some scond -> - Some - (type_expect ext_env scond - (mk_expected ~explanation:When_guard Predef.type_bool)) - in - let exp = - type_expect ?in_function ext_env - pc_rhs (mk_expected ?explanation ty_expected) - in - { - c_lhs = pat; - c_guard = guard; - c_rhs = {exp with exp_type = ty_res'} - } - ) - half_typed_cases + type_body case_data pat ~when_env ~ext_env ~cont ~ty_expected + ~ty_infer:ty_res' ~contains_gadt) + conts half_typed_cases end in let do_init = may_contain_gadts || needs_exhaust_check in let ty_arg_check = @@ -5432,15 +6481,37 @@ and type_cases Subst.type_expr (Subst.for_saving Subst.identity) ty_arg' else ty_arg' in - let val_cases, exn_cases = + (* Split the cases into val and exn cases so we can do the appropriate checks + for exhaustivity and unused variables. + + The caller of this function can define custom checks. For some of these + checks, the half-typed case doesn't provide enough info on its own -- for + instance, the check for ambiguous bindings in when guards needs to know the + case body's expression -- so the code pairs each case with its + corresponding element in [result] before handing it off to the caller's + custom checks. + *) + let val_cases_with_result, exn_cases_with_result = match category with - | Value -> (cases : value case list), [] - | Computation -> split_cases env cases in + | Value -> + let val_cases = + List.map2 + (fun htc res -> + { htc.untyped_case with pattern = htc.typed_pat }, res) + half_typed_cases + result + in + (val_cases : (pattern Parmatch.parmatch_case * ret) list), [] + | Computation -> + split_half_typed_cases env (List.combine half_typed_cases result) + in + let val_cases = List.map fst val_cases_with_result in + let exn_cases = List.map fst exn_cases_with_result in if val_cases = [] && exn_cases <> [] then raise (error (loc, env, No_value_clauses)); let partial = - if partial_flag then - check_partial ~lev allow_modules env ty_arg_check loc val_cases + if check_if_total then + check_partial ~lev env ty_arg_check loc val_cases else Partial in @@ -5449,11 +6520,9 @@ and type_cases check_absent_variant branch_env (as_comp_pattern category typed_pat) ) half_typed_cases; with_level_if delayed ~level:lev begin fun () -> - check_unused ~lev allow_modules env ty_arg_check val_cases ; - check_unused ~lev allow_modules env Predef.type_exn exn_cases ; + check_unused ~lev env ty_arg_check val_cases ; + check_unused ~lev env Predef.type_exn exn_cases ; end; - Parmatch.check_ambiguous_bindings val_cases ; - Parmatch.check_ambiguous_bindings exn_cases in if not !has_errors then ( if contains_polyvars then @@ -5462,11 +6531,124 @@ and type_cases (* Check for unused cases, do not delay because of gadts *) unused_check false ); - ((cases, partial), [ty_res']) + begin + match additional_checks_for_split_cases with + | None -> () + | Some check -> + check val_cases_with_result; + check exn_cases_with_result; + end; + (result, partial), [ty_res'] end (* Ensure that existential types do not escape *) ~post:(fun ty_res' -> unify_exp_types loc env ty_res' (newvar ())) +(* Typing of match cases *) +and type_cases + : type k . k pattern_category -> _ -> _ -> _ -> ?conts:_ -> + check_if_total:bool -> _ -> Parsetree.case list -> + k case list * partial + = fun category env + ty_arg ty_res_explained ?conts ~check_if_total loc caselist -> + let { ty = ty_res; explanation } = ty_res_explained in + let caselist = + List.map (fun case -> Parmatch.untyped_case case, case) caselist + in + (* Most of the work is done by [map_half_typed_cases]. All that's left + is to typecheck the guards and the cases, and then to check for some + warnings that can fire in the presence of guards. + *) + map_half_typed_cases ?conts category env ty_arg ty_res loc caselist + ~check_if_total + ~type_body:begin + fun { pc_guard; pc_rhs } pat ~when_env ~ext_env ~cont ~ty_expected + ~ty_infer ~contains_gadt:_ -> + (* let cont = Option.map (fun (id,_) -> id) cont in *) + let guard = + match pc_guard with + | None -> None + | Some scond -> + (* It is crucial that the continuation is not used in the + `when' expression as the extent of the continuation is + yet to be determined. We make the continuation + inaccessible by typing the `when' expression using the + environment `ext_env' which does not bind the + continuation variable. *) + Some + (type_expect when_env scond + (mk_expected ~explanation:When_guard Predef.type_bool)) + in + let exp = + type_expect ext_env pc_rhs (mk_expected ?explanation ty_expected) + in + { + c_lhs = pat; + c_cont = cont; + c_guard = guard; + c_rhs = {exp with exp_type = ty_infer} + } + end + ~additional_checks_for_split_cases:(fun cases -> + let cases = + List.map + (fun (case_with_pat, case) -> + { case with c_lhs = case_with_pat.Parmatch.pattern }) cases + in + Parmatch.check_ambiguous_bindings cases) + + +(** A version of [type_expect], but that operates over function cases instead + of expressions. The input type is like the [ty_expected] argument to + [type_expect], and the returned type is like the [exp_type] of the + expression returned by [type_expect]. + + See [split_function_ty] for the meaning of [first] and [in_function]. +*) +and type_function_cases_expect + env ty_expected loc cases attrs ~first ~in_function = + Builtin_attributes.warning_scope attrs begin fun () -> + let ty_arg, ty_res = + split_function_ty env ty_expected ~arg_label:Nolabel ~first ~in_function + in + let cases, partial = + type_cases Value env ty_arg (mk_expected ty_res) + ~check_if_total:true loc cases + in + let ty_fun = + instance (newgenty (Tarrow (Nolabel, ty_arg, ty_res, commu_ok))) + in + (try unify_exp_types loc env ty_fun (instance ty_expected); + with _ -> Msupport.erroneous_type_register ty_expected); + cases, partial, ty_fun + end + +and type_effect_cases + : type k . k pattern_category -> _ -> _ -> _ -> Parsetree.case list -> _ + -> k case list + = fun category env ty_res_explained loc caselist conts -> + let { ty = ty_res; explanation = _ } = ty_res_explained in + let _ = newvar () in + (* remember original level *) + with_local_level begin fun () -> + (* Create a locally type abstract type for effect type. *) + let new_env, ty_arg, ty_cont = + let decl = Ctype.new_local_type ~loc Definition in + let scope = create_scope () in + let name = Ctype.get_new_abstract_name env "%eff" in + let id = Ident.create_scoped ~scope name in + let new_env = Env.add_type ~check:false id decl env in + let ty_eff = newgenty (Tconstr (Path.Pident id,[],ref Mnil)) in + new_env, + Predef.type_eff ty_eff, + Predef.type_continuation ty_eff ty_res + in + let conts = List.map (type_continuation_pat env ty_cont) conts in + let cases, _ = type_cases category new_env ty_arg + ty_res_explained ~conts ~check_if_total:false loc caselist + in + cases + end + (* Typing of let bindings *) and type_let ?check ?check_strict @@ -5475,11 +6657,11 @@ and type_let ?check ?check_strict let attrs_list = List.map fst spatl in let is_recursive = (rec_flag = Recursive) in - let (pat_list, exp_list, new_env, mvs, _pvs) = - with_local_level begin fun () -> + let (pat_list, exp_list, new_env, mvs) = + with_local_level_generalize begin fun () -> if existential_context = At_toplevel then Typetexp.TyVarEnv.reset (); let (pat_list, new_env, force, pvs, mvs) = - with_local_level_if_principal begin fun () -> + with_local_level_generalize_structure_if_principal begin fun () -> let nvs = List.map (fun _ -> newvar ()) spatl in let (pat_list, _new_env, _force, _pvs, _mvs as res) = type_pattern_list @@ -5493,11 +6675,11 @@ and type_let ?check ?check_strict match get_desc pat.pat_type with | Tpoly (ty, tl) -> {pat with pat_type = - snd (instance_poly ~keep_names:true false tl ty)} + snd (instance_poly ~keep_names:true ~fixed:false tl ty)} | _ -> pat in let bound_expr = vb_exp_constraint binding in - unify_pat (ref env) pat (type_approx env bound_expr)) + unify_pat env pat (type_approx env bound_expr)) pat_list spat_sexp_list; (* Polymorphic variant processing *) List.iter @@ -5509,11 +6691,6 @@ and type_let ?check ?check_strict pat_list; res end - ~post: begin fun (pat_list, _, _, pvs, _) -> - (* Generalize the structure *) - iter_pattern_variables_type generalize_structure pvs; - List.iter (fun pat -> generalize_structure pat.pat_type) pat_list - end in (* Note [add_module_variables after checking expressions] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -5528,7 +6705,7 @@ and type_let ?check ?check_strict let new_env = add_pattern_variables new_env pvs in let pat_list = List.map - (fun pat -> {pat with pat_type = instance pat.pat_type}) + (fun pat -> {pat with pat_type = instance pat.pat_type}, pat.pat_type) pat_list in (* Only bind pattern variables after generalizing *) @@ -5545,14 +6722,13 @@ and type_let ?check ?check_strict in type_let_def_wrap_warnings ?check ?check_strict ~is_recursive ~exp_env ~new_env ~spat_sexp_list ~attrs_list ~pat_list ~pvs - (fun exp_env ({pvb_attributes; _} as vb) pat -> + (fun exp_env ({pvb_attributes; _} as vb) expected_ty -> let sexp = vb_exp_constraint vb in - match get_desc pat.pat_type with + match get_desc expected_ty with | Tpoly (ty, tl) -> let vars, ty' = - with_local_level_if_principal - ~post:(fun (_,ty') -> generalize_structure ty') - (fun () -> instance_poly ~keep_names:true true tl ty) + with_local_level_generalize_structure_if_principal + (fun () -> instance_poly ~keep_names:true ~fixed:true tl ty) in let exp = Builtin_attributes.warning_scope pvb_attributes (fun () -> @@ -5562,57 +6738,43 @@ and type_let ?check ?check_strict | _ -> let exp = Builtin_attributes.warning_scope pvb_attributes (fun () -> - type_expect exp_env sexp (mk_expected pat.pat_type)) + type_expect exp_env sexp (mk_expected expected_ty)) in exp, None) in List.iter2 - (fun pat (attrs, exp) -> + (fun (pat, _) (attrs, exp) -> Builtin_attributes.warning_scope ~ppwarning:false attrs (fun () -> - ignore(check_partial allow_modules env pat.pat_type pat.pat_loc - [case pat exp] : Typedtree.partial) + let case = Parmatch.typed_case (case pat exp) in + ignore(check_partial env pat.pat_type pat.pat_loc + [case] : Typedtree.partial) ) ) pat_list (List.map2 (fun (attrs, _) (e, _) -> attrs, e) spatl exp_list); - (pat_list, exp_list, new_env, mvs, - List.map (fun pv -> { pv with pv_type = instance pv.pv_type}) pvs) + (pat_list, exp_list, new_env, mvs) end - ~post: begin fun (pat_list, exp_list, _, _, pvs) -> - List.iter2 - (fun pat (exp, _) -> - if maybe_expansive exp then lower_contravariant env pat.pat_type) - pat_list exp_list; - iter_pattern_variables_type generalize pvs; - List.iter2 - (fun pat (exp, vars) -> - match vars with - | None -> - (* We generalize expressions even if they are not bound to a variable - and do not have an expliclit polymorphic type annotation. This is - not needed in general, however those types may be shown by the - interactive toplevel, for example: - {[ - let _ = Array.get;; - - : 'a array -> int -> 'a = - ]} - so we do it anyway. *) - generalize exp.exp_type - | Some vars -> - if maybe_expansive exp then - lower_contravariant env exp.exp_type; - generalize_and_check_univars env "definition" - exp pat.pat_type vars) + ~before_generalize: begin fun (pat_list, exp_list, _, _) -> + List.iter2 (fun (pat, _) (exp, vars) -> + if maybe_expansive exp then begin + lower_contravariant env pat.pat_type; + if vars <> None then lower_contravariant env exp.exp_type + end) pat_list exp_list end in + List.iter2 + (fun (_, expected_ty) (exp, vars) -> + Option.iter (check_univars env "definition" exp expected_ty) vars) + pat_list exp_list; let l = List.combine pat_list exp_list in let l = List.map2 - (fun (p, (e, _)) pvb -> + (fun ((p, _), (e, _)) pvb -> + (* vb_rec_kind will be computed later for recursive bindings *) {vb_pat=p; vb_expr=e; vb_attributes=pvb.pvb_attributes; - vb_loc=pvb.pvb_loc; + vb_loc=pvb.pvb_loc; vb_rec_kind = Dynamic; }) l spat_sexp_list in @@ -5620,8 +6782,8 @@ and type_let ?check ?check_strict List.iter (fun {vb_pat=pat} -> match pat.pat_desc with Tpat_var _ -> () - | Tpat_alias ({pat_desc=Tpat_any}, _, _) -> () - | _ -> raise(error(pat.pat_loc, env, Illegal_letrec_pat))) + | Tpat_alias ({pat_desc=Tpat_any}, _, _, _, _) -> () + | _ -> raise_error(error(pat.pat_loc, env, Illegal_letrec_pat))) l; List.iter (fun vb -> if pattern_needs_partial_application_check vb.vb_pat then @@ -5655,7 +6817,7 @@ and type_let_def_wrap_warnings in let sexp_is_fun { pvb_expr = sexp; _ } = match sexp.pexp_desc with - | Pexp_fun _ | Pexp_function _ -> true + | Pexp_function _ -> true | _ -> false in let exp_env = @@ -5695,11 +6857,11 @@ and type_let_def_wrap_warnings *) let current_slot = ref None in let rec_needed = ref false in - let pat_slot_list = + let typ_slot_list = List.map2 - (fun attrs pat -> + (fun attrs (pat, expected_ty) -> Builtin_attributes.warning_scope ~ppwarning:false attrs (fun () -> - if not warn_about_unused_bindings then pat, None + if not warn_about_unused_bindings then expected_ty, None else let some_used = ref false in (* has one of the identifier of this pattern been used? *) @@ -5731,7 +6893,7 @@ and type_let_def_wrap_warnings ) ) (Typedtree.pat_bound_idents pat); - pat, Some slot + expected_ty, Some slot )) attrs_list pat_list @@ -5741,7 +6903,7 @@ and type_let_def_wrap_warnings (fun case (pat, slot) -> if is_recursive then current_slot := slot; type_def exp_env case pat) - spat_sexp_list pat_slot_list + spat_sexp_list typ_slot_list in current_slot := None; if is_recursive && not !rec_needed then begin @@ -5760,7 +6922,7 @@ and type_andops env sarg sands expected_ty = | [] -> type_expect env let_sarg (mk_expected expected_ty), [] | { pbop_op = sop; pbop_exp = sexp; pbop_loc = loc; _ } :: rest -> let op_path, op_desc, op_type, ty_arg, ty_rest, ty_result = - with_local_level_iter_if_principal begin fun () -> + with_local_level_generalize_structure_if_principal begin fun () -> let op_path, op_desc = type_binding_op_ident env sop in let op_type = instance op_desc.val_type in let ty_arg = newvar () in @@ -5775,10 +6937,8 @@ and type_andops env sarg sands expected_ty = with Unify err -> raise(error(sop.loc, env, Andop_type_clash(sop.txt, err))) end; - ((op_path, op_desc, op_type, ty_arg, ty_rest, ty_result), - [ty_rest; ty_arg; ty_result]) + (op_path, op_desc, op_type, ty_arg, ty_rest, ty_result) end - ~post:generalize_structure in let let_arg, rest = loop env let_sarg rest ty_rest in let exp = type_expect env sexp (mk_expected ty_arg) in @@ -5904,11 +7064,11 @@ let type_let existential_ctx env rec_flag spat_sexp_list = let type_expression env sexp = let exp = - with_local_level begin fun () -> + with_local_level_generalize begin fun () -> Typetexp.TyVarEnv.reset(); type_exp env sexp end - ~post:(may_lower_contravariant_then_generalize env) + ~before_generalize:(may_lower_contravariant env) in match sexp.pexp_desc with Pexp_ident lid -> @@ -5920,17 +7080,31 @@ let type_expression env sexp = (* Error report *) -let spellcheck ppf unbound_name valid_names = - Misc.did_you_mean ppf (fun () -> - Misc.spellcheck valid_names unbound_name - ) +let spellcheck unbound_name valid_names = + Misc.did_you_mean (Misc.spellcheck valid_names unbound_name) + +let spellcheck_idents unbound valid_idents = + spellcheck (Ident.name unbound) (List.map Ident.name valid_idents) -let spellcheck_idents ppf unbound valid_idents = - spellcheck ppf (Ident.name unbound) (List.map Ident.name valid_idents) +open Format_doc +module Fmt = Format_doc -open Format +module Printtyp = Printtyp.Doc -let longident = Printtyp.longident +let quoted_longident = Style.as_inline_code Pprintast.Doc.longident +let quoted_constr = Style.as_inline_code Pprintast.Doc.constr + +let tuple_component ~print_article ppf lbl = + let article = + match print_article, lbl with + | true, Some _ -> "a " + | true, None -> "an " + | false, _ -> "" + in + match lbl with + | Some s -> + fprintf ppf "%scomponent with label %a" article Style.inline_code s + | None -> fprintf ppf "%sunlabeled component" article (* Returns the first diff of the trace *) let type_clash_of_trace trace = @@ -5939,11 +7113,49 @@ let type_clash_of_trace trace = | _ -> None )) +(** More precise denomination for type errors. Used by messages: + + - [This ...] + - [The "foo" ...] *) +let pp_exp_denom ppf pexp = + let d = pp_print_string ppf in + let d_expression = fprintf ppf "%a expression" Style.inline_code in + match pexp.pexp_desc with + | Pexp_constant _ -> d "constant" + | Pexp_ident _ -> d "value" + | Pexp_construct _ | Pexp_variant _ -> d "constructor" + | Pexp_field _ -> d "field access" + | Pexp_send _ -> d "method call" + | Pexp_while _ -> d_expression "while" + | Pexp_for _ -> d_expression "for" + | Pexp_ifthenelse _ -> d_expression "if-then-else" + | Pexp_match _ -> d_expression "match" + | Pexp_try _ -> d_expression "try-with" + | _ -> d "expression" + +(** Implements the "This expression" message, printing the expression if it + should be according to {!Parsetree.Doc.nominal_exp}. *) +let report_this_pexp_has_type denom ppf exp = + let denom ppf = + match denom, exp with + | Some d, _ -> fprintf ppf "%s" d + | None, Some exp -> pp_exp_denom ppf exp + | None, None -> fprintf ppf "expression" + in + let nexp = Option.bind exp Pprintast.Doc.nominal_exp in + match nexp with + | Some nexp -> + fprintf ppf "The %t %a has type" denom (Style.as_inline_code pp_doc) nexp + | _ -> fprintf ppf "This %t has type" denom + +let report_this_texp_has_type denom ppf texp = + report_this_pexp_has_type denom ppf (Some (Untypeast.untype_expression texp)) + (* Hint on type error on integer literals To avoid confusion, it is disabled on float literals and when the expected type is `int` *) let report_literal_type_constraint expected_type const = - let const_str = match const with + let const_str = match const.pconst_desc with | Pconst_integer (s, _) -> Some s | _ -> None in @@ -5958,9 +7170,13 @@ let report_literal_type_constraint expected_type const = Some '.' else None in + let pp_const ppf (c,s) = Fmt.fprintf ppf "%s%c" c s in match const_str, suffix with - | Some c, Some s -> [ Location.msg "@[@{Hint@}: Did you \ - mean `%s%c'?@]" c s ] + | Some c, Some s -> [ + Location.msg + "@[@{Hint@}: Did you mean %a?@]" + (Style.as_inline_code pp_const) (c,s) + ] | _, _ -> [] let report_literal_type_constraint const = function @@ -5977,25 +7193,29 @@ let report_partial_application = function match get_desc tr.Errortrace.got.Errortrace.expanded with | Tarrow _ -> [ Location.msg - "@[@{Hint@}: This function application is partial,@ \ - maybe some arguments are missing.@]" ] + "@[@{Hint@}:@ This function application is partial,@ \ + maybe@ some@ arguments@ are missing.@]" ] | _ -> [] end | None -> [] let report_expr_type_clash_hints exp diff = match exp with - | Some (Pexp_constant const) -> report_literal_type_constraint const diff - | Some (Pexp_apply _) -> report_partial_application diff - | _ -> [] + | Some exp -> begin + match exp.pexp_desc with + | Pexp_constant const -> report_literal_type_constraint const diff + | Pexp_apply _ -> report_partial_application diff + | _ -> [] + end + | None -> [] let report_pattern_type_clash_hints pat diff = match pat with | Some (Ppat_constant const) -> report_literal_type_constraint const diff | _ -> [] -let report_type_expected_explanation expl ppf = - let because expl_str = fprintf ppf "@ because it is in %s" expl_str in +let report_type_expected_explanation expl = + let because expl_str = doc_printf "@ because it is in %s" expl_str in match expl with | If_conditional -> because "the condition of an if-statement" @@ -6018,24 +7238,18 @@ let report_type_expected_explanation expl ppf = | When_guard -> because "a when-guard" -let report_type_expected_explanation_opt expl ppf = +let report_type_expected_explanation_opt expl = match expl with - | None -> () - | Some expl -> report_type_expected_explanation expl ppf + | None -> Format_doc.Doc.empty + | Some expl -> report_type_expected_explanation expl let report_unification_error ~loc ?sub env err ?type_expected_explanation txt1 txt2 = Location.error_of_printer ~loc ?sub (fun ppf () -> - Printtyp.report_unification_error ppf env err + Errortrace_report.unification ppf env err ?type_expected_explanation txt1 txt2 ) () -let report_this_function ppf funct = - if Typedtree.exp_is_nominal funct then - let pexp = Untypeast.untype_expression funct in - Format.fprintf ppf "The function '%a'" Pprintast.expression pexp - else Format.fprintf ppf "This function" - let report_too_many_arg_error ~funct ~func_ty ~previous_arg_loc ~extra_arg_loc ~returns_unit loc = let open Location in @@ -6055,67 +7269,129 @@ let report_too_many_arg_error ~funct ~func_ty ~previous_arg_loc loc_end = cnum_offset ~+1 arg_end; loc_ghost = false } in - let hint_semicolon = if returns_unit then [ - msg ~loc:tail_loc "@{Hint@}: Did you forget a ';'?"; - ] else [] in - let sub = hint_semicolon @ [ - msg ~loc:extra_arg_loc "This extra argument is not expected."; - ] in - errorf ~loc:app_loc ~sub - "@[@[<2>%a has type@ %a@]\ + errorf ~loc:app_loc + "@[@[<2>%a@ %a@]\ @ It is applied to too many arguments@]" - report_this_function funct Printtyp.type_expr func_ty + (report_this_texp_has_type (Some "function")) funct + Printtyp.type_expr func_ty + ~sub:( + let semicolon = + if returns_unit then + [msg ~loc:tail_loc "@{Hint@}: Did you forget a ';'?"] + else [] + in + semicolon @ + [msg ~loc:extra_arg_loc "This extra argument is not expected."] + ) + +let msg = Fmt.doc_printf let report_error ~loc env = function | Constructor_arity_mismatch(lid, expected, provided) -> Location.errorf ~loc "@[The constructor %a@ expects %i argument(s),@ \ but is applied here to %i argument(s)@]" - longident lid expected provided + quoted_constr lid expected provided + | Constructor_labeled_arg -> + Location.errorf ~loc + "Constructors cannot have labeled arguments.@ \ + Consider using an inline record instead." + | Partial_tuple_pattern_bad_type -> + Location.errorf ~loc + "Could not determine the type of this partial tuple pattern." + | Extra_tuple_label (lbl, typ) -> + Location.errorf ~loc + "This pattern was expected to match values of type@ %a,@ but it \ + contains an extra %a." + (Style.as_inline_code Printtyp.type_expr) typ + (tuple_component ~print_article:false) lbl; + | Missing_tuple_label (lbl, typ) -> + let hint ppf () = + (* We only hint if the missing component is labeled. This is + unlikely to be a correct fix for traditional tuples. *) + match lbl with + | Some _ -> fprintf ppf "@ Hint: use .. to ignore some components." + | None -> () + in + Location.errorf ~loc + "This pattern was expected to match values of type@ %a,@ but it is \ + missing %a.%a" + (Style.as_inline_code Printtyp.type_expr) typ + (tuple_component ~print_article:true) lbl + hint () | Label_mismatch(lid, err) -> report_unification_error ~loc env err - (function ppf -> - fprintf ppf "The record field %a@ belongs to the type" - longident lid) - (function ppf -> - fprintf ppf "but is mixed here with fields of type") + (msg "The record field %a@ belongs to the type" quoted_longident lid) + (msg "but is mixed here with fields of type") | Pattern_type_clash (err, pat) -> let diff = type_clash_of_trace err.trace in let sub = report_pattern_type_clash_hints pat diff in report_unification_error ~loc ~sub env err - (function ppf -> - fprintf ppf "This pattern matches values of type") - (function ppf -> - fprintf ppf "but a pattern was expected which matches values of \ - type"); + (msg "This pattern matches values of type") + (msg "but a pattern was expected which matches values of type"); | Or_pattern_type_clash (id, err) -> report_unification_error ~loc env err - (function ppf -> - fprintf ppf "The variable %s on the left-hand side of this \ - or-pattern has type" (Ident.name id)) - (function ppf -> - fprintf ppf "but on the right-hand side it has type") + (msg "The variable %a on the left-hand side of this \ + or-pattern has type" Style.inline_code (Ident.name id)) + (msg "but on the right-hand side it has type") | Multiply_bound_variable name -> Location.errorf ~loc - "Variable %s is bound several times in this matching" - name + "Variable %a is bound several times in this matching" + Style.inline_code name | Orpat_vars (id, valid_idents) -> - Location.error_of_printer ~loc (fun ppf () -> - fprintf ppf - "Variable %s must occur on both sides of this | pattern" - (Ident.name id); - spellcheck_idents ppf id valid_idents - ) () + Location.aligned_error_hint ~loc + "@{Variable @}%a must occur on both sides of this %a pattern" + Style.inline_code (Ident.name id) + Style.inline_code "|" + (spellcheck_idents id valid_idents) | Expr_type_clash (err, explanation, exp) -> let diff = type_clash_of_trace err.trace in let sub = report_expr_type_clash_hints exp diff in report_unification_error ~loc ~sub env err ~type_expected_explanation: (report_type_expected_explanation_opt explanation) - (function ppf -> - fprintf ppf "This expression has type") - (function ppf -> - fprintf ppf "but an expression was expected of type"); + (msg "%a" (report_this_pexp_has_type None) exp) + (msg "but an expression was expected of type"); + | Function_arity_type_clash { + syntactic_arity; type_constraint; trace = { trace }; + } -> + (* The last diff's expected type will be the locally-abstract type + that the GADT pattern introduced an equation on. + *) + let type_with_local_equation = + let last_diff = + List.find_map + (function Errortrace.Diff diff -> Some diff | _ -> None) + (List.rev trace) + in + match last_diff with + | None -> None + | Some diff -> Some diff.expected.ty + in + (* [syntactic_arity>1] for this error, so "arguments" is always plural. *) + Location.errorf ~loc + "@[\ + @[\ + The syntactic arity of the function doesn't match the type constraint:@ \ + @[<2>\ + This function has %d syntactic arguments, but its type is constrained \ + to@ %a.\ + @]@ \ + @]@ \ + @[\ + @[<2>@{Hint@}: \ + consider splitting the function definition into@ %a@ \ + where %a is the pattern with the GADT constructor that@ \ + introduces the local type equation%t.\ + @]" + syntactic_arity + (Style.as_inline_code Printtyp.type_expr) type_constraint + Style.inline_code "fun ... gadt_pat -> fun ..." + Style.inline_code "gadt_pat" + (fun ppf -> + Option.iter + (fprintf ppf " on %a" (Style.as_inline_code Printtyp.type_expr)) + type_with_local_equation) | Apply_non_function { funct; func_ty; res_ty; previous_arg_loc; extra_arg_loc } -> @@ -6129,13 +7405,15 @@ let report_error ~loc env = function ~extra_arg_loc ~returns_unit loc | _ -> Location.errorf ~loc "@[@[<2>This expression has type@ %a@]@ %s@]" - Printtyp.type_expr func_ty + (Style.as_inline_code Printtyp.type_expr) func_ty "This is not a function; it cannot be applied." end | Apply_wrong_label (l, ty, extra_info) -> let print_label ppf = function | Nolabel -> fprintf ppf "without label" - | l -> fprintf ppf "with label %s" (prefixed_label_name l) + | l -> + fprintf ppf "with label %a" + Style.inline_code (prefixed_label_name l) in let extra_info = if not extra_info then @@ -6153,156 +7431,188 @@ let report_error ~loc env = function Location.errorf ~loc "The record field label %s is defined several times" s | Label_missing labels -> - let print_labels ppf = - List.iter (fun lbl -> fprintf ppf "@ %s" (Ident.name lbl)) in + let print_label ppf lbl = Style.inline_code ppf (Ident.name lbl) in + let print_labels ppf = List.iter (fprintf ppf "@ %a" print_label) in Location.errorf ~loc "@[Some record fields are undefined:%a@]" print_labels labels | Label_not_mutable lid -> - Location.errorf ~loc "The record field %a is not mutable" longident lid + Location.errorf ~loc "The record field %a is not mutable" + quoted_longident lid | Wrong_name (eorp, ty_expected, { type_path; kind; name; valid_names; }) -> - Location.error_of_printer ~loc (fun ppf () -> - Printtyp.wrap_printing_env ~error:true env (fun () -> - let { ty; explanation } = ty_expected in - if Path.is_constructor_typath type_path then begin - fprintf ppf - "@[The field %s is not part of the record \ - argument for the %a constructor@]" - name.txt - Printtyp.type_path type_path; - end else begin - fprintf ppf - "@[@[<2>%s type@ %a%t@]@ \ - There is no %s %s within type %a@]" - eorp Printtyp.type_expr ty - (report_type_expected_explanation_opt explanation) - (Datatype_kind.label_name kind) - name.txt (*kind*) Printtyp.type_path type_path; - end; - spellcheck ppf name.txt valid_names - )) () + Printtyp.wrap_printing_env ~error:true env (fun () -> + let { ty; explanation } = ty_expected in + if Path.is_constructor_typath type_path then + Location.aligned_error_hint ~loc + "@{The field @}%a is not part of the record argument \ + for the %a constructor" + Style.inline_code name.txt + (Style.as_inline_code Printtyp.type_path) type_path + (spellcheck name.txt valid_names) + else + let intro ppf = Fmt.fprintf ppf "@[%s type@;<1 2>%a%a@]@\n" + eorp (Style.as_inline_code Printtyp.type_expr) ty + pp_doc (report_type_expected_explanation_opt explanation) + in + let main = + Fmt.doc_printf "@{There is no %s @}%a within type %a" + (Datatype_kind.label_name kind) + Style.inline_code name.txt + (Style.as_inline_code Printtyp.type_path) type_path + in + let main, sub = + match spellcheck name.txt valid_names with + | None -> main, [] + | Some hint -> + let main, hint = Misc.align_error_hint ~main ~hint in + main, [Location.mknoloc hint] + in + Location.errorf ~loc ~sub "%t%a" intro pp_doc main + ) | Name_type_mismatch (kind, lid, tp, tpl) -> let type_name = Datatype_kind.type_name kind in let name = Datatype_kind.label_name kind in - Location.error_of_printer ~loc (fun ppf () -> - Printtyp.report_ambiguous_type_error ppf env tp tpl - (function ppf -> - fprintf ppf "The %s %a@ belongs to the %s type" - name longident lid type_name) - (function ppf -> - fprintf ppf "The %s %a@ belongs to one of the following %s types:" - name longident lid type_name) - (function ppf -> - fprintf ppf "but a %s was expected belonging to the %s type" + let pr = match kind with + | Datatype_kind.Record -> quoted_longident + | Datatype_kind.Variant -> quoted_constr + in + Location.errorf ~loc "%t" (fun ppf -> + Errortrace_report.ambiguous_type ppf env tp tpl + (msg "The %s %a@ belongs to the %s type" + name pr lid type_name) + (msg "The %s %a@ belongs to one of the following %s types:" + name pr lid type_name) + (msg "but a %s was expected belonging to the %s type" name type_name) - ) () + ) | Invalid_format msg -> Location.errorf ~loc "%s" msg | Not_an_object (ty, explanation) -> - Location.error_of_printer ~loc (fun ppf () -> - fprintf ppf "This expression is not an object;@ \ - it has type %a" - Printtyp.type_expr ty; - report_type_expected_explanation_opt explanation ppf - ) () + Location.errorf ~loc + "This expression is not an object;@ it has type %a%a" + (Style.as_inline_code Printtyp.type_expr) ty + pp_doc (report_type_expected_explanation_opt explanation) | Undefined_method (ty, me, valid_methods) -> - Location.error_of_printer ~loc (fun ppf () -> - Printtyp.wrap_printing_env ~error:true env (fun () -> - fprintf ppf - "@[@[This expression has type@;<1 2>%a@]@,\ - It has no method %s@]" Printtyp.type_expr ty me; - begin match valid_methods with - | None -> () - | Some valid_methods -> spellcheck ppf me valid_methods - end - )) () + Printtyp.wrap_printing_env ~error:true env (fun () -> + let intro ppf = + Fmt.fprintf ppf + "@[@[This expression has type@;<1 2>%a@]@,@]" + (Style.as_inline_code Printtyp.type_expr) ty + in + let main = + Fmt.doc_printf "@{It has no method @}%a" + Style.inline_code me + in + let main, sub = + match Option.bind valid_methods (spellcheck me) with + | None -> main, [] + | Some hint -> + let main, hint = Misc.align_error_hint ~main ~hint in + main, [Location.mknoloc hint] + in + Location.errorf ~sub ~loc "%t%a" intro pp_doc main + ) | Undefined_self_method (me, valid_methods) -> - Location.error_of_printer ~loc (fun ppf () -> - fprintf ppf "This expression has no method %s" me; - spellcheck ppf me valid_methods; - ) () + Location.aligned_error_hint ~loc + "@{This expression has no method @}%a" + Style.inline_code me + (spellcheck me valid_methods) | Virtual_class cl -> - Location.errorf ~loc "Cannot instantiate the virtual class %a" - longident cl + Location.errorf ~loc "Cannot instantiate the virtual class %a" + quoted_longident cl | Unbound_instance_variable (var, valid_vars) -> - Location.error_of_printer ~loc (fun ppf () -> - fprintf ppf "Unbound instance variable %s" var; - spellcheck ppf var valid_vars; - ) () + Location.aligned_error_hint ~loc + "@{Unbound instance variable @}%a" Style.inline_code var + (spellcheck var valid_vars) | Instance_variable_not_mutable v -> - Location.errorf ~loc "The instance variable %s is not mutable" v + Location.errorf ~loc "The instance variable %a is not mutable" + Style.inline_code v | Not_subtype err -> - Location.error_of_printer ~loc (fun ppf () -> - Printtyp.Subtype.report_error ppf env err "is not a subtype of" - ) () + Location.errorf ~loc "%t" (fun ppf -> + Errortrace_report.subtype ppf env err "is not a subtype of" + ) | Outside_class -> Location.errorf ~loc "This object duplication occurs outside a method definition" | Value_multiply_overridden v -> Location.errorf ~loc - "The instance variable %s is overridden several times" - v + "The instance variable %a is overridden several times" + Style.inline_code v | Coercion_failure (ty_exp, err, b) -> - Location.error_of_printer ~loc (fun ppf () -> - Printtyp.report_unification_error ppf env err - (function ppf -> - let ty_exp = Printtyp.prepare_expansion ty_exp in - fprintf ppf "This expression cannot be coerced to type@;<1 2>%a;@ \ - it has type" - (Printtyp.type_expansion Type) ty_exp) - (function ppf -> - fprintf ppf "but is here used with type"); - if b then - fprintf ppf ".@.@[%s@ @{Hint@}: Consider using a fully \ - explicit coercion@ %s@]" - "This simple coercion was not fully general." - "of the form: `(foo : ty1 :> ty2)'." - ) () + let intro = + let ty_exp = Out_type.prepare_expansion ty_exp in + doc_printf "This expression cannot be coerced to type@;<1 2>%a;@ \ + it has type" + (Style.as_inline_code @@ Printtyp.type_expansion Type) ty_exp + in + Location.errorf ~loc "%t" (fun ppf -> + Errortrace_report.unification ppf env err + intro + (Fmt.Doc.msg "but is here used with type") + ) + ~sub:( + if not b then [] else + [ Location.msg "This simple coercion was not fully general"; + Location.msg + "@{Hint@}: Consider using a fully explicit coercion@ \ + of the form: %a" + Style.inline_code "(foo : ty1 :> ty2)" + ] + ) | Not_a_function (ty, explanation) -> Location.errorf ~loc "This expression should not be a function,@ \ - the expected type is@ %a%t" - Printtyp.type_expr ty - (report_type_expected_explanation_opt explanation) + the expected type is@ %a%a" + (Style.as_inline_code Printtyp.type_expr) ty + pp_doc (report_type_expected_explanation_opt explanation) | Too_many_arguments (ty, explanation) -> Location.errorf ~loc "This function expects too many arguments,@ \ - it should have type@ %a%t" - Printtyp.type_expr ty - (report_type_expected_explanation_opt explanation) + it should have type@ %a%a" + (Style.as_inline_code Printtyp.type_expr) ty + pp_doc (report_type_expected_explanation_opt explanation) | Abstract_wrong_label {got; expected; expected_type; explanation} -> - let label ~long = function - | Nolabel -> "unlabeled" - | l -> (if long then "labeled " else "") ^ prefixed_label_name l + let label ~long ppf = function + | Nolabel -> fprintf ppf "unlabeled" + | l -> + if long then + fprintf ppf "labeled %a" Style.inline_code (prefixed_label_name l) + else + Style.inline_code ppf (prefixed_label_name l) in let second_long = match got, expected with | Nolabel, _ | _, Nolabel -> true | _ -> false in Location.errorf ~loc - "@[@[<2>This function should have type@ %a%t@]@,\ - @[but its first argument is %s@ instead of %s%s@]@]" - Printtyp.type_expr expected_type - (report_type_expected_explanation_opt explanation) - (label ~long:true got) + "@[@[<2>This function should have type@ %a%a@]@,\ + @[but its first argument is %a@ instead of %s%a@]@]" + (Style.as_inline_code Printtyp.type_expr) expected_type + pp_doc (report_type_expected_explanation_opt explanation) + (label ~long:true) got (if second_long then "being " else "") - (label ~long:second_long expected) + (label ~long:second_long) expected | Scoping_let_module(id, ty) -> Location.errorf ~loc - "This `let module' expression has type@ %a@ \ - In this type, the locally bound module name %s escapes its scope" - Printtyp.type_expr ty id + "This %a expression has type@ %a@ \ + In this type, the locally bound module name %a escapes its scope" + Style.inline_code "let module" + (Style.as_inline_code Printtyp.type_expr) ty + Style.inline_code id | Private_type ty -> Location.errorf ~loc "Cannot create values of the private type %a" - Printtyp.type_expr ty + (Style.as_inline_code Printtyp.type_expr) ty | Private_label (lid, ty) -> Location.errorf ~loc "Cannot assign field %a of the private type %a" - longident lid Printtyp.type_expr ty + quoted_longident lid + (Style.as_inline_code Printtyp.type_expr) ty | Private_constructor (constr, ty) -> Location.errorf ~loc - "Cannot use private constructor %s to create values of type %a" - constr.cstr_name Printtyp.type_expr ty + "Cannot use private constructor %a to create values of type %a" + Style.inline_code constr.cstr_name + (Style.as_inline_code Printtyp.type_expr) ty | Not_a_polymorphic_variant_type lid -> - Location.errorf ~loc "The type %a@ is not a variant type" longident lid + Location.errorf ~loc "The type %a@ is not a variant type" + quoted_longident lid | Incoherent_label_order -> Location.errorf ~loc "This function is applied to arguments@ \ @@ -6310,8 +7620,8 @@ let report_error ~loc env = function This is only allowed when the real type is known." | Less_general (kind, err) -> report_unification_error ~loc env err - (fun ppf -> fprintf ppf "This %s has type" kind) - (fun ppf -> fprintf ppf "which is less general than") + (Fmt.doc_printf "This %s has type" kind) + (Fmt.doc_printf "which is less general than") | Modules_not_allowed -> Location.errorf ~loc "Modules are not allowed in this pattern." | Cannot_infer_signature -> @@ -6320,45 +7630,42 @@ let report_error ~loc env = function | Not_a_packed_module ty -> Location.errorf ~loc "This expression is packed module, but the expected type is@ %a" - Printtyp.type_expr ty - | Unexpected_existential (reason, name, types) -> + (Style.as_inline_code Printtyp.type_expr) ty + | Unexpected_existential (reason, name) -> let reason_str = - match reason with + match reason with | In_class_args -> - "Existential types are not allowed in class arguments" + dprintf "Existential types are not allowed in class arguments" | In_class_def -> - "Existential types are not allowed in bindings inside \ + dprintf "Existential types are not allowed in bindings inside \ class definition" | In_self_pattern -> - "Existential types are not allowed in self patterns" + dprintf "Existential types are not allowed in self patterns" | At_toplevel -> - "Existential types are not allowed in toplevel bindings" + dprintf "Existential types are not allowed in toplevel bindings" | In_group -> - "Existential types are not allowed in \"let ... and ...\" bindings" + dprintf "Existential types are not allowed in grouped (%a) bindings" + Style.inline_code "let ... and ..." | In_rec -> - "Existential types are not allowed in recursive bindings" + dprintf "Existential types are not allowed in recursive bindings" | With_attributes -> - "Existential types are not allowed in presence of attributes" + dprintf + "Existential types are not allowed in presence of attributes" in - begin match List.find (fun ty -> ty <> "$" ^ name) types with - | example -> - Location.errorf ~loc - "%s,@ but this pattern introduces the existential type %s." - reason_str example - | exception Not_found -> - Location.errorf ~loc - "%s,@ but the constructor %s introduces existential types." - reason_str name - end + Location.errorf ~loc + "%t,@ but the constructor %a introduces existential types." + reason_str Style.inline_code name | Invalid_interval -> Location.errorf ~loc "@[Only character intervals are supported in patterns.@]" | Invalid_for_loop_index -> Location.errorf ~loc - "@[Invalid for-loop index: only variables and _ are allowed.@]" + "@[Invalid for-loop index: only variables and %a are allowed.@]" + Style.inline_code "_" | No_value_clauses -> Location.errorf ~loc - "None of the patterns in this 'match' expression match values." + "None of the patterns in this %a expression match values." + Style.inline_code "match" | Exception_pattern_disallowed -> Location.errorf ~loc "@[Exception patterns are not allowed in this position.@]" @@ -6366,6 +7673,12 @@ let report_error ~loc env = function Location.errorf ~loc "@[Mixing value and exception patterns under when-guards is not \ supported.@]" + | Effect_pattern_below_toplevel -> + Location.errorf ~loc + "@[Effect patterns must be at the top level of a match case.@]" + | Invalid_continuation_pattern -> + Location.errorf ~loc + "@[Invalid continuation pattern: only variables and _ are allowed .@]" | Inlined_record_escape -> Location.errorf ~loc "@[This form is not allowed as the type of the inlined record could \ @@ -6375,55 +7688,88 @@ let report_error ~loc env = function "@[This constructor expects an inlined record argument.@]" | Unrefuted_pattern pat -> Location.errorf ~loc - "@[%s@ %s@ %a@]" + "@[%s@ %s@ @[%a@]@]" "This match case could not be refuted." "Here is an example of a value that would reach it:" - Printpat.top_pretty pat + (Style.as_inline_code Printpat.top_pretty) pat | Invalid_extension_constructor_payload -> Location.errorf ~loc - "Invalid [%%extension_constructor] payload, a constructor is expected." + "Invalid %a payload, a constructor is expected." + Style.inline_code "[%extension_constructor]" | Not_an_extension_constructor -> Location.errorf ~loc "This constructor is not an extension constructor." + | Invalid_atomic_loc_payload -> + Location.errorf ~loc + "Invalid %a payload, a record field access is expected." + Style.inline_code "[%atomic.loc]" + | Label_not_atomic lid -> + Location.errorf ~loc "The record field %a is not atomic" + quoted_longident lid + | Atomic_in_pattern lid -> + Location.errorf ~loc + "Atomic fields (here %a) are forbidden in patterns,@ \ + as it is difficult to reason about when the atomic read@ \ + will happen during pattern matching:@ the field may be read@ \ + zero, one or several times depending on the patterns around it." + quoted_longident lid | Literal_overflow ty -> Location.errorf ~loc - "Integer literal exceeds the range of representable integers of type %s" - ty + "Integer literal exceeds the range of representable integers of type %a" + Style.inline_code ty | Unknown_literal (n, m) -> - Location.errorf ~loc "Unknown modifier '%c' for literal %s%c" m n m + let pp_lit ppf (n,m) = fprintf ppf "%s%c" n m in + Location.errorf ~loc "Unknown modifier %a for literal %a" + (Style.as_inline_code pp_print_char) m + (Style.as_inline_code pp_lit) (n,m) | Illegal_letrec_pat -> Location.errorf ~loc - "Only variables are allowed as left-hand side of `let rec'" + "Only variables are allowed as left-hand side of %a" + Style.inline_code "let rec" | Illegal_letrec_expr -> Location.errorf ~loc - "This kind of expression is not allowed as right-hand side of `let rec'" + "This kind of expression is not allowed as right-hand side of %a" + Style.inline_code "let rec" | Illegal_class_expr -> Location.errorf ~loc "This kind of recursive class expression is not allowed" | Letop_type_clash(name, err) -> report_unification_error ~loc env err - (function ppf -> - fprintf ppf "The operator %s has type" name) - (function ppf -> - fprintf ppf "but it was expected to have type") + (msg "The operator %a has type" Style.inline_code name) + (msg "but it was expected to have type") | Andop_type_clash(name, err) -> report_unification_error ~loc env err - (function ppf -> - fprintf ppf "The operator %s has type" name) - (function ppf -> - fprintf ppf "but it was expected to have type") + (msg "The operator %a has type" Style.inline_code name) + (msg "but it was expected to have type") | Bindings_type_clash(err) -> report_unification_error ~loc env err - (function ppf -> - fprintf ppf "These bindings have type") - (function ppf -> - fprintf ppf "but bindings were expected of type") + (Fmt.doc_printf "These bindings have type") + (Fmt.doc_printf "but bindings were expected of type") | Unbound_existential (ids, ty) -> + let pp_ident ppf id = pp_print_string ppf (Ident.name id) in + let pp_type ppf (ids,ty)= + fprintf ppf "@[type %a.@ %a@]@]" + (pp_print_list ~pp_sep:pp_print_space pp_ident) ids + Printtyp.type_expr ty + in Location.errorf ~loc - "@[<2>%s:@ @[type %s.@ %a@]@]" + "@[<2>%s:@ %a@]" "This type does not bind all existentials in the constructor" - (String.concat " " (List.map Ident.name ids)) - Printtyp.type_expr ty + (Style.as_inline_code pp_type) (ids, ty) + | Bind_existential (reason, id, ty) -> + let reason1, reason2 = match reason with + | Bind_already_bound -> "the name", "that is already bound" + | Bind_not_in_scope -> "the name", "that was defined before" + | Bind_non_locally_abstract -> "the type", + "that is not a locally abstract type" + in + Location.errorf ~loc + "@[The local name@ %a@ %s@ %s.@ %s@ %s@ %a@ %s.@]" + (Style.as_inline_code Printtyp.ident) id + "can only be given to an existential variable" + "introduced by this GADT constructor" + "The type annotation tries to bind it to" + reason1 (Style.as_inline_code Printtyp.type_expr) ty reason2 | Missing_type_constraint -> Location.errorf ~loc "@[%s@ %s@]" @@ -6445,14 +7791,22 @@ let report_error ~loc env = function in Location.errorf ~loc "This %s should not be a %s,@ \ - the expected type is@ %a%t" - ctx sort Printtyp.type_expr ty - (report_type_expected_explanation_opt explanation) + the expected type is@ %a%a" + ctx sort (Style.as_inline_code Printtyp.type_expr) ty + pp_doc (report_type_expected_explanation_opt explanation) | Expr_not_a_record_type ty -> Location.errorf ~loc "This expression has type %a@ \ which is not a record type." - Printtyp.type_expr ty + (Style.as_inline_code Printtyp.type_expr) ty + | Repeated_tuple_exp_label l -> + Location.errorf ~loc + "@[This tuple expression has two labels named %a@]" + Style.inline_code l + | Repeated_tuple_pat_label l -> + Location.errorf ~loc + "@[This tuple pattern has two labels named %a@]" + Style.inline_code l let report_error ~loc env err = Printtyp.wrap_printing_env ~error:true env @@ -6474,12 +7828,16 @@ let () = Env.add_delayed_check_forward := add_delayed_check; () +(* drop the need to call [Parmatch.typed_case] from the external API *) +let check_partial ?lev a b c cases = + check_partial ?lev a b c (List.map Parmatch.typed_case cases) + (* drop ?recarg argument from the external API *) -let type_expect ?in_function env e ty = type_expect ?in_function env e ty +let type_expect env e ty = type_expect env e ty let type_exp env e = type_exp env e let type_argument env e t1 t2 = type_argument env e t1 t2 (* Merlin specific *) let partial_pred ~lev = let splitting_mode = Refine_or {inside_nonsplit_or = false} in - partial_pred ~allow_modules:(Modules_allowed { scope = lev }) ~splitting_mode ~lev + partial_pred ~splitting_mode ~lev diff --git a/ocamlmerlin_mlx/ocaml/typing/typecore.mli b/ocamlmerlin_mlx/ocaml/typing/typecore.mli index 1c6374c..65a07e7 100644 --- a/ocamlmerlin_mlx/ocaml/typing/typecore.mli +++ b/ocamlmerlin_mlx/ocaml/typing/typecore.mli @@ -49,13 +49,19 @@ type type_expected = private { } (* Variables in patterns *) +type pattern_variable_kind = + | Std_var + | As_var + | Continuation_var + type pattern_variable = { pv_id: Ident.t; pv_type: type_expr; pv_loc: Location.t; - pv_as_var: bool; + pv_kind: pattern_variable_kind; pv_attributes: Typedtree.attributes; + pv_uid : Uid.t; } val mk_expected: @@ -98,10 +104,6 @@ type existential_restriction = | In_class_def (** or in [class c = let ... in ...] *) | In_self_pattern (** or in self pattern *) -type module_patterns_restriction = - | Modules_allowed of { scope : int } - | Modules_rejected - val type_binding: Env.t -> rec_flag -> Parsetree.value_binding list -> @@ -121,10 +123,9 @@ val type_self_pattern: Env.t -> Parsetree.pattern -> Typedtree.pattern * pattern_variable list val check_partial: - ?lev:int -> module_patterns_restriction -> Env.t -> type_expr -> + ?lev:int -> Env.t -> type_expr -> Location.t -> Typedtree.value Typedtree.case list -> Typedtree.partial val type_expect: - ?in_function:(Location.t * type_expr) -> Env.t -> Parsetree.expression -> type_expected -> Typedtree.expression val type_exp: Env.t -> Parsetree.expression -> Typedtree.expression @@ -138,7 +139,6 @@ val option_some: Env.t -> Typedtree.expression -> Typedtree.expression val option_none: 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 generalize_structure_exp: Typedtree.expression -> unit type delayed_check val delayed_checks: delayed_check list ref val reset_delayed_checks: unit -> unit @@ -149,6 +149,11 @@ val name_cases : string -> Typedtree.value Typedtree.case list -> Ident.t val self_coercion : (Path.t * Location.t list ref) list ref +type existential_binding = + | Bind_already_bound + | Bind_not_in_scope + | Bind_non_locally_abstract + type error = | Constructor_arity_mismatch of Longident.t * int * int | Label_mismatch of Longident.t * Errortrace.unification_error @@ -160,7 +165,12 @@ type error = | Orpat_vars of Ident.t * Ident.t list | Expr_type_clash of Errortrace.unification_error * type_forcing_context option - * Parsetree.expression_desc option + * Parsetree.expression option + | Function_arity_type_clash of + { syntactic_arity : int; + type_constraint : type_expr; + trace : Errortrace.unification_error; + } | Apply_non_function of { funct : Typedtree.expression; func_ty : type_expr; @@ -182,7 +192,7 @@ type error = | Virtual_class of Longident.t | Private_type of type_expr | Private_label of Longident.t * type_expr - | Private_constructor of constructor_description * type_expr + | Private_constructor of Data_types.constructor_description * type_expr | Unbound_instance_variable of string * string list | Instance_variable_not_mutable of string | Not_subtype of Errortrace.Subtype.error @@ -205,17 +215,22 @@ type error = | Modules_not_allowed | Cannot_infer_signature | Not_a_packed_module of type_expr - | Unexpected_existential of existential_restriction * string * string list + | Unexpected_existential of existential_restriction * string | Invalid_interval | Invalid_for_loop_index | No_value_clauses | Exception_pattern_disallowed | Mixed_value_and_exception_patterns_under_guard + | Effect_pattern_below_toplevel + | Invalid_continuation_pattern | Inlined_record_escape | Inlined_record_expected | Unrefuted_pattern of Typedtree.pattern | Invalid_extension_constructor_payload | Not_an_extension_constructor + | Invalid_atomic_loc_payload + | Label_not_atomic of Longident.t + | Atomic_in_pattern of Longident.t | Literal_overflow of string | Unknown_literal of string * char | Illegal_letrec_pat @@ -225,9 +240,16 @@ type error = | Andop_type_clash of string * Errortrace.unification_error | Bindings_type_clash of Errortrace.unification_error | Unbound_existential of Ident.t list * type_expr + | Bind_existential of existential_binding * Ident.t * type_expr | Missing_type_constraint | Wrong_expected_kind of wrong_kind_sort * wrong_kind_context * type_expr | Expr_not_a_record_type of type_expr + | Constructor_labeled_arg + | Partial_tuple_pattern_bad_type + | Extra_tuple_label of string option * type_expr + | Missing_tuple_label of string option * type_expr + | Repeated_tuple_exp_label of string + | Repeated_tuple_pat_label of string exception Error of Location.t * Env.t * error exception Error_forward of Location.error @@ -253,12 +275,13 @@ val type_object: (Env.t -> Location.t -> Parsetree.class_structure -> Typedtree.class_structure * string list) ref val type_package: - (Env.t -> Parsetree.module_expr -> Path.t -> (Longident.t * type_expr) list -> - Typedtree.module_expr * (Longident.t * type_expr) list) ref + (Env.t -> Parsetree.module_expr -> package -> + Typedtree.module_expr * package) ref val constant: Parsetree.constant -> (Asttypes.constant, error) result -val check_recursive_bindings : Env.t -> Typedtree.value_binding list -> unit +val annotate_recursive_bindings : + Env.t -> Typedtree.value_binding list -> Typedtree.value_binding list val check_recursive_class_bindings : Env.t -> Ident.t list -> Typedtree.class_expr list -> unit diff --git a/ocamlmerlin_mlx/ocaml/typing/typedecl.ml b/ocamlmerlin_mlx/ocaml/typing/typedecl.ml index c3820f3..e3f6a22 100644 --- a/ocamlmerlin_mlx/ocaml/typing/typedecl.ml +++ b/ocamlmerlin_mlx/ocaml/typing/typedecl.ml @@ -75,6 +75,7 @@ type error = | Boxed_and_unboxed | Nonrec_gadt | Invalid_private_row_declaration of type_expr + | Atomic_field_must_be_mutable of string open Typedtree @@ -91,19 +92,19 @@ let get_unboxed_from_attributes sdecl = (* Enter all declared types in the environment as abstract types *) -let add_type ~long_path ~check id decl env = +let add_type ~long_path ~check ?shape id decl env = Builtin_attributes.warning_scope ~ppwarning:false decl.type_attributes (fun () -> match long_path with - | true -> Env.add_type_long_path ~check id decl env - | false -> Env.add_type ~check id decl env) + | true -> Env.add_type_long_path ~check ?shape id decl env + | false -> Env.add_type ~check ?shape id decl env) (* Add a dummy type declaration to the environment, with the given arity. The [type_kind] is [Type_abstract], but there is a generic [type_manifest] for abbreviations, to allow polymorphic expansion, except if - [abstract_abbrevs] is [true]. + [abstract_abbrevs] is given along with a reason for not allowing expansion. This function is only used in [transl_type_decl]. *) -let enter_type ~abstract_abbrevs rec_flag env sdecl (id, uid) = +let enter_type ?abstract_abbrevs rec_flag env sdecl (id, uid) = let needed = match rec_flag with | Asttypes.Nonrecursive -> @@ -119,17 +120,19 @@ let enter_type ~abstract_abbrevs rec_flag env sdecl (id, uid) = in let arity = List.length sdecl.ptype_params in if not needed then env else - let type_manifest = match sdecl.ptype_manifest, abstract_abbrevs with - | None, _ | Some _, true -> None - | Some _, false -> Some(Ctype.newvar ()) + let abstract_source, type_manifest = + match sdecl.ptype_manifest, abstract_abbrevs with + | None, _ -> Definition, None + | Some _, None -> Definition, Some (Ctype.newvar ()) + | Some _, Some reason -> reason, None in let decl = { type_params = List.map (fun _ -> Btype.newgenvar ()) sdecl.ptype_params; type_arity = arity; - type_kind = Type_abstract; + type_kind = Type_abstract abstract_source; type_private = sdecl.ptype_private; - type_manifest; + type_manifest = type_manifest; type_variance = Variance.unknown_signature ~injective:false ~arity; type_separability = Types.Separability.default_signature ~arity; type_is_newtype = false; @@ -143,16 +146,6 @@ let enter_type ~abstract_abbrevs rec_flag env sdecl (id, uid) = in add_type ~long_path:true ~check:true id decl env -let update_type temp_env env id loc = - let path = Path.Pident id in - let decl = Env.find_type path temp_env in - match decl.type_manifest with None -> () - | Some ty -> - let params = List.map (fun _ -> Ctype.newvar ()) decl.type_params in - try Ctype.unify env (Ctype.newconstr path params) ty - with Ctype.Unify err -> - raise (Error(loc, Type_clash (env, err))) - (* Determine if a type's values are represented by floats at run-time. *) let is_float env ty = match Typedecl_unboxed.get_unboxed_type_representation env ty with @@ -240,8 +233,15 @@ let transl_labels env univars closed lbls = (fun () -> let arg = Ast_helper.Typ.force_poly arg in let cty = transl_simple_type env ?univars ~closed arg in + let is_atomic = Builtin_attributes.has_atomic attrs in + let is_mutable = match mut with Mutable -> true | Immutable -> false in + if is_atomic && not is_mutable then + raise (Error (loc, Atomic_field_must_be_mutable name.txt)); {ld_id = Ident.create_local name.txt; - ld_name = name; ld_mutable = mut; + ld_name = name; + ld_uid = Uid.mk ~current_unit:(Env.get_current_unit ()); + ld_mutable = mut; + ld_atomic = if is_atomic then Atomic else Nonatomic; ld_type = cty; ld_loc = loc; ld_attributes = attrs} ) in @@ -251,14 +251,13 @@ let transl_labels env univars closed lbls = (fun ld -> let ty = ld.ld_type.ctyp_type in let ty = match get_desc ty with Tpoly(t,[]) -> t | _ -> ty in - let ld_uid = Uid.mk ~current_unit:(Env.get_unit_name ()) in - Env.register_uid ld_uid ld.ld_loc; {Types.ld_id = ld.ld_id; ld_mutable = ld.ld_mutable; + ld_atomic = ld.ld_atomic; ld_type = ty; ld_loc = ld.ld_loc; ld_attributes = ld.ld_attributes; - ld_uid; + ld_uid = ld.ld_uid; } ) lbls in @@ -287,8 +286,8 @@ let make_constructor env loc type_path type_params svars sargs sret_type = (* narrow and widen are now invoked through wrap_type_variable_scope *) TyVarEnv.with_local_scope begin fun () -> let closed = svars <> [] in - let targs, tret_type, args, ret_type, _univars = - Ctype.with_local_level_if closed begin fun () -> + let targs, tret_type, args, ret_type, univars = + Ctype.with_local_level_generalize_if closed begin fun () -> TyVarEnv.reset (); let univar_list = TyVarEnv.make_poly_univars (List.map (fun v -> v.txt) svars) in @@ -317,21 +316,39 @@ let make_constructor env loc type_path type_params svars sargs sret_type = end; (targs, tret_type, args, ret_type, univar_list) end - ~post: begin fun (_, _, args, ret_type, univars) -> - Btype.iter_type_expr_cstr_args Ctype.generalize args; - Ctype.generalize ret_type; - let _vars = TyVarEnv.instance_poly_univars env loc univars in - let set_level t = Ctype.enforce_current_level env t in - Btype.iter_type_expr_cstr_args set_level args; - set_level ret_type; - end in + if closed then begin + ignore (TyVarEnv.instance_poly_univars env loc univars); + let set_level t = Ctype.enforce_current_level env t in + Btype.iter_type_expr_cstr_args set_level args; + set_level ret_type + end; targs, Some tret_type, args, Some ret_type end + +let shape_map_labels = + List.fold_left (fun map { ld_id; ld_uid; _} -> + Shape.Map.add_label map ld_id ld_uid) + Shape.Map.empty + +let shape_map_cstrs = + List.fold_left (fun map { cd_id; cd_uid; cd_args; _ } -> + let cstr_shape_map = + let label_decls = + match cd_args with + | Cstr_tuple _ -> [] + | Cstr_record ldecls -> ldecls + in + shape_map_labels label_decls + in + Shape.Map.add_constr map cd_id + @@ Shape.str ~uid:cd_uid cstr_shape_map) + (Shape.Map.empty) + + let transl_declaration env sdecl (id, uid) = (* Bind type parameters *) - Ctype.with_local_level begin fun () -> TyVarEnv.reset(); let tparams = make_params env sdecl.ptype_params in let params = List.map (fun (cty, _) -> cty.ctyp_type) tparams in @@ -353,7 +370,7 @@ let transl_declaration env sdecl (id, uid) = | [] -> bad "it has no fields" | _::_::_ -> bad "it has more than one field" | [{pld_mutable = Mutable}] -> bad "it is mutable" - | [{pld_mutable = Immutable}] -> () + | [{pld_mutable = Immutable; _}] -> () end | Ptype_variant constructors -> begin match constructors with | [] -> bad "it has no constructor" @@ -387,7 +404,7 @@ let transl_declaration env sdecl (id, uid) = in let (tkind, kind) = match sdecl.ptype_kind with - | Ptype_abstract -> Ttype_abstract, Type_abstract + | Ptype_abstract -> Ttype_abstract, Type_abstract Definition | Ptype_variant scstrs -> if List.exists (fun cstr -> cstr.pcd_res <> None) scstrs then begin match cstrs with @@ -415,6 +432,7 @@ let transl_declaration env sdecl (id, uid) = let tcstr = { cd_id = name; cd_name = scstr.pcd_name; + cd_uid = Uid.mk ~current_unit:(Env.get_current_unit ()); cd_vars = scstr.pcd_vars; cd_args = targs; cd_res = tret_type; @@ -422,14 +440,12 @@ let transl_declaration env sdecl (id, uid) = cd_attributes = scstr.pcd_attributes } in let cstr = - let cd_uid = Uid.mk ~current_unit:(Env.get_unit_name ()) in - Env.register_uid cd_uid scstr.pcd_loc; { Types.cd_id = name; cd_args = args; cd_res = ret_type; cd_loc = scstr.pcd_loc; cd_attributes = scstr.pcd_attributes; - cd_uid; } + cd_uid = tcstr.cd_uid; } in tcstr, cstr in @@ -443,14 +459,21 @@ let transl_declaration env sdecl (id, uid) = | Ptype_record lbls -> let lbls, lbls' = transl_labels env None true lbls in let rep = - if unbox then Record_unboxed false - else if List.for_all (fun l -> is_float env l.Types.ld_type) lbls' - then Record_float - else Record_regular + if unbox then ( + Record_unboxed false + ) else if + List.for_all (fun (l : Types.label_declaration) -> + is_float env l.ld_type && l.ld_atomic = Nonatomic + ) lbls' + then + Record_float + else + Record_regular in Ttype_record lbls, Type_record(lbls', rep) | Ptype_open -> Ttype_open, Type_open in + begin let (tman, man) = match sdecl.ptype_manifest with None -> None, None | Some sty -> @@ -493,28 +516,28 @@ let transl_declaration env sdecl (id, uid) = in set_private_row env sdecl.ptype_loc p decl end; - { - typ_id = id; - typ_name = sdecl.ptype_name; - typ_params = tparams; - typ_type = decl; - typ_cstrs = cstrs; - typ_loc = sdecl.ptype_loc; - typ_manifest = tman; - typ_kind = tkind; - typ_private = sdecl.ptype_private; - typ_attributes = sdecl.ptype_attributes; - } - end - -(* Generalize a type declaration *) - -let generalize_decl decl = - List.iter Ctype.generalize decl.type_params; - Btype.iter_type_expr_kind Ctype.generalize decl.type_kind; - begin match decl.type_manifest with - | None -> () - | Some ty -> Ctype.generalize ty + let decl = + { + typ_id = id; + typ_name = sdecl.ptype_name; + typ_params = tparams; + typ_type = decl; + typ_cstrs = cstrs; + typ_loc = sdecl.ptype_loc; + typ_manifest = tman; + typ_kind = tkind; + typ_private = sdecl.ptype_private; + typ_attributes = sdecl.ptype_attributes; + } + in + let typ_shape = + let uid = decl.typ_type.type_uid in + match decl.typ_kind with + | Ttype_variant cstrs -> Shape.str ~uid (shape_map_cstrs cstrs) + | Ttype_record labels -> Shape.str ~uid (shape_map_labels labels) + | Ttype_abstract | Ttype_open -> Shape.leaf uid + in + decl, typ_shape end (* Check that all constraints are enforced *) @@ -543,7 +566,7 @@ let rec check_constraints_rec env loc visited ty = end; List.iter (check_constraints_rec env loc visited) args | Tpoly (ty, tl) -> - let _, ty = Ctype.instance_poly false tl ty in + let _, ty = Ctype.instance_poly ~fixed:false tl ty in check_constraints_rec env loc visited ty | _ -> Btype.iter_type_expr (check_constraints_rec env loc visited) ty @@ -567,7 +590,7 @@ let check_constraints env sdecl (_, decl) = (fun (sty, _) ty -> check_constraints_rec env sty.ptyp_loc visited ty) sdecl.ptype_params decl.type_params; begin match decl.type_kind with - | Type_abstract -> () + | Type_abstract _ -> () | Type_variant (l, _rep) -> let find_pl = function Ptype_variant pl -> pl @@ -640,13 +663,21 @@ let check_coherence env loc dpath decl = | exception Ctype.Equality err -> Some (Includecore.Constraint err) | () -> + let subst = + Subst.Unsafe.add_type_path dpath path Subst.identity in + let decl = + match Subst.Unsafe.type_declaration subst decl with + | Ok decl -> decl + | Error (Fcm_type_substituted_away _) -> + (* no module type substitution in [subst] *) + assert false + in Includecore.type_declarations ~loc ~equality:true env ~mark:true (Path.last path) decl' dpath - (Subst.type_declaration - (Subst.add_type_path dpath path Subst.identity) decl) + decl end in if err <> None then @@ -667,7 +698,7 @@ let check_abbrev env sdecl (id, decl) = We want to guarantee that all cycles within OCaml types are "guarded". - More precisly, we consider a reachability relation + More precisely, we consider a reachability relation "[t] is reachable [guarded|unguarded] from [u]" defined as follows: @@ -880,15 +911,12 @@ let check_well_founded_manifest ~abs_env env loc path decl = (we don't have an example at hand where it is necessary), but we are doing it anyway out of caution. *) -let check_well_founded_decl ~abs_env env loc path decl to_check = +let check_well_founded_decl ~abs_env env loc path decl to_check = let open Btype in (* We iterate on all subexpressions of the declaration to check "in depth" that no ill-founded type exists. *) - let it = - let checked = - (* [checked] remembers the types that the iterator already - checked, to avoid looping on cyclic types. *) - ref TypeSet.empty in + with_type_mark begin fun mark -> + let super = type_iterators mark in let visited = (* [visited] remembers the inner visits performed by [check_well_founded] on each type expression reachable from @@ -896,14 +924,14 @@ let check_well_founded_decl ~abs_env env loc path decl to_check = [check_well_founded] work when invoked on two parts of the type declaration that have common subexpressions. *) ref TypeMap.empty in - {type_iterators with it_type_expr = - (fun self ty -> - if TypeSet.mem ty !checked then () else begin + let it = + {super with it_do_type_expr = + (fun self ty -> check_well_founded ~abs_env env loc path to_check visited ty; - checked := TypeSet.add ty !checked; - self.it_do_type_expr self ty - end)} in - it.it_type_declaration it (Ctype.generic_instance_declaration decl) + super.it_do_type_expr self ty + )} in + it.it_type_declaration it (Ctype.generic_instance_declaration decl) + end (* Check for non-regular abbreviations; an abbreviation [type 'a t = ...] is non-regular if the expansion of [...] @@ -911,10 +939,10 @@ let check_well_founded_decl ~abs_env env loc path decl to_check = Note: in the case of a constrained type definition [type 'a t = ... constraint 'a = ...], we require - that all instances in [...] be equal to the constrainted type. + that all instances in [...] be equal to the constrained type. *) -let check_regularity ~orig_env env loc path decl to_check = +let check_regularity ~abs_env env loc path decl to_check = (* to_check is true for potentially mutually recursive paths. (path, decl) is the type declaration to be checked. *) @@ -928,7 +956,7 @@ let check_regularity ~orig_env env loc path decl to_check = match get_desc ty with | Tconstr(path', args', _) -> if Path.same path path' then begin - if not (Ctype.is_equal orig_env false args args') then + if not (Ctype.is_equal abs_env false args args') then raise (Error(loc, Non_regular { definition=path; @@ -950,9 +978,9 @@ let check_regularity ~orig_env env loc path decl to_check = let (params, body) = Ctype.instance_parameterized_type params0 body0 in begin - try List.iter2 (Ctype.unify orig_env) params args' + try List.iter2 (Ctype.unify abs_env) args' params with Ctype.Unify err -> - raise (Error(loc, Constraint_failed (orig_env, err))); + raise (Error(loc, Constraint_failed (abs_env, err))); end; check_regular path' args (path' :: prev_exp) (Expands_to (ty,body) :: trace) @@ -961,7 +989,8 @@ let check_regularity ~orig_env env loc path decl to_check = end; List.iter (check_subtype cpath args prev_exp trace ty) args' | Tpoly (ty, tl) -> - let (_, ty) = Ctype.instance_poly ~keep_names:true false tl ty in + let (_, ty) = + Ctype.instance_poly ~keep_names:true ~fixed:false tl ty in check_regular cpath args prev_exp trace ty | _ -> Btype.iter_type_expr @@ -981,10 +1010,10 @@ let check_regularity ~orig_env env loc path decl to_check = check_regular path args [] [] body) decl.type_manifest -let check_abbrev_regularity ~orig_env env id_loc_list to_check tdecl = +let check_abbrev_regularity ~abs_env env id_loc_list to_check tdecl = let decl = tdecl.typ_type in let id = tdecl.typ_id in - check_regularity ~orig_env env (List.assoc id id_loc_list) (Path.Pident id) + check_regularity ~abs_env env (List.assoc id id_loc_list) (Path.Pident id) decl to_check let check_duplicates sdecl_list = @@ -1020,13 +1049,13 @@ let check_duplicates sdecl_list = (* Force recursion to go through id for private types*) let name_recursion sdecl id decl = match decl with - | { type_kind = Type_abstract; + | { type_kind = Type_abstract _; type_manifest = Some ty; type_private = Private; } when is_fixed_type sdecl -> - let ty' = newty2 ~level:(get_level ty) (get_desc ty) in + let ty' = Btype.newty2 ~level:(get_level ty) (get_desc ty) in if Ctype.deep_occur ty ty' then let td = Tconstr(Path.Pident id, decl.type_params, ref Mnil) in - link_type ty (newty2 ~level:(get_level ty) td); + link_type ty (Btype.newty2 ~level:(get_level ty) td); {decl with type_manifest = Some ty'} else decl | _ -> decl @@ -1049,10 +1078,28 @@ let check_redefined_unit (td: Parsetree.type_declaration) = | _ -> () -let add_types_to_env decls env = - List.fold_right - (fun (id, decl) env -> add_type ~long_path:false ~check:true id decl env) - decls env +(* Update a temporary definition to share recursion *) +let update_type temp_env env id loc = + let path = Path.Pident id in + let decl = Env.find_type path temp_env in + match decl.type_manifest with None -> () + | Some ty -> + (* Since this function is called after generalizing declarations, + ty is at the generic level. Since we need to keep possible + sharings in recursive type definitions, unify without instantiating, + but generalize again after unification. *) + Ctype.with_local_level_generalize begin fun () -> + let params = List.map (fun _ -> Ctype.newvar ()) decl.type_params in + try Ctype.unify env (Ctype.newconstr path params) ty + with Ctype.Unify err -> + raise (Error(loc, Type_clash (env, err))) + end + +let add_types_to_env decls shapes env = + List.fold_right2 + (fun (id, decl) shape env -> + add_type ~long_path:false ~check:true ~shape id decl env) + decls shapes env (* Translate a set of type declarations, mutually recursive or not *) let transl_type_decl env rec_flag sdecl_list = @@ -1080,19 +1127,21 @@ let transl_type_decl env rec_flag sdecl_list = let ids_list = List.map (fun sdecl -> Ident.create_scoped ~scope sdecl.ptype_name.txt, - Uid.mk ~current_unit:(Env.get_unit_name ()) + Uid.mk ~current_unit:(Env.get_current_unit ()) ) sdecl_list in - let tdecls, decls, new_env = - Ctype.with_local_level_iter ~post:generalize_decl begin fun () -> + (* Translate declarations, using a temporary environment where abbreviations + expand to a generic type variable. After that, we check the coherence of + the translated declarations in the resulting new environment. *) + let tdecls, decls, shapes, temp_env, new_env = + Ctype.with_local_level_generalize begin fun () -> (* Enter types. *) let temp_env = - List.fold_left2 (enter_type ~abstract_abbrevs:false rec_flag) - env sdecl_list ids_list in + List.fold_left2 (enter_type rec_flag) env sdecl_list ids_list in (* Translate each declaration. *) let current_slot = ref None in let warn_unused = - Warnings.is_active (Warnings.Unused_type_declaration "") in + Warnings.(is_active (Unused_type_declaration ("", Declaration))) in let ids_slots (id, _uid as ids) = match rec_flag with | Asttypes.Recursive when warn_unused -> @@ -1121,23 +1170,17 @@ let transl_type_decl env rec_flag sdecl_list = in let tdecls = List.map2 transl_declaration sdecl_list (List.map ids_slots ids_list) in - let decls = - List.map (fun tdecl -> (tdecl.typ_id, tdecl.typ_type)) tdecls in + let decls, shapes = + List.map (fun (tdecl, shape) -> + (tdecl.typ_id, tdecl.typ_type), shape) tdecls + |> List.split + in current_slot := None; (* Check for duplicates *) check_duplicates sdecl_list; (* Build the final env. *) - let new_env = add_types_to_env decls env in - (* Update stubs *) - begin match rec_flag with - | Asttypes.Nonrecursive -> () - | Asttypes.Recursive -> - List.iter2 - (fun (id, _) sdecl -> - update_type temp_env new_env id sdecl.ptype_loc) - ids_list sdecl_list - end; - ((tdecls, decls, new_env), List.map snd decls) + let new_env = add_types_to_env decls shapes env in + (tdecls, decls, shapes, temp_env, new_env) end in (* Check for ill-formed abbrevs *) @@ -1145,13 +1188,13 @@ let transl_type_decl env rec_flag sdecl_list = List.map2 (fun (id, _) sdecl -> (id, sdecl.ptype_loc)) ids_list sdecl_list in - (* Error messages cannot use the new environment, as this might result in - non-termination. Instead we use a completely abstract version of the - temporary environment, giving a reason for why abbreviations cannot be - expanded (#12645, #12649) *) + (* [check_abbrev_regularity] and error messages cannot use the new + environment, as this might result in non-termination. Instead we use a + completely abstract version of the temporary environment, giving a reason + for why abbreviations cannot be expanded (#12334, #12368) *) let abs_env = List.fold_left2 - (enter_type ~abstract_abbrevs:true rec_flag) + (enter_type ~abstract_abbrevs:Rec_check_regularity rec_flag) env sdecl_list ids_list in List.iter (fun (id, decl) -> check_well_founded_manifest ~abs_env new_env (List.assoc id id_loc_list) @@ -1164,11 +1207,21 @@ let transl_type_decl env rec_flag sdecl_list = (Path.Pident id) decl to_check) decls; - List.iter - (check_abbrev_regularity ~orig_env:env new_env id_loc_list to_check) tdecls; + List.iter (fun (tdecl, _shape) -> + check_abbrev_regularity ~abs_env new_env id_loc_list to_check tdecl) + tdecls; + (* Update temporary definitions (for well-founded recursive types) *) + begin match rec_flag with + | Asttypes.Nonrecursive -> () + | Asttypes.Recursive -> + List.iter2 + (fun (id, _) sdecl -> + update_type temp_env new_env id sdecl.ptype_loc) + ids_list sdecl_list + end; (* Check that all type variables are closed *) List.iter2 - (fun sdecl tdecl -> + (fun sdecl (tdecl, _shape) -> let decl = tdecl.typ_type in match Ctype.closed_type_decl decl with Some ty -> @@ -1195,18 +1248,18 @@ let transl_type_decl env rec_flag sdecl_list = raise (Error (loc, Separability err)) in (* Compute the final environment with variance and immediacy *) - let final_env = add_types_to_env decls env in + let final_env = add_types_to_env decls shapes env in (* Check re-exportation *) List.iter2 (check_abbrev final_env) sdecl_list decls; (* Keep original declaration *) let final_decls = List.map2 - (fun tdecl (_id2, decl) -> + (fun (tdecl, _shape) (_id2, decl) -> { tdecl with typ_type = decl } ) tdecls decls in (* Done *) - (final_decls, final_env) + (final_decls, final_env, shapes) (* Translating type extensions *) @@ -1246,9 +1299,7 @@ let transl_extension_constructor ~scope env type_path type_params end; (* Remove "_" names from parameters used in the constructor *) if not cdescr.cstr_generalized then begin - let vars = - Ctype.free_variables (Btype.newgenty (Ttuple args)) - in + let vars = Ctype.free_variables_list args in List.iter (fun ty -> if get_desc ty = Tvar (Some "_") @@ -1257,12 +1308,13 @@ let transl_extension_constructor ~scope env type_path type_params typext_params end; (* Ensure that constructor's type matches the type being extended *) - let cstr_type_path = Btype.cstr_type_path cdescr in - let cstr_type_params = (Env.find_type cstr_type_path env).type_params in + let cstr_res_type_path = Data_types.cstr_res_type_path cdescr in + let cstr_res_type_params = + (Env.find_type cstr_res_type_path env).type_params in let cstr_types = (Btype.newgenty - (Tconstr(cstr_type_path, cstr_type_params, ref Mnil))) - :: cstr_type_params + (Tconstr(cstr_res_type_path, cstr_res_type_params, ref Mnil))) + :: cstr_res_type_params in let ext_types = (Btype.newgenty @@ -1271,7 +1323,7 @@ let transl_extension_constructor ~scope env type_path type_params in if not (Ctype.is_equal env true cstr_types ext_types) then raise (Error(lid.loc, - Rebind_mismatch(lid.txt, cstr_type_path, type_path))); + Rebind_mismatch(lid.txt, cstr_res_type_path, type_path))); (* Disallow rebinding private constructors to non-private *) begin match cdescr.cstr_private, priv with @@ -1314,15 +1366,25 @@ let transl_extension_constructor ~scope env type_path type_params ext_private = priv; Types.ext_loc = sext.pext_loc; Types.ext_attributes = sext.pext_attributes; - ext_uid = Uid.mk ~current_unit:(Env.get_unit_name ()); + ext_uid = Uid.mk ~current_unit:(Env.get_current_unit ()); } in + let ext_cstrs = { ext_id = id; ext_name = sext.pext_name; ext_type = ext; ext_kind = kind; Typedtree.ext_loc = sext.pext_loc; Typedtree.ext_attributes = sext.pext_attributes; } + in + let shape = + let map = match ext_cstrs.ext_kind with + | Text_decl (_, Cstr_record lbls, _) -> shape_map_labels lbls + | _ -> Shape.Map.empty + in + Shape.str ~uid:ext_cstrs.ext_type.ext_uid map + in + ext_cstrs, shape let transl_extension_constructor ~scope env type_path type_params typext_params priv sext = @@ -1384,7 +1446,7 @@ let transl_type_extension extend env loc styext = (* Note: it would be incorrect to call [create_scope] *after* [TyVarEnv.reset] or after [with_local_level] (see #10010). *) let scope = Ctype.create_scope () in - Ctype.with_local_level begin fun () -> + Ctype.with_local_level_generalize begin fun () -> TyVarEnv.reset(); let ttype_params = make_params env styext.ptyext_params in let type_params = List.map (fun (cty, _) -> cty.ctyp_type) ttype_params in @@ -1398,19 +1460,10 @@ let transl_type_extension extend env loc styext = in (ttype_params, type_params, constructors) end - ~post: begin fun (_, type_params, constructors) -> - (* Generalize types *) - List.iter Ctype.generalize type_params; - List.iter - (fun ext -> - Btype.iter_type_expr_cstr_args Ctype.generalize ext.ext_type.ext_args; - Option.iter Ctype.generalize ext.ext_type.ext_ret_type) - constructors; - end in (* Check that all type variables are closed *) List.iter - (fun ext -> + (fun (ext, _shape) -> match Ctype.closed_extension_constructor ext.ext_type with Some ty -> raise(Error(ext.ext_loc, Unbound_type_var_ext(ty, ext.ext_type))) @@ -1418,7 +1471,7 @@ let transl_type_extension extend env loc styext = constructors; (* Check variances are correct *) List.iter - (fun ext-> + (fun (ext, _shape) -> (* Note that [loc] here is distinct from [type_decl.type_loc], which makes the [loc] parameter to this function useful. [loc] is the location of the extension, while [type_decl] points to the original @@ -1431,11 +1484,13 @@ let transl_type_extension extend env loc styext = (* Add extension constructors to the environment *) let newenv = List.fold_left - (fun env ext -> + (fun env (ext, shape) -> let rebind = is_rebind ext in - Env.add_extension ~check:true ~rebind ext.ext_id ext.ext_type env) + Env.add_extension ~check:true ~shape ~rebind + ext.ext_id ext.ext_type env) env constructors in + let constructors, shapes = List.split constructors in let tyext = { tyext_path = type_path; tyext_txt = styext.ptyext_path; @@ -1445,24 +1500,20 @@ let transl_type_extension extend env loc styext = tyext_loc = styext.ptyext_loc; tyext_attributes = styext.ptyext_attributes; } in - (tyext, newenv) + (tyext, newenv, shapes) let transl_type_extension extend env loc styext = Builtin_attributes.warning_scope styext.ptyext_attributes (fun () -> transl_type_extension extend env loc styext) let transl_exception env sext = - let ext = + let ext, shape = let scope = Ctype.create_scope () in - Ctype.with_local_level + Ctype.with_local_level_generalize (fun () -> TyVarEnv.reset(); transl_extension_constructor ~scope env Predef.path_exn [] [] Asttypes.Public sext) - ~post: begin fun ext -> - Btype.iter_type_expr_cstr_args Ctype.generalize ext.ext_type.ext_args; - Option.iter Ctype.generalize ext.ext_type.ext_ret_type; - end in (* Check that all type variables are closed *) begin match Ctype.closed_extension_constructor ext.ext_type with @@ -1472,13 +1523,12 @@ let transl_exception env sext = end; let rebind = is_rebind ext in let newenv = - Env.add_extension ~check:true ~rebind ext.ext_id ext.ext_type env + Env.add_extension ~check:true ~shape ~rebind ext.ext_id ext.ext_type env in - ext, newenv + ext, newenv, shape let transl_type_exception env t = - Builtin_attributes.check_no_alert t.ptyexn_attributes; - let contructor, newenv = + let contructor, newenv, shape = Builtin_attributes.warning_scope t.ptyexn_attributes (fun () -> transl_exception env t.ptyexn_constructor @@ -1486,7 +1536,7 @@ let transl_type_exception env t = in {tyexn_constructor = contructor; tyexn_loc = t.ptyexn_loc; - tyexn_attributes = t.ptyexn_attributes}, newenv + tyexn_attributes = t.ptyexn_attributes}, newenv, shape type native_repr_attribute = @@ -1495,8 +1545,8 @@ type native_repr_attribute = let get_native_repr_attribute attrs ~global_repr = match - Attr_helper.get_no_payload_attribute ["unboxed"; "ocaml.unboxed"] attrs, - Attr_helper.get_no_payload_attribute ["untagged"; "ocaml.untagged"] attrs, + Attr_helper.get_no_payload_attribute "unboxed" attrs, + Attr_helper.get_no_payload_attribute "untagged" attrs, global_repr with | None, None, None -> Native_repr_attr_absent @@ -1509,8 +1559,9 @@ let get_native_repr_attribute attrs ~global_repr = let native_repr_of_type env kind ty = match kind, get_desc (Ctype.expand_head_opt env ty) with - | Untagged, Tconstr (path, _, _) when Path.same path Predef.path_int -> - Some Untagged_int + | Untagged, Tconstr (_, _, _) when + Typeopt.maybe_pointer_type env ty = Lambda.Immediate -> + Some Untagged_immediate | Unboxed, Tconstr (path, _, _) when Path.same path Predef.path_float -> Some Unboxed_float | Unboxed, Tconstr (path, _, _) when Path.same path Predef.path_int32 -> @@ -1586,7 +1637,7 @@ let check_unboxable env loc ty = let all_unboxable_types = Btype.fold_type_expr check_type Path.Set.empty ty in Path.Set.fold (fun p () -> - let p = Printtyp.shorten_type_path env p in + let p = Out_type.shorten_type_path env p in Location.prerr_warning loc (Warnings.Unboxable_type_in_prim_decl (Path.name p)) ) @@ -1602,7 +1653,7 @@ let transl_value_decl env loc valdecl = [] when Env.is_in_signature env -> { val_type = ty; val_kind = Val_reg; Types.val_loc = loc; val_attributes = valdecl.pval_attributes; - val_uid = Uid.mk ~current_unit:(Env.get_unit_name ()); + val_uid = Uid.mk ~current_unit:(Env.get_current_unit ()); } | [] -> raise (Error(valdecl.pval_loc, Val_in_structure)) @@ -1634,7 +1685,7 @@ let transl_value_decl env loc valdecl = check_unboxable env loc ty; { val_type = ty; val_kind = Val_prim prim; Types.val_loc = loc; val_attributes = valdecl.pval_attributes; - val_uid = Uid.mk ~current_unit:(Env.get_unit_name ()); + val_uid = Uid.mk ~current_unit:(Env.get_current_unit ()); } in let (id, newenv) = @@ -1672,7 +1723,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; - Ctype.with_local_level begin fun () -> + Ctype.with_local_level_generalize begin fun () -> TyVarEnv.reset(); (* In the first part of this function, we typecheck the syntactic declaration [sdecl] in the outer environment [outer_env]. *) @@ -1694,10 +1745,10 @@ let transl_with_constraint id ?fixed_row_path ~sig_env ~sig_decl ~outer_env in let no_row = not (is_fixed_type sdecl) in let (tman, man) = match sdecl.ptype_manifest with - None -> None, None + None -> Misc.fatal_error "Typedecl.transl_with_constraint: no manifest" | Some sty -> let cty = transl_simple_type env ~closed:no_row sty in - Some cty, Some cty.ctyp_type + cty, cty.ctyp_type in (* In the second part, we check the consistency between the two declarations and compute a "merged" declaration; we now need to @@ -1721,26 +1772,27 @@ let transl_with_constraint id ?fixed_row_path ~sig_env ~sig_decl ~outer_env with Ctype.Unify err -> raise(Error(loc, Inconsistent_constraint (env, err))) ) constraints; + let sig_decl_abstract = Btype.type_kind_is_abstract sig_decl in let priv = if sdecl.ptype_private = Private then Private else - if arity_ok && sig_decl.type_kind <> Type_abstract + if arity_ok && not sig_decl_abstract then sig_decl.type_private else sdecl.ptype_private in - if arity_ok && sig_decl.type_kind <> Type_abstract + if arity_ok && not sig_decl_abstract && sdecl.ptype_private = Private then Location.deprecated loc "spurious use of private"; let type_kind, type_unboxed_default = - if arity_ok && man <> None then + if arity_ok then sig_decl.type_kind, sig_decl.type_unboxed_default else - Type_abstract, false + Type_abstract Definition, false in let new_sig_decl = { type_params = params; type_arity = arity; type_kind; type_private = priv; - type_manifest = man; + type_manifest = Some man; type_variance = []; type_separability = Types.Separability.default_signature ~arity; type_is_newtype = false; @@ -1749,7 +1801,7 @@ let transl_with_constraint id ?fixed_row_path ~sig_env ~sig_decl ~outer_env type_attributes = sdecl.ptype_attributes; type_immediate = Unknown; type_unboxed_default; - type_uid = Uid.mk ~current_unit:(Env.get_unit_name ()); + type_uid = Uid.mk ~current_unit:(Env.get_current_unit ()); } in Option.iter (fun p -> set_private_row env sdecl.ptype_loc p new_sig_decl) @@ -1800,23 +1852,49 @@ let transl_with_constraint id ?fixed_row_path ~sig_env ~sig_decl ~outer_env typ_type = new_sig_decl; typ_cstrs = constraints; typ_loc = loc; - typ_manifest = tman; + typ_manifest = Some tman; typ_kind = Ttype_abstract; typ_private = sdecl.ptype_private; typ_attributes = sdecl.ptype_attributes; } end - ~post:(fun ttyp -> generalize_decl ttyp.typ_type) + +(* A simplified version of [transl_with_constraint], for the case of packages. + Package constraints are much simpler than normal with type constraints (e.g., + they can not have parameters and can only update abstract types.) *) +let transl_package_constraint ~loc env ty = + let new_sig_decl = + { type_params = []; + type_arity = 0; + type_kind = Type_abstract Definition; + type_private = Public; + type_manifest = Some ty; + type_variance = []; + type_separability = []; + type_is_newtype = false; + type_expansion_scope = Btype.lowest_level; + type_loc = loc; + type_attributes = []; + type_immediate = Unknown; + type_unboxed_default = false; + type_uid = Uid.mk ~current_unit:(Env.get_current_unit ()) + } + in + let new_type_immediate = + (* Typedecl_immediacy.compute_decl never raises *) + Typedecl_immediacy.compute_decl env new_sig_decl + in + { new_sig_decl with type_immediate = new_type_immediate } (* Approximate a type declaration: just make all types abstract *) let abstract_type_decl ~injective arity = let rec make_params n = if n <= 0 then [] else Ctype.newvar() :: make_params (n-1) in - Ctype.with_local_level ~post:generalize_decl begin fun () -> + Ctype.with_local_level_generalize begin fun () -> { type_params = make_params arity; type_arity = arity; - type_kind = Type_abstract; + type_kind = Type_abstract Definition; type_private = Public; type_manifest = None; type_variance = Variance.unknown_signature ~injective ~arity; @@ -1848,32 +1926,33 @@ let check_recmod_typedecl env loc recmod_ids path decl = (path, decl) is the type declaration to be checked. *) let to_check path = Path.exists_free recmod_ids path in check_well_founded_decl ~abs_env:env env loc path decl to_check; - check_regularity ~orig_env:env env loc path decl to_check; - (* additionally check coherece, as one might build an incoherent signature, + check_regularity ~abs_env:env env loc path decl to_check; + (* additional coherence check, as one might build an incoherent signature, and use it to build an incoherent module, cf. #7851 *) check_coherence env loc path decl (**** Error report ****) -open Format +open Format_doc +module Style = Misc.Style let explain_unbound_gen ppf tv tl typ kwd pr = try let ti = List.find (fun ti -> Ctype.deep_occur tv (typ ti)) tl in let ty0 = (* Hack to force aliasing when needed *) Btype.newgenty (Tobject(tv, ref None)) in - Printtyp.prepare_for_printing [typ ti; ty0]; + Out_type.prepare_for_printing [typ ti; ty0]; fprintf ppf ".@ @[In %s@ %a@;<1 -2>the variable %a is unbound@]" - kwd pr ti Printtyp.prepared_type_expr tv - (* kwd pr ti Printtyp.prepared_type_expr tv *) + kwd (Style.as_inline_code pr) ti + (Style.as_inline_code Out_type.prepared_type_expr) tv with Not_found -> () let explain_unbound ppf tv tl typ kwd lab = explain_unbound_gen ppf tv tl typ kwd (fun ppf ti -> - fprintf ppf "%s%a" (lab ti) Printtyp.prepared_type_expr (typ ti) + fprintf ppf "%s%a" (lab ti) Out_type.prepared_type_expr (typ ti) ) let explain_unbound_single ppf tv ty = @@ -1891,7 +1970,8 @@ let explain_unbound_single ppf tv ty = (fun (_l,f) -> match row_field_repr f with Rpresent (Some t) -> t | Reither (_,[t],_) -> t - | Reither (_,tl,_) -> Btype.newgenty (Ttuple tl) + | Reither (_,tl,_) -> + Btype.newgenty (Ttuple (List.map (fun e -> None, e) tl)) | _ -> Btype.newgenty (Ttuple[])) "case" (fun (lab,_) -> "`" ^ lab ^ " of ") | _ -> trivial ty @@ -1915,7 +1995,7 @@ module Reaching_path = struct | [] -> [] in simplify path - (* See Printtyp.add_type_to_preparation. + (* See Out_type.add_type_to_preparation. Note: it is better to call this after [simplify], otherwise some type variable names may be used for types that are removed @@ -1924,296 +2004,364 @@ module Reaching_path = struct let add_to_preparation path = List.iter (function | Contains (ty1, ty2) | Expands_to (ty1, ty2) -> - List.iter Printtyp.add_type_to_preparation [ty1; ty2] + List.iter Out_type.add_type_to_preparation [ty1; ty2] ) path + module Fmt = Format_doc + let pp ppf reaching_path = let pp_step ppf = function | Expands_to (ty, body) -> - Format.fprintf ppf "%a = %a" - Printtyp.prepared_type_expr ty - Printtyp.prepared_type_expr body + Fmt.fprintf ppf "%a = %a" + (Style.as_inline_code Out_type.prepared_type_expr) ty + (Style.as_inline_code Out_type.prepared_type_expr) body | Contains (outer, inner) -> - Format.fprintf ppf "%a contains %a" - Printtyp.prepared_type_expr outer - Printtyp.prepared_type_expr inner + Fmt.fprintf ppf "%a contains %a" + (Style.as_inline_code Out_type.prepared_type_expr) outer + (Style.as_inline_code Out_type.prepared_type_expr) inner in - let comma ppf () = Format.fprintf ppf ",@ " in - Format.(pp_print_list ~pp_sep:comma pp_step) ppf reaching_path + Fmt.(pp_print_list ~pp_sep:comma) pp_step ppf reaching_path let pp_colon ppf path = - Format.fprintf ppf ":@;<1 2>@[%a@]" - pp path + Fmt.fprintf ppf ":@\n @[%a@]" pp path end -let report_error ppf = function +let quoted_out_type ppf ty = Style.as_inline_code !Oprint.out_type ppf ty +let quoted_type ppf ty = Style.as_inline_code Printtyp.Doc.type_expr ppf ty +let quoted_constr = Style.as_inline_code Pprintast.Doc.constr + +module Printtyp = Printtyp.Doc + +let explain_unbounded ty decl ppf = + match decl.type_kind, decl.type_manifest with + | Type_variant (tl, _rep), _ -> + explain_unbound_gen ppf ty tl (fun c -> + let tl = tys_of_constr_args c.Types.cd_args in + Btype.newgenty (Ttuple (List.map (fun t -> None, t) tl)) + ) + "case" (fun ppf c -> + fprintf ppf + "%a of %a" Printtyp.ident c.Types.cd_id + Printtyp.constructor_arguments c.Types.cd_args) + | Type_record (tl, _), _ -> + explain_unbound ppf ty tl (fun l -> l.Types.ld_type) + "field" (fun l -> Ident.name l.Types.ld_id ^ ": ") + | Type_abstract _, Some ty' -> + explain_unbound_single ppf ty ty' + | _ -> () + +let variance (p,n,i) = + let inj = if i then "injective " else "" in + match p, n with + true, true -> inj ^ "invariant" + | true, false -> inj ^ "covariant" + | false, true -> inj ^ "contravariant" + | false, false -> if inj = "" then "unrestricted" else inj + +let variance_context = + let open Typedecl_variance in + function + | Type_declaration (id, decl) -> + Out_type.add_type_declaration_to_preparation id decl; + Format_doc.doc_printf "In the definition@\n @[%a@]@\n" + (Style.as_inline_code @@ Out_type.prepared_type_declaration id) + decl + | Gadt_constructor c -> + Out_type.add_constructor_to_preparation c; + doc_printf "In the GADT constructor@\n @[%a@]@\n" + (Style.as_inline_code Out_type.prepared_constructor) + c + | Extension_constructor (id, e) -> + Out_type.add_extension_constructor_to_preparation e; + doc_printf "In the extension constructor@\n @[%a@]@\n" + (Out_type.prepared_extension_constructor id) + e + +let variance_variable_error ~v1 ~v2 variable error ppf = + let open Typedecl_variance in + match error with + | Variance_not_reflected -> + fprintf ppf + "the type variable@ %a@ has a variance that@ \ + is not reflected by its occurrence in type parameters.@ \ + It was expected to be %s,@ but it is %s." + (Style.as_inline_code Out_type.prepared_type_expr) variable + (variance v2) (variance v1) + | No_variable -> + fprintf ppf + "the type variable@ %a@ cannot be deduced@ \ + from the type parameters." + (Style.as_inline_code Out_type.prepared_type_expr) variable + | Variance_not_deducible -> + fprintf ppf + "the type variable@ %a@ has a variance that@ \ + cannot be deduced from the type parameters.@ \ + It was expected to be %s,@ but it is %s." + (Style.as_inline_code Out_type.prepared_type_expr) variable + (variance v2) (variance v1) + +let variance_error ~loc ~v1 ~v2 = + let open Typedecl_variance in + function + | Variance_variable_error { error; variable; context } -> + Out_type.prepare_for_printing [ variable ]; + let intro = variance_context context in + Location.errorf ~loc "%a%t" pp_doc intro + (variance_variable_error ~v1 ~v2 variable error) + | Variance_not_satisfied n -> + Location.errorf ~loc + "In this definition, expected parameter@ \ + variances are not satisfied.@ \ + The %d%s type parameter was expected to be %s,@ but it is %s." + n (Misc.ordinal_suffix n) + (variance v2) (variance v1) + +let report_error ~loc = function | Repeated_parameter -> - fprintf ppf "A type parameter occurs several times" + Location.errorf ~loc "A type parameter occurs several times" | Duplicate_constructor s -> - fprintf ppf "Two constructors are named %s" s + Location.errorf ~loc "Two constructors are named %a" Style.inline_code s | Too_many_constructors -> - fprintf ppf - "@[Too many non-constant constructors@ -- maximum is %i %s@]" - (Config.max_tag + 1) "non-constant constructors" + Location.errorf ~loc + "Too many non-constant constructors@ \ + -- maximum is %i non-constant constructors@]" + (Config.max_tag + 1) | Duplicate_label s -> - fprintf ppf "Two labels are named %s" s + Location.errorf "Two labels are named %a" Style.inline_code s | Recursive_abbrev (s, env, reaching_path) -> let reaching_path = Reaching_path.simplify reaching_path in Printtyp.wrap_printing_env ~error:true env @@ fun () -> - Printtyp.reset (); + Out_type.reset (); Reaching_path.add_to_preparation reaching_path; - fprintf ppf "@[The type abbreviation %s is cyclic%a@]" - s + Location.errorf ~loc "The type abbreviation %a is cyclic%a" + Style.inline_code s Reaching_path.pp_colon reaching_path | Cycle_in_def (s, env, reaching_path) -> let reaching_path = Reaching_path.simplify reaching_path in Printtyp.wrap_printing_env ~error:true env @@ fun () -> - Printtyp.reset (); + Out_type.reset (); Reaching_path.add_to_preparation reaching_path; - fprintf ppf "@[The definition of %s contains a cycle%a@]" - s + Location.errorf ~loc "The definition of %a contains a cycle%a" + Style.inline_code s Reaching_path.pp_colon reaching_path - | Definition_mismatch (ty, _env, None) -> - fprintf ppf "@[@[%s@ %s@;<1 2>%a@]@]" - "This variant or record definition" "does not match that of type" - Printtyp.type_expr ty - | Definition_mismatch (ty, env, Some err) -> - fprintf ppf "@[@[%s@ %s@;<1 2>%a@]%a@]" - "This variant or record definition" "does not match that of type" - Printtyp.type_expr ty - (Includecore.report_type_mismatch - "the original" "this" "definition" env) + | Definition_mismatch (ty, env, err) -> + let err ppf = match err with + | None -> () + | Some err -> + Format_doc.fprintf ppf "@\n@[%a@]" + (Includecore.report_type_mismatch "the original" "this" "definition" + env) err + in + Location.errorf ~loc + "@[This variant or record definition@ \ + does not match that of type@;<1 2>%a@]%t" + quoted_type ty err | Constraint_failed (env, err) -> - fprintf ppf "@[Constraints are not satisfied in this type.@ "; - Printtyp.report_unification_error ppf env err - (fun ppf -> fprintf ppf "Type") - (fun ppf -> fprintf ppf "should be an instance of"); - fprintf ppf "@]" + Location.errorf ~loc "Constraints are not satisfied in this type.@\n%t" + (fun ppf -> + Errortrace_report.unification ppf env err + (Doc.msg "Type") + (Doc.msg "should be an instance of") + ) | Non_regular { definition; used_as; defined_as; reaching_path } -> let reaching_path = Reaching_path.simplify reaching_path in - Printtyp.prepare_for_printing [used_as; defined_as]; + Out_type.prepare_for_printing [used_as; defined_as]; Reaching_path.add_to_preparation reaching_path; - fprintf ppf - "@[This recursive type is not regular.@ \ - The type constructor %s is defined as@;<1 2>type %a@ \ - but it is used as@;<1 2>%a%t\ + Location.errorf ~loc + "This recursive type is not regular.@ \ + @[The type constructor %a is defined as@;<1 2>type %a@ \ + but it is used as@;<1 2>%a%t@,\ All uses need to match the definition for the recursive type \ to be regular.@]" - (Path.name definition) - !Oprint.out_type (Printtyp.tree_of_typexp Type defined_as) - !Oprint.out_type (Printtyp.tree_of_typexp Type used_as) + Style.inline_code (Path.name definition) + quoted_out_type (Out_type.tree_of_typexp Type defined_as) + quoted_out_type (Out_type.tree_of_typexp Type used_as) (fun pp -> let is_expansion = function Expands_to _ -> true | _ -> false in if List.exists is_expansion reaching_path then - fprintf pp "@ after the following expansion(s)%a@ " + fprintf pp "@ after the following expansion(s)%a" Reaching_path.pp_colon reaching_path - else fprintf pp ".@ ") + else fprintf pp ".") | Inconsistent_constraint (env, err) -> - fprintf ppf "@[The type constraints are not consistent.@ "; - Printtyp.report_unification_error ppf env err - (fun ppf -> fprintf ppf "Type") - (fun ppf -> fprintf ppf "is not compatible with type"); - fprintf ppf "@]" + Location.errorf ~loc "The type constraints are not consistent.@\n%t" + (fun ppf -> Errortrace_report.unification ppf env err + (Doc.msg "Type") + (Doc.msg "is not compatible with type") + ) | Type_clash (env, err) -> - Printtyp.report_unification_error ppf env err - (function ppf -> - fprintf ppf "This type constructor expands to type") - (function ppf -> - fprintf ppf "but is used here with type") + let msg = Format_doc.Doc.msg in + Location.errorf ~loc "%t" @@ fun ppf -> + Errortrace_report.unification ppf env err + (msg "This type constructor expands to type") + (msg "but is used here with type") | Null_arity_external -> - fprintf ppf "External identifiers must be functions" + Location.errorf ~loc "External identifiers must be functions" | Missing_native_external -> - fprintf ppf "@[An external function with more than 5 arguments \ - requires a second stub function@ \ - for native-code compilation@]" + Location.errorf ~loc + "An external function with more than 5 arguments \ + requires a second stub function@ + for native-code compilation" | Unbound_type_var (ty, decl) -> - fprintf ppf "@[A type variable is unbound in this type declaration"; - begin match decl.type_kind, decl.type_manifest with - | Type_variant (tl, _rep), _ -> - explain_unbound_gen ppf ty tl (fun c -> - let tl = tys_of_constr_args c.Types.cd_args in - Btype.newgenty (Ttuple tl) - ) - "case" (fun ppf c -> - fprintf ppf - "%a of %a" Printtyp.ident c.Types.cd_id - Printtyp.constructor_arguments c.Types.cd_args) - | Type_record (tl, _), _ -> - explain_unbound ppf ty tl (fun l -> l.Types.ld_type) - "field" (fun l -> Ident.name l.Types.ld_id ^ ": ") - | Type_abstract, Some ty' -> - explain_unbound_single ppf ty ty' - | _ -> () - end; - fprintf ppf "@]" + Location.errorf ~loc + "A type variable is unbound in this type declaration%t" + (explain_unbounded ty decl) | Unbound_type_var_ext (ty, ext) -> - fprintf ppf "@[A type variable is unbound in this extension constructor"; - let args = tys_of_constr_args ext.ext_args in - explain_unbound ppf ty args (fun c -> c) "type" (fun _ -> ""); - fprintf ppf "@]" + let explain ppf = + let args = tys_of_constr_args ext.ext_args in + explain_unbound ppf ty args (fun c -> c) "type" (fun _ -> "") + in + Location.errorf ~loc + "A type variable is unbound in this extension constructor%t" + explain | Cannot_extend_private_type path -> - fprintf ppf "@[%s@ %a@]" - "Cannot extend private type definition" + Location.errorf ~loc + "Cannot extend private type definition@ %a" Printtyp.path path | Not_extensible_type path -> - fprintf ppf "@[%s@ %a@ %s@]" - "Type definition" - Printtyp.path path - "is not extensible" + Location.errorf ~loc + "Type definition@ %a@ is not extensible@]" + (Style.as_inline_code Printtyp.path) path | Extension_mismatch (path, env, err) -> - fprintf ppf "@[@[%s@ %s@;<1 2>%s@]%a@]" - "This extension" "does not match the definition of type" - (Path.name path) + Location.errorf ~loc + "@[This extension@ does not match the definition of type\ + @;<1 2>%a@]@\n@[%a@]" + Style.inline_code (Path.name path) (Includecore.report_type_mismatch "the type" "this extension" "definition" env) err | Rebind_wrong_type (lid, env, err) -> - Printtyp.report_unification_error ppf env err - (function ppf -> - fprintf ppf "The constructor %a@ has type" - Printtyp.longident lid) - (function ppf -> - fprintf ppf "but was expected to be of type") + Location.errorf ~loc "%t" @@ fun ppf -> + Errortrace_report.unification ppf env err + (doc_printf "The constructor %a@ has type" + quoted_constr lid) + (Doc.msg "but was expected to be of type") | Rebind_mismatch (lid, p, p') -> - fprintf ppf - "@[%s@ %a@ %s@ %s@ %s@ %s@ %s@]" - "The constructor" Printtyp.longident lid - "extends type" (Path.name p) - "whose declaration does not match" - "the declaration of type" (Path.name p') + Location.errorf ~loc + "The constructor@ %a@ extends type@ %a@ \ + whose declaration does not match@ the declaration of type@ %a" + quoted_constr lid + Style.inline_code (Path.name p) + Style.inline_code (Path.name p') | Rebind_private lid -> - fprintf ppf "@[%s@ %a@ %s@]" - "The constructor" - Printtyp.longident lid - "is private" + Location.errorf ~loc "The constructor@ %a@ is private" + quoted_constr lid | Variance (Typedecl_variance.Bad_variance (n, v1, v2)) -> - let variance (p,n,i) = - let inj = if i then "injective " else "" in - match p, n with - true, true -> inj ^ "invariant" - | true, false -> inj ^ "covariant" - | false, true -> inj ^ "contravariant" - | false, false -> if inj = "" then "unrestricted" else inj - in - (match n with - | Variance_variable_error { error; variable; context } -> - Printtyp.prepare_for_printing [ variable ]; - begin match context with - | Type_declaration (id, decl) -> - Printtyp.add_type_declaration_to_preparation id decl; - fprintf ppf "@[%s@;<1 2>%a@;" - "In the definition" - (Printtyp.prepared_type_declaration id) - decl - | Gadt_constructor c -> - Printtyp.add_constructor_to_preparation c; - fprintf ppf "@[%s@;<1 2>%a@;" - "In the GADT constructor" - Printtyp.prepared_constructor - c - | Extension_constructor (id, e) -> - Printtyp.add_extension_constructor_to_preparation e; - fprintf ppf "@[%s@;<1 2>%a@;" - "In the extension constructor" - (Printtyp.prepared_extension_constructor id) - e - end; - begin match error with - | Variance_not_reflected -> - fprintf ppf "@[%s@ %a@ %s@ %s@ It" - "the type variable" - Printtyp.prepared_type_expr variable - "has a variance that" - "is not reflected by its occurrence in type parameters." - | No_variable -> - fprintf ppf "@[%s@ %a@ %s@ %s@]@]" - "the type variable" - Printtyp.prepared_type_expr variable - "cannot be deduced" - "from the type parameters." - | Variance_not_deducible -> - fprintf ppf "@[%s@ %a@ %s@ %s@ It" - "the type variable" - Printtyp.prepared_type_expr variable - "has a variance that" - "cannot be deduced from the type parameters." - end - | Variance_not_satisfied n -> - fprintf ppf "@[@[%s@ %s@ The %d%s type parameter" - "In this definition, expected parameter" - "variances are not satisfied." - n (Misc.ordinal_suffix n)); - (match n with - | Variance_variable_error { error = No_variable; _ } -> () - | _ -> - fprintf ppf " was expected to be %s,@ but it is %s.@]@]" - (variance v2) (variance v1)) + variance_error ~loc ~v1 ~v2 n | Unavailable_type_constructor p -> - fprintf ppf "The definition of type %a@ is unavailable" Printtyp.path p - | Variance Typedecl_variance.Varying_anonymous -> - fprintf ppf "@[%s@ %s@ %s@]" - "In this GADT definition," "the variance of some parameter" - "cannot be checked" + Location.errorf ~loc "The definition of type %a@ is unavailable" + (Style.as_inline_code Printtyp.path) p + | Variance (Typedecl_variance.Varying_anonymous (n, reason)) -> + let reason_text = + match reason with + | Variable_constrained ty -> + dprintf + ", because the type variable %a appears@ in other parameters.@ \ + In GADTS, covariant or contravariant type parameters@ \ + must not depend@ on other parameters." + (Style.as_inline_code Printtyp.type_expr) ty + | Variable_instantiated ty -> + dprintf + ", because it is instantiated to the type %a.@ \ + Covariant or contravariant type parameters@ \ + may only appear@ as type variables@ \ + in GADT constructor definitions." + (Style.as_inline_code Printtyp.type_expr) ty + in + Location.errorf ~loc + "In this GADT constructor definition,@ \ + the variance of the@ %d%s parameter@ \ + cannot be checked%t" + n (Misc.ordinal_suffix n) + reason_text | Val_in_structure -> - fprintf ppf "Value declarations are only allowed in signatures" + Location.errorf ~loc "Value declarations are only allowed in signatures" | Multiple_native_repr_attributes -> - fprintf ppf "Too many [@@unboxed]/[@@untagged] attributes" + Location.errorf ~loc "Too many %a/%a attributes" + Style.inline_code "[@@unboxed]" + Style.inline_code "[@@untagged]" | Cannot_unbox_or_untag_type Unboxed -> - fprintf ppf "@[Don't know how to unbox this type.@ \ - Only float, int32, int64 and nativeint can be unboxed.@]" + Location.errorf ~loc + "Don't know how to unbox this type.@ \ + Only %a, %a, %a, and %a can be unboxed." + Style.inline_code "float" + Style.inline_code "int32" + Style.inline_code "int64" + Style.inline_code "nativeint" | Cannot_unbox_or_untag_type Untagged -> - fprintf ppf "@[Don't know how to untag this type.@ \ - Only int can be untagged.@]" + Location.errorf ~loc + "Don't know how to untag this type. Only %a@ \ + and other immediate types can be untagged." + Style.inline_code "int" | Deep_unbox_or_untag_attribute kind -> - fprintf ppf - "@[The attribute '%s' should be attached to@ \ + Location.errorf ~loc + "The attribute %a should be attached to@ \ a direct argument or result of the primitive,@ \ - it should not occur deeply into its type.@]" + it should not occur deeply into its type." + Style.inline_code (match kind with Unboxed -> "@unboxed" | Untagged -> "@untagged") | Immediacy (Typedecl_immediacy.Bad_immediacy_attribute violation) -> - fprintf ppf "@[%a@]" Format.pp_print_text - (match violation with - | Type_immediacy.Violation.Not_always_immediate -> - "Types marked with the immediate attribute must be \ - non-pointer types like int or bool." - | Type_immediacy.Violation.Not_always_immediate_on_64bits -> - "Types marked with the immediate64 attribute must be \ - produced using the Stdlib.Sys.Immediate64.Make functor.") + (match violation with + | Type_immediacy.Violation.Not_always_immediate -> + Location.errorf ~loc + "Types@ marked@ with@ the@ immediate@ attribute@ must@ be@ \ + non-pointer@ types@ like@ %a@ or@ %a." + Style.inline_code "int" + Style.inline_code "bool" + | Type_immediacy.Violation.Not_always_immediate_on_64bits -> + Location.errorf ~loc + "Types@ marked@ with@ the@ %a@ attribute@ must@ be@ \ + produced@ using@ the@ %a@ functor." + Style.inline_code "immediate64" + Style.inline_code "Stdlib.Sys.Immediate64.Make" + ) | Bad_unboxed_attribute msg -> - fprintf ppf "@[This type cannot be unboxed because@ %s.@]" msg + Location.errorf ~loc "This type cannot be unboxed because@ %s." msg | Separability (Typedecl_separability.Non_separable_evar evar) -> let pp_evar ppf = function | None -> fprintf ppf "an unnamed existential variable" | Some str -> fprintf ppf "the existential variable %a" - Pprintast.tyvar str in - fprintf ppf "@[This type cannot be unboxed because@ \ - it might contain both float and non-float values,@ \ - depending on the instantiation of %a.@ \ - You should annotate it with [%@%@ocaml.boxed].@]" + (Style.as_inline_code Pprintast.Doc.tyvar) str in + Location.errorf ~loc + "This type cannot be unboxed because@ \ + it might contain both float and non-float values,@ \ + depending on the instantiation of %a.@ \ + You should annotate it with %a." pp_evar evar + Style.inline_code "[@@ocaml.boxed]" | Boxed_and_unboxed -> - fprintf ppf "@[A type cannot be boxed and unboxed at the same time.@]" + Location.errorf ~loc + "A type cannot be boxed and unboxed at the same time." | Nonrec_gadt -> - fprintf ppf - "@[GADT case syntax cannot be used in a 'nonrec' block.@]" + Location.errorf ~loc + "GADT case syntax cannot be used in a %a block." + Style.inline_code "nonrec" | Invalid_private_row_declaration ty -> - Format.fprintf ppf - "@[This private row type declaration is invalid.@ \ - The type expression on the right-hand side reduces to@;<1 2>%a@ \ - which does not have a free row type variable.@]@,\ - @[@[@{Hint@}: If you intended to define a private \ - type abbreviation,@ \ - write explicitly@]@;<1 2>private %a@]" - Printtyp.type_expr ty Printtyp.type_expr ty + let pp_private ppf ty = fprintf ppf "private %a" Printtyp.type_expr ty in + let sub = [ + Location.msg + "@[@[@{Hint@}: If you intended to define a private \ + type abbreviation,@ \ + write explicitly@]@;<1 2>%a@]" + (Style.as_inline_code pp_private) ty + ] + in + Location.errorf ~sub ~loc + "This private row type declaration is invalid.@\n\ + @[The type expression on the right-hand side reduces to@;<1 2>%a@ \ + which does not have a free row type variable.@]" + (Style.as_inline_code Printtyp.type_expr) ty + | Atomic_field_must_be_mutable name -> + Location.errorf ~loc + "@[The label %a must be mutable to be declared atomic.@]" + Style.inline_code name let () = Location.register_error_of_exn (function - | Error (loc, err) -> - Some (Location.error_of_printer ~loc report_error err) + | Error (loc, err) -> Some (report_error ~loc err) | _ -> None ) diff --git a/ocamlmerlin_mlx/ocaml/typing/typedecl.mli b/ocamlmerlin_mlx/ocaml/typing/typedecl.mli index 013fae4..4ad1f3f 100644 --- a/ocamlmerlin_mlx/ocaml/typing/typedecl.mli +++ b/ocamlmerlin_mlx/ocaml/typing/typedecl.mli @@ -16,23 +16,21 @@ (* Typing of type definitions and primitive definitions *) open Types -open Format - val transl_type_decl: Env.t -> Asttypes.rec_flag -> Parsetree.type_declaration list -> - Typedtree.type_declaration list * Env.t + Typedtree.type_declaration list * Env.t * Shape.t list val transl_exception: Env.t -> Parsetree.extension_constructor -> - Typedtree.extension_constructor * Env.t + Typedtree.extension_constructor * Env.t * Shape.t val transl_type_exception: Env.t -> - Parsetree.type_exception -> Typedtree.type_exception * Env.t + Parsetree.type_exception -> Typedtree.type_exception * Env.t * Shape.t val transl_type_extension: bool -> Env.t -> Location.t -> Parsetree.type_extension -> - Typedtree.type_extension * Env.t + Typedtree.type_extension * Env.t * Shape.t list val transl_value_decl: Env.t -> Location.t -> @@ -46,6 +44,9 @@ val transl_with_constraint: outer_env:Env.t -> Parsetree.type_declaration -> Typedtree.type_declaration +val transl_package_constraint: + loc:Location.t -> Env.t -> type_expr -> Types.type_declaration + val abstract_type_decl: injective:bool -> int -> type_declaration val approx_type_decl: Parsetree.type_declaration list -> @@ -105,7 +106,8 @@ type error = | Boxed_and_unboxed | Nonrec_gadt | Invalid_private_row_declaration of type_expr + | Atomic_field_must_be_mutable of string exception Error of Location.t * error -val report_error: formatter -> error -> unit +val report_error: loc:Location.t -> error -> Location.report diff --git a/ocamlmerlin_mlx/ocaml/typing/typedecl_immediacy.ml b/ocamlmerlin_mlx/ocaml/typing/typedecl_immediacy.ml index f1f0594..71e49a1 100644 --- a/ocamlmerlin_mlx/ocaml/typing/typedecl_immediacy.ml +++ b/ocamlmerlin_mlx/ocaml/typing/typedecl_immediacy.ml @@ -35,8 +35,9 @@ let compute_decl env tdecl = Type_immediacy.Always else Type_immediacy.Unknown - | (Type_abstract, Some(typ)) -> Ctype.immediacy env typ - | (Type_abstract, None) -> Type_immediacy.of_attributes tdecl.type_attributes + | (Type_abstract _, Some(typ)) -> Ctype.immediacy env typ + | (Type_abstract _, None) -> + Type_immediacy.of_attributes tdecl.type_attributes | _ -> Type_immediacy.Unknown let property : (Type_immediacy.t, unit) Typedecl_properties.property = diff --git a/ocamlmerlin_mlx/ocaml/typing/typedecl_separability.ml b/ocamlmerlin_mlx/ocaml/typing/typedecl_separability.ml index c6ded4c..6855cc9 100644 --- a/ocamlmerlin_mlx/ocaml/typing/typedecl_separability.ml +++ b/ocamlmerlin_mlx/ocaml/typing/typedecl_separability.ml @@ -50,10 +50,12 @@ type type_structure = let structure : type_definition -> type_structure = fun def -> match def.type_kind with | Type_open -> Open - | Type_abstract -> + | Type_abstract _ -> begin match def.type_manifest with | None -> Abstract - | Some type_expr -> Synonym type_expr + | Some type_expr -> + if Msupport.erroneous_type_check type_expr then Abstract else + Synonym type_expr end | ( Type_record ([{ld_type = ty; _}], Record_unboxed _) @@ -132,8 +134,8 @@ let rec immediate_subtypes : type_expr -> type_expr list = fun ty -> on which immediate_subtypes is called from [check_type] *) | Tarrow(_,ty1,ty2,_) -> [ty1; ty2] - | Ttuple(tys) -> tys - | Tpackage(_, fl) -> (snd (List.split fl)) + | Ttuple(tys) -> List.map snd tys + | Tpackage pack -> (snd (List.split pack.pack_cstrs)) | Tobject(row,class_ty) -> let class_subtys = match !class_ty with @@ -409,14 +411,14 @@ let check_type | (Tvariant(_) , Sep ) | (Tobject(_,_) , Sep ) | ((Tnil | Tfield _) , Sep ) - | (Tpackage(_,_) , Sep ) -> empty + | (Tpackage _ , Sep ) -> empty (* "Deeply separable" case for these same constructors. *) | (Tarrow _ , Deepsep) | (Ttuple _ , Deepsep) | (Tvariant(_) , Deepsep) | (Tobject(_,_) , Deepsep) | ((Tnil | Tfield _) , Deepsep) - | (Tpackage(_,_) , Deepsep) -> + | (Tpackage _ , Deepsep) -> let tys = immediate_subtypes ty in let on_subtype context ty = context ++ check_type (Hyps.guard hyps) ty Deepsep in diff --git a/ocamlmerlin_mlx/ocaml/typing/typedecl_variance.ml b/ocamlmerlin_mlx/ocaml/typing/typedecl_variance.ml index ca0521a..19fe289 100644 --- a/ocamlmerlin_mlx/ocaml/typing/typedecl_variance.ml +++ b/ocamlmerlin_mlx/ocaml/typing/typedecl_variance.ml @@ -40,9 +40,13 @@ type variance_error = variable : type_expr } +type anonymous_variance_error = + | Variable_constrained of type_expr + | Variable_instantiated of type_expr + type error = | Bad_variance of variance_error * surface_variance * surface_variance - | Varying_anonymous + | Varying_anonymous of int * anonymous_variance_error exception Error of Location.t * error @@ -65,7 +69,7 @@ let compute_variance env visited vari ty = compute_variance_rec (Variance.conjugate vari) ty1; compute_same ty2 | Ttuple tl -> - List.iter compute_same tl + List.iter (fun (_,t) -> compute_same t) tl | Tconstr (path, tl, _) -> let open Variance in if tl = [] then () else begin @@ -99,9 +103,9 @@ let compute_variance env visited vari ty = | Tpoly (ty, _) -> compute_same ty | Tvar _ | Tnil | Tlink _ | Tunivar _ -> () - | Tpackage (_, fl) -> + | Tpackage pack -> let v = Variance.(compose vari full) in - List.iter (fun (_, ty) -> compute_variance_rec v ty) fl + List.iter (fun (_, ty) -> compute_variance_rec v ty) pack.pack_cstrs in compute_variance_rec vari ty @@ -113,12 +117,15 @@ let injective = Variance.(set Inj null) let compute_variance_type env ~check (required, loc) decl tyl = (* Requirements *) - let check_injectivity = decl.type_kind = Type_abstract in + let check_injectivity = Btype.type_kind_is_abstract decl in let required = List.map (fun (c,n,i) -> let i = if check_injectivity then i else false in - if c || n then (c,n,i) else (true,true,i)) + (* c and n reflects respectively + and - in the syntax, + and maps respectively to `not May_neg` and `not May_pos` + in the {!Types.Variance.f} fields *) + not n, not c, i) required in (* Prepare *) @@ -174,8 +181,7 @@ let compute_variance_type env ~check (required, loc) decl tyl = (c,n,i))))) params required; (* Check propagation from constrained parameters *) - let args = Btype.newgenty (Ttuple params) in - let fvl = Ctype.free_variables args in + let fvl = Ctype.free_variables_list params in let fvl = List.filter (fun v -> not (List.exists (eq_type v) params)) fvl in (* If there are no extra variables there is nothing to do *) @@ -228,15 +234,15 @@ let compute_variance_type env ~check (required, loc) decl tyl = List.iter (fun (_,ty) -> check ty) tyl; end; List.map2 - (fun ty (p, n, i) -> + (fun ty (p, n, _i) -> let v = get_variance ty tvl in let tr = decl.type_private in (* Use required variance where relevant *) - let concr = decl.type_kind <> Type_abstract (*|| tr = Type_new*) in + let concr = not (Btype.type_kind_is_abstract decl) in let (p, n) = if tr = Private || not (Btype.is_Tvar ty) then (p, n) (* set *) else (false, false) (* only check *) - and i = concr || i && tr = Private in + and i = concr in let v = union v (make p n i) in if not concr || Btype.is_Tvar ty then v else union v @@ -249,8 +255,12 @@ let add_false = List.map (fun ty -> false, ty) or it is a variable appearing in another parameter *) let constrained vars ty = match get_desc ty with - | Tvar _ -> List.exists (List.exists (eq_type ty)) vars - | _ -> true + | Tvar _ -> + begin match List.find_map (List.find_opt (eq_type ty)) vars with + | Some var -> Some (Variable_constrained var) + | None -> None + end + | _ -> Some (Variable_instantiated ty) let for_constr = function | Types.Cstr_tuple l -> add_false l @@ -259,8 +269,8 @@ let for_constr = function (fun {Types.ld_mutable; ld_type} -> (ld_mutable = Mutable, ld_type)) l -let compute_variance_gadt env ~check (required, loc as rloc) decl - (tl, ret_type_opt) = +let compute_variance_gadt env ~check (required, _ as rloc) decl + (cloc, tl, ret_type_opt) = match ret_type_opt with | None -> compute_variance_type env ~check rloc {decl with type_private = Private} @@ -272,14 +282,20 @@ let compute_variance_gadt env ~check (required, loc as rloc) decl let fvl = List.map (Ctype.free_variables ?env:None) tyl in let _ = List.fold_left2 - (fun (fv1,fv2) ty (c,n,_) -> + (fun (index, fv1,fv2) ty (c,n,_) -> match fv2 with [] -> assert false | fv :: fv2 -> (* fv1 @ fv2 = free_variables of other parameters *) - if (c||n) && constrained (fv1 @ fv2) ty then - raise (Error(loc, Varying_anonymous)); - (fv :: fv1, fv2)) - ([], fvl) tyl required + if (c || n) + then begin + match constrained (fv1 @ fv2) ty with + | None -> () + | Some reason -> + raise (Error(cloc, + Varying_anonymous (index, reason))) + end; + (succ index, fv :: fv1, fv2)) + (1, [], fvl) tyl required in compute_variance_type env ~check rloc {decl with type_params = tyl; type_private = Private} @@ -293,7 +309,7 @@ let compute_variance_extension env decl ext rloc = let ext = ext.Typedtree.ext_type in compute_variance_gadt env ~check rloc {decl with type_params = ext.ext_type_params} - (ext.ext_args, ext.ext_ret_type) + (ext.ext_loc, ext.ext_args, ext.ext_ret_type) let compute_variance_gadt_constructor env ~check rloc decl tl = let check = @@ -302,19 +318,20 @@ let compute_variance_gadt_constructor env ~check rloc decl tl = | None -> None in compute_variance_gadt env ~check rloc decl - (tl.Types.cd_args, tl.Types.cd_res) + (tl.Types.cd_loc, tl.Types.cd_args, tl.Types.cd_res) let compute_variance_decl env ~check decl (required, _ as rloc) = let check = Option.map (fun id -> Type_declaration (id, decl)) check in - if (decl.type_kind = Type_abstract || decl.type_kind = Type_open) - && decl.type_manifest = None then + let abstract = Btype.type_kind_is_abstract decl in + match decl with + | {type_kind = Type_abstract _ | Type_open; type_manifest = None} -> List.map - (fun (c, n, i) -> - make (not n) (not c) (decl.type_kind <> Type_abstract || i)) + (fun (c, n, i) -> make (not n) (not c) (not abstract || i)) required - else begin + | { type_kind = _; type_manifest = Some _ } + | { type_kind = Type_record _ | Type_variant _; type_manifest = _ } -> let mn = match decl.type_manifest with None -> [] @@ -322,7 +339,7 @@ let compute_variance_decl env ~check decl (required, _ as rloc) = in let vari = match decl.type_kind with - Type_abstract | Type_open -> + Type_abstract _ | Type_open -> compute_variance_type env ~check rloc decl mn | Type_variant (tll,_rep) -> if List.for_all (fun c -> c.Types.cd_res = None) tll then @@ -354,10 +371,9 @@ let compute_variance_decl env ~check decl (required, _ as rloc) = (mn @ List.map (fun {Types.ld_mutable; ld_type} -> (ld_mutable = Mutable, ld_type)) ftl) in - if mn = [] || decl.type_kind <> Type_abstract then + if mn = [] || not abstract then List.map Variance.strengthen vari else vari - end let is_hash id = let s = Ident.name id in @@ -404,6 +420,7 @@ let transl_variance (v, i) = | Covariant -> (true, false) | Contravariant -> (false, true) | NoVariance -> (false, false) + | Bivariant -> (true, true) in (co, cn, match i with Injective -> true | NoInjectivity -> false) diff --git a/ocamlmerlin_mlx/ocaml/typing/typedecl_variance.mli b/ocamlmerlin_mlx/ocaml/typing/typedecl_variance.mli index 6392e61..e80be0e 100644 --- a/ocamlmerlin_mlx/ocaml/typing/typedecl_variance.mli +++ b/ocamlmerlin_mlx/ocaml/typing/typedecl_variance.mli @@ -47,9 +47,13 @@ type variance_error = variable : type_expr } +type anonymous_variance_error = + | Variable_constrained of type_expr + | Variable_instantiated of type_expr + type error = | Bad_variance of variance_error * surface_variance * surface_variance - | Varying_anonymous + | Varying_anonymous of int * anonymous_variance_error exception Error of Location.t * error diff --git a/ocamlmerlin_mlx/ocaml/typing/typedtree.ml b/ocamlmerlin_mlx/ocaml/typing/typedtree.ml index f97d52a..a6bd10c 100644 --- a/ocamlmerlin_mlx/ocaml/typing/typedtree.ml +++ b/ocamlmerlin_mlx/ocaml/typing/typedtree.ml @@ -17,6 +17,9 @@ open Asttypes open Types +open Data_types + +module Uid = Shape.Uid (* Value expressions for the core language *) @@ -53,11 +56,13 @@ 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 * Uid.t -> value pattern_desc | Tpat_alias : - value general_pattern * Ident.t * string loc -> value pattern_desc + value general_pattern * Ident.t * string loc * Uid.t * type_expr -> + value pattern_desc | Tpat_constant : constant -> value pattern_desc - | Tpat_tuple : value general_pattern list -> value pattern_desc + | Tpat_tuple : + (string option * value general_pattern) list -> value pattern_desc | Tpat_construct : Longident.t loc * constructor_description * value general_pattern list * (Ident.t loc list * core_type) option -> @@ -69,7 +74,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 @@ -95,30 +101,30 @@ and exp_extra = | Texp_coerce of core_type option * core_type | Texp_poly of core_type option | Texp_newtype of string - | Texp_newtype' of Ident.t * label loc + | Texp_newtype' of Ident.t * label loc * Uid.t and expression_desc = Texp_ident of Path.t * Longident.t loc * Types.value_description | Texp_constant of constant | Texp_let of rec_flag * value_binding list * expression - | Texp_function of { arg_label : arg_label; param : Ident.t; - cases : value case list; partial : partial; } - | Texp_apply of expression * (arg_label * expression option) list - | Texp_match of expression * computation case list * partial - | Texp_try of expression * value case list - | Texp_tuple of expression list + | Texp_function of function_param list * function_body + | Texp_apply of expression * (arg_label * apply_arg) list + | Texp_match of expression * computation case list * value case list * partial + | Texp_try of expression * value case list * value case list + | Texp_tuple of (string option * expression) list | Texp_construct of Longident.t loc * constructor_description * expression list | Texp_variant of label * expression option | Texp_record of { - fields : ( Types.label_description * record_label_definition ) array; + fields : ( Data_types.label_description * record_label_definition ) array; representation : Types.record_representation; extended_expression : expression option; } + | Texp_atomic_loc of expression * Longident.t loc * label_description | Texp_field of expression * Longident.t loc * label_description | Texp_setfield of expression * Longident.t loc * label_description * expression - | Texp_array of expression list + | Texp_array of mutable_flag * expression list | Texp_ifthenelse of expression * expression * expression option | Texp_sequence of expression * expression | Texp_while of expression * expression @@ -148,7 +154,7 @@ and expression_desc = | Texp_unreachable | Texp_extension_constructor of Longident.t loc * Path.t | Texp_open of open_declaration * expression - | Texp_hole + | Texp_typed_hole and meth = | Tmeth_name of string @@ -158,10 +164,36 @@ and meth = and 'k case = { c_lhs: 'k general_pattern; + c_cont: (Ident.t * Types.value_description) option; c_guard: expression option; c_rhs: expression; } +and function_param = + { + fp_arg_label: arg_label; + fp_param: Ident.t; + fp_partial: partial; + fp_kind: function_param_kind; + fp_newtypes: string loc list; + fp_loc : Location.t; + } + +and function_param_kind = + | Tparam_pat of pattern + | Tparam_optional_default of pattern * expression + +and function_body = + | Tfunction_body of expression + | Tfunction_cases of + { cases: value case list; + partial: partial; + param: Ident.t; + loc: Location.t; + exp_extra: exp_extra option; + attributes: attributes; + } + and record_label_definition = | Kept of Types.type_expr * mutable_flag | Overridden of Longident.t loc * expression @@ -176,6 +208,12 @@ and binding_op = bop_loc : Location.t; } +and ('a, 'b) arg_or_omitted = + | Arg of 'a + | Omitted of 'b + +and apply_arg = (expression, unit) arg_or_omitted + (* Value expressions for the class language *) and class_expr = @@ -193,7 +231,7 @@ and class_expr_desc = | Tcl_fun of arg_label * pattern * (Ident.t * expression) list * class_expr * partial - | Tcl_apply of class_expr * (arg_label * expression option) list + | Tcl_apply of class_expr * (arg_label * apply_arg) list | Tcl_let of rec_flag * value_binding list * (Ident.t * expression) list * class_expr | Tcl_constraint of @@ -258,7 +296,7 @@ and module_expr_desc = | Tmod_constraint of module_expr * Types.module_type * module_type_constraint * module_coercion | Tmod_unpack of expression * Types.module_type - | Tmod_hole + | Tmod_typed_hole and structure = { str_items : structure_item list; @@ -292,6 +330,7 @@ and module_binding = { mb_id: Ident.t option; mb_name: string option loc; + mb_uid: Uid.t; mb_presence: module_presence; mb_expr: module_expr; mb_attributes: attribute list; @@ -302,6 +341,7 @@ and value_binding = { vb_pat: pattern; vb_expr: expression; + vb_rec_kind: Value_rec_types.recursive_binding_kind; vb_attributes: attributes; vb_loc: Location.t; } @@ -371,6 +411,7 @@ and module_declaration = { md_id: Ident.t option; md_name: string option loc; + md_uid: Uid.t; md_presence: module_presence; md_type: module_type; md_attributes: attribute list; @@ -381,6 +422,7 @@ and module_substitution = { ms_id: Ident.t; ms_name: string loc; + ms_uid: Uid.t; ms_manifest: Path.t; ms_txt: Longident.t loc; ms_attributes: attributes; @@ -391,6 +433,7 @@ and module_type_declaration = { mtd_id: Ident.t; mtd_name: string loc; + mtd_uid: Uid.t; mtd_type: module_type option; mtd_attributes: attribute list; mtd_loc: Location.t; @@ -444,20 +487,21 @@ and core_type_desc = Ttyp_any | Ttyp_var of string | Ttyp_arrow of arg_label * core_type * core_type - | Ttyp_tuple of core_type list + | Ttyp_tuple of (string option * core_type) list | Ttyp_constr of Path.t * Longident.t loc * core_type list | Ttyp_object of object_field list * closed_flag | Ttyp_class of Path.t * Longident.t loc * core_type list - | Ttyp_alias of core_type * string + | Ttyp_alias of core_type * string loc | Ttyp_variant of row_field list * closed_flag * label list option | Ttyp_poly of string list * core_type | Ttyp_package of package_type + | Ttyp_open of Path.t * Longident.t loc * core_type and package_type = { - pack_path : Path.t; - pack_fields : (Longident.t loc * core_type) list; - pack_type : Types.module_type; - pack_txt : Longident.t loc; + tpt_path : Path.t; + tpt_cstrs : (Longident.t loc * core_type) list; + tpt_type : Types.module_type; + tpt_txt : Longident.t loc; } and row_field = { @@ -513,7 +557,9 @@ and label_declaration = { ld_id: Ident.t; ld_name: string loc; + ld_uid: Uid.t; ld_mutable: mutable_flag; + ld_atomic: atomic_flag; ld_type: core_type; ld_loc: Location.t; ld_attributes: attribute list; @@ -523,6 +569,7 @@ and constructor_declaration = { cd_id: Ident.t; cd_name: string loc; + cd_uid: Uid.t; cd_vars: string loc list; cd_args: constructor_arguments; cd_res: core_type option; @@ -630,6 +677,19 @@ type implementation = { shape: Shape.t; } +type item_declaration = + | Value of value_description + | Value_binding of value_binding + | Type of type_declaration + | Constructor of constructor_declaration + | Extension_constructor of extension_constructor + | Label of label_declaration + | Module of module_declaration + | Module_substitution of module_substitution + | Module_binding of module_binding + | Module_type of module_type_declaration + | Class of class_declaration + | Class_type of class_type_declaration (* Auxiliary functions over the a.s.t. *) @@ -675,13 +735,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_tuple patl -> List.iter f.f patl + | Tpat_alias(p, _, _, _, _) -> f.f p + | Tpat_tuple patl -> List.iter (fun (_, p) -> f.f p) 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 _ @@ -695,16 +755,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, uid, ty) -> + Tpat_alias (f.f p1, id, s, uid, ty) | Tpat_tuple pats -> - Tpat_tuple (List.map f.f pats) + Tpat_tuple (List.map (fun (label, pat) -> label, f.f pat) 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) @@ -757,11 +817,11 @@ let rec iter_bound_idents : type k . _ -> k general_pattern -> _ = fun f pat -> match pat.pat_desc with - | Tpat_var (id,s) -> - f (id,s,pat.pat_type) - | Tpat_alias(p, id, s) -> + | Tpat_var (id, s, uid) -> + f (id,s,pat.pat_type, uid) + | Tpat_alias(p, id, s, uid, ty) -> iter_bound_idents f p; - f (id,s,pat.pat_type) + f (id, s, ty, uid) | Tpat_or(p1, _, _) -> (* Invariant : both arguments bind the same variables *) iter_bound_idents f p1 @@ -777,7 +837,7 @@ let rev_pat_bound_idents_full pat = !idents_full let rev_only_idents idents_full = - List.rev_map (fun (id,_,_) -> id) idents_full + List.rev_map (fun (id,_,_,_) -> id) idents_full let pat_bound_idents_full pat = List.rev (rev_pat_bound_idents_full pat) @@ -801,14 +861,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, uid) -> (* 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, uid) with | Not_found -> Tpat_any} - | Tpat_alias (p1, id, s) -> - let new_p : k general_pattern = alpha_pat env p1 in + | Tpat_alias (p1, id, s, uid, ty) -> + 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, uid, ty)} with | Not_found -> new_p end @@ -850,6 +910,10 @@ let split_pattern pat = in split_pattern pat +let map_apply_arg f = function + | Arg arg -> Arg (f arg) + | Omitted _ as arg -> arg + (* Expressions are considered nominal if they can be used as the subject of a sentence or action. In practice, we consider that an expression is nominal if they satisfy one of: diff --git a/ocamlmerlin_mlx/ocaml/typing/typedtree.mli b/ocamlmerlin_mlx/ocaml/typing/typedtree.mli index 4f4ca2b..dfabe1f 100644 --- a/ocamlmerlin_mlx/ocaml/typing/typedtree.mli +++ b/ocamlmerlin_mlx/ocaml/typing/typedtree.mli @@ -22,6 +22,7 @@ *) open Asttypes +module Uid = Shape.Uid (* Value expressions for the core language *) @@ -77,20 +78,24 @@ 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 * Uid.t -> value pattern_desc (** x *) | Tpat_alias : - value general_pattern * Ident.t * string loc -> value pattern_desc + value general_pattern * Ident.t * string loc * Uid.t * Types.type_expr -> + value pattern_desc (** P as a *) | Tpat_constant : constant -> value pattern_desc (** 1, 'a', "true", 1.0, 1l, 1L, 1n *) - | Tpat_tuple : value general_pattern list -> value pattern_desc - (** (P1, ..., Pn) + | Tpat_tuple : + (string option * value general_pattern) list -> value pattern_desc + (** (P1, ..., Pn) [(None,P1); ...; (None,Pn)]) + (L1:P1, ... Ln:Pn) [(Some L1,P1); ...; (Some Ln,Pn)]) + Any mix, e.g. (L1:P1, P2) [(Some L1,P1); ...; (None,P2)]) Invariant: n >= 2 *) | Tpat_construct : - Longident.t loc * Types.constructor_description * + Longident.t loc * Data_types.constructor_description * value general_pattern list * (Ident.t loc list * core_type) option -> value pattern_desc (** C ([], None) @@ -110,15 +115,18 @@ and 'k pattern_desc = See {!Types.row_desc} for an explanation of the last parameter. *) | Tpat_record : - (Longident.t loc * Types.label_description * value general_pattern) list * - closed_flag -> - value pattern_desc + (Longident.t loc + * Data_types.label_description + * value general_pattern + ) list + * closed_flag + -> value pattern_desc (** { l1=P1; ...; ln=Pn } (flag = Closed) { l1=P1; ...; ln=Pn; _} (flag = Open) Invariant: n > 0 *) - | Tpat_array : value general_pattern list -> value pattern_desc + | Tpat_array : mutable_flag * value general_pattern list -> value pattern_desc (** [| P1; ...; Pn |] *) | Tpat_lazy : value general_pattern -> value pattern_desc (** lazy P *) @@ -171,7 +179,7 @@ and exp_extra = (** Used for method bodies. *) | Texp_newtype of string (** fun (type t) -> *) - | Texp_newtype' of Ident.t * label loc + | Texp_newtype' of Ident.t * label loc * Uid.t (** merlin-specific: keep enough information to correctly implement occurrences for local-types. Merlin typechecker uses [Texp_newtype'] constructor, while upstream @@ -189,22 +197,21 @@ and expression_desc = (** let P1 = E1 and ... and Pn = EN in E (flag = Nonrecursive) let rec P1 = E1 and ... and Pn = EN in E (flag = Recursive) *) - | Texp_function of { arg_label : arg_label; param : Ident.t; - cases : value case list; partial : partial; } - (** [Pexp_fun] and [Pexp_function] both translate to [Texp_function]. - See {!Parsetree} for more details. - - [param] is the identifier that is to be used to name the - parameter of the function. - - partial = - [Partial] if the pattern match is partial - [Total] otherwise. - *) - | Texp_apply of expression * (arg_label * expression option) list + | Texp_function of function_param list * function_body + (** fun P0 P1 -> function p1 -> e1 | p2 -> e2 (body = Tfunction_cases _) + fun P0 P1 -> E (body = Tfunction_body _) + + This construct has the same arity as the originating + {{!Parsetree.expression_desc.Pexp_function}[Pexp_function]}. + Arity determines when side-effects for effectful parameters are run + (e.g. optional argument defaults, matching against lazy patterns). + Parameters' effects are run left-to-right when an n-ary function is + saturated with n arguments. + *) + | Texp_apply of expression * (arg_label * apply_arg) list (** E0 ~l1:E1 ... ~ln:En - The expression can be None if the expression is abstracted over + The expression can be Omitted if the expression is abstracted over this argument. It currently appears when a label is applied. For example: @@ -213,32 +220,44 @@ and expression_desc = The resulting typedtree for the application is: Texp_apply (Texp_ident "f/1037", - [(Nolabel, None); - (Labelled "y", Some (Texp_constant Const_int 3)) + [(Nolabel, Omitted ()); + (Labelled "y", Arg (Texp_constant Const_int 3)) ]) *) - | Texp_match of expression * computation case list * partial + | Texp_match of expression * computation case list * value case list * partial (** match E0 with | P1 -> E1 | P2 | exception P3 -> E2 | exception P4 -> E3 + | effect P4 k -> E4 [Texp_match (E0, [(P1, E1); (P2 | exception P3, E2); - (exception P4, E3)], _)] + (exception P4, E3)], [(P4, E4)], _)] *) - | Texp_try of expression * value case list - (** try E with P1 -> E1 | ... | PN -> EN *) - | Texp_tuple of expression list - (** (E1, ..., EN) *) + | Texp_try of expression * value case list * value case list + (** try E with + | P1 -> E1 + | effect P2 k -> E2 + [Texp_try (E, [(P1, E1)], [(P2, E2)])] + *) + | Texp_tuple of (string option * expression) list + (** [Texp_tuple(el)] represents + - [(E1, ..., En)] + when [el] is [(None, E1);...;(None, En)], + - [(L1:E1, ..., Ln:En)] + when [el] is [(Some L1, E1);...;(Some Ln, En)], + - Any mix, e.g. [(L1: E1, E2)] + when [el] is [(Some L1, E1); (None, E2)] + *) | Texp_construct of - Longident.t loc * Types.constructor_description * expression list + Longident.t loc * Data_types.constructor_description * expression list (** C [] C E [E] C (E1, ..., En) [E1;...;En] *) | Texp_variant of label * expression option | Texp_record of { - fields : ( Types.label_description * record_label_definition ) array; + fields : ( Data_types.label_description * record_label_definition ) array; representation : Types.record_representation; extended_expression : expression option; } @@ -253,10 +272,13 @@ and expression_desc = { fields = [| l1, Kept t1; l2 Override P2 |]; representation; extended_expression = Some E0 } *) - | Texp_field of expression * Longident.t loc * Types.label_description + | Texp_atomic_loc of + expression * Longident.t loc * Data_types.label_description + | Texp_field of + expression * Longident.t loc * Data_types.label_description | Texp_setfield of - expression * Longident.t loc * Types.label_description * expression - | Texp_array of expression list + expression * Longident.t loc * Data_types.label_description * expression + | Texp_array of mutable_flag * expression list | Texp_ifthenelse of expression * expression * expression option | Texp_sequence of expression * expression | Texp_while of expression * expression @@ -287,7 +309,7 @@ and expression_desc = | Texp_extension_constructor of Longident.t loc * Path.t | Texp_open of open_declaration * expression (** let open[!] M in e *) - | Texp_hole + | Texp_typed_hole and meth = Tmeth_name of string @@ -297,10 +319,59 @@ and meth = and 'k case = { c_lhs: 'k general_pattern; + c_cont: (Ident.t * Types.value_description) option; c_guard: expression option; c_rhs: expression; } +and function_param = + { + fp_arg_label: arg_label; + fp_param: Ident.t; + (** [fp_param] is the identifier that is to be used to name the + parameter of the function. + *) + fp_partial: partial; + (** + [fp_partial] = + [Partial] if the pattern match is partial + [Total] otherwise. + *) + fp_kind: function_param_kind; + fp_newtypes: string loc list; + (** [fp_newtypes] are the new type declarations that come *after* that + parameter. The newtypes that come before the first parameter are + placed as exp_extras on the Texp_function node. This is just used in + {!Untypeast}. *) + fp_loc: Location.t; + (** [fp_loc] is the location of the entire value parameter, not including + the [fp_newtypes]. + *) + } + +and function_param_kind = + | Tparam_pat of pattern + (** [Tparam_pat p] is a non-optional argument with pattern [p]. *) + | Tparam_optional_default of pattern * expression + (** [Tparam_optional_default (p, e)] is an optional argument [p] with default + value [e], i.e. [?x:(p = e)]. If the parameter is of type [a option], the + pattern and expression are of type [a]. *) + +and function_body = + | Tfunction_body of expression + | Tfunction_cases of + { cases: value case list; + partial: partial; + param: Ident.t; + loc: Location.t; + exp_extra: exp_extra option; + attributes: attributes; + (** [attributes] is just used in untypeast. *) + } +(** The function body binds a final argument in [Tfunction_cases], + and this argument is pattern-matched against the cases. +*) + and record_label_definition = | Kept of Types.type_expr * mutable_flag | Overridden of Longident.t loc * expression @@ -317,6 +388,12 @@ and binding_op = bop_loc : Location.t; } +and ('a, 'b) arg_or_omitted = + | Arg of 'a + | Omitted of 'b + +and apply_arg = (expression, unit) arg_or_omitted + (* Value expressions for the class language *) and class_expr = @@ -334,7 +411,7 @@ and class_expr_desc = | Tcl_fun of arg_label * pattern * (Ident.t * expression) list * class_expr * partial - | Tcl_apply of class_expr * (arg_label * expression option) list + | Tcl_apply of class_expr * (arg_label * apply_arg) list | Tcl_let of rec_flag * value_binding list * (Ident.t * expression) list * class_expr | Tcl_constraint of @@ -406,7 +483,7 @@ and module_expr_desc = (ME : MT) (constraint = Tmodtype_explicit MT) *) | Tmod_unpack of expression * Types.module_type - | Tmod_hole + | Tmod_typed_hole and structure = { str_items : structure_item list; @@ -438,8 +515,9 @@ and structure_item_desc = and module_binding = { - mb_id: Ident.t option; + mb_id: Ident.t option; (** [None] for [module _ = struct ... end] *) mb_name: string option loc; + mb_uid: Uid.t; mb_presence: Types.module_presence; mb_expr: module_expr; mb_attributes: attributes; @@ -450,6 +528,7 @@ and value_binding = { vb_pat: pattern; vb_expr: expression; + vb_rec_kind: Value_rec_types.recursive_binding_kind; vb_attributes: attributes; vb_loc: Location.t; } @@ -460,7 +539,19 @@ and module_coercion = (Ident.t * int * module_coercion) list | Tcoerce_functor of module_coercion * module_coercion | Tcoerce_primitive of primitive_coercion + (** External declaration coerced to a regular value. + {[ + module M : sig val ext : a -> b end = + struct external ext : a -> b = "my_c_function" end + ]} + Only occurs inside a [Tcoerce_structure] coercion. *) | Tcoerce_alias of Env.t * Path.t * module_coercion + (** Module alias coerced to a regular module. + {[ + module M : sig module Sub : T end = + struct module Sub = Some_alias end + ]} + Only occurs inside a [Tcoerce_structure] coercion. *) and module_type = { mty_desc: module_type_desc; @@ -518,6 +609,7 @@ and module_declaration = { md_id: Ident.t option; md_name: string option loc; + md_uid: Uid.t; md_presence: Types.module_presence; md_type: module_type; md_attributes: attributes; @@ -528,6 +620,7 @@ and module_substitution = { ms_id: Ident.t; ms_name: string loc; + ms_uid: Uid.t; ms_manifest: Path.t; ms_txt: Longident.t loc; ms_attributes: attributes; @@ -538,6 +631,7 @@ and module_type_declaration = { mtd_id: Ident.t; mtd_name: string loc; + mtd_uid: Uid.t; mtd_type: module_type option; mtd_attributes: attributes; mtd_loc: Location.t; @@ -592,20 +686,21 @@ and core_type_desc = Ttyp_any | Ttyp_var of string | Ttyp_arrow of arg_label * core_type * core_type - | Ttyp_tuple of core_type list + | Ttyp_tuple of (string option * core_type) list | Ttyp_constr of Path.t * Longident.t loc * core_type list | Ttyp_object of object_field list * closed_flag | Ttyp_class of Path.t * Longident.t loc * core_type list - | Ttyp_alias of core_type * string + | Ttyp_alias of core_type * string loc | Ttyp_variant of row_field list * closed_flag * label list option | Ttyp_poly of string list * core_type | Ttyp_package of package_type + | Ttyp_open of Path.t * Longident.t loc * core_type and package_type = { - pack_path : Path.t; - pack_fields : (Longident.t loc * core_type) list; - pack_type : Types.module_type; - pack_txt : Longident.t loc; + tpt_path : Path.t; + tpt_cstrs : (Longident.t loc * core_type) list; + tpt_type : Types.module_type; + tpt_txt : Longident.t loc; } and row_field = { @@ -662,7 +757,9 @@ and label_declaration = { ld_id: Ident.t; ld_name: string loc; + ld_uid: Uid.t; ld_mutable: mutable_flag; + ld_atomic: atomic_flag; ld_type: core_type; ld_loc: Location.t; ld_attributes: attributes; @@ -672,6 +769,7 @@ and constructor_declaration = { cd_id: Ident.t; cd_name: string loc; + cd_uid: Uid.t; cd_vars: string loc list; cd_args: constructor_arguments; cd_res: core_type option; @@ -788,6 +886,23 @@ type implementation = { structure. *) +type item_declaration = + | Value of value_description + | Value_binding of value_binding + | Type of type_declaration + | Constructor of constructor_declaration + | Extension_constructor of extension_constructor + | Label of label_declaration + | Module of module_declaration + | Module_substitution of module_substitution + | Module_binding of module_binding + | Module_type of module_type_declaration + | Class of class_declaration + | Class_type of class_type_declaration +(** [item_declaration] groups together items that correspond to the syntactic + category of "declarations" which include types, values, modules, etc. + declarations in signatures and their definitions in implementations. *) + (* Auxiliary functions over the a.s.t. *) (** [as_computation_pattern p] is a computation pattern with description @@ -818,7 +933,8 @@ val exists_pattern: (pattern -> bool) -> pattern -> bool val let_bound_idents: value_binding list -> Ident.t list val let_bound_idents_full: - value_binding list -> (Ident.t * string loc * Types.type_expr) list + value_binding list -> + (Ident.t * string loc * Types.type_expr * Types.Uid.t) list (** Alpha conversion of patterns *) val alpha_pat: @@ -829,12 +945,16 @@ val mkloc: 'a -> Location.t -> 'a Asttypes.loc val pat_bound_idents: 'k general_pattern -> Ident.t list val pat_bound_idents_full: - 'k general_pattern -> (Ident.t * string loc * Types.type_expr) list + 'k general_pattern -> + (Ident.t * string loc * Types.type_expr * Types.Uid.t) list (** Splits an or pattern into its value (left) and exception (right) parts. *) val split_pattern: computation general_pattern -> pattern option * pattern option +val map_apply_arg: + ('a -> ' b) -> ('a, 'omitted) arg_or_omitted -> ('b, 'omitted) arg_or_omitted + (** Whether an expression looks nice as the subject of a sentence in a error message. *) val exp_is_nominal : expression -> bool diff --git a/ocamlmerlin_mlx/ocaml/typing/typemod.ml b/ocamlmerlin_mlx/ocaml/typing/typemod.ml index 201b78c..8e324a7 100644 --- a/ocamlmerlin_mlx/ocaml/typing/typemod.ml +++ b/ocamlmerlin_mlx/ocaml/typing/typemod.ml @@ -19,7 +19,9 @@ open Path open Asttypes open Parsetree open Types -open Format +open Format_doc + +module Style = Misc.Style let () = Includemod_errorprinter.register () @@ -56,6 +58,7 @@ type error = Longident.t * Path.t * Includemod.explanation | With_changes_module_alias of Longident.t * Ident.t * Path.t | With_cannot_remove_constrained_type + | With_package_manifest of Longident.t * type_expr | Repeated_name of Sig_component_kind.t * string | Non_generalizable of { vars : type_expr list; expression : type_expr } | Non_generalizable_module of @@ -73,8 +76,9 @@ type error = | Badly_formed_signature of string * Typedecl.error | Cannot_hide_id of hiding_error | Invalid_type_subst_rhs - | Unpackable_local_modtype_subst of Path.t + | Non_packable_local_modtype_subst of Path.t | With_cannot_remove_packed_modtype of Path.t * module_type + | Cannot_alias of Path.t exception Error of Location.t * Env.t * error exception Error_forward of Location.error @@ -143,7 +147,7 @@ let initial_env ~loc ~initially_opened_module env in let units = - List.map Env.persistent_structures_of_dir (Load_path.get ()) + List.map Env.persistent_structures_of_dir (Load_path.get_visible ()) in let env, units = match initially_opened_module with @@ -237,7 +241,7 @@ let check_type_decl env sg loc id row_id newdecl decl = | Some fresh_row_id -> Env.add_type ~check:false fresh_row_id newdecl env in let env = Env.add_signature sg env in - Includemod.type_declarations ~mark:Mark_both ~loc env fresh_id newdecl decl; + Includemod.type_declarations ~mark:true ~loc env fresh_id newdecl decl; Typedecl.check_coherence env loc path newdecl let make_variance p n i = @@ -270,9 +274,8 @@ let path_is_strict_prefix = Ident.same ident1 ident2 && list_is_strict_prefix l1 ~prefix:l2 -let iterator_with_env env = +let iterator_with_env super env = let env = ref (lazy env) in - let super = Btype.type_iterators in env, { super with Btype.it_signature = (fun self sg -> (* add all items to the env before recursing down, to handle recursive @@ -350,22 +353,9 @@ let check_usage_of_path_of_substituted_item paths ~loc ~lid env super = ); } -(* When doing a module type destructive substitution [with module type T = RHS] - where RHS is not a module type path, we need to check that the module type - T was not used as a path for a packed module -*) -let check_usage_of_module_types ~error ~paths ~loc env super = - let it_do_type_expr it ty = match get_desc ty with - | Tpackage (p, _) -> - begin match List.find_opt (Path.same p) paths with - | Some p -> raise (Error(loc,Lazy.force !env,error p)) - | _ -> super.Btype.it_do_type_expr it ty - end - | _ -> super.Btype.it_do_type_expr it ty in - { super with Btype.it_do_type_expr } - -let do_check_after_substitution env ~loc ~lid paths unpackable_modtype sg = - let env, iterator = iterator_with_env env in +let do_check_after_substitution env ~loc ~lid paths sg = + with_type_mark begin fun mark -> + let env, iterator = iterator_with_env (Btype.type_iterators mark) env in let last, rest = match List.rev paths with | [] -> assert false | last :: rest -> last, rest @@ -378,19 +368,13 @@ let do_check_after_substitution env ~loc ~lid paths unpackable_modtype sg = | _ :: _ -> check_usage_of_path_of_substituted_item rest ~loc ~lid env iterator in - let iterator = match unpackable_modtype with - | None -> iterator - | Some mty -> - let error p = With_cannot_remove_packed_modtype(p,mty) in - check_usage_of_module_types ~error ~paths ~loc env iterator - in - iterator.Btype.it_signature iterator sg; - Btype.(unmark_iterators.it_signature unmark_iterators) sg + iterator.Btype.it_signature iterator sg + end -let check_usage_after_substitution env ~loc ~lid paths unpackable_modtype sg = - match paths, unpackable_modtype with - | [_], None -> () - | _ -> do_check_after_substitution env ~loc ~lid paths unpackable_modtype sg +let check_usage_after_substitution env ~loc ~lid paths sg = + match paths with + | [_] -> () + | _ -> do_check_after_substitution env ~loc ~lid paths sg (* After substitution one also needs to re-check the well-foundedness of type declarations in recursive modules *) @@ -419,9 +403,9 @@ let check_well_formed_module env loc context mty = | _ :: rem -> check_signature env rem in - let env, super = iterator_with_env env in + let env, super = + iterator_with_env Btype.type_iterators_without_type_expr env in { super with - it_type_expr = (fun _self _ty -> ()); it_signature = (fun self sg -> let env_before = !env in let env = lazy (Env.add_signature sg (Lazy.force env_before)) in @@ -461,7 +445,8 @@ let params_are_constrained = in loop -type with_info = +type merge_constraint = + (* Normal merging cases that returns a typed tree *) | With_type of Parsetree.type_declaration | With_typesubst of Parsetree.type_declaration | With_module of { @@ -474,14 +459,39 @@ type with_info = | With_modtype of Typedtree.module_type | With_modtypesubst of Typedtree.module_type -let merge_constraint initial_env loc sg lid constr = + (* Package with type constraints only use this last case. *) + | With_type_package of Typedtree.core_type + + (* Merging of module types during signature approximation *) + | Approx_with_modtype of Types.module_type + | Approx_with_modtypesubst of Types.module_type + +type merge_result = Path.t * merge_info * Types.signature +and merge_info = + (* Result of normal merging *) + | Built_TypedTree of { + lid: Longident.t Asttypes.loc ; + constr : Typedtree.with_constraint + } + (* Result of merging a package_type or merging approximated module types + (without typedtree) *) + | No_TypedTree + +let merge_constraint_aux initial_env loc sg lid constr : merge_result = let destructive_substitution = match constr with - | With_type _ | With_module _ | With_modtype _ -> false - | With_typesubst _ | With_modsubst _ | With_modtypesubst _ -> true + | With_type _ | With_module _ | With_modtype _ + | Approx_with_modtype _ + | With_type_package _ -> false + | With_typesubst _ | With_modsubst _ | With_modtypesubst _ + | Approx_with_modtypesubst _ -> true + in + let approx_substitution = + match constr with + | Approx_with_modtype _ | Approx_with_modtypesubst _ -> true + | _ -> false in let real_ids = ref [] in - let unpackable_modtype = ref None in let split_row_id s ghosts = let srow = s ^ "#row" in let rec split before = function @@ -492,10 +502,47 @@ let merge_constraint initial_env loc sg lid constr = in split [] ghosts in + let unsafe_signature_subst sub sg = + (* 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. *) + match Subst.Unsafe.signature Make_local sub sg with + | Ok x -> x + | Error (Fcm_type_substituted_away (p,mty)) -> + let error = With_cannot_remove_packed_modtype(p,mty) in + raise (Error(loc,initial_env,error)) + in let rec patch_item constr namelist outer_sig_env sg_for_env ~ghosts item = let return ?(ghosts=ghosts) ~replace_by info = Some (info, {Signature_group.ghosts; replace_by}) in + let patch_modtype_item + id (mtd: Types.modtype_declaration) priv mty = + let sig_env = Env.add_signature sg_for_env outer_sig_env in + (* Check for equivalence if the previous module type was not empty. During + approximation, the equivalence check is ignored. *) + let () = match approx_substitution, mtd.mtd_type with + | false, Some previous_mty -> + Includemod.check_modtype_equiv ~loc sig_env + id previous_mty mty + | _ -> () + in + if not destructive_substitution then + let mtd': modtype_declaration = + { + mtd_uid = Uid.mk ~current_unit:(Env.get_current_unit ()); + mtd_type = Some mty; + mtd_attributes = []; + mtd_loc = loc; + } + in Some(Sig_modtype(id, mtd', priv)) + else begin + let path = Pident id in + real_ids := [path]; + None + end + in match item, namelist, constr with | Sig_type(id, decl, rs, priv), [s], With_type ({ptype_kind = Ptype_abstract} as sdecl) @@ -506,7 +553,7 @@ let merge_constraint initial_env loc sg lid constr = type_params = List.map (fun _ -> Btype.newgenvar()) sdecl.ptype_params; type_arity = arity; - type_kind = Type_abstract; + type_kind = Type_abstract Definition; type_private = Private; type_manifest = None; type_variance = @@ -517,6 +564,7 @@ let merge_constraint initial_env loc sg lid constr = | Covariant -> true, false | Contravariant -> false, true | NoVariance -> false, false + | Bivariant -> true, true in make_variance (not n) (not c) (i = Injective) ) @@ -529,7 +577,7 @@ let merge_constraint initial_env loc sg lid constr = type_attributes = []; type_immediate = Unknown; type_unboxed_default = false; - type_uid = Uid.mk ~current_unit:(Env.get_unit_name ()); + type_uid = Uid.mk ~current_unit:(Env.get_current_unit ()); } and id_row = Ident.create_local (s^"#row") in let initial_env = @@ -551,9 +599,9 @@ let merge_constraint initial_env loc sg lid constr = in return ~ghosts ~replace_by:(Some (Sig_type(id, newdecl, rs, priv))) - (Pident id, lid, Twith_type tdecl) + (Pident id, Built_TypedTree {lid=lid; constr=Twith_type tdecl} ) | Sig_type(id, sig_decl, rs, priv) , [s], - (With_type sdecl | With_typesubst sdecl as constr) + (With_type sdecl | With_typesubst sdecl) when Ident.name id = s -> let sig_env = Env.add_signature sg_for_env outer_sig_env in let tdecl = @@ -564,47 +612,49 @@ let merge_constraint initial_env loc sg lid constr = let ghosts = List.rev_append before_ghosts after_ghosts in check_type_decl outer_sig_env sg_for_env loc id row_id newdecl sig_decl; - begin match constr with - With_type _ -> - return ~ghosts - ~replace_by:(Some(Sig_type(id, newdecl, rs, priv))) - (Pident id, lid, Twith_type tdecl) - | (* With_typesubst *) _ -> - real_ids := [Pident id]; - return ~ghosts ~replace_by:None - (Pident id, lid, Twith_typesubst tdecl) + if not destructive_substitution then + return ~ghosts + ~replace_by:(Some(Sig_type(id, newdecl, rs, priv))) + (Pident id, Built_TypedTree { + lid=lid; constr=(Twith_type tdecl)}) + else begin + real_ids := [Pident id]; + return ~ghosts ~replace_by:None + (Pident id, Built_TypedTree { + lid=lid; constr=(Twith_typesubst tdecl)}) end + | Sig_type(id, sig_decl, rs, priv), [s], With_type_package cty + when Ident.name id = s -> + begin match sig_decl.type_manifest with + | None -> () + | Some ty -> + raise (Error(loc, outer_sig_env, With_package_manifest (lid.txt, ty))) + end; + Env.mark_type_used sig_decl.type_uid; + let tdecl = + Typedecl.transl_package_constraint ~loc outer_sig_env cty.ctyp_type + in + check_type_decl outer_sig_env sg_for_env loc id None tdecl sig_decl; + let tdecl = { tdecl with type_manifest = None } in + return ~ghosts ~replace_by:(Some(Sig_type(id, tdecl, rs, priv))) + (Pident id, No_TypedTree) | Sig_modtype(id, mtd, priv), [s], (With_modtype mty | With_modtypesubst mty) when Ident.name id = s -> - let sig_env = Env.add_signature sg_for_env outer_sig_env in - let () = match mtd.mtd_type with - | None -> () - | Some previous_mty -> - Includemod.check_modtype_equiv ~loc sig_env - id previous_mty mty.mty_type + let new_item = patch_modtype_item id mtd priv mty.mty_type in + let constr_tt = + if not destructive_substitution then + (Twith_modtype mty) + else + (Twith_modtypesubst mty) in - if not destructive_substitution then - let mtd': modtype_declaration = - { - mtd_uid = Uid.mk ~current_unit:(Env.get_unit_name ()); - mtd_type = Some mty.mty_type; - mtd_attributes = []; - mtd_loc = loc; - } - in - return - ~replace_by:(Some(Sig_modtype(id, mtd', priv))) - (Pident id, lid, Twith_modtype mty) - else begin - let path = Pident id in - real_ids := [path]; - begin match mty.mty_type with - | Mty_ident _ -> () - | mty -> unpackable_modtype := Some mty - end; - return ~replace_by:None (Pident id, lid, Twith_modtypesubst mty) - end + return ~replace_by:new_item + (Pident id, Built_TypedTree {lid; constr=constr_tt}) + | Sig_modtype(id, mtd, priv), [s], + (Approx_with_modtype mty | Approx_with_modtypesubst mty) + when Ident.name id = s -> + let new_item = patch_modtype_item id mtd priv mty in + return ~replace_by:new_item (Pident id, No_TypedTree) | Sig_module(id, pres, md, rs, priv), [s], With_module {lid=lid'; md=md'; path; remove_aliases} when Ident.name id = s -> @@ -613,55 +663,67 @@ let merge_constraint initial_env loc sg lid constr = let mty = Mtype.scrape_for_type_of ~remove_aliases sig_env mty in let md'' = { md' with md_type = mty } in let newmd = Mtype.strengthen_decl ~aliasable:false sig_env md'' path in - ignore(Includemod.modtypes ~mark:Mark_both ~loc sig_env + ignore(Includemod.modtypes ~mark:true ~loc sig_env newmd.md_type md.md_type); return ~replace_by:(Some(Sig_module(id, pres, newmd, rs, priv))) - (Pident id, lid, Twith_module (path, lid')) + (Pident id, Built_TypedTree { + lid=lid; constr=(Twith_module (path, lid'))}) | Sig_module(id, _, md, _rs, _), [s], With_modsubst (lid',path,md') when Ident.name id = s -> let sig_env = Env.add_signature sg_for_env outer_sig_env in let aliasable = not (Env.is_functor_arg path sig_env) in ignore - (Includemod.strengthened_module_decl ~loc ~mark:Mark_both + (Includemod.strengthened_module_decl ~loc ~mark:true ~aliasable sig_env md' path md); real_ids := [Pident id]; - return ~replace_by:None (Pident id, lid, Twith_modsubst (path, lid')) - | Sig_module(id, _, md, rs, priv) as item, s :: namelist, constr + return ~replace_by:None + (Pident id, Built_TypedTree { + lid=lid; constr=(Twith_modsubst (path, lid'))}) + + (* When the constraint affects a component of a submodule *) + | Sig_module(id, _, md, rs, priv) as current_item, s :: namelist, _ when Ident.name id = s -> let sig_env = Env.add_signature sg_for_env outer_sig_env in let sg = extract_sig sig_env loc md.md_type in - let ((path, _, tcstr), newsg) = merge_signature sig_env sg namelist in - let path = path_concat id path in - real_ids := path :: !real_ids; - let item = - match md.md_type, constr with - Mty_alias _, (With_module _ | With_type _) -> - (* A module alias cannot be refined, so keep it - and just check that the constraint is correct *) - item - | _ -> - let newmd = {md with md_type = Mty_signature newsg} in - Sig_module(id, Mp_present, newmd, rs, priv) - in - return ~replace_by:(Some item) (path, lid, tcstr) + let subpath, merge_info, newsg = merge_signature sig_env sg namelist in + let path = path_concat id subpath in + real_ids := path :: !real_ids ; + begin match md.md_type, merge_info with + (* A module alias cannot be refined, so keep it + and just check that the constraint is correct *) + | Mty_alias _, Built_TypedTree + { lid; constr = (Twith_module _ + | Twith_type _ + | Twith_modtype _) as tcstr } -> + return ~replace_by:(Some current_item) + (path, Built_TypedTree { lid; constr=tcstr} ) + | _, Built_TypedTree { lid; constr } -> + let new_md = {md with md_type = Mty_signature newsg} in + let new_item = Sig_module(id, Mp_present, new_md, rs, priv) in + return ~replace_by:(Some new_item) + (path, Built_TypedTree {lid; constr}) + | _, No_TypedTree -> + let new_md = {md with md_type = Mty_signature newsg} in + let new_item = Sig_module(id, Mp_present, new_md, rs, priv) in + return ~replace_by:(Some new_item) (path, No_TypedTree) + end | _ -> None and merge_signature env sg namelist = match Signature_group.replace_in_place (patch_item constr namelist env sg) sg with - | Some (x,sg) -> x, sg + | Some ((path, res), sg) -> path, res, sg | None -> raise(Error(loc, env, With_no_component lid.txt)) in try let names = Longident.flatten lid.txt in - let (tcstr, sg) = merge_signature initial_env sg names in + let (path, merge_info, sg) = merge_signature initial_env sg names in if destructive_substitution then - check_usage_after_substitution ~loc ~lid initial_env !real_ids - !unpackable_modtype sg; + check_usage_after_substitution ~loc ~lid initial_env !real_ids sg; let sg = - match tcstr with - | (_, _, Twith_typesubst tdecl) -> + match merge_info, constr with + | Built_TypedTree {constr=Twith_typesubst tdecl},_ -> let how_to_extend_subst = let sdecl = match constr with @@ -674,46 +736,82 @@ let merge_constraint initial_env loc sg lid constr = 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 + fun s path -> Subst.Unsafe.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 + fun s path -> Subst.Unsafe.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, _)) -> + unsafe_signature_subst sub sg + | Built_TypedTree {constr=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) + (fun s path -> Subst.Unsafe.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 + unsafe_signature_subst sub sg + | Built_TypedTree {constr=Twith_modtypesubst {mty_type=mty}}, _ + | _, Approx_with_modtypesubst mty -> + let add s p = Subst.Unsafe.add_modtype_path p mty 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 + unsafe_signature_subst sub sg | _ -> sg in check_well_formed_module initial_env loc "this instantiated signature" (Mty_signature sg); - (tcstr, sg) + (path, merge_info, sg) with Includemod.Error explanation -> raise(Error(loc, initial_env, With_mismatch(lid.txt, explanation))) +(* Normal merge function - build the typed tree *) +let merge_constraint env loc sg lid cty = + match merge_constraint_aux env loc sg lid cty with + | path, Built_TypedTree { lid; constr }, newsg -> + (path, lid, constr, newsg) + | _, No_TypedTree, _ -> assert false + +(* Specialized merge function for package types *) +let merge_package_constraint env loc sg lid cty = + match merge_constraint_aux env loc sg lid (With_type_package cty) with + | _, No_TypedTree, newsg -> newsg + | _, Built_TypedTree _, _ -> assert false + +let check_package_with_type_constraints loc env mty constraints = + let sg = extract_sig env loc mty in + let sg = + List.fold_left + (fun sg (lid, cty) -> + merge_package_constraint env loc sg lid cty) + sg constraints + in + let scope = Ctype.create_scope () in + Mtype.freshen ~scope (Mty_signature sg) + +let () = + Typetexp.check_package_with_type_constraints := + check_package_with_type_constraints + +(* Specialized merge function for merging during signature approximation *) +let merge_constraint_approx env loc sg lid mty ~destructive = + let constr = + if not destructive then + Approx_with_modtype mty + else + Approx_with_modtypesubst mty + in + match merge_constraint_aux env loc sg lid constr with + | _, No_TypedTree, newsg -> newsg + | _, Built_TypedTree _, _ -> assert false + (* Add recursion flags on declarations arising from a mutually recursive block. *) @@ -788,24 +886,26 @@ let rec approx_modtype env smty = let res = approx_modtype newenv sres in Mty_functor(param, res) | Pmty_with(sbody, constraints) -> - let body = approx_modtype env sbody in - List.iter - (fun sdecl -> - match sdecl with - | Pwith_type _ - | Pwith_typesubst _ - | Pwith_modtype _ - | Pwith_modtypesubst _ -> () - | Pwith_module (_, lid') -> - (* Lookup the module to make sure that it is not recursive. - (GPR#1626) *) - ignore (Env.lookup_module_path ~use:false ~load:false - ~loc:lid'.loc lid'.txt env) - | Pwith_modsubst (_, lid') -> - ignore (Env.lookup_module_path ~use:false ~load:false - ~loc:lid'.loc lid'.txt env)) - constraints; - body + (* the module type body is approximated and resolved to a signature.*) + let approx_body = approx_modtype env sbody in + let initial_sig = extract_sig env sbody.pmty_loc approx_body in + (* then, the constraints are approximated and merged, instead of merged + and approximated. For (1) type constraints, (2) module constraints and + (3) module type constraints replacing an abstract module type, it + should be equivalent. + + However, for module type constraints replacing a concrete module type, + approximating the constraint and the body before merging can interact + with the equivalence check that is done between the constraint and the + original definition. As approximation only tries to build a skeleton of + non-recursive module types that can be used as an under-approximation + of the name-spaces for the typechecking phase, the equivalence check is + disabled, allowing for ill-formed constraints to be merged. It is + should be harmless, because the ill-formedness is caught when + re-typechecking the module types (with the approximation in the + environment). *) + Mty_signature (List.fold_left + (approx_constraint env) initial_sig constraints) | Pmty_typeof smod -> let (_, mty) = !type_module_type_of_fwd env smod in mty @@ -927,7 +1027,30 @@ and approx_modtype_info env sinfo = mtd_attributes = sinfo.pmtd_attributes; mtd_loc = sinfo.pmtd_loc; mtd_uid = Uid.internal_not_actually_unique; - } + } + +and approx_constraint env body constr = + match constr with + (* type substitutions are ignored *) + | Pwith_type _ + | Pwith_typesubst _ -> body + (* module type substitutions are approximated then merged *) + | Pwith_modtype (id, smty) + | Pwith_modtypesubst (id, smty) -> + let destructive = + (match constr with | Pwith_modtypesubst _ -> true | _ -> false) in + let approx_smty = approx_modtype env smty in + merge_constraint_approx ~destructive + env smty.pmty_loc body id approx_smty + (* module substitutions are ignored, but checked for cyclicity *) + | Pwith_module (_, lid') -> + (* Lookup the module to make sure that it is not recursive. + (GPR#1626) *) + ignore (Env.lookup_module_path ~use:false ~load:false + ~loc:lid'.loc lid'.txt env) ; body + | Pwith_modsubst (_, lid') -> + ignore (Env.lookup_module_path ~use:false ~load:false + ~loc:lid'.loc lid'.txt env) ; body let approx_modtype env smty = Warnings.without_warnings @@ -954,8 +1077,7 @@ module Signature_names : sig | `Exported | `From_open | `Shadowable of shadowable - | `Substituted_away of Subst.t - | `Unpackable_modtype_substituted_away of Ident.t * Subst.t + | `Substituted_away of Subst.Unsafe.t ] val create : unit -> t @@ -991,8 +1113,7 @@ end = struct type info = [ | `From_open - | `Substituted_away of Subst.t - | `Unpackable_modtype_substituted_away of Ident.t * Subst.t + | `Substituted_away of Subst.Unsafe.t | bound_info ] @@ -1001,9 +1122,8 @@ end = struct | Shadowed_by of Ident.t * Location.t type to_be_removed = { - mutable subst: Subst.t; + mutable subst: Subst.Unsafe.t; mutable hide: (Sig_component_kind.t * Location.t * hide_reason) Ident.Map.t; - mutable unpackable_modtypes: Ident.Set.t; } type names_infos = (string, bound_info) Hashtbl.t @@ -1038,7 +1158,6 @@ end = struct to_be_removed = { subst = Subst.identity; hide = Ident.Map.empty; - unpackable_modtypes = Ident.Set.empty; }; } @@ -1046,22 +1165,27 @@ end = struct let open Sig_component_kind in match component with | Value -> names.values - | Type -> names.types + | Type | Label | Constructor -> names.types | Module -> names.modules | Module_type -> names.modtypes | Extension_constructor -> names.typexts | Class -> names.classes | Class_type -> names.class_types + let check_unsafe_subst loc env: _ result -> _ = function + | Ok x -> x + | Error (Subst.Unsafe.Fcm_type_substituted_away (p,_)) -> + raise (Error (loc, env, Non_packable_local_modtype_subst p)) + let check cl t loc id (info : info) = let to_be_removed = t.to_be_removed in match info with | `Substituted_away s -> - to_be_removed.subst <- Subst.compose s to_be_removed.subst; - | `Unpackable_modtype_substituted_away (id,s) -> - to_be_removed.subst <- Subst.compose s to_be_removed.subst; - to_be_removed.unpackable_modtypes <- - Ident.Set.add id to_be_removed.unpackable_modtypes + let subst = + check_unsafe_subst loc Env.empty @@ + Subst.Unsafe.compose s to_be_removed.subst + in + to_be_removed.subst <- subst; | `From_open -> to_be_removed.hide <- Ident.Map.add id (cl, loc, From_open) to_be_removed.hide @@ -1131,31 +1255,6 @@ end = struct thus never appear in includes *) List.iter (check ?info names loc) (Signature_group.rec_items item.group) - (* - Before applying local module type substitutions where the - right-hand side is not a path, we need to check that those module types - where never used to pack modules. For instance - {[ - module type T := sig end - val x: (module T) - ]} - should raise an error. - *) - let check_unpackable_modtypes ~loc ~env to_remove component = - if not (Ident.Set.is_empty to_remove.unpackable_modtypes) then begin - let iterator = - let error p = Unpackable_local_modtype_subst p in - let paths = - List.map (fun id -> Pident id) - (Ident.Set.elements to_remove.unpackable_modtypes) - in - check_usage_of_module_types ~loc ~error ~paths - (ref (lazy env)) Btype.type_iterators - in - iterator.Btype.it_signature_item iterator component; - Btype.(unmark_iterators.it_signature_item unmark_iterators) component - end - (* We usually require name uniqueness of signature components (e.g. types, modules, etc), however in some situation reusing the name is allowed: if the component is a value or an extension, or if the name is introduced by @@ -1166,7 +1265,6 @@ end = struct If some reference cannot be removed, then we error out with [Cannot_hide_id]. *) - let simplify env t sg = let to_remove = t.to_be_removed in let ids_to_remove = @@ -1196,10 +1294,8 @@ end = struct if to_remove.subst == Subst.identity then component else - begin - check_unpackable_modtypes ~loc:user_loc ~env to_remove component; - Subst.signature_item Keep to_remove.subst component - end + check_unsafe_subst user_loc env @@ + Subst.Unsafe.signature_item Keep to_remove.subst component in let component = match ids_to_remove with @@ -1243,8 +1339,7 @@ end let has_remove_aliases_attribute attr = let remove_aliases = - Attr_helper.get_no_payload_attribute - ["remove_aliases"; "ocaml.remove_aliases"] attr + Attr_helper.get_no_payload_attribute "remove_aliases" attr in match remove_aliases with | None -> false @@ -1315,7 +1410,7 @@ and transl_modtype_aux env smty = { md_type = arg.mty_type; md_attributes = []; md_loc = param.loc; - md_uid = Uid.mk ~current_unit:(Env.get_unit_name ()); + md_uid = Uid.mk ~current_unit:(Env.get_current_unit ()); } in Env.enter_module_declaration ~scope ~arg:true name Mp_present @@ -1364,10 +1459,8 @@ and transl_with ~loc env remove_aliases (rev_tcstrs,sg) constr = let mty = transl_modtype env smty in l, With_modtypesubst mty in - let (tcstr, sg) = merge_constraint env loc sg lid with_info in - (tcstr :: rev_tcstrs, sg) - - + let (path, lid, constr, sg) = merge_constraint env loc sg lid with_info in + ((path, lid, constr) :: rev_tcstrs, sg) and transl_signature ?(keep_warnings = false) env sg = let names = Signature_names.create () in @@ -1383,7 +1476,6 @@ and transl_signature ?(keep_warnings = false) env sg = Typedecl.transl_value_decl env item.psig_loc sdesc in Signature_names.check_value names tdesc.val_loc tdesc.val_id; - Env.register_uid tdesc.val_val.val_uid tdesc.val_loc; res with | (tdesc, newenv) -> @@ -1397,17 +1489,15 @@ and transl_signature ?(keep_warnings = false) env sg = end | Psig_type (rec_flag, sdecls) -> begin match - let (decls, _) as res = + let (decls, _, _) as res = Typedecl.transl_type_decl env rec_flag sdecls in List.iter (fun td -> Signature_names.check_type names td.typ_loc td.typ_id; - if not (Btype.is_row_name (Ident.name td.typ_id)) then - Env.register_uid td.typ_type.type_uid td.typ_loc ) decls; res with - | (decls, newenv) -> + | (decls, newenv, _) -> let newenv = Env.update_short_paths newenv in let (trem, rem, final_env) = transl_sig newenv srem in let sg = @@ -1432,7 +1522,7 @@ and transl_signature ?(keep_warnings = false) env sg = once we have nice error messages there. *) raise (Error (td.ptype_loc, env, Invalid_type_subst_rhs)) ) sdecls; - let (decls, _) as res = + let (decls, _, _) as res = Typedecl.transl_type_decl env Nonrecursive sdecls in List.iter (fun td -> @@ -1441,19 +1531,18 @@ and transl_signature ?(keep_warnings = false) env sg = then raise(Error(loc, env, With_cannot_remove_constrained_type)); let info = let subst = - Subst.add_type_function (Pident td.typ_id) + Subst.Unsafe.add_type_function (Pident td.typ_id) ~params ~body:(Option.get td.typ_type.type_manifest) Subst.identity in Some (`Substituted_away subst) in - Signature_names.check_type ?info names td.typ_loc td.typ_id; - Env.register_uid td.typ_type.type_uid td.typ_loc + Signature_names.check_type ?info names td.typ_loc td.typ_id ) decls; res with - | (decls, newenv) -> + | (decls, newenv, _) -> let (trem, rem, final_env) = transl_sig newenv srem in let sg = rem in @@ -1466,17 +1555,16 @@ and transl_signature ?(keep_warnings = false) env sg = end | Psig_typext styext -> begin match - let (tyext, _) as res = + let (tyext, _, _) as res = Typedecl.transl_type_extension false env item.psig_loc styext in let constructors = tyext.tyext_constructors in List.iter (fun ext -> - Signature_names.check_typext names ext.ext_loc ext.ext_id; - Env.register_uid ext.ext_type.ext_uid ext.ext_loc + Signature_names.check_typext names ext.ext_loc ext.ext_id ) constructors; res, constructors with - | (tyext, newenv), constructors -> + | (tyext, newenv, _shapes), constructors -> let (trem, rem, final_env) = transl_sig newenv srem in mksig (Tsig_typext tyext) env loc :: trem, map_ext (fun es ext -> @@ -1489,16 +1577,13 @@ and transl_signature ?(keep_warnings = false) env sg = end | Psig_exception sext -> begin match - let (ext, _) as res = Typedecl.transl_type_exception env sext in + let (ext, _, _) as res = Typedecl.transl_type_exception env sext in let constructor = ext.tyexn_constructor in Signature_names.check_typext names constructor.ext_loc constructor.ext_id; - Env.register_uid - constructor.ext_type.ext_uid - constructor.ext_loc; res, constructor with - | (ext, newenv), constructor -> + | (ext, newenv, _shape), constructor -> let (trem, rem, final_env) = transl_sig newenv srem in mksig (Tsig_exception ext) env loc :: trem, Sig_typext(constructor.ext_id, @@ -1519,33 +1604,35 @@ and transl_signature ?(keep_warnings = false) env sg = in let pres = match tmty.mty_type with - | Mty_alias _ -> Mp_absent + | Mty_alias p -> + if Env.is_functor_arg p env then + Msupport.raise_error (Error (pmd.pmd_loc, env, Cannot_alias p)); + Mp_absent | _ -> Mp_present in + let md = { + md_type=tmty.mty_type; + md_attributes=pmd.pmd_attributes; + md_loc=pmd.pmd_loc; + md_uid = Uid.mk ~current_unit:(Env.get_current_unit ()); + } + in match pmd.pmd_name.txt with - | None -> None, pres, env, None, tmty + | None -> None, pres, env, None, tmty, md | Some name -> - let md = { - md_type=tmty.mty_type; - md_attributes=pmd.pmd_attributes; - md_loc=pmd.pmd_loc; - md_uid = Uid.mk ~current_unit:(Env.get_unit_name ()); - } - in let id, newenv = Env.enter_module_declaration ~scope name pres md env in let newenv = Env.update_short_paths newenv in Signature_names.check_module names pmd.pmd_name.loc id; - Env.register_uid md.md_uid md.md_loc; let sig_item = Sig_module(id, pres, md, Trec_not, Exported) in - Some id, pres, newenv, Some sig_item, tmty + Some id, pres, newenv, Some sig_item, tmty, md with - | (id, pres, newenv, sig_item, tmty) -> + | (id, pres, newenv, sig_item, tmty, md) -> let (trem, rem, final_env) = transl_sig newenv srem in mksig (Tsig_module {md_id=id; md_name=pmd.pmd_name; - md_presence=pres; md_type=tmty; - md_loc=pmd.pmd_loc; + md_uid=md.md_uid; md_presence=pres; + md_type=tmty; md_loc=pmd.pmd_loc; md_attributes=pmd.pmd_attributes}) env loc :: trem, (match sig_item with None -> rem | Some i -> i :: rem), @@ -1569,7 +1656,7 @@ and transl_signature ?(keep_warnings = false) env sg = { md_type = Mty_alias path; md_attributes = pms.pms_attributes; md_loc = pms.pms_loc; - md_uid = Uid.mk ~current_unit:(Env.get_unit_name ()); + md_uid = Uid.mk ~current_unit:(Env.get_current_unit ()); } in let pres = @@ -1584,10 +1671,9 @@ and transl_signature ?(keep_warnings = false) env sg = `Substituted_away (Subst.add_module id path Subst.identity) in Signature_names.check_module ~info names pms.pms_name.loc id; - Env.register_uid md.md_uid md.md_loc; (newenv, Tsig_modsubst {ms_id=id; ms_name=pms.pms_name; - ms_manifest=path; ms_txt=pms.pms_manifest; - ms_loc=pms.pms_loc; + ms_uid=md.md_uid; ms_manifest=path; + ms_txt=pms.pms_manifest; ms_loc=pms.pms_loc; ms_attributes=pms.pms_attributes}) with | newenv, sig_item -> @@ -1608,9 +1694,8 @@ and transl_signature ?(keep_warnings = false) env sg = | Some id -> Some (id, md, uid) ) tdecls in - List.iter (fun (id, md, uid) -> + List.iter (fun (id, md, _uid) -> Signature_names.check_module names md.md_loc id; - Env.register_uid uid md.md_loc ) decls; (tdecls, decls, newenv) with @@ -1635,7 +1720,6 @@ and transl_signature ?(keep_warnings = false) env sg = begin match transl_modtype_decl env pmtd with | newenv, mtd, decl -> Signature_names.check_modtype names pmtd.pmtd_loc mtd.mtd_id; - Env.register_uid decl.mtd_uid mtd.mtd_loc; let (trem, rem, final_env) = transl_sig newenv srem in mksig (Tsig_modtype mtd) env loc :: trem, Sig_modtype (mtd.mtd_id, decl, Exported) :: rem, @@ -1646,7 +1730,7 @@ and transl_signature ?(keep_warnings = false) env sg = end | Psig_modtypesubst pmtd -> begin match transl_modtype_decl env pmtd with - | newenv, mtd, decl -> + | newenv, mtd, _decl -> let info = let mty = match mtd.mtd_type with | Some tmty -> tmty.mty_type @@ -1654,13 +1738,11 @@ and transl_signature ?(keep_warnings = false) env sg = (* parsetree invariant, see Ast_invariants *) assert false in - let subst = Subst.add_modtype mtd.mtd_id mty Subst.identity in - match mty with - | Mty_ident _ -> `Substituted_away subst - | _ -> `Unpackable_modtype_substituted_away (mtd.mtd_id,subst) + let subst = + Subst.Unsafe.add_modtype mtd.mtd_id mty Subst.identity in + `Substituted_away subst in Signature_names.check_modtype ~info names pmtd.pmtd_loc mtd.mtd_id; - Env.register_uid decl.mtd_uid mtd.mtd_loc; let (trem, rem, final_env) = transl_sig newenv srem in mksig (Tsig_modtypesubst mtd) env loc :: trem, rem, @@ -1720,7 +1802,6 @@ and transl_signature ?(keep_warnings = false) env sg = Signature_names.check_type names loc cls.cls_obj_id; Signature_names.check_class names loc cls.cls_id; Signature_names.check_class_type names loc cls.cls_ty_id; - Env.register_uid cls.cls_decl.cty_uid cls.cls_decl.cty_loc; ) classes; res with @@ -1755,9 +1836,6 @@ and transl_signature ?(keep_warnings = false) env sg = let loc = decl.clsty_id_loc.Location.loc in Signature_names.check_class_type names loc decl.clsty_ty_id; Signature_names.check_type names loc decl.clsty_obj_id; - Env.register_uid - decl.clsty_ty_decl.clty_uid - decl.clsty_ty_decl.clty_loc; ) classes; res with @@ -1816,7 +1894,7 @@ and transl_modtype_decl_aux env Types.mtd_type=Option.map (fun t -> t.mty_type) tmty; mtd_attributes=pmtd_attributes; mtd_loc=pmtd_loc; - mtd_uid = Uid.mk ~current_unit:(Env.get_unit_name ()); + mtd_uid = Uid.mk ~current_unit:(Env.get_current_unit ()); } in let scope = Ctype.create_scope () in @@ -1825,6 +1903,7 @@ and transl_modtype_decl_aux env { mtd_id=id; mtd_name=pmtd_name; + mtd_uid=decl.mtd_uid; mtd_type=tmty; mtd_attributes=pmtd_attributes; mtd_loc=pmtd_loc; @@ -1862,21 +1941,24 @@ and transl_recmodule_modtypes env sdecls = List.map (fun x -> Option.map (Ident.create_scoped ~scope) x.pmd_name.txt) sdecls in - let approx_env = + let approx_env container = List.fold_left (fun env -> Option.fold ~none:env ~some:(fun id -> (* cf #5965 *) Env.enter_unbound_module (Ident.name id) - Mod_unbound_illegal_recursion env + (Mod_unbound_illegal_recursion + { container; unbound = Ident.name id }) + env )) env ids in let init = List.map2 (fun id pmd -> - let md_uid = Uid.mk ~current_unit:(Env.get_unit_name ()) in + let md_uid = Uid.mk ~current_unit:(Env.get_current_unit ()) in let md = - { md_type = approx_modtype approx_env pmd.pmd_type; + { md_type = + approx_modtype (approx_env pmd.pmd_name.txt) pmd.pmd_type; md_loc = pmd.pmd_loc; md_attributes = pmd.pmd_attributes; md_uid } @@ -1907,11 +1989,11 @@ and transl_recmodule_modtypes env sdecls = List.map2 (fun pmd (id_shape, id_loc, md, mty) -> let tmd = {md_id=Option.map fst id_shape; md_name=id_loc; md_type=mty; - md_presence=Mp_present; + md_uid=md.Types.md_uid; md_presence=Mp_present; md_loc=pmd.pmd_loc; md_attributes=pmd.pmd_attributes} in - tmd, md.md_uid, Option.map snd id_shape + tmd, md.Types.md_uid, Option.map snd id_shape ) sdecls dcl2 in (dcl2, env2) @@ -1928,7 +2010,7 @@ let rec path_of_module mexp = | Tmod_constraint (mexp, _, _, _) -> path_of_module mexp | (Tmod_structure _ | Tmod_functor _ | Tmod_apply_unit _ | Tmod_unpack _ | - Tmod_apply _ | Tmod_hole) -> + Tmod_apply _ | Tmod_typed_hole) -> raise Not_a_path let path_of_module mexp = @@ -2101,8 +2183,8 @@ let check_recmodule_inclusion env bindings = and mty_actual' = subst_and_strengthen env scope s id mty_actual in let coercion, shape = try - Includemod.modtypes_with_shape ~shape - ~loc:modl.mod_loc ~mark:Mark_both + Includemod.modtypes_constraint ~shape + ~loc:modl.mod_loc ~mark:true env mty_actual' mty_decl' with Includemod.Error msg -> Msupport.raise_error(Error(modl.mod_loc, env, Not_included msg)); @@ -2120,6 +2202,7 @@ let check_recmodule_inclusion env bindings = { mb_id = id; mb_name = name; + mb_uid = uid; mb_presence = Mp_present; mb_expr = modl'; mb_attributes = attrs; @@ -2140,7 +2223,9 @@ let rec package_constraints_sig env loc sg constrs = | Sig_type (id, ({type_params=[]} as td), rs, priv) when List.mem_assoc [Ident.name id] constrs -> let ty = List.assoc [Ident.name id] constrs in - Sig_type (id, {td with type_manifest = Some ty}, rs, priv) + let td = {td with type_manifest = Some ty} in + let type_immediate = Typedecl_immediacy.compute_decl env td in + Sig_type (id, {td with type_immediate}, rs, priv) | Sig_module (id, pres, md, rs, priv) -> let rec aux = function | (m :: ((_ :: _) as l), t) :: rest when m = Ident.name id -> @@ -2169,33 +2254,40 @@ and package_constraints env loc mty constrs = | Mty_ident p -> raise(Error(loc, env, Cannot_scrape_package_type p)) end -let modtype_of_package env loc p fl = - (* We call Ctype.correct_levels to ensure that the types being added to the +let modtype_of_package env loc pack = + (* We call Ctype.duplicate_type to ensure that the types being added to the module type are at generic_level. *) let mty = - package_constraints env loc (Mty_ident p) - (List.map (fun (n, t) -> Longident.flatten n, Ctype.correct_levels t) fl) + package_constraints env loc (Mty_ident pack.pack_path) + (List.map (fun (n, t) -> n, Ctype.duplicate_type t) pack.pack_cstrs) in Subst.modtype Keep Subst.identity mty -let package_subtype env p1 fl1 p2 fl2 = - let mkmty p fl = +let package_subtype env pack1 pack2 = + let mkmty pack = let fl = - List.filter (fun (_n,t) -> Ctype.free_variables t = []) fl in - modtype_of_package env Location.none p fl + List.filter (fun (_n,t) -> Ctype.closed_type_expr t) pack.pack_cstrs in + modtype_of_package env Location.none {pack with pack_cstrs = fl} in - match mkmty p1 fl1, mkmty p2 fl2 with - | exception Error(_, _, Cannot_scrape_package_type _) -> false + match mkmty pack1, mkmty pack2 with + | exception Error(_, _, Cannot_scrape_package_type r) -> + Result.Error (Errortrace.Package_cannot_scrape r) | mty1, mty2 -> let loc = Location.none in - match Includemod.modtypes ~loc ~mark:Mark_both env mty1 mty2 with - | Tcoerce_none -> true - | _ | exception Includemod.Error _ -> false + match Includemod.modtypes ~loc ~mark:true env mty1 mty2 with + | Tcoerce_none -> Ok () + | c -> + let msg = + Includemod_errorprinter.coercion_in_package_subtype env mty1 c + in + Result.Error (Errortrace.Package_coercion msg) + | exception Includemod.Error e -> + let msg = doc_printf "%a" Includemod_errorprinter.err_msgs e in + Result.Error (Errortrace.Package_inclusion msg) let () = Ctype.package_subtype := package_subtype let wrap_constraint_package env mark arg mty explicit = - let mark = if mark then Includemod.Mark_both else Includemod.Mark_neither in let mty1 = Subst.modtype Keep Subst.identity arg.mod_type in let mty2 = Subst.modtype Keep Subst.identity mty in let coercion = @@ -2213,10 +2305,9 @@ let wrap_constraint_package env mark arg mty explicit = let wrap_constraint_with_shape env mark arg mty shape explicit = - let mark = if mark then Includemod.Mark_both else Includemod.Mark_neither in let coercion, shape = try - Includemod.modtypes_with_shape ~shape ~loc:arg.mod_loc env ~mark + Includemod.modtypes_constraint ~shape ~loc:arg.mod_loc env ~mark arg.mod_type mty with Includemod.Error msg -> raise(Error(arg.mod_loc, env, Not_included msg)) in @@ -2254,14 +2345,21 @@ let simplify_app_summary app_view = match app_view.arg with | false, Some p -> Includemod.Error.Named p, mty | false, None -> Includemod.Error.Anonymous, mty -let rec type_module ?(alias=false) sttn funct_body anchor env smod = +let check_package_closed ~loc ~env ~typ fl = + if List.exists (fun (_n, t) -> not (Ctype.closed_type_expr t)) fl + then + raise (Error (loc, env, Incomplete_packed_module typ)) + +let not_principal msg = Warnings.Not_principal (Format_doc.Doc.msg msg) + +let rec type_module ?(alias=false) ~strengthen ~funct_body anchor env smod = (* Merlin: when we start typing a module we don't want to include potential saved_items from its parent. We backup them before starting and restore them when finished. *) Msupport.with_saved_types @@ fun () -> try Builtin_attributes.warning_scope smod.pmod_attributes - (fun () -> type_module_aux ~alias sttn funct_body anchor env smod) + (fun () -> type_module_aux ~alias ~strengthen ~funct_body anchor env smod) with exn -> Msupport.raise_error exn; { mod_desc = Tmod_structure { @@ -2275,7 +2373,7 @@ let rec type_module ?(alias=false) sttn funct_body anchor env smod = mod_loc = smod.pmod_loc }, Shape.dummy_mod -and type_module_aux ~alias sttn funct_body anchor env smod = +and type_module_aux ~alias ~strengthen ~funct_body anchor env smod = match smod.pmod_desc with Pmod_ident lid -> let path = @@ -2290,12 +2388,13 @@ and type_module_aux ~alias sttn funct_body anchor env smod = let shape = Env.shape_of_path ~namespace:Shape.Sig_component_kind.Module env path in + let shape = if alias && aliasable then Shape.alias shape else shape in let md = if alias && aliasable then (Env.add_required_global (Path.head path); md) else begin let mty = - if sttn then + if strengthen then Env.find_strengthened_module ~aliasable path env else (Env.find_module path env).md_type @@ -2304,7 +2403,7 @@ and type_module_aux ~alias sttn funct_body anchor env smod = | Mty_alias p1 when not alias -> let p1 = Env.normalize_module_path (Some smod.pmod_loc) env p1 in let mty = Includemod.expand_module_alias - ~strengthen:sttn env p1 in + ~strengthen env p1 in { md with mod_desc = Tmod_constraint (md, mty, Tmodtype_implicit, @@ -2317,7 +2416,7 @@ and type_module_aux ~alias sttn funct_body anchor env smod = md, shape | Pmod_structure sstr -> let (str, sg, names, shape, _finalenv) = - type_structure funct_body anchor env sstr in + type_structure ~funct_body anchor env sstr in let md = { mod_desc = Tmod_structure str; mod_type = Mty_signature sg; @@ -2341,7 +2440,7 @@ and type_module_aux ~alias sttn funct_body anchor env smod = match param.txt with | None -> None, env, Shape.for_unnamed_functor_param | Some name -> - let md_uid = Uid.mk ~current_unit:(Env.get_unit_name ()) in + let md_uid = Uid.mk ~current_unit:(Env.get_current_unit ()) in let arg_md = { md_type = mty.mty_type; md_attributes = []; @@ -2359,7 +2458,9 @@ and type_module_aux ~alias sttn funct_body anchor env smod = Named (id, param, mty), Types.Named (id, mty.mty_type), newenv, var, true in - let body, body_shape = type_module true funct_body None newenv sbody in + let body, body_shape = + type_module ~strengthen:true ~funct_body None newenv sbody + in { mod_desc = Tmod_functor(t_arg, body); mod_type = Mty_functor(ty_arg, body.mod_type); mod_env = env; @@ -2367,9 +2468,11 @@ and type_module_aux ~alias sttn funct_body anchor env smod = mod_loc = smod.pmod_loc }, Shape.abs funct_shape_param body_shape | Pmod_apply _ | Pmod_apply_unit _ -> - type_application smod.pmod_loc sttn funct_body env smod + type_application smod.pmod_loc ~strengthen ~funct_body env smod | Pmod_constraint(sarg, smty) -> - let arg, arg_shape = type_module ~alias true funct_body anchor env sarg in + let arg, arg_shape = + type_module ~alias ~strengthen:true ~funct_body anchor env sarg + in begin try let mty = transl_modtype env smty in let md, final_shape = @@ -2388,7 +2491,7 @@ and type_module_aux ~alias sttn funct_body anchor env smod = | Pmod_extension ({ txt; _ }, _) when txt = Ast_helper.hole_txt -> Msupport.raise_error exn; { - mod_desc = Tmod_hole; + mod_desc = Tmod_typed_hole; mod_type = Mty_for_hole; mod_loc = sarg.pmod_loc; mod_env = env; @@ -2399,22 +2502,20 @@ and type_module_aux ~alias sttn funct_body anchor env smod = end | Pmod_unpack sexp -> let exp = - Ctype.with_local_level_if_principal + Ctype.with_local_level_generalize_structure_if_principal (fun () -> Typecore.type_exp env sexp) - ~post:Typecore.generalize_structure_exp in let mty = match get_desc (Ctype.expand_head env exp.exp_type) with - Tpackage (p, fl) -> - if List.exists (fun (_n, t) -> Ctype.free_variables t <> []) fl then - raise (Error (smod.pmod_loc, env, - Incomplete_packed_module exp.exp_type)); + Tpackage pack -> + check_package_closed ~loc:smod.pmod_loc ~env ~typ:exp.exp_type + pack.pack_cstrs; if !Clflags.principal && not (Typecore.generalizable (Btype.generic_level-1) exp.exp_type) then Location.prerr_warning smod.pmod_loc - (Warnings.Not_principal "this module unpacking"); - modtype_of_package env smod.pmod_loc p fl + (not_principal "this module unpacking"); + modtype_of_package env smod.pmod_loc pack | Tvar _ -> raise (Typecore.Error (smod.pmod_loc, env, Typecore.Cannot_infer_signature)) @@ -2430,7 +2531,7 @@ and type_module_aux ~alias sttn funct_body anchor env smod = mod_loc = smod.pmod_loc }, Shape.leaf_for_unpack | Pmod_extension ({ txt; _ }, _) when txt = Ast_helper.hole_txt -> - { mod_desc = Tmod_hole; + { mod_desc = Tmod_typed_hole; mod_type = Mty_for_hole; mod_env = env; mod_attributes = smod.pmod_attributes; @@ -2439,11 +2540,13 @@ and type_module_aux ~alias sttn funct_body anchor env smod = | Pmod_extension ext -> raise (Error_forward (Builtin_attributes.error_of_extension ext)) -and type_application loc strengthen funct_body env smod = - let rec extract_application funct_body env sargs smod = +and type_application loc ~strengthen ~funct_body env smod = + let rec extract_application ~funct_body env sargs smod = match smod.pmod_desc with | Pmod_apply (f, sarg) -> - let arg, shape = type_module true funct_body None env sarg in + let arg, shape = + type_module ~strengthen:true ~funct_body None env sarg + in let summary = { loc = smod.pmod_loc; attributes = smod.pmod_attributes; @@ -2455,7 +2558,7 @@ and type_application loc strengthen funct_body env smod = shape; } } in - extract_application funct_body env (summary::sargs) f + extract_application ~funct_body env (summary::sargs) f | Pmod_apply_unit f -> let summary = { loc = smod.pmod_loc; @@ -2463,22 +2566,23 @@ and type_application loc strengthen funct_body env smod = f_loc = f.pmod_loc; arg = None } in - extract_application funct_body env (summary::sargs) f + extract_application ~funct_body env (summary::sargs) f | _ -> smod, sargs in - let sfunct, args = extract_application funct_body env [] smod in + let sfunct, args = extract_application ~funct_body env [] smod in let funct, funct_shape = let has_path { arg } = match arg with | None | Some { path = None } -> false | Some { path = Some _ } -> true in let strengthen = strengthen && List.for_all has_path args in - type_module strengthen funct_body None env sfunct + type_module ~strengthen ~funct_body None env sfunct in - List.fold_left (type_one_application ~ctx:(loc, funct, args) funct_body env) + List.fold_left + (type_one_application ~ctx:(loc, sfunct, funct, args) funct_body env) (funct, funct_shape) args -and type_one_application ~ctx:(apply_loc,md_f,args) +and type_one_application ~ctx:(apply_loc,sfunct,md_f,args) funct_body env (funct, funct_shape) app_view = match Env.scrape_alias env funct.mod_type with | Mty_functor (Unit, mty_res) -> @@ -2509,8 +2613,11 @@ and type_one_application ~ctx:(apply_loc,md_f,args) let apply_error () = let args = List.map simplify_app_summary args in let mty_f = md_f.mod_type in - let lid_app = None in - Includemod.Apply_error {loc=apply_loc;env;lid_app;mty_f;args} + let app_name = match sfunct.pmod_desc with + | Pmod_ident l -> Includemod.Named_leftmost_functor l.txt + | _ -> Includemod.Anonymous_functor + in + Includemod.Apply_error {loc=apply_loc;env;app_name;mty_f;args} in begin match app_view with | { arg = None; loc = app_loc; attributes = app_attributes; _ } -> @@ -2524,8 +2631,8 @@ and type_one_application ~ctx:(apply_loc,md_f,args) | { loc = app_loc; attributes = app_attributes; arg = Some { shape = arg_shape; path = arg_path; arg } } -> let coercion = - try Includemod.modtypes - ~loc:arg.mod_loc ~mark:Mark_both env arg.mod_type mty_param + try Includemod.modtypes ~loc:arg.mod_loc ~mark:true env + arg.mod_type mty_param with Includemod.Error _ -> Msupport.raise_error (apply_error ()); Tcoerce_none @@ -2560,8 +2667,8 @@ and type_one_application ~ctx:(apply_loc,md_f,args) not sure it's worth the effort. *) (* begin match - Includemod.modtypes - ~loc:app_loc ~mark:Mark_neither env mty_res nondep_mty + Includemod.modtypes ~loc:app_loc ~mark:false env + mty_res nondep_mty with | Tcoerce_none -> () | _ -> @@ -2586,19 +2693,22 @@ and type_one_application ~ctx:(apply_loc,md_f,args) end | Mty_alias path -> raise(Error(app_view.f_loc, env, Cannot_scrape_alias path)) - | _ -> + | Mty_ident _ | Mty_signature _ | Mty_for_hole -> let args = List.map simplify_app_summary args in let mty_f = md_f.mod_type in - let lid_app = None in - raise(Includemod.Apply_error {loc=apply_loc;env;lid_app;mty_f;args}) + let app_name = match sfunct.pmod_desc with + | Pmod_ident l -> Includemod.Named_leftmost_functor l.txt + | _ -> Includemod.Anonymous_functor + in + raise(Includemod.Apply_error {loc=apply_loc;env;app_name;mty_f;args}) -and type_open_decl ?used_slot ?toplevel funct_body names env sod = +and type_open_decl ?used_slot ?toplevel ~funct_body names env sod = Builtin_attributes.warning_scope sod.popen_attributes (fun () -> - type_open_decl_aux ?used_slot ?toplevel funct_body names env sod + type_open_decl_aux ?used_slot ?toplevel ~funct_body names env sod ) -and type_open_decl_aux ?used_slot ?toplevel funct_body names env od = +and type_open_decl_aux ?used_slot ?toplevel ~funct_body names env od = let loc = od.popen_loc in match od.popen_expr.pmod_desc with | Pmod_ident lid -> @@ -2621,7 +2731,9 @@ and type_open_decl_aux ?used_slot ?toplevel funct_body names env od = } in open_descr, [], newenv | _ -> - let md, mod_shape = type_module true funct_body None env od.popen_expr in + let md, mod_shape = + type_module ~strengthen:true ~funct_body None env od.popen_expr + in let scope = Ctype.create_scope () in let sg, newenv = Env.enter_signature ~scope ~mod_shape @@ -2656,7 +2768,7 @@ and type_open_decl_aux ?used_slot ?toplevel funct_body names env od = } in open_descr, sg, newenv -and type_structure ?(toplevel = false) ?(keep_warnings = false) funct_body anchor env sstr = +and type_structure ?(toplevel = false) ?(keep_warnings = false) ~funct_body anchor env sstr = let names = Signature_names.create () in let type_str_item env shape_map {pstr_loc = loc; pstr_desc = desc} = @@ -2670,17 +2782,17 @@ and type_structure ?(toplevel = false) ?(keep_warnings = false) funct_body ancho | Pstr_value(rec_flag, sdefs) -> let (defs, newenv) = Typecore.type_binding env rec_flag sdefs in - let () = if rec_flag = Recursive then - Typecore.check_recursive_bindings env defs + let defs = match rec_flag with + | Recursive -> Typecore.annotate_recursive_bindings env defs + | Nonrecursive -> defs in (* 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, { Asttypes.loc; _ }, _typ)-> + (fun (acc, shape_map) (id, { Asttypes.loc; _ }, _typ, _uid)-> Signature_names.check_value names loc id; let vd = Env.find_value (Pident id) newenv in - Env.register_uid vd.val_uid vd.val_loc; Sig_value(id, vd, Exported) :: acc, Shape.Map.add_value shape_map id vd.val_uid ) @@ -2694,13 +2806,14 @@ and type_structure ?(toplevel = false) ?(keep_warnings = false) funct_body ancho | Pstr_primitive sdesc -> let (desc, newenv) = Typedecl.transl_value_decl env loc sdesc in Signature_names.check_value names desc.val_loc desc.val_id; - Env.register_uid desc.val_val.val_uid desc.val_val.val_loc; Tstr_primitive desc, [Sig_value(desc.val_id, desc.val_val, Exported)], Shape.Map.add_value shape_map desc.val_id desc.val_val.val_uid, newenv | Pstr_type (rec_flag, sdecls) -> - let (decls, newenv) = Typedecl.transl_type_decl env rec_flag sdecls in + let (decls, newenv, shapes) = + Typedecl.transl_type_decl env rec_flag sdecls + in let newenv = Env.update_short_paths newenv in List.iter Signature_names.(fun td -> check_type names td.typ_loc td.typ_id) @@ -2709,32 +2822,26 @@ and type_structure ?(toplevel = false) ?(keep_warnings = false) funct_body ancho (fun rs info -> Sig_type(info.typ_id, info.typ_type, rs, Exported)) decls [] in - let shape_map = List.fold_left - (fun shape_map -> function - | Sig_type (id, vd, _, _) -> - if not (Btype.is_row_name (Ident.name id)) then begin - Env.register_uid vd.type_uid vd.type_loc; - Shape.Map.add_type shape_map id vd.type_uid - end else shape_map - | _ -> assert false - ) + let shape_map = List.fold_left2 + (fun map { typ_id; _} shape -> + Shape.Map.add_type map typ_id shape) shape_map - items + decls + shapes in Tstr_type (rec_flag, decls), items, shape_map, enrich_type_decls anchor decls env newenv | Pstr_typext styext -> - let (tyext, newenv) = + let (tyext, newenv, shapes) = Typedecl.transl_type_extension true env loc styext in let constructors = tyext.tyext_constructors in - let shape_map = List.fold_left (fun shape_map ext -> + let shape_map = List.fold_left2 (fun shape_map ext shape -> Signature_names.check_typext names ext.ext_loc ext.ext_id; - Env.register_uid ext.ext_type.ext_uid ext.ext_loc; - Shape.Map.add_extcons shape_map ext.ext_id ext.ext_type.ext_uid - ) shape_map constructors + Shape.Map.add_extcons shape_map ext.ext_id shape + ) shape_map constructors shapes in (Tstr_typext tyext, map_ext @@ -2743,13 +2850,10 @@ and type_structure ?(toplevel = false) ?(keep_warnings = false) funct_body ancho shape_map, newenv) | Pstr_exception sext -> - let (ext, newenv) = Typedecl.transl_type_exception env sext in + let (ext, newenv, shape) = Typedecl.transl_type_exception env sext in let constructor = ext.tyexn_constructor in Signature_names.check_typext names constructor.ext_loc constructor.ext_id; - Env.register_uid - constructor.ext_type.ext_uid - constructor.ext_loc; Tstr_exception ext, [Sig_typext(constructor.ext_id, constructor.ext_type, @@ -2757,7 +2861,7 @@ and type_structure ?(toplevel = false) ?(keep_warnings = false) funct_body ancho Exported)], Shape.Map.add_extcons shape_map constructor.ext_id - constructor.ext_type.ext_uid, + shape, newenv | Pstr_module {pmb_name = name; pmb_expr = smodl; pmb_attributes = attrs; pmb_loc; @@ -2767,7 +2871,7 @@ and type_structure ?(toplevel = false) ?(keep_warnings = false) funct_body ancho let modl, md_shape = Builtin_attributes.warning_scope attrs (fun () -> - type_module ~alias:true true funct_body + type_module ~alias:true ~strengthen:true ~funct_body (anchor_submodule name.txt anchor) env smodl ) in @@ -2776,7 +2880,7 @@ and type_structure ?(toplevel = false) ?(keep_warnings = false) funct_body ancho | Mty_alias _ -> Mp_absent | _ -> Mp_present in - let md_uid = Uid.mk ~current_unit:(Env.get_unit_name ()) in + let md_uid = Uid.mk ~current_unit:(Env.get_current_unit ()) in let md = { md_type = enrich_module_type anchor name.txt modl.mod_type env; md_attributes = attrs; @@ -2785,7 +2889,6 @@ and type_structure ?(toplevel = false) ?(keep_warnings = false) funct_body ancho } in let md_shape = Shape.set_uid_if_none md_shape md_uid in - Env.register_uid md_uid pmb_loc; (*prerr_endline (Ident.unique_toplevel_name id);*) Mtype.lower_nongen outer_scope md.md_type; let id, newenv, sg = @@ -2809,8 +2912,9 @@ and type_structure ?(toplevel = false) ?(keep_warnings = false) funct_body ancho | Some id -> Shape.Map.add_module shape_map id md_shape | None -> shape_map in - Tstr_module {mb_id=id; mb_name=name; mb_expr=modl; - mb_presence=pres; mb_attributes=attrs; mb_loc=pmb_loc; }, + Tstr_module {mb_id=id; mb_name=name; mb_uid = md.md_uid; + mb_expr=modl; mb_presence=pres; mb_attributes=attrs; + mb_loc=pmb_loc; }, sg, shape_map, newenv @@ -2848,13 +2952,15 @@ and type_structure ?(toplevel = false) ?(keep_warnings = false) funct_body ancho let modl, shape = Builtin_attributes.warning_scope attrs (fun () -> - type_module true funct_body (anchor_recmodule id) - newenv smodl + type_module ~strengthen:true ~funct_body + (anchor_recmodule id) newenv smodl ) in let mty' = enrich_module_type anchor name.txt modl.mod_type newenv in + Includemod.modtypes_consistency ~loc:modl.mod_loc newenv + mty' mty.mty_type; (id, name, mty, modl, mty', attrs, loc, shape, uid)) decls sbind in let newenv = (* allow aliasing recursive modules from outside *) @@ -2885,8 +2991,7 @@ and type_structure ?(toplevel = false) ?(keep_warnings = false) funct_body ancho ) bindings2 in let shape_map = - List.fold_left (fun map (id, mb, uid, shape) -> - Env.register_uid uid mb.mb_loc; + List.fold_left (fun map (id, _mb, _uid, shape) -> Shape.Map.add_module map id shape ) shape_map mbs in @@ -2906,13 +3011,12 @@ and type_structure ?(toplevel = false) ?(keep_warnings = false) funct_body ancho let newenv, mtd, decl = transl_modtype_decl env pmtd in let newenv = Env.update_short_paths newenv in Signature_names.check_modtype names pmtd.pmtd_loc mtd.mtd_id; - Env.register_uid decl.mtd_uid decl.mtd_loc; let id = mtd.mtd_id in let map = Shape.Map.add_module_type shape_map id decl.mtd_uid in Tstr_modtype mtd, [Sig_modtype (id, decl, Exported)], map, newenv | Pstr_open sod -> let (od, sg, newenv) = - type_open_decl ~toplevel funct_body names env sod + type_open_decl ~toplevel ~funct_body names env sod in let newenv = Env.update_short_paths newenv in Tstr_open od, sg, shape_map, newenv @@ -2925,11 +3029,11 @@ and type_structure ?(toplevel = false) ?(keep_warnings = false) funct_body ancho Signature_names.check_class names loc cls.cls_id; Signature_names.check_class_type names loc cls.cls_ty_id; Signature_names.check_type names loc cls.cls_obj_id; - Env.register_uid cls.cls_decl.cty_uid loc; - let map f id acc = f acc id cls.cls_decl.cty_uid in - map Shape.Map.add_class cls.cls_id acc - |> map Shape.Map.add_class_type cls.cls_ty_id - |> map Shape.Map.add_type cls.cls_obj_id + let uid = cls.cls_decl.cty_uid in + let map f id v acc = f acc id v in + map Shape.Map.add_class cls.cls_id uid acc + |> map Shape.Map.add_class_type cls.cls_ty_id uid + |> map Shape.Map.add_type cls.cls_obj_id (Shape.leaf uid) ) shape_map classes in Tstr_class @@ -2955,10 +3059,10 @@ and type_structure ?(toplevel = false) ?(keep_warnings = false) funct_body ancho let loc = decl.clsty_id_loc.Location.loc in Signature_names.check_class_type names loc decl.clsty_ty_id; Signature_names.check_type names loc decl.clsty_obj_id; - Env.register_uid decl.clsty_ty_decl.clty_uid loc; - let map f id acc = f acc id decl.clsty_ty_decl.clty_uid in - map Shape.Map.add_class_type decl.clsty_ty_id acc - |> map Shape.Map.add_type decl.clsty_obj_id + let uid = decl.clsty_ty_decl.clty_uid in + let map f id v acc = f acc id v in + map Shape.Map.add_class_type decl.clsty_ty_id uid acc + |> map Shape.Map.add_type decl.clsty_obj_id (Shape.leaf uid) ) shape_map classes in Tstr_class_type @@ -2981,7 +3085,7 @@ and type_structure ?(toplevel = false) ?(keep_warnings = false) funct_body ancho let smodl = sincl.pincl_mod in let modl, modl_shape = Builtin_attributes.warning_scope sincl.pincl_attributes - (fun () -> type_module true funct_body None env smodl) + (fun () -> type_module ~strengthen:true ~funct_body None env smodl) in let scope = Ctype.create_scope () in (* Rename all identifiers bound by this signature to avoid clashes *) @@ -3036,19 +3140,24 @@ and type_structure ?(toplevel = false) ?(keep_warnings = false) funct_body ancho let type_toplevel_phrase env s = Env.reset_required_globals (); let (str, sg, _to_remove_from_sg, shape, env) = - type_structure ~toplevel:true false None env s + type_structure ~toplevel:true ~funct_body:false None env s in (str, sg, (* to_remove_from_sg, *) shape, env) -let type_module_alias = type_module ~alias:true true false None -let type_module = type_module true false None +let type_module_alias = + type_module ~alias:true ~strengthen:true ~funct_body:false None +let type_module = + type_module ~strengthen:true ~funct_body:false None + +(* Normalize types in a signature *) let merlin_type_structure env str = let (str, sg, _sg_names, _shape, env) = - type_structure ~keep_warnings:true false None env str + type_structure ~keep_warnings:true ~funct_body:false None env str in str, sg, env -let type_structure = type_structure false None +let type_structure = + type_structure ~funct_body:false None let merlin_transl_signature env sg = transl_signature ~keep_warnings:true env sg let transl_signature env sg = transl_signature env sg @@ -3097,7 +3206,7 @@ let rec extend_path path = fun lid -> match lid with | Lident name -> Pdot(path, name) - | Ldot(m, name) -> Pdot(extend_path path m, name) + | Ldot({ txt = m; _ }, { txt = name; _ }) -> Pdot(extend_path path m, name) | Lapply _ -> assert false (* Lookup a type's longident within a signature *) @@ -3119,16 +3228,16 @@ let lookup_type_in_sig sg = in let rec module_path = function | Lident name -> Pident (String.Map.find name modules) - | Ldot(m, name) -> Pdot(module_path m, name) + | Ldot({ txt = m; _ }, { txt = name; _ }) -> Pdot(module_path m, name) | Lapply _ -> assert false in fun lid -> match lid with | Lident name -> Pident (String.Map.find name types) - | Ldot(m, name) -> Pdot(module_path m, name) + | Ldot({ txt = m; _ }, { txt = name; _ }) -> Pdot(module_path m, name) | Lapply _ -> assert false -let type_package env m p fl = +let type_package env m pack = (* Same as Pexp_letmodule *) let modl, scope = Typetexp.TyVarEnv.with_local_scope begin fun () -> @@ -3141,7 +3250,7 @@ let type_package env m p fl = end in let fl', env = - match fl with + match pack.pack_cstrs with | [] -> [], env | fl -> let type_path, env = @@ -3163,7 +3272,7 @@ let type_package env m p fl = let fl' = List.fold_right (fun (lid, _t) fl -> - match type_path lid with + match type_path (Longident.unflatten lid |> Option.get) with | exception Not_found -> fl | path -> begin match Env.find_type path env with @@ -3181,23 +3290,24 @@ let type_package env m p fl = fl', env in let mty = - if fl = [] then (Mty_ident p) - else modtype_of_package env modl.mod_loc p fl' + if pack.pack_cstrs = [] then (Mty_ident pack.pack_path) + else modtype_of_package env modl.mod_loc {pack with pack_cstrs = fl'} in List.iter (fun (n, ty) -> try Ctype.unify env ty (Ctype.newvar ()) with Ctype.Unify _ -> - raise (Error(modl.mod_loc, env, Scoping_pack (n,ty)))) + let lid = Longident.unflatten n |> Option.get in + raise (Error(modl.mod_loc, env, Scoping_pack (lid,ty)))) fl'; let modl = wrap_constraint_package env true modl mty Tmodtype_implicit in - modl, fl' + modl, {pack with pack_cstrs = fl'} (* Fill in the forward declarations *) let type_open_decl ?used_slot env od = - type_open_decl ?used_slot ?toplevel:None false (Signature_names.create ()) env - od + type_open_decl ?used_slot ?toplevel:None ~funct_body:false + (Signature_names.create ()) env od let type_open_descr ?used_slot env od = type_open_descr ?used_slot ?toplevel:None env od @@ -3207,6 +3317,7 @@ let () = Typetexp.transl_modtype_longident := transl_modtype_longident; Typetexp.transl_modtype := transl_modtype; Typecore.type_open := type_open_ ?toplevel:None; + Typetexp.type_open := type_open_ ?toplevel:None; Typecore.type_open_decl := type_open_decl; Typecore.type_package := type_package; Typeclass.type_open_descr := type_open_descr; @@ -3214,8 +3325,22 @@ let () = (* Typecheck an implementation file *) +(* +let gen_annot target annots = + let annot = Unit_info.annot target in + Cmt2annot.gen_annot (Some (Unit_info.Artifact.filename annot)) + ~sourcefile:(Unit_info.Artifact.source_file annot) + ~use_summaries:false + annots +*) -let type_implementation sourcefile outputprefix modulename initial_env ast = +let type_implementation target initial_env ast = + let sourcefile = Unit_info.source_file target in + let save_cmt target annots initial_env cmi shape = + Cmt_format.save_cmt (Unit_info.cmt target) + annots initial_env cmi shape; + (* gen_annot target annots; *) + in Cmt_format.clear (); Misc.try_finally (fun () -> Typecore.reset_delayed_checks (); @@ -3225,59 +3350,60 @@ let type_implementation sourcefile outputprefix modulename initial_env ast = let (str, sg, names, shape, finalenv) = type_structure initial_env ast in let shape = - Shape.set_uid_if_none shape - (Uid.of_compilation_unit_id (Ident.create_persistent modulename)) + let id = Ident.create_persistent @@ Unit_info.modname target in + Shape.set_uid_if_none shape (Uid.of_compilation_unit_id id) in let simple_sg = Signature_names.simplify finalenv names sg in if !Clflags.print_types then begin Typecore.force_delayed_checks (); - let shape = Shape.local_reduce shape in + let shape = Shape_reduce.local_reduce Env.empty shape in Printtyp.wrap_printing_env ~error:false initial_env - (fun () -> fprintf std_formatter "%a@." - (Printtyp.printed_signature sourcefile) simple_sg + Format.(fun () -> fprintf std_formatter "%a@." + (Printtyp.printed_signature @@ Unit_info.source_file target) + simple_sg ); + (* gen_annot target (Cmt_format.Implementation str); *) { structure = str; coercion = Tcoerce_none; shape; signature = simple_sg } (* result is ignored by Compile.implementation *) end else begin - let sourceintf = - Filename.remove_extension sourcefile ^ !Config.interface_suffix in - if !Clflags.cmi_file <> None || Sys.file_exists sourceintf then begin - let intf_file = + let source_intf = Unit_info.mli_from_source target in + if !Clflags.cmi_file <> None + || Sys.file_exists source_intf then begin + let compiled_intf_file = match !Clflags.cmi_file with + | Some cmi_file -> Unit_info.Artifact.from_filename cmi_file | None -> - (try - Load_path.find_uncap (modulename ^ ".cmi") - with Not_found -> - raise(Error(Location.in_file sourcefile, Env.empty, - Interface_not_compiled sourceintf))) - | Some cmi_file -> cmi_file + try Unit_info.find_normalized_cmi target with Not_found -> + raise(Error(Location.in_file sourcefile, Env.empty, + Interface_not_compiled source_intf)) in - let dclsig = Env.read_signature modulename intf_file in + let dclsig = Env.read_signature compiled_intf_file in let coercion, shape = - Includemod.compunit initial_env ~mark:Mark_positive - sourcefile sg intf_file dclsig shape + Includemod.compunit initial_env ~mark:true + sourcefile sg source_intf + dclsig shape in Typecore.force_delayed_checks (); (* It is important to run these checks after the inclusion test above, so that value declarations which are not used internally but exported are not reported as being unused. *) - let shape = Shape.local_reduce shape in + let shape = Shape_reduce.local_reduce Env.empty shape in let annots = Cmt_format.Implementation str in - Cmt_format.save_cmt (outputprefix ^ ".cmt") modulename - annots (Some sourcefile) initial_env None (Some shape); + save_cmt target annots initial_env None (Some shape); { structure = str; coercion; shape; signature = dclsig } end else begin - Location.prerr_warning (Location.in_file sourcefile) + Location.prerr_warning + (Location.in_file (Unit_info.source_file target)) Warnings.Missing_mli; let coercion, shape = - Includemod.compunit initial_env ~mark:Mark_positive + Includemod.compunit initial_env ~mark:true sourcefile sg "(inferred signature)" simple_sg shape in check_nongen_signature finalenv simple_sg; @@ -3287,16 +3413,14 @@ let type_implementation sourcefile outputprefix modulename initial_env ast = the values being exported. We can still capture unused declarations like "let x = true;; let x = 1;;", because in this case, the inferred signature contains only the last declaration. *) - let shape = Shape.local_reduce shape in + let shape = Shape_reduce.local_reduce Env.empty shape in + let alerts = Builtin_attributes.alerts_of_str ~mark:true ast in if not !Clflags.dont_write_files then begin - let alerts = Builtin_attributes.alerts_of_str ast in let cmi = - Env.save_signature ~alerts - simple_sg modulename (outputprefix ^ ".cmi") + Env.save_signature ~alerts simple_sg (Unit_info.cmi target) in let annots = Cmt_format.Implementation str in - Cmt_format.save_cmt (outputprefix ^ ".cmt") modulename - annots (Some sourcefile) initial_env (Some cmi) (Some shape); + save_cmt target annots initial_env (Some cmi) (Some shape) end; { structure = str; coercion; @@ -3311,13 +3435,12 @@ let type_implementation sourcefile outputprefix modulename initial_env ast = Cmt_format.Partial_implementation (Array.of_list (Cmt_format.get_saved_types ())) in - Cmt_format.save_cmt (outputprefix ^ ".cmt") modulename - annots (Some sourcefile) initial_env None None; + save_cmt target annots initial_env None None ) -let save_signature modname tsg outputprefix source_file initial_env cmi = - Cmt_format.save_cmt (outputprefix ^ ".cmti") modname - (Cmt_format.Interface tsg) (Some source_file) initial_env (Some cmi) None +let save_signature target tsg initial_env cmi = + Cmt_format.save_cmt (Unit_info.cmti target) + (Cmt_format.Interface tsg) initial_env (Some cmi) None let type_interface env ast = transl_signature env ast @@ -3349,31 +3472,30 @@ let package_signatures units = { md_type=Mty_signature sg; md_attributes=[]; md_loc=Location.none; - md_uid = Uid.mk ~current_unit:(Env.get_unit_name ()); + md_uid = Uid.mk ~current_unit:(Env.get_current_unit ()); } in Sig_module(newid, Mp_present, md, Trec_not, Exported)) units_with_ids -let package_units initial_env objfiles cmifile modulename = +let package_units initial_env objfiles target_cmi = (* Read the signatures of the units *) let units = List.map (fun f -> - let pref = chop_extensions f in - let modname = String.capitalize_ascii(Filename.basename pref) in - let sg = Env.read_signature modname (pref ^ ".cmi") in - if Filename.check_suffix f ".cmi" && + let artifact = Unit_info.Artifact.from_filename f in + let sg = Env.read_signature (Unit_info.companion_cmi artifact) in + if Unit_info.is_cmi artifact && not(Mtype.no_code_needed_sig Env.initial sg) then raise(Error(Location.none, Env.empty, Implementation_is_required f)); - (modname, Env.read_signature modname (pref ^ ".cmi"))) + Unit_info.Artifact.modname artifact, sg) objfiles in (* Compute signature of packaged unit *) Ident.reinit(); let sg = package_signatures units in (* Compute the shape of the package *) - let prefix = Filename.remove_extension cmifile in + let prefix = Unit_info.Artifact.prefix target_cmi in let pack_uid = Uid.of_compilation_unit_id (Ident.create_persistent prefix) in let shape = List.fold_left (fun map (name, _sg) -> @@ -3383,19 +3505,20 @@ let package_units initial_env objfiles cmifile modulename = |> Shape.str ~uid:pack_uid in (* See if explicit interface is provided *) - let mlifile = prefix ^ !Config.interface_suffix in - if Sys.file_exists mlifile then begin - if not (Sys.file_exists cmifile) then begin - raise(Error(Location.in_file mlifile, Env.empty, - Interface_not_compiled mlifile)) + let mli = Unit_info.mli_from_artifact target_cmi in + if Sys.file_exists mli then begin + if not (Sys.file_exists @@ Unit_info.Artifact.filename target_cmi) then + begin + raise(Error(Location.in_file mli, Env.empty, + Interface_not_compiled mli)) end; - let dclsig = Env.read_signature modulename cmifile in + let dclsig = Env.read_signature target_cmi in let cc, _shape = - Includemod.compunit initial_env ~mark:Mark_both - "(obtained by packing)" sg mlifile dclsig shape + Includemod.compunit initial_env ~mark:true + "(obtained by packing)" sg mli dclsig shape in - Cmt_format.save_cmt (prefix ^ ".cmt") modulename - (Cmt_format.Packed (sg, objfiles)) None initial_env None (Some shape); + Cmt_format.save_cmt (Unit_info.companion_cmt target_cmi) + (Cmt_format.Packed (sg, objfiles)) initial_env None (Some shape); cc end else begin (* Determine imports *) @@ -3408,11 +3531,10 @@ let package_units initial_env objfiles cmifile modulename = if not !Clflags.dont_write_files then begin let cmi = Env.save_signature_with_imports ~alerts:Misc.String.Map.empty - sg modulename - (prefix ^ ".cmi") imports + sg target_cmi imports in - Cmt_format.save_cmt (prefix ^ ".cmt") modulename - (Cmt_format.Packed (cmi.Cmi_format.cmi_sign, objfiles)) None initial_env + Cmt_format.save_cmt (Unit_info.companion_cmt target_cmi) + (Cmt_format.Packed (cmi.Cmi_format.cmi_sign, objfiles)) initial_env (Some cmi) (Some shape); end; Tcoerce_none @@ -3420,107 +3542,129 @@ let package_units initial_env objfiles cmifile modulename = (* Error report *) - - -open Printtyp +open Printtyp.Doc let report_error ~loc _env = function Cannot_apply mty -> Location.errorf ~loc - "@[This module is not a functor; it has type@ %a@]" modtype mty + "@[This module is not a functor; it has type@ %a@]" + (Style.as_inline_code modtype) mty | Not_included errs -> - let main = Includemod_errorprinter.err_msgs errs in - Location.errorf ~loc "@[Signature mismatch:@ %t@]" main + Location.errorf ~loc ~footnote:Out_type.Ident_conflicts.err_msg + "@[Signature mismatch:@ %a@]" + Includemod_errorprinter.err_msgs errs | Cannot_eliminate_dependency mty -> Location.errorf ~loc "@[This functor has type@ %a@ \ The parameter cannot be eliminated in the result type.@ \ - Please bind the argument to a module identifier.@]" modtype mty + Please bind the argument to a module identifier.@]" + (Style.as_inline_code modtype) mty | Signature_expected -> Location.errorf ~loc "This module type is not a signature" | Structure_expected mty -> Location.errorf ~loc - "@[This module is not a structure; it has type@ %a" modtype mty + "@[This module is not a structure; it has type@ %a" + (Style.as_inline_code modtype) mty | With_no_component lid -> Location.errorf ~loc - "@[The signature constrained by `with' has no component named %a@]" - longident lid + "@[The signature constrained by %a has no component named %a@]" + Style.inline_code "with" + (Style.as_inline_code longident) lid | With_mismatch(lid, explanation) -> - let main = Includemod_errorprinter.err_msgs explanation in - Location.errorf ~loc + Location.errorf ~loc ~footnote:Out_type.Ident_conflicts.err_msg "@[\ - @[In this `with' constraint, the new definition of %a@ \ + @[In this %a constraint, the new definition of %a@ \ does not match its original definition@ \ in the constrained signature:@]@ \ - %t@]" - longident lid main + %a@]" + Style.inline_code "with" + (Style.as_inline_code longident) lid + Includemod_errorprinter.err_msgs explanation | With_makes_applicative_functor_ill_typed(lid, path, explanation) -> - let main = Includemod_errorprinter.err_msgs explanation in - Location.errorf ~loc + Location.errorf ~loc ~footnote:Out_type.Ident_conflicts.err_msg "@[\ - @[This `with' constraint on %a makes the applicative functor @ \ - type %s ill-typed in the constrained signature:@]@ \ - %t@]" - longident lid (Path.name path) main + @[This %a constraint on %a makes the applicative functor @ \ + type %a ill-typed in the constrained signature:@]@ \ + %a@]" + Style.inline_code "with" + (Style.as_inline_code longident) lid + Style.inline_code (Path.name path) + Includemod_errorprinter.err_msgs explanation | With_changes_module_alias(lid, id, path) -> Location.errorf ~loc "@[\ - @[This `with' constraint on %a changes %s, which is aliased @ \ - in the constrained signature (as %s)@].@]" - longident lid (Path.name path) (Ident.name id) + @[This %a constraint on %a changes %a, which is aliased @ \ + in the constrained signature (as %a)@].@]" + Style.inline_code "with" + (Style.as_inline_code longident) lid + Style.inline_code (Path.name path) + Style.inline_code (Ident.name id) | With_cannot_remove_constrained_type -> Location.errorf ~loc "@[Destructive substitutions are not supported for constrained @ \ types (other than when replacing a type constructor with @ \ a type constructor with the same arguments).@]" | With_cannot_remove_packed_modtype (p,mty) -> + let[@manual.ref "ss:module-type-substitution"] manual_ref = + [ 12; 7; 3 ] + in + let pp_constraint ppf (p,mty) = + fprintf ppf "%s := %a" (Path.name p) modtype mty + in + Location.errorf ~loc + "This %a constraint@ %a@ makes a packed module ill-formed.@ %a" + Style.inline_code "with" + (Style.as_inline_code pp_constraint) (p,mty) + Misc.print_see_manual manual_ref + | With_package_manifest (lid, ty) -> Location.errorf ~loc - "This `with' constraint@ %s := %a@ makes a packed module ill-formed." - (Path.name p) Printtyp.modtype mty + "In the constrained signature, type %a is defined to be %a.@ \ + Package %a constraints may only be used on abstract types." + (Style.as_inline_code longident) lid + (Style.as_inline_code type_expr) ty + Style.inline_code "with" | Repeated_name(kind, name) -> Location.errorf ~loc - "@[Multiple definition of the %s name %s.@ \ + "@[Multiple definition of the %s name %a.@ \ Names must be unique in a given structure or signature.@]" - (Sig_component_kind.to_string kind) name + (Sig_component_kind.to_string kind) Style.inline_code name | Non_generalizable { vars; expression } -> let[@manual.ref "ss:valuerestriction"] manual_ref = [ 6; 1; 2 ] in - prepare_for_printing vars; - add_type_to_preparation expression; + Out_type.prepare_for_printing vars; + Out_type.add_type_to_preparation expression; Location.errorf ~loc "@[The type of this expression,@ %a,@ \ contains the non-generalizable type variable(s): %a.@ %a@]" - prepared_type_scheme expression + (Style.as_inline_code Out_type.prepared_type_scheme) expression (pp_print_list ~pp_sep:(fun f () -> fprintf f ",@ ") - prepared_type_scheme) vars + (Style.as_inline_code Out_type.prepared_type_scheme)) vars Misc.print_see_manual manual_ref | Non_generalizable_module { vars; mty; item } -> let[@manual.ref "ss:valuerestriction"] manual_ref = [ 6; 1; 2 ] in - prepare_for_printing vars; - add_type_to_preparation item.val_type; - let sub = - [ Location.msg ~loc:item.val_loc - "The type of this value,@ %a,@ \ - contains the non-generalizable type variable(s) %a." - prepared_type_scheme - item.val_type - (pp_print_list ~pp_sep:(fun f () -> fprintf f ",@ ") - prepared_type_scheme) vars - ] - in - Location.errorf ~loc ~sub + Out_type.prepare_for_printing vars; + Out_type.add_type_to_preparation item.val_type; + Location.errorf ~loc "@[The type of this module,@ %a,@ \ contains non-generalizable type variable(s).@ %a@]" modtype mty Misc.print_see_manual manual_ref + ~sub:[ Location.msg ~loc:item.val_loc + "The type of this value,@ %a,@ \ + contains the non-generalizable type variable(s) %a." + (Style.as_inline_code Out_type.prepared_type_scheme) + item.val_type + (pp_print_list ~pp_sep:(fun f () -> fprintf f ",@ ") + @@ Style.as_inline_code Out_type.prepared_type_scheme) vars + ] | Implementation_is_required intf_name -> Location.errorf ~loc "@[The interface %a@ declares values, not just types.@ \ An implementation must be provided.@]" - Location.print_filename intf_name + Location.Doc.quoted_filename intf_name | Interface_not_compiled intf_name -> Location.errorf ~loc "@[Could not find the .cmi file for interface@ %a.@]" - Location.print_filename intf_name + Location.Doc.quoted_filename intf_name | Not_allowed_in_functor_body -> Location.errorf ~loc "@[This expression creates fresh types.@ %s@]" @@ -3528,30 +3672,43 @@ let report_error ~loc _env = function | Not_a_packed_module ty -> Location.errorf ~loc "This expression is not a packed module. It has type@ %a" - type_expr ty + (Style.as_inline_code type_expr) ty | Incomplete_packed_module ty -> Location.errorf ~loc "The type of this packed module contains variables:@ %a" - type_expr ty + (Style.as_inline_code type_expr) ty | Scoping_pack (lid, ty) -> Location.errorf ~loc "The type %a in this module cannot be exported.@ \ - Its type contains local dependencies:@ %a" longident lid type_expr ty + Its type contains local dependencies:@ %a" + (Style.as_inline_code longident) lid + (Style.as_inline_code type_expr) ty | Recursive_module_require_explicit_type -> Location.errorf ~loc "Recursive modules require an explicit module type." | Apply_generative -> Location.errorf ~loc - "This is a generative functor. It can only be applied to ()" + "This is a generative functor. It can only be applied to %a" + Style.inline_code "()" | Cannot_scrape_alias p -> Location.errorf ~loc "This is an alias for module %a, which is missing" - path p + (Style.as_inline_code path) p + | Cannot_alias p -> + Location.errorf ~loc + "Functor arguments, such as %a, cannot be aliased" + (Style.as_inline_code path) p | Cannot_scrape_package_type p -> Location.errorf ~loc "The type of this packed module refers to %a, which is missing" - path p + (Style.as_inline_code path) p | Badly_formed_signature (context, err) -> - Location.errorf ~loc "@[In %s:@ %a@]" context Typedecl.report_error err + let report = Typedecl.report_error ~loc err in + let txt = + Format_doc.doc_printf "In %s:@ %a" + context + Format_doc.pp_doc report.main.txt + in + { report with main = { report.main with txt} } | Cannot_hide_id Illegal_shadowing { shadowed_item_kind; shadowed_item_id; shadowed_item_loc; shadower_id; user_id; user_kind; user_loc } -> @@ -3564,39 +3721,50 @@ let report_error ~loc _env = function let shadowed_item_kind= Sig_component_kind.to_string shadowed_item_kind in let shadowed_msg = Location.msg ~loc:shadowed_item_loc - "@[%s %s came from this include.@]" + "@[%s %a came from this include.@]" (String.capitalize_ascii shadowed_item_kind) - shadowed + Style.inline_code shadowed in let user_msg = Location.msg ~loc:user_loc - "@[The %s %s has no valid type@ if %s is shadowed.@]" - (Sig_component_kind.to_string user_kind) (Ident.name user_id) - shadowed + "@[The %s %a has no valid type@ if %a is shadowed.@]" + (Sig_component_kind.to_string user_kind) + Style.inline_code (Ident.name user_id) + Style.inline_code shadowed in Location.errorf ~loc ~sub:[shadowed_msg; user_msg] - "Illegal shadowing of included %s %s@ by %s." - shadowed_item_kind shadowed shadower + "Illegal shadowing of included %s %a@ by %a." + shadowed_item_kind + Style.inline_code shadowed + Style.inline_code shadower | Cannot_hide_id Appears_in_signature { opened_item_kind; opened_item_id; user_id; user_kind; user_loc } -> let opened_item_kind= Sig_component_kind.to_string opened_item_kind in let opened_id = Ident.name opened_item_id in let user_msg = Location.msg ~loc:user_loc - "@[The %s %s has no valid type@ if %s is hidden.@]" - (Sig_component_kind.to_string user_kind) (Ident.name user_id) - opened_id + "@[The %s %a has no valid type@ if %a is hidden.@]" + (Sig_component_kind.to_string user_kind) + Style.inline_code (Ident.name user_id) + Style.inline_code opened_id in Location.errorf ~loc ~sub:[user_msg] - "The %s %s introduced by this open appears in the signature." - opened_item_kind opened_id + "The %s %a introduced by this open appears in the signature." + opened_item_kind + Style.inline_code opened_id | Invalid_type_subst_rhs -> - Location.errorf ~loc "Only type synonyms are allowed on the right of :=" - | Unpackable_local_modtype_subst p -> + Location.errorf ~loc "Only type synonyms are allowed on the right of %a" + Style.inline_code ":=" + | Non_packable_local_modtype_subst p -> + let[@manual.ref "ss:module-type-substitution"] manual_ref = + [ 12; 7; 3 ] + in Location.errorf ~loc - "The module type@ %s@ is not a valid type for a packed module:@ \ - it is defined as a local substitution for a non-path module type." - (Path.name p) + "The module type@ %a@ is not a valid type for a packed module:@ \ + it is defined as a local substitution (temporary name)@ \ + for an anonymous module type.@ %a" + Style.inline_code (Path.name p) + Misc.print_see_manual manual_ref let report_error env ~loc err = Printtyp.wrap_printing_env ~error:true env diff --git a/ocamlmerlin_mlx/ocaml/typing/typemod.mli b/ocamlmerlin_mlx/ocaml/typing/typemod.mli index 209f2a5..d2f52d3 100644 --- a/ocamlmerlin_mlx/ocaml/typing/typemod.mli +++ b/ocamlmerlin_mlx/ocaml/typing/typemod.mli @@ -39,12 +39,10 @@ val type_toplevel_phrase: Typedtree.structure * Types.signature * (* Signature_names.t * *) Shape.t * Env.t val type_implementation: - string -> string -> string -> Env.t -> - Parsetree.structure -> Typedtree.implementation + Unit_info.t -> Env.t -> Parsetree.structure -> + Typedtree.implementation val type_interface: Env.t -> Parsetree.signature -> Typedtree.signature -val transl_signature: - Env.t -> Parsetree.signature -> Typedtree.signature val check_nongen_signature: Env.t -> Types.signature -> unit (* @@ -54,17 +52,16 @@ val type_open_: Env.t -> Location.t -> Longident.t Asttypes.loc -> Path.t * Env.t *) val modtype_of_package: - Env.t -> Location.t -> - Path.t -> (Longident.t * type_expr) list -> module_type + Env.t -> Location.t -> package -> module_type val path_of_module : Typedtree.module_expr -> Path.t option val save_signature: - string -> Typedtree.signature -> string -> string -> - Env.t -> Cmi_format.cmi_infos -> unit + Unit_info.t -> Typedtree.signature -> Env.t -> + Cmi_format.cmi_infos -> unit val package_units: - Env.t -> string list -> string -> string -> Typedtree.module_coercion + Env.t -> string list -> Unit_info.Artifact.t -> Typedtree.module_coercion (* Should be in Envaux, but it breaks the build of the debugger *) val initial_env: @@ -76,6 +73,8 @@ module Sig_component_kind : sig type t = | Value | Type + | Constructor + | Label | Module | Module_type | Extension_constructor @@ -115,6 +114,7 @@ type error = Longident.t * Path.t * Includemod.explanation | With_changes_module_alias of Longident.t * Ident.t * Path.t | With_cannot_remove_constrained_type + | With_package_manifest of Longident.t * type_expr | Repeated_name of Sig_component_kind.t * string | Non_generalizable of { vars : type_expr list; expression : type_expr } | Non_generalizable_module of @@ -132,8 +132,9 @@ type error = | Badly_formed_signature of string * Typedecl.error | Cannot_hide_id of hiding_error | Invalid_type_subst_rhs - | Unpackable_local_modtype_subst of Path.t + | Non_packable_local_modtype_subst of Path.t | With_cannot_remove_packed_modtype of Path.t * module_type + | Cannot_alias of Path.t exception Error of Location.t * Env.t * error exception Error_forward of Location.error diff --git a/ocamlmerlin_mlx/ocaml/typing/typeopt.ml b/ocamlmerlin_mlx/ocaml/typing/typeopt.ml index 7462e16..aebd7fb 100644 --- a/ocamlmerlin_mlx/ocaml/typing/typeopt.ml +++ b/ocamlmerlin_mlx/ocaml/typing/typeopt.ml @@ -18,45 +18,45 @@ open Types open Asttypes open Typedtree +open Lambda let scrape_ty env ty = match get_desc ty with | Tconstr _ -> - let ty = Ctype.expand_head_opt env (Ctype.correct_levels ty) in + let ty = Ctype.expand_head_opt env ty in begin match get_desc ty with | Tconstr (p, _, _) -> begin match Env.find_type p env with | {type_kind = ( Type_variant (_, Variant_unboxed) - | Type_record (_, Record_unboxed _) ); _} -> begin - match Typedecl_unboxed.get_unboxed_type_representation env ty with - | None -> ty - | Some ty2 -> ty2 - end - | _ -> ty - | exception Not_found -> ty + | Type_record (_, Record_unboxed _) ); _} -> + Typedecl_unboxed.get_unboxed_type_representation env ty + | _ -> Some ty + | exception Not_found -> None end | _ -> - ty + Some ty end - | _ -> ty + | _ -> Some ty let scrape env ty = - get_desc (scrape_ty env ty) + Option.map get_desc (scrape_ty env ty) -let _scrape_poly env ty = +let scrape_poly env ty = let ty = scrape_ty env ty in - match get_desc ty with - | Tpoly (ty, _) -> get_desc ty - | d -> d + Option.map (fun ty -> + match get_desc ty with + | Tpoly (ty, _) -> get_desc ty + | d -> d) + ty let is_function_type env ty = match scrape env ty with - | Tarrow (_, lhs, rhs, _) -> Some (lhs, rhs) + | Some (Tarrow (_, lhs, rhs, _)) -> Some (lhs, rhs) | _ -> None let is_base_type env ty base_ty_path = match scrape env ty with - | Tconstr(p, _, _) -> Path.same p base_ty_path + | Some (Tconstr(p, _, _)) -> Path.same p base_ty_path | _ -> false let is_immediate = function @@ -67,6 +67,15 @@ let is_immediate = function targeting 32 or 64 bits. *) !Clflags.native_code && Sys.word_size = 64 +let maybe_pointer_type env ty = + match scrape_ty env ty with + | Some ty -> + if is_immediate (Ctype.immediacy env ty) then Immediate + else Pointer + | None -> Pointer + +let maybe_pointer exp = maybe_pointer_type exp.exp_env exp.exp_type + type classification = | Int | Float @@ -74,25 +83,29 @@ type classification = | Addr (* anything except a float or a lazy *) | Any -let classify env ty = - let ty = scrape_ty env ty in - if is_immediate (Ctype.immediacy env ty) then Int +let classify env ty : classification = + match scrape_ty env ty with + | None -> Any + | Some ty -> + if maybe_pointer_type env ty = Immediate then Int else match get_desc ty with | Tvar _ | Tunivar _ -> Any | Tconstr (p, _args, _abbrev) -> - if Path.same p Predef.path_float then Float - else if Path.same p Predef.path_lazy_t then Lazy - else if Path.same p Predef.path_string - || Path.same p Predef.path_bytes - || Path.same p Predef.path_array - || Path.same p Predef.path_nativeint - || Path.same p Predef.path_int32 - || Path.same p Predef.path_int64 then Addr - else begin + begin match Predef.find_type_constr p with + | Some `Float -> Float + | Some `Lazy_t -> Lazy + | Some (`Int | `Char) -> Int + | Some (`String | `Bytes + | `Int32 | `Int64 | `Nativeint + | `Extension_constructor | `Continuation + | `Array | `Floatarray | `Iarray + | `Atomic_loc) + -> Addr + | Some #Predef.data_type_constr | None -> try match (Env.find_type p env).type_kind with - | Type_abstract -> + | Type_abstract _ -> Any | Type_record _ | Type_variant _ | Type_open -> Addr @@ -107,17 +120,17 @@ let classify env ty = | Tlink _ | Tsubst _ | Tpoly _ | Tfield _ -> assert false -(* let array_type_kind env ty = match scrape_poly env ty with - | Tconstr(p, [elt_ty], _) when Path.same p Predef.path_array -> + | Some (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 | Addr | Lazy -> Paddrarray | Int -> Pintarray end - | Tconstr(p, [], _) when Path.same p Predef.path_floatarray -> + | Some (Tconstr(p, [], _)) when Path.same p Predef.path_floatarray -> Pfloatarray | _ -> (* This can happen with e.g. Obj.field *) @@ -125,18 +138,20 @@ let array_type_kind env ty = let array_kind exp = array_type_kind exp.exp_env exp.exp_type +(* let array_pattern_kind pat = array_type_kind pat.pat_env pat.pat_type let bigarray_decode_type env ty tbl dfl = match scrape env ty with - | Tconstr(Pdot(Pident mod_id, type_name), [], _) + | Some (Tconstr(Pdot(Pident mod_id, type_name), [], _)) when Ident.name mod_id = "Stdlib__Bigarray" -> begin try List.assoc type_name tbl with Not_found -> dfl end | _ -> dfl let kind_table = - ["float32_elt", Pbigarray_float32; + ["float16_elt", Pbigarray_float16; + "float32_elt", Pbigarray_float32; "float64_elt", Pbigarray_float64; "int8_signed_elt", Pbigarray_sint8; "int8_unsigned_elt", Pbigarray_uint8; @@ -155,7 +170,7 @@ let layout_table = let bigarray_type_kind_and_layout env typ = match scrape env typ with - | Tconstr(_p, [_caml_type; elt_type; layout_type], _abbrev) -> + | Some (Tconstr(_p, [_caml_type; elt_type; layout_type], _abbrev)) -> (bigarray_decode_type env elt_type kind_table Pbigarray_unknown, bigarray_decode_type env layout_type layout_table Pbigarray_unknown_layout) @@ -163,7 +178,9 @@ let bigarray_type_kind_and_layout env typ = (Pbigarray_unknown, Pbigarray_unknown_layout) let value_kind env ty = - let ty = scrape_ty env ty in + match scrape_ty env ty with + | None -> Pgenval + | Some ty -> if is_immediate (Ctype.immediacy env ty) then Pintval else begin match get_desc ty with @@ -178,11 +195,6 @@ let value_kind env ty = | _ -> Pgenval end - -let function_return_value_kind env ty = - match is_function_type env ty with - | Some (_lhs, rhs) -> value_kind env rhs - | None -> Pgenval *) (** Whether a forward block is needed for a lazy thunk on a value, i.e. diff --git a/ocamlmerlin_mlx/ocaml/typing/typeopt.mli b/ocamlmerlin_mlx/ocaml/typing/typeopt.mli index 6ca678d..1e7c1ec 100644 --- a/ocamlmerlin_mlx/ocaml/typing/typeopt.mli +++ b/ocamlmerlin_mlx/ocaml/typing/typeopt.mli @@ -19,18 +19,18 @@ val is_function_type : Env.t -> Types.type_expr -> (Types.type_expr * Types.type_expr) option val is_base_type : Env.t -> Types.type_expr -> Path.t -> bool -(* val maybe_pointer_type : Env.t -> Types.type_expr -> Lambda.immediate_or_pointer val maybe_pointer : Typedtree.expression -> Lambda.immediate_or_pointer val array_type_kind : Env.t -> Types.type_expr -> Lambda.array_kind + val array_kind : Typedtree.expression -> Lambda.array_kind +(* val array_pattern_kind : Typedtree.pattern -> Lambda.array_kind val bigarray_type_kind_and_layout : Env.t -> Types.type_expr -> Lambda.bigarray_kind * Lambda.bigarray_layout val value_kind : Env.t -> Types.type_expr -> Lambda.value_kind -val function_return_value_kind : Env.t -> Types.type_expr -> Lambda.value_kind *) val classify_lazy_argument : Typedtree.expression -> diff --git a/ocamlmerlin_mlx/ocaml/typing/types.ml b/ocamlmerlin_mlx/ocaml/typing/types.ml index 4bba370..a195dcd 100644 --- a/ocamlmerlin_mlx/ocaml/typing/types.ml +++ b/ocamlmerlin_mlx/ocaml/typing/types.ml @@ -22,15 +22,19 @@ open Asttypes type transient_expr = { mutable desc: type_desc; mutable level: int; - mutable scope: int; + mutable scope: scope_field; id: int } +and scope_field = int + (* bit field: 27 bits for scope (Ident.highest_scope = 100_000_000) + and at least 4 marks *) + and type_expr = transient_expr and type_desc = Tvar of string option | Tarrow of arg_label * type_expr * type_expr * commutable - | Ttuple of type_expr list + | Ttuple of (string option * type_expr) list | Tconstr of Path.t * type_expr list * abbrev_memo ref | Tobject of type_expr * (Path.t * type_expr list) option ref | Tfield of string * field_kind * type_expr * type_expr @@ -40,7 +44,11 @@ and type_desc = | Tvariant of row_desc | Tunivar of string option | Tpoly of type_expr * type_expr list - | Tpackage of Path.t * (Longident.t * type_expr) list + | Tpackage of package + +and package = + { pack_path : Path.t; + pack_cstrs : (string list * type_expr) list } and row_desc = { row_fields: (label * row_field) list; @@ -51,13 +59,14 @@ and row_desc = and fixed_explanation = | Univar of type_expr | Fixed_private | Reified of Path.t | Rigid and row_field = [`some] row_field_gen +and row_field_cell = [`some | `none] row_field_gen ref and _ row_field_gen = RFpresent : type_expr option -> [> `some] row_field_gen | RFeither : { no_arg: bool; arg_type: type_expr list; matched: bool; - ext: [`some | `none] row_field_gen ref} -> [> `some] row_field_gen + ext: row_field_cell} -> [> `some] row_field_gen | RFabsent : [> `some] row_field_gen | RFnone : [> `none] row_field_gen @@ -87,6 +96,8 @@ module TransientTypeOps = struct let equal t1 t2 = t1 == t2 end +module TransientTypeHash = Hashtbl.Make(TransientTypeOps) + (* *) module Uid = Shape.Uid @@ -138,18 +149,25 @@ and method_privacy = 0 <= may_pos <= pos 0 <= may_weak <= may_neg <= neg 0 <= inj + may_pos/may_neg mean possible positive/negative occurrences; + thus, may_pos + may_neg = invariant Additionally, the following implications are valid pos => inj neg => inj Examples: - type 'a t : may_pos + may_neg + may_weak + type 'a t : may_pos + may_neg + type +'a t : may_pos + type -'a t : may_neg + type +-'a t : null (no occurrence of 'a assured) + type !'a t : may_pos + may_neg + inj + type +!'a t : may_pos + inj + type -!'a t : may_neg + inj + type +-!'a t : inj type 'a t = 'a : pos type 'a t = 'a -> unit : neg type 'a t = ('a -> unit) -> unit : pos + may_weak type 'a t = A of (('a -> unit) -> unit) : pos type +'a p = .. : may_pos + inj - type +!'a t : may_pos + inj - type -!'a t : may_neg + inj type 'a t = A : inj *) @@ -175,6 +193,7 @@ module Variance = struct let unknown = 7 let full = single Inv let covariant = single Pos + let contravariant = single Neg let swap f1 f2 v v' = set_if (mem f2 v) f1 (set_if (mem f1 v) f2 v') let conjugate v = @@ -249,11 +268,16 @@ type type_declaration = and type_decl_kind = (label_declaration, constructor_declaration) type_kind and ('lbl, 'cstr) type_kind = - Type_abstract + Type_abstract of type_origin | Type_record of 'lbl list * record_representation | Type_variant of 'cstr list * variant_representation | Type_open +and type_origin = + Definition + | Rec_check_regularity + | Existential of string + and record_representation = Record_regular (* All fields are boxed / tagged *) | Record_float (* All fields are floats *) @@ -269,6 +293,7 @@ and label_declaration = { ld_id: Ident.t; ld_mutable: mutable_flag; + ld_atomic: atomic_flag; ld_type: type_expr; ld_loc: Location.t; ld_attributes: Parsetree.attributes; @@ -393,52 +418,6 @@ and ext_status = | Text_next (* not first constructor of an extension *) | Text_exception (* an exception *) - -(* Constructor and record label descriptions inserted held in typing - environments *) - -type constructor_description = - { cstr_name: string; (* Constructor name *) - cstr_res: type_expr; (* Type of the result *) - cstr_existentials: type_expr list; (* list of existentials *) - cstr_args: type_expr list; (* Type of the arguments *) - cstr_arity: int; (* Number of arguments *) - cstr_tag: constructor_tag; (* Tag for heap blocks *) - cstr_consts: int; (* Number of constant constructors *) - cstr_nonconsts: int; (* Number of non-const constructors *) - cstr_generalized: bool; (* Constrained return type? *) - cstr_private: private_flag; (* Read-only constructor? *) - cstr_loc: Location.t; - cstr_attributes: Parsetree.attributes; - cstr_inlined: type_declaration option; - cstr_uid: Uid.t; - } - -and constructor_tag = - Cstr_constant of int (* Constant constructor (an int) *) - | Cstr_block of int (* Regular constructor (a block) *) - | Cstr_unboxed (* Constructor of an unboxed type *) - | Cstr_extension of Path.t * bool (* Extension constructor - true if a constant false if a block*) - -let equal_tag t1 t2 = - match (t1, t2) with - | Cstr_constant i1, Cstr_constant i2 -> i2 = i1 - | Cstr_block i1, Cstr_block i2 -> i2 = i1 - | Cstr_unboxed, Cstr_unboxed -> true - | Cstr_extension (path1, b1), Cstr_extension (path2, b2) -> - Path.same path1 path2 && b1 = b2 - | (Cstr_constant _|Cstr_block _|Cstr_unboxed|Cstr_extension _), _ -> false - -let may_equal_constr c1 c2 = - c1.cstr_arity = c2.cstr_arity - && (match c1.cstr_tag,c2.cstr_tag with - | Cstr_extension _,Cstr_extension _ -> - (* extension constructors may be rebindings of each other *) - true - | tag1, tag2 -> - equal_tag tag1 tag2) - let item_visibility = function | Sig_value (_, _, vis) | Sig_type (_, _, _, vis) @@ -448,20 +427,6 @@ let item_visibility = function | Sig_class (_, _, _, vis) | Sig_class_type (_, _, _, vis) -> vis -type label_description = - { lbl_name: string; (* Short name *) - lbl_res: type_expr; (* Type of the result *) - lbl_arg: type_expr; (* Type of the argument *) - lbl_mut: mutable_flag; (* Is this a mutable field? *) - lbl_pos: int; (* Position in block *) - lbl_all: label_description array; (* All the labels in this type *) - lbl_repres: record_representation; (* Representation for this record *) - lbl_private: private_flag; (* Read-only field? *) - lbl_loc: Location.t; - lbl_attributes: Parsetree.attributes; - lbl_uid: Uid.t; - } - let rec bound_value_identifiers = function [] -> [] | Sig_value(id, {val_kind = Val_reg}, _) :: rem -> @@ -502,9 +467,7 @@ type changes = | Unchanged | Invalid -open Local_store - -let trail = s_table ref Unchanged +let trail = Local_store.s_table ref Unchanged let log_change ch = let r' = ref Unchanged in @@ -574,12 +537,48 @@ let repr t = | _ -> t +(* scope_field and marks *) + +let scope_mask = (1 lsl 27) - 1 +let marks_mask = (-1) lxor scope_mask +let () = assert (Ident.highest_scope land marks_mask = 0) + +type type_mark = + | Mark of {mark: int; mutable marked: type_expr list} + | Hash of {visited: unit TransientTypeHash.t} +let type_marks = + (* All the bits in marks_mask *) + List.init (Sys.int_size - 27) (fun x -> 1 lsl (x + 27)) +let available_marks = Local_store.s_ref type_marks +let with_type_mark f = + match !available_marks with + | mark :: rem as old -> + available_marks := rem; + let mk = Mark {mark; marked = []} in + Misc.try_finally (fun () -> f mk) ~always: begin fun () -> + available_marks := old; + match mk with + | Mark {marked} -> + (* unmark marked type nodes *) + List.iter + (fun ty -> ty.scope <- ty.scope land ((-1) lxor mark)) + marked + | Hash _ -> () + end + | [] -> + (* When marks are exhausted, fall back to using a hash table *) + f (Hash {visited = TransientTypeHash.create 1}) + (* getters for type_expr *) let get_desc t = (repr t).desc let get_level t = (repr t).level -let get_scope t = (repr t).scope +let get_scope t = (repr t).scope land scope_mask let get_id t = (repr t).id +let not_marked_node mark t = + match mark with + | Mark {mark} -> (repr t).scope land mark = 0 + | Hash {visited} -> not (TransientTypeHash.mem visited (repr t)) (* transient type_expr *) @@ -588,12 +587,28 @@ module Transient_expr = struct let set_desc ty d = ty.desc <- d let set_stub_desc ty d = assert (ty.desc = Tvar None); ty.desc <- d let set_level ty lv = ty.level <- lv - let set_scope ty sc = ty.scope <- sc + let get_scope ty = ty.scope land scope_mask + let get_marks ty = ty.scope lsr 27 + let set_scope ty sc = + if (sc land marks_mask <> 0) then + invalid_arg(Format.sprintf "Types.Transient_expr.set_scope %i" sc); + ty.scope <- (ty.scope land marks_mask) lor sc + let try_mark_node mark ty = + match mark with + | Mark ({mark} as mk) -> + (ty.scope land mark = 0) && (* mark type node when not marked *) + (ty.scope <- ty.scope lor mark; mk.marked <- ty :: mk.marked; true) + | Hash {visited} -> + not (TransientTypeHash.mem visited ty) && + (TransientTypeHash.add visited ty (); true) let coerce ty = ty let repr = repr let type_expr ty = ty end +(* setting marks *) +let try_mark_node mark t = Transient_expr.try_mark_node mark (repr t) + (* Comparison for [type_expr]; cannot be used for functors *) let eq_type t1 t2 = t1 == t2 || repr t1 == repr t2 @@ -720,8 +735,7 @@ let match_row_field ~present ~absent ~either (f : row_field) = | RFnone -> None | RFeither _ | RFpresent _ | RFabsent as e -> Some e in - either no_arg arg_type matched e - + either no_arg arg_type matched (ext,e) (**** Some type creators ****) @@ -729,13 +743,10 @@ let new_id = Local_store.s_ref (-1) let create_expr = Transient_expr.create -let newty3 ~level ~scope desc = +let proto_newty3 ~level ~scope desc = incr new_id; create_expr desc ~level ~scope ~id:!new_id -let newty2 ~level desc = - newty3 ~level ~scope:Ident.lowest_scope desc - (**********************************) (* Utilities for backtracking *) (**********************************) @@ -754,7 +765,7 @@ let undo_change = function type snapshot = changes ref * int let last_snapshot = Local_store.s_ref 0 -let linked_variables = s_ref 0 +let linked_variables = Local_store.s_ref 0 let log_type ty = if ty.id <= !last_snapshot then log_change (Ctype (ty, ty.desc)) @@ -799,13 +810,16 @@ let set_level ty level = if ty.id <= !last_snapshot then log_change (Clevel (ty, ty.level)); Transient_expr.set_level ty level end + (* TODO: introduce a guard and rename it to set_higher_scope? *) let set_scope ty scope = let ty = repr ty in - if scope <> ty.scope then begin - if ty.id <= !last_snapshot then log_change (Cscope (ty, ty.scope)); + let prev_scope = ty.scope land scope_mask in + if scope <> prev_scope then begin + if ty.id <= !last_snapshot then log_change (Cscope (ty, prev_scope)); Transient_expr.set_scope ty scope end + let set_univar rty ty = log_change (Cuniv (rty, !rty)); rty := Some ty let set_name nm v = diff --git a/ocamlmerlin_mlx/ocaml/typing/types.mli b/ocamlmerlin_mlx/ocaml/typing/types.mli index ec8a137..460ad3e 100644 --- a/ocamlmerlin_mlx/ocaml/typing/types.mli +++ b/ocamlmerlin_mlx/ocaml/typing/types.mli @@ -73,8 +73,13 @@ type type_desc = See [commutable] for the last argument. *) - | Ttuple of type_expr list - (** [Ttuple [t1;...;tn]] ==> [(t1 * ... * tn)] *) + | Ttuple of (string option * type_expr) list + (** [Ttuple [None, t1; ...; None, tn]] ==> [t1 * ... * tn] + [Ttuple [Some "l1", t1; ...; Some "ln", tn]] ==> [l1:t1 * ... * ln:tn] + + Any mix of labeled and unlabeled components also works: + [Ttuple [Some "l1", t1; None, t2; Some "l3", t3]] ==> [l1:t1 * t2 * l3:t3] + *) | Tconstr of Path.t * type_expr list * abbrev_memo ref (** [Tconstr (`A.B.t', [t1;...;tn], _)] ==> [(t1,...,tn) A.B.t] @@ -129,9 +134,14 @@ type type_desc = where 'a1 ... 'an are names given to types in tyl and occurrences of those types in ty. *) - | Tpackage of Path.t * (Longident.t * type_expr) list + | Tpackage of package (** Type of a first-class module (a.k.a package). *) +(** [package] corresponds to the type of a first-class module *) +and package = + { pack_path : Path.t; + pack_cstrs : (string list * type_expr) list } + and fixed_explanation = | Univar of type_expr (** The row type was bound to an univar *) | Fixed_private (** The row type is private *) @@ -221,18 +231,36 @@ val get_level: type_expr -> int val get_scope: type_expr -> int val get_id: type_expr -> int +(** Access to marks. They are stored in the scope field. *) +type type_mark +val with_type_mark: (type_mark -> 'a) -> 'a + (* run a computation using exclusively an available type mark *) + +val not_marked_node: type_mark -> type_expr -> bool + (* Return true if a type node is not yet marked *) + +val try_mark_node: type_mark -> type_expr -> bool + (* Mark a type node if it is not yet marked. + Marks will be automatically removed when leaving the + scope of [with_type_mark]. + + Return false if it was already marked *) + (** Transient [type_expr]. Should only be used immediately after [Transient_expr.repr] *) type transient_expr = private { mutable desc: type_desc; mutable level: int; - mutable scope: int; + mutable scope: scope_field; id: int } +and scope_field (* abstract *) module Transient_expr : sig (** Operations on [transient_expr] *) val create: type_desc -> level: int -> scope: int -> id: int -> transient_expr + val get_scope: transient_expr -> int + val get_marks: transient_expr -> int val set_desc: transient_expr -> type_desc -> unit val set_level: transient_expr -> int -> unit val set_scope: transient_expr -> int -> unit @@ -244,18 +272,17 @@ module Transient_expr : sig val set_stub_desc: type_expr -> type_desc -> unit (** Instantiate a not yet instantiated stub. Fail if already instantiated. *) + + val try_mark_node: type_mark -> transient_expr -> bool end val create_expr: type_desc -> level: int -> scope: int -> id: int -> type_expr (** Functions and definitions moved from Btype *) -val newty3: level:int -> scope:int -> type_desc -> type_expr +val proto_newty3: level:int -> scope:int -> type_desc -> transient_expr (** Create a type with a fresh id *) -val newty2: level:int -> type_desc -> type_expr - (** Create a type with a fresh id and no scope *) - module TransientTypeOps : sig (** Comparisons for functors *) @@ -265,6 +292,8 @@ module TransientTypeOps : sig val hash : t -> int end +module TransientTypeHash : Hashtbl.S with type key = transient_expr + (** Comparisons for [type_expr]; cannot be used for functors *) val eq_type: type_expr -> type_expr -> bool @@ -346,12 +375,15 @@ val rf_either_of: type_expr option -> row_field val eq_row_field_ext: row_field -> row_field -> bool val changed_row_field_exts: row_field list -> (unit -> unit) -> bool +type row_field_cell val match_row_field: present:(type_expr option -> 'a) -> absent:(unit -> 'a) -> - either:(bool -> type_expr list -> bool -> row_field option ->'a) -> + either:(bool -> type_expr list -> bool -> + row_field_cell * row_field option ->'a) -> row_field -> 'a + (* *) module Uid = Shape.Uid @@ -413,6 +445,7 @@ module Variance : sig val null : t (* no occurrence *) val full : t (* strictly invariant (all flags) *) val covariant : t (* strictly covariant (May_pos, Pos and Inj) *) + val contravariant : t (* strictly contravariant *) val unknown : t (* allow everything, guarantee nothing *) val union : t -> t -> t val inter : t -> t -> t @@ -486,11 +519,16 @@ type type_declaration = and type_decl_kind = (label_declaration, constructor_declaration) type_kind and ('lbl, 'cstr) type_kind = - Type_abstract + Type_abstract of type_origin | Type_record of 'lbl list * record_representation | Type_variant of 'cstr list * variant_representation | Type_open +and type_origin = + Definition + | Rec_check_regularity (* See Typedecl.transl_type_decl *) + | Existential of string + and record_representation = Record_regular (* All fields are boxed / tagged *) | Record_float (* All fields are floats *) @@ -507,6 +545,7 @@ and label_declaration = { ld_id: Ident.t; ld_mutable: mutable_flag; + ld_atomic: atomic_flag; ld_type: type_expr; ld_loc: Location.t; ld_attributes: Parsetree.attributes; @@ -634,54 +673,6 @@ and ext_status = val item_visibility : signature_item -> visibility -(* Constructor and record label descriptions inserted held in typing - environments *) - -type constructor_description = - { cstr_name: string; (* Constructor name *) - cstr_res: type_expr; (* Type of the result *) - cstr_existentials: type_expr list; (* list of existentials *) - cstr_args: type_expr list; (* Type of the arguments *) - cstr_arity: int; (* Number of arguments *) - cstr_tag: constructor_tag; (* Tag for heap blocks *) - cstr_consts: int; (* Number of constant constructors *) - cstr_nonconsts: int; (* Number of non-const constructors *) - cstr_generalized: bool; (* Constrained return type? *) - cstr_private: private_flag; (* Read-only constructor? *) - cstr_loc: Location.t; - cstr_attributes: Parsetree.attributes; - cstr_inlined: type_declaration option; - cstr_uid: Uid.t; - } - -and constructor_tag = - Cstr_constant of int (* Constant constructor (an int) *) - | Cstr_block of int (* Regular constructor (a block) *) - | Cstr_unboxed (* Constructor of an unboxed type *) - | Cstr_extension of Path.t * bool (* Extension constructor - true if a constant false if a block*) - -(* Constructors are the same *) -val equal_tag : constructor_tag -> constructor_tag -> bool - -(* Constructors may be the same, given potential rebinding *) -val may_equal_constr : - constructor_description -> constructor_description -> bool - -type label_description = - { lbl_name: string; (* Short name *) - lbl_res: type_expr; (* Type of the result *) - lbl_arg: type_expr; (* Type of the argument *) - lbl_mut: mutable_flag; (* Is this a mutable field? *) - lbl_pos: int; (* Position in block *) - lbl_all: label_description array; (* All the labels in this type *) - lbl_repres: record_representation; (* Representation for this record *) - lbl_private: private_flag; (* Read-only field? *) - lbl_loc: Location.t; - lbl_attributes: Parsetree.attributes; - lbl_uid: Uid.t; - } - (** Extracts the list of "value" identifiers bound by a signature. "Value" identifiers are identifiers for signature components that correspond to a run-time value: values, extensions, modules, classes. diff --git a/ocamlmerlin_mlx/ocaml/typing/typetexp.ml b/ocamlmerlin_mlx/ocaml/typing/typetexp.ml index a104ba8..239cfd7 100644 --- a/ocamlmerlin_mlx/ocaml/typing/typetexp.ml +++ b/ocamlmerlin_mlx/ocaml/typing/typetexp.ml @@ -18,7 +18,6 @@ (* Typechecking of type expressions for the core language *) open Asttypes -open Misc open Parsetree open Typedtree open Types @@ -33,7 +32,6 @@ type error = | Type_arity_mismatch of Longident.t * int * int | Bound_type_variable of string | Recursive_type - | Unbound_row_variable of Longident.t | Type_mismatch of Errortrace.unification_error | Alias_type_mismatch of Errortrace.unification_error | Present_has_conjunction of string @@ -47,6 +45,7 @@ type error = | Method_mismatch of string * type_expr * type_expr | Opened_object of Path.t option | Not_an_object of type_expr + | Repeated_tuple_label of string exception Error of Location.t * Env.t * error exception Error_forward of Location.error @@ -57,7 +56,7 @@ module TyVarEnv : sig (* see mli file *) val is_in_scope : string -> bool - val add : string -> type_expr -> unit + val add : ?unused:bool ref -> string -> type_expr -> unit (* add a global type variable to the environment *) val with_local_scope : (unit -> 'a) -> 'a @@ -104,7 +103,8 @@ module TyVarEnv : sig row_context:type_expr option ref list -> 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 + val remember_used : + ?check:Location.t -> 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 @@ -127,13 +127,13 @@ end = struct (* These are the "global" type variables: they were in scope before we started processing the current type. *) - let type_variables = ref (TyVarMap.empty : type_expr TyVarMap.t) + let type_variables = ref (TyVarMap.empty : (type_expr * bool ref) TyVarMap.t) (* These are variables that have been used in the currently-being-checked type. *) let used_variables = - ref (TyVarMap.empty : (type_expr * Location.t) TyVarMap.t) + ref (TyVarMap.empty : (type_expr * Location.t * bool ref) 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 @@ -165,9 +165,9 @@ end = struct let is_in_scope name = TyVarMap.mem name !type_variables - let add name v = + let add ?(unused = ref false) name v = assert (not_generic v); - type_variables := TyVarMap.add name v !type_variables + type_variables := TyVarMap.add name (v, unused) !type_variables let narrow () = (increase_global_level (), !type_variables) @@ -184,10 +184,14 @@ end = struct (* throws Not_found if the variable is not in scope *) let lookup_global_type_variable name = - TyVarMap.find name !type_variables + let (v, unused) = TyVarMap.find name !type_variables in + unused := false; + v let get_in_scope_names () = - let add_name name _ l = if name = "_" then l else ("'" ^ name) :: l in + let add_name name _ l = + if name = "_" then l else Pprintast.tyvar_of_name name :: l + in TyVarMap.fold add_name !type_variables [] (*****) @@ -217,7 +221,6 @@ end = struct promoted vars let check_poly_univars env loc vars = - vars |> List.iter (fun (_, p) -> generalize p.univar); let univars = vars |> List.map (fun (name, {univar=ty1; _ }) -> let v = Btype.proxy ty1 in @@ -266,14 +269,29 @@ end = struct associate row_context p; p.univar with Not_found -> - instance (fst (TyVarMap.find name !used_variables)) + let (v, _, unused) = TyVarMap.find name !used_variables in + unused := false; + instance v (* 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 = + let remember_used ?check name v loc = assert (not_generic v); - used_variables := TyVarMap.add name (v, loc) !used_variables + let unused = match check with + | Some check_loc + when Warnings.(is_active (Unused_type_declaration ("", Alias))) -> + let unused = ref true in + !Env.add_delayed_check_forward begin fun () -> + let warn = Warnings.(Unused_type_declaration ("'" ^ name, Alias)) + in + if !unused && Warnings.is_active warn + then Location.prerr_warning check_loc warn + end; + unused + | _ -> ref false + in + used_variables := TyVarMap.add name (v, loc, unused) !used_variables type flavor = Unification | Universal @@ -308,21 +326,27 @@ end = struct let globalize_used_variables { flavor; extensibility } env = let r = ref [] in TyVarMap.iter - (fun name (ty, loc) -> + (fun name (ty, loc, unused) -> 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) + if try unify env v ty; true + with + Unify err when is_in_scope name -> + raise (Error(loc, env, Type_mismatch err)) + | _ -> Btype.backtrack snap; false + then match lookup_global_type_variable name with + | global_var -> + r := (loc, v, global_var) :: !r; + unused := false + | exception Not_found -> + if extensibility = Fixed && Btype.is_Tvar ty then + raise(Error(loc, env, + Unbound_type_variable (Pprintast.tyvar_of_name name, + get_in_scope_names ()))); + let v2 = new_global_var () in + r := (loc, v, v2) :: !r; + add ~unused name v2) !used_variables; used_variables := TyVarMap.empty; fun () -> @@ -337,36 +361,18 @@ end let transl_modtype_longident = ref (fun _ -> assert false) let transl_modtype = ref (fun _ -> assert false) +let check_package_with_type_constraints = ref (fun _ -> assert false) let sort_constraints_no_duplicates loc env l = List.sort (fun (s1, _t1) (s2, _t2) -> - if s1.txt = s2.txt then + if Longident.same s1.txt s2.txt then raise (Error (loc, env, Multiple_constraints_on_type s1.txt)); compare s1.txt s2.txt) l -let create_package_mty loc p l = - List.fold_left - (fun mty (s, _) -> - let d = {ptype_name = mkloc (Longident.last s.txt) s.loc; - ptype_params = []; - ptype_cstrs = []; - ptype_kind = Ptype_abstract; - ptype_private = Asttypes.Public; - ptype_manifest = None; - ptype_attributes = []; - ptype_loc = loc} in - Ast_helper.Mty.mk ~loc - (Pmty_with (mty, [ Pwith_type ({ txt = s.txt; loc }, d) ])) - ) - (Ast_helper.Mty.mk ~loc (Pmty_ident p)) - l - (* Translation of type expressions *) -let generalize_ctyp typ = generalize typ.ctyp_type - let strict_ident c = (c = '_' || c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z') let validate_name = function @@ -382,6 +388,10 @@ let newvar ?name () = let valid_tyvar_name name = name <> "" && name.[0] <> '_' +let check_tyvar_name env loc name = + if not (valid_tyvar_name name) then + raise (Error (loc, env, Invalid_variable_name ("'" ^ name))) + let transl_type_param env styp = let loc = styp.ptyp_loc in match styp.ptyp_desc with @@ -391,8 +401,7 @@ let transl_type_param env styp = ctyp_loc = loc; ctyp_attributes = styp.ptyp_attributes; } | Ptyp_var name -> let ty = - if not (valid_tyvar_name name) then - raise (Error (loc, Env.empty, Invalid_variable_name ("'" ^ name))); + check_tyvar_name Env.empty loc name; if TyVarEnv.is_in_scope name then raise Already_bound; let v = new_global_var ~name () in @@ -409,6 +418,14 @@ let transl_type_param env styp = Builtin_attributes.warning_scope styp.ptyp_attributes (fun () -> transl_type_param env styp) +(* Forward declaration (set in Typemod.type_open) *) + +let type_open : + (?used_slot:bool ref -> override_flag -> Env.t -> Location.t -> + Longident.t loc -> Path.t * Env.t) + ref = + ref (fun ?used_slot:_ _ -> assert false) + let rec transl_type env ~policy ?(aliased=false) ~row_context styp = Msupport.with_saved_types ~warning_attribute:styp.ptyp_attributes ?save_part:None @@ -439,8 +456,7 @@ and transl_type_aux env ~row_context ~aliased ~policy styp = 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))); + check_tyvar_name env styp.ptyp_loc name; begin try TyVarEnv.lookup_local ~row_context:row_context name with Not_found -> @@ -462,8 +478,14 @@ and transl_type_aux env ~row_context ~aliased ~policy styp = ctyp (Ttyp_arrow (l, cty1, cty2)) ty | Ptyp_tuple stl -> assert (List.length stl >= 2); - let ctys = List.map (transl_type env ~policy ~row_context) stl in - let ty = newty (Ttuple (List.map (fun ctyp -> ctyp.ctyp_type) ctys)) in + Option.iter (fun l -> raise (Error (loc, env, Repeated_tuple_label l))) + (Misc.repeated_label stl); + let ctys = + List.map (fun (l, t) -> l, transl_type env ~policy ~row_context t) stl + in + let ty = + newty (Ttuple (List.map (fun (l, ctyp) -> l, ctyp.ctyp_type) ctys)) + in ctyp (Ttyp_tuple ctys) ty | Ptyp_constr(lid, stl) -> let (path, decl) = Env.lookup_type ~loc:lid.loc lid.txt env in @@ -531,32 +553,33 @@ and transl_type_aux env ~row_context ~aliased ~policy styp = | Ptyp_alias(st, alias) -> let cty = try - let t = TyVarEnv.lookup_local ~row_context alias in + check_tyvar_name env alias.loc alias.txt; + let t = TyVarEnv.lookup_local ~row_context alias.txt in let ty = transl_type env ~policy ~aliased:true ~row_context st in begin try unify_var env t ty.ctyp_type with Unify err -> let err = Errortrace.swap_unification_error err in - raise(Error(styp.ptyp_loc, env, Alias_type_mismatch err)) + raise(Error(alias.loc, env, Alias_type_mismatch err)) end; ty with Not_found -> let t, ty = - with_local_level_if_principal begin fun () -> + with_local_level_generalize_structure_if_principal begin fun () -> let t = newvar () in - TyVarEnv.remember_used alias t styp.ptyp_loc; + (* Use the whole location, which is used by [Type_mismatch]. *) + TyVarEnv.remember_used ~check:alias.loc alias.txt t styp.ptyp_loc; let ty = transl_type env ~policy ~row_context st in begin try unify_var env t ty.ctyp_type with Unify err -> let err = Errortrace.swap_unification_error err in - raise(Error(styp.ptyp_loc, env, Alias_type_mismatch err)) + raise(Error(alias.loc, env, Alias_type_mismatch err)) end; (t, ty) end - ~post: (fun (t, _) -> generalize_structure t) in let t = instance t in let px = Btype.proxy t in begin match get_desc px with - | Tvar None -> set_type_desc px (Tvar (Some alias)) - | Tunivar None -> set_type_desc px (Tunivar (Some alias)) + | Tvar None -> set_type_desc px (Tvar (Some alias.txt)) + | Tunivar None -> set_type_desc px (Tunivar (Some alias.txt)) | _ -> () end; { ty with ctyp_type = t } @@ -665,14 +688,13 @@ and transl_type_aux env ~row_context ~aliased ~policy styp = | Ptyp_poly(vars, st) -> let vars = List.map (fun v -> v.txt) vars in let new_univars, cty = - with_local_level begin fun () -> + with_local_level_generalize begin fun () -> let new_univars = TyVarEnv.make_poly_univars vars in let cty = TyVarEnv.with_univars new_univars begin fun () -> transl_type env ~policy ~row_context st end in (new_univars, cty) end - ~post:(fun (_,cty) -> generalize_ctyp cty) in let ty = cty.ctyp_type in let ty_list = TyVarEnv.check_poly_univars env styp.ptyp_loc new_univars in @@ -680,25 +702,25 @@ and transl_type_aux env ~row_context ~aliased ~policy styp = 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 loc = styp.ptyp_loc in - let l = sort_constraints_no_duplicates loc env l in - let mty = create_package_mty loc p l in - let mty = - TyVarEnv.with_local_scope (fun () -> !transl_modtype env mty) in - let ptys = List.map (fun (s, pty) -> - s, transl_type env ~policy ~row_context pty - ) l in - let path = !transl_modtype_longident loc env p.txt in - let ty = newty (Tpackage (path, - List.map (fun (s, cty) -> (s.txt, cty.ctyp_type)) ptys)) + | Ptyp_package ptyp -> + let path, mty, ptys = transl_package env ~policy ~row_context ptyp in + let ty = newty (Tpackage { + pack_path = path; + pack_cstrs = List.map (fun (s, cty) -> + (Longident.flatten s.txt, cty.ctyp_type)) ptys}) in ctyp (Ttyp_package { - pack_path = path; - pack_type = mty.mty_type; - pack_fields = ptys; - pack_txt = p; + tpt_path = path; + tpt_type = mty; + tpt_cstrs = ptys; + tpt_txt = ptyp.ppt_path; }) ty + | Ptyp_open (mod_ident, t) -> + let path, new_env = + !type_open Asttypes.Fresh env loc mod_ident + in + let cty = transl_type new_env ~policy ~row_context t in + ctyp (Ttyp_open (path, mod_ident, cty)) cty.ctyp_type | Ptyp_extension ext -> raise (Error_forward (Builtin_attributes.error_of_extension ext)) @@ -768,12 +790,28 @@ and transl_fields env ~policy ~row_context o fields = newty (Tfield (s, field_public, ty', ty))) ty_init fields in ty, object_fields +and transl_package env ~policy ~row_context ptyp = + let loc = ptyp.ppt_loc in + let l = sort_constraints_no_duplicates loc env ptyp.ppt_cstrs in + let mty = Ast_helper.Mty.mk ~loc (Pmty_ident ptyp.ppt_path) in + let mty = TyVarEnv.with_local_scope (fun () -> !transl_modtype env mty) in + let ptys = + List.map (fun (s, pty) -> s, transl_type env ~policy ~row_context pty) l + in + let mty = + if ptys <> [] then + !check_package_with_type_constraints loc env mty.mty_type ptys + else mty.mty_type + in + let path = !transl_modtype_longident loc env ptyp.ppt_path.txt in + path, mty, ptys + let transl_type env policy styp = transl_type env ~policy ~row_context:[] styp (* Make the rows "fixed" in this type, to make universal check easier *) -let rec make_fixed_univars ty = - if Btype.try_mark_node ty then +let rec make_fixed_univars mark ty = + if try_mark_node mark ty then begin match get_desc ty with | Tvariant row -> let Row {fields; more; name; closed} = row_repr row in @@ -790,14 +828,13 @@ let rec make_fixed_univars ty = (Tvariant (create_row ~fields ~more ~name ~closed ~fixed:(Some (Univar more)))); - Btype.iter_row make_fixed_univars row + Btype.iter_row (make_fixed_univars mark) row | _ -> - Btype.iter_type_expr make_fixed_univars ty + Btype.iter_type_expr (make_fixed_univars mark) ty end let make_fixed_univars ty = - make_fixed_univars ty; - Btype.unmark_type ty + with_type_mark (fun mark -> make_fixed_univars mark ty) let transl_simple_type env ?univars ~closed styp = TyVarEnv.reset_locals ?univars (); @@ -811,7 +848,7 @@ let transl_simple_type_univars env styp = TyVarEnv.reset_locals (); let typ, univs = TyVarEnv.collect_univars begin fun () -> - with_local_level ~post:generalize_ctyp begin fun () -> + with_local_level_generalize begin fun () -> let policy = TyVarEnv.univars_policy in let typ = transl_type env policy styp in TyVarEnv.globalize_used_variables policy env (); @@ -825,7 +862,7 @@ let transl_simple_type_univars env styp = let transl_simple_type_delayed env styp = TyVarEnv.reset_locals (); let typ, force = - with_local_level begin fun () -> + with_local_level_generalize begin fun () -> let policy = TyVarEnv.extensible_policy in let typ = transl_type env policy styp in make_fixed_univars typ.ctyp_type; @@ -835,8 +872,6 @@ let transl_simple_type_delayed env styp = let force = TyVarEnv.globalize_used_variables policy env in (typ, force) end - (* Generalize everything except the variables that were just globalized. *) - ~post:(fun (typ,_) -> generalize_ctyp typ) in (typ, instance typ.ctyp_type, force) @@ -845,13 +880,12 @@ let transl_type_scheme env styp = | Ptyp_poly (vars, st) -> let vars = List.map (fun v -> v.txt) vars in let univars, typ = - with_local_level begin fun () -> + with_local_level_generalize begin fun () -> TyVarEnv.reset (); let univars = TyVarEnv.make_poly_univars vars in let typ = transl_simple_type env ~univars ~closed:true st in (univars, typ) end - ~post:(fun (_,typ) -> generalize_ctyp typ) in let _ = TyVarEnv.instance_poly_univars env styp.ptyp_loc univars in { ctyp_desc = Ttyp_poly (vars, typ); @@ -860,117 +894,142 @@ let transl_type_scheme env styp = ctyp_loc = styp.ptyp_loc; ctyp_attributes = styp.ptyp_attributes } | _ -> - with_local_level + with_local_level_generalize (fun () -> TyVarEnv.reset (); transl_simple_type env ~closed:false styp) - ~post:generalize_ctyp (* Error report *) -open Format -open Printtyp +open Format_doc +open Printtyp.Doc +module Style = Misc.Style +let pp_tag ppf t = fprintf ppf "`%s" t +let pp_out_type ppf ty = Style.as_inline_code !Oprint.out_type ppf ty +let pp_type ppf ty = Style.as_inline_code Printtyp.Doc.type_expr ppf ty -let report_error env ppf = function +let report_error_doc loc env = function | 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 in_scope_names name ) + Location.aligned_error_hint ~loc + "@{The type variable @}%a is unbound in this type declaration." + Style.inline_code name + (Misc.did_you_mean (Misc.spellcheck in_scope_names name)) | No_type_wildcards -> - fprintf ppf "A type wildcard \"_\" is not allowed in this type declaration." + Location.errorf ~loc + "A type wildcard %a is not allowed in this type declaration." + Style.inline_code "_" | Undefined_type_constructor p -> - fprintf ppf "The type constructor@ %a@ is not yet completely defined" - path p + Location.errorf ~loc + "The type constructor@ %a@ is not yet completely defined" + (Style.as_inline_code path) p | Type_arity_mismatch(lid, expected, provided) -> - fprintf ppf - "@[The type constructor %a@ expects %i argument(s),@ \ - but is here applied to %i argument(s)@]" - longident lid expected provided + Location.errorf ~loc + "The type constructor %a@ expects %i argument(s),@ \ + but is here applied to %i argument(s)" + (Style.as_inline_code longident) lid expected provided | Bound_type_variable name -> - fprintf ppf "Already bound type parameter %a" Pprintast.tyvar name + Location.errorf ~loc "Already bound type parameter %a" + (Style.as_inline_code Pprintast.Doc.tyvar) name | Recursive_type -> - fprintf ppf "This type is recursive" - | Unbound_row_variable lid -> - (* we don't use "spellcheck" here: this error is not raised - anywhere so it's unclear how it should be handled *) - fprintf ppf "Unbound row variable in #%a" longident lid + Location.errorf ~loc "This type is recursive" | Type_mismatch trace -> - Printtyp.report_unification_error ppf Env.empty trace - (function ppf -> - fprintf ppf "This type") - (function ppf -> - fprintf ppf "should be an instance of type") + let msg = Format_doc.Doc.msg in + Location.errorf ~loc "%t" @@ fun ppf -> + Errortrace_report.unification ppf Env.empty trace + (msg "This type") + (msg "should be an instance of type") | Alias_type_mismatch trace -> - Printtyp.report_unification_error ppf Env.empty trace - (function ppf -> - fprintf ppf "This alias is bound to type") - (function ppf -> - fprintf ppf "but is used as an instance of type") + let msg = Format_doc.Doc.msg in + Location.errorf ~loc "%t" @@ fun ppf -> + Errortrace_report.unification ppf Env.empty trace + (msg "This alias is bound to type") + (msg "but is used as an instance of type") | Present_has_conjunction l -> - fprintf ppf "The present constructor %s has a conjunctive type" l + Location.errorf ~loc "The present constructor %a has a conjunctive type" + Style.inline_code l | Present_has_no_type l -> - fprintf ppf - "@[@[The constructor %s is missing from the upper bound@ \ - (between '<'@ and '>')@ of this polymorphic variant@ \ - but is present in@ its lower bound (after '>').@]@,\ - @[@{Hint@}: Either add `%s in the upper bound,@ \ - or remove it@ from the lower bound.@]@]" - l l + Location.errorf ~loc + "The constructor %a is missing from the upper bound@ \ + (between %a@ and %a)@ of this polymorphic variant@ \ + but is present in@ its lower bound (after %a)." + (Style.as_inline_code pp_tag) l + Style.inline_code "<" + Style.inline_code ">" + Style.inline_code ">" + ~sub:[ + Location.msg + "@{Hint@}: Either add %a in the upper bound,@ \ + or@ remove@ it@ from the lower bound." + (Style.as_inline_code pp_tag) l + ] | Constructor_mismatch (ty, ty') -> wrap_printing_env ~error:true env (fun () -> - Printtyp.prepare_for_printing [ty; ty']; - fprintf ppf "@[%s %a@ %s@ %a@]" - "This variant type contains a constructor" - !Oprint.out_type (tree_of_typexp Type ty) - "which should be" - !Oprint.out_type (tree_of_typexp Type ty')) + Out_type.prepare_for_printing [ty; ty']; + Location.errorf ~loc + "This variant type contains a constructor %a@ \ + which should be@ %a" + pp_out_type (Out_type.tree_of_typexp Type ty) + pp_out_type (Out_type.tree_of_typexp Type ty') + ) | Not_a_variant ty -> - fprintf ppf - "@[The type %a@ does not expand to a polymorphic variant type@]" - Printtyp.type_expr ty; - begin match get_desc ty with + Location.aligned_error_hint ~loc + "@{The type @}%a@ does not expand to a polymorphic variant type" + pp_type ty + begin match get_desc ty with | Tvar (Some s) -> (* PR#7012: help the user that wrote 'Foo instead of `Foo *) - Misc.did_you_mean ppf (fun () -> ["`" ^ s]) - | _ -> () - end + Misc.did_you_mean ["`" ^ s] + | _ -> None + end | Variant_tags (lab1, lab2) -> - fprintf ppf - "@[Variant tags `%s@ and `%s have the same hash value.@ %s@]" - lab1 lab2 "Change one of them." + Location.errorf ~loc + "Variant tags %a@ and %a have the same hash value.@ \ + Change one of them." + (Style.as_inline_code pp_tag) lab1 + (Style.as_inline_code pp_tag) lab2 | Invalid_variable_name name -> - fprintf ppf "The type variable name %s is not allowed in programs" name + Location.errorf ~loc + "The type variable name %a is not allowed in programs" + Style.inline_code name | Cannot_quantify (name, v) -> - fprintf ppf - "@[The universal type variable %a cannot be generalized:@ " - Pprintast.tyvar name; - if Btype.is_Tvar v then - fprintf ppf "it escapes its scope" - else if Btype.is_Tunivar v then - fprintf ppf "it is already bound to another variable" - else - fprintf ppf "it is bound to@ %a" Printtyp.type_expr v; - fprintf ppf ".@]"; + let explanation ppf v = + if Btype.is_Tvar v then + fprintf ppf "it escapes its scope." + else if Btype.is_Tunivar v then + fprintf ppf "it is already bound to another variable." + else + fprintf ppf "it is bound to@ %a." pp_type v + in + Location.errorf ~loc + "The universal type variable %a cannot be generalized:@ %a" + (Style.as_inline_code Pprintast.Doc.tyvar) name + explanation v | Multiple_constraints_on_type s -> - fprintf ppf "Multiple constraints for type %a" longident s + Location.errorf ~loc "Multiple constraints for type %a" + (Style.as_inline_code longident) s | Method_mismatch (l, ty, ty') -> wrap_printing_env ~error:true env (fun () -> - fprintf ppf "@[Method '%s' has type %a,@ which should be %a@]" - l Printtyp.type_expr ty Printtyp.type_expr ty') + Location.errorf ~loc "Method %a has type %a,@ which should be %a" + Style.inline_code l + pp_type ty + pp_type ty') | Opened_object nm -> - fprintf ppf + Location.errorf ~loc "Illegal open object type%a" (fun ppf -> function - Some p -> fprintf ppf "@ %a" path p + Some p -> fprintf ppf "@ %a" (Style.as_inline_code path) p | None -> fprintf ppf "") nm | Not_an_object ty -> - fprintf ppf "@[The type %a@ is not an object type@]" - Printtyp.type_expr ty + Location.errorf ~loc "@[The type %a@ is not an object type@]" + pp_type ty + | Repeated_tuple_label l -> + Location.errorf ~loc "@[This tuple type has two labels named %a@]" + Style.inline_code l let () = Location.register_error_of_exn (function | Error (loc, env, err) -> - Some (Location.error_of_printer ~loc (report_error env) err) + Some (report_error_doc loc env err) | Error_forward err -> Some err | _ -> diff --git a/ocamlmerlin_mlx/ocaml/typing/typetexp.mli b/ocamlmerlin_mlx/ocaml/typing/typetexp.mli index ca058a5..f3a9032 100644 --- a/ocamlmerlin_mlx/ocaml/typing/typetexp.mli +++ b/ocamlmerlin_mlx/ocaml/typing/typetexp.mli @@ -45,6 +45,12 @@ module TyVarEnv : sig end +(* Forward declaration, to be filled in by Typemod.type_open *) +val type_open: + (?used_slot:bool ref -> Asttypes.override_flag -> Env.t -> Location.t -> + Longident.t Asttypes.loc -> Path.t * Env.t) + ref + val valid_tyvar_name : string -> bool val transl_simple_type: @@ -73,7 +79,6 @@ type error = | Type_arity_mismatch of Longident.t * int * int | Bound_type_variable of string | Recursive_type - | Unbound_row_variable of Longident.t | Type_mismatch of Errortrace.unification_error | Alias_type_mismatch of Errortrace.unification_error | Present_has_conjunction of string @@ -87,13 +92,16 @@ type error = | Method_mismatch of string * type_expr * type_expr | Opened_object of Path.t option | Not_an_object of type_expr + | Repeated_tuple_label of string exception Error of Location.t * Env.t * error -val report_error: Env.t -> Format.formatter -> error -> unit - (* Support for first-class modules. *) val transl_modtype_longident: (* from Typemod *) (Location.t -> Env.t -> Longident.t -> Path.t) ref val transl_modtype: (* from Typemod *) (Env.t -> Parsetree.module_type -> Typedtree.module_type) ref +val check_package_with_type_constraints: (* from Typemod *) + (Location.t -> Env.t -> Types.module_type -> + (Longident.t Asttypes.loc * Typedtree.core_type) list -> + Types.module_type) ref diff --git a/ocamlmerlin_mlx/ocaml/typing/untypeast.ml b/ocamlmerlin_mlx/ocaml/typing/untypeast.ml index 5bf9119..c070009 100644 --- a/ocamlmerlin_mlx/ocaml/typing/untypeast.ml +++ b/ocamlmerlin_mlx/ocaml/typing/untypeast.ml @@ -13,7 +13,9 @@ (* *) (**************************************************************************) -open Longident +[@@@ocaml.warning "-60"] module Str = Ast_helper.Str (* For ocamldep *) +[@@@ocaml.warning "+60"] + open Asttypes open Parsetree open Ast_helper @@ -78,11 +80,6 @@ open T (* Some notes: - * For Pexp_function, we cannot go back to the exact original version - when there is a default argument, because the default argument is - translated in the typer. The code, if printed, will not be parsable because - new generated identifiers are not correct. - * For Pexp_apply, it is unclear whether arguments are reordered, especially when there are optional arguments. @@ -91,33 +88,26 @@ Some notes: (** Utility functions. *) -let string_is_prefix sub str = - let sublen = String.length sub in - String.length str >= sublen && String.sub str 0 sublen = sub - -let rec lident_of_path = function +let rec lident_of_path = + let noloc_lident_of_path p = mknoloc (lident_of_path p) in + function | Path.Pident id -> Longident.Lident (Ident.name id) | Path.Papply (p1, p2) -> - Longident.Lapply (lident_of_path p1, lident_of_path p2) + Longident.Lapply (noloc_lident_of_path p1, noloc_lident_of_path p2) | Path.Pdot (p, s) | Path.Pextra_ty (p, Pcstr_ty s) -> - Longident.Ldot (lident_of_path p, s) + Longident.Ldot (noloc_lident_of_path p, mknoloc s) | Path.Pextra_ty (p, _) -> lident_of_path p let map_loc sub {loc; txt} = {loc = sub.location sub loc; txt} -(** Try a name [$name$0], check if it's free, if not, increment and repeat. *) -let fresh_name s env = - let name i = s ^ Int.to_string i in - let available i = not (Env.bound_value (name i) env) in - let first_i = Misc.find_first_mono available in - name first_i - (** Extract the [n] patterns from the case of a letop *) let rec extract_letop_patterns n pat = if n = 0 then pat, [] else begin match pat.pat_desc with - | Tpat_tuple([first; rest]) -> + | Tpat_tuple([None, first; None, rest]) -> + (* Labels should always be None, from when [Texp_letop] are created in + [Typecore.type_expect] *) let next, others = extract_letop_patterns (n-1) rest in first, next :: others | _ -> @@ -131,13 +121,13 @@ let rec extract_letop_patterns n pat = (** Mapping functions. *) let constant = function - | Const_char c -> Pconst_char c - | Const_string (s,loc,d) -> Pconst_string (s,loc,d) - | Const_int i -> Pconst_integer (Int.to_string i, None) - | Const_int32 i -> Pconst_integer (Int32.to_string i, Some 'l') - | Const_int64 i -> Pconst_integer (Int64.to_string i, Some 'L') - | Const_nativeint i -> Pconst_integer (Nativeint.to_string i, Some 'n') - | Const_float f -> Pconst_float (f,None) + | Const_char c -> Const.char c + | Const_string (s,loc,d) -> Const.string ?quotation_delimiter:d ~loc s + | Const_int i -> Const.integer (Int.to_string i) + | Const_int32 i -> Const.integer ~suffix:'l' (Int32.to_string i) + | Const_int64 i -> Const.integer ~suffix:'L' (Int64.to_string i) + | Const_nativeint i -> Const.integer ~suffix:'n' (Nativeint.to_string i) + | Const_float f -> Const.float f let attribute sub a = { attr_name = map_loc sub a.attr_name; @@ -298,7 +288,8 @@ 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 +299,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,15 +312,16 @@ 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, _, _ty) when pat_loc = pat.pat_loc -> Ppat_var name - | Tpat_alias (pat, _id, name) -> + | Tpat_alias (pat, _id, name, _, _ty) -> Ppat_alias (sub.pat sub pat, name) | Tpat_constant cst -> Ppat_constant (constant cst) | Tpat_tuple list -> - Ppat_tuple (List.map (sub.pat sub) list) + Ppat_tuple + (List.map (fun (label, p) -> label, sub.pat sub p) list, Closed) | Tpat_construct (lid, _, args, vto) -> let tyo = match vto with @@ -344,7 +336,10 @@ let pattern : type k . _ -> k T.general_pattern -> _ = fun sub pat -> match args with [] -> None | [arg] -> Some (sub.pat sub arg) - | args -> Some (Pat.tuple ~loc (List.map (sub.pat sub) args)) + | args -> + Some (Pat.tuple ~loc + (List.map (fun p -> None, sub.pat sub p) args) + Closed) in Ppat_construct (map_loc sub lid, match tyo, arg with @@ -357,7 +352,7 @@ 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 (_mut, list) -> Ppat_array (List.map (sub.pat sub) list) | Tpat_lazy p -> Ppat_lazy (sub.pat sub p) | Tpat_exception p -> Ppat_exception (sub.pat sub p) @@ -379,7 +374,7 @@ let exp_extra sub (extra, loc, attrs) sexp = Pexp_constraint (sexp, sub.typ sub cty) | Texp_poly cto -> Pexp_poly (sexp, Option.map (sub.typ sub) cto) | Texp_newtype s -> Pexp_newtype (mkloc s loc, sexp) - | Texp_newtype' (_id, label_loc) -> Pexp_newtype (label_loc, sexp) + | Texp_newtype' (_id, label_loc, _) -> Pexp_newtype (label_loc, sexp) in Exp.mk ~loc ~attrs desc @@ -393,9 +388,17 @@ let case : type k . mapper -> k case -> _ = fun sub {c_lhs; c_guard; c_rhs} -> let value_binding sub vb = let loc = sub.location sub vb.vb_loc in let attrs = sub.attributes sub vb.vb_attributes in - Vb.mk ~loc ~attrs - (sub.pat sub vb.vb_pat) - (sub.expr sub vb.vb_expr) + let pat = sub.pat sub vb.vb_pat in + let pat, value_constraint = + match pat.ppat_desc with + | Ppat_constraint (pat, ({ ptyp_desc = Ptyp_poly _; _ } as cty)) -> + let constr = + Pvc_constraint { locally_abstract_univars = []; typ = cty } + in + pat, Some constr + | _ -> pat, None + in + Vb.mk ~loc ~attrs ?value_constraint pat (sub.expr sub vb.vb_expr) let expression sub exp = let loc = sub.location sub exp.exp_loc in @@ -408,35 +411,87 @@ let expression sub exp = Pexp_let (rec_flag, List.map (sub.value_binding sub) list, sub.expr sub exp) - - (* Pexp_function can't have a label, so we split in 3 cases. *) - (* One case, no guard: It's a fun. *) - | Texp_function { arg_label; cases = [{c_lhs=p; c_guard=None; c_rhs=e}]; - _ } -> - Pexp_fun (arg_label, None, sub.pat sub p, sub.expr sub e) - (* No label: it's a function. *) - | Texp_function { arg_label = Nolabel; cases; _; } -> - Pexp_function (List.map (sub.case sub) cases) - (* Mix of both, we generate `fun ~label:$name$ -> match $name$ with ...` *) - | Texp_function { arg_label = Labelled s | Optional s as label; cases; - _ } -> - let name = fresh_name s exp.exp_env in - 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_function (params, body) -> + let body, constraint_ = + match body with + | Tfunction_body body -> + (* Unlike function cases, the [exp_extra] is placed on the body + itself. *) + Pfunction_body (sub.expr sub body), None + | Tfunction_cases { cases; loc; exp_extra; attributes; _ } -> + let cases = List.map (sub.case sub) cases in + let constraint_ = + match exp_extra with + | Some (Texp_coerce (ty1, ty2)) -> + Some + (Pcoerce (Option.map (sub.typ sub) ty1, sub.typ sub ty2)) + | Some (Texp_constraint ty) -> + Some (Pconstraint (sub.typ sub ty)) + | Some (Texp_poly _ | Texp_newtype _ | Texp_newtype' _) + | None -> None + in + Pfunction_cases (cases, loc, attributes), constraint_ + in + let params = + List.concat_map + (fun fp -> + let pat, default_arg = + match fp.fp_kind with + | Tparam_pat pat -> pat, None + | Tparam_optional_default (pat, expr) -> pat, Some expr + in + let pat = sub.pat sub pat in + let default_arg = Option.map (sub.expr sub) default_arg in + let newtypes = + List.map + (fun x -> + { pparam_desc = Pparam_newtype x; + pparam_loc = x.loc; + }) + fp.fp_newtypes + in + let pparam_desc = + Pparam_val (fp.fp_arg_label, default_arg, pat) + in + { pparam_desc; pparam_loc = fp.fp_loc } :: newtypes) + params + in + Pexp_function (params, constraint_, body) | Texp_apply (exp, list) -> Pexp_apply (sub.expr sub exp, - List.fold_right (fun (label, expo) list -> - match expo with - None -> list - | Some exp -> (label, sub.expr sub exp) :: list + List.fold_right (fun (label, arg) list -> + match arg with + | Omitted () -> list + | Arg exp -> (label, sub.expr sub exp) :: list ) list []) - | Texp_match (exp, cases, _) -> - 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_match (exp, cases, eff_cases, _) -> + let merged_cases = List.map (sub.case sub) cases + @ List.map + (fun c -> + let uc = sub.case sub c in + let pat = { uc.pc_lhs + (* XXX KC: The 2nd argument of Ppat_effect is wrong *) + with ppat_desc = Ppat_effect (uc.pc_lhs, uc.pc_lhs) } + in + { uc with pc_lhs = pat }) + eff_cases + in + Pexp_match (sub.expr sub exp, merged_cases) + | Texp_try (exp, exn_cases, eff_cases) -> + let merged_cases = List.map (sub.case sub) exn_cases + @ List.map + (fun c -> + let uc = sub.case sub c in + let pat = { uc.pc_lhs + (* XXX KC: The 2nd argument of Ppat_effect is wrong *) + with ppat_desc = Ppat_effect (uc.pc_lhs, uc.pc_lhs) } + in + { uc with pc_lhs = pat }) + eff_cases + in + Pexp_try (sub.expr sub exp, merged_cases) | Texp_tuple list -> - Pexp_tuple (List.map (sub.expr sub) list) + Pexp_tuple (List.map (fun (lbl, e) -> lbl, sub.expr sub e) list) | Texp_construct (lid, _, args) -> Pexp_construct (map_loc sub lid, (match args with @@ -444,7 +499,7 @@ let expression sub exp = | [ arg ] -> Some (sub.expr sub arg) | args -> Some - (Exp.tuple ~loc (List.map (sub.expr sub) args)) + (Exp.tuple ~loc (List.map (fun e -> None, sub.expr sub e) args)) )) | Texp_variant (label, expo) -> Pexp_variant (label, Option.map (sub.expr sub) expo) @@ -455,12 +510,19 @@ let expression sub exp = [] fields in Pexp_record (list, Option.map (sub.expr sub) extended_expression) + | Texp_atomic_loc (exp, lid, _label) -> + Pexp_extension ({ txt = "ocaml.atomic.loc"; loc }, + PStr [ Str.eval ~loc + (Exp.field ~loc + (sub.expr sub exp) + (map_loc sub lid)) + ]) | Texp_field (exp, lid, _label) -> Pexp_field (sub.expr sub exp, map_loc sub lid) | Texp_setfield (exp1, lid, _label, exp2) -> Pexp_setfield (sub.expr sub exp1, map_loc sub lid, sub.expr sub exp2) - | Texp_array list -> + | Texp_array (_mut, list) -> Pexp_array (List.map (sub.expr sub) list) | Texp_ifthenelse (exp1, exp2, expo) -> Pexp_ifthenelse (sub.expr sub exp1, @@ -499,7 +561,7 @@ let expression sub exp = | Texp_object (cl, _) -> Pexp_object (sub.class_structure sub cl) | Texp_pack (mexpr) -> - Pexp_pack (sub.module_expr sub mexpr) + Pexp_pack (sub.module_expr sub mexpr, None) | Texp_letop {let_; ands; body; _} -> let pat, and_pats = extract_letop_patterns (List.length ands) body.c_lhs @@ -517,7 +579,7 @@ let expression sub exp = ]) | Texp_open (od, exp) -> Pexp_open (sub.open_declaration sub od, sub.expr sub exp) - | Texp_hole -> + | Texp_typed_hole -> let id = Location.mkloc hole_txt loc in Pexp_extension (id, PStr []) in @@ -532,9 +594,10 @@ let binding_op sub bop pat = {pbop_op; pbop_pat; pbop_exp; pbop_loc} let package_type sub pack = - (map_loc sub pack.pack_txt, - List.map (fun (s, ct) -> - (s, sub.typ sub ct)) pack.pack_fields) + { ppt_path = map_loc sub pack.tpt_txt; + ppt_cstrs = List.map (fun (s, ct) -> (s, sub.typ sub ct)) pack.tpt_cstrs; + ppt_attrs = []; + ppt_loc = sub.location sub pack.tpt_txt.loc } let module_type_declaration sub mtd = let loc = sub.location sub mtd.mtd_loc in @@ -684,7 +747,7 @@ let module_expr (sub : mapper) mexpr = | Tmod_unpack (exp, _pack) -> Pmod_unpack (sub.expr sub exp) (* TODO , sub.package_type sub pack) *) - | Tmod_hole -> + | Tmod_typed_hole -> let id = Location.mkloc hole_txt loc in Pmod_extension (id, PStr []) in @@ -707,8 +770,8 @@ let class_expr sub cexpr = Pcl_apply (sub.class_expr sub cl, List.fold_right (fun (label, expo) list -> match expo with - None -> list - | Some exp -> (label, sub.expr sub exp) :: list + | Omitted () -> list + | Arg exp -> (label, sub.expr sub exp) :: list ) args []) | Tcl_let (rec_flat, bindings, _ivars, cl) -> @@ -770,7 +833,8 @@ let core_type sub ct = | Ttyp_var s -> Ptyp_var s | Ttyp_arrow (label, ct1, ct2) -> Ptyp_arrow (label, sub.typ sub ct1, sub.typ sub ct2) - | Ttyp_tuple list -> Ptyp_tuple (List.map (sub.typ sub) list) + | Ttyp_tuple list -> + Ptyp_tuple (List.map (fun (l, typ) -> l, sub.typ sub typ) list) | Ttyp_constr (_path, lid, list) -> Ptyp_constr (map_loc sub lid, List.map (sub.typ sub) list) @@ -787,13 +851,14 @@ let core_type sub ct = let list = List.map (fun v -> mkloc v loc) list in Ptyp_poly (list, sub.typ sub ct) | Ttyp_package pack -> Ptyp_package (sub.package_type sub pack) + | Ttyp_open (_path, mod_ident, t) -> Ptyp_open (mod_ident, sub.typ sub t) in Typ.mk ~loc ~attrs desc let class_structure sub cs = let rec remove_self = function - | { pat_desc = Tpat_alias (p, id, _s) } - when string_is_prefix "selfpat-" (Ident.name id) -> + | { pat_desc = Tpat_alias (p, id, _s, _, _ty) } + when String.starts_with ~prefix:"selfpat-" (Ident.name id) -> remove_self p | p -> p in @@ -822,10 +887,25 @@ 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, _) } -> - string_is_prefix "self-" (Ident.name id) + | { pat_desc = Tpat_alias(_pat, id, _, _, _ty) } -> + String.starts_with ~prefix:"self-" (Ident.name id) | _ -> false +(* [Typeclass] adds a [self] parameter to initializers and methods that isn't + present in the source program. +*) +let remove_fun_self exp = + match exp with + | { exp_desc = + Texp_function + ({fp_arg_label = Nolabel; fp_kind = Tparam_pat pat} :: params, body) + } + when is_self_pat pat -> + (match params, body with + | [], Tfunction_body body -> body + | _, _ -> { exp with exp_desc = Texp_function (params, body) }) + | e -> e + let class_field sub cf = let loc = sub.location sub cf.cf_loc in let attrs = sub.attributes sub cf.cf_attributes in @@ -842,21 +922,9 @@ let class_field sub cf = | Tcf_method (lab, priv, Tcfk_virtual cty) -> Pcf_method (lab, priv, Cfk_virtual (sub.typ sub cty)) | Tcf_method (lab, priv, Tcfk_concrete (o, exp)) -> - let remove_fun_self = function - | { exp_desc = - Texp_function { arg_label = Nolabel; cases = [case]; _ } } - when is_self_pat case.c_lhs && case.c_guard = None -> case.c_rhs - | e -> e - in let exp = remove_fun_self exp in Pcf_method (lab, priv, Cfk_concrete (o, sub.expr sub exp)) | Tcf_initializer exp -> - let remove_fun_self = function - | { exp_desc = - Texp_function { arg_label = Nolabel; cases = [case]; _ } } - when is_self_pat case.c_lhs && case.c_guard = None -> case.c_rhs - | e -> e - in let exp = remove_fun_self exp in Pcf_initializer (sub.expr sub exp) | Tcf_attribute x -> Pcf_attribute x diff --git a/ocamlmerlin_mlx/ocaml/typing/rec_check.ml b/ocamlmerlin_mlx/ocaml/typing/value_rec_check.ml similarity index 83% rename from ocamlmerlin_mlx/ocaml/typing/rec_check.ml rename to ocamlmerlin_mlx/ocaml/typing/value_rec_check.ml index 6dae3a0..684705e 100644 --- a/ocamlmerlin_mlx/ocaml/typing/rec_check.ml +++ b/ocamlmerlin_mlx/ocaml/typing/value_rec_check.ml @@ -16,7 +16,11 @@ (* *) (**************************************************************************) -(** Static checking of recursive declarations +(** Static checking of recursive declarations, as described in + + A practical mode system for recursive definitions + Alban Reynaud, Gabriel Scherer and Jeremy Yallop + POPL 2021 Some recursive definitions are meaningful {[ @@ -102,11 +106,9 @@ open Asttypes open Typedtree open Types -exception Illegal_expr - (** {1 Static or dynamic size} *) -type sd = Static | Dynamic +type sd = Value_rec_types.recursive_binding_kind let is_ref : Types.value_description -> bool = function | { Types.val_kind = @@ -117,9 +119,9 @@ let is_ref : Types.value_description -> bool = function (* See the note on abstracted arguments in the documentation for Typedtree.Texp_apply *) -let is_abstracted_arg : arg_label * expression option -> bool = function - | (_, None) -> true - | (_, Some _) -> false +let is_abstracted_arg : arg_label * apply_arg -> bool = function + | (_, Omitted ()) -> true + | (_, Arg _) -> false let classify_expression : Typedtree.expression -> sd = (* We need to keep track of the size of expressions @@ -142,17 +144,27 @@ let classify_expression : Typedtree.expression -> sd = The first definition can be allowed (`y` has a statically-known size) but the second one is unsound (`y` has no statically-known size). *) - let rec classify_expression env e = match e.exp_desc with + let rec classify_expression env e : sd = + match e.exp_desc with (* binding and variable cases *) | Texp_let (rec_flag, vb, e) -> let env = classify_value_bindings rec_flag env vb in classify_expression env e + | Texp_letmodule (Some mid, _, _, mexp, e) -> + (* Note on module presence: + For absent modules (i.e. module aliases), the module being bound + does not have a physical representation, but its size can still be + derived from the alias itself, so we can reuse the same code as + for modules that are present. *) + let size = classify_module_expression env mexp in + let env = Ident.add mid size env in + classify_expression env e | Texp_ident (path, _, _) -> classify_path env path (* non-binding cases *) | Texp_open (_, e) - | Texp_letmodule (_, _, _, _, e) + | Texp_letmodule (None, _, _, _, e) | Texp_sequence (_, e) | Texp_letexception (_, e) -> classify_expression env e @@ -168,6 +180,23 @@ let classify_expression : Typedtree.expression -> sd = | Texp_record _ -> Static + | Texp_variant _ + | Texp_tuple _ + | Texp_atomic_loc _ + | Texp_extension_constructor _ + | Texp_constant _ -> + Static + + | Texp_for _ + | Texp_setfield _ + | Texp_while _ + | Texp_setinstvar _ -> + (* Unit-returning expressions *) + Static + + | Texp_unreachable -> + Static + | Texp_apply ({exp_desc = Texp_ident (_, _, vd)}, _) when is_ref vd -> Static @@ -177,25 +206,33 @@ let classify_expression : Typedtree.expression -> sd = | Texp_apply _ -> Dynamic - | Texp_for _ - | Texp_constant _ + | Texp_array _ -> + Static + | Texp_pack mexp -> + classify_module_expression env mexp + | Texp_function _ -> + Static + | Texp_lazy e -> + (* The code below was copied (in part) from translcore.ml *) + begin match Typeopt.classify_lazy_argument e with + | `Constant_or_function -> + (* A constant expr (of type <> float if [Config.flat_float_array] is + true) gets compiled as itself. *) + classify_expression env e + | `Float_that_cannot_be_shortcut + | `Identifier `Forward_value -> + (* Forward blocks *) + Static + | `Identifier `Other -> + classify_expression env e + | `Other -> + (* other cases compile to a lazy block holding a function *) + Static + end + | Texp_new _ | Texp_instvar _ - | Texp_tuple _ - | Texp_array _ - | Texp_variant _ - | Texp_setfield _ - | Texp_while _ - | Texp_setinstvar _ - | Texp_pack _ | Texp_object _ - | Texp_function _ - | Texp_lazy _ - | Texp_unreachable - | Texp_hole - | Texp_extension_constructor _ -> - Static - | Texp_match _ | Texp_ifthenelse _ | Texp_send _ @@ -205,6 +242,8 @@ let classify_expression : Typedtree.expression -> sd = | Texp_override _ | Texp_letop _ -> Dynamic + + | Texp_typed_hole -> Static and classify_value_bindings rec_flag env bindings = (* We use a non-recursive classification, classifying each binding with respect to the old environment @@ -221,7 +260,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, _uid) -> let size = classify_expression old_env vb.vb_expr in Ident.add id size env | _ -> @@ -229,7 +268,7 @@ let classify_expression : Typedtree.expression -> sd = env in List.fold_left add_value_binding env bindings - and classify_path env = function + and classify_path env : _ -> Value_rec_types.recursive_binding_kind = function | Path.Pident x -> begin try Ident.find_same x env @@ -244,7 +283,7 @@ let classify_expression : Typedtree.expression -> sd = For non-local identifiers it might be reasonable (although not completely clear) to consider them Static (they have already been evaluated), but for the others we must - under-approximate with Dynamic. + under-approximate with Not_recursive. This could be fixed by a more complete implementation. *) @@ -254,7 +293,36 @@ let classify_expression : Typedtree.expression -> sd = (* local modules could have such paths to local definitions; classify_expression could be extend to compute module shapes more precisely *) + Dynamic + and classify_module_expression env mexp : sd = + match mexp.mod_desc with + | Tmod_typed_hole -> Dynamic + | Tmod_ident (path, _) -> + classify_path env path + | Tmod_structure _ -> + Static + | Tmod_functor _ -> + Static + | Tmod_apply _ -> + Dynamic + | Tmod_apply_unit _ -> + Dynamic + | Tmod_constraint (mexp, _, _, coe) -> + begin match coe with + | Tcoerce_none -> + classify_module_expression env mexp + | Tcoerce_structure _ -> + Static + | Tcoerce_functor _ -> + Static + | Tcoerce_primitive _ -> + Misc.fatal_error "letrec: primitive coercion on a module" + | Tcoerce_alias _ -> + Misc.fatal_error "letrec: alias coercion on a module" + end + | Tmod_unpack (e, _) -> + classify_expression env e in classify_expression Ident.empty @@ -529,8 +597,8 @@ let rec expression : Typedtree.expression -> term_judg = value_bindings rec_flag bindings >> expression body | Texp_letmodule (x, _, _, mexp, e) -> module_binding (x, mexp) >> expression e - | Texp_match (e, cases, _) -> - (* + | Texp_match (e, cases, eff_cases, _) -> + (* TODO: update comment below for eff_cases (Gi; mi |- pi -> ei : m)^i G |- e : sum(mi)^i ---------------------------------------------- @@ -540,7 +608,11 @@ let rec expression : Typedtree.expression -> term_judg = let pat_envs, pat_modes = 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)) + let eff_envs, eff_modes = + List.split (List.map (fun c -> case c mode) eff_cases) in + let eff_e = expression e (List.fold_left Mode.join Ignore eff_modes) in + Env.join_list + ((Env.join_list (env_e :: pat_envs)) :: (eff_e :: eff_envs))) | Texp_for (_, _, low, high, _, body) -> (* G1 |- low: m[Dereference] @@ -565,7 +637,7 @@ let rec expression : Typedtree.expression -> term_judg = path pth << Dereference | Texp_instvar (self_path, pth, _inst_var) -> join [path self_path << Dereference; path pth] - | Texp_apply ({exp_desc = Texp_ident (_, _, vd)}, [_, Some arg]) + | Texp_apply ({exp_desc = Texp_ident (_, _, vd)}, [_, Arg arg]) when is_ref vd -> (* G |- e: m[Guard] @@ -574,19 +646,38 @@ let rec expression : Typedtree.expression -> term_judg = *) expression arg << Guard | Texp_apply (e, args) -> - let arg (_, eo) = option expression eo in - let app_mode = if List.exists is_abstracted_arg args - then (* see the comment on Texp_apply in typedtree.mli; - the non-abstracted arguments are bound to local - variables, which corresponds to a Guard mode. *) - Guard - else Dereference + (* [args] may contain omitted arguments, corresponding to labels in + the function's type that were not passed in the actual application. + The arguments before the first omitted argument are passed to the + function immediately, so they are dereferenced. The arguments after + the first omitted one are stored in a closure, so guarded. + The function itself is called immediately (dereferenced) if there + is at least one argument before the first omitted one. + On the other hand, if the first argument is omitted then the + function is stored in the closure without being called. *) + let rec split_args ~has_omitted_arg = function + | [] -> [], [] + | (_, Omitted ()) :: rest -> split_args ~has_omitted_arg:true rest + | (_, Arg arg) :: rest -> + let applied, delayed = split_args ~has_omitted_arg rest in + if has_omitted_arg + then applied, arg :: delayed + else arg :: applied, delayed + in + let applied, delayed = split_args ~has_omitted_arg:false args in + let function_mode = + match applied with + | [] -> Guard + | _ :: _ -> Dereference in - join [expression e; list arg args] << app_mode + join [expression e << function_mode; + list expression applied << Dereference; + list expression delayed << Guard] | Texp_tuple exprs -> - list expression exprs << Guard - | Texp_array exprs -> - (* + list expression (List.map snd exprs) << Guard + | Texp_atomic_loc (expr, _, _) -> + expression expr << Guard + | Texp_array (_, exprs) -> let array_mode = match Typeopt.array_kind exp with | Lambda.Pfloatarray -> (* (flat) float arrays unbox their elements *) @@ -599,12 +690,6 @@ let rec expression : Typedtree.expression -> term_judg = (* non-generic, non-float arrays act as constructors *) Guard in - *) - let array_mode = - (* FIXME MERLIN this is incorrect, but it won't report false positive, so it - will do for now. *) - Guard - in list expression exprs << array_mode | Texp_construct (_, desc, exprs) -> let access_constructor = @@ -751,7 +836,7 @@ let rec expression : Typedtree.expression -> term_judg = modexp mexp | Texp_object (clsstrct, _) -> class_structure clsstrct - | Texp_try (e, cases) -> + | Texp_try (e, cases, eff_cases) -> (* G |- e: m (Gi; _ |- pi -> ei : m)^i -------------------------------------------- @@ -765,6 +850,7 @@ let rec expression : Typedtree.expression -> term_judg = join [ expression e; list case_env cases; + list case_env eff_cases; ] | Texp_override (pth, fields) -> (* @@ -782,18 +868,55 @@ let rec expression : Typedtree.expression -> term_judg = path pth << Dereference; list field fields << Dereference; ] - | Texp_function { cases } -> + | Texp_function (params, body) -> (* - (Gi; _ |- pi -> ei : m[Delay])^i - -------------------------------------- - sum(Gi)^i |- function (pi -> ei)^i : m + G |-{body} b : m[Delay] + (Hj |-{def} Pj : m[Delay])^j + H := sum(Hj)^j + ps := sum(pat(Pj))^j + ----------------------------------- + G + H - ps |- fun (Pj)^j -> b : m + *) + let param_pat param = + (* param P ::= + | ?(pat = expr) + | pat + + Define pat(P) as + pat if P = ?(pat = expr) + pat if P = pat + *) + match param.fp_kind with + | Tparam_pat pat -> pat + | Tparam_optional_default (pat, _) -> pat + in + (* Optional argument defaults. - Contrarily to match, the value that is pattern-matched - is bound locally, so the pattern modes do not influence - the final environment. + G |-{def} P : m *) - let case_env c m = fst (case c m) in - list case_env cases << Delay + let param_default param = + match param.fp_kind with + | Tparam_optional_default (_, default) -> + (* + G |- e : m + ------------------ + G |-{def} ?(p=e) : m + *) + expression default + | Tparam_pat _ -> + (* + ------------------ + . |-{def} p : m + *) + empty + in + let patterns = List.map param_pat params in + let defaults = List.map param_default params in + let body = function_body body in + let f = join (body :: defaults) << Delay in + (fun m -> + let env = f m in + remove_patlist patterns env) | Texp_lazy e -> (* G |- e: m[Delay] @@ -815,18 +938,46 @@ let rec expression : Typedtree.expression -> term_judg = list binding_op (let_ :: ands) << Dereference; case_env body << Delay ] - | Texp_unreachable -> + | Texp_unreachable | Texp_typed_hole -> (* ---------- [] |- .: m *) empty - | Texp_hole -> empty | Texp_extension_constructor (_lid, pth) -> path pth << Dereference | Texp_open (od, e) -> open_declaration od >> expression e +(* Function bodies. + + G |-{body} b : m +*) +and function_body body = + match body with + | Tfunction_body body -> + (* + G |- e : m + ------------------ + G |-{body} e : m (**) + + (**) The "e" here stands for [Tfunction_body] as opposed to + [Tfunction_cases]. + *) + expression body + | Tfunction_cases { cases; _ } -> + (* + (Gi; _ |- pi -> ei : m)^i (**) + ------------------ + sum(Gi)^i |-{body} function (pi -> ei)^i : m + + (**) Contrarily to match, the values that are pattern-matched + are bound locally, so the pattern modes do not influence + the final environment. + *) + List.map (fun c mode -> fst (case c mode)) cases + |> join + and binding_op : Typedtree.binding_op -> term_judg = fun bop -> join [path bop.bop_op_path; expression bop.bop_exp] @@ -893,7 +1044,7 @@ and modexp : Typedtree.module_expr -> term_judg = coercion coe (fun m -> modexp mexp << m) | Tmod_unpack (e, _) -> expression e - | Tmod_hole -> fun _ -> Env.empty + | Tmod_typed_hole -> fun _ -> Env.empty (* G |- pth : m *) @@ -1046,7 +1197,11 @@ and class_expr : Typedtree.class_expr -> term_judg = let ids = List.map fst args in remove_ids ids (class_expr ce << Delay) | Tcl_apply (ce, args) -> - let arg (_label, eo) = option expression eo in + let arg (_, arg) = + match arg with + | Omitted () -> empty + | Arg e -> expression e + in join [ class_expr ce << Dereference; list arg args << Dereference; @@ -1201,8 +1356,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 @@ -1215,21 +1370,25 @@ and is_destructuring_pattern : type k . k general_pattern -> bool = | Tpat_or (l,r,_) -> is_destructuring_pattern l || is_destructuring_pattern r -let is_valid_recursive_expression idlist expr = +let is_valid_recursive_expression idlist expr : sd option = match expr.exp_desc with | Texp_function _ -> (* Fast path: functions can never have invalid recursive references *) - true + Some Static | _ -> - match classify_expression expr with - | Static -> - (* The expression has known size *) - let ty = expression expr Return in - Env.unguarded ty idlist = [] - | Dynamic -> - (* The expression has unknown size *) - let ty = expression expr Return in - Env.unguarded ty idlist = [] && Env.dependent ty idlist = [] + let rkind = classify_expression expr in + let is_valid = + match rkind with + | Static -> + (* The expression has known size or is constant *) + let ty = expression expr Return in + Env.unguarded ty idlist = [] + | Dynamic -> + (* The expression has unknown size *) + let ty = expression expr Return in + Env.unguarded ty idlist = [] && Env.dependent ty idlist = [] + in + if is_valid then Some rkind else None (* A class declaration may contain let-bindings. If they are recursive, their validity will already be checked by [is_valid_recursive_expression] diff --git a/ocamlmerlin_mlx/ocaml/typing/rec_check.mli b/ocamlmerlin_mlx/ocaml/typing/value_rec_check.mli similarity index 89% rename from ocamlmerlin_mlx/ocaml/typing/rec_check.mli rename to ocamlmerlin_mlx/ocaml/typing/value_rec_check.mli index aa5c1ca..8010e7c 100644 --- a/ocamlmerlin_mlx/ocaml/typing/rec_check.mli +++ b/ocamlmerlin_mlx/ocaml/typing/value_rec_check.mli @@ -12,8 +12,9 @@ (* *) (**************************************************************************) -exception Illegal_expr - -val is_valid_recursive_expression : Ident.t list -> Typedtree.expression -> bool +val is_valid_recursive_expression : + Ident.t list -> + Typedtree.expression -> + Value_rec_types.recursive_binding_kind option val is_valid_class_expr : Ident.t list -> Typedtree.class_expr -> bool diff --git a/ocamlmerlin_mlx/ocaml/typing/value_rec_types.mli b/ocamlmerlin_mlx/ocaml/typing/value_rec_types.mli new file mode 100644 index 0000000..83b8385 --- /dev/null +++ b/ocamlmerlin_mlx/ocaml/typing/value_rec_types.mli @@ -0,0 +1,27 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Vincent Laviron, OCamlPro *) +(* *) +(* Copyright 2023 OCamlPro, SAS *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(** Types related to the compilation of value let-recs (non-functional + recursive definitions) *) + +(** The kind of recursive bindings, as computed by + [Value_rec_check.classify_expression] *) + type recursive_binding_kind = + | Static + (** Bindings for which some kind of pre-allocation scheme is possible. + The expression is allowed to be recursive, as long as its definition does + not inspect recursively defined values. *) + | Dynamic + (** Bindings for which pre-allocation is not possible. + The expression is not allowed to refer to any recursive variable. *) diff --git a/ocamlmerlin_mlx/ocaml/utils/clflags.ml b/ocamlmerlin_mlx/ocaml/utils/clflags.ml index 337ac0a..4ccc2b8 100644 --- a/ocamlmerlin_mlx/ocaml/utils/clflags.ml +++ b/ocamlmerlin_mlx/ocaml/utils/clflags.ml @@ -1,8 +1,11 @@ (** {0 OCaml compiler compatible command-line parameters} *) let cmi_file = ref None let include_dirs = ref [] +let hidden_include_dirs = ref [] +let print_variance = ref false (* -i-variance *) let fast = ref false let classic = ref false +let all_ppx = ref [] let principal = ref false let real_paths = ref true let recursive_types = ref false @@ -11,10 +14,14 @@ let applicative_functors = ref true let nopervasives = ref false let strict_formats = ref true +let no_alias_deps = ref false (* -no-alias-deps *) +let unique_ids = ref true (* -d(no-)unique-ids *) +let canonical_ids = ref false (* -d(no-)canonical-ids *) let open_modules = ref [] let annotations = ref false let binary_annotations = ref true +let store_occurrences = ref true let print_types = ref false let native_code = ref false let error_size = ref 500 @@ -24,7 +31,145 @@ let keep_docs = ref false let transparent_modules = ref true let for_package = ref None let debug = ref false +let unsafe = ref false let opaque = ref false + +let error_style = ref (Some Misc.Error_style.Merlin) (* -error-style *) + let unboxed_types = ref false let locations = ref true + +let keyword_edition: string option ref = ref None + + +(* This is used by the -save-ir-after option. *) +module Compiler_ir = struct + type t = Linear + + let all = [ + Linear; + ] + + let extension t = + let ext = + match t with + | Linear -> "linear" + in + ".cmir-" ^ ext + + (** [extract_extension_with_pass filename] returns the IR whose extension + is a prefix of the extension of [filename], and the suffix, + which can be used to distinguish different passes on the same IR. + For example, [extract_extension_with_pass "foo.cmir-linear123"] + returns [Some (Linear, "123")]. *) + let extract_extension_with_pass filename = + let ext = Filename.extension filename in + let ext_len = String.length ext in + if ext_len <= 0 then None + else begin + let is_prefix ir = + let s = extension ir in + let s_len = String.length s in + s_len <= ext_len && s = String.sub ext 0 s_len + in + let drop_prefix ir = + let s = extension ir in + let s_len = String.length s in + String.sub ext s_len (ext_len - s_len) + in + let ir = List.find_opt is_prefix all in + match ir with + | None -> None + | Some ir -> Some (ir, drop_prefix ir) + end +end + + +(* This is used by the -stop-after option. *) +module Compiler_pass = struct + (* If you add a new pass, the following must be updated: + - the variable `passes` below + - the manpages in man/ocaml{c,opt}.m + - the manual manual/src/cmds/unified-options.etex + *) + type t = Parsing | Typing | Lambda | Scheduling | Emit + + let to_string = function + | Parsing -> "parsing" + | Typing -> "typing" + | Lambda -> "lambda" + | Scheduling -> "scheduling" + | Emit -> "emit" + + let of_string = function + | "parsing" -> Some Parsing + | "typing" -> Some Typing + | "lambda" -> Some Lambda + | "scheduling" -> Some Scheduling + | "emit" -> Some Emit + | _ -> None + + let rank = function + | Parsing -> 0 + | Typing -> 1 + | Lambda -> 2 + | Scheduling -> 50 + | Emit -> 60 + + let passes = [ + Parsing; + Typing; + Lambda; + Scheduling; + Emit; + ] + let is_compilation_pass _ = true + let is_native_only = function + | Scheduling -> true + | Emit -> true + | _ -> false + + let enabled is_native t = not (is_native_only t) || is_native + let can_save_ir_after = function + | Scheduling -> true + | _ -> false + + let available_pass_names ~filter ~native = + passes + |> List.filter (enabled native) + |> List.filter filter + |> List.map to_string + + let compare a b = + compare (rank a) (rank b) + + let to_output_filename t ~prefix = + match t with + | Scheduling -> prefix ^ Compiler_ir.(extension Linear) + | _ -> Misc.fatal_error "Not supported" + + let of_input_filename name = + match Compiler_ir.extract_extension_with_pass name with + | Some (Linear, _) -> Some Emit + | None -> None +end + +let parse_keyword_edition s = + let parse_version s = + let bad_version () = + raise (Arg.Bad "Ill-formed version in keywords flag,\n\ + the supported format is ., for example 5.2 .") + in + if s = "" then None else match String.split_on_char '.' s with + | [] | [_] | _ :: _ :: _ :: _ -> bad_version () + | [major;minor] -> match int_of_string_opt major, int_of_string_opt minor with + | Some major, Some minor -> Some (major,minor) + | _ -> bad_version () + in + match String.split_on_char '+' s with + | [] -> None, [] + | [s] -> parse_version s, [] + | v :: rest -> parse_version v, rest + +let stop_after = ref None diff --git a/ocamlmerlin_mlx/ocaml/utils/clflags.mli b/ocamlmerlin_mlx/ocaml/utils/clflags.mli index 6294b08..e7d4690 100644 --- a/ocamlmerlin_mlx/ocaml/utils/clflags.mli +++ b/ocamlmerlin_mlx/ocaml/utils/clflags.mli @@ -8,13 +8,18 @@ Parameters from OCaml compiler which affect Merlin behavior. *) val cmi_file : string option ref val include_dirs : string list ref +val hidden_include_dirs : string list ref +val print_variance : bool ref val fast : bool ref val classic : bool ref +val all_ppx : string list ref val principal : bool ref val real_paths : bool ref val recursive_types : bool ref val strict_sequence : bool ref val applicative_functors : bool ref +val unique_ids : bool ref +val canonical_ids : bool ref val nopervasives : bool ref val strict_formats : bool ref val open_modules : string list ref @@ -23,16 +28,41 @@ val open_modules : string list ref Ignored by merlin but kept for compatibility with upstream code. *) val annotations : bool ref val binary_annotations : bool ref +val store_occurrences : bool ref val print_types : bool ref val native_code : bool ref val dont_write_files : bool ref val error_size : int ref (* max size of module related errors *) +val no_alias_deps : bool ref val keep_locs : bool ref val keep_docs : bool ref val transparent_modules : bool ref val for_package : string option ref val debug : bool ref +val unsafe : bool ref val opaque : bool ref + +val error_style : Misc.Error_style.setting option ref + val unboxed_types : bool ref val locations : bool ref + +val keyword_edition : string option ref + + +module Compiler_pass : sig + type t = Parsing | Typing | Lambda | Scheduling | Emit + val of_string : string -> t option + val to_string : t -> string + val is_compilation_pass : t -> bool + val available_pass_names : filter:(t -> bool) -> native:bool -> string list + val can_save_ir_after : t -> bool + val compare : t -> t -> int + val to_output_filename: t -> prefix:string -> string + val of_input_filename: string -> t option +end + +val parse_keyword_edition: string -> (int*int) option * string list + +val stop_after : Compiler_pass.t option ref diff --git a/ocamlmerlin_mlx/ocaml/utils/compression.ml b/ocamlmerlin_mlx/ocaml/utils/compression.ml new file mode 100644 index 0000000..384afb3 --- /dev/null +++ b/ocamlmerlin_mlx/ocaml/utils/compression.ml @@ -0,0 +1,31 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, Collège de France and Inria project Cambium *) +(* *) +(* Copyright 2023 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +external zstd_initialize: unit -> bool = "caml_zstd_initialize" + +let compression_supported = zstd_initialize () + +type [@warning "-unused-constructor"] extern_flags = + No_sharing (** Don't preserve sharing *) + | Closures (** Send function closures *) + | Compat_32 (** Ensure 32-bit compatibility *) + | Compression (** Optional compression *) + +external to_channel: out_channel -> 'a -> extern_flags list -> unit + = "caml_output_value" + +let output_value ch v = to_channel ch v [Compression] + +let input_value = Stdlib.input_value diff --git a/ocamlmerlin_mlx/ocaml/utils/compression.mli b/ocamlmerlin_mlx/ocaml/utils/compression.mli new file mode 100644 index 0000000..bdfb63d --- /dev/null +++ b/ocamlmerlin_mlx/ocaml/utils/compression.mli @@ -0,0 +1,34 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, Collège de France and Inria project Cambium *) +(* *) +(* Copyright 2023 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +val output_value : out_channel -> 'a -> unit +(** [Compression.output_value chan v] writes the representation + of [v] on channel [chan]. + If compression is supported, the marshaled data + representing value [v] is compressed before being written to + channel [chan]. + If compression is not supported, this function behaves like + {!Stdlib.output_value}. *) + +val input_value : in_channel -> 'a +(** [Compression.input_value chan] reads from channel [chan] the + byte representation of a structured value, as produced by + [Compression.output_value], and reconstructs and + returns the corresponding value. + If compression is not supported, this function behaves like + {!Stdlib.input_value}. *) + +val compression_supported : bool +(** Reports whether compression is supported. *) diff --git a/ocamlmerlin_mlx/ocaml/utils/config.ml b/ocamlmerlin_mlx/ocaml/utils/config.ml index f1f93f2..4945086 100644 --- a/ocamlmerlin_mlx/ocaml/utils/config.ml +++ b/ocamlmerlin_mlx/ocaml/utils/config.ml @@ -28,29 +28,32 @@ let version = Sys.ocaml_version let flambda = false -let exec_magic_number = "Caml1999X033" +let ext_obj = ".o_The boot compiler cannot process C objects" + +let exec_magic_number = "Caml1999X036" (* exec_magic_number is duplicated in runtime/caml/exec.h *) -and cmi_magic_number = "Caml1999I033" -and cmo_magic_number = "Caml1999O033" -and cma_magic_number = "Caml1999A033" +and cmi_magic_number = "Caml1999I036" +and cmo_magic_number = "Caml1999O036" +and cma_magic_number = "Caml1999A036" and cmx_magic_number = if flambda then - "Caml1999y033" + "Caml1999y036" else - "Caml1999Y033" + "Caml1999Y036" and cmxa_magic_number = if flambda then - "Caml1999z033" + "Caml1999z036" else - "Caml1999Z033" -and ast_impl_magic_number = "Caml1999M033" -and ast_intf_magic_number = "Caml1999N033" -and cmxs_magic_number = "Caml1999D033" -and cmt_magic_number = "Caml1999T033" + "Caml1999Z036" +and ast_impl_magic_number = "Caml1999M036" +and ast_intf_magic_number = "Caml1999N036" +and cmxs_magic_number = "Caml1999D036" +and cmt_magic_number = "Caml1999T036" +and index_magic_number = "Merl2023I004" let interface_suffix = ref ".mli" +let flat_float_array = true let max_tag = 245 -let flat_float_array = false let merlin = true diff --git a/ocamlmerlin_mlx/ocaml/utils/config.mli b/ocamlmerlin_mlx/ocaml/utils/config.mli index 02713f5..6fab081 100644 --- a/ocamlmerlin_mlx/ocaml/utils/config.mli +++ b/ocamlmerlin_mlx/ocaml/utils/config.mli @@ -18,6 +18,8 @@ val version: string (* The current version number of the system *) +val ext_obj : string + val interface_suffix: string ref (* Suffix for interface file names *) @@ -41,14 +43,19 @@ val cmxs_magic_number: string (* Magic number for dynamically-loadable plugins *) val cmt_magic_number: string (* Magic number for compiled interface files *) +val index_magic_number: string + (* Magic number for index files *) + val max_tag: int (* Biggest tag that can be stored in the header of a regular block. *) -val flat_float_array: bool +val flat_float_array : bool + (* Whether the compiler and runtime automagically flatten float arrays *) (**/**) val merlin : bool + (**/**) diff --git a/ocamlmerlin_mlx/ocaml/utils/diffing.ml b/ocamlmerlin_mlx/ocaml/utils/diffing.ml index e5b230e..f2c336d 100644 --- a/ocamlmerlin_mlx/ocaml/utils/diffing.ml +++ b/ocamlmerlin_mlx/ocaml/utils/diffing.ml @@ -36,16 +36,17 @@ type change_kind = | Preservation let style = function - | Preservation -> Misc.Color.[ FG Green ] - | Deletion -> Misc.Color.[ FG Red; Bold] - | Insertion -> Misc.Color.[ FG Red; Bold] - | Modification -> Misc.Color.[ FG Magenta; Bold] + | Preservation -> Misc.Style.[ FG Green ] + | Deletion -> Misc.Style.[ FG Red; Bold] + | Insertion -> Misc.Style.[ FG Red; Bold] + | Modification -> Misc.Style.[ FG Magenta; Bold] let prefix ppf (pos, p) = + let open Format_doc in let sty = style p in - Format.pp_open_stag ppf (Misc.Color.Style sty); - Format.fprintf ppf "%i. " pos; - Format.pp_close_stag ppf () + pp_open_stag ppf (Misc.Style.Style sty); + fprintf ppf "%i. " pos; + pp_close_stag ppf () let (let*) = Option.bind @@ -346,7 +347,22 @@ let compute_inner_cell tbl i j = compute_proposition (i-1) (j-1) diff in let*! newweight, (diff, localstate) = - select_best_proposition [diag;del;insert] + (* The order of propositions is important here: + the call [select_best_proposition [P_0, ...; P_n]] keeps the first + proposition with minimal weight as the representative path for this + weight class at the current matrix position. + + By induction, the representative path for the minimal weight class will + be the smallest path according to the reverse lexical order induced by + the element order [[P_0;...; P_n]]. + + This is why we choose to start with the [Del] case since path ending with + [Del+] suffix are likely to correspond to parital application in the + functor application case. + Similarly, large block of deletions or insertions at the end of the + definitions might point toward incomplete definitions. + Thus this seems a good overall setting. *) + select_best_proposition [del;insert;diag] in let state = update diff localstate in Matrix.set tbl i j ~weight:newweight ~state ~diff:(Some diff) diff --git a/ocamlmerlin_mlx/ocaml/utils/diffing.mli b/ocamlmerlin_mlx/ocaml/utils/diffing.mli index 80cfa5e..79c51fb 100644 --- a/ocamlmerlin_mlx/ocaml/utils/diffing.mli +++ b/ocamlmerlin_mlx/ocaml/utils/diffing.mli @@ -79,8 +79,8 @@ type change_kind = | Insertion | Modification | Preservation -val prefix: Format.formatter -> (int * change_kind) -> unit -val style: change_kind -> Misc.Color.style list +val prefix: (int * change_kind) Format_doc.printer +val style: change_kind -> Misc.Style.style list type ('left,'right,'eq,'diff) change = diff --git a/ocamlmerlin_mlx/ocaml/utils/diffing_with_keys.ml b/ocamlmerlin_mlx/ocaml/utils/diffing_with_keys.ml index 8a31314..c319b03 100644 --- a/ocamlmerlin_mlx/ocaml/utils/diffing_with_keys.ml +++ b/ocamlmerlin_mlx/ocaml/utils/diffing_with_keys.ml @@ -37,8 +37,8 @@ let prefix ppf x = in let style k ppf inner = let sty = Diffing.style k in - Format.pp_open_stag ppf (Misc.Color.Style sty); - Format.kfprintf (fun ppf -> Format.pp_close_stag ppf () ) ppf inner + Format_doc.pp_open_stag ppf (Misc.Style.Style sty); + Format_doc.kfprintf (fun ppf -> Format_doc.pp_close_stag ppf () ) ppf inner in match x with | Change (Name {pos; _ } | Type {pos; _}) @@ -53,7 +53,7 @@ let prefix ppf x = (** To detect [move] and [swaps], we are using the fact that there are 2-cycles in the graph of name renaming. - - [Change (x,y,_) is then an edge from + - [Change (x,y,_)] is then an edge from [key_left x] to [key_right y]. - [Insert x] is an edge between the special node epsilon and [key_left x] diff --git a/ocamlmerlin_mlx/ocaml/utils/diffing_with_keys.mli b/ocamlmerlin_mlx/ocaml/utils/diffing_with_keys.mli index 2da8268..94e56fb 100644 --- a/ocamlmerlin_mlx/ocaml/utils/diffing_with_keys.mli +++ b/ocamlmerlin_mlx/ocaml/utils/diffing_with_keys.mli @@ -46,7 +46,7 @@ type ('l,'r,'diff) change = | Insert of {pos:int; insert:'r} | Delete of {pos:int; delete:'l} -val prefix: Format.formatter -> ('l,'r,'diff) change -> unit +val prefix: ('l,'r,'diff) change Format_doc.printer module Define(D:Diffing.Defs with type eq := unit): sig diff --git a/ocamlmerlin_mlx/ocaml/utils/directory_content_cache.ml b/ocamlmerlin_mlx/ocaml/utils/directory_content_cache.ml index 7b5ee9e..637c7cf 100644 --- a/ocamlmerlin_mlx/ocaml/utils/directory_content_cache.ml +++ b/ocamlmerlin_mlx/ocaml/utils/directory_content_cache.ml @@ -11,4 +11,3 @@ include File_cache.Make (struct with Sys_error _ -> [||] end) - diff --git a/ocamlmerlin_mlx/ocaml/utils/dune b/ocamlmerlin_mlx/ocaml/utils/dune index 0c4e6c0..eb4472c 100644 --- a/ocamlmerlin_mlx/ocaml/utils/dune +++ b/ocamlmerlin_mlx/ocaml/utils/dune @@ -1,7 +1,7 @@ (library (name mlx_ocaml_utils) (package ocamlmerlin-mlx) - (flags :standard -w=-9-67-69 -open=Mlx_utils -open Astlib.Ast_501) + (flags :standard -w=-9-67-69 -open=Mlx_utils -open Astlib.Ast_504) (libraries ppxlib merlin-lib.config mlx_utils)) (copy_files diff --git a/ocamlmerlin_mlx/ocaml/utils/linkdeps.ml b/ocamlmerlin_mlx/ocaml/utils/linkdeps.ml new file mode 100644 index 0000000..824c898 --- /dev/null +++ b/ocamlmerlin_mlx/ocaml/utils/linkdeps.ml @@ -0,0 +1,142 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Hugo Heuzard *) +(* *) +(* Copyright 2020 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +module Style = Misc.Style + +type compunit = string + +type filename = string + +type compunit_and_source = { + compunit : compunit; + filename : filename; +} + +module Compunit_and_source = struct + type t = compunit_and_source + module Set = Set.Make(struct type nonrec t = t let compare = compare end) +end + +type refs = Compunit_and_source.Set.t + +type t = { + complete : bool; + missing_compunits : (compunit, refs) Hashtbl.t; + provided_compunits : (compunit, filename list) Hashtbl.t; + badly_ordered_deps : (Compunit_and_source.t, refs) Hashtbl.t; +} + +type error = + | Missing_implementations of (compunit * compunit_and_source list) list + | Wrong_link_order of (compunit_and_source * compunit_and_source list) list + | Multiple_definitions of (compunit * filename list) list + +let create ~complete = { + complete; + missing_compunits = Hashtbl.create 17; + provided_compunits = Hashtbl.create 17; + badly_ordered_deps = Hashtbl.create 17; +} + +let required t compunit = Hashtbl.mem t.missing_compunits compunit + +let update t k f = + let v = Hashtbl.find_opt t k in + Hashtbl.replace t k (f v) + +let add_required t by (name : string) = + let add s = + Compunit_and_source.Set.add by + (Option.value s ~default:Compunit_and_source.Set.empty) in + (try + let filename = List.hd (Hashtbl.find t.provided_compunits name) in + update t.badly_ordered_deps {compunit = name; filename } add + with Not_found -> ()); + update t.missing_compunits name add + +let add t ~filename ~compunit ~provides ~requires = + List.iter (add_required t {compunit; filename}) requires; + List.iter (fun p -> + Hashtbl.remove t.missing_compunits p; + let l = Option.value ~default:[] + (Hashtbl.find_opt t.provided_compunits p) in + Hashtbl.replace t.provided_compunits p (filename :: l)) provides + +let check t = + let of_seq s = + Seq.map (fun (k,v) -> k, Compunit_and_source.Set.elements v) s + |> List.of_seq + in + let missing = of_seq (Hashtbl.to_seq t.missing_compunits) in + let badly_ordered_deps = of_seq (Hashtbl.to_seq t.badly_ordered_deps) in + let duplicated = + Hashtbl.to_seq t.provided_compunits + |> Seq.filter (fun (_, files) -> List.compare_length_with files 1 > 0) + |> List.of_seq + in + match duplicated, badly_ordered_deps, missing with + | [], [], [] -> None + | [], [], l -> + if t.complete + then Some (Missing_implementations l) + else None + | [], l, _ -> + Some (Wrong_link_order l) + | l, _, _ -> + Some (Multiple_definitions l) + +(* Error report *) + +open Format_doc + +let print_reference print_fname ppf {compunit; filename} = + fprintf ppf "%a (%a)" Style.inline_code compunit print_fname filename + +let pp_list_comma f = + pp_print_list ~pp_sep:(fun ppf () -> fprintf ppf ",@ ") f + +let report_error_doc ~print_filename ppf = function + | Missing_implementations l -> + let print_modules ppf = + List.iter + (fun (md, rq) -> + fprintf ppf "@ @[%a referenced from %a@]" + Style.inline_code md + (pp_list_comma (print_reference print_filename)) rq) + in + fprintf ppf + "@[No implementation provided for the following modules:%a@]" + print_modules l + | Wrong_link_order l -> + let depends_on ppf (dep, depending) = + fprintf ppf "@ @[%a depends on %a@]" + (pp_list_comma (print_reference print_filename)) depending + (print_reference print_filename) dep + in + fprintf ppf "@[Wrong link order:%a@]" + (pp_list_comma depends_on) l + | Multiple_definitions l -> + let print ppf (compunit, files) = + fprintf ppf + "@ @[Multiple definitions of module %a in files %a@]" + Style.inline_code compunit + (pp_list_comma (Style.as_inline_code print_filename)) files + + in + fprintf ppf "@[ Duplicated implementations:%a@]" + (pp_list_comma print) l + +let report_error ~print_filename = + Format_doc.compat (report_error_doc ~print_filename) diff --git a/ocamlmerlin_mlx/ocaml/utils/linkdeps.mli b/ocamlmerlin_mlx/ocaml/utils/linkdeps.mli new file mode 100644 index 0000000..070b0e5 --- /dev/null +++ b/ocamlmerlin_mlx/ocaml/utils/linkdeps.mli @@ -0,0 +1,64 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Hugo Heuzard *) +(* *) +(* Copyright 2020 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +type t +(** The state of the linking check. + It keeps track of compilation units provided and required so far. *) + +type compunit = string + +type filename = string + +val create : complete:bool -> t +(** [create ~complete] returns an empty state. If [complete] is + [true], missing compilation units will be treated as errors. *) + +val add : t + -> filename:filename -> compunit:compunit + -> provides:compunit list -> requires:compunit list -> unit +(** [add t ~filename ~compunit ~provides ~requires] registers the + compilation unit [compunit] found in [filename] to [t]. + - [provides] are units and sub-units provided by [compunit] + - [requires] are units required by [compunit] + + [add] should be called in reverse topological order. *) + +val required : t -> compunit -> bool +(** [required t compunit] returns [true] if [compunit] is a dependency of + previously added compilation units. *) + +type compunit_and_source = { + compunit : compunit; + filename : filename; +} + +type error = + | Missing_implementations of (compunit * compunit_and_source list) list + | Wrong_link_order of (compunit_and_source * compunit_and_source list) list + | Multiple_definitions of (compunit * filename list) list + +val check : t -> error option +(** [check t] should be called once all the compilation units to be linked + have been added. It returns some error if: + - There are some missing implementations + and [complete] is [true] + - Some implementation appear + before their dependencies *) + + +val report_error : + print_filename:string Format_doc.printer -> error Format_doc.format_printer +val report_error_doc : + print_filename:string Format_doc.printer -> error Format_doc.printer diff --git a/ocamlmerlin_mlx/ocaml/utils/load_path.ml b/ocamlmerlin_mlx/ocaml/utils/load_path.ml index 70ce575..2707339 100644 --- a/ocamlmerlin_mlx/ocaml/utils/load_path.ml +++ b/ocamlmerlin_mlx/ocaml/utils/load_path.ml @@ -19,17 +19,22 @@ module STbl = Misc.String.Tbl (* Mapping from basenames to full filenames *) type registry = string STbl.t -let files : registry ref = s_table STbl.create 42 -let files_uncap : registry ref = s_table STbl.create 42 +let visible_files : registry ref = s_table STbl.create 42 +let visible_files_uncap : registry ref = s_table STbl.create 42 + +let hidden_files : registry ref = s_table STbl.create 42 +let hidden_files_uncap : registry ref = s_table STbl.create 42 module Dir = struct type t = { path : string; files : string list; + hidden : bool; } let path t = t.path let files t = t.files + let hidden t = t.hidden let find t fn = if List.mem fn t.files then @@ -37,18 +42,18 @@ module Dir = struct else None - let find_uncap t fn = - let fn = String.uncapitalize_ascii fn in + let find_normalized t fn = + let fn = Misc.normalized_unit_filename fn in let search base = - if String.uncapitalize_ascii base = fn then + if Misc.normalized_unit_filename base = fn then Some (Filename.concat t.path base) else None in List.find_map search t.files - let create path = - { path; files = Array.to_list (Directory_content_cache.read path) } + let create ~hidden path = + { path; files = Array.to_list (Directory_content_cache.read path); hidden } let check t = Directory_content_cache.check t.path @@ -56,19 +61,44 @@ end type auto_include_callback = (Dir.t -> string -> string option) -> string -> string -let dirs = s_ref [] + +let visible_dirs = s_ref [] +let hidden_dirs = s_ref [] let no_auto_include _ _ = raise Not_found let auto_include_callback = ref no_auto_include -let reset () = +let reset_visible () = assert (not Config.merlin || Local_store.is_bound ()); - STbl.clear !files; - STbl.clear !files_uncap; - dirs := []; + STbl.clear !visible_files; + STbl.clear !visible_files_uncap; + visible_dirs := [] + +let reset_hidden () = + assert (not Config.merlin || Local_store.is_bound ()); + STbl.clear !hidden_files; + STbl.clear !hidden_files_uncap; + hidden_dirs := [] + +let reset ?(only_hidden = false) ?(only_visible = false) () = + if not only_visible then reset_hidden (); + if not only_hidden then reset_visible (); auto_include_callback := no_auto_include -let get () = List.rev !dirs -let get_paths () = List.rev_map Dir.path !dirs +let get_visible () = List.rev !visible_dirs + +let get_path_list () = + Misc.rev_map_end Dir.path !visible_dirs (List.rev_map Dir.path !hidden_dirs) + +type paths = + { visible : string list; + hidden : string list } + +let get_paths () = + { visible = List.rev_map Dir.path !visible_dirs; + hidden = List.rev_map Dir.path !hidden_dirs } + +let get_visible_path_list () = List.rev_map Dir.path !visible_dirs +let get_hidden_path_list () = List.rev_map Dir.path !hidden_dirs (* Optimized version of [add] below, for use in [init] and [remove_dir]: since we are starting from an empty cache, we can avoid checking whether a unit @@ -77,77 +107,106 @@ let get_paths () = List.rev_map Dir.path !dirs let prepend_add dir = List.iter (fun base -> let fn = Filename.concat dir.Dir.path base in - STbl.replace !files base fn; - STbl.replace !files_uncap (String.uncapitalize_ascii base) fn + let filename = Misc.normalized_unit_filename base in + if dir.Dir.hidden then begin + STbl.replace !hidden_files base fn; + STbl.replace !hidden_files_uncap filename fn + end else begin + STbl.replace !visible_files base fn; + STbl.replace !visible_files_uncap filename fn + end ) dir.Dir.files -let init ~auto_include l = +let init ~auto_include ~visible ~hidden = assert (not Config.merlin || Local_store.is_bound ()); - let rec loop_changed acc = function + let rec loop_changed ~hidden acc = function | [] -> Some acc | new_path :: new_rest -> - loop_changed (Dir.create new_path :: acc) new_rest + loop_changed ~hidden (Dir.create ~hidden new_path :: acc) new_rest in - let rec loop_unchanged acc new_paths old_dirs = + let rec loop_unchanged ~hidden acc new_paths old_dirs = match new_paths, old_dirs with | [], [] -> None | new_path :: new_rest, [] -> - loop_changed (Dir.create new_path :: acc) new_rest + loop_changed ~hidden (Dir.create ~hidden new_path :: acc) new_rest | [], _ :: _ -> Some acc | new_path :: new_rest, old_dir :: old_rest -> if String.equal new_path (Dir.path old_dir) then begin if Dir.check old_dir then begin - loop_unchanged (old_dir :: acc) new_rest old_rest + loop_unchanged ~hidden (old_dir :: acc) new_rest old_rest end else begin - loop_changed (Dir.create new_path :: acc) new_rest + loop_changed ~hidden (Dir.create ~hidden new_path :: acc) new_rest end end else begin - loop_changed (Dir.create new_path :: acc) new_rest + loop_changed ~hidden (Dir.create ~hidden new_path :: acc) new_rest end in - match loop_unchanged [] l (List.rev !dirs) with + let () = + match loop_unchanged ~hidden:false [] visible (List.rev !visible_dirs) with + | None -> () + | Some new_dirs -> + reset ~only_visible:true (); + visible_dirs := new_dirs; + List.iter prepend_add new_dirs; + auto_include_callback := auto_include + in + match loop_unchanged ~hidden:true [] hidden (List.rev !hidden_dirs) with | None -> () | Some new_dirs -> - reset (); - dirs := new_dirs; + reset ~only_hidden:true (); + hidden_dirs := new_dirs; List.iter prepend_add new_dirs; auto_include_callback := auto_include let remove_dir dir = assert (not Config.merlin || Local_store.is_bound ()); - let new_dirs = List.filter (fun d -> Dir.path d <> dir) !dirs in - if List.compare_lengths new_dirs !dirs <> 0 then begin + let visible = List.filter (fun d -> Dir.path d <> dir) !visible_dirs in + let hidden = List.filter (fun d -> Dir.path d <> dir) !hidden_dirs in + if List.compare_lengths visible !visible_dirs <> 0 + || List.compare_lengths hidden !hidden_dirs <> 0 then begin reset (); - List.iter prepend_add new_dirs; - dirs := new_dirs + visible_dirs := visible; + hidden_dirs := hidden; + List.iter prepend_add hidden; + List.iter prepend_add visible end (* General purpose version of function to add a new entry to load path: We only - add a basename to the cache if it is not already present in the cache, in - order to enforce left-to-right precedence. *) -let add dir = + add a basename to the cache if it is not already present, in order to enforce + left-to-right precedence. *) +let add (dir : Dir.t) = assert (not Config.merlin || Local_store.is_bound ()); + let update base fn visible_files hidden_files = + if dir.hidden && not (STbl.mem !hidden_files base) then + STbl.replace !hidden_files base fn + else if not (STbl.mem !visible_files base) then + STbl.replace !visible_files base fn + in List.iter (fun base -> let fn = Filename.concat dir.Dir.path base in - if not (STbl.mem !files base) then - STbl.replace !files base fn; - let ubase = String.uncapitalize_ascii base in - if not (STbl.mem !files_uncap ubase) then - STbl.replace !files_uncap ubase fn) - dir.Dir.files; - dirs := dir :: !dirs + update base fn visible_files hidden_files; + let ubase = Misc.normalized_unit_filename base in + update ubase fn visible_files_uncap hidden_files_uncap) + dir.files; + if dir.hidden then + hidden_dirs := dir :: !hidden_dirs + else + visible_dirs := dir :: !visible_dirs let append_dir = add -let add_dir dir = add (Dir.create dir) +let add_dir ~hidden dir = add (Dir.create ~hidden dir) (* Add the directory at the start of load path - so basenames are unconditionally added. *) -let prepend_dir dir = +let prepend_dir (dir : Dir.t) = assert (not Config.merlin || Local_store.is_bound ()); prepend_add dir; - dirs := !dirs @ [dir] + if dir.hidden then + hidden_dirs := !hidden_dirs @ [dir] + else + visible_dirs := !visible_dirs @ [dir] let is_basename fn = Filename.basename fn = fn @@ -169,27 +228,43 @@ let is_basename fn = Filename.basename fn = fn (* Ensure directories are only ever scanned once *) let expand = Misc.expand_directory Config.standard_library in let otherlibs = - let read_lib lib = lazy (Dir.create (expand ("+" ^ lib))) in + let read_lib lib = lazy (Dir.create ~hidden:false (expand ("+" ^ lib))) in List.map (fun lib -> (lib, read_lib lib)) ["dynlink"; "str"; "unix"] in auto_include_libs otherlibs *) +type visibility = Visible | Hidden + +let find_file_in_cache fn visible_files hidden_files = + try (STbl.find !visible_files fn, Visible) with + | Not_found -> (STbl.find !hidden_files fn, Hidden) + let find fn = assert (not Config.merlin || Local_store.is_bound ()); try if is_basename fn && not !Sys.interactive then - STbl.find !files fn + fst (find_file_in_cache fn visible_files hidden_files) else - Misc.find_in_path (get_paths ()) fn + Misc.find_in_path (get_path_list ()) fn with Not_found -> !auto_include_callback Dir.find fn -let find_uncap fn = +let find_normalized_with_visibility fn = assert (not Config.merlin || Local_store.is_bound ()); try if is_basename fn && not !Sys.interactive then - STbl.find !files_uncap (String.uncapitalize_ascii fn) + find_file_in_cache (Misc.normalized_unit_filename fn) + visible_files_uncap hidden_files_uncap else - Misc.find_in_path_uncap (get_paths ()) fn + try + (Misc.find_in_path_normalized (get_visible_path_list ()) fn, Visible) + with + | Not_found -> + (Misc.find_in_path_normalized (get_hidden_path_list ()) fn, Hidden) with Not_found -> - let fn_uncap = String.uncapitalize_ascii fn in - !auto_include_callback Dir.find_uncap fn_uncap + let fn_uncap = Misc.normalized_unit_filename fn in + (!auto_include_callback Dir.find_normalized fn_uncap, Visible) + +let find_normalized fn = fst (find_normalized_with_visibility fn) + +(* Merlin: expose standard reset function *) +let reset () = reset () diff --git a/ocamlmerlin_mlx/ocaml/utils/load_path.mli b/ocamlmerlin_mlx/ocaml/utils/load_path.mli index 7d9abe0..c467f46 100644 --- a/ocamlmerlin_mlx/ocaml/utils/load_path.mli +++ b/ocamlmerlin_mlx/ocaml/utils/load_path.mli @@ -14,15 +14,15 @@ (** Management of include directories. - This module offers a high level interface to locating files in the - load path, which is constructed from [-I] command line flags and a few + This module offers a high level interface to locating files in the load + path, which is constructed from [-I] and [-H] command line flags and a few other parameters. It makes the assumption that the contents of include directories doesn't change during the execution of the compiler. *) -val add_dir : string -> unit +val add_dir : hidden:bool -> string -> unit (** Add a directory to the end of the load path (i.e. at lowest priority.) *) val remove_dir : string -> unit @@ -35,7 +35,7 @@ module Dir : sig type t (** Represent one directory in the load path. *) - val create : string -> t + val create : hidden:bool -> string -> t val path : t -> string @@ -43,10 +43,14 @@ module Dir : sig (** All the files in that directory. This doesn't include files in sub-directories of this directory. *) + val hidden : t -> bool + (** If the modules in this directory should not be bound in the initial + scope *) + val find : t -> string -> string option (** [find dir fn] returns the full path to [fn] in [dir]. *) - val find_uncap : t -> string -> string option + val find_normalized : t -> string -> string option (** As {!find}, but search also for uncapitalized name, i.e. if name is Foo.ml, either /path/Foo.ml or /path/foo.ml may be returned. *) end @@ -59,8 +63,13 @@ val no_auto_include : auto_include_callback (** No automatic directory inclusion: misses in the load path raise [Not_found] as normal. *) -val init : auto_include:auto_include_callback -> string list -> unit -(** [init l] is the same as [reset (); List.iter add_dir (List.rev l)] *) +val init : + auto_include:auto_include_callback -> visible:string list -> + hidden:string list -> unit +(** [init ~visible ~hidden] is the same as + [reset (); + List.iter add_dir (List.rev hidden); + List.iter add_dir (List.rev visible)] *) (* val auto_include_otherlibs : config:Mconfig.t -> (string -> unit) -> auto_include_callback *) @@ -68,18 +77,32 @@ val init : auto_include:auto_include_callback -> string list -> unit {!Load_path.init} and automatically adds [-I +lib] to the load path after calling [alert lib]. *) -val get_paths : unit -> string list +val get_path_list : unit -> string list (** Return the list of directories passed to [add_dir] so far. *) +type paths = + { visible : string list; + hidden : string list } + +val get_paths : unit -> paths +(** Return the directories passed to [add_dir] so far. *) + val find : string -> string (** Locate a file in the load path. Raise [Not_found] if the file cannot be found. This function is optimized for the case where the filename is a basename, i.e. doesn't contain a directory separator. *) -val find_uncap : string -> string -(** Same as [find], but search also for uncapitalized name, i.e. if - name is Foo.ml, allow /path/Foo.ml and /path/foo.ml to match. *) +val find_normalized : string -> string +(** Same as [find], but search also for normalized unit name (see + {!Misc.normalized_unit_filename}), i.e. if name is [Foo.ml], allow + [/path/Foo.ml] and [/path/foo.ml] to match. *) + +type visibility = Visible | Hidden + +val find_normalized_with_visibility : string -> string * visibility +(** Same as [find_normalized], but also reports whether the cmi was found in a + -I directory (Visible) or a -H directory (Hidden) *) val[@deprecated] add : Dir.t -> unit (** Old name for {!append_dir} *) @@ -92,5 +115,6 @@ val prepend_dir : Dir.t -> unit (** [prepend_dir d] adds [d] to the start of the load path (i.e. at highest priority. *) -val get : unit -> Dir.t list -(** Same as [get_paths ()], except that it returns a [Dir.t list]. *) +val get_visible : unit -> Dir.t list +(** Same as [get_paths ()], except that it returns a [Dir.t list], and doesn't + include the -H paths. *) diff --git a/ocamlmerlin_mlx/ocaml/utils/local_store.mli b/ocamlmerlin_mlx/ocaml/utils/local_store.mli index 3ea05d5..545cf71 100644 --- a/ocamlmerlin_mlx/ocaml/utils/local_store.mli +++ b/ocamlmerlin_mlx/ocaml/utils/local_store.mli @@ -14,7 +14,8 @@ (**************************************************************************) (** This module provides some facilities for creating references (and hash - tables) which can easily be snapshoted and restored to an arbitrary version. + tables) which can easily be snapshotted and restored to an arbitrary + version. It is used throughout the frontend (read: typechecker), to register all (well, hopefully) the global state. Thus making it easy for tools like diff --git a/ocamlmerlin_mlx/ocaml/utils/warnings.ml b/ocamlmerlin_mlx/ocaml/utils/warnings.ml index 4eb85d8..9d0c53d 100644 --- a/ocamlmerlin_mlx/ocaml/utils/warnings.ml +++ b/ocamlmerlin_mlx/ocaml/utils/warnings.ml @@ -34,6 +34,10 @@ type constructor_usage_warning = | Not_constructed | Only_exported_private +type type_declaration_usage_warning = + | Declaration + | Alias + type t = | Comment_start (* 1 *) | Comment_not_end (* 2 *) @@ -42,7 +46,7 @@ type t = | Ignored_partial_application (* 5 *) | Labels_omitted of string list (* 6 *) | Method_override of string list (* 7 *) - | Partial_match of string (* 8 *) + | Partial_match of Format_doc.t (* 8 *) | Missing_record_field_pattern of string (* 9 *) | Non_unit_statement (* 10 *) | Redundant_case (* 11 *) @@ -52,7 +56,7 @@ type t = | Implicit_public_methods of string list (* 15 *) | Unerasable_optional_argument (* 16 *) | Undeclared_virtual_method of string (* 17 *) - | Not_principal of string (* 18 *) + | Not_principal of Format_doc.t (* 18 *) | Non_principal_labels of string (* 19 *) | Ignored_extra_argument (* 20 *) | Nonreturning_statement (* 21 *) @@ -69,7 +73,7 @@ type t = was turned into a hard error *) | Unused_value_declaration of string (* 32 *) | Unused_open of string (* 33 *) - | Unused_type_declaration of string (* 34 *) + | Unused_type_declaration of string * type_declaration_usage_warning (* 34 *) | Unused_for_index of string (* 35 *) | Unused_ancestor of string (* 36 *) | Unused_constructor of string * constructor_usage_warning (* 37 *) @@ -109,6 +113,8 @@ type t = | Unused_tmc_attribute (* 71 *) | Tmc_breaks_tailcall (* 72 *) | Generative_application_expects_unit (* 73 *) + | Degraded_to_partial_match (* 74 *) + | Unnecessarily_partial_tuple_pattern (* 75 *) (* If you remove a warning, leave a hole in the numbering. NEVER change the numbers of existing warnings. @@ -190,12 +196,14 @@ let number = function | Unused_tmc_attribute -> 71 | Tmc_breaks_tailcall -> 72 | Generative_application_expects_unit -> 73 + | Degraded_to_partial_match -> 74 + | Unnecessarily_partial_tuple_pattern -> 75 ;; (* DO NOT REMOVE the ;; above: it is used by the testsuite/ests/warnings/mnemonics.mll test to determine where the definition of the number function above ends *) -let last_warning_number = 73 +let last_warning_number = 75 type description = { number : int; @@ -534,6 +542,16 @@ let descriptions = [ description = "A generative functor is applied to an empty structure \ (struct end) rather than to ()."; since = since 5 1 }; + { number = 74; + names = ["degraded-to-partial-match"]; + description = "A pattern-matching is compiled as partial \ + even if it appears to be total."; + since = since 5 3 }; + { number = 75; + names = ["unnecessarily-partial-tuple-pattern"]; + description = "A tuple pattern ends in .. but fully matches its expected \ + type."; + since = since 5 4 }; ] let name_to_number = @@ -870,7 +888,7 @@ let parse_options errflag s = alerts (* If you change these, don't forget to change them in man/ocamlc.m *) -let defaults_w = "+a-4-7-9-27-29-30-32..42-44-45-48-50-60-66..70" +let defaults_w = "+a-4-7-9-27-29-30-32..42-44-45-48-50-60-66..70-74" let defaults_warn_error = "-a" let default_disabled_alerts = [ "unstable"; "unsynchronized_access" ] @@ -880,278 +898,387 @@ let () = ignore @@ parse_options true defaults_warn_error let () = List.iter (set_alert ~error:false ~enable:false) default_disabled_alerts +module Fmt = Format_doc +module Style = Misc.Style +let msg = Fmt.doc_printf +let comma_inline_list = Fmt.(pp_print_list ~pp_sep:comma Style.inline_code) +let space_inline_list ppf l = + let pp_sep = Fmt.pp_print_space in + Fmt.fprintf ppf "@[%a@]" (Fmt.pp_print_list ~pp_sep Style.inline_code) l +let expand ppf s = if s = "" then () else Fmt.fprintf ppf "@ %s" s + let message = function | Comment_start -> - "this `(*' is the start of a comment.\n\ - Hint: Did you forget spaces when writing the infix operator `( * )'?" - | Comment_not_end -> "this is not the end of a comment." + msg + "this %a is the start of a comment.@ \ + %t: Did you forget spaces when writing the infix operator %a?" + Style.inline_code "(*" + Style.hint + Style.inline_code "( * )" + | Comment_not_end -> msg "this is not the end of a comment." | Fragile_match "" -> - "this pattern-matching is fragile." + msg "this pattern-matching is fragile." | Fragile_match s -> - "this pattern-matching is fragile.\n\ - It will remain exhaustive when constructors are added to type " ^ s ^ "." + msg "this pattern-matching is fragile.@ \ + It will remain exhaustive when constructors are added to type %a." + Style.inline_code s | Ignored_partial_application -> - "this function application is partial,\n\ - maybe some arguments are missing." + msg "this function application is partial,@ \ + maybe@ some@ arguments@ are@ missing." | Labels_omitted [] -> assert false | Labels_omitted [l] -> - "label " ^ l ^ " was omitted in the application of this function." + msg "label %a@ was omitted@ in@ the@ application@ of@ this@ function." + Style.inline_code l | Labels_omitted ls -> - "labels " ^ String.concat ", " ls ^ - " were omitted in the application of this function." + msg "labels %a@ were omitted@ in@ the@ application@ of@ this@ function." + comma_inline_list ls | Method_override [lab] -> - "the method " ^ lab ^ " is overridden." + msg "the method %a is overridden." + Style.inline_code lab | Method_override (cname :: slist) -> - String.concat " " - ("the following methods are overridden by the class" - :: cname :: ":\n " :: slist) + msg "the following methods are overridden@ by@ the@ class@ %a:@;<1 2>%a" + Style.inline_code cname + space_inline_list slist | Method_override [] -> assert false - | Partial_match "" -> "this pattern-matching is not exhaustive." - | Partial_match s -> - "this pattern-matching is not exhaustive.\n\ - Here is an example of a case that is not matched:\n" ^ s + | Partial_match doc -> + if doc = Format_doc.Doc.empty then + msg "this pattern-matching is not exhaustive." + else + msg "this pattern-matching is not exhaustive.@ \ + @[Here is an example of a case that is not matched:@;<1 2>%a@]" + Format_doc.pp_doc doc | Missing_record_field_pattern s -> - "the following labels are not bound in this record pattern:\n" ^ s ^ - "\nEither bind these labels explicitly or add '; _' to the pattern." + msg "the following labels are not bound@ in@ this@ \ + record@ pattern:@;<1 2>%a.@ \ + @[Either bind these labels explicitly or add %a to the pattern.@]" + Style.inline_code s + Style.inline_code "; _" | Non_unit_statement -> - "this expression should have type unit." - | Redundant_case -> "this match case is unused." - | Redundant_subpat -> "this sub-pattern is unused." + msg "this expression should have type unit." + | Redundant_case -> msg "this match case is unused." + | Redundant_subpat -> msg "this sub-pattern is unused." | Instance_variable_override [lab] -> - "the instance variable " ^ lab ^ " is overridden." + msg "the instance variable %a is overridden." + Style.inline_code lab | Instance_variable_override (cname :: slist) -> - String.concat " " - ("the following instance variables are overridden by the class" - :: cname :: ":\n " :: slist) + msg + "the following instance variables@ are overridden@ \ + by the class %a:@;<1 2>%a" + Style.inline_code cname + space_inline_list slist | Instance_variable_override [] -> assert false | Illegal_backslash -> - "illegal backslash escape in string.\n\ - Hint: Single backslashes \\ are reserved for escape sequences\n\ - (\\n, \\r, ...). Did you check the list of OCaml escape sequences?\n\ - To get a backslash character, escape it with a second backslash: \\\\." + msg "illegal backslash escape in string.@ \ + %t: Single backslashes %a are reserved for escape sequences@ \ + (%a, %a, ...).@ Did you check the list of OCaml escape sequences?@ \ + To get a backslash character, escape it with a second backslash: %a." + Style.hint + Style.inline_code {|\|} + Style.inline_code {|\n|} + Style.inline_code {|\r|} + Style.inline_code {|\\|} | Implicit_public_methods l -> - "the following private methods were made public implicitly:\n " - ^ String.concat " " l ^ "." - | Unerasable_optional_argument -> "this optional argument cannot be erased." - | Undeclared_virtual_method m -> "the virtual method "^m^" is not declared." - | Not_principal s -> s^" is not principal." - | Non_principal_labels s -> s^" without principality." - | Ignored_extra_argument -> "this argument will not be used by the function." + msg + "the following private methods@ were@ made@ public@ \ + implicitly:@;<1 2>%a." + space_inline_list l + | Unerasable_optional_argument -> + msg "this optional argument cannot be erased." + | Undeclared_virtual_method m -> + msg "the virtual method %a is not declared." + Style.inline_code m + | Not_principal emsg -> + msg "%a@ is@ not@ principal." Fmt.pp_doc emsg + | Non_principal_labels s -> msg "%s without principality." s + | Ignored_extra_argument -> + msg "this argument will not be used by the function." | Nonreturning_statement -> - "this statement never returns (or has an unsound type.)" - | Preprocessor s -> s + msg "this statement never returns (or has an unsound type.)" + | Preprocessor s -> msg "%s" s | Useless_record_with -> - "all the fields are explicitly listed in this record:\n\ - the 'with' clause is useless." + msg "all the fields are explicitly listed in this record:@ \ + the %a clause is useless." + Style.inline_code "with" | Bad_module_name (modname) -> - "bad source file name: \"" ^ modname ^ "\" is not a valid module name." + msg "bad source file name: %a is not a valid module name." + Style.inline_code modname | All_clauses_guarded -> - "this pattern-matching is not exhaustive.\n\ - All clauses in this pattern-matching are guarded." - | Unused_var v | Unused_var_strict v -> "unused variable " ^ v ^ "." + msg "this pattern-matching is not exhaustive.@ \ + All clauses in this pattern-matching are guarded." + | Unused_var v | Unused_var_strict v -> + msg "unused variable %a." + Style.inline_code v | Wildcard_arg_to_constant_constr -> - "wildcard pattern given as argument to a constant constructor" + msg "wildcard pattern given as argument to a constant constructor" | Eol_in_string -> - "unescaped end-of-line in a string constant (non-portable code)" + msg "unescaped end-of-line in a string constant@ \ + (non-portable behavior before OCaml 5.2)" | Duplicate_definitions (kind, cname, tc1, tc2) -> - Printf.sprintf "the %s %s is defined in both types %s and %s." - kind cname tc1 tc2 - | Unused_value_declaration v -> "unused value " ^ v ^ "." - | Unused_open s -> "unused open " ^ s ^ "." - | Unused_open_bang s -> "unused open! " ^ s ^ "." - | Unused_type_declaration s -> "unused type " ^ s ^ "." - | Unused_for_index s -> "unused for-loop index " ^ s ^ "." - | Unused_ancestor s -> "unused ancestor variable " ^ s ^ "." - | Unused_constructor (s, Unused) -> "unused constructor " ^ s ^ "." + msg "the %s %a is defined in both types %a and %a." + kind + Style.inline_code cname + Style.inline_code tc1 + Style.inline_code tc2 + | Unused_value_declaration v -> + msg "unused value %a." Style.inline_code v + | Unused_open s -> msg "unused open %a." Style.inline_code s + | Unused_open_bang s -> msg "unused open! %a." Style.inline_code s + | Unused_type_declaration (s, Declaration) -> + msg "unused type %a." Style.inline_code s + | Unused_type_declaration (s, Alias) -> + msg "unused type alias %a." Style.inline_code s + | Unused_for_index s -> msg "unused for-loop index %a." Style.inline_code s + | Unused_ancestor s -> msg "unused ancestor variable %a." Style.inline_code s + | Unused_constructor (s, Unused) -> + msg "unused constructor %a." Style.inline_code s | Unused_constructor (s, Not_constructed) -> - "constructor " ^ s ^ - " is never used to build values.\n\ - (However, this constructor appears in patterns.)" + msg "constructor %a is never used to build values.@ \ + (However, this constructor appears in patterns.)" + Style.inline_code s | Unused_constructor (s, Only_exported_private) -> - "constructor " ^ s ^ - " is never used to build values.\n\ - Its type is exported as a private type." + msg "constructor %a is never used to build values.@ \ + Its type is exported as a private type." + Style.inline_code s | Unused_extension (s, is_exception, complaint) -> - let kind = - if is_exception then "exception" else "extension constructor" in - let name = kind ^ " " ^ s in - begin match complaint with - | Unused -> "unused " ^ name - | Not_constructed -> - name ^ - " is never used to build values.\n\ - (However, this constructor appears in patterns.)" - | Only_exported_private -> - name ^ - " is never used to build values.\n\ - It is exported or rebound as a private extension." - end + let kind = + if is_exception then "exception" else "extension constructor" in + begin match complaint with + | Unused -> msg "unused %s %a" kind Style.inline_code s + | Not_constructed -> + msg + "%s %a is never used@ to@ build@ values.@ \ + (However, this constructor appears in patterns.)" + kind Style.inline_code s + | Only_exported_private -> + msg + "%s %a is never used@ to@ build@ values.@ \ + It is exported or rebound as a private extension." + kind Style.inline_code s + end | Unused_rec_flag -> - "unused rec flag." + msg "unused rec flag." | Name_out_of_scope (ty, [nm], false) -> - nm ^ " was selected from type " ^ ty ^ - ".\nIt is not visible in the current scope, and will not \n\ - be selected if the type becomes unknown." + msg "%a was selected from type %a.@ \ + @[It is not visible in the current scope,@ and@ will@ not@ \ + be@ selected@ if the type becomes unknown@]." + Style.inline_code nm + Style.inline_code ty | Name_out_of_scope (_, _, false) -> assert false | Name_out_of_scope (ty, slist, true) -> - "this record of type "^ ty ^" contains fields that are \n\ - not visible in the current scope: " - ^ String.concat " " slist ^ ".\n\ - They will not be selected if the type becomes unknown." + msg "this record of type %a@ contains@ fields@ that@ are@ \ + not@ visible in the current scope:@;<1 2>%a.@ \ + @[They will not be selected@ if the type@ becomes@ unknown.@]" + Style.inline_code ty + space_inline_list slist | Ambiguous_name ([s], tl, false, expansion) -> - s ^ " belongs to several types: " ^ String.concat " " tl ^ - "\nThe first one was selected. Please disambiguate if this is wrong." - ^ expansion + msg "%a belongs to several types:@;<1 2>%a.@ \ + The first one was selected.@ \ + @[Please disambiguate@ if@ this@ is wrong.%a@]" + Style.inline_code s + space_inline_list tl + expand expansion | Ambiguous_name (_, _, false, _ ) -> assert false | Ambiguous_name (_slist, tl, true, expansion) -> - "these field labels belong to several types: " ^ - String.concat " " tl ^ - "\nThe first one was selected. Please disambiguate if this is wrong." - ^ expansion + msg "these field labels belong to several types:@;<1 2>%a.@ \ + @[The first one was selected.@ \ + Please disambiguate@ if@ this@ is@ wrong.%a@]" + space_inline_list tl + expand expansion | Disambiguated_name s -> - "this use of " ^ s ^ " relies on type-directed disambiguation,\n\ - it will not compile with OCaml 4.00 or earlier." + msg "this use of %a@ relies@ on@ type-directed@ disambiguation,@ \ + @[it@ will@ not@ compile@ with@ OCaml@ 4.00@ or@ earlier.@]" + Style.inline_code s | Nonoptional_label s -> - "the label " ^ s ^ " is not optional." + msg "the label %a is not optional." + Style.inline_code s | Open_shadow_identifier (kind, s) -> - Printf.sprintf - "this open statement shadows the %s identifier %s (which is later used)" - kind s + msg + "this open statement shadows@ the@ %s identifier@ %a@ \ + (which is later used)" + kind Style.inline_code s | Open_shadow_label_constructor (kind, s) -> - Printf.sprintf - "this open statement shadows the %s %s (which is later used)" - kind s + msg + "this open statement shadows@ the@ %s %a@ (which is later used)" + kind Style.inline_code s | Bad_env_variable (var, s) -> - Printf.sprintf "illegal environment variable %s : %s" var s + msg "illegal environment variable %a : %s" + Style.inline_code var + s | Attribute_payload (a, s) -> - Printf.sprintf "illegal payload for attribute '%s'.\n%s" a s + msg "illegal payload for attribute %a.@ %s" + Style.inline_code a + s | Eliminated_optional_arguments sl -> - Printf.sprintf "implicit elimination of optional argument%s %s" + msg "implicit elimination@ of optional argument%s@ %a" (if List.length sl = 1 then "" else "s") - (String.concat ", " sl) + comma_inline_list sl | No_cmi_file(name, None) -> - "no cmi file was found in path for module " ^ name - | No_cmi_file(name, Some msg) -> - Printf.sprintf - "no valid cmi file was found in path for module %s. %s" - name msg + msg "no cmi file was found@ in path for module %a" + Style.inline_code name + | No_cmi_file(name, Some wmsg) -> + msg + "no valid cmi file was found@ in path for module %a.@ %s" + Style.inline_code name + wmsg | Unexpected_docstring unattached -> - if unattached then "unattached documentation comment (ignored)" - else "ambiguous documentation comment" + if unattached then msg "unattached documentation comment (ignored)" + else msg "ambiguous documentation comment" | Wrong_tailcall_expectation b -> - Printf.sprintf "expected %s" + msg "expected %s" (if b then "tailcall" else "non-tailcall") | Fragile_literal_pattern -> let[@manual.ref "ss:warn52"] ref_manual = [ 13; 5; 3 ] in - Format.asprintf - "Code should not depend on the actual values of\n\ - this constructor's arguments. They are only for information\n\ - and may change in future versions. %a" + msg + "Code should not depend@ on@ the@ actual@ values of@ \ + this@ constructor's arguments.@ @[They are only for@ information@ \ + and@ may@ change@ in@ future versions.@ %a@]" Misc.print_see_manual ref_manual | Unreachable_case -> - "this match case is unreachable.\n\ - Consider replacing it with a refutation case ' -> .'" + msg "this match case is unreachable.@ \ + Consider replacing it with a refutation case %a" + Style.inline_code " -> ." | Misplaced_attribute attr_name -> - Printf.sprintf "the %S attribute cannot appear in this context" attr_name + msg "the %a attribute cannot appear in this context" + Style.inline_code attr_name | Duplicated_attribute attr_name -> - Printf.sprintf "the %S attribute is used more than once on this \ - expression" - attr_name + msg "the %a attribute is used more than once@ on@ this@ \ + expression" + Style.inline_code attr_name | Inlining_impossible reason -> - Printf.sprintf "Cannot inline: %s" reason + msg "Cannot inline:@ %s" reason | Ambiguous_var_in_pattern_guard vars -> let[@manual.ref "ss:warn57"] ref_manual = [ 13; 5; 4 ] in let vars = List.sort String.compare vars in let vars_explanation = - let in_different_places = - "in different places in different or-pattern alternatives" - in match vars with | [] -> assert false - | [x] -> "variable " ^ x ^ " appears " ^ in_different_places + | [x] -> + Fmt.dprintf + "variable %a appears in@ different@ places@ in@ \ + different@ or-pattern@ alternatives." + Style.inline_code x | _::_ -> - let vars = String.concat ", " vars in - "variables " ^ vars ^ " appear " ^ in_different_places + Fmt.dprintf + "variables %a appears in@ different@ places@ in@ \ + different@ or-pattern@ alternatives." + comma_inline_list vars in - Format.asprintf - "Ambiguous or-pattern variables under guard;\n\ - %s.\n\ - Only the first match will be used to evaluate the guard expression.\n\ - %a" - vars_explanation Misc.print_see_manual ref_manual + msg + "Ambiguous or-pattern variables under@ guard;@ \ + %t@ \ + @[Only the first match will be used to evaluate@ \ + the@ guard@ expression.@ %a@]" + vars_explanation + Misc.print_see_manual ref_manual | No_cmx_file name -> - Printf.sprintf - "no cmx file was found in path for module %s, \ - and its interface was not compiled with -opaque" name + msg + "no cmx file was found@ in@ path@ for@ module@ %a,@ \ + and@ its@ interface@ was@ not@ compiled@ with %a" + Style.inline_code name + Style.inline_code "-opaque" | Flambda_assignment_to_non_mutable_value -> - "A potential assignment to a non-mutable value was detected \n\ - in this source file. Such assignments may generate incorrect code \n\ - when using Flambda." - | Unused_module s -> "unused module " ^ s ^ "." + msg + "A potential@ assignment@ to@ a@ non-mutable@ value@ was@ detected@ \ + in@ this@ source@ file.@ \ + Such@ assignments@ may@ generate@ incorrect@ code@ \ + when@ using@ Flambda." + | Unused_module s -> msg "unused module %a." Style.inline_code s | Unboxable_type_in_prim_decl t -> - Printf.sprintf - "This primitive declaration uses type %s, whose representation\n\ - may be either boxed or unboxed. Without an annotation to indicate\n\ - which representation is intended, the boxed representation has been\n\ - selected by default. This default choice may change in future\n\ - versions of the compiler, breaking the primitive implementation.\n\ - You should explicitly annotate the declaration of %s\n\ - with [@@boxed] or [@@unboxed], so that its external interface\n\ - remains stable in the future." t t + msg + "This primitive declaration uses type %a,@ whose@ representation@ \ + may be either boxed or unboxed.@ Without@ an@ annotation@ to@ \ + indicate@ which@ representation@ is@ intended,@ the@ boxed@ \ + representation@ has@ been@ selected@ by@ default.@ This@ default@ \ + choice@ may@ change@ in@ future@ versions@ of@ the@ compiler,@ \ + breaking@ the@ primitive@ implementation.@ You@ should@ explicitly@ \ + annotate@ the@ declaration@ of@ %a@ with@ %a@ or@ %a,@ so@ that@ its@ \ + external@ interface@ remains@ stable@ in@ the future." + Style.inline_code t + Style.inline_code t + Style.inline_code "[@@boxed]" + Style.inline_code "[@@unboxed]" | Constraint_on_gadt -> - "Type constraints do not apply to GADT cases of variant types." + msg "Type constraints do not apply to@ GADT@ cases@ of@ variant types." | Erroneous_printed_signature s -> - "The printed interface differs from the inferred interface.\n\ - The inferred interface contained items which could not be printed\n\ - properly due to name collisions between identifiers." - ^ s - ^ "\nBeware that this warning is purely informational and will not catch\n\ - all instances of erroneous printed interface." + msg + "The printed@ interface@ differs@ from@ the@ inferred@ interface.@ \ + The@ inferred@ interface@ contained@ items@ which@ could@ not@ be@ \ + printed@ properly@ due@ to@ name@ collisions@ between@ identifiers.@ \ + %s@ \ + Beware@ that@ this@ warning@ is@ purely@ informational@ and@ will@ \ + not@ catch@ all@ instances@ of@ erroneous@ printed@ interface." + s | Unsafe_array_syntax_without_parsing -> - "option -unsafe used with a preprocessor returning a syntax tree" + msg "option@ %a@ used with a preprocessor returning@ a@ syntax tree" + Style.inline_code "-unsafe" | Redefining_unit name -> - Printf.sprintf - "This type declaration is defining a new '()' constructor\n\ - which shadows the existing one.\n\ - Hint: Did you mean 'type %s = unit'?" name - | Unused_functor_parameter s -> "unused functor parameter " ^ s ^ "." + let def ppf name = Fmt.fprintf ppf "type %s = unit" name in + msg + "This type declaration is@ defining@ a new %a constructor@ \ + which@ shadows@ the@ existing@ one.@ \ + %t: Did you mean %a?" + Style.inline_code "()" + Style.hint + (Style.as_inline_code def) name + | Unused_functor_parameter s -> + msg "unused functor parameter %a." Style.inline_code s | Match_on_mutable_state_prevent_uncurry -> - "This pattern depends on mutable state.\n\ - It prevents the remaining arguments from being uncurried, which will \ - cause additional closure allocations." - | Unused_field (s, Unused) -> "unused record field " ^ s ^ "." + msg + "This pattern depends on@ mutable@ state.@ It prevents@ the@ \ + remaining@ arguments@ from@ being@ uncurried,@ which will@ cause@ \ + additional@ closure@ allocations." + | Unused_field (s, Unused) -> + msg "unused record field %a." Style.inline_code s | Unused_field (s, Not_read) -> - "record field " ^ s ^ - " is never read.\n\ - (However, this field is used to build or mutate values.)" + msg "record field %a is never read.@ \ + (However, this field is used to build or mutate values.)" + Style.inline_code s | Unused_field (s, Not_mutated) -> - "mutable record field " ^ s ^ - " is never mutated." + msg "mutable record field %a is never mutated." + Style.inline_code s | Missing_mli -> - "Cannot find interface file." + msg "Cannot find interface file." | Unused_tmc_attribute -> - "This function is marked @tail_mod_cons\n\ - but is never applied in TMC position." + msg "This function is marked %a@ \ + but is never applied in TMC position." + Style.inline_code "@tail_mod_cons" | Tmc_breaks_tailcall -> - "This call\n\ - is in tail-modulo-cons position in a TMC function,\n\ - but the function called is not itself specialized for TMC,\n\ - so the call will not be transformed into a tail call.\n\ - Please either mark the called function with the [@tail_mod_cons]\n\ - attribute, or mark this call with the [@tailcall false] attribute\n\ - to make its non-tailness explicit." + msg "This call@ is@ in@ tail-modulo-cons@ position@ in@ a@ TMC@ \ + function,@ but@ the@ function@ called@ is@ not@ itself@ \ + specialized@ for@ TMC,@ so@ the@ call@ will@ not@ be@ transformed@ \ + into@ a@ tail@ call.@ \ + @[Please@ either@ mark@ the@ called@ function@ with@ the %a@ \ + attribute,@ or@ mark@ this@ call@ with@ the@ %a@ attribute@ to@ \ + make@ its@ non-tailness@ explicit.@]" + Style.inline_code "[@tail_mod_cons]" + Style.inline_code "[@tailcall false]" | Generative_application_expects_unit -> - "A generative functor\n\ - should be applied to '()'; using '(struct end)' is deprecated." + msg "A generative functor@ \ + should be applied@ to@ %a;@ using@ %a@ is deprecated." + Style.inline_code "()" + Style.inline_code "(struct end)" + | Degraded_to_partial_match -> + let[@manual.ref "ss:warn74"] ref_manual = [ 13; 5; 5 ] in + msg + "This pattern-matching@ is@ compiled@ as@ partial,@ even@ if@ it@ \ + appears@ to@ be@ total.@ It@ may@ generate@ a@ %a@ exception.@ This@ \ + typically@ occurs@ due@ to@ complex@ matches@ on@ mutable@ fields.@ %a" + Style.inline_code "Match_failure" + Misc.print_see_manual ref_manual + | Unnecessarily_partial_tuple_pattern -> + msg + "This tuple pattern@ unnecessarily@ ends in %a,@ as@ it@ explicitly@ \ + matches@ all@ components@ of@ its@ expected@ type." + Style.inline_code ".." ;; let nerrors = ref 0 type reporting_information = { id : string - ; message : string + ; message : Fmt.doc ; is_error : bool - ; sub_locs : (loc * string) list; + ; sub_locs : (loc * Fmt.doc) list; } let id_name w = @@ -1183,7 +1310,7 @@ let report_alert (alert : alert) = | true -> let is_error = alert_is_error alert in if is_error then incr nerrors; - let message = Misc.normalise_eol alert.message in + let message = msg "%s" (Misc.normalise_eol alert.message) in (* Reduce \r\n to \n: - Prevents any \r characters being printed on Unix when processing Windows sources @@ -1193,8 +1320,8 @@ let report_alert (alert : alert) = let sub_locs = if not alert.def.loc_ghost && not alert.use.loc_ghost then [ - alert.def, "Definition"; - alert.use, "Expected signature"; + alert.def, msg "Definition"; + alert.use, msg "Expected signature"; ] else [] diff --git a/ocamlmerlin_mlx/ocaml/utils/warnings.mli b/ocamlmerlin_mlx/ocaml/utils/warnings.mli index 08f30ac..bf17b28 100644 --- a/ocamlmerlin_mlx/ocaml/utils/warnings.mli +++ b/ocamlmerlin_mlx/ocaml/utils/warnings.mli @@ -39,6 +39,10 @@ type constructor_usage_warning = | Not_constructed | Only_exported_private +type type_declaration_usage_warning = + | Declaration + | Alias + type t = | Comment_start (* 1 *) | Comment_not_end (* 2 *) @@ -47,7 +51,7 @@ type t = | Ignored_partial_application (* 5 *) | Labels_omitted of string list (* 6 *) | Method_override of string list (* 7 *) - | Partial_match of string (* 8 *) + | Partial_match of Format_doc.t (* 8 *) | Missing_record_field_pattern of string (* 9 *) | Non_unit_statement (* 10 *) | Redundant_case (* 11 *) @@ -57,7 +61,7 @@ type t = | Implicit_public_methods of string list (* 15 *) | Unerasable_optional_argument (* 16 *) | Undeclared_virtual_method of string (* 17 *) - | Not_principal of string (* 18 *) + | Not_principal of Format_doc.t (* 18 *) | Non_principal_labels of string (* 19 *) | Ignored_extra_argument (* 20 *) | Nonreturning_statement (* 21 *) @@ -68,11 +72,15 @@ type t = | Unused_var of string (* 26 *) | Unused_var_strict of string (* 27 *) | Wildcard_arg_to_constant_constr (* 28 *) - | Eol_in_string (* 29 *) + | Eol_in_string (* 29 + Note: since OCaml 5.2, the lexer normalizes \r\n sequences in + the source file to a single \n character, so the behavior of + newlines in string literals is portable. This warning is + never emitted anymore. *) | Duplicate_definitions of string * string * string * string (* 30 *) | Unused_value_declaration of string (* 32 *) | Unused_open of string (* 33 *) - | Unused_type_declaration of string (* 34 *) + | Unused_type_declaration of string * type_declaration_usage_warning (* 34 *) | Unused_for_index of string (* 35 *) | Unused_ancestor of string (* 36 *) | Unused_constructor of string * constructor_usage_warning (* 37 *) @@ -112,6 +120,8 @@ type t = | Unused_tmc_attribute (* 71 *) | Tmc_breaks_tailcall (* 72 *) | Generative_application_expects_unit (* 73 *) + | Degraded_to_partial_match (* 74 *) + | Unnecessarily_partial_tuple_pattern (* 75 *) type alert = {kind:string; message:string; def:loc; use:loc} @@ -134,9 +144,9 @@ val defaults_warn_error : string type reporting_information = { id : string - ; message : string + ; message : Format_doc.t ; is_error : bool - ; sub_locs : (loc * string) list; + ; sub_locs : (loc * Format_doc.t) list; } val report : t -> [ `Active of reporting_information | `Inactive ] diff --git a/ocamlmerlin_mlx/ocamlmerlin_mlx.ml b/ocamlmerlin_mlx/ocamlmerlin_mlx.ml index d75afbc..1c24898 100644 --- a/ocamlmerlin_mlx/ocamlmerlin_mlx.ml +++ b/ocamlmerlin_mlx/ocamlmerlin_mlx.ml @@ -3,29 +3,26 @@ open Merlin_extend.Extend_protocol.Reader open Mlx_ocaml_parsing open Mlx_kernel -(* Some notes on usage of Obj.magic here... - - we copy parsetree.ml from merlin' 501 branch which copies AST from OCaml's - 5.1.x branch. TODO: instead we should inject ppxlib's Ast_501 module there - - then finally the currently installed merlin-extend should have the same - AST as the one used by compiled. TODO: figure out why compiler doesn't see - that... -*) +(* We copy parsetree.ml from merlin's 504 branch which copies AST from OCaml's + 5.4.x branch. We use ppxlib's Ast_504 + Convert to bridge to the compiler's + version. Obj.magic is used because the types are structurally identical but + come from different module paths. *) module Conv = struct module Conv = Ppxlib_ast.Convert - (Ppxlib_ast__Versions.OCaml_501) + (Ppxlib_ast__Versions.OCaml_504) (Ppxlib_ast.Compiler_version) let conv_signature (intf : Mlx_ocaml_parsing.Parsetree.signature) : Ocaml_parsing.Parsetree.signature = - let intf : Astlib.Ast_501.Parsetree.signature = Obj.magic intf in + let intf : Astlib.Ast_504.Parsetree.signature = Obj.magic intf in let intf = Conv.copy_signature intf in let intf : Ocaml_parsing.Parsetree.signature = Obj.magic intf in intf let conv_structure (impl : Mlx_ocaml_parsing.Parsetree.structure) : Ocaml_parsing.Parsetree.structure = - let impl : Astlib.Ast_501.Parsetree.structure = Obj.magic impl in + let impl : Astlib.Ast_504.Parsetree.structure = Obj.magic impl in let impl = Conv.copy_structure impl in let impl : Ocaml_parsing.Parsetree.structure = Obj.magic impl in impl @@ -67,7 +64,11 @@ module Mlx_reader = struct mkstri (mkexp (Pexp_constant - (Parsetree.Pconst_string (text, Location.none, None)))) + { + Parsetree.pconst_desc = + Pconst_string (text, Location.none, None); + pconst_loc = Location.none; + })) let to_extension_node exn = match Location.error_of_exn exn with @@ -77,7 +78,7 @@ module Mlx_reader = struct let name = { Location.loc = error.main.loc; txt = "ocaml.error" } in - let () = error.main.txt Format.str_formatter in + Format_doc.Doc.format Format.str_formatter error.main.txt; let msg = Format.flush_str_formatter () in let payload = mkpayload msg in Some diff --git a/ocamlmerlin_mlx/utils/dune b/ocamlmerlin_mlx/utils/dune index 33966fc..ddf112a 100644 --- a/ocamlmerlin_mlx/utils/dune +++ b/ocamlmerlin_mlx/utils/dune @@ -12,8 +12,3 @@ (mode promote) (files %{project_root}/merlin/src/platform/platform_misc.c)) -(copy_files# - (enabled_if - (<> %{profile} "release")) - (mode promote) - (files %{project_root}/merlin/src/utils/*.{ml,mli})) diff --git a/ocamlmerlin_mlx/utils/format_doc.ml b/ocamlmerlin_mlx/utils/format_doc.ml new file mode 100644 index 0000000..28580bf --- /dev/null +++ b/ocamlmerlin_mlx/utils/format_doc.ml @@ -0,0 +1,564 @@ +# 1 "merlin/src/utils/format_doc.ml" +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Florian Angeletti, projet Cambium, Inria Paris *) +(* *) +(* Copyright 2021 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +module Doc = struct + + type box_type = + | H + | V + | HV + | HoV + | B + + type stag = Format.stag + + type element = + | Text of string + | With_size of int + | Open_box of { kind: box_type ; indent:int } + | Close_box + | Open_tag of Format.stag + | Close_tag + | Open_tbox + | Tab_break of { width : int; offset : int } + | Set_tab + | Close_tbox + | Simple_break of { spaces : int; indent: int } + | Break of { fits : string * int * string as 'a; breaks : 'a } + | Flush of { newline:bool } + | Newline + | If_newline + + | Deprecated of (Format.formatter -> unit) + + type t = { rev:element list } [@@unboxed] + + let empty = { rev = [] } + + let to_list doc = List.rev doc.rev + let add doc x = { rev = x :: doc.rev } + let fold f acc doc = List.fold_left f acc (to_list doc) + let append left right = { rev = right.rev @ left.rev } + + let format_open_box_gen ppf kind indent = + match kind with + | H-> Format.pp_open_hbox ppf () + | V -> Format.pp_open_vbox ppf indent + | HV -> Format.pp_open_hvbox ppf indent + | HoV -> Format.pp_open_hovbox ppf indent + | B -> Format.pp_open_box ppf indent + + let interpret_elt ppf = function + | Text x -> Format.pp_print_string ppf x + | Open_box { kind; indent } -> format_open_box_gen ppf kind indent + | Close_box -> Format.pp_close_box ppf () + | Open_tag tag -> Format.pp_open_stag ppf tag + | Close_tag -> Format.pp_close_stag ppf () + | Open_tbox -> Format.pp_open_tbox ppf () + | Tab_break {width;offset} -> Format.pp_print_tbreak ppf width offset + | Set_tab -> Format.pp_set_tab ppf () + | Close_tbox -> Format.pp_close_tbox ppf () + | Simple_break {spaces;indent} -> Format.pp_print_break ppf spaces indent + | Break {fits;breaks} -> Format.pp_print_custom_break ppf ~fits ~breaks + | Flush {newline=true} -> Format.pp_print_newline ppf () + | Flush {newline=false} -> Format.pp_print_flush ppf () + | Newline -> Format.pp_force_newline ppf () + | If_newline -> Format.pp_print_if_newline ppf () + | With_size _ -> () + | Deprecated pr -> pr ppf + + let rec interpret ppf = function + | [] -> () + | With_size size :: Text text :: l -> + Format.pp_print_as ppf size text; + interpret ppf l + | x :: l -> + interpret_elt ppf x; + interpret ppf l + + let format ppf doc = interpret ppf (to_list doc) + + + + let open_box kind indent doc = add doc (Open_box {kind;indent}) + let close_box doc = add doc Close_box + + let string s doc = add doc (Text s) + let bytes b doc = add doc (Text (Bytes.to_string b)) + let with_size size doc = add doc (With_size size) + + let int n doc = add doc (Text (string_of_int n)) + let float f doc = add doc (Text (string_of_float f)) + let char c doc = add doc (Text (String.make 1 c)) + let bool c doc = add doc (Text (Bool.to_string c)) + + let break ~spaces ~indent doc = add doc (Simple_break {spaces; indent}) + let space doc = break ~spaces:1 ~indent:0 doc + let cut = break ~spaces:0 ~indent:0 + + let custom_break ~fits ~breaks doc = add doc (Break {fits;breaks}) + + let force_newline doc = add doc Newline + let if_newline doc = add doc If_newline + + let flush doc = add doc (Flush {newline=false}) + let force_stop doc = add doc (Flush {newline=true}) + + let open_tbox doc = add doc Open_tbox + let set_tab doc = add doc Set_tab + let tab_break ~width ~offset doc = add doc (Tab_break {width;offset}) + let tab doc = tab_break ~width:0 ~offset:0 doc + let close_tbox doc = add doc Close_tbox + + let open_tag stag doc = add doc (Open_tag stag) + let close_tag doc = add doc Close_tag + + let iter ?(sep=Fun.id) ~iter:iterator elt l doc = + let first = ref true in + let rdoc = ref doc in + let print x = + if !first then (first := false; rdoc := elt x !rdoc) + else rdoc := !rdoc |> sep |> elt x + in + iterator print l; + !rdoc + + let rec list ?(sep=Fun.id) elt l doc = match l with + | [] -> doc + | [a] -> elt a doc + | a :: ((_ :: _) as q) -> + doc |> elt a |> sep |> list ~sep elt q + + let array ?sep elt a doc = iter ?sep ~iter:Array.iter elt a doc + let seq ?sep elt s doc = iter ?sep ~iter:Seq.iter elt s doc + + let option ?(none=Fun.id) elt o doc = match o with + | None -> none doc + | Some x -> elt x doc + + let either ~left ~right x doc = match x with + | Either.Left x -> left x doc + | Either.Right x -> right x doc + + let result ~ok ~error x doc = match x with + | Ok x -> ok x doc + | Error x -> error x doc + + (* To format free-flowing text *) + let rec subtext len left right s doc = + let flush doc = + doc |> string (String.sub s left (right - left)) + in + let after_flush doc = subtext len (right+1) (right+1) s doc in + if right = len then + if left <> len then flush doc else doc + else + match s.[right] with + | '\n' -> + doc |> flush |> force_newline |> after_flush + | ' ' -> + doc |> flush |> space |> after_flush + (* there is no specific support for '\t' + as it is unclear what a right semantics would be *) + | _ -> subtext len left (right + 1) s doc + + let text s doc = + subtext (String.length s) 0 0 s doc + + type ('a,'b) fmt = ('a, t, t, 'b) format4 + type printer0 = t -> t + type 'a printer = 'a -> printer0 + + let output_formatting_lit fmting_lit doc = + let open CamlinternalFormatBasics in + match fmting_lit with + | Close_box -> close_box doc + | Close_tag -> close_tag doc + | Break (_, width, offset) -> break ~spaces:width ~indent:offset doc + | FFlush -> flush doc + | Force_newline -> force_newline doc + | Flush_newline -> force_stop doc + | Magic_size (_, n) -> with_size n doc + | Escaped_at -> char '@' doc + | Escaped_percent -> char '%' doc + | Scan_indic c -> doc |> char '@' |> char c + + let to_string doc = + let b = Buffer.create 20 in + let convert = function + | Text s -> Buffer.add_string b s + | _ -> () + in + fold (fun () x -> convert x) () doc; + Buffer.contents b + + let box_type = + let open CamlinternalFormatBasics in + function + | Pp_fits -> H + | Pp_hbox -> H + | Pp_vbox -> V + | Pp_hovbox -> HoV + | Pp_hvbox -> HV + | Pp_box -> B + + let rec compose_acc acc doc = + let open CamlinternalFormat in + match acc with + | CamlinternalFormat.Acc_formatting_lit (p, f) -> + doc |> compose_acc p |> output_formatting_lit f + | Acc_formatting_gen (p, Acc_open_tag acc') -> + let tag = to_string (compose_acc acc' empty) in + let doc = compose_acc p doc in + doc |> open_tag (Format.String_tag tag) + | Acc_formatting_gen (p, Acc_open_box acc') -> + let doc = compose_acc p doc in + let box = to_string (compose_acc acc' empty) in + let (indent, bty) = CamlinternalFormat.open_box_of_string box in + doc |> open_box (box_type bty) indent + | Acc_string_literal (p, s) + | Acc_data_string (p, s) -> + doc |> compose_acc p |> string s + | Acc_char_literal (p, c) + | Acc_data_char (p, c) -> doc |> compose_acc p |> char c + | Acc_delay (p, f) -> doc |> compose_acc p |> f + | Acc_flush p -> doc |> compose_acc p |> flush + | Acc_invalid_arg (_p, msg) -> invalid_arg msg; + | End_of_acc -> doc + + let kprintf k (CamlinternalFormatBasics.Format (fmt, _)) = + CamlinternalFormat.make_printf + (fun acc doc -> doc |> compose_acc acc |> k ) + End_of_acc fmt + + let printf doc = kprintf Fun.id doc + let kmsg k (CamlinternalFormatBasics.Format (fmt, _)) = + CamlinternalFormat.make_printf + (fun acc -> k (compose_acc acc empty)) + End_of_acc fmt + + let msg fmt = kmsg Fun.id fmt + + + (* In Merlin, it makes no sense to try to align parts of the error messages *) + let ralign_tag = Format.String_tag "ralign2" + + let rec split_on_open_tag tag rbefore = function + | [] -> rbefore, [] + | Open_tag t :: rest when t = tag -> + rbefore, rest + | elt :: rest -> + split_on_open_tag tag (elt::rbefore) rest + + let rec split_on_close opened rbefore = function + | [] -> rbefore, [] + | Open_tag _ as elt :: rest -> + split_on_close (opened+1) (elt::rbefore) rest + | Close_tag as elt :: rest -> + if opened = 0 then rbefore, rest + else split_on_close (opened-1) (elt::rbefore) rest + | elt :: rest -> + split_on_close opened (elt::rbefore) rest + + let rec approx_len acc = function + | [] -> Some acc + | Text x :: r-> + let len = String.length x in + approx_len (acc + len) r + | With_size n :: Text _ :: r -> approx_len (acc + n) r + | (Open_box _ | Close_box | Open_tag _ | Close_tag + | Open_tbox | Close_tbox | Set_tab | With_size _ + ) :: r -> + approx_len acc r + | (Tab_break _ | Break _ | Simple_break _ | Flush _ | Newline | If_newline + | Deprecated _ ) :: _ -> + None + + type ralign_split = { + close_pos:int; + before: element list; + mid: element list; + after: element list; + } + + let split_ralign (doc, shift) = + let l = to_list doc in + let before, rest = + split_on_open_tag ralign_tag [] l in + let mid, after = split_on_close 0 [] rest in + let len = Option.bind (approx_len 0 before) (fun n -> approx_len n mid) in + match len with + | None -> Error doc + | Some len -> + Ok { close_pos= shift + len; before; mid; after } + + let align_doc max_pos r = + let aligned_before = + let before = Open_tag ralign_tag :: r.before in + if r.close_pos >= max_pos then before + else Text (String.make (max_pos - r.close_pos) ' ') :: before + in + let mid_to_start = Close_tag :: r.mid @ aligned_before in + { rev = List.rev_append r.after mid_to_start } + + let align_prefix l = + let l = List.map split_ralign l in + let max_pos = + List.fold_left (fun mx r -> + match r with + | Ok r -> max mx r.close_pos + | Error _ -> mx + ) 0 l + in + List.map (Result.fold ~ok:(align_doc max_pos) ~error:Fun.id) l + + let align_prefix2 x y = match align_prefix [x;y] with + | [x;y] -> x, y + | _ -> assert false + +end + +(** Compatibility interface *) + +type doc = Doc.t +type t = doc +type formatter = doc ref +type 'a printer = formatter -> 'a -> unit + +let formatter d = d + +(** {1 Primitive functions }*) + +let pp_print_string ppf s = ppf := Doc.string s !ppf + +let pp_print_as ppf size s = + ppf := !ppf |> Doc.with_size size |> Doc.string s + +let pp_print_substring ~pos ~len ppf s = + ppf := Doc.string (String.sub s pos len) !ppf + +let pp_print_substring_as ~pos ~len ppf size s = + ppf := + !ppf + |> Doc.with_size size + |> Doc.string (String.sub s pos len) + +let pp_print_bytes ppf s = ppf := Doc.string (Bytes.to_string s) !ppf +let pp_print_text ppf s = ppf := Doc.text s !ppf +let pp_print_char ppf c = ppf := Doc.char c !ppf +let pp_print_int ppf c = ppf := Doc.int c !ppf +let pp_print_float ppf f = ppf := Doc.float f !ppf +let pp_print_bool ppf b = ppf := Doc.bool b !ppf +let pp_print_nothing _ _ = () + +let pp_close_box ppf () = ppf := Doc.close_box !ppf +let pp_close_stag ppf () = ppf := Doc.close_tag !ppf + +let pp_print_break ppf spaces indent = ppf := Doc.break ~spaces ~indent !ppf + +let pp_print_custom_break ppf ~fits ~breaks = + ppf := Doc.custom_break ~fits ~breaks !ppf + +let pp_print_space ppf () = pp_print_break ppf 1 0 +let pp_print_cut ppf () = pp_print_break ppf 0 0 + +let pp_print_flush ppf () = ppf := Doc.flush !ppf +let pp_force_newline ppf () = ppf := Doc.force_newline !ppf +let pp_print_newline ppf () = ppf := Doc.force_stop !ppf +let pp_print_if_newline ppf () =ppf := Doc.if_newline !ppf + +let pp_open_stag ppf stag = ppf := !ppf |> Doc.open_tag stag + +let pp_open_box_gen ppf indent bxty = + let box_type = Doc.box_type bxty in + ppf := !ppf |> Doc.open_box box_type indent + +let pp_open_box ppf indent = pp_open_box_gen ppf indent Pp_box + + +let pp_open_tbox ppf () = ppf := !ppf |> Doc.open_tbox + +let pp_close_tbox ppf () = ppf := !ppf |> Doc.close_tbox + +let pp_set_tab ppf () = ppf := !ppf |> Doc.set_tab + +let pp_print_tab ppf () = ppf := !ppf |> Doc.tab + +let pp_print_tbreak ppf width offset = + ppf := !ppf |> Doc.tab_break ~width ~offset + +let pp_doc ppf doc = ppf := Doc.append !ppf doc + +module Driver = struct + (* Interpret a formatting entity on a formatter. *) + let output_formatting_lit ppf + (fmting_lit:CamlinternalFormatBasics.formatting_lit) + = match fmting_lit with + | Close_box -> pp_close_box ppf () + | Close_tag -> pp_close_stag ppf () + | Break (_, width, offset) -> pp_print_break ppf width offset + | FFlush -> pp_print_flush ppf () + | Force_newline -> pp_force_newline ppf () + | Flush_newline -> pp_print_newline ppf () + | Magic_size (_, _) -> () + | Escaped_at -> pp_print_char ppf '@' + | Escaped_percent -> pp_print_char ppf '%' + | Scan_indic c -> pp_print_char ppf '@'; pp_print_char ppf c + + + + let compute_tag output tag_acc = + let buf = Buffer.create 16 in + let buf_fmt = Format.formatter_of_buffer buf in + let ppf = ref Doc.empty in + output ppf tag_acc; + pp_print_flush ppf (); + Doc.format buf_fmt !ppf; + let len = Buffer.length buf in + if len < 2 then Buffer.contents buf + else Buffer.sub buf 1 (len - 2) + + (* Recursively output an "accumulator" containing a reversed list of + printing entities (string, char, flus, ...) in an output_stream. *) + (* Differ from Printf.output_acc by the interpretation of formatting. *) + (* Used as a continuation of CamlinternalFormat.make_printf. *) + let rec output_acc ppf (acc: _ CamlinternalFormat.acc) = + match acc with + | Acc_string_literal (Acc_formatting_lit (p, Magic_size (_, size)), s) + | Acc_data_string (Acc_formatting_lit (p, Magic_size (_, size)), s) -> + output_acc ppf p; + pp_print_as ppf size s; + | Acc_char_literal (Acc_formatting_lit (p, Magic_size (_, size)), c) + | Acc_data_char (Acc_formatting_lit (p, Magic_size (_, size)), c) -> + output_acc ppf p; + pp_print_as ppf size (String.make 1 c); + | Acc_formatting_lit (p, f) -> + output_acc ppf p; + output_formatting_lit ppf f; + | Acc_formatting_gen (p, Acc_open_tag acc') -> + output_acc ppf p; + pp_open_stag ppf (Format.String_tag (compute_tag output_acc acc')) + | Acc_formatting_gen (p, Acc_open_box acc') -> + output_acc ppf p; + let (indent, bty) = + let box_info = compute_tag output_acc acc' in + CamlinternalFormat.open_box_of_string box_info + in + pp_open_box_gen ppf indent bty + | Acc_string_literal (p, s) + | Acc_data_string (p, s) -> output_acc ppf p; pp_print_string ppf s; + | Acc_char_literal (p, c) + | Acc_data_char (p, c) -> output_acc ppf p; pp_print_char ppf c; + | Acc_delay (p, f) -> output_acc ppf p; f ppf; + | Acc_flush p -> output_acc ppf p; pp_print_flush ppf (); + | Acc_invalid_arg (p, msg) -> output_acc ppf p; invalid_arg msg; + | End_of_acc -> () +end + +let kfprintf k ppf (CamlinternalFormatBasics.Format (fmt, _)) = + CamlinternalFormat.make_printf + (fun acc -> Driver.output_acc ppf acc; k ppf) + End_of_acc fmt +let fprintf doc fmt = kfprintf ignore doc fmt + + +let kdprintf k (CamlinternalFormatBasics.Format (fmt, _)) = + CamlinternalFormat.make_printf + (fun acc -> k (fun ppf -> Driver.output_acc ppf acc)) + End_of_acc fmt + +let dprintf fmt = kdprintf (fun i -> i) fmt + +let doc_printf fmt = + let ppf = ref Doc.empty in + kfprintf (fun _ -> let doc = !ppf in ppf := Doc.empty; doc) ppf fmt + +let kdoc_printf k fmt = + let ppf = ref Doc.empty in + kfprintf (fun ppf -> + let doc = !ppf in + ppf := Doc.empty; + k doc + ) + ppf fmt + +let doc_printer f x doc = + let r = ref doc in + f r x; + !r + +type 'a format_printer = Format.formatter -> 'a -> unit + +let format_printer f ppf x = + let doc = doc_printer f x Doc.empty in + Doc.format ppf doc +let compat = format_printer +let compat1 f p1 = compat (f p1) +let compat2 f p1 p2 = compat (f p1 p2) + +let kasprintf k fmt = + kdoc_printf (fun doc -> k (Format.asprintf "%a" Doc.format doc)) fmt +let asprintf fmt = kasprintf Fun.id fmt + +let pp_print_iter ?(pp_sep=pp_print_cut) iter elt ppf c = + let sep = doc_printer pp_sep () in + ppf:= Doc.iter ~sep ~iter (doc_printer elt) c !ppf + +let pp_print_list ?(pp_sep=pp_print_cut) elt ppf l = + ppf := Doc.list ~sep:(doc_printer pp_sep ()) (doc_printer elt) l !ppf + +let pp_print_array ?pp_sep elt ppf a = + pp_print_iter ?pp_sep Array.iter elt ppf a +let pp_print_seq ?pp_sep elt ppf s = pp_print_iter ?pp_sep Seq.iter elt ppf s + +let pp_print_option ?(none=fun _ () -> ()) elt ppf o = + ppf := Doc.option ~none:(doc_printer none ()) (doc_printer elt) o !ppf + +let pp_print_result ~ok ~error ppf r = + ppf := Doc.result ~ok:(doc_printer ok) ~error:(doc_printer error) r !ppf + +let pp_print_either ~left ~right ppf e = + ppf := Doc.either ~left:(doc_printer left) ~right:(doc_printer right) e !ppf + +let comma ppf () = fprintf ppf ",@ " +let semicolon ppf () = fprintf ppf ";@ " + +let pp_two_columns ?(sep = "|") ?max_lines ppf (lines: (string * string) list) = + let left_column_size = + List.fold_left (fun acc (s, _) -> Int.max acc (String.length s)) 0 lines in + let lines_nb = List.length lines in + let ellipsed_first, ellipsed_last = + match max_lines with + | Some max_lines when lines_nb > max_lines -> + let printed_lines = max_lines - 1 in (* the ellipsis uses one line *) + let lines_before = printed_lines / 2 + printed_lines mod 2 in + let lines_after = printed_lines / 2 in + (lines_before, lines_nb - lines_after - 1) + | _ -> (-1, -1) + in + fprintf ppf "@["; + List.iteri (fun k (line_l, line_r) -> + if k = ellipsed_first then fprintf ppf "...@,"; + if ellipsed_first <= k && k <= ellipsed_last then () + else fprintf ppf "%*s %s %s@," left_column_size line_l sep line_r + ) lines; + fprintf ppf "@]" + +let deprecated_printer pr ppf = ppf := Doc.add !ppf (Doc.Deprecated pr) +let deprecated pr ppf x = + ppf := Doc.add !ppf (Doc.Deprecated (fun ppf -> pr ppf x)) +let deprecated1 pr p1 ppf x = + ppf := Doc.add !ppf (Doc.Deprecated (fun ppf -> pr p1 ppf x)) diff --git a/ocamlmerlin_mlx/utils/format_doc.mli b/ocamlmerlin_mlx/utils/format_doc.mli new file mode 100644 index 0000000..32aaf7c --- /dev/null +++ b/ocamlmerlin_mlx/utils/format_doc.mli @@ -0,0 +1,309 @@ +# 1 "merlin/src/utils/format_doc.mli" +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Florian Angeletti, projet Cambium, Inria Paris *) +(* *) +(* Copyright 2024 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(** Composable document for the {!Format} formatting engine. *) + +(** This module introduces a pure and immutable document type which represents a + sequence of formatting instructions to be printed by a formatting engine at + later point. At the same time, it also provides format string interpreter + which produces this document type from format string and their associated + printers. + + The module is designed to be source compatible with code defining format + printers: replacing `Format` by `Format_doc` in your code will convert + `Format` printers to `Format_doc` printers. +*) + +(** Definitions and immutable API for composing documents *) +module Doc: sig + + (** {2 Type definitions and core functions }*) + + (** Format box types *) + type box_type = + | H + | V + | HV + | HoV + | B + + type stag = Format.stag + + (** Base formatting instruction recognized by {!Format} *) + type element = + | Text of string + | With_size of int + | Open_box of { kind: box_type ; indent:int } + | Close_box + | Open_tag of Format.stag + | Close_tag + | Open_tbox + | Tab_break of { width : int; offset : int } + | Set_tab + | Close_tbox + | Simple_break of { spaces : int; indent : int } + | Break of { fits : string * int * string as 'a; breaks : 'a } + | Flush of { newline:bool } + | Newline + | If_newline + + | Deprecated of (Format.formatter -> unit) + (** Escape hatch: a {!Format} printer used to provide backward-compatibility + for user-defined printer (from the [#install_printer] toplevel directive + for instance). *) + + (** Immutable document type*) + type t + + type ('a,'b) fmt = ('a, t, t,'b) format4 + + type printer0 = t -> t + type 'a printer = 'a -> printer0 + + + (** Empty document *) + val empty: t + + (** [format ppf doc] sends the format instruction of [doc] to the Format's + formatter [doc]. *) + val format: Format.formatter -> t -> unit + + (** Fold over a document as a sequence of instructions *) + val fold: ('acc -> element -> 'acc) -> 'acc -> t -> 'acc + + (** {!msg} and {!kmsg} produce a document from a format string and its + argument *) + val msg: ('a,t) fmt -> 'a + val kmsg: (t -> 'b) -> ('a,'b) fmt -> 'a + + (** {!printf} and {!kprintf} produce a printer from a format string and its + argument*) + val printf: ('a, printer0) fmt -> 'a + val kprintf: (t -> 'b) -> ('a, t -> 'b) fmt -> 'a + + (** The functions below mirror {!Format} printers, without the [pp_print_] + prefix naming convention *) + val open_box: box_type -> int -> printer0 + val close_box: printer0 + + val text: string printer + val string: string printer + val bytes: bytes printer + val with_size: int printer + + val int: int printer + val float: float printer + val char: char printer + val bool: bool printer + + val space: printer0 + val cut: printer0 + val break: spaces:int -> indent:int -> printer0 + + val custom_break: + fits:(string * int * string as 'a) -> breaks:'a -> printer0 + val force_newline: printer0 + val if_newline: printer0 + + val flush: printer0 + val force_stop: printer0 + + val open_tbox: printer0 + val set_tab: printer0 + val tab: printer0 + val tab_break: width:int -> offset:int -> printer0 + val close_tbox: printer0 + + val open_tag: stag printer + val close_tag: printer0 + + val list: ?sep:printer0 -> 'a printer -> 'a list printer + val iter: + ?sep:printer0 -> iter:(('a -> unit) -> 'b -> unit) -> 'a printer + ->'b printer + val array: ?sep:printer0 -> 'a printer -> 'a array printer + val seq: ?sep:printer0 -> 'a printer -> 'a Seq.t printer + + val option: ?none:printer0 -> 'a printer -> 'a option printer + val result: ok:'a printer -> error:'e printer -> ('a,'e) result printer + val either: left:'a printer -> right:'b printer -> ('a,'b) Either.t printer + + (** {1 Alignment functions } *) + + (** Align the right side of one ["@{...@}"] tag box by inserting + spaces at the beginning of boxes. Those function do nothing if the tag box + appears after a break hint. *) + val align_prefix: (t * int) list -> t list + val align_prefix2: (t * int) -> (t * int) -> t * t + +end + +(** {1 Compatibility API} *) + +(** The functions and types below provides source compatibility with format +printers and conversion function from {!Format_doc} printers to {!Format} +printers. The reverse direction is implemented using an escape hatch in the +formatting instruction and should only be used to preserve backward +compatibility. *) + +type doc = Doc.t +type t = doc +type formatter +type 'a printer = formatter -> 'a -> unit + +val formatter: doc ref -> formatter +(** [formatter rdoc] creates a {!formatter} that updates the [rdoc] reference *) + +(** Translate a {!Format_doc} printer to a {!Format} one. *) +type 'a format_printer = Format.formatter -> 'a -> unit +val compat: 'a printer -> 'a format_printer +val compat1: ('p1 -> 'a printer) -> ('p1 -> 'a format_printer) +val compat2: ('p1 -> 'p2 -> 'a printer) -> ('p1 -> 'p2 -> 'a format_printer) + +(** If necessary, embbed a {!Format} printer inside a formatting instruction + stream. This breaks every guarantees provided by {!Format_doc}. *) +val deprecated_printer: (Format.formatter -> unit) -> formatter -> unit +val deprecated: 'a format_printer -> 'a printer +val deprecated1: ('p1 -> 'a format_printer) -> ('p1 -> 'a printer) + + +(** {2 Format string interpreters }*) + +val fprintf : formatter -> ('a, formatter,unit) format -> 'a +val kfprintf: + (formatter -> 'a) -> formatter -> + ('b, formatter, unit, 'a) format4 -> 'b + +val asprintf : ('a, formatter, unit, string) format4 -> 'a +val kasprintf : (string -> 'a) -> ('b, formatter, unit, 'a) format4 -> 'b + + +val dprintf : ('a, formatter, unit, formatter -> unit) format4 -> 'a +val kdprintf: + ((formatter -> unit) -> 'a) -> + ('b, formatter, unit, 'a) format4 -> 'b + +(** {!doc_printf} and {!kdoc_printf} creates a document directly *) +val doc_printf: ('a, formatter, unit, doc) format4 -> 'a +val kdoc_printf: (doc -> 'r) -> ('a, formatter, unit, 'r) format4 -> 'a + +(** {2 Compatibility with {!Doc} }*) + +val doc_printer: 'a printer -> 'a Doc.printer +val pp_doc: doc printer + +(** {2 Source compatibility with Format}*) + +(** {3 String printers } *) + +val pp_print_string: string printer +val pp_print_substring: pos:int -> len:int -> string printer +val pp_print_text: string printer +val pp_print_bytes: bytes printer + +val pp_print_as: formatter -> int -> string -> unit +val pp_print_substring_as: + pos:int -> len:int -> formatter -> int -> string -> unit + +(** {3 Primitive type printers }*) + +val pp_print_char: char printer +val pp_print_int: int printer +val pp_print_float: float printer +val pp_print_bool: bool printer +val pp_print_nothing: unit printer + +(** {3 Printer combinators }*) + +val pp_print_iter: + ?pp_sep:unit printer -> (('a -> unit) -> 'b -> unit) -> + 'a printer -> 'b printer + +val pp_print_list: ?pp_sep:unit printer -> 'a printer -> 'a list printer +val pp_print_array: ?pp_sep:unit printer -> 'a printer -> 'a array printer +val pp_print_seq: ?pp_sep:unit printer -> 'a printer -> 'a Seq.t printer + +val pp_print_option: ?none:unit printer -> 'a printer -> 'a option printer +val pp_print_result: ok:'a printer -> error:'e printer -> ('a,'e) result printer +val pp_print_either: + left:'a printer -> right:'b printer -> ('a,'b) Either.t printer + + +(** {3 Boxes and tags }*) + +val pp_open_stag: Format.stag printer +val pp_close_stag: unit printer + +val pp_open_box: int printer +val pp_close_box: unit printer + +(** {3 Break hints} *) + +val pp_print_space: unit printer +val pp_print_cut: unit printer +val pp_print_break: formatter -> int -> int -> unit +val pp_print_custom_break: + formatter -> fits:(string * int * string as 'c) -> breaks:'c -> unit + +(** {3 Tabulations }*) + +val pp_open_tbox: unit printer +val pp_close_tbox: unit printer +val pp_set_tab: unit printer +val pp_print_tab: unit printer +val pp_print_tbreak: formatter -> int -> int -> unit + +(** {3 Newlines and flushing }*) + +val pp_print_if_newline: unit printer +val pp_force_newline: unit printer +val pp_print_flush: unit printer +val pp_print_newline: unit printer + +(** {1 Compiler specific functions }*) + +(** {2 Separators }*) + +val comma: unit printer +val semicolon: unit printer + +(** {2 Compiler output} *) + +val pp_two_columns : + ?sep:string -> ?max_lines:int -> + formatter -> (string * string) list -> unit +(** [pp_two_columns ?sep ?max_lines ppf l] prints the lines in [l] as two + columns separated by [sep] ("|" by default). [max_lines] can be used to + indicate a maximum number of lines to print -- an ellipsis gets inserted at + the middle if the input has too many lines. + + Example: + + {v pp_two_columns ~max_lines:3 Format.std_formatter [ + "abc", "hello"; + "def", "zzz"; + "a" , "bllbl"; + "bb" , "dddddd"; + ] v} + + prints + + {v + abc | hello + ... + bb | dddddd + v} +*) diff --git a/ocamlmerlin_mlx/utils/misc.ml b/ocamlmerlin_mlx/utils/misc.ml index 4cda4bb..c2d2a4f 100644 --- a/ocamlmerlin_mlx/utils/misc.ml +++ b/ocamlmerlin_mlx/utils/misc.ml @@ -84,10 +84,258 @@ let protect_refs = | x -> set_refs backup; x | exception e -> set_refs backup; raise e +let repeated_label l = + let module Set = String.Set in + let rec go s = function + | [] -> None + | (None, _) :: l -> go s l + | (Some lbl, _) :: l -> + if Set.mem lbl s then Some lbl else go (Set.add lbl s) l + in + go Set.empty l + +(** {1 Minimal support for Unicode characters in identifiers} *) + +module Utf8_lexeme = struct + + type t = string + + (* Non-ASCII letters that are allowed in identifiers (currently: Latin-9) *) + + type case = Upper of Uchar.t | Lower of Uchar.t + let known_chars : (Uchar.t, case) Hashtbl.t = Hashtbl.create 32 + + let _ = + List.iter + ~f:(fun (upper, lower) -> + let upper = Uchar.of_int upper and lower = Uchar.of_int lower in + Hashtbl.add known_chars upper (Upper lower); + Hashtbl.add known_chars lower (Lower upper)) + [ + (0xc0, 0xe0); (* À, à *) (0xc1, 0xe1); (* Á, á *) + (0xc2, 0xe2); (* Â, â *) (0xc3, 0xe3); (* Ã, ã *) + (0xc4, 0xe4); (* Ä, ä *) (0xc5, 0xe5); (* Å, å *) + (0xc6, 0xe6); (* Æ, æ *) (0xc7, 0xe7); (* Ç, ç *) + (0xc8, 0xe8); (* È, è *) (0xc9, 0xe9); (* É, é *) + (0xca, 0xea); (* Ê, ê *) (0xcb, 0xeb); (* Ë, ë *) + (0xcc, 0xec); (* Ì, ì *) (0xcd, 0xed); (* Í, í *) + (0xce, 0xee); (* Î, î *) (0xcf, 0xef); (* Ï, ï *) + (0xd0, 0xf0); (* Ð, ð *) (0xd1, 0xf1); (* Ñ, ñ *) + (0xd2, 0xf2); (* Ò, ò *) (0xd3, 0xf3); (* Ó, ó *) + (0xd4, 0xf4); (* Ô, ô *) (0xd5, 0xf5); (* Õ, õ *) + (0xd6, 0xf6); (* Ö, ö *) (0xd8, 0xf8); (* Ø, ø *) + (0xd9, 0xf9); (* Ù, ù *) (0xda, 0xfa); (* Ú, ú *) + (0xdb, 0xfb); (* Û, û *) (0xdc, 0xfc); (* Ü, ü *) + (0xdd, 0xfd); (* Ý, ý *) (0xde, 0xfe); (* Þ, þ *) + (0x160, 0x161); (* Š, š *) (0x17d, 0x17e); (* Ž, ž *) + (0x152, 0x153); (* Œ, œ *) (0x178, 0xff); (* Ÿ, ÿ *) + (0x1e9e, 0xdf); (* ẞ, ß *) + ] + + (* NFD to NFC conversion table for the letters above *) + + let known_pairs : (Uchar.t * Uchar.t, Uchar.t) Hashtbl.t = Hashtbl.create 32 + + let _ = + List.iter + ~f:(fun (c1, n2, n) -> + Hashtbl.add known_pairs + (Uchar.of_char c1, Uchar.of_int n2) (Uchar.of_int n)) + [ + ('A', 0x300, 0xc0); (* À *) ('A', 0x301, 0xc1); (* Á *) + ('A', 0x302, 0xc2); (*  *) ('A', 0x303, 0xc3); (* à *) + ('A', 0x308, 0xc4); (* Ä *) ('A', 0x30a, 0xc5); (* Å *) + ('C', 0x327, 0xc7); (* Ç *) ('E', 0x300, 0xc8); (* È *) + ('E', 0x301, 0xc9); (* É *) ('E', 0x302, 0xca); (* Ê *) + ('E', 0x308, 0xcb); (* Ë *) ('I', 0x300, 0xcc); (* Ì *) + ('I', 0x301, 0xcd); (* Í *) ('I', 0x302, 0xce); (* Î *) + ('I', 0x308, 0xcf); (* Ï *) ('N', 0x303, 0xd1); (* Ñ *) + ('O', 0x300, 0xd2); (* Ò *) ('O', 0x301, 0xd3); (* Ó *) + ('O', 0x302, 0xd4); (* Ô *) ('O', 0x303, 0xd5); (* Õ *) + ('O', 0x308, 0xd6); (* Ö *) + ('U', 0x300, 0xd9); (* Ù *) ('U', 0x301, 0xda); (* Ú *) + ('U', 0x302, 0xdb); (* Û *) ('U', 0x308, 0xdc); (* Ü *) + ('Y', 0x301, 0xdd); (* Ý *) ('Y', 0x308, 0x178); (* Ÿ *) + ('S', 0x30c, 0x160); (* Š *) ('Z', 0x30c, 0x17d); (* Ž *) + ('a', 0x300, 0xe0); (* à *) ('a', 0x301, 0xe1); (* á *) + ('a', 0x302, 0xe2); (* â *) ('a', 0x303, 0xe3); (* ã *) + ('a', 0x308, 0xe4); (* ä *) ('a', 0x30a, 0xe5); (* å *) + ('c', 0x327, 0xe7); (* ç *) ('e', 0x300, 0xe8); (* è *) + ('e', 0x301, 0xe9); (* é *) ('e', 0x302, 0xea); (* ê *) + ('e', 0x308, 0xeb); (* ë *) ('i', 0x300, 0xec); (* ì *) + ('i', 0x301, 0xed); (* í *) ('i', 0x302, 0xee); (* î *) + ('i', 0x308, 0xef); (* ï *) ('n', 0x303, 0xf1); (* ñ *) + ('o', 0x300, 0xf2); (* ò *) ('o', 0x301, 0xf3); (* ó *) + ('o', 0x302, 0xf4); (* ô *) ('o', 0x303, 0xf5); (* õ *) + ('o', 0x308, 0xf6); (* ö *) + ('u', 0x300, 0xf9); (* ù *) ('u', 0x301, 0xfa); (* ú *) + ('u', 0x302, 0xfb); (* û *) ('u', 0x308, 0xfc); (* ü *) + ('y', 0x301, 0xfd); (* ý *) ('y', 0x308, 0xff); (* ÿ *) + ('s', 0x30c, 0x161); (* š *) ('z', 0x30c, 0x17e); (* ž *) + ] + + let normalize_generic ~keep_ascii transform s = + let rec norm check buf prev i = + if i >= String.length s then begin + Buffer.add_utf_8_uchar buf (transform prev) + end else begin + let d = String.get_utf_8_uchar s i in + let u = Uchar.utf_decode_uchar d in + check d u; + let i' = i + Uchar.utf_decode_length d in + match Hashtbl.find_opt known_pairs (prev, u) with + | Some u' -> + norm check buf u' i' + | None -> + Buffer.add_utf_8_uchar buf (transform prev); + norm check buf u i' + end in + let ascii_limit = 128 in + if s = "" + || keep_ascii && String.for_all (fun x -> Char.code x < ascii_limit) s + then Ok s + else + let buf = Buffer.create (String.length s) in + let valid = ref true in + let check d u = + valid := !valid && Uchar.utf_decode_is_valid d && u <> Uchar.rep + in + let d = String.get_utf_8_uchar s 0 in + let u = Uchar.utf_decode_uchar d in + check d u; + norm check buf u (Uchar.utf_decode_length d); + let contents = Buffer.contents buf in + if !valid then + Ok contents + else + Error contents + + let normalize s = + normalize_generic ~keep_ascii:true (fun u -> u) s + + (* Capitalization *) + + let uchar_is_uppercase u = + let c = Uchar.to_int u in + if c < 0x80 then c >= 65 && c <= 90 else + match Hashtbl.find_opt known_chars u with + | Some(Upper _) -> true + | _ -> false + + let uchar_lowercase u = + let c = Uchar.to_int u in + if c < 0x80 then + if c >= 65 && c <= 90 then Uchar.of_int (c + 32) else u + else + match Hashtbl.find_opt known_chars u with + | Some(Upper u') -> u' + | _ -> u + + let uchar_uppercase u = + let c = Uchar.to_int u in + if c < 0x80 then + if c >= 97 && c <= 122 then Uchar.of_int (c - 32) else u + else + match Hashtbl.find_opt known_chars u with + | Some(Lower u') -> u' + | _ -> u + + let capitalize s = + let first = ref true in + normalize_generic ~keep_ascii:false + (fun u -> if !first then (first := false; uchar_uppercase u) else u) + s + + let uncapitalize s = + let first = ref true in + normalize_generic ~keep_ascii:false + (fun u -> if !first then (first := false; uchar_lowercase u) else u) + s + + let is_capitalized s = + s <> "" && + uchar_is_uppercase (Uchar.utf_decode_uchar (String.get_utf_8_uchar s 0)) + + (* Characters allowed in identifiers after normalization is applied. + Currently: + - ASCII letters, underscore + - Latin-9 letters, represented in NFC + - ASCII digits, single quote (but not as first character) + - dot if [with_dot] = true + *) + let uchar_valid_in_identifier ~with_dot u = + let c = Uchar.to_int u in + if c < 0x80 then + c >= 97 (* a *) && c <= 122 (* z *) + || c >= 65 (* A *) && c <= 90 (* Z *) + || c >= 48 (* 0 *) && c <= 57 (* 9 *) + || c = 95 (* underscore *) + || c = 39 (* single quote *) + || (with_dot && c = 46) (* dot *) + else + Hashtbl.mem known_chars u + + let uchar_not_identifier_start u = + let c = Uchar.to_int u in + c >= 48 (* 0 *) && c <= 57 (* 9 *) + || c = 39 (* single quote *) + + (* Check whether a normalized string is a valid OCaml identifier. *) + + type validation_result = + | Valid + | Invalid_character of Uchar.t (** Character not allowed *) + | Invalid_beginning of Uchar.t (** Character not allowed as first char *) + + let validate_identifier ?(with_dot=false) s = + let rec check i = + if i >= String.length s then Valid else begin + let d = String.get_utf_8_uchar s i in + let u = Uchar.utf_decode_uchar d in + let i' = i + Uchar.utf_decode_length d in + if not (uchar_valid_in_identifier ~with_dot u) then + Invalid_character u + else if i = 0 && uchar_not_identifier_start u then + Invalid_beginning u + else + check i' + end + in check 0 + + let is_valid_identifier s = + validate_identifier s = Valid + + let starts_like_a_valid_identifier s = + s <> "" && + (let u = Uchar.utf_decode_uchar (String.get_utf_8_uchar s 0) in + uchar_valid_in_identifier ~with_dot:false u + && not (uchar_not_identifier_start u)) + + let is_lowercase s = + let rec is_lowercase_at len s n = + if n >= len then true + else + let d = String.get_utf_8_uchar s n in + let u = Uchar.utf_decode_uchar d in + (uchar_valid_in_identifier ~with_dot:false u) + && not (uchar_is_uppercase u) + && is_lowercase_at len s (n+Uchar.utf_decode_length d) + in + is_lowercase_at (String.length s) s 0 +end + + (* List functions *) let map_end f l1 l2 = List.map_end ~f l1 l2 +let rev_map_end f l1 l2 = + let rec rmap_f accu = function + | [] -> accu + | hd::tl -> rmap_f (f hd :: accu) tl + in + rmap_f l2 l1 + let rec map_left_right f = function [] -> [] | hd::tl -> let res = f hd in res :: map_left_right f tl @@ -118,7 +366,7 @@ let remove_file filename = then Sys.remove filename with Sys_error _msg -> () -let rec split_path path acc = +let rec split_path_and_prepend path acc = match Filename.dirname path with | dir when dir = path -> let is_letter c = (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') in @@ -135,7 +383,9 @@ let rec split_path path acc = else dir in dir :: acc - | dir -> split_path dir (Filename.basename path :: acc) + | dir -> split_path_and_prepend dir (Filename.basename path :: acc) + +let split_path path = split_path_and_prepend path [] (* Deal with case insensitive FS *) @@ -174,9 +424,9 @@ let exact_file_exists ~dirname ~basename = let canonicalize_filename ?cwd path = let parts = - match split_path path [] with + match split_path path with | dot :: rest when dot = Filename.current_dir_name -> - split_path (match cwd with None -> Sys.getcwd () | Some c -> c) rest + split_path_and_prepend (match cwd with None -> Sys.getcwd () | Some c -> c) rest | parts -> parts in let goup path = function @@ -223,7 +473,7 @@ let rec expand_glob ~filter acc root = function Array.fold_left process acc items let expand_glob ?(filter=fun _ -> true) path acc = - match split_path path [] with + match split_path path with | [] -> acc | root :: subs -> let patterns = List.map ~f:Glob.compile_pattern subs in @@ -263,12 +513,14 @@ let find_in_path_rel path name = else try_dir rem in try_dir path -let find_in_path_uncap ?(fallback="") path name = +let normalized_unit_filename = String.uncapitalize_ascii + +let find_in_path_normalized ?(fallback="") path name = let has_fallback = fallback <> "" in canonicalize_filename begin - let uname = String.uncapitalize name in - let ufallback = String.uncapitalize fallback in + let uname = normalized_unit_filename name in + let ufallback = normalized_unit_filename fallback in List.find_map path ~f:(fun dirname -> if exact_file_exists ~dirname ~basename:uname then Some (Filename.concat dirname uname) @@ -382,6 +634,12 @@ let no_overflow_mul a b = let no_overflow_lsl a k = 0 <= k && k < Sys.word_size - 1 && min_int asr k <= a && a <= max_int asr k +let letter_of_int n = + let letter = String.make 1 (Char.chr (Char.code 'a' + n mod 26)) in + let num = n / 26 in + if num = 0 then letter + else letter ^ Int.to_string num + module Int_literal_converter = struct (* To convert integer literals, allowing max_int + 1 (PR#4210) *) let cvt_int_aux str neg of_string = @@ -512,149 +770,6 @@ let snd4 (_,x,_, _) = x let thd4 (_,_,x,_) = x let for4 (_,_,_,x) = x - -module LongString = struct - type t = bytes array - - let create str_size = - let tbl_size = str_size / Sys.max_string_length + 1 in - let tbl = Array.make tbl_size Bytes.empty in - for i = 0 to tbl_size - 2 do - tbl.(i) <- Bytes.create Sys.max_string_length; - done; - tbl.(tbl_size - 1) <- Bytes.create (str_size mod Sys.max_string_length); - tbl - - let length tbl = - let tbl_size = Array.length tbl in - Sys.max_string_length * (tbl_size - 1) + Bytes.length tbl.(tbl_size - 1) - - let get tbl ind = - Bytes.get tbl.(ind / Sys.max_string_length) (ind mod Sys.max_string_length) - - let set tbl ind c = - Bytes.set tbl.(ind / Sys.max_string_length) (ind mod Sys.max_string_length) - c - - let blit src srcoff dst dstoff len = - for i = 0 to len - 1 do - set dst (dstoff + i) (get src (srcoff + i)) - done - - let output oc tbl pos len = - for i = pos to pos + len - 1 do - output_char oc (get tbl i) - done - - let unsafe_blit_to_bytes src srcoff dst dstoff len = - for i = 0 to len - 1 do - Bytes.unsafe_set dst (dstoff + i) (get src (srcoff + i)) - done - - let input_bytes ic len = - let tbl = create len in - Array.iter (fun str -> really_input ic str 0 (Bytes.length str)) tbl; - tbl -end - -let file_contents filename = - let ic = open_in filename in - try - let str = Bytes.create 1024 in - let buf = Buffer.create 1024 in - let rec loop () = - match input ic str 0 1024 with - | 0 -> () - | n -> - Buffer.add_subbytes buf str 0 n; - loop () - in - loop (); - close_in_noerr ic; - Buffer.contents buf - with exn -> - close_in_noerr ic; - raise exn - -let edit_distance a b cutoff = - let la, lb = String.length a, String.length b in - let cutoff = - (* using max_int for cutoff would cause overflows in (i + cutoff + 1); - we bring it back to the (max la lb) worstcase *) - min (max la lb) cutoff in - if abs (la - lb) > cutoff then None - else begin - (* initialize with 'cutoff + 1' so that not-yet-written-to cases have - the worst possible cost; this is useful when computing the cost of - a case just at the boundary of the cutoff diagonal. *) - let m = Array.make_matrix (la + 1) (lb + 1) (cutoff + 1) in - m.(0).(0) <- 0; - for i = 1 to la do - m.(i).(0) <- i; - done; - for j = 1 to lb do - m.(0).(j) <- j; - done; - for i = 1 to la do - for j = max 1 (i - cutoff - 1) to min lb (i + cutoff + 1) do - let cost = if a.[i-1] = b.[j-1] then 0 else 1 in - let best = - (* insert, delete or substitute *) - min (1 + min m.(i-1).(j) m.(i).(j-1)) (m.(i-1).(j-1) + cost) - in - let best = - (* swap two adjacent letters; we use "cost" again in case of - a swap between two identical letters; this is slightly - redundant as this is a double-substitution case, but it - was done this way in most online implementations and - imitation has its virtues *) - if not (i > 1 && j > 1 && a.[i-1] = b.[j-2] && a.[i-2] = b.[j-1]) - then best - else min best (m.(i-2).(j-2) + cost) - in - m.(i).(j) <- best - done; - done; - let result = m.(la).(lb) in - if result > cutoff - then None - else Some result - end - -let spellcheck env name = - let cutoff = - match String.length name with - | 1 | 2 -> 0 - | 3 | 4 -> 1 - | 5 | 6 -> 2 - | _ -> 3 - in - let compare target acc head = - match edit_distance target head cutoff with - | None -> acc - | Some dist -> - let (best_choice, best_dist) = acc in - if dist < best_dist then ([head], dist) - else if dist = best_dist then (head :: best_choice, dist) - else acc - in - fst (List.fold_left ~f:(compare name) ~init:([], max_int) env) - -let did_you_mean ppf get_choices = - (* flush now to get the error report early, in the (unheard of) case - where the search in the get_choices function would take a bit of - time; in the worst case, the user has seen the error, she can - interrupt the process before the spell-checking terminates. *) - Format.fprintf ppf "@?"; - match get_choices () with - | [] -> () - | choices -> - let rest, last = split_last choices in - Format.fprintf ppf "@\n@{Hint@}: Did you mean %s%s%s?@?" - (String.concat ~sep:", " rest) - (if rest = [] then "" else " or ") - last - let cut_at s c = let pos = String.index s c in String.sub s ~pos:0 ~len:pos, @@ -668,8 +783,27 @@ let ordinal_suffix n = | 3 when not teen -> "rd" | _ -> "th" -(* Color handling *) +(* Color support handling *) module Color = struct + external isatty : out_channel -> bool = "caml_sys_isatty" + + (* reasonable heuristic on whether colors should be enabled *) + let should_enable_color () = + let term = try Sys.getenv "TERM" with Not_found -> "" in + term <> "dumb" + && term <> "" + && isatty stderr + + type setting = Auto | Always | Never + + let default_setting = Auto + let enabled = ref true + let is_enabled () = !enabled + +end + +(* Terminal styling handling *) +module Style = struct (* use ANSI color codes, see https://en.wikipedia.org/wiki/ANSI_escape_code *) type color = | Black @@ -713,19 +847,30 @@ module Color = struct type Format.stag += Style of style list + + type tag_style ={ + ansi: style list; + text_open:string; + text_close:string + } + type styles = { - error: style list; - warning: style list; - loc: style list; - hint:style list; + error: tag_style; + warning: tag_style; + loc: tag_style; + hint: tag_style; + inline_code: tag_style; } + let no_markup stl = { ansi = stl; text_close = ""; text_open = "" } + let default_styles = { - warning = [Bold; FG Magenta]; - error = [Bold; FG Red]; - loc = [Bold]; - hint = [Bold; FG Blue]; - } + warning = no_markup [Bold; FG Magenta]; + error = no_markup [Bold; FG Red]; + loc = no_markup [Bold]; + hint = no_markup [Bold; FG Blue]; + inline_code= no_markup [Bold] + } let cur_styles = ref default_styles let get_styles () = !cur_styles @@ -734,30 +879,39 @@ module Color = struct (* map a tag to a style, if the tag is known. @raise Not_found otherwise *) let style_of_tag s = match s with - | Format.String_tag "error" -> (!cur_styles).error - | Format.String_tag "warning" -> (!cur_styles).warning + | Format.String_tag "error" -> (!cur_styles).error + | Format.String_tag "warning" ->(!cur_styles).warning | Format.String_tag "loc" -> (!cur_styles).loc | Format.String_tag "hint" -> (!cur_styles).hint - | Style s -> s + | Format.String_tag "inline_code" -> (!cur_styles).inline_code + | Format.String_tag "ralign" -> no_markup [] + | Style s -> no_markup s | _ -> raise Not_found - let color_enabled = ref true + let as_inline_code printer ppf x = + let open Format_doc in + pp_open_stag ppf (Format.String_tag "inline_code"); + printer ppf x; + pp_close_stag ppf () + + let inline_code ppf s = as_inline_code Format_doc.pp_print_string ppf s + let hint ppf = Format_doc.fprintf ppf "@{Hint@}" (* either prints the tag of [s] or delegates to [or_else] *) let mark_open_tag ~or_else s = try let style = style_of_tag s in - if !color_enabled then ansi_of_style_l style else "" + if !Color.enabled then ansi_of_style_l style.ansi else style.text_open with Not_found -> or_else s let mark_close_tag ~or_else s = try - let _ = style_of_tag s in - if !color_enabled then ansi_of_style_l [Reset] else "" + let style = style_of_tag s in + if !Color.enabled then ansi_of_style_l [Reset] else style.text_close with Not_found -> or_else s - (* add color handling to formatter [ppf] *) - let set_color_tag_handling ppf = + (* add tag handling to formatter [ppf] *) + let set_tag_handling ppf = let open Format in let functions = pp_get_formatter_stag_functions ppf () in let functions' = {functions with @@ -768,43 +922,133 @@ module Color = struct pp_set_formatter_stag_functions ppf functions'; () - external isatty : out_channel -> bool = "caml_sys_isatty" - - (* reasonable heuristic on whether colors should be enabled *) - let should_enable_color () = - let term = try Sys.getenv "TERM" with Not_found -> "" in - term <> "dumb" - && term <> "" - && isatty stderr - - type setting = Auto | Always | Never - - let default_setting = Auto - let setup = let first = ref true in (* initialize only once *) let formatter_l = [Format.std_formatter; Format.err_formatter; Format.str_formatter] in let enable_color = function - | Auto -> should_enable_color () - | Always -> true - | Never -> false + | Color.Auto -> Color.should_enable_color () + | Color.Always -> true + | Color.Never -> false in fun o -> if !first then ( first := false; Format.set_mark_tags true; - List.iter ~f:set_color_tag_handling formatter_l; - color_enabled := (match o with + List.iter ~f:set_tag_handling formatter_l; + Color.enabled := (match o with | Some s -> enable_color s - | None -> enable_color default_setting) + | None -> enable_color Color.default_setting) ); () end +let edit_distance a b cutoff = + let la, lb = String.length a, String.length b in + let cutoff = + (* using max_int for cutoff would cause overflows in (i + cutoff + 1); + we bring it back to the (max la lb) worstcase *) + Int.min (Int.max la lb) cutoff in + if abs (la - lb) > cutoff then None + else begin + (* initialize with 'cutoff + 1' so that not-yet-written-to cases have + the worst possible cost; this is useful when computing the cost of + a case just at the boundary of the cutoff diagonal. *) + let m = Array.make_matrix (la + 1) (lb + 1) (cutoff + 1) in + m.(0).(0) <- 0; + for i = 1 to la do + m.(i).(0) <- i; + done; + for j = 1 to lb do + m.(0).(j) <- j; + done; + for i = 1 to la do + for j = Int.max 1 (i - cutoff - 1) to Int.min lb (i + cutoff + 1) do + let cost = if a.[i-1] = b.[j-1] then 0 else 1 in + let best = + (* insert, delete or substitute *) + Int.min (1 + Int.min m.(i-1).(j) m.(i).(j-1)) (m.(i-1).(j-1) + cost) + in + let best = + (* swap two adjacent letters; we use "cost" again in case of + a swap between two identical letters; this is slightly + redundant as this is a double-substitution case, but it + was done this way in most online implementations and + imitation has its virtues *) + if not (i > 1 && j > 1 && a.[i-1] = b.[j-2] && a.[i-2] = b.[j-1]) + then best + else Int.min best (m.(i-2).(j-2) + cost) + in + m.(i).(j) <- best + done; + done; + let result = m.(la).(lb) in + if result > cutoff + then None + else Some result + end + +let spellcheck env name = + let cutoff = + match String.length name with + | 1 | 2 -> 0 + | 3 | 4 -> 1 + | 5 | 6 -> 2 + | _ -> 3 + in + let compare target acc head = + match edit_distance target head cutoff with + | None -> acc + | Some dist -> + let (best_choice, best_dist) = acc in + if dist < best_dist then ([head], dist) + else if dist = best_dist then (head :: best_choice, dist) + else acc + in + let env = List.sort_uniq ~cmp:(fun s1 s2 -> String.compare s2 s1) env in + fst (List.fold_left ~f:(compare name) ~init:([], max_int) env) + +let align_hint ~prefix ~main ~hint = + let prefix_shift = String.length prefix in + Format_doc.Doc.align_prefix2 (main,prefix_shift) (hint,0) + +let align_error_hint ~main ~hint = align_hint ~prefix:"Error: " ~main ~hint + +let aligned_hint ~prefix ppf main_fmt = + let open Format_doc in + kdoc_printf (fun main hint -> + match hint with + | None -> pp_doc ppf main + | Some hint -> + let main, hint = align_hint ~prefix ~main ~hint in + fprintf ppf "%a@.%a" pp_doc main pp_doc hint + ) main_fmt + +let did_you_mean ?(pp=Style.inline_code) choices = + let open Format_doc in + match choices with + | [] -> None + | choices -> + let rest, last = split_last choices in + Some (doc_printf + "@[@{Hint@}: @{Did you mean @}%a%s%a?@]" + (pp_print_list ~pp_sep:comma pp) rest + (if rest = [] then "" else " or ") + pp last + ) + +module Error_style = struct + type setting = + | Contextual + | Short + | Merlin + + let default_setting = Contextual +end + let print_see_manual ppf manual_section = - let open Format in + let open Format_doc in fprintf ppf "(see manual section %a)" (pp_print_list ~pp_sep:(fun f () -> pp_print_char f '.') pp_print_int) manual_section diff --git a/ocamlmerlin_mlx/utils/misc.mli b/ocamlmerlin_mlx/utils/misc.mli index d61e412..9d51f2f 100644 --- a/ocamlmerlin_mlx/utils/misc.mli +++ b/ocamlmerlin_mlx/utils/misc.mli @@ -73,6 +73,9 @@ val reraise_preserving_backtrace : exn -> (unit -> unit) -> 'a val map_end: ('a -> 'b) -> 'a list -> 'b list -> 'b list (** [map_end f l t] is [map f l @ t], just more efficient. *) +val rev_map_end: ('a -> 'b) -> 'a list -> 'b list -> 'b list + (** [map_end f l t] is [map f (rev l) @ t], just more efficient. *) + val map_left_right: ('a -> 'b) -> 'a list -> 'b list (** Like [List.map], with guaranteed left-to-right evaluation order *) @@ -92,6 +95,9 @@ val list_remove: 'a -> 'a list -> 'a list val split_last: 'a list -> 'a list * 'a (** Return the last element and the other elements of the given list. *) +val repeated_label : (string option * 'a) list -> string option + (** Detects a repeated label - for use with labeled tuples. *) + val may: ('a -> unit) -> 'a option -> unit val may_map: ('a -> 'b) -> 'a option -> 'b option @@ -112,10 +118,14 @@ val find_in_path: string list -> string -> string val find_in_path_rel: string list -> string -> string (** Search a relative file in a list of directories. *) -val find_in_path_uncap: ?fallback:string -> string list -> string -> string - (** Same, but search also for uncapitalized name, i.e. - if name is [Foo.ml], allow [/path/Foo.ml] and [/path/foo.ml] - to match. *) + (** Normalize file name [Foo.ml] to [foo.ml] *) +val normalized_unit_filename: string -> string + +val find_in_path_normalized: ?fallback:string -> string list -> string -> string +(** Same as {!find_in_path_rel} , but search also for normalized unit filename, + i.e. if name is [Foo.ml], allow [/path/Foo.ml] and [/path/foo.ml] to + match. *) + val canonicalize_filename : ?cwd:string -> string -> string (* Ensure that path is absolute (wrt to cwd), by following ".." and "." *) @@ -123,11 +133,16 @@ val canonicalize_filename : ?cwd:string -> string -> string val expand_glob : ?filter:(string -> bool) -> string -> string list -> string list (* [expand_glob ~filter pattern acc] adds all filenames matching [pattern] and satistfying the [filter] predicate to [acc]*) -val split_path : string -> string list -> string list - (* [split_path path tail] prepends all components of [path] to [tail], +val split_path : string -> string list + (* [split_path path] returns the components of [path], + including implicit "." if path is not absolute. + [split_path "a/b/c"] = ["."; "a"; "b"; "c"] + [split_path "/a/b/c"] = ["/"; "a"; "b"; "c"] + FIXME: explain windows behavior + *) +val split_path_and_prepend : string -> string list -> string list + (* [split_path_and_prepend path tail] prepends all components of [path] to [tail], including implicit "." if path is not absolute. - [split_path "a/b/c" []] = ["."; "a"; "b"; "c"] - [split_path "/a/b/c" []] = ["/"; "a"; "b"; "c"] FIXME: explain windows behavior *) @@ -187,6 +202,8 @@ val no_overflow_lsl: int -> int -> bool (* [no_overflow_lsl n k] returns [true] if the computation of [n lsl k] does not overflow. *) +val letter_of_int : int -> string + module Int_literal_converter : sig val int : string -> int val int32 : string -> int32 @@ -269,21 +286,6 @@ val for4: 'a * 'b * 'c * 'd -> 'd * - modules_in_path ~ext:".mli" ["."] returns ["A"] *) val modules_in_path : ext:string -> string list -> string list -val file_contents : string -> string - -module LongString : - sig - type t = bytes array - val create : int -> t - val length : t -> int - val get : t -> int -> char - val set : t -> int -> char -> unit - val blit : t -> int -> t -> int -> int -> unit - val output : out_channel -> t -> int -> int -> unit - val unsafe_blit_to_bytes : t -> int -> bytes -> int -> int -> unit - val input_bytes : in_channel -> int -> t - end - val edit_distance : string -> string -> int -> int option (** [edit_distance a b cutoff] computes the edit distance between strings [a] and [b]. To help efficiency, it uses a cutoff: if the @@ -302,17 +304,59 @@ val spellcheck : string list -> string -> string list list of suggestions taken from [env], that are close enough to [name] that it may be a typo for one of them. *) -val did_you_mean : Format.formatter -> (unit -> string list) -> unit -(** [did_you_mean ppf get_choices] hints that the user may have meant - one of the option returned by calling [get_choices]. It does nothing - if the returned list is empty. - - The [unit -> ...] thunking is meant to delay any potentially-slow - computation (typically computing edit-distance with many things - from the current environment) to when the hint message is to be - printed. You should print an understandable error message before - calling [did_you_mean], so that users get a clear notification of - the failure even if producing the hint is slow. + +val align_hint: + prefix:string -> main:Format_doc.t -> hint:Format_doc.t -> + Format_doc.t * Format_doc.t +(** [aligned_hint main hint] vertically aligns a [main] message and a hint + message. The vertical alignment is controlled by the use of [@{ ... + @}] boxes: the start of one box, in either the hint or the main message, + will be shifted on the left to ensure that the end of the two boxes are + vertically aligned, taking in account a pre-existing [prefix] before the + main message. For instance, +{[ +let main, sub = + align_hint + ~prefix:"Error: " + (doc_printf "@{The value @}%a is not an instance variable" + Style.inline_code "foobar" + ) + (doc_printf + "@{Did you mean @}%a" Style.inline_code "foobaz" + ) in + printf "Error: %a%a" pp_doc main pp_doc sub +]} + + produces the following text: + +{[ +Error: The value "foobaz" is not an instance variable +Hint: Did you mean "foobar"? +]} + + where the main message has been shifted to the left to align ["foobaz"] and + ["foobar"]. +*) + + +val align_error_hint: + main:Format_doc.t -> hint:Format_doc.t -> Format_doc.t * Format_doc.t +(** Same as [align_hint ~prefix:"Error: "] *) + +val aligned_hint: + prefix:string -> Format_doc.formatter -> + ('a, Format_doc.formatter, unit, Format_doc.t option -> unit) format4 -> 'a +(** [aligned_hint ~prefix fmt ... hint] align the potential hint with the main + error message generated by the format string [fmt] before printing the two + message. *) + +val did_you_mean : + ?pp:string Format_doc.printer -> string list -> Format_doc.t option +(** [did_you_mean ~pp choices] hints that the user may have meant one of the + option in [choices]. + + Each choice is printed with the [pp] function, or [Style.inline_code] if + [pp]=[None]. *) val cut_at : string -> char -> string * string @@ -360,8 +404,18 @@ val ordinal_suffix : int -> string [4] -> ["th"], and so on. Handles larger numbers (e.g., [42] -> ["nd"]) and the numbers 11--13 (which all get ["th"]) correctly. *) -(* Color handling *) -module Color : sig +(** {1 Color support detection }*) +module Color: sig + type setting = Auto | Always | Never + + val default_setting : setting + val is_enabled : unit -> bool +end + + +(** {1 Styling handling for terminal output } *) + +module Style : sig type color = | Black | Red @@ -383,29 +437,99 @@ module Color : sig val ansi_of_style_l : style list -> string (* ANSI escape sequence for the given style *) + type tag_style ={ + ansi: style list; + text_open:string; + text_close:string + } + type styles = { - error: style list; - warning: style list; - loc: style list; - hint:style list; + error: tag_style; + warning: tag_style; + loc: tag_style; + hint: tag_style; + inline_code: tag_style; } + val hint: Format_doc.formatter -> unit + val as_inline_code: 'a Format_doc.printer -> 'a Format_doc.printer + val inline_code: string Format_doc.printer + val default_styles: styles val get_styles: unit -> styles val set_styles: styles -> unit - type setting = Auto | Always | Never - - val default_setting : setting - - val setup : setting option -> unit + val setup : Color.setting option -> unit (* [setup opt] will enable or disable color handling on standard formatters according to the value of color setting [opt]. Only the first call to this function has an effect. *) - val set_color_tag_handling : Format.formatter -> unit + val set_tag_handling : Format.formatter -> unit (* adds functions to support color tags to the given formatter. *) end -val print_see_manual : Format.formatter -> int list -> unit +(* See the -error-style option *) +module Error_style : sig + type setting = + | Contextual + | Short + | Merlin + + val default_setting : setting +end + +val print_see_manual : int list Format_doc.printer (** See manual section *) + + +module Utf8_lexeme: sig + type t = string + + val normalize: string -> (t,t) Result.t + (** Normalize the given UTF-8 encoded string. + Invalid UTF-8 sequences results in a error and are replaced + by U+FFFD. + Identifier characters are put in NFC normalized form. + Other Unicode characters are left unchanged. *) + + val capitalize: string -> (t,t) Result.t + (** Like [normalize], but if the string starts with a lowercase identifier + character, it is replaced by the corresponding uppercase character. + Subsequent characters are not changed. *) + + val uncapitalize: string -> (t,t) Result.t + (** Like [normalize], but if the string starts with an uppercase identifier + character, it is replaced by the corresponding lowercase character. + Subsequent characters are not changed. *) + + val is_capitalized: t -> bool + (** Returns [true] if the given normalized string starts with an + uppercase identifier character, [false] otherwise. May return + wrong results if the string is not normalized. *) + + val is_valid_identifier: t -> bool + (** Check whether the given normalized string is a valid OCaml identifier: + - all characters are identifier characters + - it does not start with a digit or a single quote + *) + + val is_lowercase: t -> bool + (** Returns [true] if the given normalized string only contains lowercase + identifier character, [false] otherwise. May return wrong results if the + string is not normalized. *) + + type validation_result = + | Valid + | Invalid_character of Uchar.t (** Character not allowed *) + | Invalid_beginning of Uchar.t (** Character not allowed as first char *) + + val validate_identifier: ?with_dot:bool -> t -> validation_result + (** Like [is_valid_identifier], but returns a more detailed error code. Dots + can be allowed to extend support to path-like identifiers. *) + + val starts_like_a_valid_identifier: t -> bool + (** Checks whether the given normalized string starts with an identifier + character other than a digit or a single quote. Subsequent characters + are not checked. *) +end + diff --git a/ocamlmerlin_mlx/utils/stamped_hashtable.ml b/ocamlmerlin_mlx/utils/stamped_hashtable.ml index e466000..a03e17d 100644 --- a/ocamlmerlin_mlx/utils/stamped_hashtable.ml +++ b/ocamlmerlin_mlx/utils/stamped_hashtable.ml @@ -43,12 +43,23 @@ let add {table; changelog} ?stamp key value = | Some stamp -> changelog.recent <- Cell {stamp; key; table} :: changelog.recent +let replace t k v = + Hashtbl.replace t.table k v + let mem t a = Hashtbl.mem t.table a let find t a = Hashtbl.find t.table a +let fold f t acc = + Hashtbl.fold f t.table acc + +let clear t = + Hashtbl.clear t.table; + t.changelog.recent <- []; + t.changelog.sorted <- [] + (* Implementation of backtracking *) (* Helper to sort by decreasing stamps *) diff --git a/ocamlmerlin_mlx/utils/stamped_hashtable.mli b/ocamlmerlin_mlx/utils/stamped_hashtable.mli index 2a7121e..e282048 100644 --- a/ocamlmerlin_mlx/utils/stamped_hashtable.mli +++ b/ocamlmerlin_mlx/utils/stamped_hashtable.mli @@ -35,9 +35,19 @@ val mem : ('a, 'b) t -> 'a -> bool val find : ('a, 'b) t -> 'a -> 'b (** See [Hashtbl.find]. *) +val fold : ('a -> 'b -> 'acc -> 'acc) -> ('a, 'b) t -> 'acc -> 'acc +(** See [Hashtbl.fold]. *) + +val clear : ('a, 'b) t -> unit +(** Clear the table and empty the changelog. See [Hashtbl.clear]. *) + val create_changelog : unit -> changelog (** Create a new change log. *) (* [backtrack changelog ~stamp] remove all items added to tables logging to [changelog] with a stamp strictly greater than [stamp] *) val backtrack : changelog -> stamp:int -> unit + +val replace : ('a, 'b) t -> 'a -> 'b -> unit +(** This operation is unsafe in general. Only replacements that does not imply + re-stamping are safe. *) diff --git a/ocamlmerlin_mlx/utils/std.ml b/ocamlmerlin_mlx/utils/std.ml index 68bab0b..091093e 100644 --- a/ocamlmerlin_mlx/utils/std.ml +++ b/ocamlmerlin_mlx/utils/std.ml @@ -1,40 +1,40 @@ # 1 "merlin/src/utils/std.ml" (* {{{ COPYING *( - This file is part of Merlin, an helper for ocaml editors + This file is part of Merlin, an helper for ocaml editors - Copyright (C) 2013 - 2015 Frédéric Bour - Thomas Refis - Simon Castellan + Copyright (C) 2013 - 2015 Frédéric Bour + Thomas Refis + Simon Castellan - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation the + rights to use, copy, modify, merge, publish, distribute, sublicense, and/or + sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. - The Software is provided "as is", without warranty of any kind, express or - implied, including but not limited to the warranties of merchantability, - fitness for a particular purpose and noninfringement. In no event shall - the authors or copyright holders be liable for any claim, damages or other - liability, whether in an action of contract, tort or otherwise, arising - from, out of or in connection with the software or the use or other dealings - in the Software. + The Software is provided "as is", without warranty of any kind, express or + implied, including but not limited to the warranties of merchantability, + fitness for a particular purpose and noninfringement. In no event shall + the authors or copyright holders be liable for any claim, damages or other + liability, whether in an action of contract, tort or otherwise, arising + from, out of or in connection with the software or the use or other dealings + in the Software. -)* }}} *) + )* }}} *) type json = -[ `Assoc of (string * json) list -| `Bool of bool -| `Float of float -| `Int of int -| `List of json list -| `Null -| `String of string ] + [ `Assoc of (string * json) list + | `Bool of bool + | `Float of float + | `Int of int + | `List of json list + | `Null + | `String of string ] module Json = struct type t = json @@ -47,23 +47,20 @@ module Json = struct | None -> `Null | Some x -> f x - let list f x = - `List (List.map f x) + let list f x = `List (List.map f x) - let pretty_to_string : (t -> string) ref = ref @@ fun _ -> + let pretty_to_string : (t -> string) ref = + ref @@ fun _ -> Printf.sprintf - "Logger error: `Std.Json.pretty_to_string` \ - is not set. You should initialize that reference with the \ - pretifier of your choice to enable json logging. \ - A common one is `Yojson.Basic.pretty_to_string`." + "Logger error: `Std.Json.pretty_to_string` is not set. You should \ + initialize that reference with the pretifier of your choice to enable \ + json logging. A common one is `Yojson.Basic.pretty_to_string`." end module Hashtbl = struct include Hashtbl - let find_some tbl key = - try Some (find tbl key) - with Not_found -> None + let find_some tbl key = try Some (find tbl key) with Not_found -> None let elements tbl = Hashtbl.fold (fun _key elt acc -> elt :: acc) tbl [] @@ -88,18 +85,16 @@ module List = struct in aux 0 l - let find_some ~f l = - try Some (find ~f l) - with Not_found -> None + let find_some ~f l = try Some (find ~f l) with Not_found -> None - let rec rev_scan_left acc ~f l ~init = match l with + let rec rev_scan_left acc ~f l ~init = + match l with | [] -> acc | x :: xs -> let init = f init x in rev_scan_left (init :: acc) ~f xs ~init - let scan_left ~f l ~init = - List.rev (rev_scan_left [] ~f l ~init) + let scan_left ~f l ~init = List.rev (rev_scan_left [] ~f l ~init) let rev_filter ~f lst = let rec aux acc = function @@ -110,33 +105,33 @@ module List = struct let rec filter_map ~f = function | [] -> [] - | x :: xs -> + | x :: xs -> ( match f x with | None -> filter_map ~f xs - | Some x -> x :: filter_map ~f xs + | Some x -> x :: filter_map ~f xs) let rec find_map ~f = function | [] -> raise Not_found - | x :: xs -> + | x :: xs -> ( match f x with | None -> find_map ~f xs - | Some x' -> x' + | Some x' -> x') let rec map_end ~f l1 l2 = match l1 with | [] -> l2 - | hd::tl -> f hd :: map_end ~f tl l2 + | hd :: tl -> f hd :: map_end ~f tl l2 let concat_map ~f l = flatten (map ~f l) let replicate elem n = let rec aux acc elem n = - if n <= 0 then acc else aux (elem :: acc) elem (n-1) + if n <= 0 then acc else aux (elem :: acc) elem (n - 1) in aux [] elem n - let rec remove ?(phys=false) x = - let check = if phys then (==) else (=) in + let rec remove ?(phys = false) x = + let check = if phys then ( == ) else ( = ) in function | [] -> [] | hd :: tl when check x hd -> tl @@ -147,9 +142,10 @@ module List = struct | hd :: tl when x = hd -> remove_all x tl | hd :: tl -> hd :: remove_all x tl - let rec same ~f l1 l2 = match l1, l2 with + let rec same ~f l1 l2 = + match (l1, l2) with | [], [] -> true - | (hd1 :: tl1), (hd2 :: tl2) when f hd1 hd2 -> same ~f tl1 tl2 + | hd1 :: tl1, hd2 :: tl2 when f hd1 hd2 -> same ~f tl1 tl2 | _, _ -> false (* [length_lessthan n l] returns @@ -167,20 +163,21 @@ module List = struct let tbl = Hashtbl.create 17 in let f a b = let b' = equiv b in - if Hashtbl.mem tbl b' - then a - else (Hashtbl.add tbl b' (); b :: a) + if Hashtbl.mem tbl b' then a + else ( + Hashtbl.add tbl b' (); + b :: a) in rev (fold_left ~f ~init:[] lst) let filter_dup lst = filter_dup' ~equiv:(fun x -> x) lst let rec merge_cons ~f = function - | a :: ((b :: tl) as tl') -> - begin match f a b with - | Some a' -> merge_cons ~f (a' :: tl) - | None -> a :: merge_cons ~f tl' - end + | a :: (b :: tl as tl') -> begin + match f a b with + | Some a' -> merge_cons ~f (a' :: tl) + | None -> a :: merge_cons ~f tl' + end | tl -> tl let rec take_while ~f = function @@ -202,90 +199,114 @@ module List = struct let rec split_n acc n = function | x :: xs when n > 0 -> split_n (x :: acc) (n - 1) xs - | xs -> List.rev acc, xs + | xs -> (List.rev acc, xs) let split_n n l = split_n [] n l let rec split3 xs ys zs = function - | (x,y,z) :: tl -> split3 (x :: xs) (y :: ys) (z :: zs) tl - | [] -> List.rev xs, List.rev ys, List.rev zs + | (x, y, z) :: tl -> split3 (x :: xs) (y :: ys) (z :: zs) tl + | [] -> (List.rev xs, List.rev ys, List.rev zs) let split3 l = split3 [] [] [] l - let rec unfold ~f a = match f a with + let rec unfold ~f a = + match f a with | None -> [] | Some a -> a :: unfold ~f a - let rec rev_unfold acc ~f a = match f a with + let rec rev_unfold acc ~f a = + match f a with | None -> acc | Some a -> rev_unfold (a :: acc) ~f a let rec fold_n_map ~f ~init = function - | [] -> init, [] + | [] -> (init, []) | x :: xs -> let acc, x' = f init x in let acc, xs' = fold_n_map ~f ~init:acc xs in - acc, (x' :: xs') + (acc, x' :: xs') + + let rec iteri2 i ~f l1 l2 = + match (l1, l2) with + | [], [] -> () + | a1 :: l1, a2 :: l2 -> + f i a1 a2; + iteri2 (i + 1) ~f l1 l2 + | _, _ -> raise (Invalid_argument "iteri2") + + let iteri2 ~f l1 l2 = iteri2 0 ~f l1 l2 module Lazy = struct - type 'a t = - | Nil - | Cons of 'a * 'a t lazy_t + type 'a t = Nil | Cons of 'a * 'a t lazy_t let rec map ~f = function | Nil -> Nil - | Cons (hd,tl) -> - Cons (f hd, lazy (map ~f (Lazy.force tl))) + | Cons (hd, tl) -> Cons (f hd, lazy (map ~f (Lazy.force tl))) let rec to_strict = function | Nil -> [] - | Cons (hd, lazy tl) -> hd :: to_strict tl + | Cons (hd, (lazy tl)) -> hd :: to_strict tl - let rec unfold f a = match f a with + let rec unfold f a = + match f a with | None -> Nil | Some a -> Cons (a, lazy (unfold f a)) let rec filter_map ~f = function | Nil -> Nil - | Cons (a, tl) -> match f a with + | Cons (a, tl) -> ( + match f a with | None -> filter_map ~f (Lazy.force tl) - | Some a' -> Cons (a', lazy (filter_map ~f (Lazy.force tl))) + | Some a' -> Cons (a', lazy (filter_map ~f (Lazy.force tl)))) end + let hd_opt = function + | [] -> None + | x :: _ -> Some x + let rec last = function | [] -> None - | [x] -> Some x + | [ x ] -> Some x | _ :: l -> last l let rec group_by pred group acc = function | [] -> List.rev acc - | x :: xs -> + | x :: xs -> ( match group with - | (x' :: _) when pred x x' -> - group_by pred (x :: group) acc xs - | _ -> group_by pred [x] (group :: acc) xs + | x' :: _ when pred x x' -> group_by pred (x :: group) acc xs + | _ -> group_by pred [ x ] (group :: acc) xs) let group_by pred xs = match group_by pred [] [] xs with | [] :: xs | xs -> xs (* Merge sorted lists *) - let rec merge ~cmp l1 l2 = match l1, l2 with + let rec merge ~cmp l1 l2 = + match (l1, l2) with | l, [] | [], l -> l - | (x1 :: _), (x2 :: x2s) when cmp x1 x2 > 0 -> - x2 :: merge ~cmp l1 x2s - | x1 :: x1s, _ -> - x1 :: merge ~cmp x1s l2 + | x1 :: _, x2 :: x2s when cmp x1 x2 > 0 -> x2 :: merge ~cmp l1 x2s + | x1 :: x1s, _ -> x1 :: merge ~cmp x1s l2 let rec dedup_adjacent ~cmp = function | x1 :: (x2 :: _ as xs) when cmp x1 x2 = 0 -> dedup_adjacent ~cmp xs - | x :: xs -> x :: dedup_adjacent ~cmp xs + | x :: xs -> x :: dedup_adjacent ~cmp xs | [] -> [] (* [sort_uniq] does not need to maintain a set of seen entries because duplicates will be adjacent. *) let sort_uniq ~cmp l = dedup_adjacent ~cmp (sort ~cmp l) - let print f () l = - "[ " ^ String.concat "; " (List.map (f ()) l) ^ " ]" + let print f () l = "[ " ^ String.concat "; " (List.map (f ()) l) ^ " ]" + + let max_elt list ~cmp = + fold_left list ~init:None ~f:(fun acc elt -> + match acc with + | None -> Some elt + | Some max -> if cmp max elt < 0 then Some elt else acc) + + let min_elt list ~cmp = + fold_left list ~init:None ~f:(fun acc elt -> + match acc with + | None -> Some elt + | Some min -> if cmp min elt > 0 then Some elt else acc) end module Option = struct @@ -314,27 +335,31 @@ module Option = struct | None -> () | Some x -> f x - let cons o xs = match o with + let cons o xs = + match o with | None -> xs | Some x -> x :: xs module Infix = struct - let return x = Some x - let (>>=) x f = bind x ~f - let (>>|) x f = map x ~f + let return x = Some x + let ( >>= ) x f = bind x ~f + let ( >>| ) x f = map x ~f + let ( let* ) opt f = bind opt ~f + let ( let+ ) opt f = map opt ~f end include Infix let to_list = function | None -> [] - | Some x -> [x] + | Some x -> [ x ] let is_some = function | None -> false | _ -> true - let plus a b = match a with + let plus a b = + match a with | Some _ -> a | None -> b @@ -344,9 +369,7 @@ module Option = struct end module Result = struct - type ('a, 'e) t = ('a, 'e) result = - | Ok of 'a - | Error of 'e + include Result let map ~f r = Result.map f r let bind ~f r = Result.bind r f @@ -357,24 +380,21 @@ module String = struct let for_all f t = let len = String.length t in - let rec loop i = - i = len || (f t.[i] && loop (i + 1)) - in + let rec loop i = i = len || (f t.[i] && loop (i + 1)) in loop 0 - let reverse s1 = let len = length s1 in - let s2 = Bytes.make len 'a' in + let s2 = Bytes.make len 'a' in for i = 0 to len - 1 do Bytes.set s2 i s1.[len - i - 1] - done ; + done; Bytes.to_string s2 let common_prefix_len s1 s2 = let rec aux i = - if i >= length s1 || i >= length s2 || s1.[i] <> s2.[i] then i else - aux (succ i) + if i >= length s1 || i >= length s2 || s1.[i] <> s2.[i] then i + else aux (succ i) in aux 0 @@ -382,71 +402,85 @@ module String = struct let is_prefixed ~by = let l = String.length by in fun s -> - let l' = String.length s in - (l' >= l) && - (try for i = 0 to pred l do - if s.[i] <> by.[i] then - raise Not_found - done; - true - with Not_found -> false) + let l' = String.length s in + l' >= l + && + try + for i = 0 to pred l do + if s.[i] <> by.[i] then raise Not_found + done; + true + with Not_found -> false (* Drop characters from beginning of string *) let drop n s = sub s ~pos:n ~len:(length s - n) module Set = struct - include MoreLabels.Set.Make (struct type t = string let compare = compare end) + include MoreLabels.Set.Make (struct + type t = string + let compare = compare + end) let of_list l = List.fold_left ~f:(fun s elt -> add elt s) l ~init:empty let to_list s = fold ~f:(fun x xs -> x :: xs) s ~init:[] end module Map = struct - include MoreLabels.Map.Make (struct type t = string let compare = compare end) + include MoreLabels.Map.Make (struct + type t = string + let compare = compare + end) let of_list l = - List.fold_left ~f:(fun m (k,v) -> add ~key:k ~data:v m) l ~init:empty - let to_list m = fold ~f:(fun ~key ~data xs -> (key,data) :: xs) m ~init:[] + List.fold_left ~f:(fun m (k, v) -> add ~key:k ~data:v m) l ~init:empty + let to_list m = fold ~f:(fun ~key ~data xs -> (key, data) :: xs) m ~init:[] - let keys m = fold ~f:(fun ~key ~data:_ xs -> key :: xs) m ~init:[] + let keys m = fold ~f:(fun ~key ~data:_ xs -> key :: xs) m ~init:[] let values m = fold ~f:(fun ~key:_ ~data xs -> data :: xs) m ~init:[] let add_multiple key data t = - let current = - try find key t - with Not_found -> [] - in + let current = try find key t with Not_found -> [] in let data = data :: current in add ~key ~data t end let mem c s = - try ignore (String.index s c : int); true + try + ignore (String.index s c : int); + true with Not_found -> false let first_double_underscore_end s = let len = String.length s in let rec aux i = - if i > len - 2 then raise Not_found else - if s.[i] = '_' && s.[i + 1] = '_' then i + 1 + if i > len - 2 then raise Not_found + else if s.[i] = '_' && s.[i + 1] = '_' then i + 1 else aux (i + 1) in aux 0 let no_double_underscore s = - try ignore (first_double_underscore_end s); false + try + ignore (first_double_underscore_end s); + false with Not_found -> true - let trim = function "" -> "" | str -> - let l = String.length str in - let is_space = function - | ' ' | '\n' | '\t' | '\r' -> true - | _ -> false - in - let r0 = ref 0 and rl = ref l in - while !r0 < l && is_space str.[!r0] do incr r0 done; - let r0 = !r0 in - while !rl > r0 && is_space str.[!rl - 1] do decr rl done; - let rl = !rl in - if r0 = 0 && rl = l then str else sub str ~pos:r0 ~len:(rl - r0) + let trim = function + | "" -> "" + | str -> + let l = String.length str in + let is_space = function + | ' ' | '\n' | '\t' | '\r' -> true + | _ -> false + in + let r0 = ref 0 and rl = ref l in + while !r0 < l && is_space str.[!r0] do + incr r0 + done; + let r0 = !r0 in + while !rl > r0 && is_space str.[!rl - 1] do + decr rl + done; + let rl = !rl in + if r0 = 0 && rl = l then str else sub str ~pos:r0 ~len:(rl - r0) let print () s = Printf.sprintf "%S" s @@ -458,11 +492,11 @@ module String = struct let split_on_char_ c s = match String.index s c with - | exception Not_found -> [s] + | exception Not_found -> [ s ] | p -> let rec loop i = match String.index_from s i c with - | exception Not_found -> [String.sub s i (String.length s - i)] + | exception Not_found -> [ String.sub s i (String.length s - i) ] | j -> let s0 = String.sub s i (j - i) in s0 :: loop (j + 1) @@ -480,25 +514,23 @@ module String = struct done; Some (String.sub text plen (tlen - plen)) with Not_found -> None - else - None + else None let next_occurrence ~pattern text from = let plen = String.length pattern in let last = String.length text - plen in let i = ref from and j = ref 0 in while !i <= last && !j < plen do - if text.[!i + !j] <> pattern.[!j] - then (incr i; j := 0) + if text.[!i + !j] <> pattern.[!j] then ( + incr i; + j := 0) else incr j done; - if !j < plen then - raise Not_found - else - !i + if !j < plen then raise Not_found else !i let replace_all ~pattern ~with_ text = - if pattern = "" then text else + if pattern = "" then text + else match next_occurrence ~pattern text 0 with | exception Not_found -> text | j0 -> @@ -514,6 +546,35 @@ module String = struct in aux 0 j0; Buffer.contents buffer + + let rfindi = + let rec loop s ~f i = + if i < 0 then None + else if f (String.unsafe_get s i) then Some i + else loop s ~f (i - 1) + in + fun ?from s ~f -> + let from = + let len = String.length s in + match from with + | None -> len - 1 + | Some i -> if i > len - 1 then failwith "rfindi: invalid from" else i + in + loop s ~f from + + let rec check_prefix s ~prefix len i = + i = len || (s.[i] = prefix.[i] && check_prefix s ~prefix len (i + 1)) + + let lsplit2 s ~on = + match String.index_opt s on with + | None -> None + | Some i -> + Some (sub s ~pos:0 ~len:i, sub s ~pos:(i + 1) ~len:(length s - i - 1)) + + let is_prefix s ~prefix = + let len = length s in + let prefix_len = length prefix in + len >= prefix_len && check_prefix s ~prefix prefix_len 0 end let sprintf = Printf.sprintf @@ -523,7 +584,7 @@ module Format = struct let default_width = ref 0 - let to_string ?(width= !default_width) () = + let to_string ?(width = !default_width) () = let b = Buffer.create 32 in let ppf = formatter_of_buffer b in let contents () = @@ -531,23 +592,22 @@ module Format = struct Buffer.contents b in pp_set_margin ppf width; - ppf, contents + (ppf, contents) end module Lexing = struct + type position = Lexing.position = + { pos_fname : string; pos_lnum : int; pos_bol : int; pos_cnum : int } - type position = Lexing.position = { - pos_fname : string; - pos_lnum : int; - pos_bol : int; - pos_cnum : int; - } - - include (Lexing : module type of struct include Lexing end - with type position := position) + include ( + Lexing : + module type of struct + include Lexing + end + with type position := position) let move buf p = - buf.lex_abs_pos <- (p.pos_cnum - buf.lex_curr_pos); + buf.lex_abs_pos <- p.pos_cnum - buf.lex_curr_pos; buf.lex_curr_p <- p let from_strings ?empty ?position source refill = @@ -557,34 +617,35 @@ module Lexing = struct let lex_fun buf size = let count = min (!len - !pos) size in let count = - if count <= 0 then - begin - source := refill (); - len := String.length !source; - pos := 0; - min !len size - end + if count <= 0 then begin + source := refill (); + len := String.length !source; + pos := 0; + min !len size + end else count in if count <= 0 then 0 else begin - String.blit ~src:!source ~src_pos:!pos ~dst:buf ~dst_pos:0 ~len:count; - pos := !pos + count; - (match empty with None -> () | Some r -> r := !pos >= !len); - count - end + String.blit ~src:!source ~src_pos:!pos ~dst:buf ~dst_pos:0 ~len:count; + pos := !pos + count; + (match empty with + | None -> () + | Some r -> r := !pos >= !len); + count + end in let buf = from_function lex_fun in Option.iter ~f:(move buf) position; buf (* Manipulating position *) - let make_pos ?(pos_fname="") (pos_lnum, pos_cnum) = - { pos_fname ; pos_lnum ; pos_cnum ; pos_bol = 0 } + let make_pos ?(pos_fname = "") (pos_lnum, pos_cnum) = + { pos_fname; pos_lnum; pos_cnum; pos_bol = 0 } let column pos = pos.pos_cnum - pos.pos_bol - let set_column pos col = {pos with pos_cnum = pos.pos_bol + col} + let set_column pos col = { pos with pos_cnum = pos.pos_bol + col } let split_pos pos = (pos.pos_lnum, column pos) @@ -600,21 +661,18 @@ module Lexing = struct (* Current position in lexer, even if the buffer is in the middle of a refill operation *) let immediate_pos buf = - {buf.lex_curr_p with pos_cnum = buf.lex_abs_pos + buf.lex_curr_pos} + { buf.lex_curr_p with pos_cnum = buf.lex_abs_pos + buf.lex_curr_pos } let json_of_position pos = let line, col = split_pos pos in - `Assoc ["line", `Int line; "col", `Int col] + `Assoc [ ("line", `Int line); ("col", `Int col) ] - let min_pos p1 p2 = - if compare_pos p1 p2 <= 0 then p1 else p2 + let min_pos p1 p2 = if compare_pos p1 p2 <= 0 then p1 else p2 - let max_pos p1 p2 = - if compare_pos p1 p2 >= 0 then p1 else p2 + let max_pos p1 p2 = if compare_pos p1 p2 >= 0 then p1 else p2 end module Char = struct - (* FIXME: Remove once we drop support for 4.02 and replace the calls to [uppercase] and [lowercase] by their [_ascii] version. *) [@@@ocaml.warning "-3"] @@ -627,17 +685,11 @@ module Char = struct end module Glob : sig - type pattern = - | Wildwild - | Exact of string - | Regexp of Str.regexp + type pattern = Wildwild | Exact of string | Regexp of Str.regexp val compile_pattern : string -> pattern val match_pattern : pattern -> string -> bool end = struct - type pattern = - | Wildwild - | Exact of string - | Regexp of Str.regexp + type pattern = Wildwild | Exact of string | Regexp of Str.regexp let compile_pattern = function | "**" -> Wildwild @@ -647,27 +699,31 @@ end = struct let flush () = if Buffer.length chunk > 0 then ( Buffer.add_string regexp (Str.quote (Buffer.contents chunk)); - Buffer.clear chunk; - ) + Buffer.clear chunk) in let l = String.length pattern in let i = ref 0 in while !i < l do - begin match pattern.[!i] with - | '\\' -> incr i; if !i < l then Buffer.add_char chunk pattern.[!i] - | '*' -> flush (); Buffer.add_string regexp ".*"; - | '?' -> flush (); Buffer.add_char regexp '.'; + begin + match pattern.[!i] with + | '\\' -> + incr i; + if !i < l then Buffer.add_char chunk pattern.[!i] + | '*' -> + flush (); + Buffer.add_string regexp ".*" + | '?' -> + flush (); + Buffer.add_char regexp '.' | x -> Buffer.add_char chunk x end; incr i done; - if Buffer.length regexp = 0 then - Exact (Buffer.contents chunk) + if Buffer.length regexp = 0 then Exact (Buffer.contents chunk) else ( flush (); Buffer.add_char regexp '$'; - Regexp (Str.regexp (Buffer.contents regexp)) - ) + Regexp (Str.regexp (Buffer.contents regexp))) let match_pattern re str = match re with @@ -679,7 +735,7 @@ end let fprintf = Format.fprintf let lazy_eq a b = - match Lazy.is_val a, Lazy.is_val b with + match (Lazy.is_val a, Lazy.is_val b) with | true, true -> Lazy.force_val a == Lazy.force_val b | false, false -> a == b | _ -> false @@ -688,8 +744,12 @@ let let_ref r v f = let v' = !r in r := v; match f () with - | result -> r := v'; result - | exception exn -> r := v'; raise exn + | result -> + r := v'; + result + | exception exn -> + r := v'; + raise exn let failwithf fmt = Printf.ksprintf failwith fmt @@ -697,20 +757,19 @@ module Shell = struct let split_command str = let comps = ref [] in let dirty = ref false in - let buf = Buffer.create 16 in + let buf = Buffer.create 16 in let flush () = if !dirty then ( comps := Buffer.contents buf :: !comps; dirty := false; - Buffer.clear buf; - ) + Buffer.clear buf) in let i = ref 0 and len = String.length str in let unescape = function | 'n' -> '\n' | 'r' -> '\r' | 't' -> '\t' - | x -> x + | x -> x in while !i < len do let c = str.[!i] in @@ -721,26 +780,23 @@ module Shell = struct dirty := true; if !i < len then ( Buffer.add_char buf (unescape str.[!i]); - incr i - ) + incr i) | '\'' -> dirty := true; while !i < len && str.[!i] <> '\'' do Buffer.add_char buf str.[!i]; - incr i; + incr i done; incr i | '"' -> dirty := true; while !i < len && str.[!i] <> '"' do (match str.[!i] with - | '\\' -> - incr i; - if !i < len then - Buffer.add_char buf (unescape str.[!i]); - | x -> Buffer.add_char buf x - ); - incr i; + | '\\' -> + incr i; + if !i < len then Buffer.add_char buf (unescape str.[!i]) + | x -> Buffer.add_char buf x); + incr i done; incr i | x -> @@ -752,69 +808,75 @@ module Shell = struct end module System = struct - external windows_merlin_system_command : string -> cwd:string -> ?outfile:string -> int = - "ml_merlin_system_command" - - let run_in_directory - : (prog:string - -> prog_is_quoted:bool - -> args:string list - -> cwd:string - -> ?stdin:string - -> ?stdout:string - -> ?stderr:string - -> unit - -> [ `Finished of int | `Cancelled ]) ref = ref @@ - fun ~prog ~prog_is_quoted:_ ~args ~cwd ?stdin:_ ?stdout ?stderr:_ () -> - (* Currently we assume that [prog] is always quoted and might contain - arguments such as [-as-ppx]. This is due to the way Merlin gets its - configuration. Thus we cannot rely on [Filename.quote_command]. *) - let args = String.concat ~sep:" " @@ List.map ~f:Filename.quote args in - (* Runned program should never output on stdout since it is the - channel used by Merlin to communicate with the editor *) - let args = - if Sys.win32 then args - else - let stdout = match stdout with - | Some file -> Filename.quote file - | None -> "&2" - in - Printf.sprintf "%s 1>%s" args stdout - in - let cmd = Format.sprintf "%s %s" prog args in - let exit_code = - if Sys.win32 then - (* Note: the following function will never output to stdout. - When [stdout = None], stdout is sent to stderr. *) - windows_merlin_system_command cmd ~cwd ?outfile:stdout - else - Sys.command (Printf.sprintf "cd %s && %s" (Filename.quote cwd) cmd) - in - `Finished exit_code + external windows_merlin_system_command : + string -> cwd:string -> ?outfile:string -> int = "ml_merlin_system_command" + + let run_in_directory : + (prog:string -> + prog_is_quoted:bool -> + args:string list -> + cwd:string -> + ?stdin:string -> + ?stdout:string -> + ?stderr:string -> + unit -> + [ `Finished of int | `Cancelled ]) + ref = + ref + @@ fun ~prog ~prog_is_quoted:_ ~args ~cwd ?stdin:_ ?stdout ?stderr:_ () -> + (* Currently we assume that [prog] is always quoted and might contain + arguments such as [-as-ppx]. This is due to the way Merlin gets its + configuration. Thus we cannot rely on [Filename.quote_command]. *) + let args = String.concat ~sep:" " @@ List.map ~f:Filename.quote args in + (* Runned program should never output on stdout since it is the + channel used by Merlin to communicate with the editor *) + let args = + if Sys.win32 then args + else + let stdout = + match stdout with + | Some file -> Filename.quote file + | None -> "&2" + in + Printf.sprintf "%s 1>%s" args stdout + in + let cmd = Format.sprintf "%s %s" prog args in + let exit_code = + if Sys.win32 then + (* Note: the following function will never output to stdout. + When [stdout = None], stdout is sent to stderr. *) + windows_merlin_system_command cmd ~cwd ?outfile:stdout + else Sys.command (Printf.sprintf "cd %s && %s" (Filename.quote cwd) cmd) + in + `Finished exit_code end - (* [modules_in_path ~ext path] lists ocaml modules corresponding to - * filenames with extension [ext] in given [path]es. - * For instance, if there is file "a.ml","a.mli","b.ml" in ".": - * - modules_in_path ~ext:".ml" ["."] returns ["A";"B"], - * - modules_in_path ~ext:".mli" ["."] returns ["A"] *) +(* [modules_in_path ~ext path] lists ocaml modules corresponding to + * filenames with extension [ext] in given [path]es. + * For instance, if there is file "a.ml","a.mli","b.ml" in ".": + * - modules_in_path ~ext:".ml" ["."] returns ["A";"B"], + * - modules_in_path ~ext:".mli" ["."] returns ["A"] *) let modules_in_path ~ext path = let seen = Hashtbl.create 7 in List.fold_left ~init:[] path - ~f:begin fun results dir -> - try - Array.fold_left - begin fun results file -> - if Filename.check_suffix file ext - then let name = Filename.chop_extension file in - (if Hashtbl.mem seen name - then results - else - (Hashtbl.add seen name (); String.capitalize name :: results)) - else results - end results (Sys.readdir dir) - with Sys_error _ -> results - end + ~f: + begin + fun results dir -> + try + Array.fold_left + begin + fun results file -> + if Filename.check_suffix file ext then + let name = Filename.chop_extension file in + if Hashtbl.mem seen name then results + else ( + Hashtbl.add seen name (); + String.capitalize name :: results) + else results + end + results (Sys.readdir dir) + with Sys_error _ -> results + end let file_contents filename = let ic = open_in filename in @@ -837,15 +899,9 @@ let file_contents filename = external reraise : exn -> 'a = "%reraise" -type 'a with_workdir = { - workdir : string; - workval : 'a; -} (** Some value that must be interpreted with respect to a specific work directory. (e.g. for resolving relative paths or executing sub-commands *) +type 'a with_workdir = { workdir : string; workval : 'a } let dump_with_workdir f x : json = - `Assoc [ - "workdir", `String x.workdir; - "workval", f x.workval; - ] + `Assoc [ ("workdir", `String x.workdir); ("workval", f x.workval) ] diff --git a/test/mlx.t b/test/mlx.t index ca39f60..4cd5b47 100644 --- a/test/mlx.t +++ b/test/mlx.t @@ -70,8 +70,8 @@ Expected error (tag mismatch): MERLIN File "*stdin*", line 1, characters 18-24 - Error: Syntax error: '' expected - This '' might be unmatched + Error: Syntax error: expected + This might be unmatched Some tests for prop expressions: