git: dd7c628b2137 - main - devel/cil: prepare for OCaml 4.06+ (strings are immutable by default)

From: Alexey Dokuchaev <danfe_at_FreeBSD.org>
Date: Thu, 07 Apr 2022 09:27:49 UTC
The branch main has been updated by danfe:

URL: https://cgit.FreeBSD.org/ports/commit/?id=dd7c628b2137da8f908fc858752c7e4622b6bbbf

commit dd7c628b2137da8f908fc858752c7e4622b6bbbf
Author:     Alexey Dokuchaev <danfe@FreeBSD.org>
AuthorDate: 2022-04-07 09:26:36 +0000
Commit:     Alexey Dokuchaev <danfe@FreeBSD.org>
CommitDate: 2022-04-07 09:26:36 +0000

    devel/cil: prepare for OCaml 4.06+ (strings are immutable by default)
---
 devel/cil/files/patch-ocamlutil_errormsg.ml | 25 +++++++++++++++++
 devel/cil/files/patch-ocamlutil_pretty.ml   | 43 +++++++++++++++++++++++++++++
 devel/cil/files/patch-src_cil.ml            | 23 +++++++++++++++
 devel/cil/files/patch-src_formatlex.mll     | 17 ++++++++++++
 4 files changed, 108 insertions(+)

diff --git a/devel/cil/files/patch-ocamlutil_errormsg.ml b/devel/cil/files/patch-ocamlutil_errormsg.ml
new file mode 100644
index 000000000000..8faa3e27dd39
--- /dev/null
+++ b/devel/cil/files/patch-ocamlutil_errormsg.ml
@@ -0,0 +1,25 @@
+--- ocamlutil/errormsg.ml.orig	2013-07-24 15:07:11 UTC
++++ ocamlutil/errormsg.ml
+@@ -211,16 +211,17 @@ let cleanFileName str = 
+     if str <> "" && String.get str 0 = '"' (* '"' ( *) 
+     then rem_quotes str else str in
+   let l = String.length str1 in
++  let str1 = Bytes.of_string str1 in
+   let rec loop (copyto: int) (i: int) = 
+     if i >= l then 
+-      String.sub str1 0 copyto
++      Bytes.to_string (Bytes.sub str1 0 copyto)
+      else 
+-       let c = String.get str1 i in
++       let c = Bytes.get str1 i in
+        if c <> '\\' then begin
+-          String.set str1 copyto c; loop (copyto + 1) (i + 1)
++          Bytes.set str1 copyto c; loop (copyto + 1) (i + 1)
+        end else begin
+-          String.set str1 copyto '/';
+-          if i < l - 2 && String.get str1 (i + 1) = '\\' then
++          Bytes.set str1 copyto '/';
++          if i < l - 2 && Bytes.get str1 (i + 1) = '\\' then
+               loop (copyto + 1) (i + 2)
+           else 
+               loop (copyto + 1) (i + 1)
diff --git a/devel/cil/files/patch-ocamlutil_pretty.ml b/devel/cil/files/patch-ocamlutil_pretty.ml
new file mode 100644
index 000000000000..96aa594f2abd
--- /dev/null
+++ b/devel/cil/files/patch-ocamlutil_pretty.ml
@@ -0,0 +1,43 @@
+--- ocamlutil/pretty.ml.orig	2013-07-24 15:07:11 UTC
++++ ocamlutil/pretty.ml
+@@ -725,31 +725,31 @@ let gprintf (finish : doc -> 'b)  
+               invalid_arg ("dprintf: unimplemented format " 
+ 			   ^ (String.sub format i (j-i+1)));
+ 	    let j' = succ j in (* eat the d,i,x etc. *)
+-	    let format_spec = "% " in
+-	    String.set format_spec 1 (fget j'); (* format_spec = "%x", etc. *)
++	    let format_spec = Bytes.of_string "% " in
++	    Bytes.set format_spec 1 (fget j'); (* format_spec = "%x", etc. *)
+             Obj.magic(fun n ->
+               collect (dctext1 acc
+-                         (Int64.format format_spec n))
++                         (Int64.format (Bytes.to_string format_spec) n))
+                 (succ j'))
+ 	| 'l' ->
+ 	    if j != i + 1 then invalid_arg ("dprintf: unimplemented format " 
+ 					    ^ (String.sub format i (j-i+1)));
+ 	    let j' = succ j in (* eat the d,i,x etc. *)
+-	    let format_spec = "% " in
+-	    String.set format_spec 1 (fget j'); (* format_spec = "%x", etc. *)
++	    let format_spec = Bytes.of_string "% " in
++	    Bytes.set format_spec 1 (fget j'); (* format_spec = "%x", etc. *)
+             Obj.magic(fun n ->
+               collect (dctext1 acc
+-                         (Int32.format format_spec n))
++                         (Int32.format (Bytes.to_string format_spec) n))
+                 (succ j'))
+ 	| 'n' ->
+ 	    if j != i + 1 then invalid_arg ("dprintf: unimplemented format " 
+ 					    ^ (String.sub format i (j-i+1)));
+ 	    let j' = succ j in (* eat the d,i,x etc. *)
+-	    let format_spec = "% " in
+-	    String.set format_spec 1 (fget j'); (* format_spec = "%x", etc. *)
++	    let format_spec = Bytes.of_string "% " in
++	    Bytes.set format_spec 1 (fget j'); (* format_spec = "%x", etc. *)
+             Obj.magic(fun n ->
+               collect (dctext1 acc
+-                         (Nativeint.format format_spec n))
++                         (Nativeint.format (Bytes.to_string format_spec) n))
+                 (succ j'))
+         | 'f' | 'e' | 'E' | 'g' | 'G' ->
+             Obj.magic(fun f ->
diff --git a/devel/cil/files/patch-src_cil.ml b/devel/cil/files/patch-src_cil.ml
new file mode 100644
index 000000000000..f2be5cf6eda5
--- /dev/null
+++ b/devel/cil/files/patch-src_cil.ml
@@ -0,0 +1,23 @@
+--- src/cil.ml.orig	2013-07-24 15:07:11 UTC
++++ src/cil.ml
+@@ -5033,7 +5033,7 @@ let loadBinaryFile (filename : string) : file = 
+ (* Take the name of a file and make a valid symbol name out of it. There are 
+  * a few characters that are not valid in symbols *)
+ let makeValidSymbolName (s: string) = 
+-  let s = String.copy s in (* So that we can update in place *)
++  let b = Bytes.copy (Bytes.of_string s) in (* So that we can update in place *)
+   let l = String.length s in
+   for i = 0 to l - 1 do
+     let c = String.get s i in
+@@ -5043,9 +5043,9 @@ let makeValidSymbolName (s: string) = 
+       | _ -> false
+     in
+     if isinvalid then 
+-      String.set s i '_';
++      Bytes.set b i '_';
+   done;
+-  s
++  Bytes.to_string b
+ 
+ let rec addOffset (toadd: offset) (off: offset) : offset =
+   match off with
diff --git a/devel/cil/files/patch-src_formatlex.mll b/devel/cil/files/patch-src_formatlex.mll
new file mode 100644
index 000000000000..c1045cac852d
--- /dev/null
+++ b/devel/cil/files/patch-src_formatlex.mll
@@ -0,0 +1,17 @@
+--- src/formatlex.mll.orig	2013-07-24 15:07:11 UTC
++++ src/formatlex.mll
+@@ -145,11 +145,11 @@ let scan_oct_escape str =
+  * We convert L"Hi" to "H\000i\000" *)
+ let wbtowc wstr =
+   let len = String.length wstr in 
+-  let dest = String.make (len * 2) '\000' in 
++  let dest = Bytes.make (len * 2) '\000' in 
+   for i = 0 to len-1 do 
+-    dest.[i*2] <- wstr.[i] ;
++    Bytes.set dest (i*2) (String.get wstr i)
+   done ;
+-  dest
++  Bytes.to_string dest
+ 
+ (* This function converst the "Hi" in L"Hi" to { L'H', L'i', L'\0' } *)
+ let wstr_to_warray wstr =