Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

walker:macroexpand-all and tagbody #40

Open
Gleefre opened this issue Nov 1, 2024 · 3 comments
Open

walker:macroexpand-all and tagbody #40

Gleefre opened this issue Nov 1, 2024 · 3 comments
Assignees
Labels

Comments

@Gleefre
Copy link

Gleefre commented Nov 1, 2024

There are two problems caused by not treating forms in the tagbody correctly.

  1. walker:macroexpand-all expands symbols that have a symbol-macro definition in tagbody when they are in the tag position.
  2. walker:macroexpand-all doesn't "protect" macroexpansion of the macros in tagbody that can become a tag (symbols and integers).
(require :walker)
(walker:macroexpand-all
 '(symbol-macrolet ((tag (tag-expanded)))
   (tagbody tag)))
; => (SYMBOL-MACROLET ((TAG (TAG-EXPANDED)))
;      (TAGBODY (TAG-EXPANDED)))

(walker:macroexpand-all
 '(macrolet ((not-tag () 'tag-expanded))
   (tagbody (not-tag))))
; => (MACROLET ((NOT-TAG ()
;                 'TAG-EXPANDED))
;      (TAGBODY (NOT-TAG)))

The determination of which elements of the body are tags and which are statements is made prior to any macro expansion of that element. If a statement is a macro form and its macro expansion is an atom, that atom is treated as a statement, not a tag.

-- CLHS, tagbody: https://www.lispworks.com/documentation/HyperSpec/Body/s_tagbod.htm

That means that

  1. tag in tagbody should not be expanded.
  2. (not-tag) expansion should be "protected" so that it doesn't become a tag, for example via progn.

Tested on MKCL 1.1.11

(lisp-implementation-version)  ; => "1.1.11.188-f731a69"

This affects quite a few other implementations, see this table (two last columns): https://plaster.tymoon.eu/view/4637.

@jcbeaudoin jcbeaudoin added the bug label Nov 1, 2024
@jcbeaudoin jcbeaudoin self-assigned this Nov 1, 2024
@jcbeaudoin
Copy link
Owner

You are using a version of MKCL master/head that is a bit more that a year old. Why don't you pull the current MKCL master/head such that we have a common base to discuss from?
I'll be investigating all this in the next few days...

Thank you for the issue report.

@Gleefre
Copy link
Author

Gleefre commented Nov 1, 2024

Sorry, forgot that I have built mkcl from master/head at some point. I have updated it to current head, same results with the macroexpand-all test.

(lisp-implementation-version)  ; => "1.1.11.206-b414811"

By the way, there are a few more issues with macroexpand-all, should I open separate issues or add them all here?

@jcbeaudoin
Copy link
Owner

Open separate issues if they are significant enough please.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants