You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/dev-ml/sexplib/files/oc43.patch

57 lines
2.3 KiB

diff -uNr sexplib-113.33.00/_oasis sexplib-113.33.00+4.03/_oasis
--- sexplib-113.33.00/_oasis 2016-03-09 16:44:55.000000000 +0100
+++ sexplib-113.33.00+4.03/_oasis 2016-03-22 15:13:51.000000000 +0100
@@ -1,8 +1,8 @@
OASISFormat: 0.4
-OCamlVersion: >= 4.02.3
+OCamlVersion: >= 4.03.0
FindlibVersion: >= 1.3.2
Name: sexplib
-Version: 113.33.00
+Version: 113.33.00+4.03
Synopsis: Library for serializing OCaml values to and from S-expressions
Authors: Jane Street Group, LLC <opensource@janestreet.com>
Copyrights: (C) 2005-2016 Jane Street Group LLC <opensource@janestreet.com>
diff -uNr sexplib-113.33.00/src/conv.ml sexplib-113.33.00+4.03/src/conv.ml
--- sexplib-113.33.00/src/conv.ml 2016-03-09 16:44:55.000000000 +0100
+++ sexplib-113.33.00+4.03/src/conv.ml 2016-03-22 15:13:51.000000000 +0100
@@ -185,7 +185,7 @@
(* [Obj.extension_id] works on both the exception itself, and the extension slot of the
exception. *)
- let rec clean_up_handler (slot : Obj.t) =
+ let rec clean_up_handler (slot : extension_constructor) =
let id = Obj.extension_id slot in
let old_exn_id_map = !exn_id_map in
let new_exn_id_map = Exn_ids.remove id old_exn_id_map in
@@ -196,7 +196,7 @@
exn_id_map := new_exn_id_map
let add_auto ?(finalise = true) exn sexp_of_exn =
- let id = Obj.extension_id exn in
+ let id = Obj.extension_id (Obj.extension_constructor exn) in
let rec loop () =
let old_exn_id_map = !exn_id_map in
let new_exn_id_map = Exn_ids.add id sexp_of_exn old_exn_id_map in
@@ -205,13 +205,18 @@
loop ()
else begin
exn_id_map := new_exn_id_map;
- if finalise then Gc.finalise clean_up_handler (Obj.extension_slot exn)
+ if finalise then
+ try
+ Gc.finalise clean_up_handler (Obj.extension_constructor exn)
+ with Invalid_argument _ ->
+ (* Pre-allocated extension constructors cannot be finalised *)
+ ()
end
in
loop ()
let find_auto exn =
- let id = Obj.extension_id exn in
+ let id = Obj.extension_id (Obj.extension_constructor exn) in
match Exn_ids.find id !exn_id_map with
| exception Not_found -> None
| sexp_of_exn -> Some (sexp_of_exn exn)