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 Copyrights: (C) 2005-2016 Jane Street Group LLC 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)