summaryrefslogtreecommitdiff
path: root/src/scheme/ao_scheme_builtin.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/scheme/ao_scheme_builtin.c')
-rw-r--r--src/scheme/ao_scheme_builtin.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/scheme/ao_scheme_builtin.c b/src/scheme/ao_scheme_builtin.c
index 81fd9010..e2532c98 100644
--- a/src/scheme/ao_scheme_builtin.c
+++ b/src/scheme/ao_scheme_builtin.c
@@ -393,6 +393,11 @@ ao_scheme_math(struct ao_scheme_cons *orig_cons, enum ao_scheme_builtin_id op)
case builtin_quotient:
if (c == 0)
return ao_scheme_error(AO_SCHEME_DIVIDE_BY_ZERO, "quotient by zero");
+ r = r / c;
+ break;
+ case builtin_floor_quotient:
+ if (c == 0)
+ return ao_scheme_error(AO_SCHEME_DIVIDE_BY_ZERO, "floor-quotient by zero");
if (r % c != 0 && (c < 0) != (r < 0))
r = r / c - 1;
else
@@ -436,6 +441,7 @@ ao_scheme_math(struct ao_scheme_cons *orig_cons, enum ao_scheme_builtin_id op)
r /= c;
break;
case builtin_quotient:
+ case builtin_floor_quotient:
case builtin_remainder:
case builtin_modulo:
return ao_scheme_error(AO_SCHEME_INVALID, "non-integer value in integer divide");
@@ -492,6 +498,12 @@ ao_scheme_do_quotient(struct ao_scheme_cons *cons)
}
ao_poly
+ao_scheme_do_floor_quotient(struct ao_scheme_cons *cons)
+{
+ return ao_scheme_math(cons, builtin_floor_quotient);
+}
+
+ao_poly
ao_scheme_do_modulo(struct ao_scheme_cons *cons)
{
return ao_scheme_math(cons, builtin_modulo);