Stefan Monnier writes: >>>> No, in some cases you must use (cl-declare (special ...)), and no you >>>> can't use defvar in such cases, so if you intend to remove/deprecate >>> Could you show us an example? >> I used it in helm--completion-in-region to pass PROMPT and >> REQUIRE-MATCH, > > Actually, no, you didn't. 🙁 > I mean, yes you did use it, but no it did not "pass PROMPT and > REQUIRE-MATCH". It used to work (circa 26?), but yes now it is broken, since when I don't know, I rarely use CRM (I saw just yesterday PROMPT was no more passing, thanks to this thread). So because this is no more working, I understand you don't want to bother maintaining this code which looks complex indeed. >> (defmacro my-with-progress (&rest body) >> `(let ((reporter (make-progress-reporter "Updating..."))) >> (progn >> ,@body))) >> >> (defun my-updating () >> (cl-declare (special reporter)) >> (my-with-progress >> (cl-loop for elm in '(a b c d e f g) >> do (progn >> (sit-for 1) >> (progress-reporter-update reporter)) >> collect elm))) > > I don't see what is the use of (cl-declare (special reporter)) here. > What do you think it changes to the behavior of this code? It declare reporter as a variable and prevent byte compile warnings, same as (defvar reporter) as you have mentioned below. >> of course you can use a defvar in this case, > > Exactly: (defvar reporter) would have the same effect. > > > Stefan -- Thierry