diff options
| author | Kathy Gray | 2014-11-19 00:53:26 +0000 |
|---|---|---|
| committer | Kathy Gray | 2014-11-19 00:53:26 +0000 |
| commit | 523aae808235dcfdea7358b01fc4eccab70c9f4d (patch) | |
| tree | 4eb6883e82ce9e45879034957cfbef1e7f64d15d /src/lem_interp | |
| parent | 01616d17d447f87dcc9f68c7d8d5a12d0ed0b169 (diff) | |
Correct off-by-one bug in type checking vector slices
Convert sparse vectors into full-fledged vectors more frequently and on export to memory system
Diffstat (limited to 'src/lem_interp')
| -rw-r--r-- | src/lem_interp/interp.lem | 4 | ||||
| -rw-r--r-- | src/lem_interp/interp_inter_imp.lem | 2 |
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) |
