emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: "The starting list count" ?????


From: Stefan Monnier
Subject: Re: "The starting list count" ?????
Date: Mon, 03 Jan 2022 16:15:32 -0500
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/29.0.50 (gnu/linux)

> Debugger entered--Lisp error: (quit)
>   copy-tree((1 . #1) t)
>   macroexp-strip-symbol-positions((1 . #1))
>   byte-compile-constant((1 . #1))
>   byte-compile-quote('(1 . #2))
>   byte-compile-form('(1 . #2))
>
>> The #1 means "the second heap object between the root and here" and in
>> (1 . #1) there's only one heap object.
>
> I can cope with "the second heap object", but what is "the root"?

I suspect in the above backtrace, every arglist is passed to print as
is, so the "root" is the arglist.

>>     (1 . #1)
>
> Yes.  Looking at seq-tests.el, it's clear the original source for it is
>
>     (let ((l1 '#1=(1 . #1#))) ....)

Ah, one of those rare cases where the source code includes circular data.
Maybe we should apply the patch below.


        Stefan


diff --git a/test/lisp/emacs-lisp/seq-tests.el 
b/test/lisp/emacs-lisp/seq-tests.el
index 9e5d59163f9..48ed72a1b06 100644
--- a/test/lisp/emacs-lisp/seq-tests.el
+++ b/test/lisp/emacs-lisp/seq-tests.el
@@ -474,7 +474,8 @@ test-sequences-oddp
   (should-error (seq-random-elt "")))
 
 (ert-deftest test-seq-mapn-circular-lists ()
-  (let ((l1 '#1=(1 . #1#)))
+  (let ((l1 (list 1)))
+    (setcdr l1 l1)
     (should (equal (seq-mapn #'+ '(3 4 5 7) l1)
                    '(4 5 6 8)))))
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]