summaryrefslogtreecommitdiff
path: root/src/lem_interp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lem_interp')
-rw-r--r--src/lem_interp/interp.lem4
-rw-r--r--src/lem_interp/interp_inter_imp.lem2
2 files changed, 5 insertions, 1 deletions
diff --git a/src/lem_interp/interp.lem b/src/lem_interp/interp.lem
index 70a695af..9dc83afb 100644
--- a/src/lem_interp/interp.lem
+++ b/src/lem_interp/interp.lem
@@ -378,7 +378,9 @@ val slice_sparse_list : (integer -> integer -> bool) -> (integer -> integer) ->
list (integer * value) -> integer -> integer -> ((list (integer * value)) * bool)
let rec slice_sparse_list compare update_n vals n1 n2 =
let sl = slice_sparse_list compare update_n in
- if n1 = n2
+ if (n1 = n2) && (vals = [])
+ then ([],true)
+ else if (n1=n2)
then ([],false)
else match vals with
| [] -> ([],true)
diff --git a/src/lem_interp/interp_inter_imp.lem b/src/lem_interp/interp_inter_imp.lem
index cf952953..4aacad5f 100644
--- a/src/lem_interp/interp_inter_imp.lem
+++ b/src/lem_interp/interp_inter_imp.lem
@@ -81,6 +81,8 @@ let rec extern_value mode for_mem optional_start v = match v with
if for_mem
then (Bytevector (to_bytes (from_bits bits)), Nothing)
else (Bitvector (from_bits bits) inc fst, Nothing)
+ | Interp.V_vector_sparse fst stop inc bits default ->
+ extern_value mode for_mem optional_start (Interp_lib.fill_in_sparse v)
| Interp.V_lit (L_aux L_zero _) ->
if for_mem
then (Bytevector [0],Nothing)