[prev in list] [next in list] [prev in thread] [next in thread] 

List:       sbcl-commits
Subject:    [Sbcl-commits] master: Source locate `(... . ,_code_)
From:       stassats via Sbcl-commits <sbcl-commits () lists ! sourceforge ! net>
Date:       2022-11-28 22:37:05
Message-ID: 1669675025.196149.17498 () sfp-scm-7 ! v30 ! lw ! sourceforge ! com
[Download RAW message or body]

The branch "master" has been updated in SBCL:
       via  4acecfbea9f122a7af62667b5cd96bdf14ad3a70 (commit)
      from  515a9a6119b7f6e2533e9c44a15038994d10b41a (commit)

- Log -----------------------------------------------------------------
commit 4acecfbea9f122a7af62667b5cd96bdf14ad3a70
Author: Stas Boukarev <stassats@gmail.com>
Date:   Mon Nov 28 02:04:01 2022 +0300

    Source locate `(... . ,_code_)
---
 src/code/list.lisp                  | 10 ----------
 src/code/primordial-extensions.lisp | 10 ++++++++++
 src/compiler/ir1report.lisp         |  5 ++++-
 src/compiler/ir1tran.lisp           |  7 ++++++-
 4 files changed, 20 insertions(+), 12 deletions(-)

diff --git a/src/code/list.lisp b/src/code/list.lisp
index a2813fb87..01264ce89 100644
--- a/src/code/list.lisp
+++ b/src/code/list.lisp
@@ -262,16 +262,6 @@
               (fast-nthcdr (mod n i) r-i))
            (declare (type fixnum i))))))))
 
-;;; For [n]butlast
-(defun dotted-nthcdr (n list)
-  (declare (fixnum n))
-  (do ((i n (1- i))
-       (result list (cdr result)))
-      ((not (plusp i)) result)
-    (declare (type fixnum i))
-    (when (atom result)
-      (return))))
-
 ;;; LAST
 ;;;
 ;;; Transforms in src/compiler/srctran.lisp pick the most specific
diff --git a/src/code/primordial-extensions.lisp b/src/code/primordial-extensions.lisp
index f08148384..df45fe1bd 100644
--- a/src/code/primordial-extensions.lisp
+++ b/src/code/primordial-extensions.lisp
@@ -314,3 +314,13 @@
 (defmacro defconstant-eqx (symbol expr eqx &optional doc)
   `(defconstant ,symbol (%defconstant-eqx-value ',symbol ,expr ,eqx)
      ,@(when doc (list doc))))
+
+;;; For [n]butlast
+(defun dotted-nthcdr (n list)
+  (declare (fixnum n))
+  (do ((i n (1- i))
+       (result list (cdr result)))
+      ((not (plusp i)) result)
+    (declare (type fixnum i))
+    (when (atom result)
+      (return))))
diff --git a/src/compiler/ir1report.lisp b/src/compiler/ir1report.lisp
index 432cbd6aa..eecea1b00 100644
--- a/src/compiler/ir1report.lisp
+++ b/src/compiler/ir1report.lisp
@@ -217,7 +217,10 @@
                 (when (and (>= (length name) 3) (string= name "DEF" :end1 3))
                   (context (source-form-context form))))))
           (when (null current) (return))
-          (setq form (nth (pop current) form)))
+         (let ((cons (sb-impl::dotted-nthcdr (pop current) form)))
+           (setq form (if (comma-p cons)
+                          (comma-expr cons)
+                          (car cons)))))
 
         (cond ((context)
                (values form (context)))
diff --git a/src/compiler/ir1tran.lisp b/src/compiler/ir1tran.lisp
index 89c83cf93..3bae1b6f5 100644
--- a/src/compiler/ir1tran.lisp
+++ b/src/compiler/ir1tran.lisp
@@ -543,7 +543,10 @@
       (declare (fixnum pos))
       (macrolet ((frob ()
                    `(progn
-                      (when (atom subform) (return))
+                      (when (comma-p subform)
+                        (setf subform (comma-expr subform)))
+                      (when (atom subform)
+                        (return))
                       (let ((fm (car subform)))
                         (when (comma-p fm)
                           (setf fm (comma-expr fm)))
@@ -567,6 +570,8 @@
         (loop
          (frob)
          (frob)
+         (when (comma-p trail)
+           (return))
          (setq trail (cdr trail)))))))
 
 

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


hooks/post-receive
-- 
SBCL


_______________________________________________
Sbcl-commits mailing list
Sbcl-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sbcl-commits
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic