master: replace: make sure LENGTH is inlined

stassats via Sbcl-commits <[email protected]> Tue, 12 May 2026 13:19:38 +0000
Newsgroups gmane.lisp.steel-bank.cvs
Message-ID <[email protected]>
The branch "master" has been updated in SBCL:
       via  c2b343bb56443c6f97eb050b687bce34a136bb57 (commit)
      from  e0efcd56dd6b02cd106849993e582938f723d49b (commit)

- Log -----------------------------------------------------------------
commit c2b343bb56443c6f97eb050b687bce34a136bb57
Author: Stas Boukarev <[email protected]>
Date:   Tue May 12 16:18:24 2026 +0300

    replace: make sure LENGTH is inlined
    
    At least when there are no :start/:end
---
 src/code/seq.lisp | 28 ++++++++++++++++------------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/src/code/seq.lisp b/src/code/seq.lisp
index dcf03597e..35d02981e 100644
--- a/src/code/seq.lisp
+++ b/src/code/seq.lisp
@@ -917,19 +917,23 @@ many elements are copied."
          (target-sequence target-sequence1)
          (source-sequence source-sequence2)
          (target-start start1)
-         (source-start start2)
-         (target-end (or end1 length1))
-         (source-end (or end2 length2)))
+         (source-start start2))
     (seq-dispatch-checking target-sequence
-      (seq-dispatch-checking source-sequence
-        (return-from replace (list-replace-from-list))
-        (return-from replace (list-replace-from-vector))
-        nil)
-      (seq-dispatch-checking source-sequence
-        (return-from replace (vector-replace-from-list))
-        (return-from replace (vector-replace-from-vector))
-        nil)
-      t)
+        (let ((target-end (or end1 length1)))
+          (seq-dispatch-checking source-sequence
+              (return-from replace (let ((source-end (or end2 length2)))
+                                     (list-replace-from-list)))
+              (return-from replace (let ((source-end (or end2 length2)))
+                                     (list-replace-from-vector)))
+              nil))
+        (let ((target-end (or end1 length1)))
+          (seq-dispatch-checking source-sequence
+              (return-from replace (let ((source-end (or end2 length2)))
+                                     (vector-replace-from-list)))
+              (return-from replace (let ((source-end (or end2 length2)))
+                                     (vector-replace-from-vector)))
+              nil))
+        t)
     ;; If sequence1 is an extended-sequence, we know nothing about sequence2.
     ;; If sequence1 was a list or vector, then sequence2 is an extended-sequence
     ;; or not a sequence. Either way, check it.

-----------------------------------------------------------------------


hooks/post-receive
-- 
SBCL