diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2020-05-25 06:56:13 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2020-05-25 06:56:13 -0700 |
commit | 3d9969eb00f3408c4522b8a6715f1d696611d1a0 (patch) | |
tree | af6f609e26f852f4bb091c7c4b7e43c30172e569 | |
parent | 0c253bf8a63295027405c0ac420b11afb3df1e65 (diff) | |
download | txr-3d9969eb00f3408c4522b8a6715f1d696611d1a0.tar.gz txr-3d9969eb00f3408c4522b8a6715f1d696611d1a0.tar.bz2 txr-3d9969eb00f3408c4522b8a6715f1d696611d1a0.zip |
update: convert to seq_info.
* lib.c (update): Function converted to seq_info
classification instead of switching on type.
-rw-r--r-- | lib.c | 25 |
1 files changed, 11 insertions, 14 deletions
@@ -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; |