From 19386b2b3e595e4b5bc95dfd06fb9d32d786143e Mon Sep 17 00:00:00 2001 From: Brian Campbell Date: Thu, 7 Dec 2017 13:31:46 +0000 Subject: Support monomorphisation with set constrained integers Also, to support this, constant propagation for integer multiply, fix substitution of concrete values for nvars, size parameters in single argument functions, fix kind for itself, add eq_atom to prelude --- lib/prelude.sail | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/prelude.sail b/lib/prelude.sail index 92bfb180..a7f6fb2f 100644 --- a/lib/prelude.sail +++ b/lib/prelude.sail @@ -266,6 +266,8 @@ overload (deinfix |) [or_bool; bitwise_or] val extern forall Num 'n, Num 'm, Order 'ord. (vector<'n,'m,'ord,bit>, vector<'n,'m,'ord,bit>) -> bool effect pure eq_vec +val extern forall Num 'n, Num 'm. ([:'n:], [:'m:]) -> bool effect pure eq_atom = "eq" + val extern forall Type 'a. ('a, 'a) -> bool effect pure eq val extern forall Num 'n, Num 'm, Order 'ord. (vector<'n,'m,'ord,bit>, vector<'n,'m,'ord,bit>) -> bool effect pure neq_vec @@ -274,7 +276,7 @@ val extern forall Type 'a. ('a, 'a) -> bool effect pure neq (*function forall Num 'n, Num 'm, Order 'ord. bool neq_vec (v1, v2) = bool_not(eq_vec(v1, v2))*) -overload (deinfix ==) [eq_vec; eq] +overload (deinfix ==) [eq_vec; eq_atom; eq] overload (deinfix !=) [neq_vec; neq] val extern forall Num 'n, Num 'm, Order 'ord. (vector<'n,'m,'ord,bit>, vector<'n,'m,'ord,bit>) -> bool effect pure gteq_vec -- cgit v1.2.3