[armedbear-devel] readtable-case :invert does not invert uninterned symbols
This prevents loading a newer parenscript, which uses an inverted readtable case via named-readtables: Armed Bear Common Lisp 0.26.0-dev-svn-13273 Java 1.6.0_17 Sun Microsystems Inc. Java HotSpot(TM) 64-Bit Server VM Low-level initialization completed in 0.712 seconds. Startup completed in 3.154 seconds. Type ":help" for a list of available commands. CL-USER(1): (setf (readtable-case *readtable*) :invert) :invert CL-USER(2): (string :cl) "CL" CL-USER(3): (string '#:cl) "cl" Cheers Ole -- Ole Arndt http://www.sugarshark.com
[…] Filed as [ticket #148][1]. Thanks for the report! [1]: http://trac.common-lisp.net/armedbear/ticket/148 -- "A screaming comes across the sky. It has happened before, but there is nothing to compare to it now."
Hello, Ole Arndt <ole@sugarshark.com> writes:
This prevents loading a newer parenscript, which uses an inverted readtable case via named-readtables:
Armed Bear Common Lisp 0.26.0-dev-svn-13273 Java 1.6.0_17 Sun Microsystems Inc. Java HotSpot(TM) 64-Bit Server VM Low-level initialization completed in 0.712 seconds. Startup completed in 3.154 seconds. Type ":help" for a list of available commands.
CL-USER(1): (setf (readtable-case *readtable*) :invert) :invert CL-USER(2): (string :cl) "CL" CL-USER(3): (string '#:cl) "cl"
Mark Evenson <evenson@panix.com> writes:
Filed as [ticket #148][1]. Thanks for the report!
The attached patch fixes the test case above. Loading a newer parenscript still fails while loading the fasl for parenscripts package.lisp. It seems that named-readtables (as it warns about on loading) does not yet work with abcl. Ole -- Ole Arndt http://www.sugarshark.com diff --git a/src/org/armedbear/lisp/Stream.java b/src/org/armedbear/lisp/Stream.java index c641ede..de7cf1a 100644 --- a/src/org/armedbear/lisp/Stream.java +++ b/src/org/armedbear/lisp/Stream.java @@ -543,17 +543,16 @@ public class Stream extends StructureObject { } public LispObject readSymbol() { - final Readtable rt = - (Readtable) Symbol.CURRENT_READTABLE.symbolValue(LispThread.currentThread()); - StringBuilder sb = new StringBuilder(); - _readToken(sb, rt); - return new Symbol(sb.toString()); + return readSymbol((Readtable) Symbol.CURRENT_READTABLE + .symbolValue(LispThread.currentThread())); } public LispObject readSymbol(Readtable rt) { StringBuilder sb = new StringBuilder(); - _readToken(sb, rt); - return new Symbol(sb.toString()); + BitSet flags = _readToken(sb, rt); + + return new Symbol(rt.getReadtableCase() == Keyword.INVERT ? + invert(sb.toString(), flags) : sb.toString()); } public LispObject readStructure(ReadtableAccessor rta) {
On Aug 15, 2011, at 23:39 , Ole Arndt wrote: […]
The attached patch fixes the test case above.
Loading a newer parenscript still fails while loading the fasl for parenscripts package.lisp. It seems that named-readtables (as it warns about on loading) does not yet work with abcl.
[…] Thanks for the patch! A [version based on your patch, along with a unit test has been committed to trunk][r13508]. And I've [opened up a new ticket to track porting named-readtables to abcl][#161], at which I have looked briefly. The named-readtable tests claim to succeed. The main part for porting would be to implement a readtable iterator, although there is a supposedly portable implementation that should work on a ANSI CL. It seems that the parenscript use of named-readtable starts using a readtable that should invert case but the merge from the standard namespace then attempts to use this inversion on symbols like 'SYSTEM by trying for 'system instead. I am unsure of how much work it will take to disentangle the cause here, but I've run out of free time for today. [r13508]: http://trac.common-lisp.net/armedbear/changeset/13508 [#161] http://trac.common-lisp.net/armedbear/ticket/161 -- "A screaming comes across the sky. It has happened before, but there is nothing to compare to it now."
On Tue, Aug 16, 2011 at 12:31 PM, Mark Evenson <evenson@panix.com> wrote:
On Aug 15, 2011, at 23:39 , Ole Arndt wrote:
[…]
The attached patch fixes the test case above.
Loading a newer parenscript still fails while loading the fasl for parenscripts package.lisp. It seems that named-readtables (as it warns about on loading) does not yet work with abcl.
[…]
Thanks for the patch!
A [version based on your patch, along with a unit test has been committed to trunk][r13508].
And I've [opened up a new ticket to track porting named-readtables to abcl][#161], at which I have looked briefly. The named-readtable tests claim to succeed. The main part for porting would be to implement a readtable iterator, although there is a supposedly portable implementation that should work on a ANSI CL. It seems that the parenscript use of named-readtable starts using a readtable that should invert case but the merge from the standard namespace then attempts to use this inversion on symbols like 'SYSTEM by trying for 'system instead. I am unsure of how much work it will take to disentangle the cause here, but I've run out of free time for today.
FWIW, I have been successfully using named-readtables with ABCL for some time (more than a year, I'd say), although my usage of it is pretty basic. So, probably it doesn't really require porting but only fixing some corner-case bugs. If you like, I can devote some of my time this evening to help with analyzing the problem. That said, a readtable iterator would be nice to have; the portable one IIRC enumerates all ASCII (or UTF-8?) characters and asks the readtable about each of them. Alessio
On Aug 16, 2011, at 12:44 , Alessio Stalla wrote:
FWIW, I have been successfully using named-readtables with ABCL for some time (more than a year, I'd say), although my usage of it is pretty basic. So, probably it doesn't really require porting but only fixing some corner-case bugs. If you like, I can devote some of my time this evening to help with analyzing the problem. That said, a readtable iterator would be nice to have; the portable one IIRC enumerates all ASCII (or UTF-8?) characters and asks the readtable about each of them.
That would be great: "all" you have to do is figure out how why parenscript doesn't load via Quicklisp. If we are going to be sprucing up our readtable, I would think the way forward would be 1) provide access to the underlying parts like SBCL (and others) allow 2) make our inspector (via the results Readtable.getparts() implementation) return something a little more meaningful -- "A screaming comes across the sky. It has happened before, but there is nothing to compare to it now."
participants (3)
-
Alessio Stalla
-
Mark Evenson
-
Ole Arndt