I haven't done a very good job of distilling down this bug, but we're experiencing an issue with the GENSYMing done by LET in the presence of macros with the same names as variables bound in LET.
This is the simplest example I could come up with:
(ps
(macrolet ((a (n) `(+ ,n 5))) (let ((a (a 1))) (let ((b (a (- a 4)))) (+ a b))))) "var a1661 = 1 + 5; var b = (a - 4) + 5; a1661 + b;"
You can see here that the symbol A is GENSYM'd since it occurs elsewhere in the LET binding forms, but it seems to be missed in the inner LET form. If the symbol A is not inside the subtraction form, it is caught:
(ps
(macrolet ((a (n) `(+ ,n 5))) (let ((a (a 1))) (let ((b (a a))) (+ a b))))) "var a1662 = 1 + 5; var b = a1662 + 5; a1662 + b;"
- Scott
Here is an even more confusing case where BAR is rewritten inside the + form, but not the -.
(ps (let ((foo (lambda (bar)
(quote bar))) (bar 5)) (+ bar (- 10 bar)))) "var foo = function (bar) { 'bar'; }; var bar28523 = 5; bar28523 + (10 - bar);"
(ps (let ((foo (lambda (bar)
(quote bar))) (bar 5)) (+ bar (+ 10 bar)))) "var foo = function (bar) { 'bar'; }; var bar28524 = 5; bar28524 + (10 + bar28524);"
- Scott
On 4-Jun-09, at 11:10 AM, sblist@me.com wrote:
I haven't done a very good job of distilling down this bug, but we're experiencing an issue with the GENSYMing done by LET in the presence of macros with the same names as variables bound in LET.
This is the simplest example I could come up with:
(ps
(macrolet ((a (n) `(+ ,n 5))) (let ((a (a 1))) (let ((b (a (- a 4)))) (+ a b)))))
"var a1661 = 1 + 5; var b = (a - 4) + 5; a1661 + b;"
You can see here that the symbol A is GENSYM'd since it occurs elsewhere in the LET binding forms, but it seems to be missed in the inner LET form. If the symbol A is not inside the subtraction form, it is caught:
(ps
(macrolet ((a (n) `(+ ,n 5))) (let ((a (a 1))) (let ((b (a a))) (+ a b)))))
"var a1662 = 1 + 5; var b = a1662 + 5; a1662 + b;"
- Scott
parenscript-devel mailing list parenscript-devel@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel
Fixed.
On Thu, Jun 4, 2009 at 11:10 AM, sblist@me.com wrote:
I haven't done a very good job of distilling down this bug, but we're experiencing an issue with the GENSYMing done by LET in the presence of macros with the same names as variables bound in LET.
This is the simplest example I could come up with:
> (ps (macrolet ((a (n) `(+ ,n 5))) (let ((a (a 1))) (let ((b (a (- a 4)))) (+ a b))))) "var a1661 = 1 + 5; var b = (a - 4) + 5; a1661 + b;"
You can see here that the symbol A is GENSYM'd since it occurs elsewhere in the LET binding forms, but it seems to be missed in the inner LET form. If the symbol A is not inside the subtraction form, it is caught:
> (ps (macrolet ((a (n) `(+ ,n 5))) (let ((a (a 1))) (let ((b (a a))) (+ a b))))) "var a1662 = 1 + 5; var b = a1662 + 5; a1662 + b;"
- Scott
parenscript-devel mailing list parenscript-devel@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/parenscript-devel
parenscript-devel@common-lisp.net