aboutsummaryrefslogtreecommitdiff
path: root/src/interp.c
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-06-21 00:35:00 +0800
committerMistivia <i@mistivia.com>2025-06-21 00:35:00 +0800
commit0afe446fa6e893448da949b1b6882c87b3b2701c (patch)
treed1c73fb9d7e086112d181ab63908ec88146365ed /src/interp.c
parentbf0eb7e84c1f10e30fe82ec5f9d4c544a5b82fd2 (diff)
length macro; utf-8 symbol
Diffstat (limited to 'src/interp.c')
-rw-r--r--src/interp.c13
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) {