GNU bug report logs - #47992
27; 28; Phase out use of `equal` in `add-hook`, `remove-hook`

Previous Next

Package: emacs;

Reported by: Daniel Mendler <mail <at> daniel-mendler.de>

Date: Sat, 24 Apr 2021 12:12:01 UTC

Severity: normal

Tags: fixed

Fixed in version 28.1

Done: Lars Ingebrigtsen <larsi <at> gnus.org>

Bug is archived. No further changes may be made.

Full log


Message #103 received at 47992 <at> debbugs.gnu.org (full text, mbox):

From: Michael Heerdegen <michael_heerdegen <at> web.de>
To: Lars Ingebrigtsen <larsi <at> gnus.org>
Cc: Daniel Mendler <mail <at> daniel-mendler.de>, jakanakaevangeli <at> chiru.no,
 monnier <at> iro.umontreal.ca, 47992 <at> debbugs.gnu.org
Subject: Re: bug#47992: 27; 28; Phase out use of `equal` in `add-hook`,
 `remove-hook`
Date: Mon, 05 Jul 2021 01:15:25 +0200
Lars Ingebrigtsen <larsi <at> gnus.org> writes:

> Some other languages have the ability to add names to anonymous
> functions (yes, a contradiction in terms) to aid debugging and the like.
> We could also extend our `lambda' with an optional name -- it seems like
> that could be generally useful beyond this particular use case -- and
> then this new add-hook function could refuse to accept name-less
> lambdas...

BTW, I think you can have something like that by misusing advice,
e.g. (example at the end):

#+begin_src emacs-lisp
(defalias 'function-name-advice #'identity) ;just a tag

(defun named-function (f name)
  (unless (and (functionp f)
               (not (symbolp f)))
    (error "Not an anonymous function"))
  (when (advice-function-member-p 'function-name-advice f)
    (error "Already has a name"))
  (add-function :filter-return (var f) 'function-name-advice `((name . ,name)))
  f)

(defun function-name (f)
  (and (advice-function-member-p 'function-name-advice f)
       (cdr (assoc 'name (advice--props f)))))

;; Example:
(setq my-test-lambda (lambda (n) (+ 2 n)))
(setq my-named-test-lambda
      (named-function my-test-lambda "Moon Child")) ;; => [bytecode lambda]

(funcall my-named-test-lambda 3) ;; => 5 (works)

(function-name my-named-test-lambda) ;; => "Moon Child"
#+end_src


Michael.




This bug report was last modified 3 years and 323 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.