11.2 Syntax Object Content
Returns the source for the syntax object stx
, or #f
if none is known. The source is represented by an arbitrary value
(e.g., one passed to read-syntax
), but it is typically a file
path string. Source-location information is dropped for a syntax
object that is marshaled as part of compiled code; see also
Returns the span (non-negative exact integer) in characters of the
in its source, or #f
if the span is
unknown. See also syntax-source
for information about
marshaling compiled syntax object
Returns an indication of the module whose source contains
, or #f
has no source module. If
, then result is a module path index or
symbol (see Compiled Modules and References
); if source?
is true, the
result is a path or symbol corresponding to the loaded module’s
source in the sense of current-module-declare-source
Unwraps the immediate datum structure from a syntax object
leaving nested syntax structure (if any) in place. The result of
is one of the following:
A syntax pair is a pair containing a syntax object as its
first element, and either the empty list, a syntax pair, or a syntax
object as its second element.
A syntax object that is the result of read-syntax reflects
the use of delimited . in the input by creating a syntax
object for every pair of parentheses in the source, and by creating a
pair-valued syntax object only for parentheses in the
source. See Reading Pairs and Lists for more information.
Returns a datum by stripping the lexical information, source-location
information, properties, and certificates from stx
. Inside of
pairs, (immutable) vectors, (immutable) boxes, immutable hash
values (not keys), and immutable prefab
s are recursively stripped.
The stripping operation does not mutate stx; it creates new
pairs, vectors, boxes, hash tables, and prefab structures as
needed to strip lexical and source-location information recursively.
Converts the datum v
to a syntax object
The contents of pairs, vectors, and boxes, the fields of prefab
structures, and the values of immutable hash tables are recursively converted.
The keys of prefab
structures and the keys of immutable hash tables are
not converted. Mutable vectors and boxes are replaced by immutable vectors and
boxes. For any kind of value other than a
pair, vector, box, immutable hash table
structure, or syntax object
, conversion means
wrapping the value with lexical information, source-location
information, properties, and certificates.
Converted objects in v are given the lexical context
information of ctxt and the source-location information of
srcloc. If v is not already a syntax object,
then the resulting immediate syntax object is given the
properties (see Syntax Object Properties) of prop and the
inactive certificates (see Syntax Certificates) of
cert; if v is a pair, vector, box, immutable
hash table, or immutable prefab structure, recursively
converted values are not given properties or certificates.
Any of ctxt, srcloc, prop, or cert
can be #f, in which case the resulting syntax has no lexical
context, source information, new properties, and/or certificates.
If srcloc is not #f or a syntax object, it
must be a list or vector of five elements:
|(list source-name line column position span)|
|or (vector source-name line column position span)|
where source-name-v is an arbitrary value for the source
name; line is an integer for the source line, or #f;
column is an integer for the source column, or #f;
position is an integer for the source position, or
#f; and span is an integer for the source span, or
#f. The line and column values must both be
numbers or both be #f, otherwise the
exn:fail:contract exception is raised.
Graph structure is not preserved by the conversion of v to a
syntax object. Instead, v is essentially unfolded into
a tree. If v has a cycle through pairs, vectors, boxes,
immutable hash tables, and immutable prefab structures,
then the exn:fail:contract exception is raised.
Returns a list of identifiers that are distinct from all other
identifiers. The list contains as many identifiers as
contains elements. The stx-pair
must be a syntax pair that can be flattened into a list. The elements
can be anything, but string, symbol, keyword
(possibly wrapped as syntax), and identifier elements will be embedded
in the corresponding generated name, which is useful for debugging
purposes. The generated identifiers are built with interned symbols
s), so the limitations described with
do not apply.
Returns an identifier with the same binding as id-stx
without lexical information from id-stx
that does not apply
to the symbols in syms
, where even further extension of the
lexical information drops information for other symbols. In
particular, transferring the lexical context via
from the result of this function to a symbol
other than one in syms
produces an identifier with no binding.
See also quote-syntax/prune.
Returns an identifier with its lexical context minimized to that
needed for syntax-source-module
. The minimized lexical
context does not include any bindings.