Changeset 11428


Ignore:
Timestamp:
12/06/08 19:33:15 (13 years ago)
Author:
ehuelsmann
Message:

Fix LISTEN.1 and LISTEN.3 by checking if a character can actually be read from the input stream, or whether it may be EOF.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/open-external-format/src/org/armedbear/lisp/Stream.java

    r11425 r11428  
    6464  protected boolean isBinaryStream;
    6565
     66  private boolean pastEnd = false;
    6667  private boolean interactive;
    6768  private boolean open = true;
     
    204205  {
    205206    if (! (reader instanceof PushbackReader))
    206         this.reader = new PushbackReader(reader, 2);
     207        this.reader = new PushbackReader(reader, 5);
    207208    else
    208209        this.reader = (PushbackReader)reader;
     
    17371738  public LispObject listen() throws ConditionThrowable
    17381739  {
    1739     return _charReady() ? T : NIL;
     1740    if (pastEnd)
     1741      return NIL;
     1742   
     1743    if (! _charReady())
     1744      return NIL;
     1745   
     1746    int n = _readChar();
     1747    if (n < 0)
     1748      return NIL;
     1749
     1750    _unreadChar(n);
     1751   
     1752    return T;
    17401753  }
    17411754
     
    17851798  protected int _readChar() throws ConditionThrowable
    17861799  {
     1800    if (pastEnd)
     1801      return -1;
     1802   
    17871803    try
    17881804      {
    17891805        int n = reader.read();
    17901806       
    1791         if (n < 0)
     1807        if (n < 0) {
     1808            pastEnd = true;
    17921809            return -1;
     1810        }
    17931811       
    17941812        ++offset;
     
    20122030    try
    20132031      {
    2014         return in.read(); // Reads an 8-bit byte.
     2032        int n = in.read();
     2033        if (n < 0)
     2034          pastEnd = true;
     2035       
     2036        return n; // Reads an 8-bit byte.
    20152037      }
    20162038    catch (IOException e)
     
    20812103        try
    20822104          {
     2105            int n = 0;
    20832106            while (in.available() > 0)
    2084               in.read();
     2107              n = in.read();
     2108           
     2109            if (n < 0)
     2110              pastEnd = true;
    20852111          }
    20862112        catch (IOException e)
Note: See TracChangeset for help on using the changeset viewer.