summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Norton2017-06-22 15:53:30 +0100
committerRobert Norton2017-06-22 15:53:30 +0100
commit60cf08670218f114539118d9e189509bb5f18695 (patch)
tree356913cb36b899727b488588e027b1065c2f9f91
parentccbd64bf8f4223e1934d9f6d73e172c986e5563d (diff)
add a 'print' built-in function handy for writing sail tests.
-rw-r--r--src/gen_lib/sail_values.ml2
-rw-r--r--src/lem_interp/interp_lib.lem6
-rw-r--r--src/type_internal.ml1
3 files changed, 9 insertions, 0 deletions
diff --git a/src/gen_lib/sail_values.ml b/src/gen_lib/sail_values.ml
index e2ddd3e9..cc1979a1 100644
--- a/src/gen_lib/sail_values.ml
+++ b/src/gen_lib/sail_values.ml
@@ -24,6 +24,8 @@ type value =
exception Sail_exit
exception Sail_return
+let _print s = print_string s
+
let string_of_bit = function
| Vone -> "1"
| Vzero -> "0"
diff --git a/src/lem_interp/interp_lib.lem b/src/lem_interp/interp_lib.lem
index 36a31f3f..fe87c9e1 100644
--- a/src/lem_interp/interp_lib.lem
+++ b/src/lem_interp/interp_lib.lem
@@ -54,6 +54,11 @@ open import Bool
type signed = Unsigned | Signed
+val debug_print : string -> unit
+declare ocaml target_rep function debug_print s = `Printf.eprintf` "%s" s
+
+let print s = let _ = debug_print (string_of_value s) in V_lit(L_aux L_unit Unknown)
+
let hardware_mod (a: integer) (b:integer) : integer =
if a < 0 && b < 0
then (abs a) mod (abs b)
@@ -1012,6 +1017,7 @@ let library_functions direction = [
("quot_overflow_vec", arith_op_overflow_vec_no0 hardware_quot "quot" Unsigned 1);
("quot_vec_signed", arith_op_vec_no0 hardware_quot "quot" Signed 1);
("quot_overflow_vec_signed", arith_op_overflow_vec_no0 hardware_quot "quot" Signed 1);
+ ("print", print);
("power", arith_op power);
("eq", eq);
("eq_vec", eq_vec);
diff --git a/src/type_internal.ml b/src/type_internal.ml
index 2932cf33..30e86f8a 100644
--- a/src/type_internal.ml
+++ b/src/type_internal.ml
@@ -2769,6 +2769,7 @@ let initial_typ_env_list : (string * ((string * tannot) list)) list =
(External None),[],pure_e,pure_e,nob));
("to_vec_dec",Base(([("a",{k=K_Typ})],{t=Tfn(nat_typ,{t=Tvar "a"},IP_none,pure_e)}),
(External None),[],pure_e,pure_e,nob));
+ ("print",Base(([],(mk_pure_fun string_t unit_t)),(External None),[],pure_e,pure_e,nob)); (* XXX not actually pure... *)
];