From 128f37985d07b7db8b161b39fba655d3ea5dadef Mon Sep 17 00:00:00 2001 From: Jules Villard Date: Mon, 15 Jul 2019 04:02:11 -0700 Subject: [PATCH] [ocaml] upgrade most dependencies Summary: newer is better, right? All the code changes in infer are because of core being bumped to v0.12. Reviewed By: jberdine Differential Revision: D16223183 fbshipit-source-id: f3c339966 --- Makefile | 2 +- infer/src/IR/Attributes.ml | 1 - infer/src/IR/Ident.ml | 2 +- infer/src/IR/Mangled.ml | 1 + infer/src/IR/ProcnameDispatcher.ml | 2 +- infer/src/backend/StatsAggregator.ml | 2 +- infer/src/base/Utils.ml | 3 +- infer/src/biabduction/Match.ml | 8 +- infer/src/biabduction/State.ml | 2 +- infer/src/clang/cFrontend_errors.ml | 4 +- infer/src/clang/cTL.ml | 10 +- infer/src/clang/clang_ast_extend.ml | 2 +- infer/src/integration/Clang.ml | 29 +----- infer/src/istd/ARList.ml | 4 +- infer/src/istd/MaximumSharing.ml | 2 +- infer/src/istd/PolyVariantEqual.ml | 2 +- infer/src/java/jTrans.ml | 2 +- infer/src/topl/Topl.ml | 2 +- infer/src/unit/DifferentialFiltersTests.ml | 7 +- infer/src/unit/FileDiffTests.ml | 6 +- infer/src/unit/JavaProfilerSamplesTest.ml | 6 +- infer/src/unit/MaximumSharingTests.ml | 2 +- infer/src/unit/procCfgTests.ml | 2 +- opam | 6 +- opam.locked | 115 +++++++++++---------- 25 files changed, 100 insertions(+), 124 deletions(-) diff --git a/Makefile b/Makefile index fa0ab79853d..8886af9a32e 100644 --- a/Makefile +++ b/Makefile @@ -793,7 +793,7 @@ endif # This is a magical version number that doesn't reinstall the world when added on top of what we # have in opam.locked. To upgrade this version number, manually try to install several utop versions # until you find one that doesn't recompile the world. TODO(t20828442): get rid of magic -OPAM_DEV_DEPS = ocamlformat.$$(grep version .ocamlformat | cut -d ' ' -f 3) ocp-indent merlin utop.2.2.0 webbrowser +OPAM_DEV_DEPS = ocamlformat.$$(grep version .ocamlformat | cut -d ' ' -f 3) ocp-indent merlin utop.2.4.0 webbrowser ifneq ($(EMACS),no) OPAM_DEV_DEPS += tuareg diff --git a/infer/src/IR/Attributes.ml b/infer/src/IR/Attributes.ml index 102e7c23dc4..13f9175e327 100644 --- a/infer/src/IR/Attributes.ml +++ b/infer/src/IR/Attributes.ml @@ -139,7 +139,6 @@ let store ~proc_desc (attr : ProcAttributes.t) = (Option.map proc_desc ~f:Procdesc.get_static_callees |> Option.value ~default:[]) - let load_defined pname = Typ.Procname.SQLite.serialize pname |> find ~defined:true let find_file_capturing_procedure pname = diff --git a/infer/src/IR/Ident.ml b/infer/src/IR/Ident.ml index c78ea3b38a6..ad4ef75ab59 100644 --- a/infer/src/IR/Ident.ml +++ b/infer/src/IR/Ident.ml @@ -251,7 +251,7 @@ end) let hashqueue_of_sequence ?init s = let q = match init with None -> HashQueue.create () | Some q0 -> q0 in Sequence.iter s ~f:(fun id -> - let (_ : [`Key_already_present | `Ok]) = HashQueue.enqueue q id () in + let (_ : [`Key_already_present | `Ok]) = HashQueue.enqueue_back q id () in () ) ; q diff --git a/infer/src/IR/Mangled.ml b/infer/src/IR/Mangled.ml index e212f596caa..b16138188ef 100644 --- a/infer/src/IR/Mangled.ml +++ b/infer/src/IR/Mangled.ml @@ -47,6 +47,7 @@ let rename ~f {plain; mangled} = let mangled = Option.map ~f mangled in {plain; mangled} + module Set = Caml.Set.Make (struct type nonrec t = t diff --git a/infer/src/IR/ProcnameDispatcher.ml b/infer/src/IR/ProcnameDispatcher.ml index e2da7d2a27d..465e5c54a71 100644 --- a/infer/src/IR/ProcnameDispatcher.ml +++ b/infer/src/IR/ProcnameDispatcher.ml @@ -737,7 +737,7 @@ module Call = struct -> 'marker -> ('context, 'captured_types, 'markers) one_arg_matcher = fun get_m get_c marker -> - let marker_static_checker markers = Polymorphic_compare.( = ) marker (get_m markers) in + let marker_static_checker markers = Poly.equal marker (get_m markers) in let match_arg _context capt arg = Typ.equal (FuncArg.typ arg) (get_c capt) in {match_arg; marker_static_checker} diff --git a/infer/src/backend/StatsAggregator.ml b/infer/src/backend/StatsAggregator.ml index 44df4adee49..b988d5f8840 100644 --- a/infer/src/backend/StatsAggregator.ml +++ b/infer/src/backend/StatsAggregator.ml @@ -29,7 +29,7 @@ let find_json_files_in_dir dir = let json_regex = Str.regexp_case_fold ".*\\.json$" in (not (Str.string_match json_files_to_ignore_regex path 0)) && Str.string_match json_regex path 0 - && Polymorphic_compare.( = ) s.st_kind Unix.S_REG + && Poly.equal s.st_kind Unix.S_REG in match dir_exists dir with | true -> diff --git a/infer/src/base/Utils.ml b/infer/src/base/Utils.ml index 4c04072c6d7..bae4d03374c 100644 --- a/infer/src/base/Utils.ml +++ b/infer/src/base/Utils.ml @@ -257,8 +257,7 @@ let create_dir dir = with Unix.Unix_error _ -> let created_concurrently = (* check if another process created it meanwhile *) - try Polymorphic_compare.( = ) (Unix.stat dir).Unix.st_kind Unix.S_DIR - with Unix.Unix_error _ -> false + try Poly.equal (Unix.stat dir).Unix.st_kind Unix.S_DIR with Unix.Unix_error _ -> false in if not created_concurrently then L.(die ExternalError) "cannot create directory '%s'" dir ) diff --git a/infer/src/biabduction/Match.ml b/infer/src/biabduction/Match.ml index 438c589870b..12ce6883402 100644 --- a/infer/src/biabduction/Match.ml +++ b/infer/src/biabduction/Match.ml @@ -88,9 +88,11 @@ let exp_list_match es1 sub vars es2 = | Some (sub_acc, vars_leftover) -> exp_match e1 sub_acc vars_leftover e2 in - Option.find_map - ~f:(fun es_combined -> List.fold ~f ~init:(Some (sub, vars)) es_combined) - (List.zip es1 es2) + match List.zip es1 es2 with + | Ok es_combined -> + List.fold ~f ~init:(Some (sub, vars)) es_combined + | Unequal_lengths -> + None (** Checks [sexp1 = sexp2[sub ++ sub']] for some [sub'] with diff --git a/infer/src/biabduction/State.ml b/infer/src/biabduction/State.ml index c14f346c71c..7653c8b6e44 100644 --- a/infer/src/biabduction/State.ml +++ b/infer/src/biabduction/State.ml @@ -156,7 +156,7 @@ let mk_find_duplicate_nodes : Procdesc.t -> Procdesc.Node.t -> Procdesc.NodeSet. let s = M.find (get_key node) map in let node_normalized_instrs = Procdesc.NodeMap.find node s in let collect_duplicates node' normalized_instrs' nset = - if List.equal ~equal:Sil.equal_instr node_normalized_instrs normalized_instrs' then + if List.equal Sil.equal_instr node_normalized_instrs normalized_instrs' then Procdesc.NodeSet.add node' nset else nset in diff --git a/infer/src/clang/cFrontend_errors.ml b/infer/src/clang/cFrontend_errors.ml index 2c0393ca5b8..f24be15464d 100644 --- a/infer/src/clang/cFrontend_errors.ml +++ b/infer/src/clang/cFrontend_errors.ml @@ -336,11 +336,11 @@ let expand_formula phi map_ error_msg_ = | false, fparams, f1 -> ( (* in this case it should be a defined macro *) match List.zip fparams actual_param with - | Some sub -> + | Ok sub -> let f1_sub = apply_substitution f1 sub in let map' = ALVar.FormulaIdMap.add av (true, fparams, f1) map in expand f1_sub map' error_msg' - | None -> + | Unequal_lengths -> L.(die ExternalError) "Formula identifier '%s' is not called with the right number of parameters" name ) diff --git a/infer/src/clang/cTL.ml b/infer/src/clang/cTL.ml index 8f0c1ec069f..4999607b196 100644 --- a/infer/src/clang/cTL.ml +++ b/infer/src/clang/cTL.ml @@ -128,7 +128,7 @@ type al_file = ; global_paths: (string * ALVar.alexp list) list ; checkers: ctl_checker list } -let equal_ast_node = Poly.( = ) +let equal_ast_node = Poly.equal module Debug = struct let pp_transition fmt trans_opt = @@ -817,12 +817,12 @@ let parameter_of_corresp_name method_name args name = List.filter (String.split ~on:':' method_name) ~f:(fun label -> not (String.is_empty label)) in match List.zip names args with - | Some names_args -> ( + | Ok names_args -> ( let names_arg_opt = List.find names_args ~f:(fun (arg_label, _) -> ALVar.compare_str_with_alexp arg_label name) in match names_arg_opt with Some (_, arg) -> Some arg | None -> None ) - | None -> + | Unequal_lengths -> None @@ -911,10 +911,10 @@ let field_of_corresp_name_from_init_list_expr name init_nodes (expr_info : Clang | Some decl -> ( let fields = transition_via_fields (Decl decl) in match List.zip init_nodes fields with - | Some init_nodes_fields -> + | Ok init_nodes_fields -> List.filter ~f:(fun (_, field) -> field_has_name name field) init_nodes_fields |> List.map ~f:(fun (node, _) -> node) - | None -> + | Unequal_lengths -> [] ) | None -> [] diff --git a/infer/src/clang/clang_ast_extend.ml b/infer/src/clang/clang_ast_extend.ml index 4e3db1e346d..b54c433d92e 100644 --- a/infer/src/clang/clang_ast_extend.ml +++ b/infer/src/clang/clang_ast_extend.ml @@ -54,7 +54,7 @@ module TypePointerOrd = struct | _, Clang_ast_types.TypePtr.Ptr _ -> -1 | Builtin a, Builtin b -> - Polymorphic_compare.compare a b + Poly.compare a b | Builtin _, _ -> 1 | _, Builtin _ -> diff --git a/infer/src/integration/Clang.ml b/infer/src/integration/Clang.ml index 1adb0d5a201..6f645300847 100644 --- a/infer/src/integration/Clang.ml +++ b/infer/src/integration/Clang.ml @@ -5,36 +5,10 @@ * LICENSE file in the root directory of this source tree. *) open! IStd -module F = Format module L = Logging type compiler = Clang | Make [@@deriving compare] -let pp_extended_env fmt (env : Unix.env) = - let pp_pair fmt (var, value) = F.fprintf fmt "%s=%s" var value in - match env with - | `Replace values -> - F.fprintf fmt "@[%a@]" (Pp.seq ~print_env:Pp.text_break pp_pair) values - | `Extend values -> - let is_extended s = - match String.lsplit2 s ~on:'=' with - | Some (var, _) -> - List.exists ~f:(fun (var', _) -> String.equal var var') values - | None -> - false - in - let env_not_extended = - Unix.environment () |> Array.to_list |> List.filter ~f:(Fn.non is_extended) - in - F.fprintf fmt "@[%a@ %a@]" - (Pp.seq ~print_env:Pp.text_break F.pp_print_string) - env_not_extended - (Pp.seq ~print_env:Pp.text_break pp_pair) - values - | `Replace_raw values -> - F.fprintf fmt "@[%a@]" (Pp.seq ~print_env:Pp.text_break F.pp_print_string) values - - let capture compiler ~prog ~args = match compiler with | Clang -> @@ -44,7 +18,8 @@ let capture compiler ~prog ~args = let old_path = Option.value ~default:"" (Sys.getenv path_var) in let new_path = Config.wrappers_dir ^ ":" ^ old_path in let extended_env = `Extend [(path_var, new_path); ("INFER_OLD_PATH", old_path)] in - L.environment_info "Running command %s with env:@\n%a@\n@." prog pp_extended_env extended_env ; + L.environment_info "Running command %s with env:@\n%s@\n@." prog + (Unix.sexp_of_env extended_env |> Sexp.to_string) ; Unix.fork_exec ~prog ~argv:(prog :: args) ~env:extended_env () |> Unix.waitpid |> function diff --git a/infer/src/istd/ARList.ml b/infer/src/istd/ARList.ml index dff9de2fc9f..d5ff217a8b8 100644 --- a/infer/src/istd/ARList.ml +++ b/infer/src/istd/ARList.ml @@ -26,9 +26,7 @@ type +'a t = Empty | Cons of 'a * 'a t | Snoc of 'a t * 'a | Concat of 'a t * 'a let () = (* This is a pretty simple test to check that the runtime representation of OCaml lists is compatible with our lists and hence using [Obj.magic] for [of_list] is legit *) let exception RuntimeValue in - assert ( - Polymorphic_compare.(Caml.Obj.repr [RuntimeValue] = Caml.Obj.repr (Cons (RuntimeValue, Empty))) - ) + assert (Poly.(Caml.Obj.repr [RuntimeValue] = Caml.Obj.repr (Cons (RuntimeValue, Empty)))) (* Constructors *) diff --git a/infer/src/istd/MaximumSharing.ml b/infer/src/istd/MaximumSharing.ml index 0a4b4067238..e258bac7464 100644 --- a/infer/src/istd/MaximumSharing.ml +++ b/infer/src/istd/MaximumSharing.ml @@ -70,7 +70,7 @@ end = struct with type t = Hashing.hash_value * Obj.t ) - module HashedNoscanBlock = (val hashed_obj Polymorphic_compare.equal) + module HashedNoscanBlock = (val hashed_obj Poly.equal) module PhysEqualedHashedScannableBlock = (val hashed_obj phys_equal) diff --git a/infer/src/istd/PolyVariantEqual.ml b/infer/src/istd/PolyVariantEqual.ml index 9b8deeaf013..82f6ee5b12d 100644 --- a/infer/src/istd/PolyVariantEqual.ml +++ b/infer/src/istd/PolyVariantEqual.ml @@ -7,4 +7,4 @@ open! Core -let ( = ) (v1 : [> ]) (v2 : [> ]) = Polymorphic_compare.( = ) v1 v2 +let ( = ) (v1 : [> ]) (v2 : [> ]) = Poly.equal v1 v2 diff --git a/infer/src/java/jTrans.ml b/infer/src/java/jTrans.ml index 6e11af20a6b..b2996d8d7ab 100644 --- a/infer/src/java/jTrans.ml +++ b/infer/src/java/jTrans.ml @@ -239,7 +239,7 @@ let get_test_operator op = Binop.Ne -let is_java_native cm = Poly.( = ) cm.Javalib.cm_implementation Javalib.Native +let is_java_native cm = Poly.equal cm.Javalib.cm_implementation Javalib.Native let is_clone ms = String.equal (JBasics.ms_name ms) JConfig.clone_name diff --git a/infer/src/topl/Topl.ml b/infer/src/topl/Topl.ml index 912d9cefad4..97b007a93d1 100644 --- a/infer/src/topl/Topl.ml +++ b/infer/src/topl/Topl.ml @@ -66,7 +66,7 @@ let evaluate_static_guard label (e_fun, arg_ts) = false in let match_args () = - let same_length xs ys = Option.is_some (List.zip xs ys) in + let same_length xs ys = Int.equal (Caml.List.compare_lengths xs ys) 0 in Option.value_map label.ToplAst.arguments ~f:(same_length arg_ts) ~default:true in match_name () && match_args () diff --git a/infer/src/unit/DifferentialFiltersTests.ml b/infer/src/unit/DifferentialFiltersTests.ml index 170d0226372..35923299840 100644 --- a/infer/src/unit/DifferentialFiltersTests.ml +++ b/infer/src/unit/DifferentialFiltersTests.ml @@ -85,12 +85,11 @@ let test_file_renamings_find_previous = let test_relative_complements = let create_test pred (l1, l2) (expected_l1, expected_l2, expected_l3) _ = - let compare = Int.compare in let output_l1, output_l2, output_l3 = - DifferentialFilters.VISIBLE_FOR_TESTING_DO_NOT_USE_DIRECTLY.relative_complements ~compare - ~pred l1 l2 + DifferentialFilters.VISIBLE_FOR_TESTING_DO_NOT_USE_DIRECTLY.relative_complements + ~compare:Int.compare ~pred l1 l2 in - let list_equal l1 l2 = List.equal ~equal:(fun v1 v2 -> Int.equal (compare v1 v2) 0) l1 l2 in + let list_equal l1 l2 = List.equal Int.equal l1 l2 in assert_equal ~pp_diff:(pp_diff_of_int_list "First list") ~cmp:list_equal expected_l1 output_l1 ; assert_equal ~pp_diff:(pp_diff_of_int_list "Second list") ~cmp:list_equal expected_l2 output_l2 ; assert_equal ~pp_diff:(pp_diff_of_int_list "Third list") ~cmp:list_equal expected_l3 output_l3 diff --git a/infer/src/unit/FileDiffTests.ml b/infer/src/unit/FileDiffTests.ml index 1b7e163834e..815c7e1a560 100644 --- a/infer/src/unit/FileDiffTests.ml +++ b/infer/src/unit/FileDiffTests.ml @@ -17,7 +17,7 @@ let test_unixdiff_process_raw_directives_with_valid_input = let actual_str = Format.asprintf "%a" (Pp.seq ~sep:"" UnixDiffTest.pp) actual in Format.fprintf fmt "Expected: '%s', found: '%s'" expected_str actual_str in - assert_equal ~cmp:(List.equal ~equal:UnixDiffTest.equal) ~pp_diff expected found + assert_equal ~cmp:(List.equal UnixDiffTest.equal) ~pp_diff expected found in [ ( "test_unixdiff_process_raw_directives_1" , "UOOU" @@ -78,7 +78,7 @@ let test_parse_directives_with_valid_input = let actual_str = Format.asprintf "%a" (Pp.seq ~sep:", " Format.pp_print_int) actual in Format.fprintf fmt "Expected: '%s', found: '%s'" expected_str actual_str in - assert_equal ~cmp:(List.equal ~equal:Int.equal) ~pp_diff expected found + assert_equal ~cmp:(List.equal Int.equal) ~pp_diff expected found in [ (* === test1 === @@ -251,7 +251,7 @@ let test_parse_unix_diff_with_valid_input = let actual_str = Format.asprintf "%a" (Pp.seq ~sep:", " Format.pp_print_int) actual in Format.fprintf fmt "Expected: '%s', found: '%s'" expected_str actual_str in - assert_equal ~cmp:(List.equal ~equal:Int.equal) ~pp_diff expected found + assert_equal ~cmp:(List.equal Int.equal) ~pp_diff expected found in [("test_parse_unix_diff_1", "OONUU", [1]); ("test_parse_unix_diff_2", "UOONUONN", [2; 4; 5])] |> List.map ~f:(fun (name, test_input, expected_output) -> diff --git a/infer/src/unit/JavaProfilerSamplesTest.ml b/infer/src/unit/JavaProfilerSamplesTest.ml index ff14a4c3856..7b92cd878a5 100644 --- a/infer/src/unit/JavaProfilerSamplesTest.ml +++ b/infer/src/unit/JavaProfilerSamplesTest.ml @@ -62,7 +62,7 @@ let test_jni_parse_str_with_valid_input = Format.fprintf fmt "Expected: '%a', found: '%a'" (Format.pp_print_list T.pp) expected (Format.pp_print_list T.pp) actual in - assert_equal ~cmp:(List.equal ~equal:T.equal) ~pp_diff expected found + assert_equal ~cmp:(List.equal T.equal) ~pp_diff expected found in [ ( "test_jni_parse_str_with_method_signature" , "(IZLjava/lang/String;)[C" @@ -160,9 +160,7 @@ let test_jni_to_java_type_with_invalid_input = let test_from_json_string_with_valid_input = let create_test input expected ~use_signature _ = let found = JavaProfilerSamples.from_json_string input ~use_signature in - assert_equal - ~cmp:(List.equal ~equal:JavaProfilerSamples.equal_labeled_profiler_sample) - expected found + assert_equal ~cmp:(List.equal JavaProfilerSamples.equal_labeled_profiler_sample) expected found in let input1 = "[{\"test\": \"label1\",\"methods\": []}]" in let expected1 = [("label1", JavaProfilerSamples.ProfilerSample.of_list [])] in diff --git a/infer/src/unit/MaximumSharingTests.ml b/infer/src/unit/MaximumSharingTests.ml index 9d483336fca..1b86f3b3af9 100644 --- a/infer/src/unit/MaximumSharingTests.ml +++ b/infer/src/unit/MaximumSharingTests.ml @@ -65,7 +65,7 @@ let tests = let serialized_normalized_with_sharing = Marshal.to_string normalized [] in assert_equal serialized_input_with_sharing serialized_normalized_with_sharing | `MarshalNoSharing_MustBeBetter -> - assert_bool "equal" (Polymorphic_compare.equal input normalized) ; + assert_bool "equal" (Poly.equal input normalized) ; assert_bool "strictly less reachable words" (reachable_words_normalized < reachable_words_input) ; (* diff --git a/infer/src/unit/procCfgTests.ml b/infer/src/unit/procCfgTests.ml index ea8b7ffb1d6..d134130cc37 100644 --- a/infer/src/unit/procCfgTests.ml +++ b/infer/src/unit/procCfgTests.ml @@ -47,7 +47,7 @@ let tests = let open OUnit2 in let cmp l1 l2 = let sort = List.sort ~compare:Procdesc.Node.compare in - List.equal ~equal:Procdesc.Node.equal (sort l1) (sort l2) + List.equal Procdesc.Node.equal (sort l1) (sort l2) in let pp_diff fmt (actual, expected) = let pp_sep fmt _ = F.pp_print_char fmt ',' in diff --git a/opam b/opam index aded10cc415..190583537c5 100644 --- a/opam +++ b/opam @@ -25,7 +25,7 @@ depends: [ "atdgen" {>="2.0.0"} "base64" {>="3.0.0"} "cmdliner" {>="1.0.0"} - "core" {<"v0.12.0"} + "core" {>="v0.12.0" & < "v0.13"} "conf-autoconf" {build} "conf-gmp" {build} "conf-mpfr" {build} @@ -34,7 +34,7 @@ depends: [ "ctypes" {>="0.9.2"} "dune" {build & >="1.0"} "elina" {>="1.1"} - "javalib" {>="2.3.5" & <"3.0"} + "javalib" {="3.0"} "mtime" "ocaml" {>="4.06.0"} "ocamlfind" {build} @@ -42,7 +42,7 @@ depends: [ "ounit" {>="2.0.5"} "parmap" {>="1.0-rc8"} "ppx_deriving" {>="4.1"} - "ppx_fields_conv" {>="v0.11.0" & < "v0.12"} + "ppx_fields_conv" {>="v0.12.0" & < "v0.13"} "sawja" {>="1.5.4"} "sqlite3" "utop" {with-test} diff --git a/opam.locked b/opam.locked index 89c2cb147b6..660d463ecbf 100644 --- a/opam.locked +++ b/opam.locked @@ -25,19 +25,21 @@ depends: [ "atd" {= "2.0.0"} "atdgen" {= "2.0.0"} "atdgen-runtime" {= "2.0.0"} - "base" {= "v0.11.1"} + "base" {= "v0.12.2"} "base-bigarray" {= "base"} "base-bytes" {= "base"} "base-threads" {= "base"} "base-unix" {= "base"} - "base64" {= "3.1.0"} - "bin_prot" {= "v0.11.0"} + "base64" {= "3.2.0"} + "base_bigstring" {= "v0.12.0"} + "base_quickcheck" {= "v0.12.0"} + "bin_prot" {= "v0.12.0"} "biniou" {= "1.2.0"} "camlidl" {= "1.05"} "camlp4" {= "4.07+1"} - "camlzip" {= "1.07"} + "camlzip" {= "1.08"} "camomile" {= "1.0.1"} - "cmdliner" {= "1.0.3"} + "cmdliner" {= "1.0.4"} "conf-autoconf" {= "0.1"} "conf-gmp" {= "1"} "conf-m4" {= "1"} @@ -47,78 +49,81 @@ depends: [ "conf-sqlite3" {= "1"} "conf-which" {= "1"} "conf-zlib" {= "1"} - "configurator" {= "v0.11.0"} - "core" {= "v0.11.3"} - "core_kernel" {= "v0.11.1"} - "cppo" {= "1.6.5"} - "cppo_ocamlbuild" {= "1.6.0"} + "core" {= "v0.12.3"} + "core_kernel" {= "v0.12.2"} + "cppo" {= "1.6.6"} "ctypes" {= "0.14.0"} "dune" {= "1.10.0"} "easy-format" {= "1.3.1"} "elina" {= "1.1"} "extlib" {= "1.7.5"} - "fieldslib" {= "v0.11.0"} + "fieldslib" {= "v0.12.0"} "integers" {= "0.2.2"} - "jane-street-headers" {= "v0.11.0"} + "jane-street-headers" {= "v0.12.0"} "javalib" {= "3.0"} "jbuilder" {= "transition"} - "menhir" {= "20181113"} - "mlgmpidl" {= "1.2.7"} + "jst-config" {= "v0.12.0"} + "menhir" {= "20190626"} + "mlgmpidl" {= "1.2.10"} "mtime" {= "1.1.0"} - "num" {= "1.1"} + "num" {= "1.2"} "ocaml" {= "4.07.1"} - "ocaml-compiler-libs" {= "v0.11.0"} + "ocaml-compiler-libs" {= "v0.12.0"} "ocaml-config" {= "1"} - "ocaml-migrate-parsetree" {= "1.1.0"} + "ocaml-migrate-parsetree" {= "1.4.0"} "ocaml-variants" {= "4.07.1+flambda"} - "ocamlbuild" {= "0.12.0"} + "ocamlbuild" {= "0.14.0"} "ocamlfind" {= "1.8.0"} "ocamlgraph" {= "1.8.8"} "octavius" {= "1.2.0"} "ounit" {= "2.0.8"} "parmap" {= "1.0-rc10"} - "parsexp" {= "v0.11.0"} - "ppx_assert" {= "v0.11.0"} - "ppx_base" {= "v0.11.0"} - "ppx_bench" {= "v0.11.0"} - "ppx_bin_prot" {= "v0.11.1"} - "ppx_compare" {= "v0.11.1"} - "ppx_custom_printf" {= "v0.11.0"} - "ppx_derivers" {= "1.0"} - "ppx_deriving" {= "4.2.1"} - "ppx_enumerate" {= "v0.11.1"} - "ppx_expect" {= "v0.11.1"} - "ppx_fail" {= "v0.11.0"} - "ppx_fields_conv" {= "v0.11.0"} - "ppx_hash" {= "v0.11.1"} - "ppx_here" {= "v0.11.0"} - "ppx_inline_test" {= "v0.11.0"} - "ppx_jane" {= "v0.11.0"} - "ppx_js_style" {= "v0.11.0"} - "ppx_let" {= "v0.11.0"} - "ppx_optcomp" {= "v0.11.0"} - "ppx_optional" {= "v0.11.0"} - "ppx_pipebang" {= "v0.11.0"} - "ppx_sexp_conv" {= "v0.11.2"} - "ppx_sexp_message" {= "v0.11.0"} - "ppx_sexp_value" {= "v0.11.0"} + "parsexp" {= "v0.12.0"} + "ppx_assert" {= "v0.12.0"} + "ppx_base" {= "v0.12.0"} + "ppx_bench" {= "v0.12.0"} + "ppx_bin_prot" {= "v0.12.1"} + "ppx_compare" {= "v0.12.0"} + "ppx_custom_printf" {= "v0.12.1"} + "ppx_derivers" {= "1.2.1"} + "ppx_deriving" {= "4.4"} + "ppx_enumerate" {= "v0.12.0"} + "ppx_expect" {= "v0.12.0"} + "ppx_fail" {= "v0.12.0"} + "ppx_fields_conv" {= "v0.12.0"} + "ppx_hash" {= "v0.12.0"} + "ppx_here" {= "v0.12.0"} + "ppx_inline_test" {= "v0.12.0"} + "ppx_jane" {= "v0.12.0"} + "ppx_js_style" {= "v0.12.0"} + "ppx_let" {= "v0.12.0"} + "ppx_module_timer" {= "v0.12.0"} + "ppx_optcomp" {= "v0.12.0"} + "ppx_optional" {= "v0.12.0"} + "ppx_pipebang" {= "v0.12.0"} + "ppx_sexp_conv" {= "v0.12.0"} + "ppx_sexp_message" {= "v0.12.0"} + "ppx_sexp_value" {= "v0.12.0"} + "ppx_stable" {= "v0.12.0"} "ppx_tools" {= "5.1+4.06.0"} - "ppx_typerep_conv" {= "v0.11.1"} - "ppx_variants_conv" {= "v0.11.1"} - "ppxlib" {= "0.3.1"} - "re" {= "1.8.0"} - "result" {= "1.3"} + "ppx_typerep_conv" {= "v0.12.0"} + "ppx_variants_conv" {= "v0.12.0"} + "ppxfind" {= "1.3"} + "ppxlib" {= "0.8.0"} + "re" {= "1.9.0"} + "result" {= "1.4"} "sawja" {= "1.5.6"} "seq" {= "base"} - "sexplib" {= "v0.11.0"} - "sexplib0" {= "v0.11.0"} - "spawn" {= "v0.12.0"} - "splittable_random" {= "v0.11.0"} + "sexplib" {= "v0.12.0"} + "sexplib0" {= "v0.12.0"} + "spawn" {= "v0.13.0"} + "splittable_random" {= "v0.12.0"} "sqlite3" {= "4.4.1"} - "stdio" {= "v0.11.0"} + "stdio" {= "v0.12.0"} + "time_now" {= "v0.12.0"} "topkg" {= "1.0.0"} - "typerep" {= "v0.11.0"} - "variantslib" {= "v0.11.0"} + "typerep" {= "v0.12.0"} + "variantslib" {= "v0.12.0"} "xmlm" {= "1.3.0"} "yojson" {= "1.7.0"} "zarith" {= "1.7"}