Subject: bug#65344: 28.2; Unable to Edebug cl-flet form which uses argument destructuring

From: Gerd Möllmann <[email-masked]>
Date: Fri, 18 Aug 2023 08:43:41 +0200

On 18.08.23 07:58, Michael Heerdegen wrote:
> Gerd Möllmann <[email-masked]> 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>)?