mes.c: add logior.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sun, 24 Jul 2016 15:21:30 +0000 (17:21 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sun, 24 Jul 2016 15:21:30 +0000 (17:21 +0200)
mes.c
test.mes

diff --git a/mes.c b/mes.c
index 54faf6dc00fb170f0669aaf81101bfb5e8423637..bdce1d26edf2851c42773b31121f8624097bbd6d 100644 (file)
--- a/mes.c
+++ b/mes.c
@@ -1189,6 +1189,19 @@ multiply (scm *x/*...*/)
   return make_number (n);
 }
 
+scm *
+logior (scm *x/*...*/)
+{
+  int n = 0;
+  while (x != &scm_nil)
+    {
+      assert (x->car->type == NUMBER);
+      n |= x->car->value;
+      x = cdr (x);
+    }
+  return make_number (n);
+}
+
 scm *add_environment (scm *a, char *name, scm *x);
 
 scm *
index ea410a76419ba8083070fc371893ce23ef07f60e..cc614c37f8c93f3c843f8fdb068de917d51c8196 100644 (file)
--- a/test.mes
+++ b/test.mes
 (pass-if "remainder" (seq? (remainder 11 3) 2))
 (pass-if "modulo" (seq? (modulo 11 3) 2))
 (pass-if "expt" (seq? (expt 2 3) 8))
+(pass-if "logior" (seq? (logior 0 1 2 4) 7))
 
 (pass-if "=" (seq? 3 '3))
 (pass-if "= 2" (not (= 3 '4)))