summaryrefslogtreecommitdiff
path: root/src/gen_lib/sail_values.lem
diff options
context:
space:
mode:
authorBrian Campbell2017-10-23 16:01:38 +0100
committerBrian Campbell2017-10-23 16:01:38 +0100
commitfd21c0ca241418775d905184a6d619ddb11cafa3 (patch)
tree8ac787347b4f7942424d0d1db2722c9b493c5422 /src/gen_lib/sail_values.lem
parentf96323c57a1a1c1d6f11f2c85c9bb88c4de92ee8 (diff)
parent74b6c74b7407f7141796cb109c750f86659d1d2d (diff)
Merge branch 'experiments' into mono-experiments
Diffstat (limited to 'src/gen_lib/sail_values.lem')
-rw-r--r--src/gen_lib/sail_values.lem9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/gen_lib/sail_values.lem b/src/gen_lib/sail_values.lem
index 906b35a8..45b73ab5 100644
--- a/src/gen_lib/sail_values.lem
+++ b/src/gen_lib/sail_values.lem
@@ -167,6 +167,7 @@ let get_dir (Vector _ _ ord) = ord
let get_start (Vector _ s _) = s
let get_elems (Vector elems _ _) = elems
let length (Vector bs _ _) = integerFromNat (length bs)
+let vector_length = length
instance forall 'a. Show 'a => (Show (vector 'a))
let show = showVector
@@ -565,17 +566,17 @@ let internal_mem_value direction bytes =
val foreach_inc : forall 'vars. (integer * integer * integer) -> 'vars ->
(integer -> 'vars -> 'vars) -> 'vars
let rec foreach_inc (i,stop,by) vars body =
- if i <= stop
+ if (by > 0 && i <= stop) || (by < 0 && stop <= i)
then let vars = body i vars in
foreach_inc (i + by,stop,by) vars body
else vars
val foreach_dec : forall 'vars. (integer * integer * integer) -> 'vars ->
(integer -> 'vars -> 'vars) -> 'vars
-let rec foreach_dec (i,stop,by) vars body =
- if i >= stop
+let rec foreach_dec (stop,i,by) vars body =
+ if (by > 0 && i >= stop) || (by < 0 && stop >= i)
then let vars = body i vars in
- foreach_dec (i - by,stop,by) vars body
+ foreach_dec (stop,i - by,by) vars body
else vars
let assert' b msg_opt =