summaryrefslogtreecommitdiffstats
path: root/lib.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2020-05-25 06:56:13 -0700
committerKaz Kylheku <kaz@kylheku.com>2020-05-25 06:56:13 -0700
commit989f2de823ed6f8edd14540665e9ff1041ae79cc (patch)
treeaf6f609e26f852f4bb091c7c4b7e43c30172e569 /lib.c
parent27f5d98142eeb3bb75430521f4d484cbffad3254 (diff)
downloadtxr-989f2de823ed6f8edd14540665e9ff1041ae79cc.tar.gz
txr-989f2de823ed6f8edd14540665e9ff1041ae79cc.tar.bz2
txr-989f2de823ed6f8edd14540665e9ff1041ae79cc.zip
update: convert to seq_info.
* lib.c (update): Function converted to seq_info classification instead of switching on type.
Diffstat (limited to 'lib.c')
-rw-r--r--lib.c25
1 files changed, 11 insertions, 14 deletions
diff --git a/lib.c b/lib.c
index 36ea76ba..1aae603a 100644
--- a/lib.c
+++ b/lib.c
@@ -10745,11 +10745,13 @@ val butlast(val seq, val idx)
val update(val seq, val fun)
{
- switch (type(seq)) {
- case NIL:
- break;
- case CONS:
- case LCONS:
+ val self = lit("update");
+ seq_info_t si = seq_info(seq);
+
+ switch (si.kind) {
+ case SEQ_NIL:
+ return nil;
+ case SEQ_LISTLIKE:
{
val iter = seq;
@@ -10759,10 +10761,7 @@ val update(val seq, val fun)
}
}
break;
- case LIT:
- case STR:
- case LSTR:
- case VEC:
+ case SEQ_VECLIKE:
{
val len = length(seq);
val i;
@@ -10770,12 +10769,10 @@ val update(val seq, val fun)
refset(seq, i, funcall1(fun, ref(seq, i)));
}
break;
- case COBJ:
- if (hashp(seq))
- return hash_update(seq, fun);
- /* fallthrough */
+ case SEQ_HASHLIKE:
+ return hash_update(seq, fun);
default:
- type_mismatch(lit("update: ~s is not a sequence"), seq, nao);
+ type_mismatch(lit("~a: ~s is not a sequence"), self, seq, nao);
}
return seq;