From 814cfab336d6262e924f57ab8c8c25c1b2613448 Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Thu, 24 Oct 2019 19:01:43 +0200 Subject: [PATCH] core: assq: Prepare for M2-Planet. * src/mes.c (assq): Prepare for M2-Planet. --- src/mes.c | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/src/mes.c b/src/mes.c index b342e0bf..16606a60 100644 --- a/src/mes.c +++ b/src/mes.c @@ -248,26 +248,41 @@ assq (SCM x, SCM a) if (TYPE (a) != TPAIR) return cell_f; int t = TYPE (x); + if (t == TSYMBOL || t == TSPECIAL) - while (a != cell_nil && x != CAAR (a)) - a = CDR (a); + while (a != cell_nil) + { + if (x == CAAR (a)) + return CAR (a); + a = CDR (a); + } else if (t == TCHAR || t == TNUMBER) { long v = VALUE (x); - while (a != cell_nil && v != VALUE (CAAR (a))) - a = CDR (a); + while (a != cell_nil) + { + if (v == VALUE (CAAR (a))) + return CAR (a); + a = CDR (a); + } } else if (t == TKEYWORD) { - while (a != cell_nil && string_equal_p (x, CAAR (a)) == cell_f) - a = CDR (a); + while (a != cell_nil) + { + if (string_equal_p (x, CAAR (a)) == cell_t) + return CAR (a); + a = CDR (a); + } } else /* pointer equality, e.g. on strings. */ - while (a != cell_nil && x != CAAR (a)) - a = CDR (a); - if (a != cell_nil) - return CAR (a); + while (a != cell_nil) + { + if (x == CAAR (a)) + return CAR (a); + a = CDR (a); + } return cell_f; }