summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGabriel Kerneis2014-02-07 13:21:52 +0000
committerGabriel Kerneis2014-02-07 13:21:52 +0000
commitdcbc80a3419a828da8cdb6250ecb52f52a72a28b (patch)
treebc2b5d4ff036f77c5f53fa34ff37b2f607436e11 /src
parent11354eafbc9d636455c7265f6f9f3e24ef8eb056 (diff)
Implement is_one
Diffstat (limited to 'src')
-rw-r--r--src/lem_interp/interp_lib.lem3
-rw-r--r--src/test/power.sail2
2 files changed, 5 insertions, 0 deletions
diff --git a/src/lem_interp/interp_lib.lem b/src/lem_interp/interp_lib.lem
index b20647fb..f6485666 100644
--- a/src/lem_interp/interp_lib.lem
+++ b/src/lem_interp/interp_lib.lem
@@ -7,6 +7,8 @@ open import List
let compose f g x = f (V_tuple [g x]) ;;
+let is_one (V_lit b) = V_lit (if b = L_one then L_true else L_false) ;;
+
let eq (V_tuple [x; y]) = V_lit (if x = y then L_true else L_false) ;;
let neg (V_tuple [V_lit arg]) = V_lit (match arg with
@@ -28,6 +30,7 @@ let function_map = [
("add_infix", add);
("=", eq);
(":", vec_concat);
+ ("is_one", is_one);
] ;;
let eval_external name v = (Maybe_extra.fromJust (List.lookup name function_map)) v ;;
diff --git a/src/test/power.sail b/src/test/power.sail
index dc07f97e..2b73e361 100644
--- a/src/test/power.sail
+++ b/src/test/power.sail
@@ -8,6 +8,8 @@ val extern bit -> bit effect pure (deinfix ~ ) = "bitwise-not"
val extern ( bit * bit ) -> bit effect pure (deinfix ^ ) = "bitwise-xor"
val extern ( bit * bit ) -> bit effect pure (deinfix & ) = "bitwise-and"
+val extern bit -> bool effect pure is_one = "is_one"
+
(* XXX sign extension *)
function forall Type 'a . 'a exts ( x ) = x