Previous: expander examples contours double, Up: expander examples contours [Index]
datum->syntax
doesArmed with our understanding of lists of rib
objects as
representation of nested lexical contours, we can understand what the
standard procedure datum->syntax
does (see datum->syntax). Let’s see this example:
(internal-body (define A 1) (begin-for-syntax (define B.id (datum->syntax #'A 'B)) (pretty-print #'A) (pretty-print B.id) (pretty-print (eq-ribs? #'A B.id))) (void)) -| #<syntactic-identifier expr=A mark*=(src)> -| #<syntactic-identifier expr=B mark*=(src)> -| #t
datum->syntax
builds a new <stx>
using its datum argument
as symbolic expression and the marks and rib
list of its
template-id argument as wraps.
datum->syntax
does not care if it generates a syntax objects with
unbound identifiers in reference position:
(internal-body (define A 1) (begin-for-syntax (define B.id (datum->syntax #'A 'B)) (pretty-print (id->label B.id)) (pretty-print (id->descriptor B.id))) (void)) -| #f -| (displaced-lexical . ())
it is only if we use the generated syntax object as part of the output form of a macro use that the “boundness” matters.