altos/lisp: Change lisp objects to use ao_poly everywhere. Add const
[fw/altos] / src / lisp / ao_lisp_poly.c
index 1855d945d6a920abbe35fabc0de74ddd17a5747d..c6ca0a975f0d1077a133a3de7b0087dc4dac53f0 100644 (file)
 
 #include "ao_lisp.h"
 
-enum math_op { math_plus, math_minus, math_times, math_divide, math_mod };
-
-ao_lisp_poly
-ao_lisp_math(struct ao_lisp_cons *cons, enum math_op op)
-{
-       ao_lisp_poly    ret = AO_LISP_NIL;
-
-       while (cons) {
-               ao_lisp_poly    car = cons->car;
-               uint8_t         rt = ao_lisp_poly_type(ret);
-               uint8_t         ct = ao_lisp_poly_type(car);
-
-               cons = cons->cdr;
-
-               if (rt == AO_LISP_NIL)
-                       ret = car;
-
-               else if (rt == AO_LISP_INT && ct == AO_LISP_INT) {
-                       int     r = ao_lisp_poly_int(ret);
-                       int     c = ao_lisp_poly_int(car);
-
-                       switch(op) {
-                       case math_plus:
-                               r += c;
-                               break;
-                       case math_minus:
-                               r -= c;
-                               break;
-                       case math_times:
-                               r *= c;
-                               break;
-                       case math_divide:
-                               if (c == 0)
-                                       return AO_LISP_NIL;
-                               r /= c;
-                               break;
-                       case math_mod:
-                               if (c == 0)
-                                       return AO_LISP_NIL;
-                               r %= c;
-                               break;
-                       }
-                       ret = ao_lisp_int_poly(r);
-               }
-
-               else if (rt == AO_LISP_STRING && ct == AO_LISP_STRING && op == math_plus)
-                       ret = ao_lisp_string_poly(ao_lisp_string_cat(ao_lisp_poly_string(ret),
-                                                                    ao_lisp_poly_string(car)));
-               else {
-                       /* XXX exception */
-                       return AO_LISP_NIL;
-               }
-       }
-       return ret;
-}
-
-ao_lisp_poly
-ao_lisp_plus(struct ao_lisp_cons *cons)
-{
-       return ao_lisp_math(cons, math_plus);
-}
-
-ao_lisp_poly
-ao_lisp_minus(struct ao_lisp_cons *cons)
-{
-       return ao_lisp_math(cons, math_minus);
-}
-
-ao_lisp_poly
-ao_lisp_times(struct ao_lisp_cons *cons)
-{
-       return ao_lisp_math(cons, math_times);
-}
-
-ao_lisp_poly
-ao_lisp_divide(struct ao_lisp_cons *cons)
-{
-       return ao_lisp_math(cons, math_divide);
-}
-
-ao_lisp_poly
-ao_lisp_mod(struct ao_lisp_cons *cons)
-{
-       return ao_lisp_math(cons, math_mod);
-}
+/*
 
 static const struct ao_lisp_builtin builtin_plus = {
        .type = AO_LISP_BUILTIN,
@@ -113,7 +29,6 @@ static const struct ao_lisp_atom atom_plus = {
        .name = "plus"
 };
 
-/*
 static const struct ao_lisp_builtin builtin_minus = {
        .type = AO_LISP_BUILTIN,
        .func = ao_lisp_minus
@@ -124,9 +39,9 @@ static const struct ao_lisp_builtin builtin_times = {
        .func = ao_lisp_times
 };
 
-*/
 
 const struct ao_lisp_atom const *ao_lisp_builtins[] = {
        &atom_plus,
        0
 };
+*/