Changeset 5850


Ignore:
Timestamp:
02/16/04 02:33:35 (17 years ago)
Author:
piso
Message:

readOctal()

File:
1 edited

Legend:

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

    r5830 r5850  
    33 *
    44 * Copyright (C) 2003-2004 Peter Graves
    5  * $Id: Stream.java,v 1.22 2004-02-15 17:49:22 piso Exp $
     5 * $Id: Stream.java,v 1.23 2004-02-16 02:33:35 piso Exp $
    66 *
    77 * This program is free software; you can redistribute it and/or
     
    512512            case 'C':
    513513                return readComplex();
     514            case 'o':
     515            case 'O':
     516                return readOctal();
    514517            case 'p':
    515518            case 'P':
     
    928931    }
    929932
     933    // FIXME rationals
    930934    private LispObject readHex() throws ConditionThrowable
    931935    {
     
    961965    }
    962966
     967    // FIXME Need to support rationals e.g. #o37/15 => 31/13
     968    private LispObject readOctal() throws ConditionThrowable
     969    {
     970        StringBuffer sb = new StringBuffer();
     971        while (true) {
     972            int n = _readChar();
     973            if (n < 0)
     974                break;
     975            char c = (char) n;
     976            if (c >= '0' && c <= '7')
     977                sb.append(c);
     978            else {
     979                _unreadChar(c);
     980                break;
     981            }
     982        }
     983        String s = sb.toString();
     984        try {
     985            return new Fixnum(Integer.parseInt(s, 8));
     986        }
     987        catch (NumberFormatException e) {}
     988        // parseInt() failed.
     989        try {
     990            return new Bignum(new BigInteger(s, 8));
     991        }
     992        catch (NumberFormatException e) {}
     993        // Not a number.
     994        return signal(new LispError());
     995    }
     996
    963997    private char flushWhitespace() throws ConditionThrowable
    964998    {
Note: See TracChangeset for help on using the changeset viewer.