What do you mean?  
Shouldn’t it go something like this:
(syntax-parameterize ([current-defs (mutable-set)])
  (match-define (sender x) 1)
  (reciever)
  x)
; =>
(syntax-parameterize ([current-defs (mutable-set #’(define x x3)])
  (match-define x3 1)
  (reciever)
  x)
; =>
(syntax-parameterize ([current-defs (mutable-set #’(define x x3)])
  (define x3 (match 1 [x3 x3]))
  (reciever)
  x)
; =>
(syntax-parameterize ([current-defs (mutable-set #’(define x x3)])
  (define x3 (match 1 [x3 x3]))
  (define x x3)
  x)

The match-define form never defines “x” as anything, but the receiver should, 
right?

On Aug 1, 2014, at 8:12 PM, J. Ian Johnson <i...@ccs.neu.edu> wrote:

> Ah, okay, so... this macro expander you give is fundamentally flawed because 
> match-define does an initial parse (which uses the match expander) to get the 
> identifiers it is going to define. So, when you expand to x3 as the match 
> pattern, you end up returning x3 as one of the values that the match-define 
> -> define-values is going to define. It does not ever define "x" as anything 
> because that was just arbitrary syntax that was given to the match expander. 
> This x3 is x3 definition leads to a use-before-initialization error.
> 
> Do you have a different example that doesn't fail in this way?
> -Ian


____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to