Opened 15 years ago
Closed 15 years ago
#85 closed defect (fixed)
CL-JSON throws an error under ABCL where SBCL doesn't.
Reported by: | ehuelsmann | Owned by: | Mark Evenson |
---|---|---|---|
Priority: | major | Milestone: | 0.19 |
Component: | compiler | Version: | |
Keywords: | Cc: | ||
Parent Tickets: |
Description
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.
Change History (4)
comment:1 Changed 15 years ago by
comment:2 Changed 15 years ago by
Component: | other → compiler |
---|---|
Owner: | changed from somebody to ehuelsmann |
A bug in the compiler, as EVAL-ing "decoder.lisp" does not show this bug.
comment:3 Changed 15 years ago by
Owner: | changed from ehuelsmann to Mark Evenson |
---|---|
Status: | new → assigned |
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.
comment:4 Changed 15 years ago by
Milestone: | → 0.19 |
---|---|
Resolution: | → fixed |
Status: | assigned → closed |
Fixed in r12526.
Setting to 0.19 milestone as I propose backporting.
Note: See
TracTickets for help on using
tickets.
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: