unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: "Gerd Möllmann" <gerd.moellmann@gmail.com>
To: Michael Heerdegen <michael_heerdegen@web.de>
Cc: brandon.irizarry@gmail.com, Eli Zaretskii <eliz@gnu.org>,
	65344@debbugs.gnu.org
Subject: bug#65344: 28.2; Unable to Edebug cl-flet form which uses argument destructuring
Date: Sat, 19 Aug 2023 10:08:24 +0200	[thread overview]
Message-ID: <ef55cf24-d9b1-7a80-5da6-6eac3a4d0214@gmail.com> (raw)
In-Reply-To: <8b7fc1c2-ae6c-b825-c772-38b18ddb67d6@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 2535 bytes --]

On 18.08.23 08:43, Gerd Möllmann wrote:
> On 18.08.23 07:58, Michael Heerdegen wrote:
>> Gerd Möllmann <gerd.moellmann@gmail.com> writes:
>>
>>> which I would naively expect to be suitable for a single function in
>>> an flet/labels.  (Maybe without the (setf ...) case, I'm not sure
>>> ATM).
>>
>> That's correct, but only one part.
> 
> RIght, that's what I meant.
> 
>>> Do you perhaps have an insight why there are two &name in the flet
>>> spec?
>>
>> Eh - not really.  That's some internal magic - to correctly associate
>> the code with the function names or something like that, I guess.
> 
> Ok. It's probably not important.
> 
>>> Also naively asked, what does the &or in the flet case mean?  Does it
>>> say that that the elements of the flet can either be symbols or
>>> functions?
>>
>> There is a second syntax to support: a function binding can also have
>> the syntax (fname EXPR) instead of (fname args body...).  EXPR can be a
>> lambda expression but also any arbitrary Lisp returning a function
>> value.
> 
> (Another nominee for the most obscure feature of the month.  That's also 
> not in CL, BTW.)
> 
> When I try something like
> 
> (cl-flet (y (x (lambda () 1)))
>    (x))
> 
> I get a not-a-list error from the Y.  That's kind of what I'm wondering. 
>   The debug declaratino for flet has the symbolp at the same level as 
> the local-function &define.
> 
> And, if that's the problem, the next question would then be how to 
> declare a binding (FN VALUE).  Maybe (%define &name ... <something>)?

The Elisp manual has very nice description of debug specs, indeed.
It's under Elisp > Edebug > Edebug and Macros > Specification Lists.
 From that description, I think this is the right debug spec for flet 
(patch attached)

(debug ((&rest [&or (&define [&name symbolp "@cl-flet@"]
			[&name [] gensym] ;Make it unique!
			cl-lambda-list
			cl-declarations-or-string
			[&optional ("interactive" interactive)]
			def-body)
		    (&define [&name symbolp "@cl-flet@"]
			[&name [] gensym] ;Make it unique!
			def-body)])

The second &define is for the (FN EXPR) bindings.  It comes after the 
&define for "normal" function bindings because because, for some reason, 
apparently the second &define also matches the other case.  (The 
description in the Elisp manual, BTW, also explain what the duplicate 
name does, although I'm not sure why it is done here, because the names 
of the local functions should be unique already.  I'm probably 
overlooking something.)

Seems to work for me.  WDYT?



[-- Attachment #2: flet.patch --]
[-- Type: text/plain, Size: 1091 bytes --]

diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index 0a3181561bd..0d91f77251e 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -2064,12 +2064,14 @@ cl-flet
 
 \(fn ((FUNC ARGLIST BODY...) ...) FORM...)"
   (declare (indent 1)
-           (debug ((&rest [&or (symbolp form)
-                               (&define [&name symbolp "@cl-flet@"]
+           (debug ((&rest [&or (&define [&name symbolp "@cl-flet@"]
                                         [&name [] gensym] ;Make it unique!
                                         cl-lambda-list
                                         cl-declarations-or-string
                                         [&optional ("interactive" interactive)]
+                                        def-body)
+                               (&define [&name symbolp "@cl-flet@"]
+                                        [&name [] gensym] ;Make it unique!
                                         def-body)])
                    cl-declarations body)))
   (let ((binds ()) (newenv macroexpand-all-environment))

  reply	other threads:[~2023-08-19  8:08 UTC|newest]

Thread overview: 62+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-16 18:21 bug#65344: 28.2; Unable to Edebug cl-flet form which uses argument destructuring Brandon Irizarry
2023-08-17  0:55 ` Michael Heerdegen
2023-08-17  5:29 ` Gerd Möllmann
2023-08-17 15:42   ` Brandon Irizarry
2023-08-17 15:56     ` Eli Zaretskii
2023-08-17 18:23     ` Gerd Möllmann
2023-08-17 23:07       ` Michael Heerdegen
2023-08-18  5:19         ` Gerd Möllmann
2023-08-18  5:58           ` Michael Heerdegen
2023-08-18  6:43             ` Gerd Möllmann
2023-08-19  8:08               ` Gerd Möllmann [this message]
2023-08-20  3:57                 ` Michael Heerdegen
2023-08-20  5:32                   ` Gerd Möllmann
2023-08-20  6:08                     ` Michael Heerdegen
2023-08-20  6:48                       ` Gerd Möllmann
2023-08-21  1:19                         ` Michael Heerdegen
2023-08-21  7:01                           ` Gerd Möllmann
2023-08-21  7:10                             ` Gerd Möllmann
2023-08-21  7:30                               ` Gerd Möllmann
2023-08-22  0:54                                 ` Michael Heerdegen
2023-08-22  5:48                                   ` Gerd Möllmann
2023-08-22  6:10                                     ` Michael Heerdegen
2023-08-22  8:05                                       ` Gerd Möllmann
2023-08-22 21:06                                         ` Brandon Irizarry
2023-08-23  0:35                                           ` Michael Heerdegen
2023-08-23  0:32                                         ` Michael Heerdegen
2023-08-23  1:25                                           ` Drew Adams
2023-08-23  6:06                                             ` Gerd Möllmann
2023-08-23 14:23                                               ` Drew Adams
2023-08-24  3:16                                                 ` Michael Heerdegen
2023-08-24  9:10                                                 ` Gerd Möllmann
2023-08-24 23:04                                                   ` Michael Heerdegen
2023-08-25  1:53                                                     ` Drew Adams
2023-08-25  4:07                                                       ` Michael Heerdegen
2023-08-25 14:50                                                         ` Drew Adams
2023-08-26  0:16                                                           ` Michael Heerdegen
2023-08-26  2:02                                                             ` Drew Adams
2023-08-20  4:39                 ` Michael Heerdegen
2023-08-20  5:15                   ` Gerd Möllmann
2023-08-23  9:25 ` Mattias Engdegård
2023-08-23  9:31   ` Mattias Engdegård
2023-08-23 11:10     ` Gerd Möllmann
2023-08-23 14:08       ` Gerd Möllmann
2023-08-24  1:14         ` Michael Heerdegen
2023-08-24  6:17           ` Gerd Möllmann
2023-08-25  4:10             ` Michael Heerdegen
2023-08-25  6:19               ` Gerd Möllmann
2023-08-25  4:22             ` Michael Heerdegen
2023-08-25  6:33               ` Gerd Möllmann
2023-08-25 17:53                 ` Michael Heerdegen
2023-08-26  5:39                   ` Gerd Möllmann
2023-08-27  4:02                     ` Michael Heerdegen
2023-08-27  6:34                       ` Gerd Möllmann
2023-09-01 23:24         ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-02  5:10           ` Gerd Möllmann
2023-09-02 17:04             ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-02 19:27               ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-03  5:51                 ` Gerd Möllmann
2023-09-03 16:09                   ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-09-03 16:47                     ` Gerd Möllmann
2023-09-04 21:14                       ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2023-08-23  9:33   ` Gerd Möllmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ef55cf24-d9b1-7a80-5da6-6eac3a4d0214@gmail.com \
    --to=gerd.moellmann@gmail.com \
    --cc=65344@debbugs.gnu.org \
    --cc=brandon.irizarry@gmail.com \
    --cc=eliz@gnu.org \
    --cc=michael_heerdegen@web.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).