Expands all non-primitive syntax in
top-level-form, and returns a syntax object for the expanded form that contains only core forms, matching the grammar specified by
Fully Expanded Programs.
Before top-level-form is expanded, its lexical context is enriched with namespace-syntax-introduce, just as for eval. Use syntax->datum to convert the returned syntax object into a printable datum.
If insp is not the original code inspector (i.e., the value of (current-code-inspector) when Racket starts), then the result syntax object is tainted.
Here’s an example of using expand on a module:
Here’s an example of using expand on a non-top-level form:
Changed in version 8.2.0.4 of package base: Added the insp argument and tainting.
Like
(expand stx insp), except that the argument must be a
syntax object, and its lexical context is not enriched before expansion.
Changed in version 8.2.0.4 of package base: Added the insp argument and tainting.
Partially expands
top-level-formand returns a syntax object for the partially-expanded expression. Due to limitations in the expansion mechanism, some context information may be lost. In particular, calling
expand-onceon the result may produce a result that is different from expansion via
expand.
Before top-level-form is expanded, its lexical context is enriched with namespace-syntax-introduce, as for eval.
The insp argument determines whether the result is tainted, the same as for expand.
Changed in version 8.2.0.4 of package base: Added the insp argument and tainting.
Like
(expand-once stx), except that the argument must be a
syntax object, and its lexical context is not enriched before expansion.
Changed in version 8.2.0.4 of package base: Added the insp argument and tainting.
Partially expands
top-level-formto reveal the outermost syntactic form. This partial expansion is mainly useful for detecting top-level uses of
begin. Unlike the result of
expand-once, expanding the result of
expand-to-top-formwith
expandproduces the same result as using
expandon the original syntax.
Before stx-or-sexpr is expanded, its lexical context is enriched with namespace-syntax-introduce, as for eval.
The insp argument determines whether the result is tainted, the same as for expand.
Changed in version 8.2.0.4 of package base: Added the insp argument and tainting.
Changed in version 8.2.0.4 of package base: Added the insp argument and tainting.
12.9.1 Information on Expanded Modules🔗ℹInformation for an expanded module declaration is stored in a set of syntax properties (see Syntax Object Properties) attached to the syntax object:
'module-body-context — a syntax object whose lexical information corresponds to the inside of the module, so it includes the expansion’s outside-edge scope and its inside-edge scope; that is, the syntax object simulates an identifier that is present in the original module body and inaccessible to manipulation by any macro, so that its lexical information includes bindings for the module’s imports and definitions.
Added in version 6.4.0.1 of package base.
'module-body-inside-context — a syntax object whose lexical information corresponds to an identifier that starts with no lexical context and is moved into the macro, so that it includes only the expansions’s inside-edge scope.
Added in version 6.4.0.1 of package base.
'module-body-context-simple? — a boolean, where #t indicates that the bindings of the module’s body (as recorded in the lexical information of the value of the 'module-body-inside-context property) can be directly reconstructed from modules directly imported into the module, including imported for-syntax, for-meta, and for-template.
Added in version 6.4.0.1 of package base.
Changed in version 7.0 of package base: Removed 'module-variable-provides, 'module-syntax-provides, 'module-indirect-provides, and 'module-indirect-for-meta-provides properties.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4