12.8 Syntax Taints
Tainted Syntax in The Racket Guide introduces syntax taints.
A tainted identifier is rejected by the macro expander for use as either a binding or expression. If a syntax object stx is tainted, then any syntax object in the result of (syntax-e stx) is tainted, and datum->syntax with stx as its first argument produces a tainted syntax object. Any syntax object in the result of (syntax-property stx key) is also tainted if it is in a position within the value that would be reached by datum->syntax’s conversion. Taints cannot be removed.
A syntax object is tainted when it is included in an exception by the macro expander or when it is produced by a function like expand using a code inspector that is not the original code inspector. The function syntax-taint also returns a tainted syntax object.
Previous versions of Racket included a notion of arming and disarming syntax to trigger taints or avoid taints. That indirection is no longer supported, and the operations syntax-arm, syntax-disarm, syntax-rearm, and syntax-protect now have no effect on their arguments. Along similar lines, the syntax properties (see Syntax Object Properties) 'taint-mode and 'certify-mode were formerly used to control syntax arming and are no longer specifically recognized by the macro expander.
procedure
(syntax-tainted? stx) → boolean?
stx : syntax?
procedure
(syntax-arm stx [inspector use-mode?]) → syntax?
stx : syntax? inspector : (or/c inspector? #f) = #f use-mode? : any/c = #f
Changed in version 8.2.0.4 of package base: Changed to just return stx instead of returning “armed” syntax.
procedure
(syntax-protect stx) → syntax?
stx : syntax?
Changed in version 8.2.0.4 of package base: Changed to just return stx instead of returning “armed” syntax.
procedure
(syntax-disarm stx inspector) → syntax?
stx : syntax? inspector : (or/c inspector? #f)
Changed in version 8.2.0.4 of package base: Changed to just return stx instead of potentially “disarming” syntax.
procedure
(syntax-rearm stx from-stx [use-mode?]) → syntax?
stx : syntax? from-stx : syntax? use-mode? : any/c = #f
Changed in version 8.2.0.4 of package base: Changed to just return stx instead of potentially “arming” syntax.
procedure
(syntax-taint stx) → syntax?
stx : syntax?