[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Opaque syntax objects
On Sun, 14 Aug 2005, [ISO-8859-1] Jens Axel Søgaard wrote:
What should I do if I want to give a piece of (expanded) syntax the
same source information as, say, the macro call?
There can be a primitive for that. E.g.,
annotate : (syntax-object, syntax-object) -> syntax-object
In the hash-table, this would insert a new entry for the pair
representing the second syntax object, copying the annotation of the first.
Of course. Syntax objects are still ordinary pairs. No change to car/cdr
is required. The hash table with source information is kept separately.
Hmm. How do you represent identifiers?
The same way, once you give them a wrap to give them separate identities.
I believe with-syntax behaves that way in order to be (more) compatible
with the psyntax-implementation. Note that the source location
information for stx-expr in
(with-syntax ((pattern stx-expr) ...) expr)
is taken from stx-expr, when stx-expr is not returning a list. That
is the source location is still tracked.
Do you know what location is assigned when stx-expr is a list?
As an aside, it is sometimes easy to throw away too much information when using
the destructuring idiom. For example, in
(syntax-case form ()
((_ ((i e) ...) e1 e2 ...)
(syntax (let ((i e) ...) e1 e2 ...))))))
it is unlikely that most implementations would keep the
location of the input subnode ((i e) ...) in the result.