summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lem_interp/interp_lib.lem15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/lem_interp/interp_lib.lem b/src/lem_interp/interp_lib.lem
index 3cbef5c8..b8076538 100644
--- a/src/lem_interp/interp_lib.lem
+++ b/src/lem_interp/interp_lib.lem
@@ -209,10 +209,11 @@ let to_vec_inc (V_tuple[v1;v2]) =
let tv_help v1 v2 =
match (v1,v2) with
| (V_lit(L_aux (L_num len) _), (V_lit(L_aux (L_num n) ln))) ->
- let l = boolListFrombitSeq (natFromInteger len) (bitSeqFromInteger Nothing n) in
+ let l = if len < 0 then []
+ else boolListFrombitSeq (natFromInteger len) (bitSeqFromInteger Nothing n) in
V_vector 0 IInc (map bool_to_bit (reverse l))
| ((V_lit(L_aux (L_num n) ln)),V_unknown) ->
- V_vector 0 IInc (List.replicate (natFromInteger n) V_unknown)
+ V_vector 0 IInc (List.replicate (if n < 0 then 0 else (natFromInteger n)) V_unknown)
| ((V_lit(L_aux (L_num n) ln)),(V_lit (L_aux L_undef _))) ->
V_vector 0 IInc (List.replicate (natFromInteger n) v2)
| (_,V_unknown) -> V_unknown
@@ -225,15 +226,15 @@ let to_vec_dec (V_tuple([v1;v2])) =
let tv_fun v1 v2 =
match (v1,v2) with
| (V_lit(L_aux (L_num len) _), (V_lit(L_aux (L_num n) ln))) ->
- let len = natFromInteger len in
+ let len = if len < 0 then 0 else natFromInteger len in
let l = boolListFrombitSeq len (bitSeqFromInteger Nothing n) in
V_vector (len - 1) IDec (map bool_to_bit (reverse l))
| ((V_lit(L_aux (L_num n) ln)),V_unknown) ->
- let n = natFromInteger n in
- V_vector (n-1) IDec (List.replicate n V_unknown)
+ let n = if n < 0 then 0 else natFromInteger n in
+ V_vector (if n=0 then 0 else (n-1)) IDec (List.replicate n V_unknown)
| ((V_lit(L_aux (L_num n) ln)),(V_lit (L_aux L_undef _))) ->
- let n = natFromInteger n in
- V_vector (n-1) IDec (List.replicate n v2)
+ let n = if n < 0 then 0 else natFromInteger n in
+ V_vector (if n = 0 then 0 else (n-1)) IDec (List.replicate n v2)
| (_,V_unknown) -> V_unknown
| (V_unknown,_) -> V_unknown
| _ -> Assert_extra.failwith ("to_vec_dec parameters were " ^ (string_of_value (V_tuple[v1;v2])))