Hi folks,
We have some code that fails during ps-macroexpansion time as a result of the following change in src/utils.lisp:
Previous definition (works):
(defun flatten (x &optional acc) (cond ((null x) acc) ((atom x) (cons x acc)) (t (flatten (car x) (flatten (cdr x) acc)))))
Current definition (crashes):
(defun flatten (x) (if (atom x) (list x) (mapcan #'flatten x)))
The failing call in the backtrace is (FLATTEN (IE . 6)), with a type error: 6 is not of type LIST. This is expected, given that current definition of FLATTEN calls MAPCAN.
FLATTEN is only being called when the PS macro that fails to expand, BROWSER-CASE, is wrapped in a LET form:
(ps (browser-case '(:ie . 6) 'foo :default 'bar))
"'bar';"
(ps (let ((baz (browser-case '(:ie . 6) 'foo :default 'bar)))
baz))
; Evaluation aborted. (Failure)
- Scott
I restored the previous definition of flatten. Thanks for the bug report!
Vladimir
On Wed, Jun 3, 2009 at 7:39 PM, sblist@me.com wrote:
Hi folks,
We have some code that fails during ps-macroexpansion time as a result of the following change in src/utils.lisp:
Previous definition (works):
(defun flatten (x &optional acc) (cond ((null x) acc) ((atom x) (cons x acc)) (t (flatten (car x) (flatten (cdr x) acc)))))
Current definition (crashes):
(defun flatten (x) (if (atom x) (list x) (mapcan #'flatten x)))
The failing call in the backtrace is (FLATTEN (IE . 6)), with a type error: 6 is not of type LIST. This is expected, given that current definition of FLATTEN calls MAPCAN.
FLATTEN is only being called when the PS macro that fails to expand, BROWSER-CASE, is wrapped in a LET form:
> (ps (browser-case '(:ie . 6) 'foo :default 'bar)) "'bar';"
> (ps (let ((baz (browser-case '(:ie . 6) 'foo :default 'bar))) baz))
; Evaluation aborted. (Failure)
- 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