GNU bug report logs - #50136
28.0.50; A problem with rx-let expansion

Previous Next

Package: emacs;

Reported by: Michael Heerdegen <michael_heerdegen <at> web.de>

Date: Fri, 20 Aug 2021 14:01:01 UTC

Severity: normal

Found in version 28.0.50

Done: Mattias EngdegÄrd <mattiase <at> acm.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Mattias EngdegÄrd <mattiase <at> acm.org>
To: Michael Heerdegen <michael_heerdegen <at> web.de>
Cc: 50136 <at> debbugs.gnu.org, monnier <at> iro.umontreal.ca
Subject: bug#50136: 28.0.50; A problem with rx-let expansion
Date: Sat, 21 Aug 2021 15:02:47 +0200
21 aug. 2021 kl. 13.45 skrev Michael Heerdegen <michael_heerdegen <at> web.de>:

>  (let ((args (list rest))) ...)
> 
> inside rx `eval' and use that as argument list variable.

Or just put all the actual code in a plain function:

(eval-when-compile
 (defun expand-my-rx-thing (x y &optional z &rest r) ...))

(rx-define my-rx-thing (x y &rest more) (eval (expand-my-rx-thing x y more)))

and use &optional and &rest arguments as you are used to, without any risks of substitution accidents like "string" in the example you showed earlier. The function would effectively work exactly like a macro of the sort you requested.

> Maybe it would be good to improve the docstring to say the things that I
> missed clearer? - Say explicitly that this mechanism is different from
> macros, instead it's just a simple substitution mechanism, and add a
> simple example to the docstring as a reference, even if we already have
> examples in the manual.

I'll see what can be done. It's not really Emacs tradition to have examples in doc strings but maybe they can be improved a bit as you say.

> Maybe also tell that using `eval' you can still have a macro-like
> behavior in the end.

Not a bad idea!





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

Previous Next


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