summaryrefslogtreecommitdiff
blob: 9162d58dd48162714c25224ba453aa31cbf150db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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)