12.3 Syntax Object Bindings
if the identifier a-id
(or vice versa) if the identifiers were substituted in a
suitable expression context at the phase level
otherwise. A #f
corresponds to the label phase level
|> (check a a)|
|> (check a b)|
|> (define-syntax-rule (check-a x) (check a x))|
|> (check-a a)|
“Same module binding” means that the identifiers refer to the same
original definition site, and not necessarily to the same
require or provide site. Due to renaming in
require and provide, or due to a transformer binding
to a rename transformer, the identifiers may return distinct
results with syntax-e.
|> (check car)|
|> (check mcar)|
|> (require (rename-in racket/base [car kar]))|
|> (check kar)|
Compares each identifier in ids
with every other identifier
in the list with bound-identifier=?
. If any comparison
, one of the duplicate identifiers is returned (the
first one in ids
that is a duplicate), otherwise the result
Returns one of three (if top-level-symbol?
or four (if top-level-symbol?
is true) kinds of values, depending on the binding of
at the phase level
(where a #f
corresponds to the label phase level
The result is 'lexical if id-stx
has a local binding.
The result is a list of seven items when id-stx
has a module binding: (list from-mod from-sym nominal-from-mod nominal-from-sym from-phase import-phase nominal-export-phase).
from-mod is a module path index (see
Compiled Modules and References) that indicates the defining module. It
is the “self” module path index if the binding refers to a
definition in the enclosing module of id-stx.
from-sym is a symbol for the identifier’s name
at its definition site in the originating module. This can be
different from the local name returned by
syntax->datum for several reasons: the identifier is
renamed on import, it is renamed on export, or it is
implicitly renamed because the binding site was generated by a
macro invocation. In that last case, it may be an
unreadable symbol, and it may be different from the
result of syntax->datum on the identifier in the
original source definition.
nominal-from-mod is a module path index (see
Compiled Modules and References) that indicates the binding’s module as
it appears locally in the source around id-stx: it
indicates a module required into the context of
id-stx to provide its binding, or it is the same
“self” as from-mod for a binding that refers to a
definition in the enclosing module of id-stx. It can
be different from from-mod due to a re-export in
nominal-from-mod of some imported identifier. If the
same binding is imported in multiple ways, an arbitrary
representative is chosen.
nominal-from-sym is a symbol for the binding’s
identifier as it appears locally in the source around
id-stx: it is the identifier’s name as exported by
nominal-from-mod, or it is the source identifier’s
symbol for a definition within the enclosing module of
id-stx. It can be different from from-sym
due to a renaming provide, even if from-mod
and nominal-from-mod are the same, or due to a
definition that was introduced by a macro expansion.
from-phase is an exact non-negative integer
representing the originating phase. For example, it is
1 if the definition is for-syntax.
import-phase is 0 if the binding
import of nominal-from-mode is from a definition
or a plain require, 1 if it is from a
for-syntax import, etc.
nominal-export-phase is the phase level
of the export from nominal-from-mod for an
imported binding or the phase level of the definition for a
binding from the enclosing module of id-stx.
The result is (list top-sym) if id-stx
has a top-level binding and
top-level-symbol? is true. The top-sym
can different from the name returned by
syntax->datum when the binding definition was
generated by a macro invocation.
The result is #f if id-stx has a
top-level binding and top-level-symbol? is
#f or if id-stx is unbound. An
unbound identifier is typically treated the same as an
identifier whose top-level binding is a variable.
If id-stx is bound to a rename-transformer, the result
from identifier-binding is for the identifier in the
transformer, so that identifier-binding is consistent with
Changed in version 22.214.171.124 of package base: Added the top-level-symbol? argument to report
information on top-level bindings.
, but produces a symbol that
corresponds to the binding. The symbol result is the same for any
identifiers that are free-identifier=?
, but the result may
also be the same for identifiers that are not
(i.e., different symbols imply different
bindings, but the same symbol does not imply the same binding).
When identifier-binding would produce a list, then the second
element of that list is the result that