Changeset 8475


Ignore:
Timestamp:
02/05/05 19:54:56 (16 years ago)
Author:
piso
Message:

Changes to fix SET-SYNTAX-FROM-CHAR test failures.

File:
1 edited

Legend:

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

    r8473 r8475  
    33 *
    44 * Copyright (C) 2003-2005 Peter Graves
    5  * $Id: Stream.java,v 1.105 2005-02-05 18:41:50 piso Exp $
     5 * $Id: Stream.java,v 1.106 2005-02-05 19:54:56 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    537537    }
    538538
    539     private String readMultipleEscape() throws ConditionThrowable
     539    private String readMultipleEscape(Readtable rt) throws ConditionThrowable
    540540    {
    541541        StringBuffer sb = new StringBuffer();
     
    545545                break;
    546546            char c = (char) n;
    547             if (c == '\\') {
     547            byte attr = rt.getAttribute(c);
     548            if (attr == Readtable.ATTR_SINGLE_ESCAPE) {
    548549                n = _readChar();
    549550                if (n < 0) {
     
    555556                continue;
    556557            }
    557             if (c == '|')
     558            if (attr == Readtable.ATTR_MULTIPLE_ESCAPE)
    558559                break;
    559560            sb.append(c);
     
    690691            Debug.assertTrue(sb.length() == 1);
    691692            char c = sb.charAt(0);
    692             rt.checkInvalid(c);
    693             if (c == '|') {
    694                 sb.setLength(0);
    695                 sb.append(readMultipleEscape());
    696                 flags = new BitSet(sb.length());
    697                 for (int i = sb.length(); i-- > 0;)
    698                     flags.set(i);
    699             } else if (c == '\\') {
     693            byte attr = rt.getAttribute(c);
     694            if (attr == Readtable.ATTR_SINGLE_ESCAPE) {
    700695                int n = _readChar();
    701696                if (n < 0) {
     
    707702                flags = new BitSet(1);
    708703                flags.set(0);
     704            } else if (attr == Readtable.ATTR_MULTIPLE_ESCAPE) {
     705                sb.setLength(0);
     706                sb.append(readMultipleEscape(rt));
     707                flags = new BitSet(sb.length());
     708                for (int i = sb.length(); i-- > 0;)
     709                    flags.set(i);
     710            } else if (rt.isInvalid(c)) {
     711                rt.checkInvalid(c); // Signals a reader-error.
    709712            } else if (readtableCase == Keyword.UPCASE) {
    710713                sb.setCharAt(0, Utilities.toUpperCase(c));
     
    723726                break;
    724727            }
    725             if (rt.getAttribute(c) == Readtable.ATTR_TERMINATING_MACRO) {
     728            byte attribute = rt.getAttribute(c);
     729            if (attribute == Readtable.ATTR_TERMINATING_MACRO) {
    726730                _unreadChar(c);
    727731                break;
    728732            }
    729733            rt.checkInvalid(c);
    730             switch (c) {
    731                 case '\\':
    732                     n = _readChar();
    733                     if (n < 0)
    734                         break loop;
    735                     sb.append((char)n);
    736                     if (flags == null)
    737                         flags = new BitSet(sb.length());
    738                     flags.set(sb.length() - 1);
     734            if (attribute == Readtable.ATTR_SINGLE_ESCAPE) {
     735                n = _readChar();
     736                if (n < 0)
    739737                    break;
    740                 case '|': {
    741                     int begin = sb.length();
    742                     sb.append(readMultipleEscape());
    743                     int end = sb.length();
    744                     if (flags == null)
    745                         flags = new BitSet(sb.length());
    746                     for (int i = begin; i < end; i++)
    747                         flags.set(i);
    748                     break;
    749                 }
    750                 default:
    751                     if (readtableCase == Keyword.UPCASE)
    752                         c = Utilities.toUpperCase(c);
    753                     else if (readtableCase == Keyword.DOWNCASE)
    754                         c = Utilities.toLowerCase(c);
    755                     sb.append(c);
    756             }
     738                sb.append((char)n);
     739                if (flags == null)
     740                    flags = new BitSet(sb.length());
     741                flags.set(sb.length() - 1);
     742                continue;
     743            }
     744            if (attribute == Readtable.ATTR_MULTIPLE_ESCAPE) {
     745                int begin = sb.length();
     746                sb.append(readMultipleEscape(rt));
     747                int end = sb.length();
     748                if (flags == null)
     749                    flags = new BitSet(sb.length());
     750                for (int i = begin; i < end; i++)
     751                    flags.set(i);
     752            }
     753            if (readtableCase == Keyword.UPCASE)
     754                c = Utilities.toUpperCase(c);
     755            else if (readtableCase == Keyword.DOWNCASE)
     756                c = Utilities.toLowerCase(c);
     757            sb.append(c);
    757758        }
    758759        return flags;
Note: See TracChangeset for help on using the changeset viewer.