diff --git a/.depend b/.depend index de2b2b22e7d2..25b94c10502e 100644 --- a/.depend +++ b/.depend @@ -3794,6 +3794,7 @@ middle_end/flambda/flambda_middle_end.cmo : \ utils/profile.cmi \ middle_end/flambda/parser/print_fexpr.cmi \ utils/misc.cmi \ + middle_end/flambda/from_lambda/lambda_to_flambda.cmi \ middle_end/flambda/inlining/inlining_report.cmi \ middle_end/flambda/terms/flambda_unit.cmi \ middle_end/flambda/parser/flambda_to_fexpr.cmi \ @@ -3802,10 +3803,7 @@ middle_end/flambda/flambda_middle_end.cmo : \ middle_end/flambda/terms/flambda.cmi \ middle_end/flambda/parser/fexpr.cmo \ middle_end/flambda/cmx/exported_code.cmi \ - middle_end/flambda/from_lambda/lambda_to_flambda.cmi \ - middle_end/flambda/basic/continuation.cmi \ middle_end/flambda/basic/code_id.cmi \ - middle_end/flambda/from_lambda/closure_conversion.cmi \ utils/clflags.cmi \ middle_end/flambda/flambda_middle_end.cmi middle_end/flambda/flambda_middle_end.cmx : \ @@ -3813,6 +3811,7 @@ middle_end/flambda/flambda_middle_end.cmx : \ utils/profile.cmx \ middle_end/flambda/parser/print_fexpr.cmx \ utils/misc.cmx \ + middle_end/flambda/from_lambda/lambda_to_flambda.cmx \ middle_end/flambda/inlining/inlining_report.cmx \ middle_end/flambda/terms/flambda_unit.cmx \ middle_end/flambda/parser/flambda_to_fexpr.cmx \ @@ -3821,10 +3820,7 @@ middle_end/flambda/flambda_middle_end.cmx : \ middle_end/flambda/terms/flambda.cmx \ middle_end/flambda/parser/fexpr.cmx \ middle_end/flambda/cmx/exported_code.cmx \ - middle_end/flambda/from_lambda/lambda_to_flambda.cmx \ - middle_end/flambda/basic/continuation.cmx \ middle_end/flambda/basic/code_id.cmx \ - middle_end/flambda/from_lambda/closure_conversion.cmx \ utils/clflags.cmx \ middle_end/flambda/flambda_middle_end.cmi middle_end/flambda/flambda_middle_end.cmi : \ @@ -4101,6 +4097,7 @@ middle_end/flambda/flambda_middle_end.cmo : \ utils/profile.cmi \ middle_end/flambda/parser/print_fexpr.cmi \ utils/misc.cmi \ + middle_end/flambda/from_lambda/lambda_to_flambda.cmi \ middle_end/flambda/inlining/inlining_report.cmi \ middle_end/flambda/terms/flambda_unit.cmi \ middle_end/flambda/parser/flambda_to_fexpr.cmi \ @@ -4109,10 +4106,7 @@ middle_end/flambda/flambda_middle_end.cmo : \ middle_end/flambda/terms/flambda.cmi \ middle_end/flambda/parser/fexpr.cmo \ middle_end/flambda/cmx/exported_code.cmi \ - middle_end/flambda/from_lambda/lambda_to_flambda.cmi \ - middle_end/flambda/basic/continuation.cmi \ middle_end/flambda/basic/code_id.cmi \ - middle_end/flambda/from_lambda/closure_conversion.cmi \ utils/clflags.cmi \ middle_end/flambda/flambda_middle_end.cmi middle_end/flambda/flambda_middle_end.cmx : \ @@ -4120,6 +4114,7 @@ middle_end/flambda/flambda_middle_end.cmx : \ utils/profile.cmx \ middle_end/flambda/parser/print_fexpr.cmx \ utils/misc.cmx \ + middle_end/flambda/from_lambda/lambda_to_flambda.cmx \ middle_end/flambda/inlining/inlining_report.cmx \ middle_end/flambda/terms/flambda_unit.cmx \ middle_end/flambda/parser/flambda_to_fexpr.cmx \ @@ -4128,10 +4123,7 @@ middle_end/flambda/flambda_middle_end.cmx : \ middle_end/flambda/terms/flambda.cmx \ middle_end/flambda/parser/fexpr.cmx \ middle_end/flambda/cmx/exported_code.cmx \ - middle_end/flambda/from_lambda/lambda_to_flambda.cmx \ - middle_end/flambda/basic/continuation.cmx \ middle_end/flambda/basic/code_id.cmx \ - middle_end/flambda/from_lambda/closure_conversion.cmx \ utils/clflags.cmx \ middle_end/flambda/flambda_middle_end.cmi middle_end/flambda/flambda_middle_end.cmi : \ @@ -4848,7 +4840,6 @@ middle_end/flambda/from_lambda/closure_conversion.cmo : \ middle_end/flambda/basic/simple.cmi \ middle_end/flambda/terms/set_of_closures.cmi \ middle_end/flambda/basic/reg_width_const.cmi \ - middle_end/flambda/basic/recursive.cmi \ typing/primitive.cmi \ middle_end/flambda/basic/or_variable.cmi \ utils/numbers.cmi \ @@ -4886,6 +4877,7 @@ middle_end/flambda/from_lambda/closure_conversion.cmo : \ middle_end/flambda/terms/call_kind.cmi \ middle_end/flambda/terms/bound_symbols.cmi \ middle_end/flambda/naming/bindable_let_bound.cmi \ + parsing/asttypes.cmi \ middle_end/flambda/terms/apply_cont_expr.cmi \ middle_end/flambda/from_lambda/closure_conversion.cmi middle_end/flambda/from_lambda/closure_conversion.cmx : \ @@ -4901,7 +4893,6 @@ middle_end/flambda/from_lambda/closure_conversion.cmx : \ middle_end/flambda/basic/simple.cmx \ middle_end/flambda/terms/set_of_closures.cmx \ middle_end/flambda/basic/reg_width_const.cmx \ - middle_end/flambda/basic/recursive.cmx \ typing/primitive.cmx \ middle_end/flambda/basic/or_variable.cmx \ utils/numbers.cmx \ @@ -4939,18 +4930,23 @@ middle_end/flambda/from_lambda/closure_conversion.cmx : \ middle_end/flambda/terms/call_kind.cmx \ middle_end/flambda/terms/bound_symbols.cmx \ middle_end/flambda/naming/bindable_let_bound.cmx \ + parsing/asttypes.cmi \ middle_end/flambda/terms/apply_cont_expr.cmx \ middle_end/flambda/from_lambda/closure_conversion.cmi middle_end/flambda/from_lambda/closure_conversion.cmi : \ - middle_end/flambda/from_lambda/closure_conversion_aux.cmi \ + lambda/lambda.cmi \ typing/ident.cmi \ middle_end/flambda/terms/flambda_unit.cmi \ - middle_end/flambda/flambda_backend_intf.cmi + middle_end/flambda/flambda_backend_intf.cmi \ + middle_end/flambda/basic/continuation.cmi \ + middle_end/flambda/from_lambda/closure_conversion_aux.cmi \ + parsing/asttypes.cmi middle_end/flambda/from_lambda/closure_conversion_aux.cmo : \ middle_end/flambda/compilenv_deps/variable.cmi \ middle_end/flambda/compilenv_deps/symbol.cmi \ middle_end/flambda/basic/simple.cmi \ middle_end/flambda/basic/recursive.cmi \ + lambda/printlambda.cmi \ utils/numbers.cmi \ middle_end/flambda/naming/name_occurrences.cmi \ middle_end/flambda/naming/name_mode.cmi \ @@ -4971,6 +4967,7 @@ middle_end/flambda/from_lambda/closure_conversion_aux.cmx : \ middle_end/flambda/compilenv_deps/symbol.cmx \ middle_end/flambda/basic/simple.cmx \ middle_end/flambda/basic/recursive.cmx \ + lambda/printlambda.cmx \ utils/numbers.cmx \ middle_end/flambda/naming/name_occurrences.cmx \ middle_end/flambda/naming/name_mode.cmx \ @@ -5006,47 +5003,6 @@ middle_end/flambda/from_lambda/closure_conversion_aux.cmi : \ middle_end/flambda/basic/code_id.cmi \ middle_end/flambda/basic/closure_id.cmi \ middle_end/flambda/naming/bindable_let_bound.cmi -middle_end/flambda/from_lambda/lambda_to_flambda.cmo : \ - lambda/tag.cmi \ - lambda/simplif.cmi \ - lambda/printlambda.cmi \ - typing/primitive.cmi \ - utils/numbers.cmi \ - utils/misc.cmi \ - lambda/matching.cmi \ - parsing/location.cmi \ - middle_end/flambda/from_lambda/lambda_conversions.cmi \ - lambda/lambda.cmi \ - typing/ident.cmi \ - middle_end/flambda/basic/continuation.cmi \ - middle_end/flambda/compilenv_deps/compilation_unit.cmi \ - parsing/asttypes.cmi \ - middle_end/flambda/flambda_backend_intf.cmi \ - middle_end/flambda/from_lambda/closure_conversion_aux.cmi \ - middle_end/flambda/from_lambda/closure_conversion.cmi \ - middle_end/flambda/from_lambda/lambda_to_flambda.cmi -middle_end/flambda/from_lambda/lambda_to_flambda.cmx : \ - lambda/tag.cmx \ - lambda/simplif.cmx \ - lambda/printlambda.cmx \ - typing/primitive.cmx \ - utils/numbers.cmx \ - utils/misc.cmx \ - lambda/matching.cmx \ - parsing/location.cmx \ - middle_end/flambda/from_lambda/lambda_conversions.cmx \ - lambda/lambda.cmx \ - typing/ident.cmx \ - middle_end/flambda/basic/continuation.cmx \ - middle_end/flambda/compilenv_deps/compilation_unit.cmx \ - parsing/asttypes.cmi \ - middle_end/flambda/flambda_backend_intf.cmi \ - middle_end/flambda/from_lambda/closure_conversion_aux.cmx \ - middle_end/flambda/from_lambda/closure_conversion.cmx \ - middle_end/flambda/from_lambda/lambda_to_flambda.cmi -middle_end/flambda/from_lambda/lambda_to_flambda.cmi : \ - middle_end/flambda/flambda_backend_intf.cmi \ - lambda/lambda.cmi middle_end/flambda/from_lambda/lambda_conversions.cmo : \ middle_end/flambda/basic/trap_action.cmi \ utils/targetint.cmi \ @@ -5086,6 +5042,59 @@ middle_end/flambda/from_lambda/lambda_conversions.cmi : \ middle_end/flambda/terms/flambda_primitive.cmi \ middle_end/flambda/types/kinds/flambda_kind.cmi \ middle_end/flambda/terms/call_kind.cmi +middle_end/flambda/from_lambda/lambda_to_flambda.cmo : \ + middle_end/flambda/compilenv_deps/variable.cmi \ + lambda/tag.cmi \ + utils/strongly_connected_components.cmi \ + lambda/simplif.cmi \ + middle_end/flambda/basic/recursive.cmi \ + lambda/printlambda.cmi \ + typing/primitive.cmi \ + utils/numbers.cmi \ + utils/misc.cmi \ + lambda/matching.cmi \ + parsing/location.cmi \ + middle_end/flambda/from_lambda/lambda_conversions.cmi \ + lambda/lambda.cmi \ + typing/ident.cmi \ + middle_end/flambda/terms/flambda_unit.cmi \ + middle_end/flambda/basic/continuation.cmi \ + middle_end/flambda/compilenv_deps/compilation_unit.cmi \ + middle_end/flambda/basic/closure_id.cmi \ + middle_end/flambda/from_lambda/closure_conversion_aux.cmi \ + middle_end/flambda/from_lambda/closure_conversion.cmi \ + utils/clflags.cmi \ + parsing/asttypes.cmi \ + middle_end/flambda/from_lambda/lambda_to_flambda.cmi +middle_end/flambda/from_lambda/lambda_to_flambda.cmx : \ + middle_end/flambda/compilenv_deps/variable.cmx \ + lambda/tag.cmx \ + utils/strongly_connected_components.cmx \ + lambda/simplif.cmx \ + middle_end/flambda/basic/recursive.cmx \ + lambda/printlambda.cmx \ + typing/primitive.cmx \ + utils/numbers.cmx \ + utils/misc.cmx \ + lambda/matching.cmx \ + parsing/location.cmx \ + middle_end/flambda/from_lambda/lambda_conversions.cmx \ + lambda/lambda.cmx \ + typing/ident.cmx \ + middle_end/flambda/terms/flambda_unit.cmx \ + middle_end/flambda/basic/continuation.cmx \ + middle_end/flambda/compilenv_deps/compilation_unit.cmx \ + middle_end/flambda/basic/closure_id.cmx \ + middle_end/flambda/from_lambda/closure_conversion_aux.cmx \ + middle_end/flambda/from_lambda/closure_conversion.cmx \ + utils/clflags.cmx \ + parsing/asttypes.cmi \ + middle_end/flambda/from_lambda/lambda_to_flambda.cmi +middle_end/flambda/from_lambda/lambda_to_flambda.cmi : \ + lambda/lambda.cmi \ + typing/ident.cmi \ + middle_end/flambda/terms/flambda_unit.cmi \ + middle_end/flambda/flambda_backend_intf.cmi middle_end/flambda/from_lambda/lambda_to_flambda_primitives.cmo : \ utils/targetint.cmi \ middle_end/flambda/compilenv_deps/target_imm.cmi \ @@ -9153,6 +9162,7 @@ middle_end/flambda/types/flambda_type.cmo : \ middle_end/flambda/types/structures/row_like_maps_to_intf.cmo \ middle_end/flambda/naming/renaming.cmi \ middle_end/flambda/basic/reg_width_const.cmi \ + middle_end/flambda/terms/rec_info_expr.cmi \ middle_end/flambda/compilenv_deps/rec_info.cmi \ middle_end/flambda/types/structures/product_intf.cmo \ utils/printing_cache.cmi \ @@ -9207,6 +9217,7 @@ middle_end/flambda/types/flambda_type.cmx : \ middle_end/flambda/types/structures/row_like_maps_to_intf.cmx \ middle_end/flambda/naming/renaming.cmx \ middle_end/flambda/basic/reg_width_const.cmx \ + middle_end/flambda/terms/rec_info_expr.cmx \ middle_end/flambda/compilenv_deps/rec_info.cmx \ middle_end/flambda/types/structures/product_intf.cmx \ utils/printing_cache.cmx \ @@ -9253,6 +9264,7 @@ middle_end/flambda/types/flambda_type.cmi : \ middle_end/flambda/basic/scope.cmi \ middle_end/flambda/naming/renaming.cmi \ middle_end/flambda/basic/reg_width_const.cmi \ + middle_end/flambda/terms/rec_info_expr.cmi \ middle_end/flambda/compilenv_deps/rec_info.cmi \ utils/printing_cache.cmi \ middle_end/flambda/types/basic/or_unknown_or_bottom.cmi \ @@ -9360,6 +9372,7 @@ middle_end/flambda/types/type_grammar.rec.cmo : \ middle_end/flambda/types/structures/set_of_closures_contents.cmi \ middle_end/flambda/naming/renaming.cmi \ middle_end/flambda/basic/reg_width_const.cmi \ + middle_end/flambda/terms/rec_info_expr.cmi \ utils/printing_cache.cmi \ middle_end/flambda/types/basic/or_unknown_or_bottom.cmi \ middle_end/flambda/types/basic/or_unknown.cmi \ @@ -9383,6 +9396,7 @@ middle_end/flambda/types/type_grammar.rec.cmx : \ middle_end/flambda/types/structures/set_of_closures_contents.cmx \ middle_end/flambda/naming/renaming.cmx \ middle_end/flambda/basic/reg_width_const.cmx \ + middle_end/flambda/terms/rec_info_expr.cmx \ utils/printing_cache.cmx \ middle_end/flambda/types/basic/or_unknown_or_bottom.cmx \ middle_end/flambda/types/basic/or_unknown.cmx \ @@ -9403,6 +9417,7 @@ middle_end/flambda/types/type_grammar.rec.cmi : \ lambda/tag.cmi \ middle_end/flambda/basic/simple.cmi \ middle_end/flambda/basic/reg_width_const.cmi \ + middle_end/flambda/terms/rec_info_expr.cmi \ middle_end/flambda/compilenv_deps/rec_info.cmi \ utils/printing_cache.cmi \ middle_end/flambda/types/basic/or_unknown.cmi \ @@ -10156,6 +10171,21 @@ middle_end/flambda/types/type_of_kind/type_of_kind_naked_nativeint0.rec.cmx : \ middle_end/flambda/types/type_of_kind/type_of_kind_naked_nativeint0.rec.cmi : \ middle_end/flambda/types/type_head_intf.cmo \ utils/targetint.cmi +middle_end/flambda/types/type_of_kind/type_of_kind_rec_info0.rec.cmo : \ + middle_end/flambda/terms/rec_info_expr.cmi \ + middle_end/flambda/types/basic/or_unknown.cmi \ + middle_end/flambda/types/basic/or_bottom.cmi \ + middle_end/flambda/compilenv_deps/coercion.cmi \ + middle_end/flambda/types/type_of_kind/type_of_kind_rec_info0.rec.cmi +middle_end/flambda/types/type_of_kind/type_of_kind_rec_info0.rec.cmx : \ + middle_end/flambda/terms/rec_info_expr.cmx \ + middle_end/flambda/types/basic/or_unknown.cmx \ + middle_end/flambda/types/basic/or_bottom.cmx \ + middle_end/flambda/compilenv_deps/coercion.cmx \ + middle_end/flambda/types/type_of_kind/type_of_kind_rec_info0.rec.cmi +middle_end/flambda/types/type_of_kind/type_of_kind_rec_info0.rec.cmi : \ + middle_end/flambda/types/type_head_intf.cmo \ + middle_end/flambda/terms/rec_info_expr.cmi middle_end/flambda/types/type_of_kind/type_of_kind_value0.rec.cmo : \ middle_end/flambda/types/basic/string_info.cmi \ utils/printing_cache.cmi \ @@ -10232,6 +10262,15 @@ middle_end/flambda/types/type_of_kind/variant.rec.cmi : \ \ middle_end/flambda/types/type_of_kind/boilerplate/type_of_kind_naked_nativeint.rec.cmi : \ middle_end/flambda/types/type_descr_intf.cmo + \ + middle_end/flambda/types/type_of_kind/boilerplate/type_of_kind_rec_info.rec.cmo : \ + middle_end/flambda/types/type_of_kind/boilerplate/type_of_kind_rec_info.rec.cmi + \ + middle_end/flambda/types/type_of_kind/boilerplate/type_of_kind_rec_info.rec.cmx : \ + middle_end/flambda/types/type_of_kind/boilerplate/type_of_kind_rec_info.rec.cmi + \ + middle_end/flambda/types/type_of_kind/boilerplate/type_of_kind_rec_info.rec.cmi : \ + middle_end/flambda/types/type_descr_intf.cmo middle_end/flambda/types/type_of_kind/boilerplate/type_of_kind_value.rec.cmo : \ middle_end/flambda/types/type_of_kind/boilerplate/type_of_kind_value.rec.cmi middle_end/flambda/types/type_of_kind/boilerplate/type_of_kind_value.rec.cmx : \ diff --git a/compilerlibs/Makefile.compilerlibs b/compilerlibs/Makefile.compilerlibs index 84aa08bd2b35..04abdc3bf830 100644 --- a/compilerlibs/Makefile.compilerlibs +++ b/compilerlibs/Makefile.compilerlibs @@ -212,6 +212,7 @@ MIDDLE_END_FLAMBDA_BASIC=\ middle_end/flambda/naming/name_occurrences.cmo \ middle_end/flambda/types/basic/unit.cmo \ middle_end/flambda/basic/or_variable.cmo \ + middle_end/flambda/terms/rec_info_expr.cmo \ middle_end/flambda/basic/simple.cmo \ middle_end/flambda/basic/closure_id.cmo \ middle_end/flambda/cmx/contains_ids.cmo \ @@ -292,7 +293,6 @@ MIDDLE_END_FLAMBDA_TERMS=\ middle_end/flambda/terms/set_of_closures.cmo \ middle_end/flambda/inlining/metrics/code_size.cmo \ middle_end/flambda/inlining/metrics/removed_operations.cmo \ - middle_end/flambda/terms/rec_info_expr.cmo \ middle_end/flambda/terms/flambda.cmo \ middle_end/flambda/terms/flambda_unit.cmo diff --git a/middle_end/flambda/from_lambda/lambda_to_flambda_primitives.ml b/middle_end/flambda/from_lambda/lambda_to_flambda_primitives.ml index b9515d306075..d4d709b22e33 100644 --- a/middle_end/flambda/from_lambda/lambda_to_flambda_primitives.ml +++ b/middle_end/flambda/from_lambda/lambda_to_flambda_primitives.ml @@ -156,26 +156,36 @@ let bigstring_ref ~size_int access_size arg1 arg2 dbg : H.expr_primitive = } let bigarray_box_raw_value_read kind = + let error what = + Misc.fatal_errorf + "Don't know how to unbox %s to store it in a bigarray" + what + in match P.element_kind_of_bigarray_kind kind with | Value -> Fun.id | Naked_number k -> let bi = K.Boxable_number.of_naked_number_kind k in fun arg -> H.Unary (Box_number bi, Prim arg) | Fabricated -> - Misc.fatal_errorf - "Don't know how to unbox a fabricated expression to \ - store it in a bigarray" + error "a fabricated expression" + | Rec_info -> + error "recursion info" let bigarray_unbox_value_to_store kind = + let error what = + Misc.fatal_errorf + "Don't know how to unbox %s to store it in a bigarray" + what + in match P.element_kind_of_bigarray_kind kind with | Value -> Fun.id | Naked_number k -> let bi = K.Boxable_number.of_naked_number_kind k in fun arg -> H.Prim (Unary (Unbox_number bi, arg)) | Fabricated -> - Misc.fatal_errorf - "Don't know how to unbox a fabricated expression to \ - store it in a bigarray" + error "a fabricated expression" + | Rec_info -> + error "recursion info" let bigarray_dim_bound b dimension = H.Prim (Unary (Bigarray_length { dimension }, b)) diff --git a/middle_end/flambda/parser/fexpr.ml b/middle_end/flambda/parser/fexpr.ml index 36f13cb7eb1f..1fdfc883d1af 100644 --- a/middle_end/flambda/parser/fexpr.ml +++ b/middle_end/flambda/parser/fexpr.ml @@ -61,6 +61,7 @@ type kind = | Value | Naked_number of Naked_number_kind.t | Fabricated + | Rec_info type static_structure = { symbol : symbol; diff --git a/middle_end/flambda/parser/fexpr_to_flambda.ml b/middle_end/flambda/parser/fexpr_to_flambda.ml index 66bdba124d4f..2821c953f6f7 100644 --- a/middle_end/flambda/parser/fexpr_to_flambda.ml +++ b/middle_end/flambda/parser/fexpr_to_flambda.ml @@ -207,6 +207,7 @@ let value_kind : Fexpr.kind -> Flambda_kind.With_subkind.t = function | Naked_nativeint -> Flambda_kind.With_subkind.naked_nativeint end | Fabricated -> Misc.fatal_error "Fabricated should not be used" + | Rec_info -> Flambda_kind.With_subkind.rec_info let value_kind_without_subkind kind = Flambda_kind.With_subkind.kind (value_kind kind) diff --git a/middle_end/flambda/parser/flambda_lex.ml b/middle_end/flambda/parser/flambda_lex.ml index 09f51c7d0e80..2b60fad2cb08 100644 --- a/middle_end/flambda/parser/flambda_lex.ml +++ b/middle_end/flambda/parser/flambda_lex.ml @@ -65,6 +65,7 @@ let keyword_table = "newer_version_of", NEWER_VERSION_OF; "noalloc", NOALLOC; "rec", REC; + "rec_info", REC_INFO; "set_of_closures", SET_OF_CLOSURES; "size", SIZE; "stub", STUB; @@ -107,7 +108,7 @@ let prim ~lexbuf str = with Not_found -> error ~lexbuf (No_such_primitive str) -# 111 "flambda_lex.ml" +# 112 "flambda_lex.ml" let __ocaml_lex_tables = { Lexing.lex_base = "\000\000\217\255\218\255\087\000\192\000\020\001\104\001\082\000\ @@ -903,245 +904,245 @@ let rec token lexbuf = and __ocaml_lex_token_rec lexbuf __ocaml_lex_state = match Lexing.new_engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> -# 141 "flambda_lex.mll" +# 142 "flambda_lex.mll" ( Lexing.new_line lexbuf; token lexbuf ) -# 909 "flambda_lex.ml" +# 910 "flambda_lex.ml" | 1 -> -# 143 "flambda_lex.mll" +# 144 "flambda_lex.mll" ( token lexbuf ) -# 914 "flambda_lex.ml" +# 915 "flambda_lex.ml" | 2 -> -# 145 "flambda_lex.mll" +# 146 "flambda_lex.mll" ( comment 1 lexbuf; token lexbuf ) -# 920 "flambda_lex.ml" +# 921 "flambda_lex.ml" | 3 -> -# 148 "flambda_lex.mll" +# 149 "flambda_lex.mll" ( LET ) -# 925 "flambda_lex.ml" +# 926 "flambda_lex.ml" | 4 -> -# 150 "flambda_lex.mll" +# 151 "flambda_lex.mll" ( COLON ) -# 930 "flambda_lex.ml" +# 931 "flambda_lex.ml" | 5 -> -# 152 "flambda_lex.mll" +# 153 "flambda_lex.mll" ( COMMA ) -# 935 "flambda_lex.ml" +# 936 "flambda_lex.ml" | 6 -> -# 154 "flambda_lex.mll" +# 155 "flambda_lex.mll" ( DOT ) -# 940 "flambda_lex.ml" +# 941 "flambda_lex.ml" | 7 -> -# 156 "flambda_lex.mll" +# 157 "flambda_lex.mll" ( SEMICOLON ) -# 945 "flambda_lex.ml" +# 946 "flambda_lex.ml" | 8 -> -# 158 "flambda_lex.mll" +# 159 "flambda_lex.mll" ( EQUAL ) -# 950 "flambda_lex.ml" +# 951 "flambda_lex.ml" | 9 -> -# 160 "flambda_lex.mll" +# 161 "flambda_lex.mll" ( LBRACE ) -# 955 "flambda_lex.ml" +# 956 "flambda_lex.ml" | 10 -> -# 162 "flambda_lex.mll" +# 163 "flambda_lex.mll" ( RBRACE ) -# 960 "flambda_lex.ml" +# 961 "flambda_lex.ml" | 11 -> -# 164 "flambda_lex.mll" +# 165 "flambda_lex.mll" ( LPAREN ) -# 965 "flambda_lex.ml" +# 966 "flambda_lex.ml" | 12 -> -# 166 "flambda_lex.mll" +# 167 "flambda_lex.mll" ( RPAREN ) -# 970 "flambda_lex.ml" +# 971 "flambda_lex.ml" | 13 -> -# 167 "flambda_lex.mll" +# 168 "flambda_lex.mll" ( PLUS ) -# 975 "flambda_lex.ml" +# 976 "flambda_lex.ml" | 14 -> -# 168 "flambda_lex.mll" +# 169 "flambda_lex.mll" ( STAR ) -# 980 "flambda_lex.ml" +# 981 "flambda_lex.ml" | 15 -> -# 169 "flambda_lex.mll" +# 170 "flambda_lex.mll" ( MINUS ) -# 985 "flambda_lex.ml" +# 986 "flambda_lex.ml" | 16 -> -# 170 "flambda_lex.mll" +# 171 "flambda_lex.mll" ( LESS ) -# 990 "flambda_lex.ml" +# 991 "flambda_lex.ml" | 17 -> -# 171 "flambda_lex.mll" +# 172 "flambda_lex.mll" ( GREATER ) -# 995 "flambda_lex.ml" +# 996 "flambda_lex.ml" | 18 -> -# 172 "flambda_lex.mll" +# 173 "flambda_lex.mll" ( LESSEQUAL ) -# 1000 "flambda_lex.ml" +# 1001 "flambda_lex.ml" | 19 -> -# 173 "flambda_lex.mll" +# 174 "flambda_lex.mll" ( GREATEREQUAL ) -# 1005 "flambda_lex.ml" +# 1006 "flambda_lex.ml" | 20 -> -# 174 "flambda_lex.mll" +# 175 "flambda_lex.mll" ( PLUSDOT ) -# 1010 "flambda_lex.ml" +# 1011 "flambda_lex.ml" | 21 -> -# 175 "flambda_lex.mll" +# 176 "flambda_lex.mll" ( MINUSDOT ) -# 1015 "flambda_lex.ml" +# 1016 "flambda_lex.ml" | 22 -> -# 176 "flambda_lex.mll" +# 177 "flambda_lex.mll" ( EQUALDOT ) -# 1020 "flambda_lex.ml" +# 1021 "flambda_lex.ml" | 23 -> -# 177 "flambda_lex.mll" +# 178 "flambda_lex.mll" ( NOTEQUALDOT ) -# 1025 "flambda_lex.ml" +# 1026 "flambda_lex.ml" | 24 -> -# 178 "flambda_lex.mll" +# 179 "flambda_lex.mll" ( LESSDOT ) -# 1030 "flambda_lex.ml" +# 1031 "flambda_lex.ml" | 25 -> -# 179 "flambda_lex.mll" +# 180 "flambda_lex.mll" ( LESSEQUALDOT ) -# 1035 "flambda_lex.ml" +# 1036 "flambda_lex.ml" | 26 -> -# 180 "flambda_lex.mll" +# 181 "flambda_lex.mll" ( MINUSGREATER ) -# 1040 "flambda_lex.ml" +# 1041 "flambda_lex.ml" | 27 -> -# 181 "flambda_lex.mll" +# 182 "flambda_lex.mll" ( AT ) -# 1045 "flambda_lex.ml" +# 1046 "flambda_lex.ml" | 28 -> -# 182 "flambda_lex.mll" +# 183 "flambda_lex.mll" ( PIPE ) -# 1050 "flambda_lex.ml" +# 1051 "flambda_lex.ml" | 29 -> -# 183 "flambda_lex.mll" +# 184 "flambda_lex.mll" ( BIGARROW ) -# 1055 "flambda_lex.ml" +# 1056 "flambda_lex.ml" | 30 -> let -# 184 "flambda_lex.mll" +# 185 "flambda_lex.mll" ident -# 1061 "flambda_lex.ml" +# 1062 "flambda_lex.ml" = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in -# 185 "flambda_lex.mll" +# 186 "flambda_lex.mll" ( ident_or_keyword ident ) -# 1065 "flambda_lex.ml" +# 1066 "flambda_lex.ml" | 31 -> let -# 186 "flambda_lex.mll" +# 187 "flambda_lex.mll" ident -# 1071 "flambda_lex.ml" +# 1072 "flambda_lex.ml" = Lexing.sub_lexeme lexbuf (lexbuf.Lexing.lex_start_pos + 1) (lexbuf.Lexing.lex_curr_pos + -1) in -# 187 "flambda_lex.mll" +# 188 "flambda_lex.mll" ( IDENT ident ) -# 1075 "flambda_lex.ml" +# 1076 "flambda_lex.ml" | 32 -> let -# 188 "flambda_lex.mll" +# 189 "flambda_lex.mll" ident -# 1081 "flambda_lex.ml" +# 1082 "flambda_lex.ml" = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(1) lexbuf.Lexing.lex_mem.(0) in -# 189 "flambda_lex.mll" +# 190 "flambda_lex.mll" ( SYMBOL ident ) -# 1085 "flambda_lex.ml" +# 1086 "flambda_lex.ml" | 33 -> let -# 190 "flambda_lex.mll" +# 191 "flambda_lex.mll" p -# 1091 "flambda_lex.ml" +# 1092 "flambda_lex.ml" = Lexing.sub_lexeme lexbuf (lexbuf.Lexing.lex_start_pos + 1) lexbuf.Lexing.lex_curr_pos in -# 191 "flambda_lex.mll" +# 192 "flambda_lex.mll" ( prim ~lexbuf p ) -# 1095 "flambda_lex.ml" +# 1096 "flambda_lex.ml" | 34 -> let -# 192 "flambda_lex.mll" +# 193 "flambda_lex.mll" lit -# 1101 "flambda_lex.ml" +# 1102 "flambda_lex.ml" = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_mem.(0) and -# 192 "flambda_lex.mll" +# 193 "flambda_lex.mll" modif -# 1106 "flambda_lex.ml" +# 1107 "flambda_lex.ml" = Lexing.sub_lexeme_char_opt lexbuf lexbuf.Lexing.lex_mem.(1) in -# 193 "flambda_lex.mll" +# 194 "flambda_lex.mll" ( INT (lit, modif) ) -# 1110 "flambda_lex.ml" +# 1111 "flambda_lex.ml" | 35 -> let -# 194 "flambda_lex.mll" +# 195 "flambda_lex.mll" lit -# 1116 "flambda_lex.ml" +# 1117 "flambda_lex.ml" = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in -# 195 "flambda_lex.mll" +# 196 "flambda_lex.mll" ( FLOAT (lit |> Float.of_string) ) -# 1120 "flambda_lex.ml" +# 1121 "flambda_lex.ml" | 36 -> let -# 196 "flambda_lex.mll" +# 197 "flambda_lex.mll" lit -# 1126 "flambda_lex.ml" +# 1127 "flambda_lex.ml" = Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in -# 197 "flambda_lex.mll" +# 198 "flambda_lex.mll" ( error ~lexbuf (Invalid_literal lit) ) -# 1130 "flambda_lex.ml" +# 1131 "flambda_lex.ml" | 37 -> -# 198 "flambda_lex.mll" +# 199 "flambda_lex.mll" ( EOF ) -# 1135 "flambda_lex.ml" +# 1136 "flambda_lex.ml" | 38 -> let -# 199 "flambda_lex.mll" +# 200 "flambda_lex.mll" ch -# 1141 "flambda_lex.ml" +# 1142 "flambda_lex.ml" = Lexing.sub_lexeme_char lexbuf lexbuf.Lexing.lex_start_pos in -# 200 "flambda_lex.mll" +# 201 "flambda_lex.mll" ( error ~lexbuf (Illegal_character ch) ) -# 1145 "flambda_lex.ml" +# 1146 "flambda_lex.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_token_rec lexbuf __ocaml_lex_state @@ -1151,25 +1152,25 @@ and comment n lexbuf = and __ocaml_lex_comment_rec n lexbuf __ocaml_lex_state = match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with | 0 -> -# 204 "flambda_lex.mll" +# 205 "flambda_lex.mll" ( Lexing.new_line lexbuf; comment n lexbuf ) -# 1157 "flambda_lex.ml" +# 1158 "flambda_lex.ml" | 1 -> -# 206 "flambda_lex.mll" +# 207 "flambda_lex.mll" ( if n = 1 then () else comment (n-1) lexbuf ) -# 1163 "flambda_lex.ml" +# 1164 "flambda_lex.ml" | 2 -> -# 209 "flambda_lex.mll" +# 210 "flambda_lex.mll" ( comment (n+1) lexbuf ) -# 1168 "flambda_lex.ml" +# 1169 "flambda_lex.ml" | 3 -> -# 211 "flambda_lex.mll" +# 212 "flambda_lex.mll" ( comment n lexbuf ) -# 1173 "flambda_lex.ml" +# 1174 "flambda_lex.ml" | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_comment_rec n lexbuf __ocaml_lex_state diff --git a/middle_end/flambda/parser/flambda_lex.mll b/middle_end/flambda/parser/flambda_lex.mll index a9bc3a9d8dd7..795d8094ead2 100644 --- a/middle_end/flambda/parser/flambda_lex.mll +++ b/middle_end/flambda/parser/flambda_lex.mll @@ -65,6 +65,7 @@ let keyword_table = "newer_version_of", NEWER_VERSION_OF; "noalloc", NOALLOC; "rec", REC; + "rec_info", REC_INFO; "set_of_closures", SET_OF_CLOSURES; "size", SIZE; "stub", STUB; diff --git a/middle_end/flambda/parser/flambda_parser.ml b/middle_end/flambda/parser/flambda_parser.ml index 5e00712e2c27..2cab0aeab8f5 100644 --- a/middle_end/flambda/parser/flambda_parser.ml +++ b/middle_end/flambda/parser/flambda_parser.ml @@ -18,7 +18,7 @@ module MenhirBasics = struct | UNIT | TUPLED | SYMBOL of ( -# 120 "flambda_parser.mly" +# 121 "flambda_parser.mly" (string) # 24 "flambda_parser-in.ml" ) @@ -29,6 +29,7 @@ module MenhirBasics = struct | SET_OF_CLOSURES | SEMICOLON | RPAREN + | REC_INFO | REC | RBRACE | PRIM_UNTAG_IMM @@ -67,7 +68,7 @@ module MenhirBasics = struct | INT of ( # 91 "flambda_parser.mly" (string * char option) -# 71 "flambda_parser-in.ml" +# 72 "flambda_parser-in.ml" ) | INLINING_STATE_DEPTH | INLINING_STATE @@ -78,7 +79,7 @@ module MenhirBasics = struct | IDENT of ( # 82 "flambda_parser.mly" (string) -# 82 "flambda_parser-in.ml" +# 83 "flambda_parser-in.ml" ) | HINT | HCF @@ -90,7 +91,7 @@ module MenhirBasics = struct | FLOAT of ( # 74 "flambda_parser.mly" (float) -# 94 "flambda_parser-in.ml" +# 95 "flambda_parser-in.ml" ) | FABRICATED | EXN @@ -172,7 +173,7 @@ let make_const_int (i, m) : const = | Some c -> failwith (Printf.sprintf "Unknown int modifier %c" c) -# 176 "flambda_parser-in.ml" +# 177 "flambda_parser-in.ml" module Tables = struct @@ -182,156 +183,158 @@ module Tables = struct fun _tok -> match _tok with | ALWAYS -> - 92 + 93 | AND -> - 91 + 92 | ANDWHERE -> - 90 + 91 | APPLY -> - 89 + 90 | AT -> - 88 + 89 | BIGARROW -> - 87 + 88 | BLOCK -> - 86 + 87 | CCALL -> - 85 + 86 | CLOSURE -> - 84 + 85 | CODE -> - 83 + 84 | COLON -> - 82 + 83 | COMMA -> - 81 + 82 | CONT -> - 80 + 81 | DEFAULT -> - 79 + 80 | DELETED -> - 78 + 79 | DIRECT -> - 77 + 78 | DONE -> - 76 + 77 | DOT -> - 75 + 76 | END -> - 74 + 75 | EOF -> - 73 + 74 | EQUAL -> - 72 + 73 | EQUALDOT -> - 71 + 72 | ERROR -> - 70 + 71 | EXN -> - 69 + 70 | FABRICATED -> - 68 + 69 | FLOAT _ -> - 67 + 68 | FLOAT_KIND -> - 66 + 67 | GREATER -> - 65 + 66 | GREATERDOT -> - 64 + 65 | GREATEREQUAL -> - 63 + 64 | GREATEREQUALDOT -> - 62 + 63 | HCF -> - 61 + 62 | HINT -> - 60 + 61 | IDENT _ -> - 59 + 60 | IMM -> - 58 + 59 | IMMUTABLE_UNIQUE -> - 57 + 58 | IN -> - 56 + 57 | INLINE -> - 55 + 56 | INLINING_STATE -> - 54 + 55 | INLINING_STATE_DEPTH -> - 53 + 54 | INT _ -> - 52 + 53 | INT32 -> - 51 + 52 | INT64 -> - 50 + 51 | LBRACE -> - 49 + 50 | LESS -> - 48 + 49 | LESSDOT -> - 47 + 48 | LESSEQUAL -> - 46 + 47 | LESSEQUALDOT -> - 45 + 46 | LET -> - 44 + 45 | LPAREN -> - 43 + 44 | MINUS -> - 42 + 43 | MINUSDOT -> - 41 + 42 | MINUSGREATER -> - 40 + 41 | MUTABLE -> - 39 + 40 | NATIVEINT -> - 38 + 39 | NEVER -> - 37 + 38 | NEWER_VERSION_OF -> - 36 + 37 | NOALLOC -> - 35 + 36 | NOTEQUALDOT -> - 34 + 35 | PIPE -> - 33 + 34 | PLUS -> - 32 + 33 | PLUSDOT -> - 31 + 32 | PRIM_BLOCK -> - 30 + 31 | PRIM_BLOCK_LOAD -> - 29 + 30 | PRIM_GET_TAG -> - 28 + 29 | PRIM_INT_COMP -> - 27 + 28 | PRIM_IS_INT -> - 26 + 27 | PRIM_OPAQUE -> - 25 + 26 | PRIM_PHYS_EQ -> - 24 + 25 | PRIM_PHYS_NE -> - 23 + 24 | PRIM_PROJECT_VAR -> - 22 + 23 | PRIM_SELECT_CLOSURE -> - 21 + 22 | PRIM_TAG_IMM -> - 20 + 21 | PRIM_UNTAG_IMM -> - 19 + 20 | RBRACE -> - 18 + 19 | REC -> + 18 + | REC_INFO -> 17 | RPAREN -> 16 @@ -524,6 +527,8 @@ module Tables = struct Obj.repr () | REC -> Obj.repr () + | REC_INFO -> + Obj.repr () | RPAREN -> Obj.repr () | SEMICOLON -> @@ -558,22 +563,22 @@ module Tables = struct Obj.repr () and default_reduction = - (8, "\000\006\000\189 \204!\172\171\000\131\b\000\194\000\000'\177\176#\"\000\000\000\000\162\173\000\175\003\188\000\000\164p\187\000\000\000\000\000\000\019\000\030\000\000\024\0263\183\000\000\152\000\000\000\203\000\000\023r\000\207\000\000\166\000\185\000\146\000\000\000\140\000G\000\000\000F\000E\000H\000D\000\000\031\000\000\000\000~\029\139\135\000\000QVUTRSW]\000\000\000\000\000tu\000\000\000\129\128\127l\000\000\160\000\184\186\190\193\192\154\000\000\000Z\000\000\158\000\000^_\000\000\028\000\000\168\000\000\000\000\000.\000\000\148\000\000\005\000\007\000\000\000\000\000\021\000\017\022\000\000\000\000\000J\000I\000\000xw\000\000\000\000\00054\000\000\000\000\000-\004\137\tKf0\000\000\000\000+\000,j\205\000\000\000\000\000\000\000\000d$g%\000\000\000`\000\000\150\000\000\200\199\000\000\000\000\000\202\000\000\000\201\000\000\000Y\143\000\142\198\197\000\182\181\180\179\000\170\000OMPN\144\196\000\000\000\000\195\133\000\015\141\000\000\000\000n\000\r\000z\000<6?=7A9@8C;B:>\000\012\000\000\000\000\000\011b}|{c\191&\000\000\156\027L\000\000\000h\000\000\000ae\000\n\000\000\000/s\001\000\0002\002") + (8, "\000\006\000\190 \205!\173\172\000\132\b\000\195\000\000'\178\177#\"\000\000\000\000\163\174\000\176\003\189\000\000\165q\188\000\000\000\000\000\000\019\000\030\000\000\024\0263\184\000\000\153\000\000\000\204\000\000\023s\000\208\000\000\167\000\186\000\147\000\000\000\141\000G\000\000\000F\000E\000H\000D\000\000\031\000\000\000\000\127\029\140\136\000\000QXVUTRSW^\000\000\000\000\000uv\000\000\000\130\129\128m\000\000\161\000\185\187\191\194\193\155\000\000\000[\000\000\159\000\000_`\000\000\028\000\000\169\000\000\000\000\000.\000\000\149\000\000\005\000\007\000\000\000\000\000\021\000\017\022\000\000\000\000\000J\000I\000\000yx\000\000\000\000\00054\000\000\000\000\000-\004\138\tKg0\000\000\000\000+\000,k\206\000\000\000\000\000\000\000\000e$h%\000\000\000a\000\000\151\000\000\201\200\000\000\000\000\000\203\000\000\000\202\000\000\000Z\144\000\143\199\198\000\183\182\181\180\000\171\000OMPN\145\197\000\000\000\000\196\134\000\015\142\000\000\000\000o\000\r\000{\000<6?=7A9@8C;B:>\000\012\000\000\000\000\000\011c~}|d\192&\000\000\157\027L\000\000\000i\000\000\000bf\000\n\000\000\000/t\001\000\0002\002") and error = - (93, "\002 \000\000\000\024\000\004\000\000\128@\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\002\004\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\003\000\004\000\002\000\000D\000\002\000\t\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\000\b\000\000\000\000\136\000\004\000\019\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\002\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\0000\000@\000 \b\000@\000 \000\152\001\000\000\000\000\000 @@\000\000\000\000\016\000\000\000\000\000\000\000\b\000\000@\000\000\000\000\b\016\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\016\000\b\000\000\016\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\000\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\004\000!\000\000\000\000\000\b\000\000\b\000\001\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\b\000\004\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\016\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\128\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\001\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000 \000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\128\000\000\000\000\016 \000\000\000\000\000\000\000\000\000\000\000\000\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\001 \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\002\000 \000\000\000\000\136\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\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\b\000\000\000\000\000\000\000\000\000\000\016\000\000 \000\004\000 \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\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\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\004\000\004\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\004\000`@P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\001\000!\000\000\000\000\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\001@\000\000\000\000\001\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\016\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000 @\000\000\000\004\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\016\000\000\128\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\001\000\001\000\000 \000\000\000\000\000\000\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\000\000\000\000\128\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@\001\016\000\000\000 \003\002\002\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\017\000\000\000\002\0000 (\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\002 \000\000 \000 \000 \000\004 \000\000\000\004\000`@P\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\002\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\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@\001\016\000\000\000 \003\002\002\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000D\000\000\000\003\000\000\128\000\016\b\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\b\128\000\000\000 \006 \000\b\b\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\002\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\128\128\024\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\000D\000\000\000\001\0001\000\000\000\000\000 \000\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\128\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \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\001\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\136\000\000\000\016\001\129\001@\000\000\000\000\000\000\000 \000\000\000\000\000\000\"\000\000\000\004\000`@P\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\018\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\128\016@\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\192\001\000\000\000\000\001\000\000\128\002&\001\012\000\000\000\000\t\000D\000\0170\b@\000\000\000\000H\002 \000\136\000\000\000\000\000\000\000@\016\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\001\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\000\000D\000\000\000\003\000\000\128\000\016\b\000B\000\000\000\000\000\016\000\000\016\002\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\004@\000\000\0000\000\b\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\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\136\000\000\000\006\000\001\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\b\000\000\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\016\000\000\000@\031\254\000\000\b\016\016\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\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\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\000\b \000\000\000\000\000@\000\000\000\b\000\192\128\160\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\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\b\n\192\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\005\000\002\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001@\000\160\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\132\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\016\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\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\128\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@\128\000\000\000\b\016\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\000\000\000\129\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\006\129\158\002\015\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\004\b\b\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\b\016\016\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\016\000\000\000\000\002\004\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\b\000\000\000\000\b\000\004\000\019\000\b\000\000\000\000\000\b\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\002\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\004@\000\000\0000\000\b\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\002\000\000\000\000\000D\000\000\000\003\000\000\128\000\016\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\001\016\000\000\000\012\000\002\000\000@ \000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\136\000\000\000\006\000\001\000\000 \016\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") + (94, "\002 \000\000\000\012\000\002\000\000@ \000\000\000\000\000\000\000\000\000\000\000\000\004\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\000\000\000\000\000\000\000\000\000\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\002\000\000\128\000\017\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\128\000\000\000\004@\000 \000\152\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\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\001\128\002\000\000\128 \001\000\000\128\002`\004\000\000\000\000\000@\128\128\000\000\000\000 \000\000\000\000\000\000\000\b\000\000@\000\000\000\000\004\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\b\000\000\016\000\b\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\002 \000\000\000\012\000\002\000\000@ \001\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\016\000\000\000\000\000\000\000\000\000\000\000\000\004\000\002\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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@\001 \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\016\000\000\000\000\000\000\000\000\004\000\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\016\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\016\000\000\000\000\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\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\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\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\128\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\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\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\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\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\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\128\000\128\000\016\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\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\b\000\000\000\000\000\000\004\003\000\004\000\016\000\000@\006\004\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\001\000\000\000\000 \004 \000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\005\000\000\000\000\000\002\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\000\000\000\004\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\004\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\b\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\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\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\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\016\000D\001\000\000\004\000`@P\000\000\000\000\000\000\000\000\000\000\000\000\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\001\000\000\004\000`@P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\002 \000\000\016\000\016\000\016\000\002\016\000@\000\001\000\024\016\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\016\000D\001\000\000\004\000`@P\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 \000\000\000\012\000\002\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\004@\000\000\000\b\001\136\000\002\002\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\016\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000D\000\000\000\128\128\024\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\017\000\000\000\000 \006 \000\000\000\000\004\000\000\000\000\128\016\128\000\000\000\000\000\000\000\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\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000 \000 \000\000\000\000\004\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@\001\016\004\000\000\016\001\129\001@\000\000\000\000\000\000\000\016\000\000\000\000\000\000\017\000@\000\001\000\024\016\020\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\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\016@\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\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\128\000\000\000\000@\000 \000\137\128B\128\000\000\000\001 \b\128\002&\001\b\000\000\000\000\004\128\"\000\b\128\000\000\000\000\000\000\002\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\128\000\000\004\000\000\000\000\000\000\000\000\000\000\000\016\000\000\002 \000\000\000\012\000\002\000\000@ \001\b\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\016\000\000\000\000\002 \000\000\000\012\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\001\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\136\000\000\000\003\000\000\128\000\016\b\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\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?\252\000\000\016 \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\002\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\002\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\130\000\000\000\000\000\004\000\016\000\000@\006\004\005\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\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000@V\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\b\000\000\000\000\001@\000\160\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\016\128\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\001\000\000\000\002\000\004\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\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\000\000\000\000\000\000\000\b\000B\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\001\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\001\000\000\000\000\000\016 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\0004\012\240\016x \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\004\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\b\000\000\000\000\000\000\001\000\000\000\000\000\016 \000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\016\000\000\000\000\001\002\002\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\002\000\000\000\000\001\000\000\128\002`\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\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\016\000\000\000\000\002 \000\000\000\012\000\002\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\016\000\000\000\000\002 \000\000\000\012\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\002\000\"\000\000\000\000\192\000 \000\004\002\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\136\000\000\000\003\000\000\128\000\016\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") and start = 2 and action = - ((16, "\000\244\000\000\000\019\000\000\000\000\000\000\000\000\000\000\000\000\0008\000\000\000\000\000t\000\000\000K\000\\\000\000\000\000\000\000\000\000\000\000\000H\000\019\000\"\000\019\000\000\000\000\000\017\000\000\000\000\000\000\000\168\0009\000\000\000\000\000\000\000\244\000\026\000\019\000_\000\161\000\210\000\000\000\019\000\000\001\b\000\019\000\000\000\000\000\000\000\000\001\024\000\019\000\000\001\132\000\180\001z\000\000\000\148\000\019\000\000\000\000\001N\000\000\000\027\001\n\000\000\001\136\000\000\000$\000\000\000.\001\200\001\196\000\000\002\016\000\000\001\220\001v\002\022\000\000\002\024\000\000\002\028\000\000\002\030\000\000\000\019\001\196\000\000\001r\001\234\000\019\002\"\000\000\000\000\000\000\000\000\000\144\000\184\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000p\000\026\001\180\000\161\000f\000\000\000\000\0009\001\240\001j\000\000\000\000\000\000\000\000\000\172\000\222\000\000\002(\000\000\000\000\000\000\000\000\000\000\000\000\001\136\000\019\002,\000\000\001:\000\019\000\000\001\170\000\184\000\000\000\000\002\000\000\184\000\000\001@\000\184\000\000\000\019\002\004\000\\\002>\000\\\000\000\000]\000\184\000\000\001\200\000\244\000\000\000\\\000\000\001,\002\004\000\019\001D\002<\000\000\001^\000\000\000\000\001\164\001\150\002\b\001\246\001\196\000\000\002B\000\000\001\212\000\019\000\000\000\000\001\192\000\184\002\022\000\184\002H\000\000\000\000\001\148\002\026\000\\\002T\000\\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001r\000L\000\130\0000\000\000\001\220\000\000\000\000\000\000\000\\\001\170\001\222\001\130\000\026\002\004\002\000\001\130\000\000\000\000\000\000\000\000\002\004\002\002\001\130\000\000\001B\000\019\000\000\001\230\000\019\000\000\000\000\002\"\000\019\002*\000\019\002\\\000\000\000\019\001\232\001\n\000\000\001\180\000\184\002\\\000\000\000\000\001\180\000\000\000\000\000\000\001\006\000\000\000\000\000\000\000\000\000\n\000\000\000R\000\000\000\000\000\000\000\000\000\000\000\000\000f\0009\0016\002\026\000\000\000\000\001\178\000\000\000\000\000f\0009\002.\000\019\000\000\002f\000\000\000\019\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\019\000\000\0022\000\019\001\232\000\019\002l\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\014\000\130\000\000\000\000\000\000\002\004\002\030\000\244\000\000\002\004\002 \000\244\000\000\000\000\002r\000\000\001\230\000\244\002\004\000\000\000\000\000\000\000\244\002\006\000\000\000\000"), (16, "\000\014\001\225\001\006\000>\000\166\002\145\001\194\001\177\000r\004\018\003\166\003\170\003\174\003\198\003\214\003\234\003\242\003\246\003\250\004.\0042\004V\000\014\002A\0006\000\162\002I\000\154\001\"\002\005\002\005\004~\004\130\002\129\004\134\001\026\002r\002\181\002\181\002A\002A\004\138\004\142\000\018\002\005\004\146\004\150\004\154\004\158\002A\000\022\002\161\002\181\002\161\002A\001\026\001\225\002a\000\026\001\185\001\185\000*\004\162\004\166\004\170\004\174\001\161\001\161\002\161\002\181\002\161\004\178\000\022\002A\001\185\000\166\003:\002A\0016\000Z\002\005\001\161\002\021\000\161\002\005\002\137\002\137\004\026\001m\004\030\001\198\001\225\002\181\003>\002A\001\146\001\022\002A\000b\0026\002\137\002\005\002y\001\213\004\"\000B\004&\002A\001\202\002\181\0006\002A\002a\000\170\001\185\002\005\000F\000\130\002\005\002\005\000\014\001\161\000J\002\181\000\157\002A\002\181\002\181\000\006\002A\001\150\001\185\000\n\000a\003B\002\197\002i\002i\001\161\000\226\002\137\002Y\001\154\001\158\001m\001\185\000\238\001\182\001\185\001\185\001\162\002i\001\161\001m\001\142\000M\001\161\002\137\001\166\000M\001\170\002\153\002Q\001\218\000E\000\146\000\150\001\238\004>\003\254\000\022\002\137\002N\002q\002\137\002\137\002\153\002\197\000a\002\197\000=\004\002\004\006\002\130\000=\000\254\000\193\0032\000a\004\n\000\014\002i\000\230\000M\002\197\000\222\002\197\001\169\002\r\000\006\002\153\000\193\002\134\000\n\000M\000M\000a\001\193\002i\000M\002\170\002\142\002\029\002\r\002Y\001\"\002\153\002Q\000=\002\021\000\186\001n\002i\000a\001>\004\246\002i\002\146\002%\000=\000=\000\210\002\153\001\218\000=\002\166\000\146\003b\002&\002\022\000\022\000\193\002\181\000\014\002%\000Z\002\029\001F\000\230\003F\000\186\002\153\003\150\002\021\002\130\001i\002\022\002\186\000\193\000\222\0005\001]\002\029\002%\002\021\0016\001N\003\218\0035\002\021\001\018\001&\000\193\002\134\002.\004N\000\193\002\214\001*\001V\0012\001:\002\142\001B\001J\001i\001R\001Z\001r\001z\001\190\001\214\001\250\000\022\002\030\0022\002B\000\165\002^\002f\002~\002\150\002\162\002\190\002\194\002\206\002\230\002\238\002\246\003\006\003\014\003^\003n\003\138\0035\003\162\003\178\003\186\003\194\003\206\003\226\004B\004b\004n\004\194\004\202\004\210\005\014\005\030\005.\0056\005?\005S")) + ((16, "\000\"\000\000\000\019\000\000\000\000\000\000\000\000\000\000\000\000\000f\000\000\000\000\000\160\000\000\000M\0000\000\000\000\000\000\000\000\000\000\000\000\144\000\019\000\025\000\019\000\000\000\000\000\r\000\000\000\000\000\000\000j\000!\000\000\000\000\000\000\000\"\000\019\000\019\000#\000c\000\000\000\000\000\019\000\000\000\242\000\019\000\000\000\000\000\000\000\000\001\012\000\019\000\000\0006\000P\000\021\000\000\000*\000\019\000\000\000\000\000\190\000\000\000\027\000\021\000\000\000\172\000\000\000j\000\000\001f\001\014\0016\000\000\001\172\000\000\001\164\000N\001\238\000\000\002\000\000\000\002\006\000\000\002\b\000\000\000\019\0016\000\000\000\136\001\214\000\019\002\016\000\000\000\000\000\000\000\000\000\150\000\246\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\134\000\019\001\160\000c\000\156\000\000\000\000\000!\001\220\001V\000\000\000\000\000\000\000\000\000\214\001V\000\000\002\022\000\000\000\000\000\000\000\000\000\000\000\000\000\218\000\019\002\024\000\000\001\188\000\019\000\000\001\148\000\246\000\000\000\000\001\234\000\246\000\000\0014\000\246\000\000\000\019\001\238\0000\002,\0000\000\000\000\188\000\246\000\000\001\182\000\"\000\000\0000\000\000\001&\001\242\000\019\001@\002,\000\000\001\128\000\000\000\000\001\162\001\166\001\250\001\232\0016\000\000\0026\000\000\001r\000\019\000\000\000\000\001\178\000\246\002\b\000\246\002<\000\000\000\000\000\031\002\012\0000\002J\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\150\000.\000:\001\138\000\000\001\164\000\000\000\000\000\000\0000\000\152\001\210\001\156\000\019\000\154\001\244\001\156\000\000\000\000\000\000\000\000\000\154\001\246\001\156\000\000\001\186\000\019\000\000\001\216\000\019\000\000\000\000\002\020\000\019\002\028\000\019\002P\000\000\000\019\001\220\000\021\000\000\001\168\000\246\002P\000\000\000\000\001\168\000\000\000\000\000\000\001\012\000\000\000\000\000\000\000\000\001\134\000\000\001P\000\000\000\000\000\000\000\000\000\000\000\000\000\156\000!\001\204\002\014\000\000\000\000\001\172\000\000\000\000\000\156\000!\002\"\000\019\000\000\002\\\000\000\000\019\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\019\000\000\002&\000\019\001\220\000\019\002b\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\154\002\018\000\"\000\000\000\154\002\020\000\"\000\000\000\000\002h\000\000\001\218\000\"\001\248\000\000\000\000\000\000\000\"\001\250\000\000\000\000"), (16, "\000\014\001\229\001\006\000>\002\133\000\154\002\149\001\181\000\170\001\197\000r\003\170\003\174\003\178\003\202\003\218\003\238\003\246\003\250\003\254\0042\0046\004Z\000\006\002E\002E\002\185\000\n\000\222\000Z\001\165\001\165\004\130\004\134\002E\004\138\000\166\0006\001\198\002E\003>\001\026\004\142\004\146\000\018\001\165\004\150\004\154\004\158\004\162\000\230\000\022\002\t\002\t\002\141\002\141\000\162\001\229\002E\000\026\000E\000\146\000\150\004\166\004\170\004\174\004\178\002\t\002e\002\141\000b\001\026\004\182\002\185\002\185\001\022\000\166\001>\000\222\002\134\002E\001\189\001\189\002E\000B\000*\001\165\000\130\002\185\000\157\000\226\001q\001\229\002E\000\238\000F\001\189\002E\002\138\003F\001F\000J\0039\001\165\002\t\001n\002\185\002\146\002\t\002E\002\141\002E\002)\002E\000\254\002E\000Z\001\165\001\202\001N\002\026\001\165\000a\002}\002e\002\t\001\146\002\141\002)\002\185\002:\001\217\001V\0006\0039\002]\001\206\001\189\002\201\002\t\001\150\002\141\002\t\002\t\002\141\002\141\002\185\002)\001q\001m\002m\002m\000M\002\026\001\189\002\157\000M\001q\001\142\001\186\002\185\001\018\001\154\002\185\002\185\002m\002R\002M\001\189\001m\002\157\001\189\001\189\004\002\001\158\001\162\000a\002v\000a\001&\000\014\002\201\001\166\002\201\001\"\004\006\004\n\001\173\0022\001\242\001\170\000M\001\174\004\014\000\014\002\157\000a\000=\002\201\004\022\002\201\000=\000M\000M\000\193\0036\002m\000M\001*\002]\000\186\002\157\000\006\000a\001\"\004\030\000\n\004\"\002\025\000\193\002!\003J\002U\002m\001\222\002\150\000\210\002\157\002\174\002\218\0012\000\022\004&\002\170\004*\0016\000=\002m\002u\002\025\004\250\002m\002\165\004B\002\165\000\022\002\157\000=\000=\000\186\000\146\003f\000=\002\025\001:\002!\001a\000\161\0005\002\165\000\193\002\165\003\222\001B\002\025\0016\002\190\003B\002\134\002\025\000\165\002!\001J\004R\002\017\001R\001Z\000\193\002U\001r\001z\001\194\001\218\001\254\002\"\0026\002F\002\138\002b\002\017\002j\000\193\002\130\002\154\002\166\000\193\002\146\002\194\002\198\002\210\002\234\002\242\002\250\003\n\002*\003\018\003b\003r\003\142\003\166\003\182\003\190\003\198\003\154\003\210\003\230\004F\004f\004r\004\198\004\206\004\214\005\018\005\"\0052\005:\005C\005W")) and lhs = - (8, "\001\000ba``````__^]]\\\\[[ZZZYXWWVVUTSRRQQPPONMMMMMLKJIIHGFFEEEEEEEEEEEEEEDDDDDCBAA@@@@???????>>==<<;;:9877665433221100//.---,,+++++*)))((''&&%%$$#\"\"\"\"!! \031\031\030\030\029\029\028\028\027\027\026\026\025\025\024\024\023\023\022\022\021\021\020\020\020\019\019\018\018\017\017\017\017\017\016\015\014\r\012\011\n\t\t\t\t\b\007\006\006\006\006\006\006\006\005\004\003\002\002") + (8, "\001\000ba``````__^]]\\\\[[ZZZYXWWVVUTSRRQQPPONMMMMMLKJIIHGFFEEEEEEEEEEEEEEDDDDDCBAA@@@@????????>>==<<;;:9877665433221100//.---,,+++++*)))((''&&%%$$#\"\"\"\"!! \031\031\030\030\029\029\028\028\027\027\026\026\025\025\024\024\023\023\022\022\021\021\020\020\020\019\019\018\018\017\017\017\017\017\016\015\014\r\012\011\n\t\t\t\t\b\007\006\006\006\006\006\006\006\005\004\003\002\002") and goto = - ((16, "\000\026\000\000\000\202\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\000\000\000\000(\000\000\000\000\000f\000\000\000\000\000\000\000\000\000\000\000\006\001\018\000\000\001\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001`\000\000\000\000\000\000\000^\000\t\000\019\000\000\000K\000o\000\000\000\003\000\000\000\017\001\016\000\000\000\000\000\000\000\000\000\000\001\170\000\000\000\240\000\000\000d\000\000\000\000\0016\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\206\000\000\000'\000\000\000\232\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000^\0018\000\000\000\204\000\000\001\190\000\000\000\000\000\000\000\000\000\000\000\000\000\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\027\001\152\000\000\000\000\001\228\000\000\000\168\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\001|\000\022\000\000\000\000\000\000\001P\000\000\000\000\000\"\000\000\000\000\000\000\001N\000\000\000\000\001\166\000\000\001\242\000\000\001b\001j\001f\000\000\001\196\001X\000\000\000\000\000\144\000\000\000\224\000\000\001 \000\000\001\212\001X\000\000\000\000\001P\000\000\000\000\001\152\001\160\000\000\001\134\001\198\000\000\000\000\000\000\000B\001F\000\000\000\000\000\000\001b\000\000\001z\000\000\000\000\000\000\001\234\000\000\001r\001\128\001\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\216\000&\000\000\000\000\000\000\000\000\000\000\000\000\001\128\001\164\000\000\000\232\000\b\002\030\000\000\000\250\000\000\000\000\000\000\000\000\002&\000\000\000\252\000\000\000\000\001:\000\000\000\000\000(\000\000\000\000\000\000\0018\000\000\001\228\000\000\000\000\001\230\000\000\002\"\000\000\001\178\001\180\000\000\000\000\000\000\001\184\000\000\000\000\000\000\002\020\000\000\000\000\000\000\000\000\002\014\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\001\226\0020\001\244\0026\000\000\000\000\001\140\000\000\000\000\001\240\002<\000\000\000\206\000\000\000\000\000\000\001X\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\132\000\000\000\000\001\140\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001x\000\000\000\000\000\000\002N\000\000\000\162\000\000\002P\000\000\000\202\000\000\000\000\000\000\000\000\000\000\000l\000\000\000\000\000\000\000\000\000(\000\000\000\000\000\000"), (16, "\000c\000(\000\128\000-\000\012\000m\000o\0004\000c\000\129\000\130\000;\000\131\000m\000o\000c\000\201\000\129\000\130\000X\000\131\0007\000\030\000\201\000\b\001B\001\029\001F\000\015\000C\000\t\000 \000\r\000\218\0003\000\225\000,\000\183\000\135\000\143\001\031\000m\000o\000\184\000#\000\129\000\130\000\211\000\131\000b\000\201\000-\000\229\001J\0010\000;\000\232\000\201\0003\001M\000\229\000\132\001:\0016\000\232\000\202\001T\000\203\000$\000\020\000\212\000\137\000\202\000>\000\203\000\201\000\144\000\191\000\204\0002\000\147\000\133\001;\000.\000\201\000\204\001Q\001R\000x\000\133\001;\0017\001V\001Q\000y\000A\000\213\000?\001=\000\202\001O\000\203\000\027\000\192\000\201\000\b\000\202\000\b\000\203\001A\000z\000\t\000\204\000\t\0018\0019\001A\000\133\001;\000\204\001K\000\n\000D\000\024\000\202\000{\000\203\001Q\001\026\000\021\000\020\000Y\000\022\000\202\000~\000\203\000H\000\204\000`\000A\0000\000\b\000\b\001A\000a\001@\000\204\000\t\000\t\000\031\001A\000L\001\027\000\202\001E\000\203\000l\000\024\000\024\000\b\0000\000c\000\028\000\026\000x\000\t\000\204\000\183\001A\000\221\000y\000\222\000c\000\184\001I\000=\000\b\001A\000\221\000\221\000\222\000\222\000\t\000\027\000\015\000\027\000}\000 \000\231\000\143\000\021\000Z\001\030\000\022\000\143\000\139\001<\001A\000\b\000\143\000\"\000{\000\b\000\020\000\t\000\223\000\228\000\185\000\t\000\b\000\163\000\143\000\224\000\229\001/\000\t\001?\000\232\0012\000\027\000\027\000\224\000\224\000(\0001\0014\000\146\000-\000\137\0004\000\147\000\158\000\020\000\149\000\173\000\147\000\187\000\027\000-\000[\000\147\000\200\000\174\0006\000\238\000\181\0000\0000\000\189\000t\000u\000\150\000\147\000\151\000\027\000\153\000\156\000\155\000\159\000\168\000\172\000\179\000\178\000\021\000\193\000\213\000\195\001=\000\198\000\206\000\214\000\215\000b\000\219\000\147\000\199\000\027\000\226\000\245\000\250\000\027\000\248\000\252\001\004\001\006\001\011\001\014\000\027\001\015\001\019\001\018\001\021\000\021\001\023\001\024\000\197\001.\001C\001G\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\167\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\240\000\243")) + ((16, "\000\026\000\000\000\202\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\000\000\000\000(\000\000\000\000\000f\000\000\000\000\000\000\000\000\000\000\000\006\001\018\000\000\001\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001`\000\000\000\000\000\000\000^\000\t\000\019\000\000\000K\000o\000\000\000\003\000\000\000\017\001\016\000\000\000\000\000\000\000\000\000\000\001\170\000\000\000\240\000\000\000d\000\000\000\000\0016\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\206\000\000\000'\000\000\000\232\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000^\0018\000\000\000\204\000\000\001\190\000\000\000\000\000\000\000\000\000\000\000\000\000\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\027\001\152\000\000\000\000\001\228\000\000\000\168\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\001|\000\022\000\000\000\000\000\000\001P\000\000\000\000\000\"\000\000\000\000\000\000\001N\000\000\000\000\001\166\000\000\001\242\000\000\001b\001j\001f\000\000\001\196\001X\000\000\000\000\000\144\000\000\000\224\000\000\001 \000\000\001\212\001X\000\000\000\000\001P\000\000\000\000\001\152\001\160\000\000\001\134\001\198\000\000\000\000\000\000\000B\001F\000\000\000\000\000\000\001b\000\000\001z\000\000\000\000\000\000\001\234\000\000\001r\001\128\001\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\216\000&\000\000\000\000\000\000\000\000\000\000\000\000\001\128\001\164\000\000\000\232\000\b\002\030\000\000\000\250\000\000\000\000\000\000\000\000\002&\000\000\000\252\000\000\000\000\001:\000\000\000\000\000(\000\000\000\000\000\000\0018\000\000\001\228\000\000\000\000\001\230\000\000\002\"\000\000\001\178\001\180\000\000\000\000\000\000\001\184\000\000\000\000\000\000\002\020\000\000\000\000\000\000\000\000\002\014\000\000\001\186\000\000\000\000\000\000\000\000\000\000\000\000\001\226\0020\001\244\0026\000\000\000\000\001\140\000\000\000\000\001\240\002<\000\000\000\206\000\000\000\000\000\000\001X\000\000\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\132\000\000\000\000\001\140\000\000\001\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001x\000\000\000\000\000\000\002N\000\000\000\162\000\000\002P\000\000\000\202\000\000\000\000\000\000\000\000\000\000\000l\000\000\000\000\000\000\000\000\000(\000\000\000\000\000\000"), (16, "\000c\000(\000\129\000-\000\012\000n\000p\0004\000c\000\130\000\131\000;\000\132\000n\000p\000c\000\202\000\130\000\131\000X\000\132\0007\000\030\000\202\000\b\001C\001\030\001G\000\015\000C\000\t\000 \000\r\000\219\0003\000\226\000,\000\184\000\136\000\144\001 \000n\000p\000\185\000#\000\130\000\131\000\212\000\132\000b\000\202\000-\000\230\001K\0011\000;\000\233\000\202\0003\001N\000\230\000\133\001;\0017\000\233\000\203\001U\000\204\000$\000\020\000\213\000\138\000\203\000>\000\204\000\202\000\145\000\192\000\205\0002\000\148\000\134\001<\000.\000\202\000\205\001R\001S\000y\000\134\001<\0018\001W\001R\000z\000A\000\214\000?\001>\000\203\001P\000\204\000\027\000\193\000\202\000\b\000\203\000\b\000\204\001B\000{\000\t\000\205\000\t\0019\001:\001B\000\134\001<\000\205\001L\000\n\000D\000\024\000\203\000|\000\204\001R\001\027\000\021\000\020\000Y\000\022\000\203\000\127\000\204\000H\000\205\000`\000A\0000\000\b\000\b\001B\000a\001A\000\205\000\t\000\t\000\031\001B\000L\001\028\000\203\001F\000\204\000m\000\024\000\024\000\b\0000\000c\000\028\000\026\000y\000\t\000\205\000\184\001B\000\222\000z\000\223\000c\000\185\001J\000=\000\b\001B\000\222\000\222\000\223\000\223\000\t\000\027\000\015\000\027\000~\000 \000\232\000\144\000\021\000Z\001\031\000\022\000\144\000\140\001=\001B\000\b\000\144\000\"\000|\000\b\000\020\000\t\000\224\000\229\000\186\000\t\000\b\000\164\000\144\000\225\000\230\0010\000\t\001@\000\233\0013\000\027\000\027\000\225\000\225\000(\0001\0015\000\147\000-\000\138\0004\000\148\000\159\000\020\000\150\000\174\000\148\000\188\000\027\000-\000[\000\148\000\201\000\175\0006\000\239\000\182\0000\0000\000\190\000u\000v\000\151\000\148\000\152\000\027\000\154\000\157\000\156\000\160\000\169\000\173\000\180\000\179\000\021\000\194\000\214\000\196\001>\000\199\000\207\000\215\000\216\000b\000\220\000\148\000\200\000\027\000\227\000\246\000\251\000\027\000\249\000\253\001\005\001\007\001\012\001\015\000\027\001\016\001\020\001\019\001\022\000\021\001\024\001\025\000\198\001/\001D\001H\000\000\000\000\000\000\000\000\000\000\000\000\000\000\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\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\241\000\244")) and semantic_action = [| @@ -598,9 +603,9 @@ module Tables = struct let _startpos = _startpos_cont_ in let _endpos = _endpos_args_ in let _v : 'tv_apply_cont_expr = -# 516 "flambda_parser.mly" +# 518 "flambda_parser.mly" ( { cont; args; trap_action = None } ) -# 604 "flambda_parser-in.ml" +# 609 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -672,7 +677,7 @@ module Tables = struct let _startpos = _startpos_call_kind_ in let _endpos = _endpos_e_ in let _v : 'tv_apply_expr = -# 477 "flambda_parser.mly" +# 479 "flambda_parser.mly" ( let (func, arities) = func in { func; continuation = r; @@ -683,7 +688,7 @@ module Tables = struct inlining_state; arities; } ) -# 687 "flambda_parser-in.ml" +# 692 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -706,9 +711,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_atomic_expr = -# 412 "flambda_parser.mly" +# 414 "flambda_parser.mly" ( Invalid Halt_and_catch_fire ) -# 712 "flambda_parser-in.ml" +# 717 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -731,9 +736,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_atomic_expr = -# 413 "flambda_parser.mly" +# 415 "flambda_parser.mly" ( Invalid Treat_as_unreachable ) -# 737 "flambda_parser-in.ml" +# 742 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -763,9 +768,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_ac_ in let _v : 'tv_atomic_expr = -# 414 "flambda_parser.mly" +# 416 "flambda_parser.mly" ( Apply_cont ac ) -# 769 "flambda_parser-in.ml" +# 774 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -802,9 +807,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_cases_ in let _v : 'tv_atomic_expr = -# 415 "flambda_parser.mly" +# 417 "flambda_parser.mly" ( Switch {scrutinee; cases} ) -# 808 "flambda_parser-in.ml" +# 813 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -834,9 +839,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_e_ in let _v : 'tv_atomic_expr = -# 416 "flambda_parser.mly" +# 418 "flambda_parser.mly" ( Apply e ) -# 840 "flambda_parser-in.ml" +# 845 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -873,9 +878,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_atomic_expr = -# 417 "flambda_parser.mly" +# 419 "flambda_parser.mly" ( e ) -# 879 "flambda_parser-in.ml" +# 884 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -933,9 +938,9 @@ module Tables = struct let _startpos = _startpos_op_ in let _endpos = _endpos__6_ in let _v : 'tv_binop_app = -# 322 "flambda_parser.mly" +# 323 "flambda_parser.mly" ( Binary (op, arg1, arg2) ) -# 939 "flambda_parser-in.ml" +# 944 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -972,9 +977,9 @@ module Tables = struct let _startpos = _startpos_arg1_ in let _endpos = _endpos_arg2_ in let _v : 'tv_binop_app = -# 324 "flambda_parser.mly" +# 325 "flambda_parser.mly" ( Binary (Infix op, arg1, arg2) ) -# 978 "flambda_parser-in.ml" +# 983 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1027,9 +1032,9 @@ module Tables = struct let _4 : unit = Obj.magic _4 in let t : 'tv_tag = Obj.magic t in let m : ( -# 151 "flambda_parser.mly" +# 152 "flambda_parser.mly" (Fexpr.mutability) -# 1033 "flambda_parser-in.ml" +# 1038 "flambda_parser-in.ml" ) = Obj.magic m in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in @@ -1038,12 +1043,12 @@ module Tables = struct let _v : 'tv_block = let elts = # 232 "" ( xs ) -# 1042 "flambda_parser-in.ml" +# 1047 "flambda_parser-in.ml" in -# 331 "flambda_parser.mly" +# 332 "flambda_parser.mly" ( Variadic (Make_block (t, m), elts) ) -# 1047 "flambda_parser-in.ml" +# 1052 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1059,13 +1064,13 @@ module Tables = struct let _startpos = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : ( -# 145 "flambda_parser.mly" +# 146 "flambda_parser.mly" (Fexpr.block_access_field_kind) -# 1065 "flambda_parser-in.ml" +# 1070 "flambda_parser-in.ml" ) = -# 300 "flambda_parser.mly" +# 301 "flambda_parser.mly" ( Any_value ) -# 1069 "flambda_parser-in.ml" +# 1074 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1088,13 +1093,13 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : ( -# 145 "flambda_parser.mly" +# 146 "flambda_parser.mly" (Fexpr.block_access_field_kind) -# 1094 "flambda_parser-in.ml" +# 1099 "flambda_parser-in.ml" ) = -# 301 "flambda_parser.mly" +# 302 "flambda_parser.mly" ( Immediate ) -# 1098 "flambda_parser-in.ml" +# 1103 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1112,7 +1117,7 @@ module Tables = struct let _v : 'tv_boption_NOALLOC_ = # 133 "" ( false ) -# 1116 "flambda_parser-in.ml" +# 1121 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1137,7 +1142,7 @@ module Tables = struct let _v : 'tv_boption_NOALLOC_ = # 135 "" ( true ) -# 1141 "flambda_parser-in.ml" +# 1146 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1155,7 +1160,7 @@ module Tables = struct let _v : 'tv_boption_TUPLED_ = # 133 "" ( false ) -# 1159 "flambda_parser-in.ml" +# 1164 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1180,7 +1185,7 @@ module Tables = struct let _v : 'tv_boption_TUPLED_ = # 135 "" ( true ) -# 1184 "flambda_parser-in.ml" +# 1189 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1196,9 +1201,9 @@ module Tables = struct let _startpos = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_call_kind = -# 490 "flambda_parser.mly" +# 492 "flambda_parser.mly" ( Function Indirect ) -# 1202 "flambda_parser-in.ml" +# 1207 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1249,9 +1254,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : 'tv_call_kind = -# 492 "flambda_parser.mly" +# 494 "flambda_parser.mly" ( Function (Direct { code_id; closure_id }) ) -# 1255 "flambda_parser-in.ml" +# 1260 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1281,9 +1286,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_noalloc_ in let _v : 'tv_call_kind = -# 494 "flambda_parser.mly" +# 496 "flambda_parser.mly" ( C_call { alloc = not noalloc } ) -# 1287 "flambda_parser-in.ml" +# 1292 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1320,9 +1325,9 @@ module Tables = struct let _startpos = _startpos_var_ in let _endpos = _endpos_value_ in let _v : 'tv_closure_element = -# 461 "flambda_parser.mly" +# 463 "flambda_parser.mly" ( { var; value; } ) -# 1326 "flambda_parser-in.ml" +# 1331 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1345,9 +1350,9 @@ module Tables = struct let _startpos = _startpos_v_ in let _endpos = _endpos_v_ in let _v : 'tv_closure_id = -# 606 "flambda_parser.mly" +# 608 "flambda_parser.mly" ( v ) -# 1351 "flambda_parser-in.ml" +# 1356 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1363,9 +1368,9 @@ module Tables = struct let _startpos = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_closure_id_opt = -# 610 "flambda_parser.mly" +# 612 "flambda_parser.mly" ( None ) -# 1369 "flambda_parser-in.ml" +# 1374 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1395,9 +1400,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_cid_ in let _v : 'tv_closure_id_opt = -# 611 "flambda_parser.mly" +# 613 "flambda_parser.mly" ( Some cid ) -# 1401 "flambda_parser-in.ml" +# 1406 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1476,13 +1481,13 @@ module Tables = struct let _startpos = _startpos_header_ in let _endpos = _endpos_body_ in let _v : 'tv_code = -# 205 "flambda_parser.mly" +# 206 "flambda_parser.mly" ( let recursive, inline, id, newer_version_of, code_size = header in { id; newer_version_of; param_arity = None; ret_arity; recursive; inline; params_and_body = Present { params; closure_var; ret_cont; exn_cont; body }; code_size } ) -# 1486 "flambda_parser-in.ml" +# 1491 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1540,12 +1545,12 @@ module Tables = struct let _startpos = _startpos_header_ in let _endpos = _endpos_ret_arity_ in let _v : 'tv_code = -# 216 "flambda_parser.mly" +# 217 "flambda_parser.mly" ( let recursive, inline, id, newer_version_of, code_size = header in { id; newer_version_of; param_arity = Some param_arity; ret_arity = Some ret_arity; recursive; inline; code_size; params_and_body = Deleted } ) -# 1549 "flambda_parser-in.ml" +# 1554 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1603,9 +1608,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_newer_version_of_ in let _v : 'tv_code_header = -# 229 "flambda_parser.mly" +# 230 "flambda_parser.mly" ( recursive, inline, id, newer_version_of, code_size ) -# 1609 "flambda_parser-in.ml" +# 1614 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1628,9 +1633,9 @@ module Tables = struct let _startpos = _startpos_v_ in let _endpos = _endpos_v_ in let _v : 'tv_code_id = -# 599 "flambda_parser.mly" +# 601 "flambda_parser.mly" ( v ) -# 1634 "flambda_parser-in.ml" +# 1639 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1653,9 +1658,9 @@ module Tables = struct let _startpos = _startpos_i_ in let _endpos = _endpos_i_ in let _v : 'tv_code_size = -# 603 "flambda_parser.mly" +# 605 "flambda_parser.mly" ( i ) -# 1659 "flambda_parser-in.ml" +# 1664 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1676,15 +1681,15 @@ module Tables = struct let c : ( # 91 "flambda_parser.mly" (string * char option) -# 1680 "flambda_parser-in.ml" +# 1685 "flambda_parser-in.ml" ) = Obj.magic c in let _endpos__0_ = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _startpos = _startpos_c_ in let _endpos = _endpos_c_ in let _v : 'tv_const = -# 577 "flambda_parser.mly" +# 579 "flambda_parser.mly" ( make_const_int c ) -# 1688 "flambda_parser-in.ml" +# 1693 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1705,15 +1710,15 @@ module Tables = struct let c : ( # 74 "flambda_parser.mly" (float) -# 1709 "flambda_parser-in.ml" +# 1714 "flambda_parser-in.ml" ) = Obj.magic c in let _endpos__0_ = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _startpos = _startpos_c_ in let _endpos = _endpos_c_ in let _v : 'tv_const = -# 578 "flambda_parser.mly" +# 580 "flambda_parser.mly" ( Naked_float c ) -# 1717 "flambda_parser-in.ml" +# 1722 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1736,9 +1741,9 @@ module Tables = struct let _startpos = _startpos_e_ in let _endpos = _endpos_e_ in let _v : 'tv_continuation = -# 627 "flambda_parser.mly" +# 629 "flambda_parser.mly" ( Named e ) -# 1742 "flambda_parser-in.ml" +# 1747 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1761,9 +1766,9 @@ module Tables = struct let _startpos = _startpos_s_ in let _endpos = _endpos_s_ in let _v : 'tv_continuation = -# 628 "flambda_parser.mly" +# 630 "flambda_parser.mly" ( Special s ) -# 1767 "flambda_parser-in.ml" +# 1772 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1786,9 +1791,9 @@ module Tables = struct let _startpos = _startpos_l_ in let _endpos = _endpos_l_ in let _v : 'tv_continuation_body = -# 407 "flambda_parser.mly" +# 409 "flambda_parser.mly" ( l ) -# 1792 "flambda_parser-in.ml" +# 1797 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1811,9 +1816,9 @@ module Tables = struct let _startpos = _startpos_a_ in let _endpos = _endpos_a_ in let _v : 'tv_continuation_body = -# 408 "flambda_parser.mly" +# 410 "flambda_parser.mly" ( a ) -# 1817 "flambda_parser-in.ml" +# 1822 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1864,10 +1869,10 @@ module Tables = struct let _startpos = _startpos_exn_and_stub_ in let _endpos = _endpos_handler_ in let _v : 'tv_continuation_handler = -# 530 "flambda_parser.mly" +# 532 "flambda_parser.mly" ( let is_exn_handler, stub = exn_and_stub in { name; params; stub; is_exn_handler; handler } ) -# 1871 "flambda_parser-in.ml" +# 1876 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1888,7 +1893,7 @@ module Tables = struct let e : ( # 82 "flambda_parser.mly" (string) -# 1892 "flambda_parser-in.ml" +# 1897 "flambda_parser-in.ml" ) = Obj.magic e in let _endpos__0_ = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _startpos = _startpos_e_ in @@ -1896,9 +1901,9 @@ module Tables = struct let _v : 'tv_continuation_id = let _endpos = _endpos_e_ in let _startpos = _startpos_e_ in -# 623 "flambda_parser.mly" +# 625 "flambda_parser.mly" ( make_located e (_startpos, _endpos) ) -# 1902 "flambda_parser-in.ml" +# 1907 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1914,9 +1919,9 @@ module Tables = struct let _startpos = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_exn_and_stub = -# 520 "flambda_parser.mly" +# 522 "flambda_parser.mly" ( false, false ) -# 1920 "flambda_parser-in.ml" +# 1925 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1939,9 +1944,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_exn_and_stub = -# 521 "flambda_parser.mly" +# 523 "flambda_parser.mly" ( false, true ) -# 1945 "flambda_parser-in.ml" +# 1950 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1964,9 +1969,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_exn_and_stub = -# 522 "flambda_parser.mly" +# 524 "flambda_parser.mly" ( true, false ) -# 1970 "flambda_parser-in.ml" +# 1975 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -1996,9 +2001,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_exn_and_stub = -# 523 "flambda_parser.mly" +# 525 "flambda_parser.mly" ( true, true ) -# 2002 "flambda_parser-in.ml" +# 2007 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2028,9 +2033,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : 'tv_exn_and_stub = -# 524 "flambda_parser.mly" +# 526 "flambda_parser.mly" ( true, true ) -# 2034 "flambda_parser-in.ml" +# 2039 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2060,9 +2065,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_cont_ in let _v : 'tv_exn_continuation = -# 178 "flambda_parser.mly" +# 179 "flambda_parser.mly" ( cont ) -# 2066 "flambda_parser-in.ml" +# 2071 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2092,9 +2097,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_cont_ in let _v : 'tv_exn_continuation_id = -# 181 "flambda_parser.mly" +# 182 "flambda_parser.mly" ( cont ) -# 2098 "flambda_parser-in.ml" +# 2103 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2138,13 +2143,13 @@ module Tables = struct let _startpos = _startpos_before_ in let _endpos = _endpos__4_ in let _v : ( -# 147 "flambda_parser.mly" +# 148 "flambda_parser.mly" (Fexpr.expect_test_spec) -# 2144 "flambda_parser-in.ml" +# 2149 "flambda_parser-in.ml" ) = -# 165 "flambda_parser.mly" +# 166 "flambda_parser.mly" ( { before; after } ) -# 2148 "flambda_parser-in.ml" +# 2153 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2167,9 +2172,9 @@ module Tables = struct let _startpos = _startpos_l_ in let _endpos = _endpos_l_ in let _v : 'tv_expr = -# 386 "flambda_parser.mly" +# 388 "flambda_parser.mly" ( l ) -# 2173 "flambda_parser-in.ml" +# 2178 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2192,9 +2197,9 @@ module Tables = struct let _startpos = _startpos_i_ in let _endpos = _endpos_i_ in let _v : 'tv_expr = -# 387 "flambda_parser.mly" +# 389 "flambda_parser.mly" ( i ) -# 2198 "flambda_parser-in.ml" +# 2203 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2224,13 +2229,13 @@ module Tables = struct let _startpos = _startpos_body_ in let _endpos = _endpos__2_ in let _v : ( -# 146 "flambda_parser.mly" +# 147 "flambda_parser.mly" (Fexpr.flambda_unit) -# 2230 "flambda_parser-in.ml" +# 2235 "flambda_parser-in.ml" ) = -# 160 "flambda_parser.mly" +# 161 "flambda_parser.mly" ( body ) -# 2234 "flambda_parser-in.ml" +# 2239 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2274,9 +2279,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_closure_id_ in let _v : 'tv_fun_decl = -# 467 "flambda_parser.mly" +# 469 "flambda_parser.mly" ( { code_id; closure_id; is_tupled } ) -# 2280 "flambda_parser-in.ml" +# 2285 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2299,9 +2304,9 @@ module Tables = struct let _startpos = _startpos_n_ in let _endpos = _endpos_n_ in let _v : 'tv_func_name_with_optional_arities = -# 587 "flambda_parser.mly" +# 589 "flambda_parser.mly" ( n, None ) -# 2305 "flambda_parser-in.ml" +# 2310 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2366,9 +2371,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__7_ in let _v : 'tv_func_name_with_optional_arities = -# 590 "flambda_parser.mly" +# 592 "flambda_parser.mly" ( n, Some ({ params_arity; ret_arity } : function_arities) ) -# 2372 "flambda_parser-in.ml" +# 2377 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2391,9 +2396,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_infix_binop = -# 265 "flambda_parser.mly" +# 266 "flambda_parser.mly" ( Plus ) -# 2397 "flambda_parser-in.ml" +# 2402 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2416,9 +2421,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_infix_binop = -# 266 "flambda_parser.mly" +# 267 "flambda_parser.mly" ( Minus ) -# 2422 "flambda_parser-in.ml" +# 2427 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2441,9 +2446,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_infix_binop = -# 267 "flambda_parser.mly" +# 268 "flambda_parser.mly" ( Lt ) -# 2447 "flambda_parser-in.ml" +# 2452 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2466,9 +2471,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_infix_binop = -# 268 "flambda_parser.mly" +# 269 "flambda_parser.mly" ( Le ) -# 2472 "flambda_parser-in.ml" +# 2477 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2491,9 +2496,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_infix_binop = -# 269 "flambda_parser.mly" +# 270 "flambda_parser.mly" ( Gt ) -# 2497 "flambda_parser-in.ml" +# 2502 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2516,9 +2521,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_infix_binop = -# 270 "flambda_parser.mly" +# 271 "flambda_parser.mly" ( Ge ) -# 2522 "flambda_parser-in.ml" +# 2527 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2541,9 +2546,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_infix_binop = -# 271 "flambda_parser.mly" +# 272 "flambda_parser.mly" ( Plusdot ) -# 2547 "flambda_parser-in.ml" +# 2552 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2566,9 +2571,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_infix_binop = -# 272 "flambda_parser.mly" +# 273 "flambda_parser.mly" ( Minusdot ) -# 2572 "flambda_parser-in.ml" +# 2577 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2591,9 +2596,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_infix_binop = -# 273 "flambda_parser.mly" +# 274 "flambda_parser.mly" ( Eqdot ) -# 2597 "flambda_parser-in.ml" +# 2602 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2616,9 +2621,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_infix_binop = -# 274 "flambda_parser.mly" +# 275 "flambda_parser.mly" ( Neqdot ) -# 2622 "flambda_parser-in.ml" +# 2627 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2641,9 +2646,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_infix_binop = -# 275 "flambda_parser.mly" +# 276 "flambda_parser.mly" ( Lt ) -# 2647 "flambda_parser-in.ml" +# 2652 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2666,9 +2671,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_infix_binop = -# 276 "flambda_parser.mly" +# 277 "flambda_parser.mly" ( Le ) -# 2672 "flambda_parser-in.ml" +# 2677 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2691,9 +2696,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_infix_binop = -# 277 "flambda_parser.mly" +# 278 "flambda_parser.mly" ( Gt ) -# 2697 "flambda_parser-in.ml" +# 2702 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2716,9 +2721,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_infix_binop = -# 278 "flambda_parser.mly" +# 279 "flambda_parser.mly" ( Ge ) -# 2722 "flambda_parser-in.ml" +# 2727 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2762,9 +2767,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_inline = -# 498 "flambda_parser.mly" +# 500 "flambda_parser.mly" ( Always_inline ) -# 2768 "flambda_parser-in.ml" +# 2773 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2808,9 +2813,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_inline = -# 499 "flambda_parser.mly" +# 501 "flambda_parser.mly" ( Hint_inline ) -# 2814 "flambda_parser-in.ml" +# 2819 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2854,9 +2859,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_inline = -# 500 "flambda_parser.mly" +# 502 "flambda_parser.mly" ( Never_inline ) -# 2860 "flambda_parser-in.ml" +# 2865 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2900,9 +2905,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_inline = -# 501 "flambda_parser.mly" +# 503 "flambda_parser.mly" ( Unroll i ) -# 2906 "flambda_parser-in.ml" +# 2911 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2946,9 +2951,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_inline = -# 502 "flambda_parser.mly" +# 504 "flambda_parser.mly" ( Default_inline ) -# 2952 "flambda_parser-in.ml" +# 2957 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -2992,12 +2997,12 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_inlining_state = -# 506 "flambda_parser.mly" +# 508 "flambda_parser.mly" ( (* CR poechsel: Parse the inlining arguments *) Inlining_state.create ~arguments:Inlining_arguments.unknown ~depth:i ) -# 3001 "flambda_parser-in.ml" +# 3006 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3027,9 +3032,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_i_ in let _v : 'tv_inlining_state_depth = -# 512 "flambda_parser.mly" +# 514 "flambda_parser.mly" ( i ) -# 3033 "flambda_parser-in.ml" +# 3038 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3052,9 +3057,9 @@ module Tables = struct let _startpos = _startpos_w_ in let _endpos = _endpos_w_ in let _v : 'tv_inner_expr = -# 396 "flambda_parser.mly" +# 398 "flambda_parser.mly" ( w ) -# 3058 "flambda_parser-in.ml" +# 3063 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3077,9 +3082,9 @@ module Tables = struct let _startpos = _startpos_a_ in let _endpos = _endpos_a_ in let _v : 'tv_inner_expr = -# 397 "flambda_parser.mly" +# 399 "flambda_parser.mly" ( a ) -# 3083 "flambda_parser-in.ml" +# 3088 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3102,13 +3107,13 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : ( -# 150 "flambda_parser.mly" +# 151 "flambda_parser.mly" (Fexpr.ordered_comparison) -# 3108 "flambda_parser-in.ml" +# 3113 "flambda_parser-in.ml" ) = -# 315 "flambda_parser.mly" +# 316 "flambda_parser.mly" ( Lt ) -# 3112 "flambda_parser-in.ml" +# 3117 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3131,13 +3136,13 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : ( -# 150 "flambda_parser.mly" +# 151 "flambda_parser.mly" (Fexpr.ordered_comparison) -# 3137 "flambda_parser-in.ml" +# 3142 "flambda_parser-in.ml" ) = -# 316 "flambda_parser.mly" +# 317 "flambda_parser.mly" ( Gt ) -# 3141 "flambda_parser-in.ml" +# 3146 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3160,13 +3165,13 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : ( -# 150 "flambda_parser.mly" +# 151 "flambda_parser.mly" (Fexpr.ordered_comparison) -# 3166 "flambda_parser-in.ml" +# 3171 "flambda_parser-in.ml" ) = -# 317 "flambda_parser.mly" +# 318 "flambda_parser.mly" ( Le ) -# 3170 "flambda_parser-in.ml" +# 3175 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3189,13 +3194,13 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : ( -# 150 "flambda_parser.mly" +# 151 "flambda_parser.mly" (Fexpr.ordered_comparison) -# 3195 "flambda_parser-in.ml" +# 3200 "flambda_parser-in.ml" ) = -# 318 "flambda_parser.mly" +# 319 "flambda_parser.mly" ( Ge ) -# 3199 "flambda_parser-in.ml" +# 3204 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3218,13 +3223,13 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : ( -# 149 "flambda_parser.mly" +# 150 "flambda_parser.mly" (Fexpr.kind) -# 3224 "flambda_parser-in.ml" +# 3229 "flambda_parser-in.ml" ) = -# 350 "flambda_parser.mly" +# 351 "flambda_parser.mly" ( Value ) -# 3228 "flambda_parser-in.ml" +# 3233 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3247,13 +3252,13 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : ( -# 149 "flambda_parser.mly" +# 150 "flambda_parser.mly" (Fexpr.kind) -# 3253 "flambda_parser-in.ml" +# 3258 "flambda_parser-in.ml" ) = -# 351 "flambda_parser.mly" +# 352 "flambda_parser.mly" ( Naked_number Naked_immediate ) -# 3257 "flambda_parser-in.ml" +# 3262 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3276,13 +3281,13 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : ( -# 149 "flambda_parser.mly" +# 150 "flambda_parser.mly" (Fexpr.kind) -# 3282 "flambda_parser-in.ml" +# 3287 "flambda_parser-in.ml" ) = -# 352 "flambda_parser.mly" +# 353 "flambda_parser.mly" ( Naked_number Naked_float ) -# 3286 "flambda_parser-in.ml" +# 3291 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3305,13 +3310,13 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : ( -# 149 "flambda_parser.mly" +# 150 "flambda_parser.mly" (Fexpr.kind) -# 3311 "flambda_parser-in.ml" +# 3316 "flambda_parser-in.ml" ) = -# 353 "flambda_parser.mly" +# 354 "flambda_parser.mly" ( Naked_number Naked_int32 ) -# 3315 "flambda_parser-in.ml" +# 3320 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3334,13 +3339,13 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : ( -# 149 "flambda_parser.mly" +# 150 "flambda_parser.mly" (Fexpr.kind) -# 3340 "flambda_parser-in.ml" +# 3345 "flambda_parser-in.ml" ) = -# 354 "flambda_parser.mly" +# 355 "flambda_parser.mly" ( Naked_number Naked_int64 ) -# 3344 "flambda_parser-in.ml" +# 3349 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3363,13 +3368,13 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : ( -# 149 "flambda_parser.mly" +# 150 "flambda_parser.mly" (Fexpr.kind) -# 3369 "flambda_parser-in.ml" +# 3374 "flambda_parser-in.ml" ) = -# 355 "flambda_parser.mly" +# 356 "flambda_parser.mly" ( Naked_number Naked_nativeint ) -# 3373 "flambda_parser-in.ml" +# 3378 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3392,13 +3397,42 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : ( -# 149 "flambda_parser.mly" +# 150 "flambda_parser.mly" (Fexpr.kind) -# 3398 "flambda_parser-in.ml" +# 3403 "flambda_parser-in.ml" ) = -# 356 "flambda_parser.mly" +# 357 "flambda_parser.mly" ( Fabricated ) -# 3402 "flambda_parser-in.ml" +# 3407 "flambda_parser-in.ml" + in + { + CamlinternalMenhirLib.EngineTypes.state = _menhir_s; + CamlinternalMenhirLib.EngineTypes.semv = Obj.repr _v; + CamlinternalMenhirLib.EngineTypes.startp = _startpos; + CamlinternalMenhirLib.EngineTypes.endp = _endpos; + CamlinternalMenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.CamlinternalMenhirLib.EngineTypes.stack in + let { + CamlinternalMenhirLib.EngineTypes.state = _menhir_s; + CamlinternalMenhirLib.EngineTypes.semv = _1; + CamlinternalMenhirLib.EngineTypes.startp = _startpos__1_; + CamlinternalMenhirLib.EngineTypes.endp = _endpos__1_; + CamlinternalMenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : ( +# 150 "flambda_parser.mly" + (Fexpr.kind) +# 3432 "flambda_parser-in.ml" + ) = +# 358 "flambda_parser.mly" + ( Rec_info ) +# 3436 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3414,9 +3448,9 @@ module Tables = struct let _startpos = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_kind_arg_opt = -# 368 "flambda_parser.mly" +# 370 "flambda_parser.mly" ( None ) -# 3420 "flambda_parser-in.ml" +# 3454 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3448,18 +3482,18 @@ module Tables = struct } = _menhir_stack in let _3 : unit = Obj.magic _3 in let k : ( -# 149 "flambda_parser.mly" +# 150 "flambda_parser.mly" (Fexpr.kind) -# 3454 "flambda_parser-in.ml" +# 3488 "flambda_parser-in.ml" ) = Obj.magic k in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_kind_arg_opt = -# 369 "flambda_parser.mly" +# 371 "flambda_parser.mly" ( Some k ) -# 3463 "flambda_parser-in.ml" +# 3497 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3496,9 +3530,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_kinded_args = -# 535 "flambda_parser.mly" +# 537 "flambda_parser.mly" ( v ) -# 3502 "flambda_parser-in.ml" +# 3536 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3514,9 +3548,9 @@ module Tables = struct let _startpos = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_kinded_args = -# 536 "flambda_parser.mly" +# 538 "flambda_parser.mly" ( [] ) -# 3520 "flambda_parser-in.ml" +# 3554 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3539,9 +3573,9 @@ module Tables = struct let _startpos = _startpos_param_ in let _endpos = _endpos_param_ in let _v : 'tv_kinded_variable = -# 567 "flambda_parser.mly" +# 569 "flambda_parser.mly" ( { param; kind = None } ) -# 3545 "flambda_parser-in.ml" +# 3579 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3572,9 +3606,9 @@ module Tables = struct }; } = _menhir_stack in let kind : ( -# 149 "flambda_parser.mly" +# 150 "flambda_parser.mly" (Fexpr.kind) -# 3578 "flambda_parser-in.ml" +# 3612 "flambda_parser-in.ml" ) = Obj.magic kind in let _2 : unit = Obj.magic _2 in let param : 'tv_variable = Obj.magic param in @@ -3582,9 +3616,9 @@ module Tables = struct let _startpos = _startpos_param_ in let _endpos = _endpos_kind_ in let _v : 'tv_kinded_variable = -# 568 "flambda_parser.mly" +# 570 "flambda_parser.mly" ( { param; kind = Some kind } ) -# 3588 "flambda_parser-in.ml" +# 3622 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3607,9 +3641,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_kinds = -# 359 "flambda_parser.mly" +# 361 "flambda_parser.mly" ( [] ) -# 3613 "flambda_parser-in.ml" +# 3647 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3632,9 +3666,9 @@ module Tables = struct let _startpos = _startpos_ks_ in let _endpos = _endpos_ks_ in let _v : 'tv_kinds = -# 360 "flambda_parser.mly" +# 362 "flambda_parser.mly" ( ks ) -# 3638 "flambda_parser-in.ml" +# 3672 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3678,9 +3712,9 @@ module Tables = struct let _startpos = _startpos_bindings_ in let _endpos = _endpos_body_ in let _v : 'tv_let__continuation_body_ = -# 444 "flambda_parser.mly" +# 446 "flambda_parser.mly" ( ({ bindings; closure_elements; body } : let_) ) -# 3684 "flambda_parser-in.ml" +# 3718 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3724,9 +3758,9 @@ module Tables = struct let _startpos = _startpos_bindings_ in let _endpos = _endpos_body_ in let _v : 'tv_let__expr_ = -# 444 "flambda_parser.mly" +# 446 "flambda_parser.mly" ( ({ bindings; closure_elements; body } : let_) ) -# 3730 "flambda_parser-in.ml" +# 3764 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3757,9 +3791,9 @@ module Tables = struct }; } = _menhir_stack in let defining_expr : ( -# 152 "flambda_parser.mly" +# 153 "flambda_parser.mly" (Fexpr.named) -# 3763 "flambda_parser-in.ml" +# 3797 "flambda_parser-in.ml" ) = Obj.magic defining_expr in let _2 : unit = Obj.magic _2 in let v : 'tv_kinded_variable = Obj.magic v in @@ -3767,9 +3801,9 @@ module Tables = struct let _startpos = _startpos_v_ in let _endpos = _endpos_defining_expr_ in let _v : 'tv_let_binding = -# 449 "flambda_parser.mly" +# 451 "flambda_parser.mly" ( let { param = var; kind } = v in { var; kind; defining_expr } ) -# 3773 "flambda_parser-in.ml" +# 3807 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3799,9 +3833,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_l_ in let _v : 'tv_let_expr_continuation_body_ = -# 391 "flambda_parser.mly" +# 393 "flambda_parser.mly" ( Let l ) -# 3805 "flambda_parser-in.ml" +# 3839 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3824,9 +3858,9 @@ module Tables = struct let _startpos = _startpos_ls_ in let _endpos = _endpos_ls_ in let _v : 'tv_let_expr_continuation_body_ = -# 392 "flambda_parser.mly" +# 394 "flambda_parser.mly" ( Let_symbol ls ) -# 3830 "flambda_parser-in.ml" +# 3864 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3856,9 +3890,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_l_ in let _v : 'tv_let_expr_expr_ = -# 391 "flambda_parser.mly" +# 393 "flambda_parser.mly" ( Let l ) -# 3862 "flambda_parser-in.ml" +# 3896 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3881,9 +3915,9 @@ module Tables = struct let _startpos = _startpos_ls_ in let _endpos = _endpos_ls_ in let _v : 'tv_let_expr_expr_ = -# 392 "flambda_parser.mly" +# 394 "flambda_parser.mly" ( Let_symbol ls ) -# 3887 "flambda_parser-in.ml" +# 3921 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3934,9 +3968,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_body_ in let _v : 'tv_let_symbol_continuation_body_ = -# 187 "flambda_parser.mly" +# 188 "flambda_parser.mly" ( { bindings; closure_elements; body } ) -# 3940 "flambda_parser-in.ml" +# 3974 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -3987,9 +4021,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_body_ in let _v : 'tv_let_symbol_expr_ = -# 187 "flambda_parser.mly" +# 188 "flambda_parser.mly" ( { bindings; closure_elements; body } ) -# 3993 "flambda_parser-in.ml" +# 4027 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4007,7 +4041,7 @@ module Tables = struct let _v : 'tv_loption_separated_nonempty_list_ANDWHERE_continuation_handler__ = # 142 "" ( [] ) -# 4011 "flambda_parser-in.ml" +# 4045 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4032,7 +4066,7 @@ module Tables = struct let _v : 'tv_loption_separated_nonempty_list_ANDWHERE_continuation_handler__ = # 144 "" ( x ) -# 4036 "flambda_parser-in.ml" +# 4070 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4050,7 +4084,7 @@ module Tables = struct let _v : 'tv_loption_separated_nonempty_list_COMMA_of_kind_value__ = # 142 "" ( [] ) -# 4054 "flambda_parser-in.ml" +# 4088 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4075,7 +4109,7 @@ module Tables = struct let _v : 'tv_loption_separated_nonempty_list_COMMA_of_kind_value__ = # 144 "" ( x ) -# 4079 "flambda_parser-in.ml" +# 4113 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4093,7 +4127,7 @@ module Tables = struct let _v : 'tv_loption_separated_nonempty_list_COMMA_simple__ = # 142 "" ( [] ) -# 4097 "flambda_parser-in.ml" +# 4131 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4118,7 +4152,7 @@ module Tables = struct let _v : 'tv_loption_separated_nonempty_list_COMMA_simple__ = # 144 "" ( x ) -# 4122 "flambda_parser-in.ml" +# 4156 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4136,7 +4170,7 @@ module Tables = struct let _v : 'tv_loption_separated_nonempty_list_PIPE_switch_case__ = # 142 "" ( [] ) -# 4140 "flambda_parser-in.ml" +# 4174 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4161,7 +4195,7 @@ module Tables = struct let _v : 'tv_loption_separated_nonempty_list_PIPE_switch_case__ = # 144 "" ( x ) -# 4165 "flambda_parser-in.ml" +# 4199 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4179,7 +4213,7 @@ module Tables = struct let _v : 'tv_loption_separated_nonempty_list_SEMICOLON_closure_element__ = # 142 "" ( [] ) -# 4183 "flambda_parser-in.ml" +# 4217 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4204,7 +4238,7 @@ module Tables = struct let _v : 'tv_loption_separated_nonempty_list_SEMICOLON_closure_element__ = # 144 "" ( x ) -# 4208 "flambda_parser-in.ml" +# 4242 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4227,9 +4261,9 @@ module Tables = struct let _startpos = _startpos_body_ in let _endpos = _endpos_body_ in let _v : 'tv_module_ = -# 174 "flambda_parser.mly" +# 175 "flambda_parser.mly" ( { body } ) -# 4233 "flambda_parser-in.ml" +# 4267 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4252,13 +4286,13 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : ( -# 151 "flambda_parser.mly" +# 152 "flambda_parser.mly" (Fexpr.mutability) -# 4258 "flambda_parser-in.ml" +# 4292 "flambda_parser-in.ml" ) = -# 295 "flambda_parser.mly" +# 296 "flambda_parser.mly" ( Mutable ) -# 4262 "flambda_parser-in.ml" +# 4296 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4281,13 +4315,13 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : ( -# 151 "flambda_parser.mly" +# 152 "flambda_parser.mly" (Fexpr.mutability) -# 4287 "flambda_parser-in.ml" +# 4321 "flambda_parser-in.ml" ) = -# 296 "flambda_parser.mly" +# 297 "flambda_parser.mly" ( Immutable_unique ) -# 4291 "flambda_parser-in.ml" +# 4325 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4303,13 +4337,13 @@ module Tables = struct let _startpos = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : ( -# 151 "flambda_parser.mly" +# 152 "flambda_parser.mly" (Fexpr.mutability) -# 4309 "flambda_parser-in.ml" +# 4343 "flambda_parser-in.ml" ) = -# 297 "flambda_parser.mly" +# 298 "flambda_parser.mly" ( Immutable ) -# 4313 "flambda_parser-in.ml" +# 4347 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4332,9 +4366,9 @@ module Tables = struct let _startpos = _startpos_s_ in let _endpos = _endpos_s_ in let _v : 'tv_name = -# 582 "flambda_parser.mly" +# 584 "flambda_parser.mly" ( (Symbol s:name) ) -# 4338 "flambda_parser-in.ml" +# 4372 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4357,9 +4391,9 @@ module Tables = struct let _startpos = _startpos_v_ in let _endpos = _endpos_v_ in let _v : 'tv_name = -# 583 "flambda_parser.mly" +# 585 "flambda_parser.mly" ( (Var v:name) ) -# 4363 "flambda_parser-in.ml" +# 4397 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4382,13 +4416,13 @@ module Tables = struct let _startpos = _startpos_s_ in let _endpos = _endpos_s_ in let _v : ( -# 152 "flambda_parser.mly" +# 153 "flambda_parser.mly" (Fexpr.named) -# 4388 "flambda_parser-in.ml" +# 4422 "flambda_parser-in.ml" ) = -# 335 "flambda_parser.mly" +# 336 "flambda_parser.mly" ( Simple s ) -# 4392 "flambda_parser-in.ml" +# 4426 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4418,13 +4452,13 @@ module Tables = struct let _startpos = _startpos_u_ in let _endpos = _endpos_a_ in let _v : ( -# 152 "flambda_parser.mly" +# 153 "flambda_parser.mly" (Fexpr.named) -# 4424 "flambda_parser-in.ml" +# 4458 "flambda_parser-in.ml" ) = -# 336 "flambda_parser.mly" +# 337 "flambda_parser.mly" ( Prim (Unary (u, a)) ) -# 4428 "flambda_parser-in.ml" +# 4462 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4447,13 +4481,13 @@ module Tables = struct let _startpos = _startpos_b_ in let _endpos = _endpos_b_ in let _v : ( -# 152 "flambda_parser.mly" +# 153 "flambda_parser.mly" (Fexpr.named) -# 4453 "flambda_parser-in.ml" +# 4487 "flambda_parser-in.ml" ) = -# 337 "flambda_parser.mly" +# 338 "flambda_parser.mly" ( Prim b ) -# 4457 "flambda_parser-in.ml" +# 4491 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4476,13 +4510,13 @@ module Tables = struct let _startpos = _startpos_b_ in let _endpos = _endpos_b_ in let _v : ( -# 152 "flambda_parser.mly" +# 153 "flambda_parser.mly" (Fexpr.named) -# 4482 "flambda_parser-in.ml" +# 4516 "flambda_parser-in.ml" ) = -# 338 "flambda_parser.mly" +# 339 "flambda_parser.mly" ( Prim b ) -# 4486 "flambda_parser-in.ml" +# 4520 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4505,13 +4539,13 @@ module Tables = struct let _startpos = _startpos_c_ in let _endpos = _endpos_c_ in let _v : ( -# 152 "flambda_parser.mly" +# 153 "flambda_parser.mly" (Fexpr.named) -# 4511 "flambda_parser-in.ml" +# 4545 "flambda_parser-in.ml" ) = -# 339 "flambda_parser.mly" +# 340 "flambda_parser.mly" ( Closure c ) -# 4515 "flambda_parser-in.ml" +# 4549 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4555,9 +4589,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_newer_version_of = -# 233 "flambda_parser.mly" +# 234 "flambda_parser.mly" ( id ) -# 4561 "flambda_parser-in.ml" +# 4595 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4580,13 +4614,13 @@ module Tables = struct let _startpos = _startpos_s_ in let _endpos = _endpos_s_ in let _v : ( -# 153 "flambda_parser.mly" +# 154 "flambda_parser.mly" (Fexpr.of_kind_value) -# 4586 "flambda_parser-in.ml" +# 4620 "flambda_parser-in.ml" ) = -# 561 "flambda_parser.mly" +# 563 "flambda_parser.mly" ( Symbol s ) -# 4590 "flambda_parser-in.ml" +# 4624 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4609,13 +4643,13 @@ module Tables = struct let _startpos = _startpos_v_ in let _endpos = _endpos_v_ in let _v : ( -# 153 "flambda_parser.mly" +# 154 "flambda_parser.mly" (Fexpr.of_kind_value) -# 4615 "flambda_parser-in.ml" +# 4649 "flambda_parser-in.ml" ) = -# 562 "flambda_parser.mly" +# 564 "flambda_parser.mly" ( Dynamically_computed v ) -# 4619 "flambda_parser-in.ml" +# 4653 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4636,21 +4670,21 @@ module Tables = struct let i : ( # 91 "flambda_parser.mly" (string * char option) -# 4640 "flambda_parser-in.ml" +# 4674 "flambda_parser-in.ml" ) = Obj.magic i in let _endpos__0_ = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _startpos = _startpos_i_ in let _endpos = _endpos_i_ in let _v : ( -# 153 "flambda_parser.mly" +# 154 "flambda_parser.mly" (Fexpr.of_kind_value) -# 4648 "flambda_parser-in.ml" +# 4682 "flambda_parser-in.ml" ) = let _endpos = _endpos_i_ in let _startpos = _startpos_i_ in -# 563 "flambda_parser.mly" +# 565 "flambda_parser.mly" ( Tagged_immediate ( make_tagged_immediate ~loc:(_startpos, _endpos) i ) ) -# 4654 "flambda_parser-in.ml" +# 4688 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4668,7 +4702,7 @@ module Tables = struct let _v : 'tv_option_PIPE_ = # 114 "" ( None ) -# 4672 "flambda_parser-in.ml" +# 4706 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4693,7 +4727,7 @@ module Tables = struct let _v : 'tv_option_PIPE_ = # 116 "" ( Some x ) -# 4697 "flambda_parser-in.ml" +# 4731 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4711,7 +4745,7 @@ module Tables = struct let _v : 'tv_option___anonymous_0_ = # 114 "" ( None ) -# 4715 "flambda_parser-in.ml" +# 4749 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4741,14 +4775,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_size_ in let _v : 'tv_option___anonymous_0_ = let x = -# 285 "flambda_parser.mly" +# 286 "flambda_parser.mly" ( size ) -# 4747 "flambda_parser-in.ml" +# 4781 "flambda_parser-in.ml" in # 116 "" ( Some x ) -# 4752 "flambda_parser-in.ml" +# 4786 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4766,7 +4800,7 @@ module Tables = struct let _v : 'tv_option_inline_ = # 114 "" ( None ) -# 4770 "flambda_parser-in.ml" +# 4804 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4791,7 +4825,7 @@ module Tables = struct let _v : 'tv_option_inline_ = # 116 "" ( Some x ) -# 4795 "flambda_parser-in.ml" +# 4829 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4809,7 +4843,7 @@ module Tables = struct let _v : 'tv_option_inlining_state_ = # 114 "" ( None ) -# 4813 "flambda_parser-in.ml" +# 4847 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4834,7 +4868,7 @@ module Tables = struct let _v : 'tv_option_inlining_state_ = # 116 "" ( Some x ) -# 4838 "flambda_parser-in.ml" +# 4872 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4852,7 +4886,7 @@ module Tables = struct let _v : 'tv_option_newer_version_of_ = # 114 "" ( None ) -# 4856 "flambda_parser-in.ml" +# 4890 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4877,7 +4911,7 @@ module Tables = struct let _v : 'tv_option_newer_version_of_ = # 116 "" ( Some x ) -# 4881 "flambda_parser-in.ml" +# 4915 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4898,15 +4932,15 @@ module Tables = struct let i : ( # 91 "flambda_parser.mly" (string * char option) -# 4902 "flambda_parser-in.ml" +# 4936 "flambda_parser-in.ml" ) = Obj.magic i in let _endpos__0_ = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _startpos = _startpos_i_ in let _endpos = _endpos_i_ in let _v : 'tv_plain_int = -# 557 "flambda_parser.mly" +# 559 "flambda_parser.mly" ( make_plain_int i ) -# 4910 "flambda_parser-in.ml" +# 4944 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4949,25 +4983,25 @@ module Tables = struct }; } = _menhir_stack in let field_kind : ( -# 145 "flambda_parser.mly" +# 146 "flambda_parser.mly" (Fexpr.block_access_field_kind) -# 4955 "flambda_parser-in.ml" +# 4989 "flambda_parser-in.ml" ) = Obj.magic field_kind in let size : 'tv_option___anonymous_0_ = Obj.magic size in let tag : 'tv_tag = Obj.magic tag in let mutability : ( -# 151 "flambda_parser.mly" +# 152 "flambda_parser.mly" (Fexpr.mutability) -# 4962 "flambda_parser-in.ml" +# 4996 "flambda_parser-in.ml" ) = Obj.magic mutability in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos_field_kind_ in let _v : 'tv_prefix_binop = -# 287 "flambda_parser.mly" +# 288 "flambda_parser.mly" ( Block_load (Values { tag; size; field_kind }, mutability) ) -# 4971 "flambda_parser-in.ml" +# 5005 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -4997,9 +5031,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_k_ in let _v : 'tv_prefix_binop = -# 288 "flambda_parser.mly" +# 289 "flambda_parser.mly" ( Phys_equal(k, Eq) ) -# 5003 "flambda_parser-in.ml" +# 5037 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5029,9 +5063,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_k_ in let _v : 'tv_prefix_binop = -# 289 "flambda_parser.mly" +# 290 "flambda_parser.mly" ( Phys_equal(k, Neq) ) -# 5035 "flambda_parser-in.ml" +# 5069 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5068,24 +5102,24 @@ module Tables = struct }; } = _menhir_stack in let c : ( -# 150 "flambda_parser.mly" +# 151 "flambda_parser.mly" (Fexpr.ordered_comparison) -# 5074 "flambda_parser-in.ml" +# 5108 "flambda_parser-in.ml" ) = Obj.magic c in let s : 'tv_signed_or_unsigned = Obj.magic s in let i : ( -# 154 "flambda_parser.mly" +# 155 "flambda_parser.mly" (Fexpr.standard_int) -# 5080 "flambda_parser-in.ml" +# 5114 "flambda_parser-in.ml" ) = Obj.magic i in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos_c_ in let _v : 'tv_prefix_binop = -# 292 "flambda_parser.mly" +# 293 "flambda_parser.mly" ( Int_comp (i, s, c) ) -# 5089 "flambda_parser-in.ml" +# 5123 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5101,9 +5135,9 @@ module Tables = struct let _startpos = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_recursive = -# 248 "flambda_parser.mly" +# 249 "flambda_parser.mly" ( Nonrecursive ) -# 5107 "flambda_parser-in.ml" +# 5141 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5126,9 +5160,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_recursive = -# 249 "flambda_parser.mly" +# 250 "flambda_parser.mly" ( Recursive ) -# 5132 "flambda_parser-in.ml" +# 5166 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5144,9 +5178,9 @@ module Tables = struct let _startpos = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_return_arity = -# 363 "flambda_parser.mly" +# 365 "flambda_parser.mly" ( None ) -# 5150 "flambda_parser-in.ml" +# 5184 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5176,9 +5210,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_k_ in let _v : 'tv_return_arity = -# 364 "flambda_parser.mly" +# 366 "flambda_parser.mly" ( Some k ) -# 5182 "flambda_parser-in.ml" +# 5216 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5203,7 +5237,7 @@ module Tables = struct let _v : 'tv_separated_nonempty_list_AND_let_binding_ = # 241 "" ( [ x ] ) -# 5207 "flambda_parser-in.ml" +# 5241 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5242,7 +5276,7 @@ module Tables = struct let _v : 'tv_separated_nonempty_list_AND_let_binding_ = # 243 "" ( x :: xs ) -# 5246 "flambda_parser-in.ml" +# 5280 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5267,7 +5301,7 @@ module Tables = struct let _v : 'tv_separated_nonempty_list_AND_static_closure_binding_ = # 241 "" ( [ x ] ) -# 5271 "flambda_parser-in.ml" +# 5305 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5306,7 +5340,7 @@ module Tables = struct let _v : 'tv_separated_nonempty_list_AND_static_closure_binding_ = # 243 "" ( x :: xs ) -# 5310 "flambda_parser-in.ml" +# 5344 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5331,7 +5365,7 @@ module Tables = struct let _v : 'tv_separated_nonempty_list_AND_symbol_binding_ = # 241 "" ( [ x ] ) -# 5335 "flambda_parser-in.ml" +# 5369 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5370,7 +5404,7 @@ module Tables = struct let _v : 'tv_separated_nonempty_list_AND_symbol_binding_ = # 243 "" ( x :: xs ) -# 5374 "flambda_parser-in.ml" +# 5408 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5395,7 +5429,7 @@ module Tables = struct let _v : 'tv_separated_nonempty_list_ANDWHERE_continuation_handler_ = # 241 "" ( [ x ] ) -# 5399 "flambda_parser-in.ml" +# 5433 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5434,7 +5468,7 @@ module Tables = struct let _v : 'tv_separated_nonempty_list_ANDWHERE_continuation_handler_ = # 243 "" ( x :: xs ) -# 5438 "flambda_parser-in.ml" +# 5472 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5459,7 +5493,7 @@ module Tables = struct let _v : 'tv_separated_nonempty_list_COMMA_kinded_variable_ = # 241 "" ( [ x ] ) -# 5463 "flambda_parser-in.ml" +# 5497 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5498,7 +5532,7 @@ module Tables = struct let _v : 'tv_separated_nonempty_list_COMMA_kinded_variable_ = # 243 "" ( x :: xs ) -# 5502 "flambda_parser-in.ml" +# 5536 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5517,9 +5551,9 @@ module Tables = struct CamlinternalMenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let x : ( -# 153 "flambda_parser.mly" +# 154 "flambda_parser.mly" (Fexpr.of_kind_value) -# 5523 "flambda_parser-in.ml" +# 5557 "flambda_parser-in.ml" ) = Obj.magic x in let _endpos__0_ = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _startpos = _startpos_x_ in @@ -5527,7 +5561,7 @@ module Tables = struct let _v : 'tv_separated_nonempty_list_COMMA_of_kind_value_ = # 241 "" ( [ x ] ) -# 5531 "flambda_parser-in.ml" +# 5565 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5560,9 +5594,9 @@ module Tables = struct let xs : 'tv_separated_nonempty_list_COMMA_of_kind_value_ = Obj.magic xs in let _2 : unit = Obj.magic _2 in let x : ( -# 153 "flambda_parser.mly" +# 154 "flambda_parser.mly" (Fexpr.of_kind_value) -# 5566 "flambda_parser-in.ml" +# 5600 "flambda_parser-in.ml" ) = Obj.magic x in let _endpos__0_ = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _startpos = _startpos_x_ in @@ -5570,7 +5604,7 @@ module Tables = struct let _v : 'tv_separated_nonempty_list_COMMA_of_kind_value_ = # 243 "" ( x :: xs ) -# 5574 "flambda_parser-in.ml" +# 5608 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5595,7 +5629,7 @@ module Tables = struct let _v : 'tv_separated_nonempty_list_COMMA_simple_ = # 241 "" ( [ x ] ) -# 5599 "flambda_parser-in.ml" +# 5633 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5634,7 +5668,7 @@ module Tables = struct let _v : 'tv_separated_nonempty_list_COMMA_simple_ = # 243 "" ( x :: xs ) -# 5638 "flambda_parser-in.ml" +# 5672 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5659,7 +5693,7 @@ module Tables = struct let _v : 'tv_separated_nonempty_list_PIPE_switch_case_ = # 241 "" ( [ x ] ) -# 5663 "flambda_parser-in.ml" +# 5697 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5698,7 +5732,7 @@ module Tables = struct let _v : 'tv_separated_nonempty_list_PIPE_switch_case_ = # 243 "" ( x :: xs ) -# 5702 "flambda_parser-in.ml" +# 5736 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5723,7 +5757,7 @@ module Tables = struct let _v : 'tv_separated_nonempty_list_SEMICOLON_closure_element_ = # 241 "" ( [ x ] ) -# 5727 "flambda_parser-in.ml" +# 5761 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5762,7 +5796,7 @@ module Tables = struct let _v : 'tv_separated_nonempty_list_SEMICOLON_closure_element_ = # 243 "" ( x :: xs ) -# 5766 "flambda_parser-in.ml" +# 5800 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5781,9 +5815,9 @@ module Tables = struct CamlinternalMenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let x : ( -# 149 "flambda_parser.mly" +# 150 "flambda_parser.mly" (Fexpr.kind) -# 5787 "flambda_parser-in.ml" +# 5821 "flambda_parser-in.ml" ) = Obj.magic x in let _endpos__0_ = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _startpos = _startpos_x_ in @@ -5791,7 +5825,7 @@ module Tables = struct let _v : 'tv_separated_nonempty_list_STAR_kind_ = # 241 "" ( [ x ] ) -# 5795 "flambda_parser-in.ml" +# 5829 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5824,9 +5858,9 @@ module Tables = struct let xs : 'tv_separated_nonempty_list_STAR_kind_ = Obj.magic xs in let _2 : unit = Obj.magic _2 in let x : ( -# 149 "flambda_parser.mly" +# 150 "flambda_parser.mly" (Fexpr.kind) -# 5830 "flambda_parser-in.ml" +# 5864 "flambda_parser-in.ml" ) = Obj.magic x in let _endpos__0_ = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _startpos = _startpos_x_ in @@ -5834,7 +5868,7 @@ module Tables = struct let _v : 'tv_separated_nonempty_list_STAR_kind_ = # 243 "" ( x :: xs ) -# 5838 "flambda_parser-in.ml" +# 5872 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5850,9 +5884,9 @@ module Tables = struct let _startpos = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_signed_or_unsigned = -# 311 "flambda_parser.mly" +# 312 "flambda_parser.mly" ( Signed ) -# 5856 "flambda_parser-in.ml" +# 5890 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5875,9 +5909,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_signed_or_unsigned = -# 312 "flambda_parser.mly" +# 313 "flambda_parser.mly" ( Unsigned ) -# 5881 "flambda_parser-in.ml" +# 5915 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5900,9 +5934,9 @@ module Tables = struct let _startpos = _startpos_s_ in let _endpos = _endpos_s_ in let _v : 'tv_simple = -# 593 "flambda_parser.mly" +# 595 "flambda_parser.mly" ( Symbol s ) -# 5906 "flambda_parser-in.ml" +# 5940 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5925,9 +5959,9 @@ module Tables = struct let _startpos = _startpos_v_ in let _endpos = _endpos_v_ in let _v : 'tv_simple = -# 594 "flambda_parser.mly" +# 596 "flambda_parser.mly" ( Var v ) -# 5931 "flambda_parser-in.ml" +# 5965 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5950,9 +5984,9 @@ module Tables = struct let _startpos = _startpos_c_ in let _endpos = _endpos_c_ in let _v : 'tv_simple = -# 595 "flambda_parser.mly" +# 597 "flambda_parser.mly" ( Const c ) -# 5956 "flambda_parser-in.ml" +# 5990 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -5968,9 +6002,9 @@ module Tables = struct let _startpos = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_simple_args = -# 572 "flambda_parser.mly" +# 574 "flambda_parser.mly" ( [] ) -# 5974 "flambda_parser-in.ml" +# 6008 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6007,9 +6041,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : 'tv_simple_args = -# 573 "flambda_parser.mly" +# 575 "flambda_parser.mly" ( s ) -# 6013 "flambda_parser-in.ml" +# 6047 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6032,9 +6066,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_special_continuation = -# 632 "flambda_parser.mly" +# 634 "flambda_parser.mly" ( Done : special_continuation ) -# 6038 "flambda_parser-in.ml" +# 6072 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6057,9 +6091,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_special_continuation = -# 633 "flambda_parser.mly" +# 635 "flambda_parser.mly" ( Error : special_continuation ) -# 6063 "flambda_parser-in.ml" +# 6097 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6075,13 +6109,13 @@ module Tables = struct let _startpos = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : ( -# 154 "flambda_parser.mly" +# 155 "flambda_parser.mly" (Fexpr.standard_int) -# 6081 "flambda_parser-in.ml" +# 6115 "flambda_parser-in.ml" ) = -# 304 "flambda_parser.mly" +# 305 "flambda_parser.mly" ( Tagged_immediate ) -# 6085 "flambda_parser-in.ml" +# 6119 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6104,13 +6138,13 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : ( -# 154 "flambda_parser.mly" +# 155 "flambda_parser.mly" (Fexpr.standard_int) -# 6110 "flambda_parser-in.ml" +# 6144 "flambda_parser-in.ml" ) = -# 305 "flambda_parser.mly" +# 306 "flambda_parser.mly" ( Naked_immediate ) -# 6114 "flambda_parser-in.ml" +# 6148 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6133,13 +6167,13 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : ( -# 154 "flambda_parser.mly" +# 155 "flambda_parser.mly" (Fexpr.standard_int) -# 6139 "flambda_parser-in.ml" +# 6173 "flambda_parser-in.ml" ) = -# 306 "flambda_parser.mly" +# 307 "flambda_parser.mly" ( Naked_int32 ) -# 6143 "flambda_parser-in.ml" +# 6177 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6162,13 +6196,13 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : ( -# 154 "flambda_parser.mly" +# 155 "flambda_parser.mly" (Fexpr.standard_int) -# 6168 "flambda_parser-in.ml" +# 6202 "flambda_parser-in.ml" ) = -# 307 "flambda_parser.mly" +# 308 "flambda_parser.mly" ( Naked_int64 ) -# 6172 "flambda_parser-in.ml" +# 6206 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6191,13 +6225,13 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : ( -# 154 "flambda_parser.mly" +# 155 "flambda_parser.mly" (Fexpr.standard_int) -# 6197 "flambda_parser-in.ml" +# 6231 "flambda_parser-in.ml" ) = -# 308 "flambda_parser.mly" +# 309 "flambda_parser.mly" ( Naked_nativeint ) -# 6201 "flambda_parser-in.ml" +# 6235 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6234,9 +6268,9 @@ module Tables = struct let _startpos = _startpos_symbol_ in let _endpos = _endpos_fun_decl_ in let _v : 'tv_static_closure_binding = -# 237 "flambda_parser.mly" +# 238 "flambda_parser.mly" ( { symbol; fun_decl } ) -# 6240 "flambda_parser-in.ml" +# 6274 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6289,9 +6323,9 @@ module Tables = struct let _4 : unit = Obj.magic _4 in let tag : 'tv_tag = Obj.magic tag in let m : ( -# 151 "flambda_parser.mly" +# 152 "flambda_parser.mly" (Fexpr.mutability) -# 6295 "flambda_parser-in.ml" +# 6329 "flambda_parser-in.ml" ) = Obj.magic m in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in @@ -6300,12 +6334,12 @@ module Tables = struct let _v : 'tv_static_part = let elements = # 232 "" ( xs ) -# 6304 "flambda_parser-in.ml" +# 6338 "flambda_parser-in.ml" in -# 546 "flambda_parser.mly" +# 548 "flambda_parser.mly" ( (Block { tag; mutability = m; elements } : static_part) ) -# 6309 "flambda_parser-in.ml" +# 6343 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6349,9 +6383,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : 'tv_static_set_of_closures = -# 245 "flambda_parser.mly" +# 246 "flambda_parser.mly" ( { bindings; elements } ) -# 6355 "flambda_parser-in.ml" +# 6389 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6388,13 +6422,13 @@ module Tables = struct let _startpos = _startpos_s_ in let _endpos = _endpos_sp_ in let _v : ( -# 148 "flambda_parser.mly" +# 149 "flambda_parser.mly" (Fexpr.static_structure) -# 6394 "flambda_parser-in.ml" +# 6428 "flambda_parser-in.ml" ) = -# 540 "flambda_parser.mly" +# 542 "flambda_parser.mly" ( { symbol = s; kind = None; defining_expr = sp } ) -# 6398 "flambda_parser-in.ml" +# 6432 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6426,12 +6460,12 @@ module Tables = struct let _v : 'tv_switch = let cs = # 232 "" ( xs ) -# 6430 "flambda_parser-in.ml" +# 6464 "flambda_parser-in.ml" in -# 347 "flambda_parser.mly" +# 348 "flambda_parser.mly" ( cs ) -# 6435 "flambda_parser-in.ml" +# 6469 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6468,9 +6502,9 @@ module Tables = struct let _startpos = _startpos_i_ in let _endpos = _endpos_ac_ in let _v : 'tv_switch_case = -# 343 "flambda_parser.mly" +# 344 "flambda_parser.mly" ( i,ac ) -# 6474 "flambda_parser-in.ml" +# 6508 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6489,9 +6523,9 @@ module Tables = struct CamlinternalMenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let e : ( -# 120 "flambda_parser.mly" +# 121 "flambda_parser.mly" (string) -# 6495 "flambda_parser-in.ml" +# 6529 "flambda_parser-in.ml" ) = Obj.magic e in let _endpos__0_ = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _startpos = _startpos_e_ in @@ -6499,9 +6533,9 @@ module Tables = struct let _v : 'tv_symbol = let _endpos = _endpos_e_ in let _startpos = _startpos_e_ in -# 615 "flambda_parser.mly" +# 617 "flambda_parser.mly" ( make_located e (_startpos, _endpos) ) -# 6505 "flambda_parser-in.ml" +# 6539 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6520,17 +6554,17 @@ module Tables = struct CamlinternalMenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let s : ( -# 148 "flambda_parser.mly" +# 149 "flambda_parser.mly" (Fexpr.static_structure) -# 6526 "flambda_parser-in.ml" +# 6560 "flambda_parser-in.ml" ) = Obj.magic s in let _endpos__0_ = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _startpos = _startpos_s_ in let _endpos = _endpos_s_ in let _v : 'tv_symbol_binding = -# 191 "flambda_parser.mly" +# 192 "flambda_parser.mly" ( Block_like s ) -# 6534 "flambda_parser-in.ml" +# 6568 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6553,9 +6587,9 @@ module Tables = struct let _startpos = _startpos_code_ in let _endpos = _endpos_code_ in let _v : 'tv_symbol_binding = -# 192 "flambda_parser.mly" +# 193 "flambda_parser.mly" ( Code code ) -# 6559 "flambda_parser-in.ml" +# 6593 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6578,9 +6612,9 @@ module Tables = struct let _startpos = _startpos_s_ in let _endpos = _endpos_s_ in let _v : 'tv_symbol_binding = -# 193 "flambda_parser.mly" +# 194 "flambda_parser.mly" ( Closure s ) -# 6584 "flambda_parser-in.ml" +# 6618 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6603,9 +6637,9 @@ module Tables = struct let _startpos = _startpos_s_ in let _endpos = _endpos_s_ in let _v : 'tv_symbol_binding = -# 194 "flambda_parser.mly" +# 195 "flambda_parser.mly" ( Set_of_closures s ) -# 6609 "flambda_parser-in.ml" +# 6643 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6626,7 +6660,7 @@ module Tables = struct let tag : ( # 91 "flambda_parser.mly" (string * char option) -# 6630 "flambda_parser-in.ml" +# 6664 "flambda_parser-in.ml" ) = Obj.magic tag in let _endpos__0_ = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _startpos = _startpos_tag_ in @@ -6634,9 +6668,9 @@ module Tables = struct let _v : 'tv_tag = let _endpos = _endpos_tag_ in let _startpos = _startpos_tag_ in -# 553 "flambda_parser.mly" +# 555 "flambda_parser.mly" ( make_tag ~loc:(make_loc (_startpos, _endpos)) tag ) -# 6640 "flambda_parser-in.ml" +# 6674 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6657,15 +6691,15 @@ module Tables = struct let i : ( # 91 "flambda_parser.mly" (string * char option) -# 6661 "flambda_parser-in.ml" +# 6695 "flambda_parser-in.ml" ) = Obj.magic i in let _endpos__0_ = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _startpos = _startpos_i_ in let _endpos = _endpos_i_ in let _v : 'tv_targetint = -# 550 "flambda_parser.mly" +# 552 "flambda_parser.mly" ( make_targetint i ) -# 6669 "flambda_parser-in.ml" +# 6703 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6688,9 +6722,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unop = -# 253 "flambda_parser.mly" +# 254 "flambda_parser.mly" ( Get_tag ) -# 6694 "flambda_parser-in.ml" +# 6728 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6713,9 +6747,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unop = -# 254 "flambda_parser.mly" +# 255 "flambda_parser.mly" ( Is_int ) -# 6719 "flambda_parser-in.ml" +# 6753 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6738,9 +6772,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unop = -# 255 "flambda_parser.mly" +# 256 "flambda_parser.mly" ( Opaque_identity ) -# 6744 "flambda_parser-in.ml" +# 6778 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6763,9 +6797,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unop = -# 256 "flambda_parser.mly" +# 257 "flambda_parser.mly" ( Tag_imm ) -# 6769 "flambda_parser-in.ml" +# 6803 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6788,9 +6822,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : 'tv_unop = -# 257 "flambda_parser.mly" +# 258 "flambda_parser.mly" ( Untag_imm ) -# 6794 "flambda_parser-in.ml" +# 6828 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6834,9 +6868,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_var_ in let _v : 'tv_unop = -# 259 "flambda_parser.mly" +# 260 "flambda_parser.mly" ( Project_var { project_from; var } ) -# 6840 "flambda_parser-in.ml" +# 6874 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6894,9 +6928,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__6_ in let _v : 'tv_unop = -# 262 "flambda_parser.mly" +# 263 "flambda_parser.mly" ( Select_closure { move_from; move_to } ) -# 6900 "flambda_parser-in.ml" +# 6934 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6917,7 +6951,7 @@ module Tables = struct let e : ( # 82 "flambda_parser.mly" (string) -# 6921 "flambda_parser-in.ml" +# 6955 "flambda_parser-in.ml" ) = Obj.magic e in let _endpos__0_ = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _startpos = _startpos_e_ in @@ -6925,9 +6959,9 @@ module Tables = struct let _v : 'tv_var_within_closure = let _endpos = _endpos_e_ in let _startpos = _startpos_e_ in -# 637 "flambda_parser.mly" +# 639 "flambda_parser.mly" ( make_located e (_startpos, _endpos) ) -# 6931 "flambda_parser-in.ml" +# 6965 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -6948,7 +6982,7 @@ module Tables = struct let e : ( # 82 "flambda_parser.mly" (string) -# 6952 "flambda_parser-in.ml" +# 6986 "flambda_parser-in.ml" ) = Obj.magic e in let _endpos__0_ = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _startpos = _startpos_e_ in @@ -6956,9 +6990,9 @@ module Tables = struct let _v : 'tv_variable = let _endpos = _endpos_e_ in let _startpos = _startpos_e_ in -# 619 "flambda_parser.mly" +# 621 "flambda_parser.mly" ( make_located e (_startpos, _endpos) ) -# 6962 "flambda_parser-in.ml" +# 6996 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -7004,12 +7038,12 @@ module Tables = struct let _v : 'tv_where_expr = let handlers = # 232 "" ( xs ) -# 7008 "flambda_parser-in.ml" +# 7042 "flambda_parser-in.ml" in -# 403 "flambda_parser.mly" +# 405 "flambda_parser.mly" ( Let_cont { recursive; body; handlers } ) -# 7013 "flambda_parser-in.ml" +# 7047 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -7025,9 +7059,9 @@ module Tables = struct let _startpos = _menhir_stack.CamlinternalMenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : 'tv_with_closure_elements_opt = -# 453 "flambda_parser.mly" +# 455 "flambda_parser.mly" ( None ) -# 7031 "flambda_parser-in.ml" +# 7065 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -7073,12 +7107,12 @@ module Tables = struct let _v : 'tv_with_closure_elements_opt = let elements = # 232 "" ( xs ) -# 7077 "flambda_parser-in.ml" +# 7111 "flambda_parser-in.ml" in -# 457 "flambda_parser.mly" +# 459 "flambda_parser.mly" ( Some elements ) -# 7082 "flambda_parser-in.ml" +# 7116 "flambda_parser-in.ml" in { CamlinternalMenhirLib.EngineTypes.state = _menhir_s; @@ -7106,46 +7140,46 @@ end let flambda_unit = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 338 lexer lexbuf) : ( -# 146 "flambda_parser.mly" + (Obj.magic (MenhirInterpreter.entry 339 lexer lexbuf) : ( +# 147 "flambda_parser.mly" (Fexpr.flambda_unit) -# 7113 "flambda_parser-in.ml" +# 7147 "flambda_parser-in.ml" )) and expect_test_spec = fun lexer lexbuf -> (Obj.magic (MenhirInterpreter.entry 0 lexer lexbuf) : ( -# 147 "flambda_parser.mly" +# 148 "flambda_parser.mly" (Fexpr.expect_test_spec) -# 7121 "flambda_parser-in.ml" +# 7155 "flambda_parser-in.ml" )) module Incremental = struct let flambda_unit = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 338 initial_position) : ( -# 146 "flambda_parser.mly" + (Obj.magic (MenhirInterpreter.start 339 initial_position) : ( +# 147 "flambda_parser.mly" (Fexpr.flambda_unit) -# 7131 "flambda_parser-in.ml" +# 7165 "flambda_parser-in.ml" ) MenhirInterpreter.checkpoint) and expect_test_spec = fun initial_position -> (Obj.magic (MenhirInterpreter.start 0 initial_position) : ( -# 147 "flambda_parser.mly" +# 148 "flambda_parser.mly" (Fexpr.expect_test_spec) -# 7139 "flambda_parser-in.ml" +# 7173 "flambda_parser-in.ml" ) MenhirInterpreter.checkpoint) end -# 639 "flambda_parser.mly" +# 641 "flambda_parser.mly" -# 7147 "flambda_parser-in.ml" +# 7181 "flambda_parser-in.ml" # 269 "" -# 7152 "flambda_parser-in.ml" +# 7186 "flambda_parser-in.ml" diff --git a/middle_end/flambda/parser/flambda_parser.mly b/middle_end/flambda/parser/flambda_parser.mly index 116ca374f2f3..468be4dbcb8b 100644 --- a/middle_end/flambda/parser/flambda_parser.mly +++ b/middle_end/flambda/parser/flambda_parser.mly @@ -110,6 +110,7 @@ let make_const_int (i, m) : const = %token PLUSDOT [@symbol "+."] %token RBRACE [@symbol "}"] %token REC [@symbol "rec"] +%token REC_INFO [@symbol "rec_info"] %token RPAREN [@symbol ")"] %token SEMICOLON [@symbol ";"] %token SET_OF_CLOSURES [@symbol "set_of_closures"] @@ -354,6 +355,7 @@ kind: | INT64 { Naked_number Naked_int64 } | NATIVEINT { Naked_number Naked_nativeint } | FABRICATED { Fabricated } + | REC_INFO { Rec_info } ; kinds: | UNIT { [] } diff --git a/middle_end/flambda/parser/flambda_to_fexpr.ml b/middle_end/flambda/parser/flambda_to_fexpr.ml index 1d8bd94c0d28..5ad4491e1b7c 100644 --- a/middle_end/flambda/parser/flambda_to_fexpr.ml +++ b/middle_end/flambda/parser/flambda_to_fexpr.ml @@ -297,6 +297,7 @@ let kind (k : Flambda_kind.t) : Fexpr.kind = | Value -> Value | Fabricated -> Fabricated | Naked_number nnk -> Naked_number (naked_number_kind nnk) + | Rec_info -> Rec_info let arity (a : Flambda_arity.With_subkinds.t) : Fexpr.flambda_arity = List.map kind (Flambda_arity.With_subkinds.to_arity a) diff --git a/middle_end/flambda/parser/print_fexpr.ml b/middle_end/flambda/parser/print_fexpr.ml index 4c4f6a13cf12..8218ee1df751 100644 --- a/middle_end/flambda/parser/print_fexpr.ml +++ b/middle_end/flambda/parser/print_fexpr.ml @@ -107,6 +107,7 @@ let kind ppf (k : kind) = | Naked_nativeint -> "nativeint" end | Fabricated -> "fabricated" + | Rec_info -> "rec_info" in Format.pp_print_string ppf s diff --git a/middle_end/flambda/simplify/simplify_binary_primitive.ml b/middle_end/flambda/simplify/simplify_binary_primitive.ml index 4e2abe453774..a2043bb25928 100644 --- a/middle_end/flambda/simplify/simplify_binary_primitive.ml +++ b/middle_end/flambda/simplify/simplify_binary_primitive.ml @@ -1064,6 +1064,7 @@ let simplify_phys_equal (op : P.equality_comparison) Binary_int_eq_comp_nativeint.simplify op dacc ~original_term dbg ~arg1 ~arg1_ty ~arg2 ~arg2_ty ~result_var | Fabricated -> Misc.fatal_error "Fabricated kind not expected here" + | Rec_info -> Misc.fatal_error "Rec_info kind not expected here" end let simplify_binary_primitive dacc (prim : P.binary_primitive) diff --git a/middle_end/flambda/terms/named.rec.ml b/middle_end/flambda/terms/named.rec.ml index d5999e4a8c68..1b21b4920012 100644 --- a/middle_end/flambda/terms/named.rec.ml +++ b/middle_end/flambda/terms/named.rec.ml @@ -14,7 +14,7 @@ (* *) (**************************************************************************) -[@@@ocaml.warning "+a-4-30-40-41-42"] +[@@@ocaml.warning "+a-30-40-41-42"] type t = | Simple of Simple.t @@ -67,7 +67,7 @@ let invariant_returning_kind env t : Flambda_primitive.result_kind = constants *) Singleton K.value | Rec_info _ -> - Singleton K.fabricated + Singleton K.rec_info with Misc.Fatal_error -> Misc.fatal_errorf "(during invariant checks) Context is:@ %a" print t @@ -129,6 +129,8 @@ let box_value name (kind : Flambda_kind.t) dbg : t * Flambda_kind.t = Prim (Unary (Box_number Naked_nativeint, simple), dbg), K.value | Fabricated -> Misc.fatal_error "Cannot box values of [Fabricated] kind" + | Rec_info -> + Misc.fatal_error "Cannot box values of [Rec_info] kind" let unbox_value name (kind : Flambda_kind.t) dbg : t * Flambda_kind.t = let simple = Simple.name name in @@ -146,7 +148,9 @@ let unbox_value name (kind : Flambda_kind.t) dbg : t * Flambda_kind.t = Prim (Unary (Unbox_number Naked_nativeint, simple), dbg), K.naked_nativeint | Fabricated -> - Misc.fatal_error "Cannot box values of [Fabricated] kind" + Misc.fatal_error "Cannot unbox values of [Fabricated] kind" + | Rec_info -> + Misc.fatal_error "Cannot unbox values of [Rec_info] kind" let at_most_generative_effects (t : t) = match t with @@ -172,6 +176,7 @@ let dummy_value (kind : K.t) : t = | Naked_number Naked_nativeint -> Simple.const (Reg_width_const.naked_nativeint Targetint.zero) | Fabricated -> Misc.fatal_error "[Fabricated] kind not expected here" + | Rec_info -> Misc.fatal_error "[Rec_info] kind not expected here" in Simple simple diff --git a/middle_end/flambda/to_cmm/un_cps.ml b/middle_end/flambda/to_cmm/un_cps.ml index 911d43f5abbe..86528ae8c1ec 100644 --- a/middle_end/flambda/to_cmm/un_cps.ml +++ b/middle_end/flambda/to_cmm/un_cps.ml @@ -92,6 +92,7 @@ let default_of_kind (k : Flambda_kind.t) = | Naked_number Naked_int64 -> C.int 0 | Naked_number Naked_nativeint -> C.int 0 | Fabricated -> Misc.fatal_error "Fabricated_kind have no default value" + | Rec_info -> Misc.fatal_error "Rec_info has no default value" (* Function symbol *) @@ -534,7 +535,7 @@ let machtype_of_kind k = | Naked_number Naked_int64 -> typ_int64 | Naked_number (Naked_immediate | Naked_int32 | Naked_nativeint) -> typ_int - | Fabricated -> assert false + | Fabricated | Rec_info -> assert false let machtype_of_kinded_parameter p = Kinded_parameter.kind p diff --git a/middle_end/flambda/to_cmm/un_cps_helper.ml b/middle_end/flambda/to_cmm/un_cps_helper.ml index 60980084befb..ed2acf555aa8 100644 --- a/middle_end/flambda/to_cmm/un_cps_helper.ml +++ b/middle_end/flambda/to_cmm/un_cps_helper.ml @@ -40,6 +40,7 @@ let exttype_of_kind k = | Sixty_four -> Cmm.XInt64 end | Fabricated -> Misc.fatal_error "[Fabricated] kind not expected here" + | Rec_info -> Misc.fatal_error "[Rec_info] kind not expected here" (* Void *) diff --git a/middle_end/flambda/types/dune b/middle_end/flambda/types/dune index 9bb803fb09dd..89815e42afb2 100644 --- a/middle_end/flambda/types/dune +++ b/middle_end/flambda/types/dune @@ -18,6 +18,8 @@ type_of_kind/type_of_kind_naked_int64_0.rec.ml type_of_kind/boilerplate/type_of_kind_naked_nativeint.rec.ml type_of_kind/type_of_kind_naked_nativeint0.rec.ml + type_of_kind/boilerplate/type_of_kind_rec_info.rec.ml + type_of_kind/type_of_kind_rec_info0.rec.ml resolved_type.rec.ml structures/closures_entry.rec.ml structures/function_declaration_type.rec.ml @@ -43,6 +45,8 @@ type_of_kind/type_of_kind_naked_int64_0.rec.mli type_of_kind/boilerplate/type_of_kind_naked_nativeint.rec.mli type_of_kind/type_of_kind_naked_nativeint0.rec.mli + type_of_kind/boilerplate/type_of_kind_rec_info.rec.mli + type_of_kind/type_of_kind_rec_info0.rec.mli resolved_type.rec.mli structures/closures_entry.rec.mli structures/function_declaration_type.rec.mli diff --git a/middle_end/flambda/types/flambda_type.mli b/middle_end/flambda/types/flambda_type.mli index e72841a9bb93..6bcf1808041a 100644 --- a/middle_end/flambda/types/flambda_type.mli +++ b/middle_end/flambda/types/flambda_type.mli @@ -326,6 +326,8 @@ val any_naked_int32 : unit -> t val any_naked_int64 : unit -> t val any_naked_nativeint : unit -> t +val any_rec_info : unit -> t + (** Building of types representing tagged / boxed values from specified constants. *) val this_tagged_immediate : Target_imm.t -> t @@ -348,6 +350,8 @@ val this_naked_int32 : Int32.t -> t val this_naked_int64 : Int64.t -> t val this_naked_nativeint : Targetint.t -> t +val this_rec_info : Rec_info_expr.t -> t + val these_naked_immediates : Target_imm.Set.t -> t val these_naked_floats : Numbers.Float_by_bit_pattern.Set.t -> t val these_naked_int32s : Int32.Set.t -> t @@ -663,6 +667,11 @@ val prove_project_var_simple -> Var_within_closure.t -> Simple.t proof +val prove_rec_info + : Typing_env.t + -> t + -> Rec_info_expr.t proof + type var_or_symbol_or_tagged_immediate = private | Var of Variable.t | Symbol of Symbol.t diff --git a/middle_end/flambda/types/kinds/flambda_kind.ml b/middle_end/flambda/types/kinds/flambda_kind.ml index 58ec1c6dd8de..ed2497aac54d 100644 --- a/middle_end/flambda/types/kinds/flambda_kind.ml +++ b/middle_end/flambda/types/kinds/flambda_kind.ml @@ -14,7 +14,7 @@ (* *) (**************************************************************************) -[@@@ocaml.warning "+a-4-30-40-41-42"] +[@@@ocaml.warning "+a-30-40-41-42"] type value = private Value type empty_naked_immediate = private Naked_immediate @@ -23,6 +23,7 @@ type empty_naked_int32 = private Naked_int32 type empty_naked_int64 = private Naked_int64 type empty_naked_nativeint = private Naked_nativeint type fabricated = private Fabricated +type rec_info = private Rec_info type naked_immediate = empty_naked_immediate * Target_imm.Set.t type naked_float = empty_naked_float * Numbers.Float_by_bit_pattern.Set.t @@ -65,6 +66,7 @@ type t = | Value | Naked_number of Naked_number_kind.t | Fabricated + | Rec_info type kind = t @@ -75,6 +77,7 @@ let naked_int32 = Naked_number Naked_int32 let naked_int64 = Naked_number Naked_int64 let naked_nativeint = Naked_number Naked_nativeint let fabricated = Fabricated +let rec_info = Rec_info let unit = Value @@ -90,10 +93,13 @@ include Identifiable.Make (struct | Value, Value -> 0 | Naked_number n1, Naked_number n2 -> Naked_number_kind.compare n1 n2 | Fabricated, Fabricated -> 0 + | Rec_info, Rec_info -> 0 | Value, _ -> -1 | _, Value -> 1 | Naked_number _, _ -> -1 | _, Naked_number _ -> 1 + | Fabricated, _ -> -1 + | _, Fabricated -> 1 let equal t1 t2 = (compare t1 t2 = 0) @@ -136,6 +142,12 @@ include Identifiable.Make (struct colour (Flambda_colours.normal ()) else Format.fprintf ppf "Fab" + | Rec_info -> + if unicode then + Format.fprintf ppf "@<0>%s@<1>\u{211d}@<0>%s" + colour (Flambda_colours.normal ()) + else + Format.fprintf ppf "Rec" let output chan t = print (Format.formatter_of_out_channel chan) t @@ -145,14 +157,16 @@ let is_value t = match t with | Value -> true | Naked_number _ - | Fabricated -> false + | Fabricated + | Rec_info -> false let is_naked_float t = match t with | Naked_number Naked_float -> true | Value - | Naked_number _ - | Fabricated -> false + | Naked_number (Naked_immediate | Naked_int32 | Naked_int64 | Naked_nativeint) + | Fabricated + | Rec_info -> false module Standard_int = struct type t = @@ -407,7 +421,7 @@ module With_subkind = struct let create (kind : kind) (subkind : Subkind.t) = begin match kind with | Value -> () - | Naked_number _ | Fabricated -> + | Naked_number _ | Fabricated | Rec_info -> match subkind with | Anything -> () | Boxed_float @@ -435,6 +449,7 @@ module With_subkind = struct let boxed_int64 = create value Boxed_int64 let boxed_nativeint = create value Boxed_nativeint let tagged_immediate = create value Tagged_immediate + let rec_info = create rec_info Anything let of_naked_number_kind (naked_number_kind : Naked_number_kind.t) = match naked_number_kind with @@ -454,7 +469,10 @@ module With_subkind = struct Format.fprintf ppf "@[%a%a@]" print kind Subkind.print subkind - | _, _ -> assert false (* see [create] *) + | (Naked_number _ | Fabricated | Rec_info), + (Boxed_float | Boxed_int32 | Boxed_int64 | Boxed_nativeint + | Tagged_immediate) -> + assert false (* see [create] *) let compare { kind = kind1; subkind = subkind1; } @@ -479,6 +497,7 @@ module With_subkind = struct | Boxed_int64 | Boxed_nativeint | Tagged_immediate + | Rec_info let descr t : descr = match t.kind with @@ -492,6 +511,7 @@ module With_subkind = struct | Boxed_nativeint -> Boxed_nativeint end | Naked_number naked_number_kind -> Naked_number naked_number_kind + | Rec_info -> Rec_info | Fabricated -> Misc.fatal_error "Not implemented" let compatible t ~when_used_at = @@ -503,7 +523,8 @@ module With_subkind = struct | Boxed_int32, Boxed_int32 | Boxed_int64, Boxed_int64 | Boxed_nativeint, Boxed_nativeint - | Tagged_immediate, Tagged_immediate -> true + | Tagged_immediate, Tagged_immediate + | Rec_info, Rec_info -> true (* Subkinds of [Value] may always be used at [Value], but not the converse: *) | Boxed_float, Any_value @@ -513,7 +534,7 @@ module With_subkind = struct | Tagged_immediate, Any_value -> true (* All other combinations are incompatible. *) | (Any_value | Naked_number _ | Boxed_float | Boxed_int32 | Boxed_int64 - | Boxed_nativeint | Tagged_immediate), _ -> false + | Boxed_nativeint | Tagged_immediate | Rec_info), _ -> false let has_useful_subkind_info t = match t.subkind with diff --git a/middle_end/flambda/types/kinds/flambda_kind.mli b/middle_end/flambda/types/kinds/flambda_kind.mli index 61b72410d8e7..f04c96079418 100644 --- a/middle_end/flambda/types/kinds/flambda_kind.mli +++ b/middle_end/flambda/types/kinds/flambda_kind.mli @@ -33,6 +33,7 @@ type naked_int32 = empty_naked_int32 * Numbers.Int32.Set.t type naked_int64 = empty_naked_int64 * Numbers.Int64.Set.t type naked_nativeint = empty_naked_nativeint * Targetint.Set.t type fabricated = private Fabricated +type rec_info = private Rec_info module Naked_number_kind : sig type t = @@ -54,6 +55,9 @@ type t = private | Fabricated (** Values which have been introduced by Flambda and are never accessible at the source language level (for example sets of closures). *) + | Rec_info + (** Recursion depths of identifiers. Like [Fabricated], not accessible at + the source level, but also not accessible at run time. *) type kind = t @@ -67,6 +71,7 @@ val naked_nativeint : t (* CR mshinwell: Fabricated kinds are only used in Flambda_static now. Make a separate type. *) val fabricated : t +val rec_info : t val is_value : t -> bool val is_naked_float : t -> bool @@ -186,6 +191,7 @@ module With_subkind : sig val boxed_int64 : t val boxed_nativeint : t val tagged_immediate : t + val rec_info : t val of_naked_number_kind : Naked_number_kind.t -> t @@ -197,6 +203,7 @@ module With_subkind : sig | Boxed_int64 | Boxed_nativeint | Tagged_immediate + | Rec_info val descr : t -> descr diff --git a/middle_end/flambda/types/rec_modules b/middle_end/flambda/types/rec_modules index ab361e388ff7..a1c5e8ac4c79 100644 --- a/middle_end/flambda/types/rec_modules +++ b/middle_end/flambda/types/rec_modules @@ -14,6 +14,8 @@ type_of_kind/boilerplate/type_of_kind_naked_int64.rec.ml type_of_kind/type_of_kind_naked_int64_0.rec.ml type_of_kind/boilerplate/type_of_kind_naked_nativeint.rec.ml type_of_kind/type_of_kind_naked_nativeint0.rec.ml +type_of_kind/boilerplate/type_of_kind_rec_info.rec.ml +type_of_kind/type_of_kind_rec_info0.rec.ml structures/closures_entry.rec.ml structures/function_declaration_type.rec.ml env/typing_env_extension.rec.ml diff --git a/middle_end/flambda/types/resolved_type.rec.ml b/middle_end/flambda/types/resolved_type.rec.ml index af8ff385d8cb..b350fcbda52a 100644 --- a/middle_end/flambda/types/resolved_type.rec.ml +++ b/middle_end/flambda/types/resolved_type.rec.ml @@ -24,3 +24,4 @@ type t = | Naked_int32 of Type_of_kind_naked_int32_0.t Or_unknown_or_bottom.t | Naked_int64 of Type_of_kind_naked_int64_0.t Or_unknown_or_bottom.t | Naked_nativeint of Type_of_kind_naked_nativeint0.t Or_unknown_or_bottom.t + | Rec_info of Type_of_kind_rec_info0.t Or_unknown_or_bottom.t diff --git a/middle_end/flambda/types/resolved_type.rec.mli b/middle_end/flambda/types/resolved_type.rec.mli index af8ff385d8cb..b350fcbda52a 100644 --- a/middle_end/flambda/types/resolved_type.rec.mli +++ b/middle_end/flambda/types/resolved_type.rec.mli @@ -24,3 +24,4 @@ type t = | Naked_int32 of Type_of_kind_naked_int32_0.t Or_unknown_or_bottom.t | Naked_int64 of Type_of_kind_naked_int64_0.t Or_unknown_or_bottom.t | Naked_nativeint of Type_of_kind_naked_nativeint0.t Or_unknown_or_bottom.t + | Rec_info of Type_of_kind_rec_info0.t Or_unknown_or_bottom.t diff --git a/middle_end/flambda/types/structures/row_like.rec.ml b/middle_end/flambda/types/structures/row_like.rec.ml index 4f9f211fd584..676e1e3149dd 100644 --- a/middle_end/flambda/types/structures/row_like.rec.ml +++ b/middle_end/flambda/types/structures/row_like.rec.ml @@ -526,7 +526,7 @@ struct | Naked_number Naked_float -> Known Tag.double_array_tag | Naked_number Naked_immediate | Naked_number Naked_int32 | Naked_number Naked_int64 | Naked_number Naked_nativeint - | Fabricated -> + | Fabricated | Rec_info -> Misc.fatal_errorf "Bad kind %a for fields" Flambda_kind.print field_kind end @@ -547,7 +547,7 @@ struct Known tag | Naked_number Naked_immediate | Naked_number Naked_int32 | Naked_number Naked_int64 | Naked_number Naked_nativeint - | Fabricated -> + | Fabricated | Rec_info -> Misc.fatal_errorf "Bad kind %a for fields" Flambda_kind.print field_kind end diff --git a/middle_end/flambda/types/template/flambda_type.templ.ml b/middle_end/flambda/types/template/flambda_type.templ.ml index 1c2eb9f1db8d..94c9f0604ccc 100644 --- a/middle_end/flambda/types/template/flambda_type.templ.ml +++ b/middle_end/flambda/types/template/flambda_type.templ.ml @@ -78,6 +78,7 @@ let unknown_with_subkind kind = | Boxed_int64 -> any_boxed_int64 () | Boxed_nativeint -> any_boxed_nativeint () | Tagged_immediate -> any_tagged_immediate () + | Rec_info -> any_rec_info () let unknown_types_from_arity_with_subkinds arity = List.map (fun kind -> unknown_with_subkind kind) arity @@ -92,14 +93,16 @@ let is_bottom env t = | Naked_float Bottom | Naked_int32 Bottom | Naked_int64 Bottom - | Naked_nativeint Bottom -> true + | Naked_nativeint Bottom + | Rec_info Bottom -> true | Const _ | Value _ | Naked_immediate _ | Naked_float _ | Naked_int32 _ | Naked_int64 _ - | Naked_nativeint _ -> false + | Naked_nativeint _ + | Rec_info _ -> false type 'a proof = | Proved of 'a @@ -199,6 +202,7 @@ let prove_single_closures_entry' env t : _ proof_allowing_kind_mismatch = | Naked_int32 _ -> Wrong_kind | Naked_int64 _ -> Wrong_kind | Naked_nativeint _ -> Wrong_kind + | Rec_info _ -> Wrong_kind let prove_single_closures_entry env t : _ proof = match prove_single_closures_entry' env t with @@ -227,6 +231,7 @@ let prove_naked_floats env t : _ proof = | Naked_int32 _ -> wrong_kind () | Naked_int64 _ -> wrong_kind () | Naked_nativeint _ -> wrong_kind () + | Rec_info _ -> wrong_kind () let prove_naked_int32s env t : _ proof = let wrong_kind () = @@ -246,6 +251,7 @@ let prove_naked_int32s env t : _ proof = | Naked_float _ -> wrong_kind () | Naked_int64 _ -> wrong_kind () | Naked_nativeint _ -> wrong_kind () + | Rec_info _ -> wrong_kind () let prove_naked_int64s env t : _ proof = let wrong_kind () = @@ -265,6 +271,7 @@ let prove_naked_int64s env t : _ proof = | Naked_float _ -> wrong_kind () | Naked_int32 _ -> wrong_kind () | Naked_nativeint _ -> wrong_kind () + | Rec_info _ -> wrong_kind () let prove_naked_nativeints env t : _ proof = let wrong_kind () = @@ -284,6 +291,7 @@ let prove_naked_nativeints env t : _ proof = | Naked_float _ -> wrong_kind () | Naked_int32 _ -> wrong_kind () | Naked_int64 _ -> wrong_kind () + | Rec_info _ -> wrong_kind () let prove_is_int env t : bool proof = let wrong_kind () = @@ -322,6 +330,7 @@ let prove_is_int env t : bool proof = | Naked_int32 _ -> wrong_kind () | Naked_int64 _ -> wrong_kind () | Naked_nativeint _ -> wrong_kind () + | Rec_info _ -> wrong_kind () let prove_tags_must_be_a_block env t : Tag.Set.t proof = let wrong_kind () = @@ -376,6 +385,7 @@ let prove_tags_must_be_a_block env t : Tag.Set.t proof = | Naked_int32 _ -> wrong_kind () | Naked_int64 _ -> wrong_kind () | Naked_nativeint _ -> wrong_kind () + | Rec_info _ -> wrong_kind () let prove_naked_immediates env t : Target_imm.Set.t proof = let wrong_kind () = @@ -420,6 +430,7 @@ let prove_naked_immediates env t : Target_imm.Set.t proof = | Naked_int32 _ -> wrong_kind () | Naked_int64 _ -> wrong_kind () | Naked_nativeint _ -> wrong_kind () + | Rec_info _ -> wrong_kind () let prove_equals_tagged_immediates env t : Target_imm.Set.t proof = let wrong_kind () = @@ -447,6 +458,7 @@ let prove_equals_tagged_immediates env t : Target_imm.Set.t proof = | Naked_int32 _ -> wrong_kind () | Naked_int64 _ -> wrong_kind () | Naked_nativeint _ -> wrong_kind () + | Rec_info _ -> wrong_kind () let prove_equals_single_tagged_immediate env t : _ proof = match prove_equals_tagged_immediates env t with @@ -491,6 +503,7 @@ let prove_tags_and_sizes env t : Targetint.OCaml.t Tag.Map.t proof = | Naked_int32 _ -> wrong_kind () | Naked_int64 _ -> wrong_kind () | Naked_nativeint _ -> wrong_kind () + | Rec_info _ -> wrong_kind () let prove_unique_tag_and_size env t : (Tag.t * Targetint.OCaml.t) proof_allowing_kind_mismatch = @@ -565,6 +578,7 @@ let prove_variant_like env t : variant_like_proof proof_allowing_kind_mismatch = | Naked_int32 _ -> Wrong_kind | Naked_int64 _ -> Wrong_kind | Naked_nativeint _ -> Wrong_kind + | Rec_info _ -> Wrong_kind let prove_is_a_boxed_number env t : Flambda_kind.Boxable_number.t proof_allowing_kind_mismatch = @@ -737,7 +751,7 @@ let prove_strings env t : String_info.Set.t proof = | Value Unknown -> Unknown | Value Bottom -> Invalid | Naked_immediate _ | Naked_float _ | Naked_int32 _ | Naked_int64 _ - | Naked_nativeint _ -> wrong_kind () + | Naked_nativeint _ | Rec_info _ -> wrong_kind () type prove_tagging_function = | Prove_could_be_tagging_of_simple @@ -788,7 +802,7 @@ let prove_is_tagging_of_simple | Value Unknown -> Unknown | Value _ -> Invalid | Const _ | Naked_immediate _ | Naked_float _ | Naked_int32 _ - | Naked_int64 _ | Naked_nativeint _ -> wrong_kind () + | Naked_int64 _ | Naked_nativeint _ | Rec_info _ -> wrong_kind () let prove_is_always_tagging_of_simple = prove_is_tagging_of_simple @@ -815,7 +829,7 @@ let [@inline always] prove_boxed_number_containing_simple | Value Unknown -> Unknown | Value Bottom -> Invalid | Const _ | Naked_immediate _ | Naked_float _ | Naked_int32 _ - | Naked_int64 _ | Naked_nativeint _ -> + | Naked_int64 _ | Naked_nativeint _ | Rec_info _ -> Misc.fatal_errorf "Kind error: expected [Value]:@ %a" print t let prove_boxed_float_containing_simple = @@ -890,7 +904,7 @@ let[@inline] prove_block_field_simple_aux env ~min_name_mode t get_field : Simpl | Value Unknown -> Unknown | Value Bottom -> Invalid | Naked_immediate _ | Naked_float _ | Naked_int32 _ | Naked_int64 _ - | Naked_nativeint _ -> wrong_kind () + | Naked_nativeint _ | Rec_info _ -> wrong_kind () let prove_block_field_simple env ~min_name_mode t field_index = let[@inline] get blocks = Row_like.For_blocks.get_field blocks field_index in @@ -930,7 +944,18 @@ let prove_project_var_simple env ~min_name_mode t env_var : Simple.t proof = | Value Unknown -> Unknown | Value Bottom -> Invalid | Naked_immediate _ | Naked_float _ | Naked_int32 _ | Naked_int64 _ - | Naked_nativeint _ -> wrong_kind () + | Naked_nativeint _ | Rec_info _ -> wrong_kind () + +let prove_rec_info env t : Rec_info_expr.t proof = + let wrong_kind () = + Misc.fatal_errorf "Kind error: expected [Rec_info]:@ %a" print t + in + match expand_head t env with + | Rec_info (Ok rec_info_expr) -> Proved rec_info_expr + | Rec_info Unknown -> Unknown + | Rec_info Bottom -> Invalid + | Const _ | Value _ | Naked_immediate _ | Naked_float _ | Naked_int32 _ + | Naked_int64 _ | Naked_nativeint _ -> wrong_kind () type to_lift = | Immutable_block of diff --git a/middle_end/flambda/types/type_grammar.rec.ml b/middle_end/flambda/types/type_grammar.rec.ml index 1fa01f0a201a..4553a407c045 100644 --- a/middle_end/flambda/types/type_grammar.rec.ml +++ b/middle_end/flambda/types/type_grammar.rec.ml @@ -27,6 +27,7 @@ module T_Nf = Type_of_kind_naked_float module T_N32 = Type_of_kind_naked_int32 module T_N64 = Type_of_kind_naked_int64 module T_NN = Type_of_kind_naked_nativeint +module T_RI = Type_of_kind_rec_info type t = | Value of T_V.t @@ -35,6 +36,7 @@ type t = | Naked_int32 of T_N32.t | Naked_int64 of T_N64.t | Naked_nativeint of T_NN.t + | Rec_info of T_RI.t let print_with_cache ~cache ppf (t : Type_grammar.t) = match t with @@ -56,6 +58,9 @@ let print_with_cache ~cache ppf (t : Type_grammar.t) = | Naked_nativeint ty -> Format.fprintf ppf "@[(Naked_nativeint@ %a)@]" (T_NN.print_with_cache ~cache) ty + | Rec_info ty -> + Format.fprintf ppf "@[(Rec_info@ %a)@]" + (T_RI.print_with_cache ~cache) ty let print ppf t = let cache : Printing_cache.t = Printing_cache.create () in @@ -65,14 +70,14 @@ let force_to_kind_value t = match t with | Value ty -> ty | Naked_immediate _ | Naked_float _ | Naked_int32 _ | Naked_int64 _ - | Naked_nativeint _ -> + | Naked_nativeint _ | Rec_info _ -> Misc.fatal_errorf "Type has wrong kind (expected [Value]):@ %a" print t let force_to_kind_naked_immediate t = match t with | Naked_immediate ty -> ty | Value _ | Naked_float _ | Naked_int32 _ | Naked_int64 _ - | Naked_nativeint _ -> + | Naked_nativeint _ | Rec_info _ -> Misc.fatal_errorf "Type has wrong kind (expected [Naked_immediate]):@ %a" print t @@ -81,7 +86,7 @@ let force_to_kind_naked_float t = match t with | Naked_float ty -> ty | Value _ | Naked_immediate _ | Naked_int32 _ | Naked_int64 _ - | Naked_nativeint _ -> + | Naked_nativeint _ | Rec_info _ -> Misc.fatal_errorf "Type has wrong kind (expected [Naked_float]):@ %a" print t @@ -90,7 +95,7 @@ let force_to_kind_naked_int32 t = match t with | Naked_int32 ty -> ty | Value _ | Naked_immediate _ | Naked_float _ | Naked_int64 _ - | Naked_nativeint _ -> + | Naked_nativeint _ | Rec_info _ -> Misc.fatal_errorf "Type has wrong kind (expected [Naked_int32]):@ %a" print t @@ -99,7 +104,7 @@ let force_to_kind_naked_int64 t = match t with | Naked_int64 ty -> ty | Value _ | Naked_immediate _ | Naked_float _ | Naked_int32 _ - | Naked_nativeint _ -> + | Naked_nativeint _ | Rec_info _ -> Misc.fatal_errorf "Type has wrong kind (expected [Naked_number Int64]):@ %a" print t @@ -108,11 +113,20 @@ let force_to_kind_naked_nativeint t = match t with | Naked_nativeint ty -> ty | Value _ | Naked_immediate _ | Naked_float _ | Naked_int32 _ - | Naked_int64 _ -> + | Naked_int64 _ | Rec_info _ -> Misc.fatal_errorf "Type has wrong kind (expected [Naked_number Nativeint]):@ %a" print t +let force_to_kind_rec_info t = + match t with + | Rec_info ty -> ty + | Value _ | Naked_immediate _ | Naked_float _ | Naked_int32 _ + | Naked_int64 _ | Naked_nativeint _ -> + Misc.fatal_errorf + "Type has wrong kind (expected [Rec_info]):@ %a" + print t + let apply_renaming t renaming = match t with | Value ty -> @@ -139,6 +153,10 @@ let apply_renaming t renaming = let ty' = T_NN.apply_renaming ty renaming in if ty == ty' then t else Naked_nativeint ty' + | Rec_info ty -> + let ty' = T_RI.apply_renaming ty renaming in + if ty == ty' then t + else Rec_info ty' let free_names t = match t with @@ -148,6 +166,7 @@ let free_names t = | Naked_int32 ty -> T_N32.free_names ty | Naked_int64 ty -> T_N64.free_names ty | Naked_nativeint ty -> T_NN.free_names ty + | Rec_info ty -> T_RI.free_names ty let all_ids_for_export t = match t with @@ -157,6 +176,7 @@ let all_ids_for_export t = | Naked_int32 ty -> T_N32.all_ids_for_export ty | Naked_int64 ty -> T_N64.all_ids_for_export ty | Naked_nativeint ty -> T_NN.all_ids_for_export ty + | Rec_info ty -> T_RI.all_ids_for_export ty let apply_coercion t coercion : _ Or_bottom.t = match t with @@ -190,6 +210,11 @@ let apply_coercion t coercion : _ Or_bottom.t = | Ok ty -> Ok (Naked_nativeint ty) | Bottom -> Bottom end + | Rec_info ty -> + begin match T_RI.apply_coercion ty coercion with + | Ok ty -> Ok (Rec_info ty) + | Bottom -> Bottom + end let eviscerate t env = match t with @@ -228,6 +253,12 @@ let eviscerate t env = K.naked_nativeint in Naked_nativeint ty + | Rec_info ty -> + let ty = + T_RI.eviscerate ~force_to_kind:force_to_kind_rec_info ty env + K.rec_info + in + Rec_info ty let kind t = match t with @@ -237,6 +268,7 @@ let kind t = | Naked_int32 _ -> K.naked_int32 | Naked_int64 _ -> K.naked_int64 | Naked_nativeint _ -> K.naked_nativeint + | Rec_info _ -> K.rec_info let get_alias_exn t = match t with @@ -246,6 +278,7 @@ let get_alias_exn t = | Naked_int32 ty -> T_N32.get_alias_exn ty | Naked_int64 ty -> T_N64.get_alias_exn ty | Naked_nativeint ty -> T_NN.get_alias_exn ty + | Rec_info ty -> T_RI.get_alias_exn ty (* CR mshinwell: We should have transformations and invariant checks to enforce that, when a type can be expressed just using [Equals] (e.g. to @@ -262,6 +295,7 @@ let is_obviously_bottom (t : t) = | Naked_int32 ty -> T_N32.is_obviously_bottom ty | Naked_int64 ty -> T_N64.is_obviously_bottom ty | Naked_nativeint ty -> T_NN.is_obviously_bottom ty + | Rec_info ty -> T_RI.is_obviously_bottom ty let is_obviously_unknown (t : t) = match t with @@ -271,6 +305,7 @@ let is_obviously_unknown (t : t) = | Naked_int32 ty -> T_N32.is_obviously_unknown ty | Naked_int64 ty -> T_N64.is_obviously_unknown ty | Naked_nativeint ty -> T_NN.is_obviously_unknown ty + | Rec_info ty -> T_RI.is_obviously_unknown ty let alias_type_of (kind : K.t) name : t = match kind with @@ -280,6 +315,7 @@ let alias_type_of (kind : K.t) name : t = | Naked_number Naked_int32 -> Naked_int32 (T_N32.create_equals name) | Naked_number Naked_int64 -> Naked_int64 (T_N64.create_equals name) | Naked_number Naked_nativeint -> Naked_nativeint (T_NN.create_equals name) + | Rec_info -> Rec_info (T_RI.create_equals name) | Fabricated -> Misc.fatal_error "Only used in [Flambda_static] now" let bottom_value () = Value (T_V.bottom ()) @@ -288,6 +324,7 @@ let bottom_naked_float () = Naked_float (T_Nf.bottom ()) let bottom_naked_int32 () = Naked_int32 (T_N32.bottom ()) let bottom_naked_int64 () = Naked_int64 (T_N64.bottom ()) let bottom_naked_nativeint () = Naked_nativeint (T_NN.bottom ()) +let bottom_rec_info () = Rec_info (T_RI.bottom ()) let bottom (kind : K.t) = match kind with @@ -297,6 +334,7 @@ let bottom (kind : K.t) = | Naked_number Naked_int32 -> bottom_naked_int32 () | Naked_number Naked_int64 -> bottom_naked_int64 () | Naked_number Naked_nativeint -> bottom_naked_nativeint () + | Rec_info -> bottom_rec_info () | Fabricated -> Misc.fatal_error "Only used in [Flambda_static] now" let bottom_like t = bottom (kind t) @@ -307,6 +345,7 @@ let any_naked_float () = Naked_float (T_Nf.unknown ()) let any_naked_int32 () = Naked_int32 (T_N32.unknown ()) let any_naked_int64 () = Naked_int64 (T_N64.unknown ()) let any_naked_nativeint () = Naked_nativeint (T_NN.unknown ()) +let any_rec_info () = Rec_info (T_RI.unknown ()) let unknown (kind : K.t) = match kind with @@ -316,6 +355,7 @@ let unknown (kind : K.t) = | Naked_number Naked_int32 -> any_naked_int32 () | Naked_number Naked_int64 -> any_naked_int64 () | Naked_number Naked_nativeint -> any_naked_nativeint () + | Rec_info -> any_rec_info () | Fabricated -> Misc.fatal_error "Only used in [Flambda_static] now" let unknown_like t = unknown (kind t) @@ -400,7 +440,7 @@ let box_float (t : t) : t = match t with | Naked_float _ -> Value (T_V.create (Boxed_float t)) | Value _ | Naked_immediate _ | Naked_int32 _ | Naked_int64 _ - | Naked_nativeint _ -> + | Naked_nativeint _ | Rec_info _ -> Misc.fatal_errorf "Type of wrong kind for [box_float]: %a" print t @@ -408,7 +448,7 @@ let box_int32 (t : t) : t = match t with | Naked_int32 _ -> Value (T_V.create (Boxed_int32 t)) | Value _ | Naked_immediate _ | Naked_float _ | Naked_int64 _ - | Naked_nativeint _ -> + | Naked_nativeint _ | Rec_info _ -> Misc.fatal_errorf "Type of wrong kind for [box_int32]: %a" print t @@ -416,7 +456,7 @@ let box_int64 (t : t) : t = match t with | Naked_int64 _ -> Value (T_V.create (Boxed_int64 t)) | Value _ | Naked_immediate _ | Naked_float _ | Naked_int32 _ - | Naked_nativeint _ -> + | Naked_nativeint _ | Rec_info _ -> Misc.fatal_errorf "Type of wrong kind for [box_int64]: %a" print t @@ -424,7 +464,7 @@ let box_nativeint (t : t) : t = match t with | Naked_nativeint _ -> Value (T_V.create (Boxed_nativeint t)) | Value _ | Naked_immediate _ | Naked_float _ | Naked_int32 _ - | Naked_int64 _ -> + | Naked_int64 _ | Rec_info _ -> Misc.fatal_errorf "Type of wrong kind for [box_nativeint]: %a" print t @@ -463,7 +503,7 @@ let tag_immediate t : t = ~immediates:(Known t) ~blocks:(Known (Row_like.For_blocks.create_bottom ())))))) | Value _ | Naked_float _ | Naked_int32 _ | Naked_int64 _ - | Naked_nativeint _ -> + | Naked_nativeint _ | Rec_info _ -> Misc.fatal_errorf "Type of wrong kind for [tag_immediate]: %a" print t @@ -715,6 +755,9 @@ let type_for_const const = let kind_for_const const = kind (type_for_const const) +let this_rec_info (rec_info_expr : Rec_info_expr.t) = + Rec_info (T_RI.create rec_info_expr) + let expand_head t env : Resolved_type.t = match t with | Value ty -> @@ -752,6 +795,12 @@ let expand_head t env : Resolved_type.t = K.naked_nativeint in Naked_nativeint head + | Rec_info ty -> + let head = + T_RI.expand_head ~force_to_kind:force_to_kind_rec_info ty env + K.rec_info + in + Rec_info head let expand_head' t env : t = match t with @@ -778,6 +827,11 @@ let expand_head' t env : t = Naked_nativeint ( T_NN.expand_head' ~force_to_kind:force_to_kind_naked_nativeint ty env K.naked_nativeint) + | Rec_info ty -> + Rec_info ( + T_RI.expand_head' ~force_to_kind:force_to_kind_rec_info ty env + K.rec_info + ) let missing_kind env free_names = Name_occurrences.fold_variables free_names ~init:false @@ -900,8 +954,13 @@ let meet env t1 t2 = K.naked_nativeint t1 t2 ty1 ty2 ~force_to_kind:force_to_kind_naked_nativeint ~to_type:(fun ty -> Naked_nativeint ty) + | Rec_info ty1, Rec_info ty2 -> + T_RI.meet env + K.rec_info t1 t2 ty1 ty2 + ~force_to_kind:force_to_kind_rec_info + ~to_type:(fun ty -> Rec_info ty) | (Value _ | Naked_immediate _ | Naked_float _ | Naked_int32 _ - | Naked_int64 _ | Naked_nativeint _), _ -> + | Naked_int64 _ | Naked_nativeint _ | Rec_info _), _ -> Misc.fatal_errorf "Kind mismatch upon meet:@ %a@ versus@ %a" print t1 print t2 @@ -938,8 +997,13 @@ let join ?bound_name env t1 t2 = K.naked_nativeint t1 t2 ty1 ty2 ~force_to_kind:force_to_kind_naked_nativeint ~to_type:(fun ty -> Naked_nativeint ty) + | Rec_info ty1, Rec_info ty2 -> + T_RI.join ?bound_name env + K.rec_info t1 t2 ty1 ty2 + ~force_to_kind:force_to_kind_rec_info + ~to_type:(fun ty -> Rec_info ty) | (Value _ | Naked_immediate _ | Naked_float _ | Naked_int32 _ - | Naked_int64 _ | Naked_nativeint _), _ -> + | Naked_int64 _ | Naked_nativeint _ | Rec_info _), _ -> Misc.fatal_errorf "Kind mismatch upon join:@ %a@ versus@ %a" print t1 print t2 diff --git a/middle_end/flambda/types/type_grammar.rec.mli b/middle_end/flambda/types/type_grammar.rec.mli index 258bf5207066..fde4c83bcb75 100644 --- a/middle_end/flambda/types/type_grammar.rec.mli +++ b/middle_end/flambda/types/type_grammar.rec.mli @@ -26,6 +26,7 @@ type t = private | Naked_int32 of Type_of_kind_naked_int32.t | Naked_int64 of Type_of_kind_naked_int64.t | Naked_nativeint of Type_of_kind_naked_nativeint.t + | Rec_info of Type_of_kind_rec_info.t val print : Format.formatter -> t -> unit @@ -70,6 +71,8 @@ val any_naked_int32 : unit -> t val any_naked_int64 : unit -> t val any_naked_nativeint : unit -> t +val any_rec_info : unit -> t + val this_tagged_immediate : Target_imm.t -> t val this_boxed_float : Numbers.Float_by_bit_pattern.t -> t val this_boxed_int32 : Int32.t -> t @@ -83,6 +86,8 @@ val these_boxed_int32s : Int32.Set.t -> t val these_boxed_int64s : Int64.Set.t -> t val these_boxed_nativeints : Targetint.Set.t -> t +val this_rec_info : Rec_info_expr.t -> t + val this_naked_immediate : Target_imm.t -> t val this_naked_float : Numbers.Float_by_bit_pattern.t -> t val this_naked_int32 : Int32.t -> t diff --git a/middle_end/flambda/types/type_of_kind/boilerplate/type_of_kind_rec_info.rec.ml b/middle_end/flambda/types/type_of_kind/boilerplate/type_of_kind_rec_info.rec.ml new file mode 100644 index 000000000000..3594a96f74da --- /dev/null +++ b/middle_end/flambda/types/type_of_kind/boilerplate/type_of_kind_rec_info.rec.ml @@ -0,0 +1,19 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Pierre Chambart, OCamlPro *) +(* Mark Shinwell and Leo White, Jane Street Europe *) +(* *) +(* Copyright 2013--2019 OCamlPro SAS *) +(* Copyright 2014--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +[@@@ocaml.warning "+a-30-40-41-42"] + +include Type_descr.Make (Type_of_kind_rec_info0) diff --git a/middle_end/flambda/types/type_of_kind/boilerplate/type_of_kind_rec_info.rec.mli b/middle_end/flambda/types/type_of_kind/boilerplate/type_of_kind_rec_info.rec.mli new file mode 100644 index 000000000000..586d22476456 --- /dev/null +++ b/middle_end/flambda/types/type_of_kind/boilerplate/type_of_kind_rec_info.rec.mli @@ -0,0 +1,26 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Pierre Chambart, OCamlPro *) +(* Mark Shinwell and Leo White, Jane Street Europe *) +(* *) +(* Copyright 2013--2019 OCamlPro SAS *) +(* Copyright 2014--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +[@@@ocaml.warning "+a-30-40-41-42"] + +include Type_descr_intf.S + with type flambda_type := Type_grammar.t + with type typing_env := Typing_env.t + with type typing_env_extension := Typing_env_extension.t + with type typing_env_level := Typing_env_level.t + with type meet_env := Meet_env.t + with type join_env := Join_env.t + with type head := Type_of_kind_rec_info0.t diff --git a/middle_end/flambda/types/type_of_kind/type_of_kind_rec_info0.rec.ml b/middle_end/flambda/types/type_of_kind/type_of_kind_rec_info0.rec.ml new file mode 100644 index 000000000000..8a4609716743 --- /dev/null +++ b/middle_end/flambda/types/type_of_kind/type_of_kind_rec_info0.rec.ml @@ -0,0 +1,45 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Pierre Chambart, OCamlPro *) +(* Mark Shinwell and Leo White, Jane Street Europe *) +(* *) +(* Copyright 2013--2019 OCamlPro SAS *) +(* Copyright 2014--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +[@@@ocaml.warning "+a-30-40-41-42"] + +type t = Rec_info_expr.t + +let print ppf t = Rec_info_expr.print ppf t + +let print_with_cache ~cache:_ ppf t = print ppf t + +let apply_renaming t renaming = Rec_info_expr.apply_renaming t renaming + +let free_names t = Rec_info_expr.free_names t + +let all_ids_for_export t = Rec_info_expr.all_ids_for_export t + +let apply_coercion t coercion : _ Or_bottom.t = + if Coercion.is_id coercion then Ok t + else Bottom + +let eviscerate _ : _ Or_unknown.t = Unknown + +let meet _env t1 t2 : _ Or_bottom.t = + (* CR lmaurer: This could be doing things like discovering two depth + variables are equal *) + if Rec_info_expr.equal t1 t2 then + Ok (t1, Typing_env_extension.empty ()) + else Bottom + +let join _env t1 t2 : _ Or_unknown.t = + if Rec_info_expr.equal t1 t2 then Known t1 else Unknown diff --git a/middle_end/flambda/types/type_of_kind/type_of_kind_rec_info0.rec.mli b/middle_end/flambda/types/type_of_kind/type_of_kind_rec_info0.rec.mli new file mode 100644 index 000000000000..a26a3059bdf1 --- /dev/null +++ b/middle_end/flambda/types/type_of_kind/type_of_kind_rec_info0.rec.mli @@ -0,0 +1,27 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Pierre Chambart, OCamlPro *) +(* Mark Shinwell and Leo White, Jane Street Europe *) +(* *) +(* Copyright 2013--2019 OCamlPro SAS *) +(* Copyright 2014--2019 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +[@@@ocaml.warning "+a-30-40-41-42"] + +type t = Rec_info_expr.t + +include Type_head_intf.S + with type t := t + with type type_grammar := Type_grammar.t + with type typing_env := Typing_env.t + with type typing_env_extension := Typing_env_extension.t + with type meet_env := Meet_env.t + with type join_env := Join_env.t