* bug#18821: 25.0.50; Let pp-macroexpand-expression expand only once
@ 2014-10-24 23:13 Michael Heerdegen
2014-10-28 17:00 ` Stefan Monnier
0 siblings, 1 reply; 6+ messages in thread
From: Michael Heerdegen @ 2014-10-24 23:13 UTC (permalink / raw)
To: 18821
Hello,
this is a feature request.
The problem is the following:
When writing a complex macro, one often wants to check some examples to
see if it expands code as intended.
There are different ways of doing that: M-x pp-macroexpand-expression or
M-x emacs-lisp-macroexpand for example.
But there is a problem: if the macro expansion is a toplevel call to
some other macro, this one will also be expanded, because the above
commands use `macroexpand' which successively expands until the result
is not a macro call. This is not useful for checking macro expansions.
I want to suggest to alter `pp-macroexpand-expression', or to provide a
new command, based on a function that expands only one time like
(defun macroexpand1 (expr)
(apply (cdr (symbol-function (car expr))) (cdr expr)))
(This can no doubt be improved, e.g. to DTRT for autoloaded macros.)
Or did I miss something? Opinions?
Thanks,
Michael.
In GNU Emacs 25.0.50.1 (x86_64-unknown-linux-gnu, GTK+ Version 3.14.1)
of 2014-10-17 on drachen
Windowing system distributor `The X.Org Foundation', version 11.0.11601000
System Description: Debian GNU/Linux testing (jessie)
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#18821: 25.0.50; Let pp-macroexpand-expression expand only once
2014-10-24 23:13 bug#18821: 25.0.50; Let pp-macroexpand-expression expand only once Michael Heerdegen
@ 2014-10-28 17:00 ` Stefan Monnier
2014-10-29 3:53 ` Michael Heerdegen
0 siblings, 1 reply; 6+ messages in thread
From: Stefan Monnier @ 2014-10-28 17:00 UTC (permalink / raw)
To: Michael Heerdegen; +Cc: 18821
> (defun macroexpand1 (expr)
> (apply (cdr (symbol-function (car expr))) (cdr expr)))
Daniel Colascione already submitted a patch that provides
a macroexpand1. And if that's not sufficient I also wrote my own.
The only reason I haven't installed it is because it would make a lot of
sense to reimplement `macroexpand' (in Elisp) on top of `macroexpand1',
but when I tried that, byte-compilation slowed down by about 5%, which
seemed excessive (especially since it reflects an even larger slowdown
of macroexpansion itself, tho I haven't measured that in more detail).
Stefan
(defun macroexp-expand-1 (form environment)
"Perform (at most) one step of macroexpansion."
(cond
((consp form)
(let* ((head (car form))
(env-expander (assq head environment)))
(if env-expander
(if (cdr env-expander)
(apply (cdr env-expander) (cdr form))
form)
(if (not (and (symbolp head) (fboundp head)))
form
(let ((def (autoload-do-load (symbol-function head) head 'macro)))
(cond
;; Follow alias, but only for macros, otherwise we may end up
;; skipping an important compiler-macro (e.g. cl--block-wrapper).
((and (symbolp def) (macrop def)) (cons def (cdr form)))
((not (consp def)) form)
(t
(if (eq 'macro (car def))
(apply (cdr def) (cdr form))
form))))))))
(t form)))
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#18821: 25.0.50; Let pp-macroexpand-expression expand only once
2014-10-28 17:00 ` Stefan Monnier
@ 2014-10-29 3:53 ` Michael Heerdegen
2014-10-31 21:36 ` Stefan Monnier
0 siblings, 1 reply; 6+ messages in thread
From: Michael Heerdegen @ 2014-10-29 3:53 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 18821
Stefan Monnier <monnier@iro.umontreal.ca> writes:
> Daniel Colascione already submitted a patch that provides a
> macroexpand1. And if that's not sufficient I also wrote my own. The
> only reason I haven't installed it is because it [...]
Ok, thanks for the info. I think that this macroexpand1 should also be
made available via some command.
Michael.
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#18821: 25.0.50; Let pp-macroexpand-expression expand only once
2014-10-29 3:53 ` Michael Heerdegen
@ 2014-10-31 21:36 ` Stefan Monnier
2014-11-02 4:07 ` Michael Heerdegen
0 siblings, 1 reply; 6+ messages in thread
From: Stefan Monnier @ 2014-10-31 21:36 UTC (permalink / raw)
To: Michael Heerdegen; +Cc: 18821
>> Daniel Colascione already submitted a patch that provides a
>> macroexpand1. And if that's not sufficient I also wrote my own. The
>> only reason I haven't installed it is because it [...]
> Ok, thanks for the info. I think that this macroexpand1 should also be
> made available via some command.
I installed my macroexpand-1 into trunk.
Stefan
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#18821: 25.0.50; Let pp-macroexpand-expression expand only once
2014-10-31 21:36 ` Stefan Monnier
@ 2014-11-02 4:07 ` Michael Heerdegen
2014-11-02 5:46 ` Stefan Monnier
0 siblings, 1 reply; 6+ messages in thread
From: Michael Heerdegen @ 2014-11-02 4:07 UTC (permalink / raw)
To: Stefan Monnier; +Cc: 18821
Stefan Monnier <monnier@iro.umontreal.ca> writes:
> I installed my macroexpand-1 into trunk.
Thanks!
Do you think that `pp-macroexpand-expression' and
`pp-macroexpand-last-sexp' should use it? I don't use these, but they
seem to be intended mainly for testing, where `macroexpand-1'
would makes more sense then `macroexpand'.
If you think the question is not important cause nobody uses the
pp-macroexpand stuff (dunno), feel free to close.
Thanks,
Michael.
^ permalink raw reply [flat|nested] 6+ messages in thread
* bug#18821: 25.0.50; Let pp-macroexpand-expression expand only once
2014-11-02 4:07 ` Michael Heerdegen
@ 2014-11-02 5:46 ` Stefan Monnier
0 siblings, 0 replies; 6+ messages in thread
From: Stefan Monnier @ 2014-11-02 5:46 UTC (permalink / raw)
To: Michael Heerdegen; +Cc: 18821-done
>> I installed my macroexpand-1 into trunk.
> Thanks!
> Do you think that `pp-macroexpand-expression' and
> `pp-macroexpand-last-sexp' should use it?
Oh, yes, of course. Same for emacs-lisp-macroexpand.
Sorry for forgetting about the actual bug report. It's done now,
Stefan
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2014-11-02 5:46 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-10-24 23:13 bug#18821: 25.0.50; Let pp-macroexpand-expression expand only once Michael Heerdegen
2014-10-28 17:00 ` Stefan Monnier
2014-10-29 3:53 ` Michael Heerdegen
2014-10-31 21:36 ` Stefan Monnier
2014-11-02 4:07 ` Michael Heerdegen
2014-11-02 5:46 ` Stefan Monnier
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).