[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

quoted data in macro expansion

This page is part of the web mail archives of SRFI 72 from before July 7th, 2015. The new archives for SRFI 72 contain all messages, not just those from before July 7th, 2015.

Am I correct in understanding that any quoted S-expressions, in either a macro "parameter" or in a template, is copied? This is of course needed for any quote expression in the template if it spliced in. However, in many (most? all?) existing syntax-case and syntax-rules implementations a quoted form in macro parameter that is not "destructured" is used verbatim, and likewise for a quoted form in a template if it contains no pattern variables.

I don't know if this is a big deal, but it breaks pair identity in cases where it is preserved in existing implementations. This seems to make SRFI-72 essentially incompatible with SRFI-38, in the sense that you can't use of SRFI-38 shared structure in programs (though it is still available for external data). And of course cycles are prohibited.

A solution might be something like the following: when creating a syntax object from a pair or vector, enter both the original pair/vector and the corresponding syntax pair/vector in a table. (If the original pair/vector exists in the table, re-use the syntax pair/vector.) Then quote and related forms (e.g. syntax->datum) does the inverse mapping.

Of course for this to be efficient, you probably need a (non-portable) object hash table, though various tricks are possible.
	--Per Bothner
per@xxxxxxxxxxx   http://per.bothner.com/