#85: CL-JSON throws an error under ABCL where SBCL doesn't. ------------------------+--------------------------------------------------- Reporter: ehuelsmann | Owner: somebody Type: defect | Status: new Priority: major | Milestone: Component: other | Version: Keywords: | ------------------------+--------------------------------------------------- The code is:
(require 'asdf) (asdf:operate 'asdf:load-op :cl-json) (json:decode-json-from-string "{"foo": [10,20,50], "bar": true}")
The error message is: The value 50 is not of type CONS.
I'm using Yason as a work-around, but thought that you guys might want to know, maybe this points to a deeper issue.
#85: CL-JSON throws an error under ABCL where SBCL doesn't. -------------------------+-------------------------------------------------- Reporter: ehuelsmann | Owner: somebody Type: defect | Status: new Priority: major | Milestone: Component: other | Version: Resolution: | Keywords: -------------------------+--------------------------------------------------
Comment(by mevenson):
Indeed it does point to something quite mysterious. After a couple hours of fiddling around, it seems that PROGV forms in nested function calls are somehow "leaking" the binding out to improper references.
I wasn't able to distill a test case outside of CL-JSON, but the following simpler form causes the same type of error:
{{{ (decode-json-from-string "{"foo": [1]}") }}}
#85: CL-JSON throws an error under ABCL where SBCL doesn't. -------------------------+-------------------------------------------------- Reporter: ehuelsmann | Owner: ehuelsmann Type: defect | Status: new Priority: major | Milestone: Component: compiler | Version: Resolution: | Keywords: -------------------------+-------------------------------------------------- Changes (by mevenson):
* owner: somebody => ehuelsmann * component: other => compiler
Comment:
A bug in the compiler, as EVAL-ing "decoder.lisp" does not show this bug.
#85: CL-JSON throws an error under ABCL where SBCL doesn't. -------------------------+-------------------------------------------------- Reporter: ehuelsmann | Owner: mevenson Type: defect | Status: assigned Priority: major | Milestone: Component: compiler | Version: Resolution: | Keywords: -------------------------+-------------------------------------------------- Changes (by mevenson):
* owner: ehuelsmann => mevenson * status: new => assigned
Comment:
Reproduction of the bug away from CL-JSON:
{{{ (defvar *a* "initial")
(defun foo () (progv '(*a*) '((symbol-value '*a*)) (setf *a* "foo") (return-from foo)))
(defun bar () (format t "before: ~A~%" *a*) (foo) (format t "after: ~A~%" *a*))
}}}
Compiling and executing BAR shows {{{
CL-USER> (bar) before: initial after: foo NIL }}}
Which shows that the special binding hasn't been reset.
#85: CL-JSON throws an error under ABCL where SBCL doesn't. -------------------------+-------------------------------------------------- Reporter: ehuelsmann | Owner: mevenson Type: defect | Status: closed Priority: major | Milestone: 0.19 Component: compiler | Version: Resolution: fixed | Keywords: -------------------------+-------------------------------------------------- Changes (by ehuelsmann):
* status: assigned => closed * resolution: => fixed * milestone: => 0.19
Comment:
Fixed in r12526.
Setting to 0.19 milestone as I propose backporting.
armedbear-ticket@common-lisp.net