summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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;