summaryrefslogtreecommitdiff
path: root/src/value.ml
diff options
context:
space:
mode:
authorJon French2018-04-23 16:04:37 +0100
committerJon French2018-05-01 16:54:54 +0100
commit14510c80fa9d105ab61f0ecfb96ea89f7edf6587 (patch)
treeeadaa120679f854bed4681a432058581aad7a129 /src/value.ml
parenta9c5ebc1c1c0943f48c31831f95dd4d1d61b8dc3 (diff)
start of string pattern matching: currently only literals
Diffstat (limited to 'src/value.ml')
-rw-r--r--src/value.ml15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/value.ml b/src/value.ml
index 4b4f0865..4848721d 100644
--- a/src/value.ml
+++ b/src/value.ml
@@ -183,6 +183,18 @@ let value_eq_string = function
| [v1; v2] -> V_bool (Sail_lib.eq_string (coerce_string v1, coerce_string v2))
| _ -> failwith "value eq_string"
+let value_string_startswith = function
+ | [v1; v2] -> V_bool (Sail_lib.string_startswith (coerce_string v1, coerce_string v2))
+ | _ -> failwith "value string_startswith"
+
+let value_string_drop = function
+ | [v1; v2] -> V_string (Sail_lib.string_drop (coerce_string v1, coerce_int v2))
+ | _ -> failwith "value string_drop"
+
+let value_string_length = function
+ | [v] -> V_int (coerce_string v |> Sail_lib.string_length |> Big_int.of_int)
+ | _ -> failwith "value string_length"
+
let value_length = function
| [v] -> V_int (coerce_gv v |> List.length |> Big_int.of_int)
| _ -> failwith "value length"
@@ -417,6 +429,9 @@ let primops =
("eq_list", value_eq_list);
("eq_bool", value_eq_bool);
("eq_string", value_eq_string);
+ ("string_startswith", value_string_startswith);
+ ("string_drop", value_string_drop);
+ ("string_length", value_string_length);
("eq_anything", value_eq_anything);
("length", value_length);
("subrange", value_subrange);