@@ -235,31 +235,32 @@ let check_ffi ?loc ffi : bool =
235235 end ;
236236 ! xrelative
237237
238- let bs_prefix = " BS:"
238+ (* let bs_prefix = "BS:"
239239let bs_prefix_length = String.length bs_prefix
240-
240+ *)
241241
242242(* * TODO: Make sure each version is not prefix of each other
243243 Solution:
244244 1. fixed length
245245 2. non-prefix approach
246246*)
247- let bs_external = bs_prefix
247+ (* let bs_external = bs_prefix *)
248248
249249
250- let bs_external_length = String. length bs_external
250+ (* let bs_external_length = String.length bs_external *)
251251
252252
253253let to_string (t : t ) =
254- bs_external ^ Marshal. to_string t []
255-
256- let is_bs_primitive s =
257- let s_len = String. length s in
258- s_len > = bs_prefix_length &&
259- String. unsafe_get s 0 = 'B' &&
260- String. unsafe_get s 1 = 'S' &&
261- String. unsafe_get s 2 = ':'
262-
254+ Marshal. to_string t []
255+
256+ (* \132\149\166\190
257+ 0x84 95 A6 BE Intext_magic_small intext.h
258+ https://github.com/ocaml/merlin/commit/b094c937c3a360eb61054f7652081b88e4f3612f
259+ *)
260+ let is_bs_primitive s =
261+ String. length s > = 20 (* Marshal.header_size*) &&
262+ String. unsafe_get s 0 = '\132' &&
263+ String. unsafe_get s 1 = '\149'
263264
264265let () = Oprint. map_primitive_name :=
265266#if BS_RELEASE_BUILD then
@@ -273,7 +274,7 @@ let () = Oprint.map_primitive_name :=
273274(* TODO: better error message when version mismatch *)
274275let from_string s : t =
275276 if is_bs_primitive s then
276- Marshal. from_string s bs_external_length
277+ Ext_marshal. from_string_uncheck s
277278 else Ffi_normal
278279
279280
0 commit comments