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 | 989f2de823ed6f8edd14540665e9ff1041ae79cc (patch) | |
tree | af6f609e26f852f4bb091c7c4b7e43c30172e569 /lib.c | |
parent | 27f5d98142eeb3bb75430521f4d484cbffad3254 (diff) | |
download | txr-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.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; |