shithub: sl

Download patch

ref: c588f67dd266c25cca8634d03f259a38573a1c7e
parent: ae9998e6063d7ee3d2cdc95c45236f26515c0e7f
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Thu Apr 24 09:45:49 EDT 2025

subseq: fix to work on circular lists

--- a/boot/sl.boot
+++ b/boot/sl.boot
@@ -496,11 +496,11 @@
 JD040<22Q;3:04730r252;J704022Q:" #(unquote-splicing
   unquote-nsplicing unquote length>) splice-form? 7)
             str-join #fn("n20J5020:215022860<5242324861>20=524258661:" #("" #fn(buffer)
-                             #fn(for-each)
+                             #fn(for-each)
 (io->str)) str-join 8)
             str-lpad #fn("n3207182122051~52062:" #(#fn(str) str-rep #fn(str-length)) str-lpad 10)
             str-map #fn("n2205021151EI8887L23O0422860231885251524748851?8@\f/^14258661:" #(#fn(buffer)
--length) #fn(io-putrune) #fn(str-rune) 1+ #fn(io->str)) str-map 13)
+str-length) #fn(io-putrune) #fn(str-rune) 1+ #fn(io->str)) str-map 13)
 p #fn("n21r4L23b0701E5235021:1Kl238022061:1r2l2390220062:2200063:731513@02207401K~5262:742200521r2j262:" #(<=
   "" #fn(str) odd? str-rep) str-rep 10)
             str-rpad #fn("n32007182122051~5262:" #(#fn(str) str-rep #fn(str-length)) str-rpad 11)
--- a/src/system.sl
+++ b/src/system.sl
@@ -554,7 +554,7 @@
       (for start (1- end)
         (λ (i) (aset! av (- i start) (aref seq i))))
       av))
-  (cond ((list? seq) (subseq-l seq start))
+  (cond ((cons? seq) (subseq-l seq start))
         ((vec? seq) (subseq-av vec-alloc))
         ((arr? seq) (let {[atype (cadr (type-of seq))]}
                       (subseq-av (λ (n) (arr-alloc atype n 0)))))))
--- a/test/unittest.sl
+++ b/test/unittest.sl
@@ -468,6 +468,9 @@
 (assert (not (subseq NIL 0)))
 (assert (equal? (subseq (apply vec (iota 10)) 10) (vec)))
 (assert (equal? (subseq (vec) 0) (vec)))
+(def cl '(1 2 3))
+(set-cdr! (cddr cl) cl)
+(assert (equal? (subseq cl 1 8) '(2 3 1 2 3 1 2)))
 
 ;; map with different return types
 (assert (equal? (map 'vec + '(1 2 3) '(4 5 6) '(7 8 9)) (vec 12 15 18)))