File: 0001-Add-OCaml-5.4-support.patch

package info (click to toggle)
ocaml-stdcompat 21.1-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 7,648 kB
  • sloc: ml: 34,677; sh: 830; makefile: 239
file content (100 lines) | stat: -rw-r--r-- 3,114 bytes parent folder | download
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
From: Stephane Glondu <glondu@debian.org>
Date: Thu, 18 Dec 2025 08:44:57 +0100
Subject: Add OCaml 5.4 support

Origin: https://github.com/ocamllibs/stdcompat/pull/70
---
 stdcompat__array.ml.in          | 19 +++++++++++++++++++
 stdcompat__arrayLabels_s.mli.in |  4 ++++
 stdcompat__array_s.mli.in       |  6 ++++++
 tools/compiler_version.ml       |  2 ++
 tools/compiler_version.mli      |  1 +
 5 files changed, 32 insertions(+)

diff --git a/stdcompat__array.ml.in b/stdcompat__array.ml.in
index 8bb2998..7b88e49 100644
--- a/stdcompat__array.ml.in
+++ b/stdcompat__array.ml.in
@@ -229,3 +229,22 @@ let rec find_mapi_from index f array =
 let find_mapi f array =
   find_mapi_from 0 f array
 @END_BEFORE_5_1_0@
+
+@BEGIN_BEFORE_5_4_0@
+(* copied from OCaml 5.4 stdlib/array.ml *)
+let equal eq a b =
+  if length a <> length b then false else
+  let i = ref 0 in
+  let len = length a in
+  while !i < len && eq (unsafe_get a !i) (unsafe_get b !i) do incr i done;
+  !i = len
+
+let compare cmp a b =
+  let len_a = length a and len_b = length b in
+  let diff = len_a - len_b in
+  if diff <> 0 then (if diff < 0 then -1 else 1) else
+  let i = ref 0 and c = ref 0 in
+  while !i < len_a && !c = 0
+  do c := cmp (unsafe_get a !i) (unsafe_get b !i); incr i done;
+  !c
+@END_BEFORE_5_4_0@
diff --git a/stdcompat__arrayLabels_s.mli.in b/stdcompat__arrayLabels_s.mli.in
index c09705b..bf1ba30 100644
--- a/stdcompat__arrayLabels_s.mli.in
+++ b/stdcompat__arrayLabels_s.mli.in
@@ -267,4 +267,8 @@ external unsafe_get : 'a array -> int -> 'a = "%array_unsafe_get"
 external unsafe_set : 'a array -> int -> 'a -> unit = "%array_unsafe_set"
 (** Alias for {!ArrayLabels.unsafe_set} *)
 
+(* OCaml 5.4 *)
+val equal : eq:('a -> 'a -> bool) -> 'a array -> 'a array -> bool
+val compare : cmp:('a -> 'a -> int) -> 'a array -> 'a array -> int
+
 end
diff --git a/stdcompat__array_s.mli.in b/stdcompat__array_s.mli.in
index 837ac58..97b20ff 100644
--- a/stdcompat__array_s.mli.in
+++ b/stdcompat__array_s.mli.in
@@ -258,4 +258,10 @@ external unsafe_get : 'a array -> int -> 'a = "%array_unsafe_get"
 external unsafe_set : 'a array -> int -> 'a -> unit = "%array_unsafe_set"
 (** Alias for {!Array.unsafe_set} *)
 
+(* OCaml 5.4 *)
+
+val equal : ('a -> 'a -> bool) -> 'a array -> 'a array -> bool
+val compare : ('a -> 'a -> int) -> 'a array -> 'a array -> int
+
 end
+
diff --git a/tools/compiler_version.ml b/tools/compiler_version.ml
index f675a20..856f9d1 100644
--- a/tools/compiler_version.ml
+++ b/tools/compiler_version.ml
@@ -87,6 +87,7 @@ let v5_1_1 = mk 5 1 1
 let v5_2_0 = mk 5 2 0
 let v5_2_1 = mk 5 2 1
 let v5_3_0 = mk 5 3 0
+let v5_4_0 = mk 5 4 0
 
 let known_versions =
 [
@@ -133,6 +134,7 @@ let known_versions =
   v5_2_0;
   v5_2_1;
   v5_3_0;
+  v5_4_0;
 ]
 
 let is_known v = List.mem v known_versions
diff --git a/tools/compiler_version.mli b/tools/compiler_version.mli
index c3ab3d6..ed05e36 100644
--- a/tools/compiler_version.mli
+++ b/tools/compiler_version.mli
@@ -51,6 +51,7 @@ val v5_1_1 : t
 val v5_2_0 : t
 val v5_2_1 : t
 val v5_3_0 : t
+val v5_4_0 : t
 
 val known_versions : t list