summaryrefslogtreecommitdiff
path: root/src/sail_lib.ml
diff options
context:
space:
mode:
authorJon French2018-10-16 16:25:39 +0100
committerJon French2018-10-16 17:03:30 +0100
commit315fccb1b063f5ffa131b5a761fa1b2d33fa130f (patch)
treeeed4db4a25e3c1c44d7394f4749ef1612c7af105 /src/sail_lib.ml
parent45ce9105ce90efeccb9d0a183390027cdb1536af (diff)
parent58c1292f2f5a54f069e00e4065c00936963db8cd (diff)
Merge branch 'sail2' into rmem_interpreter
Diffstat (limited to 'src/sail_lib.ml')
-rw-r--r--src/sail_lib.ml31
1 files changed, 8 insertions, 23 deletions
diff --git a/src/sail_lib.ml b/src/sail_lib.ml
index 28015945..a718e6d5 100644
--- a/src/sail_lib.ml
+++ b/src/sail_lib.ml
@@ -530,6 +530,13 @@ let string_startswith (str1, str2) = String.length str1 >= String.length str2 &&
let string_drop (str, n) = if (Big_int.less_equal (Big_int.of_int (String.length str)) n) then "" else let n = Big_int.to_int n in String.sub str n (String.length str - n)
+let string_take (str, n) =
+ let n = Big_int.to_int n in
+ if String.length str <= n then
+ str
+ else
+ String.sub str 0 n
+
let string_length str = Big_int.of_int (String.length str)
let string_append (s1, s2) = s1 ^ s2
@@ -704,28 +711,6 @@ let speculate_conditional_success () = true
(* Return nanoseconds since epoch. Truncates to ocaml int but will be OK for next 100 years or so... *)
let get_time_ns () = Big_int.of_int (int_of_float (1e9 *. Unix.gettimeofday ()))
-let rec n_leading_spaces s =
- match String.length s with
- | 0 -> 0
- | 1 -> begin match s with
- | " " -> 1
- | _ -> 0
- end
- | len -> begin match String.get s 0 with
- | ' ' -> 1 + (n_leading_spaces (String.sub s 1 (len - 1)))
- | _ -> 0
- end
-
-
-let opt_spc_matches_prefix s =
- ZSome ((), n_leading_spaces s |> Big_int.of_int)
-
-let spc_matches_prefix s =
- let n = n_leading_spaces s in
- match n with
- | 0 -> ZNone ()
- | n -> ZSome ((), Big_int.of_int n)
-
(* Python:
f = """let hex_bits_{0}_matches_prefix s =
match maybe_int_of_prefix s with
@@ -1124,7 +1109,7 @@ let cycle_count () = ()
(* TODO range, atom, register(?), int, nat, bool, real(!), list, string, itself(?) *)
let rand_zvector (g : 'generators) (size : int) (order : bool) (elem_gen : 'generators -> 'a) : 'a list =
- List.init size (fun _ -> elem_gen g)
+ Util.list_init size (fun _ -> elem_gen g)
let rand_zbit (g : 'generators) : bit =
if Random.bool() then B0 else B1