Re: Opaque syntax objects
Andre van Tonder 14 Aug 2005 20:48 UTC
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
(define-syntax let1
(lambda (form)
(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.
Cheers
Andre