Changeset 14357


Ignore:
Timestamp:
01/16/13 12:27:33 (10 years ago)
Author:
Mark Evenson
Message:

Fixes #294: Reader doesn't recognize terminating characters in some cases.

Patch and test by Stas.

Location:
trunk/abcl
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/abcl/src/org/armedbear/lisp/Stream.java

    r14091 r14357  
    740740
    741741    {
    742         switch (c) {
    743         case '"':
    744         case '\'':
    745         case '(':
    746         case ')':
    747         case ',':
    748         case ';':
    749         case '`':
    750             return true;
    751         default:
    752             return rt.isWhitespace(c);
    753         }
     742        byte type = rt.getSyntaxType(c);
     743
     744        return type == Readtable.SYNTAX_TYPE_TERMINATING_MACRO ||
     745                type == Readtable.SYNTAX_TYPE_WHITESPACE;
     746       
    754747    }
    755748
     
    910903                if (rt.isWhitespace(c))
    911904                    break;
    912                 if (c == '(' || c == ')') {
     905                if (rt.getSyntaxType(c) ==
     906                    Readtable.SYNTAX_TYPE_TERMINATING_MACRO) {
    913907                    _unreadChar(c);
    914908                    break;
  • trunk/abcl/test/lisp/abcl/bugs.lisp

    r14355 r14357  
    134134  ((0.0 . 0) (0.0 . 1)))
    135135
     136
     137;; http://trac.common-lisp.net/armedbear/ticket/294
     138(deftest bugs.reader.1
     139    (let ((*readtable* *readtable*))
     140      (set-macro-character #\? (lambda (stream char) (code-char (read stream nil nil t))))
     141      '(a .?0))
     142  (A . #\Null))
     143     
Note: See TracChangeset for help on using the changeset viewer.