From 0f26f28c0b4185712204718a5492fca62ba6af56 Mon Sep 17 00:00:00 2001 From: Cristiano Calcagno Date: Sat, 23 Jul 2022 10:12:26 +0200 Subject: [PATCH 1/3] Clean up pipe ppx: remove `a |. M.(f b c) ` The syntax `a |. M.(f b c) ` only exists in OCaml. And if one converts it to ReScript, the ppx does not apply to it. So just remove it and simplify the implementation of `->`. --- jscomp/frontend/ast_exp_apply.ml | 99 +++--- jscomp/frontend/ast_open_cxt.ml | 8 - jscomp/frontend/ast_open_cxt.mli | 2 - jscomp/test/build.ninja | 4 +- jscomp/test/gpr_2863_test.js | 19 -- jscomp/test/gpr_2863_test.ml | 13 - jscomp/test/gpr_3502_test.js | 27 -- jscomp/test/gpr_3502_test.ml | 5 - jscomp/test/pipe_syntax.js | 8 - jscomp/test/pipe_syntax.ml | 3 - lib/4.06.1/unstable/js_compiler.ml | 317 ++++++++---------- lib/4.06.1/unstable/js_playground_compiler.ml | 317 ++++++++---------- lib/4.06.1/whole_compiler.ml | 317 ++++++++---------- 13 files changed, 489 insertions(+), 650 deletions(-) delete mode 100644 jscomp/test/gpr_2863_test.js delete mode 100644 jscomp/test/gpr_2863_test.ml delete mode 100644 jscomp/test/gpr_3502_test.js delete mode 100644 jscomp/test/gpr_3502_test.ml diff --git a/jscomp/frontend/ast_exp_apply.ml b/jscomp/frontend/ast_exp_apply.ml index 817facc16c..0a959fe304 100644 --- a/jscomp/frontend/ast_exp_apply.ml +++ b/jscomp/frontend/ast_exp_apply.ml @@ -99,9 +99,7 @@ let app_exp_mapper (e : exp) (self : Bs_ast_mapper.mapper) (fn : exp) (* a |. f a |. f b c [@bs] --> f a b c [@bs] - a |. M.(f b c) --> M.f a M.b M.c a |. (g |. b) - a |. M.Some a |. `Variant a |. (b |. f c [@bs]) *) @@ -128,61 +126,52 @@ let app_exp_mapper (e : exp) (self : Bs_ast_mapper.mapper) (fn : exp) pexp_loc = e.pexp_loc; pexp_attributes = e.pexp_attributes; } + | Pexp_ident _ -> + { + pexp_desc = Pexp_apply (fn, [ (Nolabel, new_obj_arg) ]); + pexp_loc = e.pexp_loc; + pexp_attributes = e.pexp_attributes; + } | _ -> ( - match Ast_open_cxt.destruct fn [] with - | ( { pexp_desc = Pexp_tuple xs; pexp_attributes = tuple_attrs }, - wholes ) -> - Ast_open_cxt.restore_exp - (bound new_obj_arg (fun bounded_obj_arg -> - { - pexp_desc = - Pexp_tuple - (Ext_list.map xs (fun fn -> - match fn.pexp_desc with - | Pexp_construct (ctor, None) -> - { - fn with - pexp_desc = - Pexp_construct - (ctor, Some bounded_obj_arg); - } - | Pexp_apply (fn, args) -> - Bs_ast_invariant - .warn_discarded_unused_attributes - fn.pexp_attributes; - { - Parsetree.pexp_desc = - Pexp_apply - ( fn, - (Nolabel, bounded_obj_arg) - :: args ); - pexp_attributes = []; - pexp_loc = fn.pexp_loc; - } - | _ -> - Ast_compatible.app1 ~loc:fn.pexp_loc fn - bounded_obj_arg)); - pexp_attributes = tuple_attrs; - pexp_loc = fn.pexp_loc; - })) - wholes - | ( { pexp_desc = Pexp_apply (e, args); pexp_attributes }, - (_ :: _ as wholes) ) -> - let fn = Ast_open_cxt.restore_exp e wholes in - let args = - Ext_list.map args (fun (lab, exp) -> - (lab, Ast_open_cxt.restore_exp exp wholes)) - in - Bs_ast_invariant.warn_discarded_unused_attributes - pexp_attributes; - { - pexp_desc = Pexp_apply (fn, (Nolabel, new_obj_arg) :: args); - pexp_attributes = []; - pexp_loc = loc; - } + match fn with + | { pexp_desc = Pexp_tuple xs; pexp_attributes = tuple_attrs } -> + bound new_obj_arg (fun bounded_obj_arg -> + { + pexp_desc = + Pexp_tuple + (Ext_list.map xs (fun fn -> + match fn.pexp_desc with + | Pexp_construct (ctor, None) -> + { + fn with + pexp_desc = + Pexp_construct + (ctor, Some bounded_obj_arg); + } + | Pexp_apply (fn, args) -> + Bs_ast_invariant + .warn_discarded_unused_attributes + fn.pexp_attributes; + { + Parsetree.pexp_desc = + Pexp_apply + ( fn, + (Nolabel, bounded_obj_arg) :: args + ); + pexp_attributes = []; + pexp_loc = fn.pexp_loc; + } + | _ -> + Ast_compatible.app1 ~loc:fn.pexp_loc fn + bounded_obj_arg)); + pexp_attributes = tuple_attrs; + pexp_loc = fn.pexp_loc; + }) | _ -> - Ast_compatible.app1 ~loc ~attrs:e.pexp_attributes fn - new_obj_arg)) + { + (Ast_compatible.app1 ~loc fn new_obj_arg) with + pexp_attributes = e.pexp_attributes; + })) | Some { op = "##"; loc; args = [ obj; rest ] } -> ( (* - obj##property - obj#(method a b ) diff --git a/jscomp/frontend/ast_open_cxt.ml b/jscomp/frontend/ast_open_cxt.ml index 7e7b17399c..e00e6538fc 100644 --- a/jscomp/frontend/ast_open_cxt.ml +++ b/jscomp/frontend/ast_open_cxt.ml @@ -32,9 +32,7 @@ type whole = * Parsetree.attributes) type t = whole list - type exp = Parsetree.expression - type destruct_output = exp list (** @@ -50,12 +48,6 @@ let rec destruct_open_tuple (e : Parsetree.expression) (acc : t) : | Pexp_tuple es -> Some (acc, es, e.pexp_attributes) | _ -> None -let rec destruct (e : Parsetree.expression) (acc : t) = - match e.pexp_desc with - | Pexp_open (flag, lid, cont) -> - destruct cont (Let_open (flag, lid, e.pexp_loc, e.pexp_attributes) :: acc) - | _ -> (e, acc) - let restore_exp (xs : Parsetree.expression) (qualifiers : t) : Parsetree.expression = Ext_list.fold_left qualifiers xs (fun x hole -> diff --git a/jscomp/frontend/ast_open_cxt.mli b/jscomp/frontend/ast_open_cxt.mli index 493db7a050..a50ceda009 100644 --- a/jscomp/frontend/ast_open_cxt.mli +++ b/jscomp/frontend/ast_open_cxt.mli @@ -30,8 +30,6 @@ type t = whole list val restore_exp : Parsetree.expression -> t -> Parsetree.expression -val destruct : Parsetree.expression -> t -> Parsetree.expression * t - val destruct_open_tuple : Parsetree.expression -> t -> diff --git a/jscomp/test/build.ninja b/jscomp/test/build.ninja index dc6260e611..17cc89c9b3 100644 --- a/jscomp/test/build.ninja +++ b/jscomp/test/build.ninja @@ -274,13 +274,11 @@ o test/gpr_2682_test.cmi test/gpr_2682_test.cmj : cc test/gpr_2682_test.ml | $bs o test/gpr_2700_test.cmi test/gpr_2700_test.cmj : cc test/gpr_2700_test.ml | $bsc $stdlib runtime o test/gpr_2731_test.cmi test/gpr_2731_test.cmj : cc test/gpr_2731_test.ml | $bsc $stdlib runtime o test/gpr_2789_test.cmi test/gpr_2789_test.cmj : cc test/gpr_2789_test.ml | test/mt.cmj $bsc $stdlib runtime -o test/gpr_2863_test.cmi test/gpr_2863_test.cmj : cc test/gpr_2863_test.ml | $bsc $stdlib runtime o test/gpr_2931_test.cmi test/gpr_2931_test.cmj : cc test/gpr_2931_test.ml | test/mt.cmj $bsc $stdlib runtime o test/gpr_3142_test.cmi test/gpr_3142_test.cmj : cc test/gpr_3142_test.ml | test/mt.cmj $bsc $stdlib runtime o test/gpr_3154_test.cmi test/gpr_3154_test.cmj : cc test/gpr_3154_test.ml | test/mt.cmj $bsc $stdlib runtime o test/gpr_3209_test.cmi test/gpr_3209_test.cmj : cc test/gpr_3209_test.ml | $bsc $stdlib runtime o test/gpr_3492_test.cmi test/gpr_3492_test.cmj : cc test/gpr_3492_test.ml | test/mt.cmj $bsc $stdlib runtime -o test/gpr_3502_test.cmi test/gpr_3502_test.cmj : cc test/gpr_3502_test.ml | $bsc $stdlib runtime o test/gpr_3519_jsx_test.cmi test/gpr_3519_jsx_test.cmj : cc test/gpr_3519_jsx_test.ml | $bsc $stdlib runtime o test/gpr_3519_test.cmi test/gpr_3519_test.cmj : cc test/gpr_3519_test.ml | $bsc $stdlib runtime o test/gpr_3536_test.cmi test/gpr_3536_test.cmj : cc test/gpr_3536_test.ml | test/mt.cmj $bsc $stdlib runtime @@ -733,4 +731,4 @@ o test/utf8_decode_test.cmi test/utf8_decode_test.cmj : cc test/utf8_decode_test o test/variant.cmi test/variant.cmj : cc test/variant.ml | $bsc $stdlib runtime o test/watch_test.cmi test/watch_test.cmj : cc test/watch_test.ml | $bsc $stdlib runtime o test/webpack_config.cmi test/webpack_config.cmj : cc test/webpack_config.ml | $bsc $stdlib runtime -o test : phony test/406_primitive_test.cmi test/406_primitive_test.cmj test/a.cmi test/a.cmj test/a_filename_test.cmi test/a_filename_test.cmj test/a_list_test.cmi test/a_list_test.cmj test/a_recursive_type.cmi test/a_recursive_type.cmj test/a_scope_bug.cmi test/a_scope_bug.cmj test/a_string_test.cmi test/a_string_test.cmj test/abstract_type.cmi test/abstract_type.cmj test/adt_optimize_test.cmi test/adt_optimize_test.cmj test/alias_test.cmi test/alias_test.cmj test/and_or_tailcall_test.cmi test/and_or_tailcall_test.cmj test/app_root_finder.cmi test/app_root_finder.cmj test/argv_test.cmi test/argv_test.cmj test/ari_regress_test.cmi test/ari_regress_test.cmj test/arith_lexer.cmi test/arith_lexer.cmj test/arith_parser.cmi test/arith_parser.cmj test/arith_syntax.cmi test/arith_syntax.cmj test/arity.cmi test/arity.cmj test/arity_deopt.cmi test/arity_deopt.cmj test/arity_infer.cmi test/arity_infer.cmj test/arity_ml.cmi test/arity_ml.cmj test/array_data_util.cmi test/array_data_util.cmj test/array_safe_get.cmi test/array_safe_get.cmj test/array_subtle_test.cmi test/array_subtle_test.cmj test/array_test.cmi test/array_test.cmj test/ast_abstract_test.cmi test/ast_abstract_test.cmj test/ast_js_mapper_poly_test.cmi test/ast_js_mapper_poly_test.cmj test/ast_js_mapper_test.cmi test/ast_js_mapper_test.cmj test/ast_mapper_defensive_test.cmi test/ast_mapper_defensive_test.cmj test/ast_mapper_unused_warning_test.cmi test/ast_mapper_unused_warning_test.cmj test/async_ideas.cmi test/async_ideas.cmj test/attr_test.cmi test/attr_test.cmj test/b.cmi test/b.cmj test/bal_set_mini.cmi test/bal_set_mini.cmj test/bang_primitive.cmi test/bang_primitive.cmj test/basic_module_test.cmi test/basic_module_test.cmj test/bb.cmi test/bb.cmj test/bdd.cmi test/bdd.cmj test/belt_internal_test.cmi test/belt_internal_test.cmj test/belt_result_alias_test.cmi test/belt_result_alias_test.cmj test/bench.cmi test/bench.cmj test/big_enum.cmi test/big_enum.cmj test/big_polyvar_test.cmi test/big_polyvar_test.cmj test/block_alias_test.cmi test/block_alias_test.cmj test/boolean_test.cmi test/boolean_test.cmj test/bs_MapInt_test.cmi test/bs_MapInt_test.cmj test/bs_abstract_test.cmi test/bs_abstract_test.cmj test/bs_array_test.cmi test/bs_array_test.cmj test/bs_auto_uncurry.cmi test/bs_auto_uncurry.cmj test/bs_auto_uncurry_test.cmi test/bs_auto_uncurry_test.cmj test/bs_float_test.cmi test/bs_float_test.cmj test/bs_hashmap_test.cmi test/bs_hashmap_test.cmj test/bs_hashset_int_test.cmi test/bs_hashset_int_test.cmj test/bs_hashtbl_string_test.cmi test/bs_hashtbl_string_test.cmj test/bs_ignore_effect.cmi test/bs_ignore_effect.cmj test/bs_ignore_test.cmi test/bs_ignore_test.cmj test/bs_int_test.cmi test/bs_int_test.cmj test/bs_list_test.cmi test/bs_list_test.cmj test/bs_map_set_dict_test.cmi test/bs_map_set_dict_test.cmj test/bs_map_test.cmi test/bs_map_test.cmj test/bs_min_max_test.cmi test/bs_min_max_test.cmj test/bs_mutable_set_test.cmi test/bs_mutable_set_test.cmj test/bs_node_string_buffer_test.cmi test/bs_node_string_buffer_test.cmj test/bs_poly_map_test.cmi test/bs_poly_map_test.cmj test/bs_poly_mutable_map_test.cmi test/bs_poly_mutable_map_test.cmj test/bs_poly_mutable_set_test.cmi test/bs_poly_mutable_set_test.cmj test/bs_poly_set_test.cmi test/bs_poly_set_test.cmj test/bs_qualified.cmi test/bs_qualified.cmj test/bs_queue_test.cmi test/bs_queue_test.cmj test/bs_rbset_int_bench.cmi test/bs_rbset_int_bench.cmj test/bs_rest_test.cmi test/bs_rest_test.cmj test/bs_set_bench.cmi test/bs_set_bench.cmj test/bs_set_int_test.cmi test/bs_set_int_test.cmj test/bs_sort_test.cmi test/bs_sort_test.cmj test/bs_splice_partial.cmi test/bs_splice_partial.cmj test/bs_stack_test.cmi test/bs_stack_test.cmj test/bs_string_test.cmi test/bs_string_test.cmj test/bs_unwrap_test.cmi test/bs_unwrap_test.cmj test/buffer_test.cmi test/buffer_test.cmj test/bytes_split_gpr_743_test.cmi test/bytes_split_gpr_743_test.cmj test/caml_compare_test.cmi test/caml_compare_test.cmj test/caml_format_test.cmi test/caml_format_test.cmj test/caml_sys_poly_fill_test.cmi test/caml_sys_poly_fill_test.cmj test/chain_code_test.cmi test/chain_code_test.cmj test/chn_test.cmi test/chn_test.cmj test/class_setter_getter.cmi test/class_setter_getter.cmj test/class_type_ffi_test.cmi test/class_type_ffi_test.cmj test/coercion_module_alias_test.cmi test/coercion_module_alias_test.cmj test/compare_test.cmi test/compare_test.cmj test/complete_parmatch_test.cmi test/complete_parmatch_test.cmj test/complex_if_test.cmi test/complex_if_test.cmj test/complex_test.cmi test/complex_test.cmj test/complex_while_loop.cmi test/complex_while_loop.cmj test/condition_compilation_test.cmi test/condition_compilation_test.cmj test/config1_test.cmi test/config1_test.cmj test/config2_test.cmi test/config2_test.cmj test/console_log_test.cmi test/console_log_test.cmj test/const_block_test.cmi test/const_block_test.cmj test/const_defs.cmi test/const_defs.cmj test/const_defs_test.cmi test/const_defs_test.cmj test/const_test.cmi test/const_test.cmj test/cont_int_fold_test.cmi test/cont_int_fold_test.cmj test/cps_test.cmi test/cps_test.cmj test/cross_module_inline_test.cmi test/cross_module_inline_test.cmj test/custom_error_test.cmi test/custom_error_test.cmj test/debug_keep_test.cmi test/debug_keep_test.cmj test/debug_mode_value.cmi test/debug_mode_value.cmj test/debug_tmp.cmi test/debug_tmp.cmj test/debugger_test.cmi test/debugger_test.cmj test/default_export_test.cmi test/default_export_test.cmj test/defunctor_make_test.cmi test/defunctor_make_test.cmj test/demo.cmi test/demo.cmj test/demo_binding.cmi test/demo_binding.cmj test/demo_int_map.cmi test/demo_int_map.cmj test/demo_page.cmi test/demo_page.cmj test/demo_pipe.cmi test/demo_pipe.cmj test/derive_dyntype.cmi test/derive_dyntype.cmj test/derive_projector_test.cmi test/derive_projector_test.cmj test/derive_type_test.cmi test/derive_type_test.cmj test/digest_test.cmi test/digest_test.cmj test/div_by_zero_test.cmi test/div_by_zero_test.cmj test/dollar_escape_test.cmi test/dollar_escape_test.cmj test/earger_curry_test.cmi test/earger_curry_test.cmj test/effect.cmi test/effect.cmj test/epsilon_test.cmi test/epsilon_test.cmj test/equal_box_test.cmi test/equal_box_test.cmj test/equal_exception_test.cmi test/equal_exception_test.cmj test/equal_test.cmi test/equal_test.cmj test/es6_export.cmi test/es6_export.cmj test/es6_import.cmi test/es6_import.cmj test/es6_module_test.cmi test/es6_module_test.cmj test/escape_esmodule.cmi test/escape_esmodule.cmj test/esmodule_ref.cmi test/esmodule_ref.cmj test/event_ffi.cmi test/event_ffi.cmj test/exception_alias.cmi test/exception_alias.cmj test/exception_def.cmi test/exception_def.cmj test/exception_raise_test.cmi test/exception_raise_test.cmj test/exception_rebind_test.cmi test/exception_rebind_test.cmj test/exception_rebound_err_test.cmi test/exception_rebound_err_test.cmj test/exception_repr_test.cmi test/exception_repr_test.cmj test/exception_value_test.cmi test/exception_value_test.cmj test/exn_error_pattern.cmi test/exn_error_pattern.cmj test/export_keyword.cmi test/export_keyword.cmj test/ext_array_test.cmi test/ext_array_test.cmj test/ext_bytes_test.cmi test/ext_bytes_test.cmj test/ext_filename_test.cmi test/ext_filename_test.cmj test/ext_list_test.cmi test/ext_list_test.cmj test/ext_pervasives_test.cmi test/ext_pervasives_test.cmj test/ext_string_test.cmi test/ext_string_test.cmj test/ext_sys_test.cmi test/ext_sys_test.cmj test/extensible_variant_test.cmi test/extensible_variant_test.cmj test/external_polyfill_test.cmi test/external_polyfill_test.cmj test/external_ppx.cmi test/external_ppx.cmj test/external_ppx2.cmi test/external_ppx2.cmj test/fail_comp.cmi test/fail_comp.cmj test/ffi_arity_test.cmi test/ffi_arity_test.cmj test/ffi_array_test.cmi test/ffi_array_test.cmj test/ffi_js_test.cmi test/ffi_js_test.cmj test/ffi_splice_test.cmi test/ffi_splice_test.cmj test/ffi_test.cmi test/ffi_test.cmj test/fib.cmi test/fib.cmj test/flattern_order_test.cmi test/flattern_order_test.cmj test/flexible_array_test.cmi test/flexible_array_test.cmj test/float_array.cmi test/float_array.cmj test/float_of_bits_test.cmi test/float_of_bits_test.cmj test/float_record.cmi test/float_record.cmj test/float_test.cmi test/float_test.cmj test/floatarray_test.cmi test/floatarray_test.cmj test/flow_parser_reg_test.cmi test/flow_parser_reg_test.cmj test/for_loop_test.cmi test/for_loop_test.cmj test/for_side_effect_test.cmi test/for_side_effect_test.cmj test/format_regression.cmi test/format_regression.cmj test/format_test.cmi test/format_test.cmj test/fs_test.cmi test/fs_test.cmj test/fun_pattern_match.cmi test/fun_pattern_match.cmj test/functor_app_test.cmi test/functor_app_test.cmj test/functor_def.cmi test/functor_def.cmj test/functor_ffi.cmi test/functor_ffi.cmj test/functor_inst.cmi test/functor_inst.cmj test/functors.cmi test/functors.cmj test/gbk.cmi test/gbk.cmj test/genlex_test.cmi test/genlex_test.cmj test/gentTypeReTest.cmi test/gentTypeReTest.cmj test/global_exception_regression_test.cmi test/global_exception_regression_test.cmj test/global_mangles.cmi test/global_mangles.cmj test/global_module_alias_test.cmi test/global_module_alias_test.cmj test/google_closure_test.cmi test/google_closure_test.cmj test/gpr496_test.cmi test/gpr496_test.cmj test/gpr_1063_test.cmi test/gpr_1063_test.cmj test/gpr_1072.cmi test/gpr_1072.cmj test/gpr_1072_reg.cmi test/gpr_1072_reg.cmj test/gpr_1150.cmi test/gpr_1150.cmj test/gpr_1154_test.cmi test/gpr_1154_test.cmj test/gpr_1170.cmi test/gpr_1170.cmj test/gpr_1240_missing_unbox.cmi test/gpr_1240_missing_unbox.cmj test/gpr_1245_test.cmi test/gpr_1245_test.cmj test/gpr_1268.cmi test/gpr_1268.cmj test/gpr_1409_test.cmi test/gpr_1409_test.cmj test/gpr_1423_app_test.cmi test/gpr_1423_app_test.cmj test/gpr_1423_nav.cmi test/gpr_1423_nav.cmj test/gpr_1438.cmi test/gpr_1438.cmj test/gpr_1481.cmi test/gpr_1481.cmj test/gpr_1484.cmi test/gpr_1484.cmj test/gpr_1501_test.cmi test/gpr_1501_test.cmj test/gpr_1503_test.cmi test/gpr_1503_test.cmj test/gpr_1539_test.cmi test/gpr_1539_test.cmj test/gpr_1600_test.cmi test/gpr_1600_test.cmj test/gpr_1658_test.cmi test/gpr_1658_test.cmj test/gpr_1667_test.cmi test/gpr_1667_test.cmj test/gpr_1692_test.cmi test/gpr_1692_test.cmj test/gpr_1698_test.cmi test/gpr_1698_test.cmj test/gpr_1701_test.cmi test/gpr_1701_test.cmj test/gpr_1716_test.cmi test/gpr_1716_test.cmj test/gpr_1717_test.cmi test/gpr_1717_test.cmj test/gpr_1728_test.cmi test/gpr_1728_test.cmj test/gpr_1749_test.cmi test/gpr_1749_test.cmj test/gpr_1759_test.cmi test/gpr_1759_test.cmj test/gpr_1760_test.cmi test/gpr_1760_test.cmj test/gpr_1762_test.cmi test/gpr_1762_test.cmj test/gpr_1817_test.cmi test/gpr_1817_test.cmj test/gpr_1822_test.cmi test/gpr_1822_test.cmj test/gpr_1891_test.cmi test/gpr_1891_test.cmj test/gpr_1943_test.cmi test/gpr_1943_test.cmj test/gpr_1946_test.cmi test/gpr_1946_test.cmj test/gpr_2316_test.cmi test/gpr_2316_test.cmj test/gpr_2352_test.cmi test/gpr_2352_test.cmj test/gpr_2413_test.cmi test/gpr_2413_test.cmj test/gpr_2474.cmi test/gpr_2474.cmj test/gpr_2487.cmi test/gpr_2487.cmj test/gpr_2503_test.cmi test/gpr_2503_test.cmj test/gpr_2608_test.cmi test/gpr_2608_test.cmj test/gpr_2614_test.cmi test/gpr_2614_test.cmj test/gpr_2633_test.cmi test/gpr_2633_test.cmj test/gpr_2642_test.cmi test/gpr_2642_test.cmj test/gpr_2652_test.cmi test/gpr_2652_test.cmj test/gpr_2682_test.cmi test/gpr_2682_test.cmj test/gpr_2700_test.cmi test/gpr_2700_test.cmj test/gpr_2731_test.cmi test/gpr_2731_test.cmj test/gpr_2789_test.cmi test/gpr_2789_test.cmj test/gpr_2863_test.cmi test/gpr_2863_test.cmj test/gpr_2931_test.cmi test/gpr_2931_test.cmj test/gpr_3142_test.cmi test/gpr_3142_test.cmj test/gpr_3154_test.cmi test/gpr_3154_test.cmj test/gpr_3209_test.cmi test/gpr_3209_test.cmj test/gpr_3492_test.cmi test/gpr_3492_test.cmj test/gpr_3502_test.cmi test/gpr_3502_test.cmj test/gpr_3519_jsx_test.cmi test/gpr_3519_jsx_test.cmj test/gpr_3519_test.cmi test/gpr_3519_test.cmj test/gpr_3536_test.cmi test/gpr_3536_test.cmj test/gpr_3546_test.cmi test/gpr_3546_test.cmj test/gpr_3548_test.cmi test/gpr_3548_test.cmj test/gpr_3549_test.cmi test/gpr_3549_test.cmj test/gpr_3566_drive_test.cmi test/gpr_3566_drive_test.cmj test/gpr_3566_test.cmi test/gpr_3566_test.cmj test/gpr_3595_test.cmi test/gpr_3595_test.cmj test/gpr_3609_test.cmi test/gpr_3609_test.cmj test/gpr_3697_test.cmi test/gpr_3697_test.cmj test/gpr_373_test.cmi test/gpr_373_test.cmj test/gpr_3770_test.cmi test/gpr_3770_test.cmj test/gpr_3852_alias.cmi test/gpr_3852_alias.cmj test/gpr_3852_alias_reify.cmi test/gpr_3852_alias_reify.cmj test/gpr_3852_effect.cmi test/gpr_3852_effect.cmj test/gpr_3865.cmi test/gpr_3865.cmj test/gpr_3865_bar.cmi test/gpr_3865_bar.cmj test/gpr_3865_foo.cmi test/gpr_3865_foo.cmj test/gpr_3875_test.cmi test/gpr_3875_test.cmj test/gpr_3877_test.cmi test/gpr_3877_test.cmj test/gpr_3895_test.cmi test/gpr_3895_test.cmj test/gpr_3897_test.cmi test/gpr_3897_test.cmj test/gpr_3931_test.cmi test/gpr_3931_test.cmj test/gpr_3980_test.cmi test/gpr_3980_test.cmj test/gpr_4025_test.cmi test/gpr_4025_test.cmj test/gpr_405_test.cmi test/gpr_405_test.cmj test/gpr_4069_test.cmi test/gpr_4069_test.cmj test/gpr_4265_test.cmi test/gpr_4265_test.cmj test/gpr_4274_test.cmi test/gpr_4274_test.cmj test/gpr_4280_test.cmi test/gpr_4280_test.cmj test/gpr_4407_test.cmi test/gpr_4407_test.cmj test/gpr_441.cmi test/gpr_441.cmj test/gpr_4442_test.cmi test/gpr_4442_test.cmj test/gpr_4491_test.cmi test/gpr_4491_test.cmj test/gpr_4494_test.cmi test/gpr_4494_test.cmj test/gpr_4519_test.cmi test/gpr_4519_test.cmj test/gpr_459_test.cmi test/gpr_459_test.cmj test/gpr_4632.cmi test/gpr_4632.cmj test/gpr_4639_test.cmi test/gpr_4639_test.cmj test/gpr_4900_test.cmi test/gpr_4900_test.cmj test/gpr_4924_test.cmi test/gpr_4924_test.cmj test/gpr_4931.cmi test/gpr_4931.cmj test/gpr_4931_allow.cmi test/gpr_4931_allow.cmj test/gpr_5071_test.cmi test/gpr_5071_test.cmj test/gpr_5169_test.cmi test/gpr_5169_test.cmj test/gpr_5218_test.cmi test/gpr_5218_test.cmj test/gpr_5280_optimize_test.cmi test/gpr_5280_optimize_test.cmj test/gpr_5312.cmi test/gpr_5312.cmj test/gpr_627_test.cmi test/gpr_627_test.cmj test/gpr_658.cmi test/gpr_658.cmj test/gpr_858_test.cmi test/gpr_858_test.cmj test/gpr_858_unit2_test.cmi test/gpr_858_unit2_test.cmj test/gpr_904_test.cmi test/gpr_904_test.cmj test/gpr_974_test.cmi test/gpr_974_test.cmj test/gpr_977_test.cmi test/gpr_977_test.cmj test/gpr_return_type_unused_attribute.cmi test/gpr_return_type_unused_attribute.cmj test/gray_code_test.cmi test/gray_code_test.cmj test/guide_for_ext.cmi test/guide_for_ext.cmj test/hamming_test.cmi test/hamming_test.cmj test/hash_collision_test.cmi test/hash_collision_test.cmj test/hash_sugar_desugar.cmi test/hash_sugar_desugar.cmj test/hash_test.cmi test/hash_test.cmj test/hashtbl_test.cmi test/hashtbl_test.cmj test/hello.foo.cmi test/hello.foo.cmj test/hello_res.cmi test/hello_res.cmj test/http_types.cmi test/http_types.cmj test/ignore_test.cmi test/ignore_test.cmj test/imm_map_bench.cmi test/imm_map_bench.cmj test/include_side_effect.cmi test/include_side_effect.cmj test/include_side_effect_free.cmi test/include_side_effect_free.cmj test/incomplete_toplevel_test.cmi test/incomplete_toplevel_test.cmj test/infer_type_test.cmi test/infer_type_test.cmj test/inline_const.cmi test/inline_const.cmj test/inline_const_test.cmi test/inline_const_test.cmj test/inline_edge_cases.cmi test/inline_edge_cases.cmj test/inline_map2_test.cmi test/inline_map2_test.cmj test/inline_map_demo.cmi test/inline_map_demo.cmj test/inline_map_test.cmi test/inline_map_test.cmj test/inline_record_test.cmi test/inline_record_test.cmj test/inline_regression_test.cmi test/inline_regression_test.cmj test/inline_string_test.cmi test/inline_string_test.cmj test/inner_call.cmi test/inner_call.cmj test/inner_define.cmi test/inner_define.cmj test/inner_unused.cmi test/inner_unused.cmj test/installation_test.cmi test/installation_test.cmj test/int32_test.cmi test/int32_test.cmj test/int64_mul_div_test.cmi test/int64_mul_div_test.cmj test/int64_string_bench.cmi test/int64_string_bench.cmj test/int64_string_test.cmi test/int64_string_test.cmj test/int64_test.cmi test/int64_test.cmj test/int_hashtbl_test.cmi test/int_hashtbl_test.cmj test/int_map.cmi test/int_map.cmj test/int_overflow_test.cmi test/int_overflow_test.cmj test/int_poly_var.cmi test/int_poly_var.cmj test/int_switch_test.cmi test/int_switch_test.cmj test/internal_unused_test.cmi test/internal_unused_test.cmj test/io_test.cmi test/io_test.cmj test/js_array_test.cmi test/js_array_test.cmj test/js_bool_test.cmi test/js_bool_test.cmj test/js_cast_test.cmi test/js_cast_test.cmj test/js_date_test.cmi test/js_date_test.cmj test/js_dict_test.cmi test/js_dict_test.cmj test/js_exception_catch_test.cmi test/js_exception_catch_test.cmj test/js_float_test.cmi test/js_float_test.cmj test/js_global_test.cmi test/js_global_test.cmj test/js_int_test.cmi test/js_int_test.cmj test/js_json_test.cmi test/js_json_test.cmj test/js_list_test.cmi test/js_list_test.cmj test/js_math_test.cmi test/js_math_test.cmj test/js_null_test.cmi test/js_null_test.cmj test/js_null_undefined_test.cmi test/js_null_undefined_test.cmj test/js_nullable_test.cmi test/js_nullable_test.cmj test/js_obj_test.cmi test/js_obj_test.cmj test/js_option_test.cmi test/js_option_test.cmj test/js_promise_basic_test.cmi test/js_promise_basic_test.cmj test/js_re_test.cmi test/js_re_test.cmj test/js_string_test.cmi test/js_string_test.cmj test/js_typed_array_test.cmi test/js_typed_array_test.cmj test/js_undefined_test.cmi test/js_undefined_test.cmj test/js_val.cmi test/js_val.cmj test/jsoo_400_test.cmi test/jsoo_400_test.cmj test/jsoo_485_test.cmi test/jsoo_485_test.cmj test/key_word_property.cmi test/key_word_property.cmj test/key_word_property2.cmi test/key_word_property2.cmj test/key_word_property_plus_test.cmi test/key_word_property_plus_test.cmj test/label_uncurry.cmi test/label_uncurry.cmj test/large_integer_pat.cmi test/large_integer_pat.cmj test/large_record_duplication_test.cmi test/large_record_duplication_test.cmj test/largest_int_flow.cmi test/largest_int_flow.cmj test/lazy_demo.cmi test/lazy_demo.cmj test/lazy_test.cmi test/lazy_test.cmj test/lexer_test.cmi test/lexer_test.cmj test/lib_js_test.cmi test/lib_js_test.cmj test/libarg_test.cmi test/libarg_test.cmj test/libqueue_test.cmi test/libqueue_test.cmj test/limits_test.cmi test/limits_test.cmj test/list_stack.cmi test/list_stack.cmj test/list_test.cmi test/list_test.cmj test/local_class_type.cmi test/local_class_type.cmj test/local_exception_test.cmi test/local_exception_test.cmj test/loop_regression_test.cmi test/loop_regression_test.cmj test/loop_suites_test.cmi test/loop_suites_test.cmj test/map_find_test.cmi test/map_find_test.cmj test/map_test.cmi test/map_test.cmj test/mario_game.cmi test/mario_game.cmj test/marshal.cmi test/marshal.cmj test/method_chain.cmi test/method_chain.cmj test/method_name_test.cmi test/method_name_test.cmj test/method_string_name.cmi test/method_string_name.cmj test/minimal_test.cmi test/minimal_test.cmj test/miss_colon_test.cmi test/miss_colon_test.cmj test/mock_mt.cmi test/mock_mt.cmj test/module_alias_test.cmi test/module_alias_test.cmj test/module_as_class_ffi.cmi test/module_as_class_ffi.cmj test/module_as_function.cmi test/module_as_function.cmj test/module_missing_conversion.cmi test/module_missing_conversion.cmj test/module_parameter_test.cmi test/module_parameter_test.cmj test/module_splice_test.cmi test/module_splice_test.cmj test/more_poly_variant_test.cmi test/more_poly_variant_test.cmj test/more_uncurry.cmi test/more_uncurry.cmj test/mpr_6033_test.cmi test/mpr_6033_test.cmj test/mt.cmi test/mt.cmj test/mt_global.cmi test/mt_global.cmj test/mutable_obj_test.cmi test/mutable_obj_test.cmj test/mutable_uncurry_test.cmi test/mutable_uncurry_test.cmj test/mutual_non_recursive_type.cmi test/mutual_non_recursive_type.cmj test/name_mangle_test.cmi test/name_mangle_test.cmj test/nested_include.cmi test/nested_include.cmj test/nested_module_alias.cmi test/nested_module_alias.cmj test/nested_obj_literal.cmi test/nested_obj_literal.cmj test/nested_obj_test.cmi test/nested_obj_test.cmj test/nested_pattern_match_test.cmi test/nested_pattern_match_test.cmj test/noassert.cmi test/noassert.cmj test/node_fs_test.cmi test/node_fs_test.cmj test/node_path_test.cmi test/node_path_test.cmj test/null_list_test.cmi test/null_list_test.cmj test/number_lexer.cmi test/number_lexer.cmj test/obj_literal_ppx.cmi test/obj_literal_ppx.cmj test/obj_literal_ppx_test.cmi test/obj_literal_ppx_test.cmj test/obj_magic_test.cmi test/obj_magic_test.cmj test/obj_type_test.cmi test/obj_type_test.cmj test/ocaml_re_test.cmi test/ocaml_re_test.cmj test/of_string_test.cmi test/of_string_test.cmj test/offset.cmi test/offset.cmj test/oo_js_test_date.cmi test/oo_js_test_date.cmj test/option_encoding_test.cmi test/option_encoding_test.cmj test/option_record_none_test.cmi test/option_record_none_test.cmj test/option_repr_test.cmi test/option_repr_test.cmj test/optional_ffi_test.cmi test/optional_ffi_test.cmj test/optional_regression_test.cmi test/optional_regression_test.cmj test/pipe_send_readline.cmi test/pipe_send_readline.cmj test/pipe_syntax.cmi test/pipe_syntax.cmj test/poly_empty_array.cmi test/poly_empty_array.cmj test/poly_type.cmi test/poly_type.cmj test/poly_variant_test.cmi test/poly_variant_test.cmj test/polymorphic_raw_test.cmi test/polymorphic_raw_test.cmj test/polymorphism_test.cmi test/polymorphism_test.cmj test/polyvar_convert.cmi test/polyvar_convert.cmj test/polyvar_test.cmi test/polyvar_test.cmj test/ppx_apply_test.cmi test/ppx_apply_test.cmj test/ppx_this_obj_field.cmi test/ppx_this_obj_field.cmj test/ppx_this_obj_test.cmi test/ppx_this_obj_test.cmj test/pq_test.cmi test/pq_test.cmj test/pr6726.cmi test/pr6726.cmj test/pr_regression_test.cmi test/pr_regression_test.cmj test/prepend_data_ffi.cmi test/prepend_data_ffi.cmj test/primitive_reg_test.cmi test/primitive_reg_test.cmj test/print_alpha_test.cmi test/print_alpha_test.cmj test/promise.cmi test/promise.cmj test/promise_catch_test.cmi test/promise_catch_test.cmj test/queue_402.cmi test/queue_402.cmj test/queue_test.cmi test/queue_test.cmj test/random_test.cmi test/random_test.cmj test/raw_hash_tbl_bench.cmi test/raw_hash_tbl_bench.cmj test/raw_output_test.cmi test/raw_output_test.cmj test/raw_pure_test.cmi test/raw_pure_test.cmj test/rbset.cmi test/rbset.cmj test/re_first_test.cmi test/re_first_test.cmj test/react.cmi test/react.cmj test/reactDOMRe.cmi test/reactDOMRe.cmj test/reactDOMServerRe.cmi test/reactDOMServerRe.cmj test/reactEvent.cmi test/reactEvent.cmj test/reactTestUtils.cmi test/reactTestUtils.cmj test/reasonReact.cmi test/reasonReact.cmj test/reasonReactCompat.cmi test/reasonReactCompat.cmj test/reasonReactOptimizedCreateClass.cmi test/reasonReactOptimizedCreateClass.cmj test/reasonReactRouter.cmi test/reasonReactRouter.cmj test/rebind_module.cmi test/rebind_module.cmj test/rebind_module_test.cmi test/rebind_module_test.cmj test/rec_fun_test.cmi test/rec_fun_test.cmj test/rec_module_opt.cmi test/rec_module_opt.cmj test/rec_module_test.cmi test/rec_module_test.cmj test/rec_value_test.cmi test/rec_value_test.cmj test/record_debug_test.cmi test/record_debug_test.cmj test/record_extension_test.cmi test/record_extension_test.cmj test/record_name_test.cmi test/record_name_test.cmj test/record_regression.cmi test/record_regression.cmj test/record_with_test.cmi test/record_with_test.cmj test/recursive_module.cmi test/recursive_module.cmj test/recursive_module_test.cmi test/recursive_module_test.cmj test/recursive_react_component.cmi test/recursive_react_component.cmj test/recursive_records_test.cmi test/recursive_records_test.cmj test/recursive_unbound_module_test.cmi test/recursive_unbound_module_test.cmj test/regression_print.cmi test/regression_print.cmj test/relative_path.cmi test/relative_path.cmj test/res_debug.cmi test/res_debug.cmj test/return_check.cmi test/return_check.cmj test/runtime_encoding_test.cmi test/runtime_encoding_test.cmj test/set_gen.cmi test/set_gen.cmj test/sexp.cmi test/sexp.cmj test/sexpm.cmi test/sexpm.cmj test/sexpm_test.cmi test/sexpm_test.cmj test/side_effect.cmi test/side_effect.cmj test/side_effect_free.cmi test/side_effect_free.cmj test/simple_derive_test.cmi test/simple_derive_test.cmj test/simple_derive_use.cmi test/simple_derive_use.cmj test/simple_lexer_test.cmi test/simple_lexer_test.cmj test/simplify_lambda_632o.cmi test/simplify_lambda_632o.cmj test/single_module_alias.cmi test/single_module_alias.cmj test/singular_unit_test.cmi test/singular_unit_test.cmj test/small_inline_test.cmi test/small_inline_test.cmj test/splice_test.cmi test/splice_test.cmj test/stack_comp_test.cmi test/stack_comp_test.cmj test/stack_test.cmi test/stack_test.cmj test/stream_parser_test.cmi test/stream_parser_test.cmj test/string_bound_get_test.cmi test/string_bound_get_test.cmj test/string_get_set_test.cmi test/string_get_set_test.cmj test/string_interp_test.cmi test/string_interp_test.cmj test/string_literal_print_test.cmi test/string_literal_print_test.cmj test/string_runtime_test.cmi test/string_runtime_test.cmj test/string_set.cmi test/string_set.cmj test/string_set_test.cmi test/string_set_test.cmj test/string_test.cmi test/string_test.cmj test/string_unicode_test.cmi test/string_unicode_test.cmj test/stringmatch_test.cmi test/stringmatch_test.cmj test/submodule.cmi test/submodule.cmj test/submodule_call.cmi test/submodule_call.cmj test/switch_case_test.cmi test/switch_case_test.cmj test/tailcall_inline_test.cmi test/tailcall_inline_test.cmj test/test.cmi test/test.cmj test/test2.cmi test/test2.cmj test/test_alias.cmi test/test_alias.cmj test/test_ari.cmi test/test_ari.cmj test/test_array.cmi test/test_array.cmj test/test_array_append.cmi test/test_array_append.cmj test/test_array_primitive.cmi test/test_array_primitive.cmj test/test_bool_equal.cmi test/test_bool_equal.cmj test/test_bs_this.cmi test/test_bs_this.cmj test/test_bug.cmi test/test_bug.cmj test/test_bytes.cmi test/test_bytes.cmj test/test_case_opt_collision.cmi test/test_case_opt_collision.cmj test/test_case_set.cmi test/test_case_set.cmj test/test_char.cmi test/test_char.cmj test/test_closure.cmi test/test_closure.cmj test/test_common.cmi test/test_common.cmj test/test_const_elim.cmi test/test_const_elim.cmj test/test_const_propogate.cmi test/test_const_propogate.cmj test/test_cpp.cmi test/test_cpp.cmj test/test_cps.cmi test/test_cps.cmj test/test_demo.cmi test/test_demo.cmj test/test_dup_param.cmi test/test_dup_param.cmj test/test_eq.cmi test/test_eq.cmj test/test_exception.cmi test/test_exception.cmj test/test_exception_escape.cmi test/test_exception_escape.cmj test/test_export2.cmi test/test_export2.cmj test/test_external.cmi test/test_external.cmj test/test_external_unit.cmi test/test_external_unit.cmj test/test_ffi.cmi test/test_ffi.cmj test/test_fib.cmi test/test_fib.cmj test/test_filename.cmi test/test_filename.cmj test/test_for_loop.cmi test/test_for_loop.cmj test/test_for_map.cmi test/test_for_map.cmj test/test_for_map2.cmi test/test_for_map2.cmj test/test_format.cmi test/test_format.cmj test/test_formatter.cmi test/test_formatter.cmj test/test_functor_dead_code.cmi test/test_functor_dead_code.cmj test/test_generative_module.cmi test/test_generative_module.cmj test/test_global_print.cmi test/test_global_print.cmj test/test_google_closure.cmi test/test_google_closure.cmj test/test_http_server.cmi test/test_http_server.cmj test/test_include.cmi test/test_include.cmj test/test_incomplete.cmi test/test_incomplete.cmj test/test_incr_ref.cmi test/test_incr_ref.cmj test/test_index.cmi test/test_index.cmj test/test_int_map_find.cmi test/test_int_map_find.cmj test/test_internalOO.cmi test/test_internalOO.cmj test/test_is_js.cmi test/test_is_js.cmj test/test_js_ffi.cmi test/test_js_ffi.cmj test/test_let.cmi test/test_let.cmj test/test_list.cmi test/test_list.cmj test/test_literal.cmi test/test_literal.cmj test/test_literals.cmi test/test_literals.cmj test/test_match_exception.cmi test/test_match_exception.cmj test/test_mutliple.cmi test/test_mutliple.cmj test/test_nat64.cmi test/test_nat64.cmj test/test_nested_let.cmi test/test_nested_let.cmj test/test_nested_print.cmi test/test_nested_print.cmj test/test_non_export.cmi test/test_non_export.cmj test/test_nullary.cmi test/test_nullary.cmj test/test_obj.cmi test/test_obj.cmj test/test_obj_simple_ffi.cmi test/test_obj_simple_ffi.cmj test/test_order.cmi test/test_order.cmj test/test_order_tailcall.cmi test/test_order_tailcall.cmj test/test_other_exn.cmi test/test_other_exn.cmj test/test_pack.cmi test/test_pack.cmj test/test_per.cmi test/test_per.cmj test/test_pervasive.cmi test/test_pervasive.cmj test/test_pervasives2.cmi test/test_pervasives2.cmj test/test_pervasives3.cmi test/test_pervasives3.cmj test/test_primitive.cmi test/test_primitive.cmj test/test_promise_bind.cmi test/test_promise_bind.cmj test/test_ramification.cmi test/test_ramification.cmj test/test_react.cmi test/test_react.cmj test/test_react_case.cmi test/test_react_case.cmj test/test_regex.cmi test/test_regex.cmj test/test_require.cmi test/test_require.cmj test/test_runtime_encoding.cmi test/test_runtime_encoding.cmj test/test_scope.cmi test/test_scope.cmj test/test_seq.cmi test/test_seq.cmj test/test_set.cmi test/test_set.cmj test/test_side_effect_functor.cmi test/test_side_effect_functor.cmj test/test_simple_include.cmi test/test_simple_include.cmj test/test_simple_pattern_match.cmi test/test_simple_pattern_match.cmj test/test_simple_ref.cmi test/test_simple_ref.cmj test/test_simple_tailcall.cmi test/test_simple_tailcall.cmj test/test_small.cmi test/test_small.cmj test/test_sprintf.cmi test/test_sprintf.cmj test/test_stack.cmi test/test_stack.cmj test/test_static_catch_ident.cmi test/test_static_catch_ident.cmj test/test_string.cmi test/test_string.cmj test/test_string_case.cmi test/test_string_case.cmj test/test_string_const.cmi test/test_string_const.cmj test/test_string_map.cmi test/test_string_map.cmj test/test_string_switch.cmi test/test_string_switch.cmj test/test_switch.cmi test/test_switch.cmj test/test_trywith.cmi test/test_trywith.cmj test/test_tuple.cmi test/test_tuple.cmj test/test_tuple_destructring.cmi test/test_tuple_destructring.cmj test/test_type_based_arity.cmi test/test_type_based_arity.cmj test/test_u.cmi test/test_u.cmj test/test_unknown.cmi test/test_unknown.cmj test/test_unsafe_cmp.cmi test/test_unsafe_cmp.cmj test/test_unsafe_obj_ffi.cmi test/test_unsafe_obj_ffi.cmj test/test_unsafe_obj_ffi_ppx.cmi test/test_unsafe_obj_ffi_ppx.cmj test/test_unsupported_primitive.cmi test/test_unsupported_primitive.cmj test/test_while_closure.cmi test/test_while_closure.cmj test/test_while_side_effect.cmi test/test_while_side_effect.cmj test/test_zero_nullable.cmi test/test_zero_nullable.cmj test/then_mangle_test.cmi test/then_mangle_test.cmj test/ticker.cmi test/ticker.cmj test/to_string_test.cmi test/to_string_test.cmj test/topsort_test.cmi test/topsort_test.cmj test/tramp_fib.cmi test/tramp_fib.cmj test/tuple_alloc.cmi test/tuple_alloc.cmj test/type_disambiguate.cmi test/type_disambiguate.cmj test/typeof_test.cmi test/typeof_test.cmj test/ui_defs.cmi test/unboxed_attribute.cmi test/unboxed_attribute.cmj test/unboxed_attribute_test.cmi test/unboxed_attribute_test.cmj test/unboxed_crash.cmi test/unboxed_crash.cmj test/unboxed_use_case.cmi test/unboxed_use_case.cmj test/uncurry_external_test.cmi test/uncurry_external_test.cmj test/uncurry_glob_test.cmi test/uncurry_glob_test.cmj test/uncurry_method.cmi test/uncurry_method.cmj test/uncurry_test.cmi test/uncurry_test.cmj test/undef_regression2_test.cmi test/undef_regression2_test.cmj test/undef_regression_test.cmi test/undef_regression_test.cmj test/undefine_conditional.cmi test/undefine_conditional.cmj test/unicode_type_error.cmi test/unicode_type_error.cmj test/unit_undefined_test.cmi test/unit_undefined_test.cmj test/unitest_string.cmi test/unitest_string.cmj test/unsafe_full_apply_primitive.cmi test/unsafe_full_apply_primitive.cmj test/unsafe_obj_external.cmi test/unsafe_obj_external.cmj test/unsafe_ppx_test.cmi test/unsafe_ppx_test.cmj test/unsafe_this.cmi test/unsafe_this.cmj test/update_record_test.cmi test/update_record_test.cmj test/utf8_decode_test.cmi test/utf8_decode_test.cmj test/variant.cmi test/variant.cmj test/watch_test.cmi test/watch_test.cmj test/webpack_config.cmi test/webpack_config.cmj +o test : phony test/406_primitive_test.cmi test/406_primitive_test.cmj test/a.cmi test/a.cmj test/a_filename_test.cmi test/a_filename_test.cmj test/a_list_test.cmi test/a_list_test.cmj test/a_recursive_type.cmi test/a_recursive_type.cmj test/a_scope_bug.cmi test/a_scope_bug.cmj test/a_string_test.cmi test/a_string_test.cmj test/abstract_type.cmi test/abstract_type.cmj test/adt_optimize_test.cmi test/adt_optimize_test.cmj test/alias_test.cmi test/alias_test.cmj test/and_or_tailcall_test.cmi test/and_or_tailcall_test.cmj test/app_root_finder.cmi test/app_root_finder.cmj test/argv_test.cmi test/argv_test.cmj test/ari_regress_test.cmi test/ari_regress_test.cmj test/arith_lexer.cmi test/arith_lexer.cmj test/arith_parser.cmi test/arith_parser.cmj test/arith_syntax.cmi test/arith_syntax.cmj test/arity.cmi test/arity.cmj test/arity_deopt.cmi test/arity_deopt.cmj test/arity_infer.cmi test/arity_infer.cmj test/arity_ml.cmi test/arity_ml.cmj test/array_data_util.cmi test/array_data_util.cmj test/array_safe_get.cmi test/array_safe_get.cmj test/array_subtle_test.cmi test/array_subtle_test.cmj test/array_test.cmi test/array_test.cmj test/ast_abstract_test.cmi test/ast_abstract_test.cmj test/ast_js_mapper_poly_test.cmi test/ast_js_mapper_poly_test.cmj test/ast_js_mapper_test.cmi test/ast_js_mapper_test.cmj test/ast_mapper_defensive_test.cmi test/ast_mapper_defensive_test.cmj test/ast_mapper_unused_warning_test.cmi test/ast_mapper_unused_warning_test.cmj test/async_ideas.cmi test/async_ideas.cmj test/attr_test.cmi test/attr_test.cmj test/b.cmi test/b.cmj test/bal_set_mini.cmi test/bal_set_mini.cmj test/bang_primitive.cmi test/bang_primitive.cmj test/basic_module_test.cmi test/basic_module_test.cmj test/bb.cmi test/bb.cmj test/bdd.cmi test/bdd.cmj test/belt_internal_test.cmi test/belt_internal_test.cmj test/belt_result_alias_test.cmi test/belt_result_alias_test.cmj test/bench.cmi test/bench.cmj test/big_enum.cmi test/big_enum.cmj test/big_polyvar_test.cmi test/big_polyvar_test.cmj test/block_alias_test.cmi test/block_alias_test.cmj test/boolean_test.cmi test/boolean_test.cmj test/bs_MapInt_test.cmi test/bs_MapInt_test.cmj test/bs_abstract_test.cmi test/bs_abstract_test.cmj test/bs_array_test.cmi test/bs_array_test.cmj test/bs_auto_uncurry.cmi test/bs_auto_uncurry.cmj test/bs_auto_uncurry_test.cmi test/bs_auto_uncurry_test.cmj test/bs_float_test.cmi test/bs_float_test.cmj test/bs_hashmap_test.cmi test/bs_hashmap_test.cmj test/bs_hashset_int_test.cmi test/bs_hashset_int_test.cmj test/bs_hashtbl_string_test.cmi test/bs_hashtbl_string_test.cmj test/bs_ignore_effect.cmi test/bs_ignore_effect.cmj test/bs_ignore_test.cmi test/bs_ignore_test.cmj test/bs_int_test.cmi test/bs_int_test.cmj test/bs_list_test.cmi test/bs_list_test.cmj test/bs_map_set_dict_test.cmi test/bs_map_set_dict_test.cmj test/bs_map_test.cmi test/bs_map_test.cmj test/bs_min_max_test.cmi test/bs_min_max_test.cmj test/bs_mutable_set_test.cmi test/bs_mutable_set_test.cmj test/bs_node_string_buffer_test.cmi test/bs_node_string_buffer_test.cmj test/bs_poly_map_test.cmi test/bs_poly_map_test.cmj test/bs_poly_mutable_map_test.cmi test/bs_poly_mutable_map_test.cmj test/bs_poly_mutable_set_test.cmi test/bs_poly_mutable_set_test.cmj test/bs_poly_set_test.cmi test/bs_poly_set_test.cmj test/bs_qualified.cmi test/bs_qualified.cmj test/bs_queue_test.cmi test/bs_queue_test.cmj test/bs_rbset_int_bench.cmi test/bs_rbset_int_bench.cmj test/bs_rest_test.cmi test/bs_rest_test.cmj test/bs_set_bench.cmi test/bs_set_bench.cmj test/bs_set_int_test.cmi test/bs_set_int_test.cmj test/bs_sort_test.cmi test/bs_sort_test.cmj test/bs_splice_partial.cmi test/bs_splice_partial.cmj test/bs_stack_test.cmi test/bs_stack_test.cmj test/bs_string_test.cmi test/bs_string_test.cmj test/bs_unwrap_test.cmi test/bs_unwrap_test.cmj test/buffer_test.cmi test/buffer_test.cmj test/bytes_split_gpr_743_test.cmi test/bytes_split_gpr_743_test.cmj test/caml_compare_test.cmi test/caml_compare_test.cmj test/caml_format_test.cmi test/caml_format_test.cmj test/caml_sys_poly_fill_test.cmi test/caml_sys_poly_fill_test.cmj test/chain_code_test.cmi test/chain_code_test.cmj test/chn_test.cmi test/chn_test.cmj test/class_setter_getter.cmi test/class_setter_getter.cmj test/class_type_ffi_test.cmi test/class_type_ffi_test.cmj test/coercion_module_alias_test.cmi test/coercion_module_alias_test.cmj test/compare_test.cmi test/compare_test.cmj test/complete_parmatch_test.cmi test/complete_parmatch_test.cmj test/complex_if_test.cmi test/complex_if_test.cmj test/complex_test.cmi test/complex_test.cmj test/complex_while_loop.cmi test/complex_while_loop.cmj test/condition_compilation_test.cmi test/condition_compilation_test.cmj test/config1_test.cmi test/config1_test.cmj test/config2_test.cmi test/config2_test.cmj test/console_log_test.cmi test/console_log_test.cmj test/const_block_test.cmi test/const_block_test.cmj test/const_defs.cmi test/const_defs.cmj test/const_defs_test.cmi test/const_defs_test.cmj test/const_test.cmi test/const_test.cmj test/cont_int_fold_test.cmi test/cont_int_fold_test.cmj test/cps_test.cmi test/cps_test.cmj test/cross_module_inline_test.cmi test/cross_module_inline_test.cmj test/custom_error_test.cmi test/custom_error_test.cmj test/debug_keep_test.cmi test/debug_keep_test.cmj test/debug_mode_value.cmi test/debug_mode_value.cmj test/debug_tmp.cmi test/debug_tmp.cmj test/debugger_test.cmi test/debugger_test.cmj test/default_export_test.cmi test/default_export_test.cmj test/defunctor_make_test.cmi test/defunctor_make_test.cmj test/demo.cmi test/demo.cmj test/demo_binding.cmi test/demo_binding.cmj test/demo_int_map.cmi test/demo_int_map.cmj test/demo_page.cmi test/demo_page.cmj test/demo_pipe.cmi test/demo_pipe.cmj test/derive_dyntype.cmi test/derive_dyntype.cmj test/derive_projector_test.cmi test/derive_projector_test.cmj test/derive_type_test.cmi test/derive_type_test.cmj test/digest_test.cmi test/digest_test.cmj test/div_by_zero_test.cmi test/div_by_zero_test.cmj test/dollar_escape_test.cmi test/dollar_escape_test.cmj test/earger_curry_test.cmi test/earger_curry_test.cmj test/effect.cmi test/effect.cmj test/epsilon_test.cmi test/epsilon_test.cmj test/equal_box_test.cmi test/equal_box_test.cmj test/equal_exception_test.cmi test/equal_exception_test.cmj test/equal_test.cmi test/equal_test.cmj test/es6_export.cmi test/es6_export.cmj test/es6_import.cmi test/es6_import.cmj test/es6_module_test.cmi test/es6_module_test.cmj test/escape_esmodule.cmi test/escape_esmodule.cmj test/esmodule_ref.cmi test/esmodule_ref.cmj test/event_ffi.cmi test/event_ffi.cmj test/exception_alias.cmi test/exception_alias.cmj test/exception_def.cmi test/exception_def.cmj test/exception_raise_test.cmi test/exception_raise_test.cmj test/exception_rebind_test.cmi test/exception_rebind_test.cmj test/exception_rebound_err_test.cmi test/exception_rebound_err_test.cmj test/exception_repr_test.cmi test/exception_repr_test.cmj test/exception_value_test.cmi test/exception_value_test.cmj test/exn_error_pattern.cmi test/exn_error_pattern.cmj test/export_keyword.cmi test/export_keyword.cmj test/ext_array_test.cmi test/ext_array_test.cmj test/ext_bytes_test.cmi test/ext_bytes_test.cmj test/ext_filename_test.cmi test/ext_filename_test.cmj test/ext_list_test.cmi test/ext_list_test.cmj test/ext_pervasives_test.cmi test/ext_pervasives_test.cmj test/ext_string_test.cmi test/ext_string_test.cmj test/ext_sys_test.cmi test/ext_sys_test.cmj test/extensible_variant_test.cmi test/extensible_variant_test.cmj test/external_polyfill_test.cmi test/external_polyfill_test.cmj test/external_ppx.cmi test/external_ppx.cmj test/external_ppx2.cmi test/external_ppx2.cmj test/fail_comp.cmi test/fail_comp.cmj test/ffi_arity_test.cmi test/ffi_arity_test.cmj test/ffi_array_test.cmi test/ffi_array_test.cmj test/ffi_js_test.cmi test/ffi_js_test.cmj test/ffi_splice_test.cmi test/ffi_splice_test.cmj test/ffi_test.cmi test/ffi_test.cmj test/fib.cmi test/fib.cmj test/flattern_order_test.cmi test/flattern_order_test.cmj test/flexible_array_test.cmi test/flexible_array_test.cmj test/float_array.cmi test/float_array.cmj test/float_of_bits_test.cmi test/float_of_bits_test.cmj test/float_record.cmi test/float_record.cmj test/float_test.cmi test/float_test.cmj test/floatarray_test.cmi test/floatarray_test.cmj test/flow_parser_reg_test.cmi test/flow_parser_reg_test.cmj test/for_loop_test.cmi test/for_loop_test.cmj test/for_side_effect_test.cmi test/for_side_effect_test.cmj test/format_regression.cmi test/format_regression.cmj test/format_test.cmi test/format_test.cmj test/fs_test.cmi test/fs_test.cmj test/fun_pattern_match.cmi test/fun_pattern_match.cmj test/functor_app_test.cmi test/functor_app_test.cmj test/functor_def.cmi test/functor_def.cmj test/functor_ffi.cmi test/functor_ffi.cmj test/functor_inst.cmi test/functor_inst.cmj test/functors.cmi test/functors.cmj test/gbk.cmi test/gbk.cmj test/genlex_test.cmi test/genlex_test.cmj test/gentTypeReTest.cmi test/gentTypeReTest.cmj test/global_exception_regression_test.cmi test/global_exception_regression_test.cmj test/global_mangles.cmi test/global_mangles.cmj test/global_module_alias_test.cmi test/global_module_alias_test.cmj test/google_closure_test.cmi test/google_closure_test.cmj test/gpr496_test.cmi test/gpr496_test.cmj test/gpr_1063_test.cmi test/gpr_1063_test.cmj test/gpr_1072.cmi test/gpr_1072.cmj test/gpr_1072_reg.cmi test/gpr_1072_reg.cmj test/gpr_1150.cmi test/gpr_1150.cmj test/gpr_1154_test.cmi test/gpr_1154_test.cmj test/gpr_1170.cmi test/gpr_1170.cmj test/gpr_1240_missing_unbox.cmi test/gpr_1240_missing_unbox.cmj test/gpr_1245_test.cmi test/gpr_1245_test.cmj test/gpr_1268.cmi test/gpr_1268.cmj test/gpr_1409_test.cmi test/gpr_1409_test.cmj test/gpr_1423_app_test.cmi test/gpr_1423_app_test.cmj test/gpr_1423_nav.cmi test/gpr_1423_nav.cmj test/gpr_1438.cmi test/gpr_1438.cmj test/gpr_1481.cmi test/gpr_1481.cmj test/gpr_1484.cmi test/gpr_1484.cmj test/gpr_1501_test.cmi test/gpr_1501_test.cmj test/gpr_1503_test.cmi test/gpr_1503_test.cmj test/gpr_1539_test.cmi test/gpr_1539_test.cmj test/gpr_1600_test.cmi test/gpr_1600_test.cmj test/gpr_1658_test.cmi test/gpr_1658_test.cmj test/gpr_1667_test.cmi test/gpr_1667_test.cmj test/gpr_1692_test.cmi test/gpr_1692_test.cmj test/gpr_1698_test.cmi test/gpr_1698_test.cmj test/gpr_1701_test.cmi test/gpr_1701_test.cmj test/gpr_1716_test.cmi test/gpr_1716_test.cmj test/gpr_1717_test.cmi test/gpr_1717_test.cmj test/gpr_1728_test.cmi test/gpr_1728_test.cmj test/gpr_1749_test.cmi test/gpr_1749_test.cmj test/gpr_1759_test.cmi test/gpr_1759_test.cmj test/gpr_1760_test.cmi test/gpr_1760_test.cmj test/gpr_1762_test.cmi test/gpr_1762_test.cmj test/gpr_1817_test.cmi test/gpr_1817_test.cmj test/gpr_1822_test.cmi test/gpr_1822_test.cmj test/gpr_1891_test.cmi test/gpr_1891_test.cmj test/gpr_1943_test.cmi test/gpr_1943_test.cmj test/gpr_1946_test.cmi test/gpr_1946_test.cmj test/gpr_2316_test.cmi test/gpr_2316_test.cmj test/gpr_2352_test.cmi test/gpr_2352_test.cmj test/gpr_2413_test.cmi test/gpr_2413_test.cmj test/gpr_2474.cmi test/gpr_2474.cmj test/gpr_2487.cmi test/gpr_2487.cmj test/gpr_2503_test.cmi test/gpr_2503_test.cmj test/gpr_2608_test.cmi test/gpr_2608_test.cmj test/gpr_2614_test.cmi test/gpr_2614_test.cmj test/gpr_2633_test.cmi test/gpr_2633_test.cmj test/gpr_2642_test.cmi test/gpr_2642_test.cmj test/gpr_2652_test.cmi test/gpr_2652_test.cmj test/gpr_2682_test.cmi test/gpr_2682_test.cmj test/gpr_2700_test.cmi test/gpr_2700_test.cmj test/gpr_2731_test.cmi test/gpr_2731_test.cmj test/gpr_2789_test.cmi test/gpr_2789_test.cmj test/gpr_2931_test.cmi test/gpr_2931_test.cmj test/gpr_3142_test.cmi test/gpr_3142_test.cmj test/gpr_3154_test.cmi test/gpr_3154_test.cmj test/gpr_3209_test.cmi test/gpr_3209_test.cmj test/gpr_3492_test.cmi test/gpr_3492_test.cmj test/gpr_3519_jsx_test.cmi test/gpr_3519_jsx_test.cmj test/gpr_3519_test.cmi test/gpr_3519_test.cmj test/gpr_3536_test.cmi test/gpr_3536_test.cmj test/gpr_3546_test.cmi test/gpr_3546_test.cmj test/gpr_3548_test.cmi test/gpr_3548_test.cmj test/gpr_3549_test.cmi test/gpr_3549_test.cmj test/gpr_3566_drive_test.cmi test/gpr_3566_drive_test.cmj test/gpr_3566_test.cmi test/gpr_3566_test.cmj test/gpr_3595_test.cmi test/gpr_3595_test.cmj test/gpr_3609_test.cmi test/gpr_3609_test.cmj test/gpr_3697_test.cmi test/gpr_3697_test.cmj test/gpr_373_test.cmi test/gpr_373_test.cmj test/gpr_3770_test.cmi test/gpr_3770_test.cmj test/gpr_3852_alias.cmi test/gpr_3852_alias.cmj test/gpr_3852_alias_reify.cmi test/gpr_3852_alias_reify.cmj test/gpr_3852_effect.cmi test/gpr_3852_effect.cmj test/gpr_3865.cmi test/gpr_3865.cmj test/gpr_3865_bar.cmi test/gpr_3865_bar.cmj test/gpr_3865_foo.cmi test/gpr_3865_foo.cmj test/gpr_3875_test.cmi test/gpr_3875_test.cmj test/gpr_3877_test.cmi test/gpr_3877_test.cmj test/gpr_3895_test.cmi test/gpr_3895_test.cmj test/gpr_3897_test.cmi test/gpr_3897_test.cmj test/gpr_3931_test.cmi test/gpr_3931_test.cmj test/gpr_3980_test.cmi test/gpr_3980_test.cmj test/gpr_4025_test.cmi test/gpr_4025_test.cmj test/gpr_405_test.cmi test/gpr_405_test.cmj test/gpr_4069_test.cmi test/gpr_4069_test.cmj test/gpr_4265_test.cmi test/gpr_4265_test.cmj test/gpr_4274_test.cmi test/gpr_4274_test.cmj test/gpr_4280_test.cmi test/gpr_4280_test.cmj test/gpr_4407_test.cmi test/gpr_4407_test.cmj test/gpr_441.cmi test/gpr_441.cmj test/gpr_4442_test.cmi test/gpr_4442_test.cmj test/gpr_4491_test.cmi test/gpr_4491_test.cmj test/gpr_4494_test.cmi test/gpr_4494_test.cmj test/gpr_4519_test.cmi test/gpr_4519_test.cmj test/gpr_459_test.cmi test/gpr_459_test.cmj test/gpr_4632.cmi test/gpr_4632.cmj test/gpr_4639_test.cmi test/gpr_4639_test.cmj test/gpr_4900_test.cmi test/gpr_4900_test.cmj test/gpr_4924_test.cmi test/gpr_4924_test.cmj test/gpr_4931.cmi test/gpr_4931.cmj test/gpr_4931_allow.cmi test/gpr_4931_allow.cmj test/gpr_5071_test.cmi test/gpr_5071_test.cmj test/gpr_5169_test.cmi test/gpr_5169_test.cmj test/gpr_5218_test.cmi test/gpr_5218_test.cmj test/gpr_5280_optimize_test.cmi test/gpr_5280_optimize_test.cmj test/gpr_5312.cmi test/gpr_5312.cmj test/gpr_627_test.cmi test/gpr_627_test.cmj test/gpr_658.cmi test/gpr_658.cmj test/gpr_858_test.cmi test/gpr_858_test.cmj test/gpr_858_unit2_test.cmi test/gpr_858_unit2_test.cmj test/gpr_904_test.cmi test/gpr_904_test.cmj test/gpr_974_test.cmi test/gpr_974_test.cmj test/gpr_977_test.cmi test/gpr_977_test.cmj test/gpr_return_type_unused_attribute.cmi test/gpr_return_type_unused_attribute.cmj test/gray_code_test.cmi test/gray_code_test.cmj test/guide_for_ext.cmi test/guide_for_ext.cmj test/hamming_test.cmi test/hamming_test.cmj test/hash_collision_test.cmi test/hash_collision_test.cmj test/hash_sugar_desugar.cmi test/hash_sugar_desugar.cmj test/hash_test.cmi test/hash_test.cmj test/hashtbl_test.cmi test/hashtbl_test.cmj test/hello.foo.cmi test/hello.foo.cmj test/hello_res.cmi test/hello_res.cmj test/http_types.cmi test/http_types.cmj test/ignore_test.cmi test/ignore_test.cmj test/imm_map_bench.cmi test/imm_map_bench.cmj test/include_side_effect.cmi test/include_side_effect.cmj test/include_side_effect_free.cmi test/include_side_effect_free.cmj test/incomplete_toplevel_test.cmi test/incomplete_toplevel_test.cmj test/infer_type_test.cmi test/infer_type_test.cmj test/inline_const.cmi test/inline_const.cmj test/inline_const_test.cmi test/inline_const_test.cmj test/inline_edge_cases.cmi test/inline_edge_cases.cmj test/inline_map2_test.cmi test/inline_map2_test.cmj test/inline_map_demo.cmi test/inline_map_demo.cmj test/inline_map_test.cmi test/inline_map_test.cmj test/inline_record_test.cmi test/inline_record_test.cmj test/inline_regression_test.cmi test/inline_regression_test.cmj test/inline_string_test.cmi test/inline_string_test.cmj test/inner_call.cmi test/inner_call.cmj test/inner_define.cmi test/inner_define.cmj test/inner_unused.cmi test/inner_unused.cmj test/installation_test.cmi test/installation_test.cmj test/int32_test.cmi test/int32_test.cmj test/int64_mul_div_test.cmi test/int64_mul_div_test.cmj test/int64_string_bench.cmi test/int64_string_bench.cmj test/int64_string_test.cmi test/int64_string_test.cmj test/int64_test.cmi test/int64_test.cmj test/int_hashtbl_test.cmi test/int_hashtbl_test.cmj test/int_map.cmi test/int_map.cmj test/int_overflow_test.cmi test/int_overflow_test.cmj test/int_poly_var.cmi test/int_poly_var.cmj test/int_switch_test.cmi test/int_switch_test.cmj test/internal_unused_test.cmi test/internal_unused_test.cmj test/io_test.cmi test/io_test.cmj test/js_array_test.cmi test/js_array_test.cmj test/js_bool_test.cmi test/js_bool_test.cmj test/js_cast_test.cmi test/js_cast_test.cmj test/js_date_test.cmi test/js_date_test.cmj test/js_dict_test.cmi test/js_dict_test.cmj test/js_exception_catch_test.cmi test/js_exception_catch_test.cmj test/js_float_test.cmi test/js_float_test.cmj test/js_global_test.cmi test/js_global_test.cmj test/js_int_test.cmi test/js_int_test.cmj test/js_json_test.cmi test/js_json_test.cmj test/js_list_test.cmi test/js_list_test.cmj test/js_math_test.cmi test/js_math_test.cmj test/js_null_test.cmi test/js_null_test.cmj test/js_null_undefined_test.cmi test/js_null_undefined_test.cmj test/js_nullable_test.cmi test/js_nullable_test.cmj test/js_obj_test.cmi test/js_obj_test.cmj test/js_option_test.cmi test/js_option_test.cmj test/js_promise_basic_test.cmi test/js_promise_basic_test.cmj test/js_re_test.cmi test/js_re_test.cmj test/js_string_test.cmi test/js_string_test.cmj test/js_typed_array_test.cmi test/js_typed_array_test.cmj test/js_undefined_test.cmi test/js_undefined_test.cmj test/js_val.cmi test/js_val.cmj test/jsoo_400_test.cmi test/jsoo_400_test.cmj test/jsoo_485_test.cmi test/jsoo_485_test.cmj test/key_word_property.cmi test/key_word_property.cmj test/key_word_property2.cmi test/key_word_property2.cmj test/key_word_property_plus_test.cmi test/key_word_property_plus_test.cmj test/label_uncurry.cmi test/label_uncurry.cmj test/large_integer_pat.cmi test/large_integer_pat.cmj test/large_record_duplication_test.cmi test/large_record_duplication_test.cmj test/largest_int_flow.cmi test/largest_int_flow.cmj test/lazy_demo.cmi test/lazy_demo.cmj test/lazy_test.cmi test/lazy_test.cmj test/lexer_test.cmi test/lexer_test.cmj test/lib_js_test.cmi test/lib_js_test.cmj test/libarg_test.cmi test/libarg_test.cmj test/libqueue_test.cmi test/libqueue_test.cmj test/limits_test.cmi test/limits_test.cmj test/list_stack.cmi test/list_stack.cmj test/list_test.cmi test/list_test.cmj test/local_class_type.cmi test/local_class_type.cmj test/local_exception_test.cmi test/local_exception_test.cmj test/loop_regression_test.cmi test/loop_regression_test.cmj test/loop_suites_test.cmi test/loop_suites_test.cmj test/map_find_test.cmi test/map_find_test.cmj test/map_test.cmi test/map_test.cmj test/mario_game.cmi test/mario_game.cmj test/marshal.cmi test/marshal.cmj test/method_chain.cmi test/method_chain.cmj test/method_name_test.cmi test/method_name_test.cmj test/method_string_name.cmi test/method_string_name.cmj test/minimal_test.cmi test/minimal_test.cmj test/miss_colon_test.cmi test/miss_colon_test.cmj test/mock_mt.cmi test/mock_mt.cmj test/module_alias_test.cmi test/module_alias_test.cmj test/module_as_class_ffi.cmi test/module_as_class_ffi.cmj test/module_as_function.cmi test/module_as_function.cmj test/module_missing_conversion.cmi test/module_missing_conversion.cmj test/module_parameter_test.cmi test/module_parameter_test.cmj test/module_splice_test.cmi test/module_splice_test.cmj test/more_poly_variant_test.cmi test/more_poly_variant_test.cmj test/more_uncurry.cmi test/more_uncurry.cmj test/mpr_6033_test.cmi test/mpr_6033_test.cmj test/mt.cmi test/mt.cmj test/mt_global.cmi test/mt_global.cmj test/mutable_obj_test.cmi test/mutable_obj_test.cmj test/mutable_uncurry_test.cmi test/mutable_uncurry_test.cmj test/mutual_non_recursive_type.cmi test/mutual_non_recursive_type.cmj test/name_mangle_test.cmi test/name_mangle_test.cmj test/nested_include.cmi test/nested_include.cmj test/nested_module_alias.cmi test/nested_module_alias.cmj test/nested_obj_literal.cmi test/nested_obj_literal.cmj test/nested_obj_test.cmi test/nested_obj_test.cmj test/nested_pattern_match_test.cmi test/nested_pattern_match_test.cmj test/noassert.cmi test/noassert.cmj test/node_fs_test.cmi test/node_fs_test.cmj test/node_path_test.cmi test/node_path_test.cmj test/null_list_test.cmi test/null_list_test.cmj test/number_lexer.cmi test/number_lexer.cmj test/obj_literal_ppx.cmi test/obj_literal_ppx.cmj test/obj_literal_ppx_test.cmi test/obj_literal_ppx_test.cmj test/obj_magic_test.cmi test/obj_magic_test.cmj test/obj_type_test.cmi test/obj_type_test.cmj test/ocaml_re_test.cmi test/ocaml_re_test.cmj test/of_string_test.cmi test/of_string_test.cmj test/offset.cmi test/offset.cmj test/oo_js_test_date.cmi test/oo_js_test_date.cmj test/option_encoding_test.cmi test/option_encoding_test.cmj test/option_record_none_test.cmi test/option_record_none_test.cmj test/option_repr_test.cmi test/option_repr_test.cmj test/optional_ffi_test.cmi test/optional_ffi_test.cmj test/optional_regression_test.cmi test/optional_regression_test.cmj test/pipe_send_readline.cmi test/pipe_send_readline.cmj test/pipe_syntax.cmi test/pipe_syntax.cmj test/poly_empty_array.cmi test/poly_empty_array.cmj test/poly_type.cmi test/poly_type.cmj test/poly_variant_test.cmi test/poly_variant_test.cmj test/polymorphic_raw_test.cmi test/polymorphic_raw_test.cmj test/polymorphism_test.cmi test/polymorphism_test.cmj test/polyvar_convert.cmi test/polyvar_convert.cmj test/polyvar_test.cmi test/polyvar_test.cmj test/ppx_apply_test.cmi test/ppx_apply_test.cmj test/ppx_this_obj_field.cmi test/ppx_this_obj_field.cmj test/ppx_this_obj_test.cmi test/ppx_this_obj_test.cmj test/pq_test.cmi test/pq_test.cmj test/pr6726.cmi test/pr6726.cmj test/pr_regression_test.cmi test/pr_regression_test.cmj test/prepend_data_ffi.cmi test/prepend_data_ffi.cmj test/primitive_reg_test.cmi test/primitive_reg_test.cmj test/print_alpha_test.cmi test/print_alpha_test.cmj test/promise.cmi test/promise.cmj test/promise_catch_test.cmi test/promise_catch_test.cmj test/queue_402.cmi test/queue_402.cmj test/queue_test.cmi test/queue_test.cmj test/random_test.cmi test/random_test.cmj test/raw_hash_tbl_bench.cmi test/raw_hash_tbl_bench.cmj test/raw_output_test.cmi test/raw_output_test.cmj test/raw_pure_test.cmi test/raw_pure_test.cmj test/rbset.cmi test/rbset.cmj test/re_first_test.cmi test/re_first_test.cmj test/react.cmi test/react.cmj test/reactDOMRe.cmi test/reactDOMRe.cmj test/reactDOMServerRe.cmi test/reactDOMServerRe.cmj test/reactEvent.cmi test/reactEvent.cmj test/reactTestUtils.cmi test/reactTestUtils.cmj test/reasonReact.cmi test/reasonReact.cmj test/reasonReactCompat.cmi test/reasonReactCompat.cmj test/reasonReactOptimizedCreateClass.cmi test/reasonReactOptimizedCreateClass.cmj test/reasonReactRouter.cmi test/reasonReactRouter.cmj test/rebind_module.cmi test/rebind_module.cmj test/rebind_module_test.cmi test/rebind_module_test.cmj test/rec_fun_test.cmi test/rec_fun_test.cmj test/rec_module_opt.cmi test/rec_module_opt.cmj test/rec_module_test.cmi test/rec_module_test.cmj test/rec_value_test.cmi test/rec_value_test.cmj test/record_debug_test.cmi test/record_debug_test.cmj test/record_extension_test.cmi test/record_extension_test.cmj test/record_name_test.cmi test/record_name_test.cmj test/record_regression.cmi test/record_regression.cmj test/record_with_test.cmi test/record_with_test.cmj test/recursive_module.cmi test/recursive_module.cmj test/recursive_module_test.cmi test/recursive_module_test.cmj test/recursive_react_component.cmi test/recursive_react_component.cmj test/recursive_records_test.cmi test/recursive_records_test.cmj test/recursive_unbound_module_test.cmi test/recursive_unbound_module_test.cmj test/regression_print.cmi test/regression_print.cmj test/relative_path.cmi test/relative_path.cmj test/res_debug.cmi test/res_debug.cmj test/return_check.cmi test/return_check.cmj test/runtime_encoding_test.cmi test/runtime_encoding_test.cmj test/set_gen.cmi test/set_gen.cmj test/sexp.cmi test/sexp.cmj test/sexpm.cmi test/sexpm.cmj test/sexpm_test.cmi test/sexpm_test.cmj test/side_effect.cmi test/side_effect.cmj test/side_effect_free.cmi test/side_effect_free.cmj test/simple_derive_test.cmi test/simple_derive_test.cmj test/simple_derive_use.cmi test/simple_derive_use.cmj test/simple_lexer_test.cmi test/simple_lexer_test.cmj test/simplify_lambda_632o.cmi test/simplify_lambda_632o.cmj test/single_module_alias.cmi test/single_module_alias.cmj test/singular_unit_test.cmi test/singular_unit_test.cmj test/small_inline_test.cmi test/small_inline_test.cmj test/splice_test.cmi test/splice_test.cmj test/stack_comp_test.cmi test/stack_comp_test.cmj test/stack_test.cmi test/stack_test.cmj test/stream_parser_test.cmi test/stream_parser_test.cmj test/string_bound_get_test.cmi test/string_bound_get_test.cmj test/string_get_set_test.cmi test/string_get_set_test.cmj test/string_interp_test.cmi test/string_interp_test.cmj test/string_literal_print_test.cmi test/string_literal_print_test.cmj test/string_runtime_test.cmi test/string_runtime_test.cmj test/string_set.cmi test/string_set.cmj test/string_set_test.cmi test/string_set_test.cmj test/string_test.cmi test/string_test.cmj test/string_unicode_test.cmi test/string_unicode_test.cmj test/stringmatch_test.cmi test/stringmatch_test.cmj test/submodule.cmi test/submodule.cmj test/submodule_call.cmi test/submodule_call.cmj test/switch_case_test.cmi test/switch_case_test.cmj test/tailcall_inline_test.cmi test/tailcall_inline_test.cmj test/test.cmi test/test.cmj test/test2.cmi test/test2.cmj test/test_alias.cmi test/test_alias.cmj test/test_ari.cmi test/test_ari.cmj test/test_array.cmi test/test_array.cmj test/test_array_append.cmi test/test_array_append.cmj test/test_array_primitive.cmi test/test_array_primitive.cmj test/test_bool_equal.cmi test/test_bool_equal.cmj test/test_bs_this.cmi test/test_bs_this.cmj test/test_bug.cmi test/test_bug.cmj test/test_bytes.cmi test/test_bytes.cmj test/test_case_opt_collision.cmi test/test_case_opt_collision.cmj test/test_case_set.cmi test/test_case_set.cmj test/test_char.cmi test/test_char.cmj test/test_closure.cmi test/test_closure.cmj test/test_common.cmi test/test_common.cmj test/test_const_elim.cmi test/test_const_elim.cmj test/test_const_propogate.cmi test/test_const_propogate.cmj test/test_cpp.cmi test/test_cpp.cmj test/test_cps.cmi test/test_cps.cmj test/test_demo.cmi test/test_demo.cmj test/test_dup_param.cmi test/test_dup_param.cmj test/test_eq.cmi test/test_eq.cmj test/test_exception.cmi test/test_exception.cmj test/test_exception_escape.cmi test/test_exception_escape.cmj test/test_export2.cmi test/test_export2.cmj test/test_external.cmi test/test_external.cmj test/test_external_unit.cmi test/test_external_unit.cmj test/test_ffi.cmi test/test_ffi.cmj test/test_fib.cmi test/test_fib.cmj test/test_filename.cmi test/test_filename.cmj test/test_for_loop.cmi test/test_for_loop.cmj test/test_for_map.cmi test/test_for_map.cmj test/test_for_map2.cmi test/test_for_map2.cmj test/test_format.cmi test/test_format.cmj test/test_formatter.cmi test/test_formatter.cmj test/test_functor_dead_code.cmi test/test_functor_dead_code.cmj test/test_generative_module.cmi test/test_generative_module.cmj test/test_global_print.cmi test/test_global_print.cmj test/test_google_closure.cmi test/test_google_closure.cmj test/test_http_server.cmi test/test_http_server.cmj test/test_include.cmi test/test_include.cmj test/test_incomplete.cmi test/test_incomplete.cmj test/test_incr_ref.cmi test/test_incr_ref.cmj test/test_index.cmi test/test_index.cmj test/test_int_map_find.cmi test/test_int_map_find.cmj test/test_internalOO.cmi test/test_internalOO.cmj test/test_is_js.cmi test/test_is_js.cmj test/test_js_ffi.cmi test/test_js_ffi.cmj test/test_let.cmi test/test_let.cmj test/test_list.cmi test/test_list.cmj test/test_literal.cmi test/test_literal.cmj test/test_literals.cmi test/test_literals.cmj test/test_match_exception.cmi test/test_match_exception.cmj test/test_mutliple.cmi test/test_mutliple.cmj test/test_nat64.cmi test/test_nat64.cmj test/test_nested_let.cmi test/test_nested_let.cmj test/test_nested_print.cmi test/test_nested_print.cmj test/test_non_export.cmi test/test_non_export.cmj test/test_nullary.cmi test/test_nullary.cmj test/test_obj.cmi test/test_obj.cmj test/test_obj_simple_ffi.cmi test/test_obj_simple_ffi.cmj test/test_order.cmi test/test_order.cmj test/test_order_tailcall.cmi test/test_order_tailcall.cmj test/test_other_exn.cmi test/test_other_exn.cmj test/test_pack.cmi test/test_pack.cmj test/test_per.cmi test/test_per.cmj test/test_pervasive.cmi test/test_pervasive.cmj test/test_pervasives2.cmi test/test_pervasives2.cmj test/test_pervasives3.cmi test/test_pervasives3.cmj test/test_primitive.cmi test/test_primitive.cmj test/test_promise_bind.cmi test/test_promise_bind.cmj test/test_ramification.cmi test/test_ramification.cmj test/test_react.cmi test/test_react.cmj test/test_react_case.cmi test/test_react_case.cmj test/test_regex.cmi test/test_regex.cmj test/test_require.cmi test/test_require.cmj test/test_runtime_encoding.cmi test/test_runtime_encoding.cmj test/test_scope.cmi test/test_scope.cmj test/test_seq.cmi test/test_seq.cmj test/test_set.cmi test/test_set.cmj test/test_side_effect_functor.cmi test/test_side_effect_functor.cmj test/test_simple_include.cmi test/test_simple_include.cmj test/test_simple_pattern_match.cmi test/test_simple_pattern_match.cmj test/test_simple_ref.cmi test/test_simple_ref.cmj test/test_simple_tailcall.cmi test/test_simple_tailcall.cmj test/test_small.cmi test/test_small.cmj test/test_sprintf.cmi test/test_sprintf.cmj test/test_stack.cmi test/test_stack.cmj test/test_static_catch_ident.cmi test/test_static_catch_ident.cmj test/test_string.cmi test/test_string.cmj test/test_string_case.cmi test/test_string_case.cmj test/test_string_const.cmi test/test_string_const.cmj test/test_string_map.cmi test/test_string_map.cmj test/test_string_switch.cmi test/test_string_switch.cmj test/test_switch.cmi test/test_switch.cmj test/test_trywith.cmi test/test_trywith.cmj test/test_tuple.cmi test/test_tuple.cmj test/test_tuple_destructring.cmi test/test_tuple_destructring.cmj test/test_type_based_arity.cmi test/test_type_based_arity.cmj test/test_u.cmi test/test_u.cmj test/test_unknown.cmi test/test_unknown.cmj test/test_unsafe_cmp.cmi test/test_unsafe_cmp.cmj test/test_unsafe_obj_ffi.cmi test/test_unsafe_obj_ffi.cmj test/test_unsafe_obj_ffi_ppx.cmi test/test_unsafe_obj_ffi_ppx.cmj test/test_unsupported_primitive.cmi test/test_unsupported_primitive.cmj test/test_while_closure.cmi test/test_while_closure.cmj test/test_while_side_effect.cmi test/test_while_side_effect.cmj test/test_zero_nullable.cmi test/test_zero_nullable.cmj test/then_mangle_test.cmi test/then_mangle_test.cmj test/ticker.cmi test/ticker.cmj test/to_string_test.cmi test/to_string_test.cmj test/topsort_test.cmi test/topsort_test.cmj test/tramp_fib.cmi test/tramp_fib.cmj test/tuple_alloc.cmi test/tuple_alloc.cmj test/type_disambiguate.cmi test/type_disambiguate.cmj test/typeof_test.cmi test/typeof_test.cmj test/ui_defs.cmi test/unboxed_attribute.cmi test/unboxed_attribute.cmj test/unboxed_attribute_test.cmi test/unboxed_attribute_test.cmj test/unboxed_crash.cmi test/unboxed_crash.cmj test/unboxed_use_case.cmi test/unboxed_use_case.cmj test/uncurry_external_test.cmi test/uncurry_external_test.cmj test/uncurry_glob_test.cmi test/uncurry_glob_test.cmj test/uncurry_method.cmi test/uncurry_method.cmj test/uncurry_test.cmi test/uncurry_test.cmj test/undef_regression2_test.cmi test/undef_regression2_test.cmj test/undef_regression_test.cmi test/undef_regression_test.cmj test/undefine_conditional.cmi test/undefine_conditional.cmj test/unicode_type_error.cmi test/unicode_type_error.cmj test/unit_undefined_test.cmi test/unit_undefined_test.cmj test/unitest_string.cmi test/unitest_string.cmj test/unsafe_full_apply_primitive.cmi test/unsafe_full_apply_primitive.cmj test/unsafe_obj_external.cmi test/unsafe_obj_external.cmj test/unsafe_ppx_test.cmi test/unsafe_ppx_test.cmj test/unsafe_this.cmi test/unsafe_this.cmj test/update_record_test.cmi test/update_record_test.cmj test/utf8_decode_test.cmi test/utf8_decode_test.cmj test/variant.cmi test/variant.cmj test/watch_test.cmi test/watch_test.cmj test/webpack_config.cmi test/webpack_config.cmj diff --git a/jscomp/test/gpr_2863_test.js b/jscomp/test/gpr_2863_test.js deleted file mode 100644 index 962f2fecb7..0000000000 --- a/jscomp/test/gpr_2863_test.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var Belt_MutableSetInt = require("../../lib/js/belt_MutableSetInt.js"); - -var mySet = { - data: undefined -}; - -Belt_MutableSetInt.add(mySet, 1); - -Belt_MutableSetInt.add(mySet, 2); - -Belt_MutableSetInt.remove(mySet, 1); - -var a = 3; - -exports.mySet = mySet; -exports.a = a; -/* Not a pure module */ diff --git a/jscomp/test/gpr_2863_test.ml b/jscomp/test/gpr_2863_test.ml deleted file mode 100644 index f25b3b88cf..0000000000 --- a/jscomp/test/gpr_2863_test.ml +++ /dev/null @@ -1,13 +0,0 @@ -open Belt;; - -let mySet = MutableSet.Int.make() - -;; mySet -|. ( - MutableSet.Int.add(1), - MutableSet.Int.add(2), - MutableSet.Int.remove(1) -) -|. ignore - -;; let a = 3 \ No newline at end of file diff --git a/jscomp/test/gpr_3502_test.js b/jscomp/test/gpr_3502_test.js deleted file mode 100644 index 4c1b58bac5..0000000000 --- a/jscomp/test/gpr_3502_test.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - - -function toString(param) { - return "a"; -} - -function name(param) { - return 2; -} - -var Language = { - toString: toString, - name: name -}; - -var language = "a"; - -var shortName = "a"; - -var name$1 = 2; - -exports.Language = Language; -exports.language = language; -exports.shortName = shortName; -exports.name = name$1; -/* No side effect */ diff --git a/jscomp/test/gpr_3502_test.ml b/jscomp/test/gpr_3502_test.ml deleted file mode 100644 index 1cf0aa2180..0000000000 --- a/jscomp/test/gpr_3502_test.ml +++ /dev/null @@ -1,5 +0,0 @@ -module Language = - struct let toString _ = "a" - let name _ = 2 end -let language = "a" -let (shortName,name) = language |. Language.(toString, name) \ No newline at end of file diff --git a/jscomp/test/pipe_syntax.js b/jscomp/test/pipe_syntax.js index 79d3c536c5..b98f2d5769 100644 --- a/jscomp/test/pipe_syntax.js +++ b/jscomp/test/pipe_syntax.js @@ -1,7 +1,6 @@ 'use strict'; var Curry = require("../../lib/js/curry.js"); -var Belt_Array = require("../../lib/js/belt_Array.js"); var Caml_option = require("../../lib/js/caml_option.js"); function t0(x, f) { @@ -80,12 +79,6 @@ function f8(a) { return Caml_option.some(Caml_option.some(a)); } -function hi(x) { - return Belt_Array.map(x, (function (x) { - return x + 1 | 0; - })); -} - var with_poly = { NAME: "Foo", VAL: 1 @@ -104,6 +97,5 @@ exports.f5 = f5; exports.f6 = f6; exports.f7 = f7; exports.f8 = f8; -exports.hi = hi; exports.with_poly = with_poly; /* No side effect */ diff --git a/jscomp/test/pipe_syntax.ml b/jscomp/test/pipe_syntax.ml index b6f70895ee..59c68a9927 100644 --- a/jscomp/test/pipe_syntax.ml +++ b/jscomp/test/pipe_syntax.ml @@ -54,7 +54,4 @@ let f7 a = a |. (Some, Some, Some) let f8 a = a |. Some |. Some -let hi x = - x |. Belt.Array.(map (fun x -> x + 1 )) - let with_poly = 1 |. `Foo diff --git a/lib/4.06.1/unstable/js_compiler.ml b/lib/4.06.1/unstable/js_compiler.ml index 481c949428..230ca6d310 100644 --- a/lib/4.06.1/unstable/js_compiler.ml +++ b/lib/4.06.1/unstable/js_compiler.ml @@ -267394,120 +267394,6 @@ let init () = expression_gen = None; }) -end -module Ast_open_cxt : sig -#1 "ast_open_cxt.mli" -(* Copyright (C) 2019 - Present Authors of ReScript - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * In addition to the permissions granted to you by the LGPL, you may combine - * or link a "work that uses the Library" with a publicly distributed version - * of this file to produce a combined library or application, then distribute - * that combined work under the terms of your choosing, with no requirement - * to comply with the obligations normally placed on you by section 4 of the - * LGPL version 3 (or the corresponding section of a later version of the LGPL - * should you choose to use a later version). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) - -type loc = Location.t - -type whole - -type t = whole list - -val restore_exp : Parsetree.expression -> t -> Parsetree.expression - -val destruct : Parsetree.expression -> t -> Parsetree.expression * t - -val destruct_open_tuple : - Parsetree.expression -> - t -> - (t * Parsetree.expression list * Parsetree.attributes) option - -end = struct -#1 "ast_open_cxt.ml" -(* Copyright (C) 2019 - Present Hongbo Zhang, Authors of ReScript - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * In addition to the permissions granted to you by the LGPL, you may combine - * or link a "work that uses the Library" with a publicly distributed version - * of this file to produce a combined library or application, then distribute - * that combined work under the terms of your choosing, with no requirement - * to comply with the obligations normally placed on you by section 4 of the - * LGPL version 3 (or the corresponding section of a later version of the LGPL - * should you choose to use a later version). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) - -type loc = Location.t - -type whole = - | Let_open of - (Asttypes.override_flag - * Longident.t Asttypes.loc - * loc - * Parsetree.attributes) - -type t = whole list - -type exp = Parsetree.expression - -type destruct_output = exp list - -(** - destruct such pattern - {[ A.B.let open C in (a,b)]} -*) -let rec destruct_open_tuple (e : Parsetree.expression) (acc : t) : - (t * destruct_output * _) option = - match e.pexp_desc with - | Pexp_open (flag, lid, cont) -> - destruct_open_tuple cont - (Let_open (flag, lid, e.pexp_loc, e.pexp_attributes) :: acc) - | Pexp_tuple es -> Some (acc, es, e.pexp_attributes) - | _ -> None - -let rec destruct (e : Parsetree.expression) (acc : t) = - match e.pexp_desc with - | Pexp_open (flag, lid, cont) -> - destruct cont (Let_open (flag, lid, e.pexp_loc, e.pexp_attributes) :: acc) - | _ -> (e, acc) - -let restore_exp (xs : Parsetree.expression) (qualifiers : t) : - Parsetree.expression = - Ext_list.fold_left qualifiers xs (fun x hole -> - match hole with - | Let_open (flag, lid, loc, attrs) -> - ({ - pexp_desc = Pexp_open (flag, lid, x); - pexp_attributes = attrs; - pexp_loc = loc; - } - : Parsetree.expression)) - end module Ast_uncurry_apply : sig #1 "ast_uncurry_apply.mli" @@ -269517,9 +269403,7 @@ let app_exp_mapper (e : exp) (self : Bs_ast_mapper.mapper) (fn : exp) (* a |. f a |. f b c [@bs] --> f a b c [@bs] - a |. M.(f b c) --> M.f a M.b M.c a |. (g |. b) - a |. M.Some a |. `Variant a |. (b |. f c [@bs]) *) @@ -269546,61 +269430,52 @@ let app_exp_mapper (e : exp) (self : Bs_ast_mapper.mapper) (fn : exp) pexp_loc = e.pexp_loc; pexp_attributes = e.pexp_attributes; } + | Pexp_ident _ -> + { + pexp_desc = Pexp_apply (fn, [ (Nolabel, new_obj_arg) ]); + pexp_loc = e.pexp_loc; + pexp_attributes = e.pexp_attributes; + } | _ -> ( - match Ast_open_cxt.destruct fn [] with - | ( { pexp_desc = Pexp_tuple xs; pexp_attributes = tuple_attrs }, - wholes ) -> - Ast_open_cxt.restore_exp - (bound new_obj_arg (fun bounded_obj_arg -> - { - pexp_desc = - Pexp_tuple - (Ext_list.map xs (fun fn -> - match fn.pexp_desc with - | Pexp_construct (ctor, None) -> - { - fn with - pexp_desc = - Pexp_construct - (ctor, Some bounded_obj_arg); - } - | Pexp_apply (fn, args) -> - Bs_ast_invariant - .warn_discarded_unused_attributes - fn.pexp_attributes; - { - Parsetree.pexp_desc = - Pexp_apply - ( fn, - (Nolabel, bounded_obj_arg) - :: args ); - pexp_attributes = []; - pexp_loc = fn.pexp_loc; - } - | _ -> - Ast_compatible.app1 ~loc:fn.pexp_loc fn - bounded_obj_arg)); - pexp_attributes = tuple_attrs; - pexp_loc = fn.pexp_loc; - })) - wholes - | ( { pexp_desc = Pexp_apply (e, args); pexp_attributes }, - (_ :: _ as wholes) ) -> - let fn = Ast_open_cxt.restore_exp e wholes in - let args = - Ext_list.map args (fun (lab, exp) -> - (lab, Ast_open_cxt.restore_exp exp wholes)) - in - Bs_ast_invariant.warn_discarded_unused_attributes - pexp_attributes; - { - pexp_desc = Pexp_apply (fn, (Nolabel, new_obj_arg) :: args); - pexp_attributes = []; - pexp_loc = loc; - } + match fn with + | { pexp_desc = Pexp_tuple xs; pexp_attributes = tuple_attrs } -> + bound new_obj_arg (fun bounded_obj_arg -> + { + pexp_desc = + Pexp_tuple + (Ext_list.map xs (fun fn -> + match fn.pexp_desc with + | Pexp_construct (ctor, None) -> + { + fn with + pexp_desc = + Pexp_construct + (ctor, Some bounded_obj_arg); + } + | Pexp_apply (fn, args) -> + Bs_ast_invariant + .warn_discarded_unused_attributes + fn.pexp_attributes; + { + Parsetree.pexp_desc = + Pexp_apply + ( fn, + (Nolabel, bounded_obj_arg) :: args + ); + pexp_attributes = []; + pexp_loc = fn.pexp_loc; + } + | _ -> + Ast_compatible.app1 ~loc:fn.pexp_loc fn + bounded_obj_arg)); + pexp_attributes = tuple_attrs; + pexp_loc = fn.pexp_loc; + }) | _ -> - Ast_compatible.app1 ~loc ~attrs:e.pexp_attributes fn - new_obj_arg)) + { + (Ast_compatible.app1 ~loc fn new_obj_arg) with + pexp_attributes = e.pexp_attributes; + })) | Some { op = "##"; loc; args = [ obj; rest ] } -> ( (* - obj##property - obj#(method a b ) @@ -270699,6 +270574,110 @@ let handleTdclsInStru (self : Bs_ast_mapper.mapper) | { bs_deriving = None }, _ -> Bs_ast_mapper.default_mapper.structure_item self str +end +module Ast_open_cxt : sig +#1 "ast_open_cxt.mli" +(* Copyright (C) 2019 - Present Authors of ReScript + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * In addition to the permissions granted to you by the LGPL, you may combine + * or link a "work that uses the Library" with a publicly distributed version + * of this file to produce a combined library or application, then distribute + * that combined work under the terms of your choosing, with no requirement + * to comply with the obligations normally placed on you by section 4 of the + * LGPL version 3 (or the corresponding section of a later version of the LGPL + * should you choose to use a later version). + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) + +type loc = Location.t + +type whole + +type t = whole list + +val restore_exp : Parsetree.expression -> t -> Parsetree.expression + +val destruct_open_tuple : + Parsetree.expression -> + t -> + (t * Parsetree.expression list * Parsetree.attributes) option + +end = struct +#1 "ast_open_cxt.ml" +(* Copyright (C) 2019 - Present Hongbo Zhang, Authors of ReScript + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * In addition to the permissions granted to you by the LGPL, you may combine + * or link a "work that uses the Library" with a publicly distributed version + * of this file to produce a combined library or application, then distribute + * that combined work under the terms of your choosing, with no requirement + * to comply with the obligations normally placed on you by section 4 of the + * LGPL version 3 (or the corresponding section of a later version of the LGPL + * should you choose to use a later version). + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) + +type loc = Location.t + +type whole = + | Let_open of + (Asttypes.override_flag + * Longident.t Asttypes.loc + * loc + * Parsetree.attributes) + +type t = whole list +type exp = Parsetree.expression +type destruct_output = exp list + +(** + destruct such pattern + {[ A.B.let open C in (a,b)]} +*) +let rec destruct_open_tuple (e : Parsetree.expression) (acc : t) : + (t * destruct_output * _) option = + match e.pexp_desc with + | Pexp_open (flag, lid, cont) -> + destruct_open_tuple cont + (Let_open (flag, lid, e.pexp_loc, e.pexp_attributes) :: acc) + | Pexp_tuple es -> Some (acc, es, e.pexp_attributes) + | _ -> None + +let restore_exp (xs : Parsetree.expression) (qualifiers : t) : + Parsetree.expression = + Ext_list.fold_left qualifiers xs (fun x hole -> + match hole with + | Let_open (flag, lid, loc, attrs) -> + ({ + pexp_desc = Pexp_open (flag, lid, x); + pexp_attributes = attrs; + pexp_loc = loc; + } + : Parsetree.expression)) + end module Ast_tuple_pattern_flatten : sig #1 "ast_tuple_pattern_flatten.mli" diff --git a/lib/4.06.1/unstable/js_playground_compiler.ml b/lib/4.06.1/unstable/js_playground_compiler.ml index 0d25a58228..3e895c95ee 100644 --- a/lib/4.06.1/unstable/js_playground_compiler.ml +++ b/lib/4.06.1/unstable/js_playground_compiler.ml @@ -268857,120 +268857,6 @@ let init () = expression_gen = None; }) -end -module Ast_open_cxt : sig -#1 "ast_open_cxt.mli" -(* Copyright (C) 2019 - Present Authors of ReScript - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * In addition to the permissions granted to you by the LGPL, you may combine - * or link a "work that uses the Library" with a publicly distributed version - * of this file to produce a combined library or application, then distribute - * that combined work under the terms of your choosing, with no requirement - * to comply with the obligations normally placed on you by section 4 of the - * LGPL version 3 (or the corresponding section of a later version of the LGPL - * should you choose to use a later version). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) - -type loc = Location.t - -type whole - -type t = whole list - -val restore_exp : Parsetree.expression -> t -> Parsetree.expression - -val destruct : Parsetree.expression -> t -> Parsetree.expression * t - -val destruct_open_tuple : - Parsetree.expression -> - t -> - (t * Parsetree.expression list * Parsetree.attributes) option - -end = struct -#1 "ast_open_cxt.ml" -(* Copyright (C) 2019 - Present Hongbo Zhang, Authors of ReScript - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * In addition to the permissions granted to you by the LGPL, you may combine - * or link a "work that uses the Library" with a publicly distributed version - * of this file to produce a combined library or application, then distribute - * that combined work under the terms of your choosing, with no requirement - * to comply with the obligations normally placed on you by section 4 of the - * LGPL version 3 (or the corresponding section of a later version of the LGPL - * should you choose to use a later version). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) - -type loc = Location.t - -type whole = - | Let_open of - (Asttypes.override_flag - * Longident.t Asttypes.loc - * loc - * Parsetree.attributes) - -type t = whole list - -type exp = Parsetree.expression - -type destruct_output = exp list - -(** - destruct such pattern - {[ A.B.let open C in (a,b)]} -*) -let rec destruct_open_tuple (e : Parsetree.expression) (acc : t) : - (t * destruct_output * _) option = - match e.pexp_desc with - | Pexp_open (flag, lid, cont) -> - destruct_open_tuple cont - (Let_open (flag, lid, e.pexp_loc, e.pexp_attributes) :: acc) - | Pexp_tuple es -> Some (acc, es, e.pexp_attributes) - | _ -> None - -let rec destruct (e : Parsetree.expression) (acc : t) = - match e.pexp_desc with - | Pexp_open (flag, lid, cont) -> - destruct cont (Let_open (flag, lid, e.pexp_loc, e.pexp_attributes) :: acc) - | _ -> (e, acc) - -let restore_exp (xs : Parsetree.expression) (qualifiers : t) : - Parsetree.expression = - Ext_list.fold_left qualifiers xs (fun x hole -> - match hole with - | Let_open (flag, lid, loc, attrs) -> - ({ - pexp_desc = Pexp_open (flag, lid, x); - pexp_attributes = attrs; - pexp_loc = loc; - } - : Parsetree.expression)) - end module Ast_uncurry_apply : sig #1 "ast_uncurry_apply.mli" @@ -270980,9 +270866,7 @@ let app_exp_mapper (e : exp) (self : Bs_ast_mapper.mapper) (fn : exp) (* a |. f a |. f b c [@bs] --> f a b c [@bs] - a |. M.(f b c) --> M.f a M.b M.c a |. (g |. b) - a |. M.Some a |. `Variant a |. (b |. f c [@bs]) *) @@ -271009,61 +270893,52 @@ let app_exp_mapper (e : exp) (self : Bs_ast_mapper.mapper) (fn : exp) pexp_loc = e.pexp_loc; pexp_attributes = e.pexp_attributes; } + | Pexp_ident _ -> + { + pexp_desc = Pexp_apply (fn, [ (Nolabel, new_obj_arg) ]); + pexp_loc = e.pexp_loc; + pexp_attributes = e.pexp_attributes; + } | _ -> ( - match Ast_open_cxt.destruct fn [] with - | ( { pexp_desc = Pexp_tuple xs; pexp_attributes = tuple_attrs }, - wholes ) -> - Ast_open_cxt.restore_exp - (bound new_obj_arg (fun bounded_obj_arg -> - { - pexp_desc = - Pexp_tuple - (Ext_list.map xs (fun fn -> - match fn.pexp_desc with - | Pexp_construct (ctor, None) -> - { - fn with - pexp_desc = - Pexp_construct - (ctor, Some bounded_obj_arg); - } - | Pexp_apply (fn, args) -> - Bs_ast_invariant - .warn_discarded_unused_attributes - fn.pexp_attributes; - { - Parsetree.pexp_desc = - Pexp_apply - ( fn, - (Nolabel, bounded_obj_arg) - :: args ); - pexp_attributes = []; - pexp_loc = fn.pexp_loc; - } - | _ -> - Ast_compatible.app1 ~loc:fn.pexp_loc fn - bounded_obj_arg)); - pexp_attributes = tuple_attrs; - pexp_loc = fn.pexp_loc; - })) - wholes - | ( { pexp_desc = Pexp_apply (e, args); pexp_attributes }, - (_ :: _ as wholes) ) -> - let fn = Ast_open_cxt.restore_exp e wholes in - let args = - Ext_list.map args (fun (lab, exp) -> - (lab, Ast_open_cxt.restore_exp exp wholes)) - in - Bs_ast_invariant.warn_discarded_unused_attributes - pexp_attributes; - { - pexp_desc = Pexp_apply (fn, (Nolabel, new_obj_arg) :: args); - pexp_attributes = []; - pexp_loc = loc; - } + match fn with + | { pexp_desc = Pexp_tuple xs; pexp_attributes = tuple_attrs } -> + bound new_obj_arg (fun bounded_obj_arg -> + { + pexp_desc = + Pexp_tuple + (Ext_list.map xs (fun fn -> + match fn.pexp_desc with + | Pexp_construct (ctor, None) -> + { + fn with + pexp_desc = + Pexp_construct + (ctor, Some bounded_obj_arg); + } + | Pexp_apply (fn, args) -> + Bs_ast_invariant + .warn_discarded_unused_attributes + fn.pexp_attributes; + { + Parsetree.pexp_desc = + Pexp_apply + ( fn, + (Nolabel, bounded_obj_arg) :: args + ); + pexp_attributes = []; + pexp_loc = fn.pexp_loc; + } + | _ -> + Ast_compatible.app1 ~loc:fn.pexp_loc fn + bounded_obj_arg)); + pexp_attributes = tuple_attrs; + pexp_loc = fn.pexp_loc; + }) | _ -> - Ast_compatible.app1 ~loc ~attrs:e.pexp_attributes fn - new_obj_arg)) + { + (Ast_compatible.app1 ~loc fn new_obj_arg) with + pexp_attributes = e.pexp_attributes; + })) | Some { op = "##"; loc; args = [ obj; rest ] } -> ( (* - obj##property - obj#(method a b ) @@ -272162,6 +272037,110 @@ let handleTdclsInStru (self : Bs_ast_mapper.mapper) | { bs_deriving = None }, _ -> Bs_ast_mapper.default_mapper.structure_item self str +end +module Ast_open_cxt : sig +#1 "ast_open_cxt.mli" +(* Copyright (C) 2019 - Present Authors of ReScript + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * In addition to the permissions granted to you by the LGPL, you may combine + * or link a "work that uses the Library" with a publicly distributed version + * of this file to produce a combined library or application, then distribute + * that combined work under the terms of your choosing, with no requirement + * to comply with the obligations normally placed on you by section 4 of the + * LGPL version 3 (or the corresponding section of a later version of the LGPL + * should you choose to use a later version). + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) + +type loc = Location.t + +type whole + +type t = whole list + +val restore_exp : Parsetree.expression -> t -> Parsetree.expression + +val destruct_open_tuple : + Parsetree.expression -> + t -> + (t * Parsetree.expression list * Parsetree.attributes) option + +end = struct +#1 "ast_open_cxt.ml" +(* Copyright (C) 2019 - Present Hongbo Zhang, Authors of ReScript + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * In addition to the permissions granted to you by the LGPL, you may combine + * or link a "work that uses the Library" with a publicly distributed version + * of this file to produce a combined library or application, then distribute + * that combined work under the terms of your choosing, with no requirement + * to comply with the obligations normally placed on you by section 4 of the + * LGPL version 3 (or the corresponding section of a later version of the LGPL + * should you choose to use a later version). + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) + +type loc = Location.t + +type whole = + | Let_open of + (Asttypes.override_flag + * Longident.t Asttypes.loc + * loc + * Parsetree.attributes) + +type t = whole list +type exp = Parsetree.expression +type destruct_output = exp list + +(** + destruct such pattern + {[ A.B.let open C in (a,b)]} +*) +let rec destruct_open_tuple (e : Parsetree.expression) (acc : t) : + (t * destruct_output * _) option = + match e.pexp_desc with + | Pexp_open (flag, lid, cont) -> + destruct_open_tuple cont + (Let_open (flag, lid, e.pexp_loc, e.pexp_attributes) :: acc) + | Pexp_tuple es -> Some (acc, es, e.pexp_attributes) + | _ -> None + +let restore_exp (xs : Parsetree.expression) (qualifiers : t) : + Parsetree.expression = + Ext_list.fold_left qualifiers xs (fun x hole -> + match hole with + | Let_open (flag, lid, loc, attrs) -> + ({ + pexp_desc = Pexp_open (flag, lid, x); + pexp_attributes = attrs; + pexp_loc = loc; + } + : Parsetree.expression)) + end module Ast_tuple_pattern_flatten : sig #1 "ast_tuple_pattern_flatten.mli" diff --git a/lib/4.06.1/whole_compiler.ml b/lib/4.06.1/whole_compiler.ml index a7f38284a1..fcad7f018b 100644 --- a/lib/4.06.1/whole_compiler.ml +++ b/lib/4.06.1/whole_compiler.ml @@ -279147,120 +279147,6 @@ let init () = expression_gen = None; }) -end -module Ast_open_cxt : sig -#1 "ast_open_cxt.mli" -(* Copyright (C) 2019 - Present Authors of ReScript - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * In addition to the permissions granted to you by the LGPL, you may combine - * or link a "work that uses the Library" with a publicly distributed version - * of this file to produce a combined library or application, then distribute - * that combined work under the terms of your choosing, with no requirement - * to comply with the obligations normally placed on you by section 4 of the - * LGPL version 3 (or the corresponding section of a later version of the LGPL - * should you choose to use a later version). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) - -type loc = Location.t - -type whole - -type t = whole list - -val restore_exp : Parsetree.expression -> t -> Parsetree.expression - -val destruct : Parsetree.expression -> t -> Parsetree.expression * t - -val destruct_open_tuple : - Parsetree.expression -> - t -> - (t * Parsetree.expression list * Parsetree.attributes) option - -end = struct -#1 "ast_open_cxt.ml" -(* Copyright (C) 2019 - Present Hongbo Zhang, Authors of ReScript - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * In addition to the permissions granted to you by the LGPL, you may combine - * or link a "work that uses the Library" with a publicly distributed version - * of this file to produce a combined library or application, then distribute - * that combined work under the terms of your choosing, with no requirement - * to comply with the obligations normally placed on you by section 4 of the - * LGPL version 3 (or the corresponding section of a later version of the LGPL - * should you choose to use a later version). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) - -type loc = Location.t - -type whole = - | Let_open of - (Asttypes.override_flag - * Longident.t Asttypes.loc - * loc - * Parsetree.attributes) - -type t = whole list - -type exp = Parsetree.expression - -type destruct_output = exp list - -(** - destruct such pattern - {[ A.B.let open C in (a,b)]} -*) -let rec destruct_open_tuple (e : Parsetree.expression) (acc : t) : - (t * destruct_output * _) option = - match e.pexp_desc with - | Pexp_open (flag, lid, cont) -> - destruct_open_tuple cont - (Let_open (flag, lid, e.pexp_loc, e.pexp_attributes) :: acc) - | Pexp_tuple es -> Some (acc, es, e.pexp_attributes) - | _ -> None - -let rec destruct (e : Parsetree.expression) (acc : t) = - match e.pexp_desc with - | Pexp_open (flag, lid, cont) -> - destruct cont (Let_open (flag, lid, e.pexp_loc, e.pexp_attributes) :: acc) - | _ -> (e, acc) - -let restore_exp (xs : Parsetree.expression) (qualifiers : t) : - Parsetree.expression = - Ext_list.fold_left qualifiers xs (fun x hole -> - match hole with - | Let_open (flag, lid, loc, attrs) -> - ({ - pexp_desc = Pexp_open (flag, lid, x); - pexp_attributes = attrs; - pexp_loc = loc; - } - : Parsetree.expression)) - end module Ast_uncurry_apply : sig #1 "ast_uncurry_apply.mli" @@ -281270,9 +281156,7 @@ let app_exp_mapper (e : exp) (self : Bs_ast_mapper.mapper) (fn : exp) (* a |. f a |. f b c [@bs] --> f a b c [@bs] - a |. M.(f b c) --> M.f a M.b M.c a |. (g |. b) - a |. M.Some a |. `Variant a |. (b |. f c [@bs]) *) @@ -281299,61 +281183,52 @@ let app_exp_mapper (e : exp) (self : Bs_ast_mapper.mapper) (fn : exp) pexp_loc = e.pexp_loc; pexp_attributes = e.pexp_attributes; } + | Pexp_ident _ -> + { + pexp_desc = Pexp_apply (fn, [ (Nolabel, new_obj_arg) ]); + pexp_loc = e.pexp_loc; + pexp_attributes = e.pexp_attributes; + } | _ -> ( - match Ast_open_cxt.destruct fn [] with - | ( { pexp_desc = Pexp_tuple xs; pexp_attributes = tuple_attrs }, - wholes ) -> - Ast_open_cxt.restore_exp - (bound new_obj_arg (fun bounded_obj_arg -> - { - pexp_desc = - Pexp_tuple - (Ext_list.map xs (fun fn -> - match fn.pexp_desc with - | Pexp_construct (ctor, None) -> - { - fn with - pexp_desc = - Pexp_construct - (ctor, Some bounded_obj_arg); - } - | Pexp_apply (fn, args) -> - Bs_ast_invariant - .warn_discarded_unused_attributes - fn.pexp_attributes; - { - Parsetree.pexp_desc = - Pexp_apply - ( fn, - (Nolabel, bounded_obj_arg) - :: args ); - pexp_attributes = []; - pexp_loc = fn.pexp_loc; - } - | _ -> - Ast_compatible.app1 ~loc:fn.pexp_loc fn - bounded_obj_arg)); - pexp_attributes = tuple_attrs; - pexp_loc = fn.pexp_loc; - })) - wholes - | ( { pexp_desc = Pexp_apply (e, args); pexp_attributes }, - (_ :: _ as wholes) ) -> - let fn = Ast_open_cxt.restore_exp e wholes in - let args = - Ext_list.map args (fun (lab, exp) -> - (lab, Ast_open_cxt.restore_exp exp wholes)) - in - Bs_ast_invariant.warn_discarded_unused_attributes - pexp_attributes; - { - pexp_desc = Pexp_apply (fn, (Nolabel, new_obj_arg) :: args); - pexp_attributes = []; - pexp_loc = loc; - } + match fn with + | { pexp_desc = Pexp_tuple xs; pexp_attributes = tuple_attrs } -> + bound new_obj_arg (fun bounded_obj_arg -> + { + pexp_desc = + Pexp_tuple + (Ext_list.map xs (fun fn -> + match fn.pexp_desc with + | Pexp_construct (ctor, None) -> + { + fn with + pexp_desc = + Pexp_construct + (ctor, Some bounded_obj_arg); + } + | Pexp_apply (fn, args) -> + Bs_ast_invariant + .warn_discarded_unused_attributes + fn.pexp_attributes; + { + Parsetree.pexp_desc = + Pexp_apply + ( fn, + (Nolabel, bounded_obj_arg) :: args + ); + pexp_attributes = []; + pexp_loc = fn.pexp_loc; + } + | _ -> + Ast_compatible.app1 ~loc:fn.pexp_loc fn + bounded_obj_arg)); + pexp_attributes = tuple_attrs; + pexp_loc = fn.pexp_loc; + }) | _ -> - Ast_compatible.app1 ~loc ~attrs:e.pexp_attributes fn - new_obj_arg)) + { + (Ast_compatible.app1 ~loc fn new_obj_arg) with + pexp_attributes = e.pexp_attributes; + })) | Some { op = "##"; loc; args = [ obj; rest ] } -> ( (* - obj##property - obj#(method a b ) @@ -282452,6 +282327,110 @@ let handleTdclsInStru (self : Bs_ast_mapper.mapper) | { bs_deriving = None }, _ -> Bs_ast_mapper.default_mapper.structure_item self str +end +module Ast_open_cxt : sig +#1 "ast_open_cxt.mli" +(* Copyright (C) 2019 - Present Authors of ReScript + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * In addition to the permissions granted to you by the LGPL, you may combine + * or link a "work that uses the Library" with a publicly distributed version + * of this file to produce a combined library or application, then distribute + * that combined work under the terms of your choosing, with no requirement + * to comply with the obligations normally placed on you by section 4 of the + * LGPL version 3 (or the corresponding section of a later version of the LGPL + * should you choose to use a later version). + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) + +type loc = Location.t + +type whole + +type t = whole list + +val restore_exp : Parsetree.expression -> t -> Parsetree.expression + +val destruct_open_tuple : + Parsetree.expression -> + t -> + (t * Parsetree.expression list * Parsetree.attributes) option + +end = struct +#1 "ast_open_cxt.ml" +(* Copyright (C) 2019 - Present Hongbo Zhang, Authors of ReScript + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * In addition to the permissions granted to you by the LGPL, you may combine + * or link a "work that uses the Library" with a publicly distributed version + * of this file to produce a combined library or application, then distribute + * that combined work under the terms of your choosing, with no requirement + * to comply with the obligations normally placed on you by section 4 of the + * LGPL version 3 (or the corresponding section of a later version of the LGPL + * should you choose to use a later version). + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) + +type loc = Location.t + +type whole = + | Let_open of + (Asttypes.override_flag + * Longident.t Asttypes.loc + * loc + * Parsetree.attributes) + +type t = whole list +type exp = Parsetree.expression +type destruct_output = exp list + +(** + destruct such pattern + {[ A.B.let open C in (a,b)]} +*) +let rec destruct_open_tuple (e : Parsetree.expression) (acc : t) : + (t * destruct_output * _) option = + match e.pexp_desc with + | Pexp_open (flag, lid, cont) -> + destruct_open_tuple cont + (Let_open (flag, lid, e.pexp_loc, e.pexp_attributes) :: acc) + | Pexp_tuple es -> Some (acc, es, e.pexp_attributes) + | _ -> None + +let restore_exp (xs : Parsetree.expression) (qualifiers : t) : + Parsetree.expression = + Ext_list.fold_left qualifiers xs (fun x hole -> + match hole with + | Let_open (flag, lid, loc, attrs) -> + ({ + pexp_desc = Pexp_open (flag, lid, x); + pexp_attributes = attrs; + pexp_loc = loc; + } + : Parsetree.expression)) + end module Ast_tuple_pattern_flatten : sig #1 "ast_tuple_pattern_flatten.mli" From 26e860e395cee4379043111a08660047d77a7aa0 Mon Sep 17 00:00:00 2001 From: Cristiano Calcagno Date: Sat, 23 Jul 2022 10:24:03 +0200 Subject: [PATCH 2/3] cleanup --- jscomp/frontend/ast_exp_apply.ml | 70 ++++++++----------- lib/4.06.1/unstable/js_compiler.ml | 70 ++++++++----------- lib/4.06.1/unstable/js_playground_compiler.ml | 70 ++++++++----------- lib/4.06.1/whole_compiler.ml | 70 ++++++++----------- 4 files changed, 124 insertions(+), 156 deletions(-) diff --git a/jscomp/frontend/ast_exp_apply.ml b/jscomp/frontend/ast_exp_apply.ml index 0a959fe304..90538fdea5 100644 --- a/jscomp/frontend/ast_exp_apply.ml +++ b/jscomp/frontend/ast_exp_apply.ml @@ -132,46 +132,38 @@ let app_exp_mapper (e : exp) (self : Bs_ast_mapper.mapper) (fn : exp) pexp_loc = e.pexp_loc; pexp_attributes = e.pexp_attributes; } - | _ -> ( - match fn with - | { pexp_desc = Pexp_tuple xs; pexp_attributes = tuple_attrs } -> - bound new_obj_arg (fun bounded_obj_arg -> - { - pexp_desc = - Pexp_tuple - (Ext_list.map xs (fun fn -> - match fn.pexp_desc with - | Pexp_construct (ctor, None) -> - { - fn with - pexp_desc = - Pexp_construct - (ctor, Some bounded_obj_arg); - } - | Pexp_apply (fn, args) -> - Bs_ast_invariant - .warn_discarded_unused_attributes - fn.pexp_attributes; - { - Parsetree.pexp_desc = - Pexp_apply - ( fn, - (Nolabel, bounded_obj_arg) :: args - ); - pexp_attributes = []; - pexp_loc = fn.pexp_loc; - } - | _ -> - Ast_compatible.app1 ~loc:fn.pexp_loc fn - bounded_obj_arg)); - pexp_attributes = tuple_attrs; - pexp_loc = fn.pexp_loc; - }) - | _ -> + | Pexp_tuple xs -> + bound new_obj_arg (fun bounded_obj_arg -> { - (Ast_compatible.app1 ~loc fn new_obj_arg) with - pexp_attributes = e.pexp_attributes; - })) + pexp_desc = + Pexp_tuple + (Ext_list.map xs (fun fn -> + match fn.pexp_desc with + | Pexp_construct (ctor, None) -> + { + fn with + pexp_desc = + Pexp_construct (ctor, Some bounded_obj_arg); + } + | Pexp_apply (fn, args) -> + Bs_ast_invariant + .warn_discarded_unused_attributes + fn.pexp_attributes; + { + Parsetree.pexp_desc = + Pexp_apply + (fn, (Nolabel, bounded_obj_arg) :: args); + pexp_attributes = []; + pexp_loc = fn.pexp_loc; + } + | _ -> + Ast_compatible.app1 ~loc:fn.pexp_loc fn + bounded_obj_arg)); + pexp_attributes = fn.pexp_attributes; + pexp_loc = fn.pexp_loc; + }) + | _ -> + Ast_compatible.app1 ~loc ~attrs:e.pexp_attributes fn new_obj_arg) | Some { op = "##"; loc; args = [ obj; rest ] } -> ( (* - obj##property - obj#(method a b ) diff --git a/lib/4.06.1/unstable/js_compiler.ml b/lib/4.06.1/unstable/js_compiler.ml index 230ca6d310..494b545851 100644 --- a/lib/4.06.1/unstable/js_compiler.ml +++ b/lib/4.06.1/unstable/js_compiler.ml @@ -269436,46 +269436,38 @@ let app_exp_mapper (e : exp) (self : Bs_ast_mapper.mapper) (fn : exp) pexp_loc = e.pexp_loc; pexp_attributes = e.pexp_attributes; } - | _ -> ( - match fn with - | { pexp_desc = Pexp_tuple xs; pexp_attributes = tuple_attrs } -> - bound new_obj_arg (fun bounded_obj_arg -> - { - pexp_desc = - Pexp_tuple - (Ext_list.map xs (fun fn -> - match fn.pexp_desc with - | Pexp_construct (ctor, None) -> - { - fn with - pexp_desc = - Pexp_construct - (ctor, Some bounded_obj_arg); - } - | Pexp_apply (fn, args) -> - Bs_ast_invariant - .warn_discarded_unused_attributes - fn.pexp_attributes; - { - Parsetree.pexp_desc = - Pexp_apply - ( fn, - (Nolabel, bounded_obj_arg) :: args - ); - pexp_attributes = []; - pexp_loc = fn.pexp_loc; - } - | _ -> - Ast_compatible.app1 ~loc:fn.pexp_loc fn - bounded_obj_arg)); - pexp_attributes = tuple_attrs; - pexp_loc = fn.pexp_loc; - }) - | _ -> + | Pexp_tuple xs -> + bound new_obj_arg (fun bounded_obj_arg -> { - (Ast_compatible.app1 ~loc fn new_obj_arg) with - pexp_attributes = e.pexp_attributes; - })) + pexp_desc = + Pexp_tuple + (Ext_list.map xs (fun fn -> + match fn.pexp_desc with + | Pexp_construct (ctor, None) -> + { + fn with + pexp_desc = + Pexp_construct (ctor, Some bounded_obj_arg); + } + | Pexp_apply (fn, args) -> + Bs_ast_invariant + .warn_discarded_unused_attributes + fn.pexp_attributes; + { + Parsetree.pexp_desc = + Pexp_apply + (fn, (Nolabel, bounded_obj_arg) :: args); + pexp_attributes = []; + pexp_loc = fn.pexp_loc; + } + | _ -> + Ast_compatible.app1 ~loc:fn.pexp_loc fn + bounded_obj_arg)); + pexp_attributes = fn.pexp_attributes; + pexp_loc = fn.pexp_loc; + }) + | _ -> + Ast_compatible.app1 ~loc ~attrs:e.pexp_attributes fn new_obj_arg) | Some { op = "##"; loc; args = [ obj; rest ] } -> ( (* - obj##property - obj#(method a b ) diff --git a/lib/4.06.1/unstable/js_playground_compiler.ml b/lib/4.06.1/unstable/js_playground_compiler.ml index 3e895c95ee..f2c05c95e0 100644 --- a/lib/4.06.1/unstable/js_playground_compiler.ml +++ b/lib/4.06.1/unstable/js_playground_compiler.ml @@ -270899,46 +270899,38 @@ let app_exp_mapper (e : exp) (self : Bs_ast_mapper.mapper) (fn : exp) pexp_loc = e.pexp_loc; pexp_attributes = e.pexp_attributes; } - | _ -> ( - match fn with - | { pexp_desc = Pexp_tuple xs; pexp_attributes = tuple_attrs } -> - bound new_obj_arg (fun bounded_obj_arg -> - { - pexp_desc = - Pexp_tuple - (Ext_list.map xs (fun fn -> - match fn.pexp_desc with - | Pexp_construct (ctor, None) -> - { - fn with - pexp_desc = - Pexp_construct - (ctor, Some bounded_obj_arg); - } - | Pexp_apply (fn, args) -> - Bs_ast_invariant - .warn_discarded_unused_attributes - fn.pexp_attributes; - { - Parsetree.pexp_desc = - Pexp_apply - ( fn, - (Nolabel, bounded_obj_arg) :: args - ); - pexp_attributes = []; - pexp_loc = fn.pexp_loc; - } - | _ -> - Ast_compatible.app1 ~loc:fn.pexp_loc fn - bounded_obj_arg)); - pexp_attributes = tuple_attrs; - pexp_loc = fn.pexp_loc; - }) - | _ -> + | Pexp_tuple xs -> + bound new_obj_arg (fun bounded_obj_arg -> { - (Ast_compatible.app1 ~loc fn new_obj_arg) with - pexp_attributes = e.pexp_attributes; - })) + pexp_desc = + Pexp_tuple + (Ext_list.map xs (fun fn -> + match fn.pexp_desc with + | Pexp_construct (ctor, None) -> + { + fn with + pexp_desc = + Pexp_construct (ctor, Some bounded_obj_arg); + } + | Pexp_apply (fn, args) -> + Bs_ast_invariant + .warn_discarded_unused_attributes + fn.pexp_attributes; + { + Parsetree.pexp_desc = + Pexp_apply + (fn, (Nolabel, bounded_obj_arg) :: args); + pexp_attributes = []; + pexp_loc = fn.pexp_loc; + } + | _ -> + Ast_compatible.app1 ~loc:fn.pexp_loc fn + bounded_obj_arg)); + pexp_attributes = fn.pexp_attributes; + pexp_loc = fn.pexp_loc; + }) + | _ -> + Ast_compatible.app1 ~loc ~attrs:e.pexp_attributes fn new_obj_arg) | Some { op = "##"; loc; args = [ obj; rest ] } -> ( (* - obj##property - obj#(method a b ) diff --git a/lib/4.06.1/whole_compiler.ml b/lib/4.06.1/whole_compiler.ml index fcad7f018b..e20eed9290 100644 --- a/lib/4.06.1/whole_compiler.ml +++ b/lib/4.06.1/whole_compiler.ml @@ -281189,46 +281189,38 @@ let app_exp_mapper (e : exp) (self : Bs_ast_mapper.mapper) (fn : exp) pexp_loc = e.pexp_loc; pexp_attributes = e.pexp_attributes; } - | _ -> ( - match fn with - | { pexp_desc = Pexp_tuple xs; pexp_attributes = tuple_attrs } -> - bound new_obj_arg (fun bounded_obj_arg -> - { - pexp_desc = - Pexp_tuple - (Ext_list.map xs (fun fn -> - match fn.pexp_desc with - | Pexp_construct (ctor, None) -> - { - fn with - pexp_desc = - Pexp_construct - (ctor, Some bounded_obj_arg); - } - | Pexp_apply (fn, args) -> - Bs_ast_invariant - .warn_discarded_unused_attributes - fn.pexp_attributes; - { - Parsetree.pexp_desc = - Pexp_apply - ( fn, - (Nolabel, bounded_obj_arg) :: args - ); - pexp_attributes = []; - pexp_loc = fn.pexp_loc; - } - | _ -> - Ast_compatible.app1 ~loc:fn.pexp_loc fn - bounded_obj_arg)); - pexp_attributes = tuple_attrs; - pexp_loc = fn.pexp_loc; - }) - | _ -> + | Pexp_tuple xs -> + bound new_obj_arg (fun bounded_obj_arg -> { - (Ast_compatible.app1 ~loc fn new_obj_arg) with - pexp_attributes = e.pexp_attributes; - })) + pexp_desc = + Pexp_tuple + (Ext_list.map xs (fun fn -> + match fn.pexp_desc with + | Pexp_construct (ctor, None) -> + { + fn with + pexp_desc = + Pexp_construct (ctor, Some bounded_obj_arg); + } + | Pexp_apply (fn, args) -> + Bs_ast_invariant + .warn_discarded_unused_attributes + fn.pexp_attributes; + { + Parsetree.pexp_desc = + Pexp_apply + (fn, (Nolabel, bounded_obj_arg) :: args); + pexp_attributes = []; + pexp_loc = fn.pexp_loc; + } + | _ -> + Ast_compatible.app1 ~loc:fn.pexp_loc fn + bounded_obj_arg)); + pexp_attributes = fn.pexp_attributes; + pexp_loc = fn.pexp_loc; + }) + | _ -> + Ast_compatible.app1 ~loc ~attrs:e.pexp_attributes fn new_obj_arg) | Some { op = "##"; loc; args = [ obj; rest ] } -> ( (* - obj##property - obj#(method a b ) From 8d0afb6da147f200d4d7f4a160b37d005fa15d1d Mon Sep 17 00:00:00 2001 From: Cristiano Calcagno Date: Sat, 23 Jul 2022 10:24:48 +0200 Subject: [PATCH 3/3] leftover --- jscomp/frontend/ast_exp_apply.ml | 6 ------ lib/4.06.1/unstable/js_compiler.ml | 6 ------ lib/4.06.1/unstable/js_playground_compiler.ml | 6 ------ lib/4.06.1/whole_compiler.ml | 6 ------ 4 files changed, 24 deletions(-) diff --git a/jscomp/frontend/ast_exp_apply.ml b/jscomp/frontend/ast_exp_apply.ml index 90538fdea5..5edb083ac7 100644 --- a/jscomp/frontend/ast_exp_apply.ml +++ b/jscomp/frontend/ast_exp_apply.ml @@ -126,12 +126,6 @@ let app_exp_mapper (e : exp) (self : Bs_ast_mapper.mapper) (fn : exp) pexp_loc = e.pexp_loc; pexp_attributes = e.pexp_attributes; } - | Pexp_ident _ -> - { - pexp_desc = Pexp_apply (fn, [ (Nolabel, new_obj_arg) ]); - pexp_loc = e.pexp_loc; - pexp_attributes = e.pexp_attributes; - } | Pexp_tuple xs -> bound new_obj_arg (fun bounded_obj_arg -> { diff --git a/lib/4.06.1/unstable/js_compiler.ml b/lib/4.06.1/unstable/js_compiler.ml index 494b545851..185daa660a 100644 --- a/lib/4.06.1/unstable/js_compiler.ml +++ b/lib/4.06.1/unstable/js_compiler.ml @@ -269430,12 +269430,6 @@ let app_exp_mapper (e : exp) (self : Bs_ast_mapper.mapper) (fn : exp) pexp_loc = e.pexp_loc; pexp_attributes = e.pexp_attributes; } - | Pexp_ident _ -> - { - pexp_desc = Pexp_apply (fn, [ (Nolabel, new_obj_arg) ]); - pexp_loc = e.pexp_loc; - pexp_attributes = e.pexp_attributes; - } | Pexp_tuple xs -> bound new_obj_arg (fun bounded_obj_arg -> { diff --git a/lib/4.06.1/unstable/js_playground_compiler.ml b/lib/4.06.1/unstable/js_playground_compiler.ml index f2c05c95e0..1e6681dfb4 100644 --- a/lib/4.06.1/unstable/js_playground_compiler.ml +++ b/lib/4.06.1/unstable/js_playground_compiler.ml @@ -270893,12 +270893,6 @@ let app_exp_mapper (e : exp) (self : Bs_ast_mapper.mapper) (fn : exp) pexp_loc = e.pexp_loc; pexp_attributes = e.pexp_attributes; } - | Pexp_ident _ -> - { - pexp_desc = Pexp_apply (fn, [ (Nolabel, new_obj_arg) ]); - pexp_loc = e.pexp_loc; - pexp_attributes = e.pexp_attributes; - } | Pexp_tuple xs -> bound new_obj_arg (fun bounded_obj_arg -> { diff --git a/lib/4.06.1/whole_compiler.ml b/lib/4.06.1/whole_compiler.ml index e20eed9290..33c927e73d 100644 --- a/lib/4.06.1/whole_compiler.ml +++ b/lib/4.06.1/whole_compiler.ml @@ -281183,12 +281183,6 @@ let app_exp_mapper (e : exp) (self : Bs_ast_mapper.mapper) (fn : exp) pexp_loc = e.pexp_loc; pexp_attributes = e.pexp_attributes; } - | Pexp_ident _ -> - { - pexp_desc = Pexp_apply (fn, [ (Nolabel, new_obj_arg) ]); - pexp_loc = e.pexp_loc; - pexp_attributes = e.pexp_attributes; - } | Pexp_tuple xs -> bound new_obj_arg (fun bounded_obj_arg -> {