summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKathy Gray2015-05-18 13:18:24 +0100
committerKathy Gray2015-05-18 13:18:24 +0100
commit2e69c321a035d6ae7dfd995cb0efb3e210dc4512 (patch)
treed4acdc1690cd0eaf2ca71ba8831a071111ca02fe /src
parent5fef35e24e69a4cce5e113a90c9ea2fb02b318bc (diff)
Add equality check for addresses
And fix match failure problem (hopefully)
Diffstat (limited to 'src')
-rw-r--r--src/lem_interp/interp.lem2
-rw-r--r--src/lem_interp/interp_interface.lem8
2 files changed, 10 insertions, 0 deletions
diff --git a/src/lem_interp/interp.lem b/src/lem_interp/interp.lem
index 6396f51e..1a97f5db 100644
--- a/src/lem_interp/interp.lem
+++ b/src/lem_interp/interp.lem
@@ -463,6 +463,8 @@ let access_vector v n =
retaint v (match (detaint v) with
| V_unknown -> V_unknown
| V_lit (L_aux L_undef _) -> v
+ | V_lit (L_aux L_zero _) -> v
+ | V_lit (L_aux L_one _ ) -> v
| V_vector m dir vs ->
list_nth vs (if is_inc(dir) then (n - m) else (m - n))
| V_vector_sparse _ _ _ vs d ->
diff --git a/src/lem_interp/interp_interface.lem b/src/lem_interp/interp_interface.lem
index baa20ada..e0c656eb 100644
--- a/src/lem_interp/interp_interface.lem
+++ b/src/lem_interp/interp_interface.lem
@@ -135,6 +135,14 @@ instance (Ord address)
let (>=) a1 a2 = (addressCompare a1 a2) <> LT
end
+let addressEqual a1 a2 = (addressCompare a1 a2) = EQ
+
+instance (Eq address)
+ let (=) = addressEqual
+ let (<>) x y = not (addressEqual x y)
+end
+
+
instance (Ord register_value)
let compare = defaultCompare
let (<) = defaultLess