The (rnrs syntax-case (6))
library provides access to the
syntax-case
system for writing hygienic macros. With one
exception, all of the forms and procedures exported by this library
are “re-exports” of Guile’s native support for syntax-case
;
See Support for the syntax-case
System, for documentation, examples, and rationale.
Creates a new variable transformer out of proc, a procedure that
takes a syntax object as input and returns a syntax object. If an
identifier to which the result of this procedure is bound appears on the
left-hand side of a set!
expression, proc will be called
with a syntax object representing the entire set!
expression,
and its return value will replace that set!
expression.
The syntax-case
pattern matching form.
These forms allow references to be made in the body of a syntax-case
output expression subform to datum and non-datum values. They are
identical to the forms provided by Guile’s core library;
See Support for the syntax-case
System, for documentation.
These predicate procedures operate on syntax objects representing
Scheme identifiers. identifier?
returns #t
if obj
represents an identifier, #f
otherwise.
bound-identifier=?
returns #t
if and only if a binding for
id1 would capture a reference to id2 in the transformer’s
output, or vice-versa. free-identifier=?
returns #t
if
and only id1 and id2 would refer to the same binding in the
output of the transformer, independent of any bindings introduced by the
transformer.
Returns a list, of the same length as l, which must be a list or a syntax object representing a list, of globally unique symbols.
These procedures convert wrapped syntax objects to and from Scheme datum
values. The syntax object returned by datum->syntax
shares
contextual information with the syntax object template-id.
Constructs a new compound condition that includes the following simple conditions:
#f
, a &who
condition with the
whom as its field
&message
condition with the specified message
&syntax
condition with the specified form and optional
subform fields