diff options
| author | Gabriel Kerneis | 2014-02-07 13:21:52 +0000 |
|---|---|---|
| committer | Gabriel Kerneis | 2014-02-07 13:21:52 +0000 |
| commit | dcbc80a3419a828da8cdb6250ecb52f52a72a28b (patch) | |
| tree | bc2b5d4ff036f77c5f53fa34ff37b2f607436e11 /src | |
| parent | 11354eafbc9d636455c7265f6f9f3e24ef8eb056 (diff) | |
Implement is_one
Diffstat (limited to 'src')
| -rw-r--r-- | src/lem_interp/interp_lib.lem | 3 | ||||
| -rw-r--r-- | src/test/power.sail | 2 |
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 |
