summaryrefslogtreecommitdiffstats
path: root/arith.c
diff options
context:
space:
mode:
Diffstat (limited to 'arith.c')
-rw-r--r--arith.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/arith.c b/arith.c
index 23cf66a8..00621a5d 100644
--- a/arith.c
+++ b/arith.c
@@ -938,6 +938,19 @@ divzero:
uw_throw(numeric_error_s, lit("mod: division by zero"));
}
+val wrap_star(val start, val end, val num)
+{
+ val modulus = minus(end, start);
+ val num_off = minus(num, start);
+ val num_mod = mod(num_off, modulus);
+ return plus(start, num_mod);
+}
+
+val wrap(val start, val end, val num)
+{
+ return wrap_star(start, succ(end), num);
+}
+
static val to_float(val func, val num)
{
switch (type(num)) {