On 10/31/12 Oct 31 -5:26 PM, Boris Smilga wrote:
On Wed, Oct 31, 2012 at 5:07 PM, Sven Emtell <sven.emtell@doremir.com> wrote:
I use cl-json with LispWorks 6.1. When delivering an app, I am trying to minimize the size of it by setting delivery level 5. The cl-json function "decode-json-from-string" does not seem to like this without explicitly keeping the Lisp Reader using the delivery keyword (:keep-lisp-reader). Since the Lisp Reader is unnecessary for the rest of the app, I would like to leave it out when delivering. Any thoughts on this?
The Lisp reader is used on just one occasion, namely, in the function PARSE-NUMBER in src/decoder.lisp (line 417ff., four uses of READ-FROM-STRING). You can easily ditch it by supplying another parser for numbers. For this end, you have three options: A) wait for someone to develop a replacement—without guarantees; B) write a replacement yourself, send a patch to the maintainers, and wait for it to be pushed to the repository; C) customize DECODE-JSON in your own code, by setting or binding the handlers for number token. If you choose option C, I'd suggest you read the relevant chapter in the User Guide (http://common-lisp.net/project/cl-json/#DECODER-CUSTOMIZATION). The handlers in question are represented by the variables *INTEGER-HANDLER* and *REAL-HANDLER*.
Wouldn't it be possible to replace all uses of READ-FROM-STRING here with PARSE-INTEGER? We would have to change the structure here from "try READ-FROM-STRING and if that fails, parse by hand" to just "parse by hand," but I think that would be reasonable. If so, I suggest we simply do that.... I have a patch, but it could use some review and check on multiple lisp implementations. I'll try to get it out today. Best, Robert