This is an old bug I spotted before, it can be solved by inserting an extra let in the expansion aka (macroexpand '(match a (par code ...)) -> '(let ((arg a)) ....) This is missing from atoms in match so I added that there and the missbehavior dissapears. see the git diffed patch in this post. On Wed, Sep 21, 2011 at 5:34 AM, Andy Wingo wrote: > Hi, > > Try this: > > (use-modules (language tree-il) (ice-9 match)) > (define foo (parse-tree-il '(let-values (apply (lambda () (lambda-case > ((() #f #f #f () ()) (apply (primitive values) (const 1) (const 2)))))) > (lambda-case (((a b) #f #f #f () (#{a 134390}# #{b 134391}#)) (apply > (primitive list) (lexical a #{a 134390}#) (lexical b #{b 134391}#))))))) > (match foo > (($ src exp > ($ src2 req #f #f #f () gensyms body #f)) > #t) > (_ > #f)) > => #t > > (match foo > (($ src foo ;; <- rename "exp" to "foo" > ($ src2 req #f #f #f () gensyms body #f)) > #t) > (_ > #f)) > => #f > > I tried to reduce this case a bit, but didn't succeed directly, and I > need to move on. But what is the deal here? > > Andy > -- > http://wingolog.org/ > > > >