freenode/#clasp - IRC Chatlog
Search
7:38:35
beach
I improved the SICL reader so that it handles end-of-file better. I can see two more obstacles for you to use it. One is that the source information should be possible to customize. Currently, it just returns a CONS of the file positions before and after the object read. Another is that what the backquote reader macro returns is not possible to customize. Currently, it uses QUASIQUOTE, UNQUOTE, and UNQUOTE-SPLICING.
7:39:28
beach
I use the improved reader myself now in the SICL boot procedure, so it is able to read all the code that is being loaded during that procedure.
8:07:37
Shinmera
beach: It would be great if it also tracked line and colum numbers, as that's more immediately useful for the user.
8:08:21
beach
Yes, that's what I intend to do for SICL and Second Climacs. But it has to be possible to customize it in the reader.
10:39:41
beach
How about this solution for the source position: I define a special variable *client* (value is NIL by default) which can be bound by client code before calling CST-READ. I also define a generic function SOURCE-POSITION with two arguments, a stream and a client. When source position is wanted, the function is called with the stream and the value of *client*. The default method calls CL:FILE-POSITION.
10:40:00
beach
That way, client code can specialize on the stream class, on the client class, or on both.
10:43:43
Shinmera
Reminds me of a similar strategy I used in my testing framework to allow controlling test evaluation behaviour by the current report the tests should be evaluated with.
14:00:35
beach
I implemented the customization for source information. There is now a variable *CLIENT* and a generic function SOURCE-POSITION in the reader.
14:05:26
beach
I guess for backquote, I need three generic functions: BACKQUOTE, UNQUOTE, and UNQUOTE-SPLICING. Each one takes a form and wraps it according to the client way of doing it.
14:28:39
beach
OK, I think we have a fairly complete reader that can return CSTs with source information. I do think we should extract it to a separate repository, document it, and add a test suite.
14:52:38
Shinmera
beach: Does it have a system that lets users intervene when symbols are about to be interned or looked up?
14:53:32
Shinmera
And by users I mean people writing libraries and applications, not implementation writers.
14:55:24
Shinmera
Would need something like a series of functions that can be run until one of them "accepts" the token for some value.
14:58:56
beach
Well, I should definitely add the CLIENT parameter to INTERPRET-TOKEN now that I have it in other functions.