[racket-dev] strange top-level binding for module-defined identifiers
Ok, here's a much simpler example:
#lang racket
(module foo racket
(provide def-wrap)
(define-syntax-rule (def-wrap)
(begin (define y 1) y)))
(module bar racket
(require (submod ".." foo))
(def-wrap))
In the fully-expanded syntax, the macro stepper suggests that `y` has
no apparent binding.
At this point it seems unlikely that it's a bug, since it happens all
the time, but I still don't understand.
Sam
On Thu, Jul 24, 2014 at 4:08 PM, Sam Tobin-Hochstadt
<samth at cs.indiana.edu> wrote:
> If you take this program (which is a lot like the implementation of
> `racket/fixnum`):
>
> #lang racket/base
>
> (require '#%flfxnum
> racket/private/vector-wraps
> racket/unsafe/ops
> (for-syntax racket/base))
>
> (define-vector-wraps "fxvector"
> "fixnum?" fixnum?
> fxvector? fxvector-length fxvector-ref fxvector-set! make-fxvector
> unsafe-fxvector-ref unsafe-fxvector-set! unsafe-fxvector-length
> in-fxvector*
> in-fxvector
> for/fxvector
> for*/fxvector
> fxvector-copy
> 0)
>
> And run it in the macro stepper with macro hiding off, at the end you
> get a fully-expanded module where the first definition is
> `:fXvector-gen`. However, if you click on this identifier, either in
> the definition or in a subsequent use, it says "Apparent identifier
> binding: none" (which means that `identifier-binding` returns #f,
> which can be confirmed on the expanded syntax).
>
> How can this happen? Is it a bug in something, or a special case that
> I didn't expect?
>
> Sam