diff options
| author | Mistivia <i@mistivia.com> | 2025-06-21 00:35:00 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2025-06-21 00:35:00 +0800 |
| commit | 0afe446fa6e893448da949b1b6882c87b3b2701c (patch) | |
| tree | d1c73fb9d7e086112d181ab63908ec88146365ed /src/interp.c | |
| parent | bf0eb7e84c1f10e30fe82ec5f9d4c544a5b82fd2 (diff) | |
length macro; utf-8 symbol
Diffstat (limited to 'src/interp.c')
| -rw-r--r-- | src/interp.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/interp.c b/src/interp.c index 8aa4329..6f7871c 100644 --- a/src/interp.c +++ b/src/interp.c @@ -449,11 +449,16 @@ end: int lisp_length(Interp *interp, SExpRef lst) { int cnt = 0; - while (REF(lst)->type == kPairSExp) { - cnt++; - lst = CDR(lst); + if (VALTYPE(lst) == kPairSExp) { + while (REF(lst)->type == kPairSExp) { + cnt++; + lst = CDR(lst); + } + return cnt; + } else if (VALTYPE(lst) == kStringSExp) { + return strlen(REF(lst)->str); } - return cnt; + return 1; } static SExpRef build_function_env(Interp *interp, SExpRef func, SExpRef args) { |
